ј0ъ=c zы+›Z?Ћ0Вх=cш1ъ=c џџџџРŒwLСёƒ†иЙф=cџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ}?c џџџџтtнф-ѓПЯЈтр=cЈОф=cџџџџŒп3{{ЌРИёEcрОф=cџџџџи3Тр3{{ЌјИёEcПф=cџџџџлівЏсъЛ0ЙёEcPПф=cџџџџ”jЩJ№xЃ@4рEcˆПф=cЫwdіt2Ÿ ЙёEcРПф=cџџџџu–rАѓ]UЙ€3рEcч=cиЄЎ‡8ž~ЅКёEcџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ5ъ=c џџџџЋ Бpђ0Мх=cH5ъ=c џџџџR…a1€О`@€5ъ=c џџџџаrАЅиь0Pф=cИ5ъ=c џџџџщ#УјZЅHŸ˜Лф=cџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№5ъ=c џџџџпЂ€>bРH=@р6ъ=c џџџџцфЅЂж_ѕАщ=cа7ъ=c xХПйтЈЧ@бх=cР8ъ=c hЬИVдж”›`ох=cА9ъ=c џџџџЁТx2g:цу=c :ъ=c џџџџъh\Ц[БЇhжх=c;ъ=c ˆm;1€ичy@€<ъ=c џџџџРHЦZ3Ž‘”xПх=cџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџи?ъ=c џџџџR…a1€О`@@ъ=c џџџџгжhS€X>@H@ъ=c MdёR€РG`@ЈGъ=c џџџџˆвZОоAqђ@V\@рGъ=c џџџџ_‘•|€А>@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџч=cџџџџK8$д ч€РТ;@џџџџj^RьЩ“`š@`Bъ=c џџџџ‚ \MЧО•Ђдх=cPCъ=c џџџџ$\1€(g@@Dъ=c џџџџыЧKaјЮѕ€Wф=c`Ё:ЁU@^=~Ё:ЁU№P^A~Ё:ЁUр`^A ћЃ:ЁUџџџџџџџџP^ИEЂ:ЁUPp^AаЁ:ЁUџџџџџџџџ`^<АФЂ:ЁU`џџџџџџџџ^>а>Ё:ЁUPџџџџџџџџџџџџ_>рМ€@№ц=c`еЭ:ЁUџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРПф=cџџџџ ѓ1g№ърёц=c–_;cџџџџъуЖъ€m\С@ћU;cџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ8Gъ=c џџџџгжhS€X>@pGъ=c MdёR€РG`@ЈGъ=c џџџџˆвZОоAqђ@V\@рGъ=c џџџџ_‘•|€А>@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџHъ=c џџџџпЂ€>bРH=@Iъ=c џџџџ_‘•|€А>@јIъ=c џџџџ5plєц€€щ\@шJъ=c џџџџІЋ‰ƒb ””€х=cиKъ=c џџџџьх—pдeЇŸбх=cШLъ=c іЈЋUdЇŸШАх=cИMъ=c џџџџ~k‹љ]ŠжИЖх=cЈNъ=c џџџџqиS€8>@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџPПф=cџџџџ  ЧЁ:ЁUPџџџџ``шЁ:ЁU`@џџџџ+PmЁ:ЁU`џџџџџџџџа>Ё:ЁU`џџџџџџџџџџџџР>Јб;@аUф=c№Yф=c@">cџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџрОф=cџџџџK8$д ч€РТ;@џџџџj^RьЩ“`š@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ8ч=cџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЈОф=cџџџџ ѓ1g№ъ€ђц=c•_;cџџџџъуЖъ€m\СрћU;c, __( 'Invalid cookie format.' ) ); } return $parts; } /** * Generates the recovery mode cookie value. * * The cookie is a base64 encoded string with the following format: * * recovery_mode|iat|rand|signature * * Where "recovery_mode" is a constant string, * iat is the time the cookie was generated at, * rand is a randomly generated password that is also used as a session identifier * and signature is an hmac of the preceding 3 parts. * * @since 5.2.0 * * @return string Generated cookie content. */ private function generate_cookie() { $to_sign = sprintf( 'recovery_mode|%s|%s', time(), wp_generate_password( 20, false ) ); $signed = $this->recovery_mode_hash( $to_sign ); return base64_encode( sprintf( '%s|%s', $to_sign, $signed ) ); } /** * Gets a form of `wp_hash()` specific to Recovery Mode. * * We cannot use `wp_hash()` because it is defined in `pluggable.php` which is not loaded until after plugins are loaded, * which is too late to verify the recovery mode cookie. * * This tries to use the `AUTH` salts first, but if they aren't valid specific salts will be generated and stored. * * @since 5.2.0 * * @param string $data Data to hash. * @return string|false The hashed $data, or false on failure. */ private function recovery_mode_hash( $data ) { if ( ! defined( 'AUTH_KEY' ) || AUTH_KEY === 'put your unique phrase here' ) { $auth_key = get_site_option( 'recovery_mode_auth_key' ); if ( ! $auth_key ) { if ( ! function_exists( 'wp_generate_password' ) ) { require_once ABSPATH . WPINC . '/pluggable.php'; } $auth_key = wp_generate_password( 64, true, true ); update_site_option( 'recovery_mode_auth_key', $auth_key ); } } else { $auth_key = AUTH_KEY; } if ( ! defined( 'AUTH_SALT' ) || AUTH_SALT === 'put your unique phrase here' || AUTH_SALT === $auth_key ) { $auth_salt = get_site_option( 'recovery_mode_auth_salt' ); if ( ! $auth_salt ) { if ( ! function_exists( 'wp_generate_password' ) ) { require_once ABSPATH . WPINC . '/pluggable.php'; } $auth_salt = wp_generate_password( 64, true, true ); update_site_option( 'recovery_mode_auth_salt', $auth_salt ); } } else { $auth_salt = AUTH_SALT; } $secret = $auth_key . $auth_salt; return hash_hmac( 'sha1', $data, $secret ); } }