Como Modificar o Texto Automaticamente
Como Modificar o Texto Automaticamente
></label></th>
<td>
<select name="default_role" id="default_role"><?php
wp_dropdown_roles( get_option( 'default_role' ) ); ?></select>
</td>
</tr>
<?php
}
$languages = get_available_languages();
$translations = wp_get_available_translations();
if ( ! is_multisite() && defined( 'WPLANG' ) && '' !== WPLANG && 'en_US' !== WPLANG
&& ! in_array( WPLANG, $languages, true ) ) {
$languages[] = WPLANG;
}
if ( ! empty( $languages ) || ! empty( $translations ) ) {
?>
<tr>
<th scope="row"><label for="WPLANG"><?php _e( 'Site Language' ); ?
><span class="dashicons dashicons-translation"
aria-hidden="true"></span></label></th>
<td>
<?php
$locale = get_locale();
if ( ! in_array( $locale, $languages, true ) ) {
$locale = '';
}
wp_dropdown_languages(
array(
'name' => 'WPLANG',
'id' => 'WPLANG',
'selected' => $locale,
'languages' => $languages,
'translations' => $translations,
'show_available_translations' =>
current_user_can( 'install_languages' ) && wp_can_install_language_pack(),
)
);
$check_zone_info = true;
?>
<th scope="row"><label for="timezone_string"><?php _e( 'Timezone' );
?></label></th>
<td>
<p class="timezone-info">
<span id="utc-time">
<?php
printf(
/* translators: %s: UTC time. */
__( 'Universal time is %s.' ),
'<code>' . date_i18n( $timezone_format, false, true ) . '</code>'
);
?>
</span>
<?php if ( get_option( 'timezone_string' ) || ! empty( $current_offset ) ) : ?>
<span id="local-time">
<?php
printf(
/* translators: %s: Local time. */
__( 'Local time is %s.' ),
'<code>' . date_i18n( $timezone_format ) . '</code>'
);
?>
</span>
<?php endif; ?>
</p>
if ( $dst ) {
_e( 'This timezone is currently in daylight saving time.' );
} else {
_e( 'This timezone is currently in standard time.' );
}
?>
<br />
<?php
if ( in_array( $tzstring,
timezone_identifiers_list( DateTimeZone::ALL_WITH_BC ), true ) ) {
$transitions = timezone_transitions_get( timezone_open( $tzstring ),
time() );
</tr>
<tr>
<th scope="row"><?php _e( 'Date Format' ); ?></th>
<td>
<fieldset><legend class="screen-reader-text"><span>
<?php
/* translators: Hidden accessibility text. */
_e( 'Date Format' );
?>
</span></legend>
<?php
/**
* Filters the default date formats.
*
* @since 2.7.0
* @since 4.0.0 Added ISO date standard YYYY-MM-DD format.
*
* @param string[] $default_date_formats Array of default date formats.
*/
$date_formats = array_unique( apply_filters( 'date_formats', array( __( 'F j,
Y' ), 'Y-m-d', 'm/d/Y', 'd/m/Y' ) ) );
$custom = true;
$custom = true;
</div>
� #ʸ� 6#� � ##J˲#� M� � � #ƨI� #� ɯu� 9BCU� � *&� � � 0P� 2� � ##� T)6� `� X� G� � 5##� ##>e4
gT+#VNQ� � eV� � YFv#.B#� � #u� � � #P#Ta# P� #'0� 4jS� � � z� H� ##
� � #� OQ^� !� r6@� � 4N#� db2� � � #� � � Q#r� � N� i� � M� J� #c� u� n:+#e�
� � ,� #� � � � ^� � #ƊZ<� � � 8V� #<� � ## 6� � B�̒ #frP� $� � 3� � � س
9� MM� N#֓��}� � � &� [� #p#N� ܣ:#� � !aP##A#8#+#� KD&̣#� \
P*þ� a6[� #� � #S� p� #P#� #S� Ě� ###� 9� B� Sh� #+##^##� � f}� � � X(K� � � n� � � =B� ,l� #\,
M+##r� #� #R4+ � � � V� �څ#� iW� � � #HW� � ##uZ� d� #� C� #� V(#� � #S$#p� #GK� C#!
i� � � � � � ~F� � z#� 娅�![� g 쪉�PI� #� � � ij� #"@]� � {� '!
� i� � T##v� #� !
X� #� WxT� #A� &l� #M� .� S� � B)x� � � 6~� ^IV� `� MR۩d� ##� 7� � ]1� #I� 9#� g� #$� (� � #HVѪ
� תm#� B� 9#;� V#B=I� � #� ,� � l&� c� � � #Έ#� i##ʫB#� (ڏK� >?.�ݗ#� M;� #� #%##}#� !
� � U� I� #u#� #� � gWxF9� � p� #� '4� � U� ^� R#� � gA#� � � Y� � >� � #� CHT#� � � BA� W� X#^�
� #j� Voe^� HM� >�ؕ`� #� � � #az� k:� c#�� 0 � Bu� (� F'#5P� 23� � )#/#ʿ+� aY(@� W#
j#� ###� � 8#� N� U+� � O6� ơ #� #� � P>V� XV� #N
Hm#"*#"e#F� #3#F� 2� #� � � D� ł� � Ekm#� ##� s� J5� #
� ##� 9� � S� #͟U#5#� � � #l� #� p#$##tNQ� #� � &ߔ(`#$� #D� J� `##� :� ########0###� OS/
2P#Y� ##E� ###VPCLT� }� >##F####6cmap]� %P##<####dcvt
a� #� ###� ###"fpgm� 3� O###� ####glyf� � ###l##3� hdmx#\]� ##?
t###Hhead� W� .##FL###6hhea#B#� ##F� ###$hmtx� � #� ##9� ###� loca#
<� ##8 ###� maxp#� #W##F� ### nameM!� w###� ###� post �
###;,###� prep|
� )c#######R#####&#########H#$###########y###########� #########$#� #########$#� ###
###### ########### #K#########6#� #########$###########
#l###########� ###########� ###########� #######################;###########k#####
###H#$##### #####y##### #####� ##### ###$#� ##### ###$#� ##### ### ####### ###
#K##### ###6#� designed by Dieter Schumacher � 1998#d#e#s#i#g#n#e#d# #b#y#
#D#i#e#t#e#r# #S#c#h#u#m#a#c#h#e#r# #� # #1#9#9#8Square Unique#S#q#u#a#r#e#
#U#n#i#q#u#eThin#T#h#i#nSquare Unique Thin#S#q#u#a#r#e# #U#n#i#q#u#e#
#T#h#i#nSquare Unique Thin#S#q#u#a#r#e# #U#n#i#q#u#e# #T#h#i#nGraf X press
1.1#G#r#a#f# #X# #p#r#e#s#s#
#1#.#1SquareUniqueThin#S#q#u#a#r#e#U#n#i#q#u#e#T#h#i#n� 1998 by Dieter
Schumacher#� # #1#9#9#8# #b#y# #D#i#e#t#e#r# #S#c#h#u#m#a#c#h#e#r##@##,vE � #
%E#ah##h`D-###/###<#"#<#(#%###n#� #9#� #=Z]######@#
##
####
###########
#######Fv/7##?<?<#� <#� <#/#<� <� .#� #� #� #.....#10#Ih� ####Iha� @RX8#7� ##� � 8Y7!#!
5##!5!####� � #� � ## <=B#� ##<� � ####� � # #####g@*#
@
############
######## ####
######Fv/7##?<?<#� <#� </<� <#/<� #<......#10#Ih� ###
Iha� @RX8#7� #
� � 8Y#5!#!5!#!5!##� � #i� ## #=#>+#><� � ######## ####j@.###@#
#
#### ##############
############Fv/7##?<?</#<� #<#/<� </#<� #<..#..10#Ih� ####Iha� @RX8#7� ##� � 8Y####!
#3#!53#!##� +� � <#>+#{#{� � #z#� � � � � +####� � # #####h@,#
@#####
### ##########
################Fv/7##?<?<#� <#� </<� <#/#<� </#<� <#10#Ih� ###
Iha� @RX8#7� #
� � 8Y#5!#!#!#!#!##� � ## � ##� #=#>#� ;� � Y#####� � # #######h@,#
@#
############## #########
##########Fv/7##?<?<#� <#� </<� <#/#<� </<� #<#10#Ih� ###
Iha� @RX8#7� #
� � 8Y##!#!#!##!#!# � ##� <� X#� ## ;� � Y#{� � #####� � # #####\
@"###@#############################Fv/7##?<?
<#� <#� .#� #� #� #......#10#Ih� ####Iha� @RX8#7� ##� � 8Y###!5!#A.#� � #####� <@#######
#########h@,#
@#
############## #####
##############Fv/7##?<?<#� <#� </<� <#/<� #</<� #<#10#Ih� ###
Iha� @RX8#7� #
� � 8Y1#!##!#!#!#!# <� X#� � X#� ##� � #� � +� � ####� � # #######h@,#
@#########
##########
#### ###########Fv/7##?<?<#� <#� </<� <#/#<� </<� #<#10#Ih� ###
Iha� @RX8#7� #
� � 8Y#5!#!#!##!#!#� � ## <� X#� #=#>#� � � #� � ########� #� #####U@!###@
###Fv/7##?<?<#� </<� <#� </<� <#/<� <� #<� <#� #<� <#10#Ih� ####Iha� @RX8#7� ##� � 8Y##!
#!#!5!5!##53#<#� � � #� � ## � (� #� � <#� � <� � #==#####� � # #######e@+#
@#########
##########
##############Fv/7##?#<?<#� </<� <#/<� #</<� #<#10#Ih� ###
Iha� @RX8#7� #
� � 8Y##!###!##!#!#� � X<# <� X#� ##{� � # � � #� � ####� � # #########� @W###@###
### ###### #
#
######################
######### #########
#####
##########Fv/7##?<?<#� <#� </<� <#/#<� #</
<� #<� .#� #� #ć.#� #� #ć.#� #� #� #.#10#Ih� ####Iha� @RX8#7� ##� � 8Y#!#!######'!#!7#'!
#!7#:� � #0� ZZ<� � ##K]]� #� ## N� 5E� � #\9� � 6� 7� � :#####� � # #####V@ ###@
#####
###
##
# # ############ ###
# ###########Fv/7##?#<?
#<#� .#� #� #� #� #� #� #ć.#� #� #� #� #� #� #� #......#..10#Ih� ###Iha� @RX8#7� #� � 8Y
##&### #3 #3#� #g4P� � 2#g� � 2#O#M4#� � pY##� � #� #� � � #s####� � #####
#s@2#
#######
##
# ############
# ###########Fv/7##?#<?
#<#� .#� #� #� #� #� #� #ć.#� #� #� #� #� #� #� #......#..10#Ih� ###Iha� @RX8#7� #
� � 8Y###&'####3##3#%� #;� � #� � #� � ###� � A� � ####� � # #####� � #!#/# #m@,#
@# # ######### #############
##########Fv/7##?<?#<#/<� <� .#� #� #ć.#� #� #� #..#.10#Ih� ###
Iha� @RX8#7� #
� � 8Y#####3#673###� #� Y� ###� � ###,� � d� ####� � #1#/# #m@,#
###################################################################################
################################################################################\
#Y#Z#[#]#^#_#`###8#########
#%#?#]#z#� #� #� #� #� #� #� #� � ### #'#A#a#� #� #� #� #� #� #�
#� � #############################$#T#� #� #� #� #� #� #� #� #� � ############# #
###
######################################
#!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?
#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_#`###########d
###################################################################################
###### ## #
####### #########
##### # #
# #
###########################
##
########## ########
#####
#
# ####################################
#######
########
#####
#
#####
#
###########################
##
#####################################
#
#############################################################
########
#####
#
#
# # ### # # # # #
##### ##############################
#
### ############# #
######################################################
###
####### ##### ###### ################# #################################
#
####
###
##
#
##
########### #####
###### #################
####################################################################
#####
######
#################
###############################
#
##
#
#
#
#
#
#####
#######
############
#################################################
#
###
######################################################################
################
##### ##################
##########################################################
####
#####
# ###############
############################## #####################################
####
#####
# ########################################### #
if ( ! wp_delete_attachment( $post_id_del ) ) {
wp_die( __( 'Error in deleting the attachment.' ) );
}
}
$location = add_query_arg( 'deleted', count( $post_ids ),
$location );
break;
default:
$screen = get_current_screen()->id;
wp_redirect( $location );
exit;
} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) {
wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ),
wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
exit;
}
$wp_list_table->prepare_items();
wp_enqueue_script( 'media' );
add_screen_option( 'per_page' );
get_current_screen()->add_help_tab(
array(
'id' => 'overview',
'title' => __( 'Overview' ),
'content' =>
'<p>' . __( 'All the files you’ve uploaded are listed
in the Media Library, with the most recent uploads listed first. You can use the
Screen Options tab to customize the display of this screen.' ) . '</p>' .
'<p>' . __( 'You can narrow the list by file type/status or
by date using the dropdown menus above the media table.' ) . '</p>' .
'<p>' . __( 'You can view your media in a simple visual
grid or a list with columns. Switch between these views using the icons to the left
above the media.' ) . '</p>',
)
);
get_current_screen()->add_help_tab(
array(
'id' => 'actions-links',
'title' => __( 'Available Actions' ),
'content' =>
'<p>' . __( 'Hovering over a row reveals action link<?php
/**
* REST API: WP_REST_Application_Passwords_Controller class
*
* @package WordPress
* @subpackage REST_API
* @since 5.6.0
*/
/**
* Core class to access a user's application passwords via the REST API.
*
* @since 5.6.0
*
* @see WP_REST_Controller
*/
class WP_REST_Application_Passwords_Controller extends WP_REST_Controller {
/**
* Application Passwords controller constructor.
*
* @since 5.6.0
*/
public function __construct() {
$this->namespace = 'wp/v2';
$this->rest_base = 'users/(?P<user_id>(?:[\d]+|me))/application-
passwords';
}
/**
* Registers the REST API routes for the application passwords controller.
*
* @since 5.6.0
*/
public function register_routes() {
register_rest_route(
$this->namespace,
'/' . $this->rest_base,
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_items' ),
'permission_callback' => array( $this,
'get_items_permissions_check' ),
'args' => $this-
>get_collection_params(),
),
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => array( $this,
'create_item' ),
'permission_callback' => array( $this,
'create_item_permissions_check' ),
'args' => $this-
>get_endpoint_args_for_item_schema(),
),
array(
'methods' => WP_REST_Server::DELETABLE,
'callback' => array( $this, 'delete_items'
),
'permission_callback' => array( $this,
'delete_items_permissions_check' ),
),
'schema' => array( $this, 'get_public_item_schema' ),
)
);
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/introspect',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this,
'get_current_item' ),
'permission_callback' => array( $this,
'get_current_item_permissions_check' ),
'args' => array(
'context' => $this-
>get_context_param( array( 'default' => 'view' ) ),
),
),
'schema' => array( $this, 'get_public_item_schema' ),
)
);
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/(?P<uuid>[\w\-]+)',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_item' ),
'permission_callback' => array( $this,
'get_item_permissions_check' ),
'args' => array(
'context' => $this-
>get_context_param( array( 'default' => 'view' ) ),
),
),
array(
'methods' => WP_REST_Server::EDITABLE,
'callback' => array( $this,
'update_item' ),
'permission_callback' => array( $this,
'update_item_permissions_check' ),
'args' => $this-
>get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
),
array(
'methods' => WP_REST_Server::DELETABLE,
'callback' => array( $this,
'delete_item' ),
'permission_callback' => array( $this,
'delete_item_permissions_check' ),
),
'schema' => array( $this, 'get_public_item_schema' ),
)
);
}
/**
* Checks if a given request has access to get application passwords.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has read access, WP_Error object
otherwise.
*/
public function get_items_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Retrieves a collection of application passwords.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function get_items( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
$passwords =
WP_Application_Passwords::get_user_application_passwords( $user->ID );
$response = array();
/**
* Checks if a given request has access to get a specific application
password.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has read access for the item,
WP_Error object otherwise.
*/
public function get_item_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Retrieves one application password from the collection.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function get_item( $request ) {
$password = $this->get_application_password( $request );
if ( is_wp_error( $password ) ) {
return $password;
}
/**
* Checks if a given request has access to create application passwords.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has access to create items,
WP_Error object otherwise.
*/
public function create_item_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Creates an application password.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function create_item( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
if ( is_wp_error( $prepared ) ) {
return $prepared;
}
$created =
WP_Application_Passwords::create_new_application_password( $user->ID,
wp_slash( (array) $prepared ) );
if ( is_wp_error( $created ) ) {
return $created;
}
$password = $created[0];
$item =
WP_Application_Passwords::get_user_application_password( $user->ID, $created[1]
['uuid'] );
$item['new_password'] =
WP_Application_Passwords::chunk_password( $password );
$fields_update = $this-
>update_additional_fields_for_object( $item, $request );
if ( is_wp_error( $fields_update ) ) {
return $fields_update;
}
/**
* Fires after a single application password is completely created or
updated via the REST API.
*
* @since 5.6.0
*
* @param array $item Inserted or updated password item.
* @param WP_REST_Request $request Request object.
* @param bool $creating True when creating an application
password, false when updating.
*/
do_action( 'rest_after_insert_application_password', $item, $request,
true );
$response->set_status( 201 );
$response->header( 'Location', $response->get_links()['self'][0]
['href'] );
return $response;
}
/**
* Checks if a given request has access to update application passwords.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has access to create items,
WP_Error object otherwise.
*/
public function update_item_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Updates an application password.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function update_item( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
if ( is_wp_error( $item ) ) {
return $item;
}
if ( is_wp_error( $prepared ) ) {
return $prepared;
}
if ( is_wp_error( $saved ) ) {
return $saved;
}
if ( is_wp_error( $fields_update ) ) {
return $fields_update;
}
/**
* Checks if a given request has access to delete all application passwords
for a user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has access to delete the item,
WP_Error object otherwise.
*/
public function delete_items_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Deletes all application passwords for a user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function delete_items( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
$deleted =
WP_Application_Passwords::delete_all_application_passwords( $user->ID );
if ( is_wp_error( $deleted ) ) {
return $deleted;
}
/**
* Checks if a given request has access to delete a specific application
password for a user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has access to delete the item,
WP_Error object otherwise.
*/
public function delete_item_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Deletes an application password for a user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function delete_item( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
if ( is_wp_error( $deleted ) ) {
return $deleted;
}
/**
* Checks if a given request has access to get the currently used application
password for a user.
*
* @since 5.7.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error True if the request has read access for the item,
WP_Error object otherwise.
*/
public function get_current_item_permissions_check( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Retrieves the application password being currently used for authentication
of a user.
*
* @since 5.7.0
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function get_current_item( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
$uuid = rest_get_authenticated_app_password();
if ( ! $uuid ) {
return new WP_Error(
'rest_no_authenticated_app_password',
__( 'Cannot introspect application password.' ),
array( 'status' => 404 )
);
}
$password =
WP_Application_Passwords::get_user_application_password( $user->ID, $uuid );
if ( ! $password ) {
return new WP_Error(
'rest_application_password_not_found',
__( 'Application password not found.' ),
array( 'status' => 500 )
);
}
/**
* Performs a permissions check for the request.
*
* @since 5.6.0
* @deprecated 5.7.0 Use `edit_user` directly or one of the specific meta
capabilities introduced in 5.7.0.
*
* @param WP_REST_Request $request
* @return true|WP_Error
*/
protected function do_permissions_check( $request ) {
_deprecated_function( __METHOD__, '5.7.0' );
if ( is_wp_error( $user ) ) {
return $user;
}
return true;
}
/**
* Prepares an application password for a create or update operation.
*
* @since 5.6.0
*
* @param WP_REST_Request $request Request object.
* @return object|WP_Error The prepared item, or WP_Error object on failure.
*/
protected function prepare_item_for_database( $request ) {
$prepared = (object) array(
'name' => $request['name'],
);
/**
* Filters an application password before it is inserted via the REST
API.
*
* @since 5.6.0
*
* @param stdClass $prepared An object representing a single
application password prepared for inserting or updating the database.
* @param WP_REST_Request $request Request object.
*/
return apply_filters( 'rest_pre_insert_application_password',
$prepared, $request );
}
/**
* Prepares the application password for the REST response.
*
* @since 5.6.0
*
* @param array $item WordPress representation of the item.
* @param WP_REST_Request $request Request object.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error
object on failure.
*/
public function prepare_item_for_response( $item, $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
$prepared = array(
'uuid' => $item['uuid'],
'app_id' => empty( $item['app_id'] ) ? '' : $item['app_id'],
'name' => $item['name'],
'created' => gmdate( 'Y-m-d\TH:i:s', $item['created'] ),
'last_used' => $item['last_used'] ? gmdate( 'Y-m-d\TH:i:s',
$item['last_used'] ) : null,
'last_ip' => $item['last_ip'] ? $item['last_ip'] : null,
);
if ( isset( $item['new_password'] ) ) {
$prepared['password'] = $item['new_password'];
}
/**
* Filters the REST API response for an application password.
*
* @since 5.6.0
*
* @param WP_REST_Response $response The response object.
* @param array $item The application password array.
* @param WP_REST_Request $request The request object.
*/
return apply_filters( 'rest_prepare_application_password', $response,
$item, $request );
}
/**
* Prepares links for the request.
*
* @since 5.6.0
*
* @param WP_User $user The requested user.
* @param array $item The application password.
* @return array The list of links.
*/
protected function prepare_links( WP_User $user, $item ) {
return array(
'self' => array(
'href' => rest_url(
sprintf(
'%s/users/%d/application-passwords/%s',
$this->namespace,
$user->ID,
$item['uuid']
)
),
),
);
}
/**
* Gets the requested user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request The request object.
* @return WP_User|WP_Error The WordPress user associated with the request,
or a WP_Error if none found.
*/
protected function get_user( $request ) {
if ( ! wp_is_application_passwords_available() ) {
return new WP_Error(
'application_passwords_disabled',
__( 'Application passwords are not available.' ),
array( 'status' => 501 )
);
}
$id = $request['user_id'];
$user = wp_get_current_user();
} else {
$id = (int) $id;
if ( $id <= 0 ) {
return $error;
}
if ( ! wp_is_application_passwords_available_for_user( $user ) ) {
return new WP_Error(
'application_passwords_disabled_for_user',
__( 'Application passwords are not available for your
account. Please contact the site administrator for assistance.' ),
array( 'status' => 501 )
);
}
return $user;
}
/**
* Gets the requested application password for a user.
*
* @since 5.6.0
*
* @param WP_REST_Request $request The request object.
* @return array|WP_Error The application password details if found, a
WP_Error otherwise.
*/
protected function get_application_password( $request ) {
$user = $this->get_user( $request );
if ( is_wp_error( $user ) ) {
return $user;
}
$password =
WP_Application_Passwords::get_user_application_password( $user->ID,
$request['uuid'] );
if ( ! $password ) {
return new WP_Error(
'rest_application_password_not_found',
__( 'Application password not found.' ),
array( 'status' => 404 )
);
}
return $password;
}
/**
* Retrieves the query params for the collections.
*
* @since 5.6.0
*
* @return array Query parameters for the collection.
*/
public function get_collection_params() {
return array(
'context' => $this->get_context_param( array( 'default' => 'view'
) ),
);
}
/**
* Retrieves the application password's schema, conforming to JSON Schema.
*
* @since 5.6.0
*
* @return array Item schema data.
*/
public function get_item_schema() {
if ( $this->schema ) {
return $this->add_additional_fields_schema( $this->schema );
}
$this->schema = array(
'$schema' => 'http://json-schema.org/draft-04/schema#',
'title' => 'application-password',
'type' => 'object',
'properties' => array(
'uuid' => array(
'description' => __( 'The unique identifier for the
application password.' ),
'type' => 'string',
'format' => 'uuid',
'context' => array( 'view', 'edit', 'embed' ),
'readonly' => true,
),
'app_id' => array(
'description' => __( 'A UUID provided by the
application to uniquely identify it. It is recommended to use an UUID v5 with the
URL or DNS namespace.' ),
'type' => 'string',
'format' => 'uuid',
'context' => array( 'view', 'edit', 'embed' ),
),
'name' => array(
'description' => __( 'The name of the application
password.' ),
'type' => 'string',
'required' => true,
'context' => array( 'view', 'edit', 'embed' ),
'minLength' => 1,
'pattern' => '.*\S.*',
),
'password' => array(
'description' => __( 'The generated password. Only
available after adding an application.' ),
'type' => 'string',
'context' => array( 'edit' ),
'readonly' => true,
),
'created' => array(
'description' => __( 'The GMT date the application
password was created.' ),
'type' => 'string',
'format' => 'date-time',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'last_used' => array(
'description' => __( 'The GMT date the application
password was last used.' ),
'type' => array( 'string', 'null' ),
'format' => 'date-time',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'last_ip' => array(
'description' => __( 'The IP address the application
password was last used by.' ),
'type' => array( 'string', 'null' ),
'format' => 'ip',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
);
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <[email protected]> //
// available at https://github.com/JamesHeinrich/getID3 //
// or https://www.getid3.org //
// or http://getid3.sourceforge.net //
// see readme.txt for more details //
/////////////////////////////////////////////////////////////////
// //
// module.audio.flac.php //
// module for analyzing FLAC and OggFLAC audio files //
// dependencies: module.audio.ogg.php //
// ///
/////////////////////////////////////////////////////////////////
/**
* @tutorial http://flac.sourceforge.net/format.html
*/
class getid3_flac extends getid3_handler
{
const syncword = 'fLaC';
/**
* @return bool
*/
public function Analyze() {
$info = &$this->getid3->info;
$this->fseek($info['avdataoffset']);
$StreamMarker = $this->fread(4);
if ($StreamMarker != self::syncword) {
return $this->error('Expecting
"'.getid3_lib::PrintHexBytes(self::syncword).'" at offset '.
$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($StreamMarker).'"');
}
$info['fileformat'] = 'flac';
$info['audio']['dataformat'] = 'flac';
$info['audio']['bitrate_mode'] = 'vbr';
$info['audio']['lossless'] = true;
/**
* @return bool
*/
public function parseMETAdata() {
$info = &$this->getid3->info;
do {
$BlockOffset = $this->ftell();
$BlockHeader = $this->fread(4);
$LBFBT = getid3_lib::BigEndian2Int(substr($BlockHeader,
0, 1)); // LBFBT = LastBlockFlag + BlockType
$LastBlockFlag = (bool) ($LBFBT & 0x80);
$BlockType = ($LBFBT & 0x7F);
$BlockLength = getid3_lib::BigEndian2Int(substr($BlockHeader,
1, 3));
$BlockTypeText = self::metaBlockTypeLookup($BlockType);
$info['flac'][$BlockTypeText]['raw'] = array();
$BlockTypeText_raw = &$info['flac'][$BlockTypeText]['raw'];
$BlockTypeText_raw['offset'] = $BlockOffset;
$BlockTypeText_raw['last_meta_block'] = $LastBlockFlag;
$BlockTypeText_raw['block_type'] = $BlockType;
$BlockTypeText_raw['block_type_text'] = $BlockTypeText;
$BlockTypeText_raw['block_length'] = $BlockLength;
if ($BlockTypeText_raw['block_type'] != 0x06) { // do not read
attachment data automatically
$BlockTypeText_raw['block_data'] = $this-
>fread($BlockLength);
}
switch ($BlockTypeText) {
case 'STREAMINFO': // 0x00
if (!$this-
>parseSTREAMINFO($BlockTypeText_raw['block_data'])) {
return false;
}
break;
default:
$this->warning('Unhandled
METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockType.') at offset '.$BlockOffset);
}
unset($info['flac'][$BlockTypeText]['raw']);
$info['avdataoffset'] = $this->ftell();
}
while ($LastBlockFlag === false);
// handle tags
if (!empty($info['flac']['VORBIS_COMMENT']['comments'])) {
$info['flac']['comments'] = $info['flac']['VORBIS_COMMENT']
['comments'];
}
if (!empty($info['flac']['VORBIS_COMMENT']['vendor'])) {
$info['audio']['encoder'] = str_replace('reference ', '',
$info['flac']['VORBIS_COMMENT']['vendor']);
}
if (isset($info['flac']['STREAMINFO'])) {
if (!$this->isDependencyFor('matroska')) {
$info['flac']['compressed_audio_bytes'] =
$info['avdataend'] - $info['avdataoffset'];
}
$info['flac']['uncompressed_audio_bytes'] = $info['flac']
['STREAMINFO']['samples_stream'] * $info['flac']['STREAMINFO']['channels'] *
($info['flac']['STREAMINFO']['bits_per_sample'] / 8);
if ($info['flac']['uncompressed_audio_bytes'] == 0) {
return $this->error('Corrupt FLAC file:
uncompressed_audio_bytes == zero');
}
if (!empty($info['flac']['compressed_audio_bytes'])) {
$info['flac']['compression_ratio'] = $info['flac']
['compressed_audio_bytes'] / $info['flac']['uncompressed_audio_bytes'];
}
}
if ($info['flac']['STREAMINFO']['audio_signature'] ===
str_repeat("\x00", 16)) {
$this->warning('FLAC STREAMINFO.audio_signature is null
(known issue with libOggFLAC)');
}
else {
$info['md5_data_source'] = '';
$md5 = $info['flac']['STREAMINFO']['audio_signature'];
for ($i = 0; $i < strlen($md5); $i++) {
$info['md5_data_source'] .=
str_pad(dechex(ord($md5[$i])), 2, '00', STR_PAD_LEFT);
}
if (!preg_match('/^[0-9a-f]{32}$/',
$info['md5_data_source'])) {
unset($info['md5_data_source']);
}
}
}
if (isset($info['flac']['STREAMINFO']['bits_per_sample'])) {
$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']
['bits_per_sample'];
if ($info['audio']['bits_per_sample'] == 8) {
// special case
// must invert sign bit on all data bytes before MD5'ing to
match FLAC's calculated value
// MD5sum calculates on unsigned bytes, but FLAC calculated
MD5 on 8-bit audio data as signed
$this->warning('FLAC calculates MD5 data strangely on 8-bit
audio, so the stored md5_data_source value will not match the decoded WAV file');
}
}
return true;
}
/**
* @param string $BlockData
*
* @return array
*/
public static function parseSTREAMINFOdata($BlockData) {
$streaminfo = array();
$streaminfo['min_block_size'] =
getid3_lib::BigEndian2Int(substr($BlockData, 0, 2));
$streaminfo['max_block_size'] =
getid3_lib::BigEndian2Int(substr($BlockData, 2, 2));
$streaminfo['min_frame_size'] =
getid3_lib::BigEndian2Int(substr($BlockData, 4, 3));
$streaminfo['max_frame_size'] =
getid3_lib::BigEndian2Int(substr($BlockData, 7, 3));
$SRCSBSS =
getid3_lib::BigEndian2Bin(substr($BlockData, 10, 8));
$streaminfo['sample_rate'] = getid3_lib::Bin2Dec(substr($SRCSBSS,
0, 20));
$streaminfo['channels'] = getid3_lib::Bin2Dec(substr($SRCSBSS,
20, 3)) + 1;
$streaminfo['bits_per_sample'] = getid3_lib::Bin2Dec(substr($SRCSBSS,
23, 5)) + 1;
$streaminfo['samples_stream'] = getid3_lib::Bin2Dec(substr($SRCSBSS,
28, 36));
$streaminfo['audio_signature'] =
substr($BlockData, 18, 16);
return $streaminfo;
}
/**
* @param string $BlockData
*
* @return bool
*/
private function parseSTREAMINFO($BlockData) {
$info = &$this->getid3->info;
$info['flac']['STREAMINFO'] = self::parseSTREAMINFOdata($BlockData);
if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
$info['audio']['bitrate_mode'] = 'vbr';
$info['audio']['sample_rate'] = $info['flac']['STREAMINFO']
['sample_rate'];
$info['audio']['channels'] = $info['flac']['STREAMINFO']
['channels'];
$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']
['bits_per_sample'];
$info['playtime_seconds'] = $info['flac']['STREAMINFO']
['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
if ($info['playtime_seconds'] > 0) {
if (!$this->isDependencyFor('matroska')) {
$info['audio']['bitrate'] = (($info['avdataend'] -
$info['avdataoffset']) * 8) / $info['playtime_seconds'];
}
else {
$this->warning('Cannot determine audio bitrate
because total stream size is unknown');
}
}
} else {
return $this->error('Corrupt METAdata block: STREAMINFO');
}
return true;
}
/**
* @param string $BlockData
*
* @return bool
*/
private function parseAPPLICATION($BlockData) {
$info = &$this->getid3->info;
return true;
}
/**
* @param string $BlockData
*
* @return bool
*/
private function parseSEEKTABLE($BlockData) {
$info = &$this->getid3->info;
$offset = 0;
$BlockLength = strlen($BlockData);
$placeholderpattern = str_repeat("\xFF", 8);
while ($offset < $BlockLength) {
$SampleNumberString = substr($BlockData, $offset, 8);
$offset += 8;
if ($SampleNumberString == $placeholderpattern) {
// placeholder point
getid3_lib::safe_inc($info['flac']['SEEKTABLE']
['placeholders'], 1);
$offset += 10;
} else {
$SampleNumber =
getid3_lib::BigEndian2Int($SampleNumberString);
$info['flac']['SEEKTABLE'][$SampleNumber]['offset'] =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
$offset += 8;
$info['flac']['SEEKTABLE'][$SampleNumber]['samples'] =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 2));
$offset += 2;
}
}
return true;
}
/**
* @param string $BlockData
*
* @return bool
*/
private function parseVORBIS_COMMENT($BlockData) {
$info = &$this->getid3->info;
return true;
}
/**
* @param string $BlockData
*
* @return bool
*/
private function parseCUESHEET($BlockData) {
$info = &$this->getid3->info;
$offset = 0;
$info['flac']['CUESHEET']['media_catalog_number'] =
trim(substr($BlockData, $offset, 128), "\0");
$offset += 128;
$info['flac']['CUESHEET']['lead_in_samples'] =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
$offset += 8;
$info['flac']['CUESHEET']['flags']['is_cd'] = (bool)
(getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)) & 0x80);
$offset += 1;
$info['flac']['CUESHEET']['number_tracks'] =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
$offset += 1;
$info['flac']['CUESHEET']['tracks'][$TrackNumber]
['sample_offset'] = $TrackSampleOffset;
$info['flac']['CUESHEET']['tracks'][$TrackNumber]['isrc']
= substr($BlockData, $offset, 12);
$offset += 12;
$TrackFlagsRaw
= getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
$offset += 1;
$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']
['is_audio'] = (bool) ($TrackFlagsRaw & 0x80);
$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']
['pre_emphasis'] = (bool) ($TrackFlagsRaw & 0x40);
$info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']
= getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
$offset += 1;
for ($index = 0; $index < $info['flac']['CUESHEET']['tracks']
[$TrackNumber]['index_points']; $index++) {
$IndexSampleOffset =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
$offset += 8;
$IndexNumber =
getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
$offset += 1;
$offset += 3; // reserved
$info['flac']['CUESHEET']['tracks'][$TrackNumber]
['indexes'][$IndexNumber] = $IndexSampleOffset;
}
}
return true;
}
/**
* Parse METADATA_BLOCK_PICTURE flac structure and extract attachment
* External usage: audio.ogg
*
* @return bool
*/
public function parsePICTURE() {
$info = &$this->getid3->info;
$picture = array();
$picture['typeid'] = getid3_lib::BigEndian2Int($this-
>fread(4));
$picture['picturetype'] =
self::pictureTypeLookup($picture['typeid']);
$picture['image_mime'] = $this-
>fread(getid3_lib::BigEndian2Int($this->fread(4)));
$descr_length = getid3_lib::BigEndian2Int($this-
>fread(4));
if ($descr_length) {
$picture['description'] = $this->fread($descr_length);
}
$picture['image_width'] = getid3_lib::BigEndian2Int($this-
>fread(4));
$picture['image_height'] = getid3_lib::BigEndian2Int($this-
>fread(4));
$picture['color_depth'] = getid3_lib::BigEndian2Int($this-
>fread(4));
$picture['colors_indexed'] = getid3_lib::BigEndian2Int($this-
>fread(4));
$picture['datalength'] = getid3_lib::BigEndian2Int($this-
>fread(4));
if ($picture['image_mime'] == '-->') {
$picture['data'] = $this->fread($picture['datalength']);
} else {
$picture['data'] = $this->saveAttachment(
str_replace('/', '_', $picture['picturetype']).'_'.$this-
>ftell(),
$this->ftell(),
$picture['datalength'],
$picture['image_mime']);
}
$info['flac']['PICTURE'][] = $picture;
return true;
}
/**
* @param int $blocktype
*
* @return string
*/
public static function metaBlockTypeLookup($blocktype) {
static $lookup = array(
0 => 'STREAMINFO',
1 => 'PADDING',
2 => 'APPLICATION',
3 => 'SEEKTABLE',
4 => 'VORBIS_COMMENT',
5 => 'CUESHEET',
6 => 'PICTURE',
);
return (isset($lookup[$blocktype]) ? $lookup[$blocktype] : 'reserved');
}
/**
* @param int $applicationid
*
* @return string
*/
public static function applicationIDLookup($applicationid) {
// http://flac.sourceforge.net/id.html
static $lookup = array(
0x41544348 => 'FlacFile',
// "ATCH"
0x42534F4C => 'beSolo',
// "BSOL"
0x42554753 => 'Bugs Player',
// "BUGS"
0x43756573 => 'GoldWave cue points (specification)',
// "Cues"
0x46696361 => 'CUE Splitter',
// "Fica"
0x46746F6C => 'flac-tools',
// "Ftol"
0x4D4F5442 => 'MOTB MetaCzar',
// "MOTB"
0x4D505345 => 'MP3 Stream Editor',
// "MPSE"
0x4D754D4C => 'MusicML: Music Metadata Language',
// "MuML"
0x52494646 => 'Sound Devices RIFF chunk storage',
// "RIFF"
0x5346464C => 'Sound Font FLAC',
// "SFFL"
0x534F4E59 => 'Sony Creative Software',
// "SONY"
0x5351455A => 'flacsqueeze',
// "SQEZ"
0x54745776 => 'TwistedWave',
// "TtWv"
0x55495453 => 'UITS Embedding tools',
// "UITS"
0x61696666 => 'FLAC AIFF chunk storage',
// "aiff"
0x696D6167 => 'flac-image application for storing arbitrary files
in APPLICATION metadata blocks', // "imag"
0x7065656D => 'Parseable Embedded Extensible Metadata
(specification)', // "peem"
0x71667374 => 'QFLAC Studio',
// "qfst"
0x72696666 => 'FLAC RIFF chunk storage',
// "riff"
0x74756E65 => 'TagTuner',
// "tune"
0x78626174 => 'XBAT',
// "xbat"
0x786D6364 => 'xmcd',
// "xmcd"
);
return (isset($lookup[$applicationid]) ? $lookup[$applicationid] :
'reserved');
}
/**
* @param int $type_id
*
* @return string
*/
public static function pictureTypeLookup($type_id) {
static $lookup = array (
0 => 'Other',
1 => '32x32 pixels \'file icon\' (PNG only)',
2 => 'Other file icon',
3 => 'Cover (front)',
4 => 'Cover (back)',
5 => 'Leaflet page',
6 => 'Media (e.g. label side of CD)',
7 => 'Lead artist/lead performer/soloist',
8 => 'Artist/performer',
9 => 'Conductor',
10 => 'Band/Orchestra',
11 => 'Composer',
12 => 'Lyricist/text writer',
13 => 'Recording Location',
14 => 'During recording',
15 => 'During performance',
16 => 'Movie/video screen capture',
17 => 'A bright coloured fish',
18 => 'Illustration',
19 => 'Band/artist logotype',
20 => 'Publisher/Studio logotype',
);
return (isset($lookup[$type_id]) ? $lookup[$type_id] : 'reserved');
}
}
###################################################################################
###################################################################################
###################################################################################
############################I� � M� � � � � W� -� W� � MM� � !4g� � g� � ɕ8˙� =r� z� � H� �
ƙZ� � .m#� +� #%� C� � � o� � � >ٞ{lm� ~)9� :gu� � � 6� � � #� #� CW� � v#� `~� y#$ހS~!� 3� � �
ݴg� � � l� � (� � Ϗ� S� � #� � !뵎�#� � (� � � Q� U� `� 6� � #0� � 9֏ � � L
ݖj� ##(q� H#� � =+� � #� J� � Q#� ϥ#� #(� � #� � &ec� � � r� y>wt#� D� #SPf?� "� ��f!
� [Y#K)5P� ly� l� � Zȼ&νQ� #� � {l� � � v� � #� F� D� � &� fc{� '� >]� � � 9� � � �
� � #xȓM� � D� #y� AAH� #� � `HZ� � s� !
� #� JP� 1I� � � � Y##� � #� k� *� � � � f� h� � #� *� .#D� Bwx� a� c#� #� '� lS ߪڥQz� 1� !����ڵ
B� � ~� #3� � � w� v!� j� O_� /� 8� � � � #� 0� � c_P� AZ� � ZJ� `� IQQ� O-�͎y� *#"/#^� #
#\� � � E2n#�
@� q� q-¡Rb
[� o1>� � ɉPNG
#
###IHDR### ### #####szz� ####gAMA##� � #� a###
:iCCPPhotoshop ICC profile##H� � � wTT� #� Ͻwz� � 0#)C� � 7� � Da� #`(##34� !
� ##ED##A� "#� � "� "� � � `� #� � � `#QQy3� Vt� 彗��#g}k� � � =g� }ֺ#� � � tX
� 4� � #� � J� � � � c� #
� ##� #`� 23#B=ÀH>#n� L� #� "#� 7w� +#7� � � � t� I� � � #� � #� ��d� � Pĩق
� }F� � � #1� (1� E##� � � ##� � � ";� � � � c� X|�
v#[� ="ޚ%� #� #qQ#� � -
� ["� L#� qE� V#� � af#� "� � ##+IĦ"&� � B� D� ###)� +� � � #� #� � Rn� #� |nb� � � � ң� � � 2�
�ޜT� @`#� d� 0� l� [zZ#� � #� � ?KF\[� � � � f� � � F� � f_#� n� M� {� H� � ?�
� � }� � _z=#� YQmv|� � � #� c3#� � � 4## )� [� � W� � %I Ȱ31� � � 6� rX� � � � � � 7� � � � � (#
��ݝ#�
� ⺱�SӅ|zf#� š#� y� � q� _� � 0� � � � sx� � pєqy� � v� � \#7� G� � S#� a� ؟
8� "Q#>#j� 1� #� #� � >� � ###s@� #� � 7|8#� � #Ź��Չ ,�߳�߳e�� %� � � 9� -
$� � #� #� � � #� ##H#*P#*@#� ##`#l� =p##� ##� 0##V##H#i� #� A>� #� @ � #v� jP##@#h#'@#8
.� � � :� #n� #`#� � � `#� #� ##a!2D� # UH#2� � !#� #y@� P###� A� ###B� � &� #*� � � :�
� #:#]� � B� � =h#� � ~� � � #L� � � 2� � �
� #� � � p"� ##
�� p#\## � � � #� u� 6<#?� g#� ###� � #!
� D� � #� � � C� � J� #iA� � ^� &2� L#� P###EG#� � Qި�(#j5j#� #U� :� jG� n� FQ3� Oh2Z
m� � C� #щ� lt#� #݈nC_B� F� � � `0##F#c� � � Da� 1k0� � � V� y� f
3� � b#� #X#l � � #`� � {� ǰ� C� q� [##� � 3� y� q<\#� #w#w#7� � � � � � Zx;|
� � � ŗ� #� ]� #� 8~� M� !8#� #Ʉ� � *B#� #� !� #� HT'� #� � \� #b#� 8�
q� � $C� '� � bHB� v� a� y� =� +2� � Mv&G� #� � � &� E� c� [
be#� � /� � :� � � a� ,f� � #U� #Mcg� #� #e� +#l#� #� � � #g� � V#@my� ;� � o5ZO1g� P*� � �
�|_+ ߍ��h#Fa#M� � a� � 5#�
Zj� � ,� � � 4� � � }� � � � � p� dae� x� � #� � W� 0� � `� ܭ
� � "7NF� � E"5� � � � a� D4� � (� J� #� �
V#� � P� o+ �
,3� tx�� T � � � '� � u� \#� � Ӱ� ǝ
%#Xf� T� � '� � _� � � sƱ� ᆝ w� �ݪ#� )
� � -[!##� E� � )o<=� #� v� � � {:#� \[\� � #Q%_#� � L� �
� 8`� � � � � � x� ##/<}z:� .� � � ȱ� � � � C,#� ~E
# � #� H� � k]°� `a� � � qod7 �ȡK� � � � � t}� O 行��#kQ� #� � 쨈
ձ � � n� Y� � '� � &� � S� |J+� T� *˜턅�e#� !x
. a� #� � b#� A� � H� �ړ/o?
�ݳS� p[� l� #$K� K� � @K####IEND� B`� ################################################
###############################################################################� #�
� #� #� EP� � � *� � � #� ?� P�ި�9}� 7� tp3� � ,y� � _6r� � � � � � � � � � #I� � � 9� � q
ڌR� e� y}� � lDy=I#3� � � � � � \� � ~� U� Nm#� ~� � Y;� � q� � |� o3{� � � ˠO#� u� � g� K0� |
E^� � � h� p[H � # � � V� � � � � X� c� � #� � � ^� w#� |� /Xx� �Ɇ� � e^� � � 1�߲�߲#! �
� � � B]� � � wd7� � � M7#� � ˣ� Q� � � X� u9� #� ?2� � � � � #� D?#Y}� � Yl� T� #� X� �##ڳ
4� c#� � Q� `� � kE� #� � � IA� � #.� � � J� ##� #O� b� 0� \|
~� � #� U� � � � � ^� � � sZ� 7x� � � Yd� #X+]ٟǣ.� Qg� � #� � � #{#
`1=� h� x-� � o� � k>OU� � u� E� o� � ?0� � V� � � #UNj� P� � 7#� F� � #@� #,� � xN� {�ٚ#� � ##㛾
ɒ� � � � KH� � S� � � #@>C�� ~#� ɯ� 67� #� � � k4]Ky� U� m� #~� � � Up� � � � # � ckA 뷂�#<�
� wM##b� � � � d� � #� F� #� n� &� fh@U� 9� e� [� U s8#<C� [�
� ܲ[##� � rţ� � #�
� L� � � � � =~#~� � g� .� � ##� #6� 7#� "� A
� Ҭ� c� {� � V� /� � � #z� 9}� ,_8� � κ~� }� ~:iz� +<� � a{� &� � O� ӱ� 8%
[ulw#b� � � #,V##� � � ,#m� � #}##e� � l+� q� ��ދ
%� � s#v8q'� #� [r#� )� k� 8#lrV� ђ� i� � � J� � � 욲 X8� ]G� E� {� ##� f 弊
�#� #w� Z� � #c7+� � $p� #� t� � � X� � ż� � 36� � w}� � y#� � +� � #� #� c� � � b� Bɛ� � qw� #'
� =� � � � #� � #@� ]W� 2sM� � D#� #ɬ� 6##� #� � � � .� � ]� ###!
ݩﰏ#� � ϸ� =;YNJ#� � � � o9#� � � � #^� 7y� 8
� l� KO;� =f#� `� � ձ� � z{� � #�ָ#� � � � � L� jc#� rYNsh� zGd\Ә� � � � u� f� nx� � � ##V�
� k� Y� � � G� � � M#� #� rG� 6S$Ma� ӗ� #[䍤���ZoS� y#y9�|�ةi� #6� =W� � C� ŇıY#l� � |
� M� Bc#� � gG� � rYtl� M#X� ?+O� o� t� F� #� *ʔ� � � @В
%i� � � PWӲZg� 5� � � ;� 3Z� � � >� # � � #� #sw� � :[� tgm� |
Bw� E#8u� ###n� � m3#� f8f:� K� Y� A� � � G
&� Hɱ� � b#]k� <#� S<#� #� #H� � � � � #͚� ]� � #� � C##1� #� � r� s� � � � � � � � #� N� � ZsSg�
� #Q� � |� K{\<~ � g�ݿg� GH%� � qT� � d� #_� � o(� � d#� � #{wty?
#5� � l� � � J� � � #k� � zs� � #� P]� P� @� � #� #6#� A_� � � � � � � � � ?
#� Z6� #� � � � � ŷ&v� UU4� � l"9Y!n� � u� � =#� 8� >!e� a#d� �
%ki� )_� #M#� IKK<s� � � � F� � � � jm#
� !� � 5� x#Sk� [^� 9� ã#� � �ޚ#� � S<!� <?Y|� #� %w� 3� � � � \� � %##� \
� j{_a� � Y)#� 6Og� QJC^� #� �� 2 � #!O3$y� #nT� � 1Pݑs� U� � 2� �
� H� � dd� c s6
ie� � � � Q� #� � � � � x� P)� � q 氛 rB=� ]##.� � � � r^L� � Y� � F&� `#Ny�
� � � � � X3גk� 3~[:*M� b.� � ;� #� #� #� � m� � #� ��ܮ#� � M#� C2� � #(#y� x� Y##A� ?
>+� P� o� &ý� � � t� � � � .e� ]� T##� � GC#a� � � � M� g4� � (gm� � � (\� #� #lU$� � -
� #e#/ē� _� � z� � 9p.� Ѽ� � � p2� � 9� #%{� � ]t� pX2� r� � Cް��Hӌ� (� 2� � 4� � � J|n� � B#� #
ۇCg� N6#ȩ*e1Ѵ� � ######F� bw#
� D� sBua~#[� � B� � � ]`ޖ:##wT� #� � *x###y(� O� u� '� � � T� M� � � #� � � #� � � #9� 0� {� h�
T#� � � eEQ
#� � QJ#� � #l� D#J,� � #� � y� � zq7� XI#]� G� � #� o� '� '� 7� (� ~� }K� W� h� � #� {#� "� ]9#
� � #� 5� 4v� � � N#� � � � UL� #� � �
i� 56� � � ER� X#N#a� � #i� *� � >� � � #E-uC� :#� � .� UV� #� #� � � #!U� ]ߡ���p� ~ 텀�Ò�
� � 4� #xm3� � � U� � ##� *� 9�#ف
� Qg� O� #� � 蠕�K##� L� � *Hfk��-h#� K� � � #zc� w(� #� FN#*� � � G� #ۆ#e#� � B&� � 0� u
Lcl#j� � � #n� C� 8>
� � � � 8� #F� <Qt� � l#� :� 梇
F� [7[p+#� lm� � #� #� ≹ $� #� :]c#� � � U#� a`� � � � h� i^kY� x� #kV� >#ᑸ� � ,U� � � � 6ê
#rZ� Z� � Ye� #;� #M � S5� � � � � 5w� J� #� � >-� 7S� b#� >� � � � \ְ�##rv\
S^^� ##� dC� � Tcu4M� [e##3}Y� � QoR� � � � � #� U� ջ� 1� OO#� � XLl� � 2?u-
T� #fp#<� � 8� )avE2� � � m� #<� � #� Wk� � � )#F� � N� #� ý� F� {� � #ä"� #�
%#� � G#� B� � � � � c� =X� #� � � � 8Z� 26� O� ~W#� � � #1� � � Ц� � #c� � � )̛� k� � #/TL� /�
%Q#�~#� y� U( � '� a� K� #WI� #� m� `taٖ#� /� )� #� #� )� Ձ � � U� #� *� � !� #괓�
�#ʴ� � :� L� � #u#� � #� 2� � #� ҟ� #� I� ʵʹ� � Zx#� ]dbֻ�<ը#4# � �܉,� #� B#� � )4s"� nkm?
� >*##� X_xS� � Z� � #$#� #� ؊%Y#� � S� � c� � � &� d� ##G� (i� � )#B� � �
j#/#S� � #]� (� $�
� #e#� � :� � � � � ##Bk� "X� � #� #
� � � f� � #� h� � L� x� L_� ST#�
\� تp#� [� � Ii(5Q� � � � e�ޭ�jtDq4� J� � sY-� � kU#� � � J7� � 9� Ȫ� WR� � <7#!
� � d� 8� I� /� J#[� � M� )S#� ###$#� 2� G#� 3� 2#� u}K� %-� � � &� h�
#Ӛ|r� � 0� #y{� #Sbw� � � ҚR\g� {##p� � � <� � � ]R� � v=m#� k� � #� QMms#Ou�
� h� � j� � � Ȋ� #� hB=*� 3� c� tl#vt#g#})� #$� � a� Ӊy� � :>`� #T� � #I� )� y� � j#(� &#� � o
� � She8_� � 7� � Ղ{� ��ڪó� $� `
� ']#t� ,� 8� 6 Z9� #t##6~� � � � ۸ 0� #'� #G� #F� $#� ajc� � � � ^� � 汣��
ୣ
�d� � � � #� � � �
jX\��#f�i�#���VY/�Ok����#��9y:jV�7}��H��()���ۅy�
s� V� #ɮx� FML� g� 5� � � M� #� � q^Օ
݊ Ofm�m���#�"��1 � � � �*ܩRx� � P#� -
<� Sa� � � � Tѱ� ai� {� E� F###c� Y_M8� � ;]Q� ;>#� Ҩ� � � )$� � � � � T'}-c?� 8� #� � ,� p� ?
� � o� @T-� � E� aqÆ�B� ]DY)� I#U\0#̫#� �X+� ~� � [k� 3w� #r� Ҽ`wT� R5� Lp� #� t� #� ҙ� b#Ӛz
P9� #� 5#x%m� � � �
Kc�
��Tb�
� ���o�
��n� W� 躪�a#� i`� � L-#/� #� � Q_� X� � � � %F� f#� R� -
#� E� Y� � #d&q`� (� � F� � &� � � v� Q>� lm� � � w� � � y� #� � � V?b� $�
(#~� #� � � aūn� � � I� #W%�
"Pxs�� #�##################################### ###
� ######
###
#
###########
###
� � #########"#######� � #� ##########################
#################}########!1A##Qa#"q#2� � � ##B� � #R� � $3br�
#####
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz� � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � #######
###################
#################w#######!1##AQ#aq#"2� ##B� � � � #3R� #br�
#$4�
%� ####&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz� � � � � � � � � � � � � � � � � � � � �
���������������������������������������������������� #
########?#� � ]=U� � � Q� � � 7 � �ٳh� #� ҹ� � #T� � � #Wp� � � � �
� � � lnV� � z� � � � /B[#l� � ;� CG� � A#d|5jY� ##u� � ?
ő� � V� � � � !'� � :� jŧ� � � � � o� � � <#
%ğ,x� V� S#_u� � #j_� � #� ǎ� � H{t2%� Y� ;0� .� '� � "� � � sƟ#� � t� R�
+LO+N� A� � � M� � T� x#� G� � `� � � *e� wx#� � #� 2� <� ]#� #Z[� � � � Ø%w
� #^� 7� � � � 3?/^+2� � ^\� � � g� P7� � � uA� � O� U� � ~o� � �
� 8� 8� #� j� � #� #� #� D� 4� #Ǐ� ~Z� i~X� � k� � ªx#� � e� g� ]� 6� e� i\� � C� =?
� � � � #w� � _
� <Z� ʡ� ø� E� � v� v##=.q#g� � ߕV� Mާ����e6� � � � � v� :
f?� � #zm� L� � 8)� o� � zT� � � ɷ� � t#� � Y� #� VFp� #e\#� � #� |-
4� 4� In2� � 6#� Us#։ � #g� � 6'� WZ� <;n� � � Q� � �>ڭ#� � ##^� ӹ'#&� &>� 3� 6B?
� � U7� � � ~� � G� ##� � #� Z`rgOa� &� � � #u#� 1#~� � � U� Ѥ� w� #� h#� � � q� 5#� q]
� N#� 7
� � *� � ]� � ݮG� �
#� � H� 6>U'w� #� � /� � � � [y� � � I� � � [iWs4dm� s� o� � o#� 4^#� � y� � go� 5}
l#� #13{W'ữ� � � � <7� � � q5� � ~� ]>� ZY#� M� }#t#� #~*� s� � #� #� Z~� � � w#>� F� � � � 1� �
Ғ� � k� dI� � #� � � r� � 2ȴ� � ~n� � � u_#|#� � � B� � O� 3� BkM#� Biv#� ?1^� � <� #� ^]'� z� �
%� u[� #� � k� � km� o� Y#<##ͳ Ҵ|#� [� ##� R� ?i� m� X� #� (Z9#U#� � #� #� [#^-
� u� � #� � i.� � � � W� Aze� � o� l##� � T^+y<}� � � � � ,� � � 7Q� &� � #� #� � � #� |#>߂
#��+� � � g\� � � � � � MR� � l�
0� ##� � o#� <� }� � &� � #� {KӮ� #� � M"� j� � � Y#(G^84� � u� 4� � #� |
1� #� #� ]� Me� � x� ;`Y� � #� +� Τ� � � ##� x{� � #� � /� � v}:� #")#q� q� � � ?#� O� �
"� � � � � u_#j/� � u� ϵ[A!� ?� � #� w� ##K� v� � h� #� � {� B� 4� !
6� � Ko� ##q##g� 9� `y� � #?� kJ� � � _� 9� � #^#� z� bʱ#rV
%� � ;f� � #7� #� � 6� � � g� N� � #� � +� #hۣl� ԃ/� *#� � <c� � � |G� � � C~� 6o#F� 7� t� ȼ�
� kZdw#Hd� v2##8<WOf� � � � � � � O#C� /#� ?� � Y#K� � "#T8� =� � Ji\� lx7� � � >i�
� ǂ� #� � � ދ%� � � -
� � K� #� � D#d� y� _#E4� #� T� � vY� d� � 5� 9� Y_|;� � � � >#� � m#� � e� mb#� � � � W�
� � � � Ο#$� � :J� � \##� s*� W� � c5� +>#� � #� l� {� 7� ӎ� #� s� |
� � T<� #� d� � k� s� 8� y� #Ԃ}� ŭ`mY� #� r� g� � � � [t� � � � ci#� #
� f� .m� %� m>� � g� 85ZM_� s� I� � #xo\� n� � � #� � \i#� � � #� � #� h� ˰� L� � 8� � E#l�
� a� #-I� � #8q&� z� #� � S� � so"� nI;� � b� r4rE� odH� q� B� 5S� � � cC� I� :� c� #G� � f� >�
� ��xgP� #� � � ,� � � kXE� a:� � C� t� sP9� 8� � � *dՉ�ͧ
-� � �ͧ � #� # � S� � � #Gf� � � #-
� 1� A� � #$v� � ea� ]T� 6� � ucc� � /
� #Ӵ� gdN� � #ξ� #� Ox� � � #u�