. | // | | // | ------------------------------------------------------------------------- | // | | // | -{# 3222a79a686f8745 #}- | // | -{# d7ee10a4e723cc8d1b3cffe6e155bf5338935e0ca756a4062ec791750ece0eb1 #}- | // | -{# 2622 #}- | // | -{# 2026-06-02T00:19:35+00:00 #}- | // | | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++ // +++++++++++++++++++++ // +++++++++++++ // +++++ // + // ----------------------------------------------------------------------------- // -- {# Beginning EVENTS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Global Variables }------------------------------------------------------ /** * Global variable containing registered listeners for events management system. * @var array */ $_LISTENERS = []; // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Register an event listener. The optional third argument is custom data * array which will be passed to the function as second argument when * the event is fired. * @param string $evt Event name. * @param Closure $func Listener function, which will accept two arguments: * event data and listener data. * @param array $data Listener data. */ function listen(string $evt, Closure $func, array $data = []): void { global $_LISTENERS; if (!array_key_exists($evt, $_LISTENERS)) $_LISTENERS[$evt] = []; $_LISTENERS[$evt][] = (object) [ 'func' => $func, 'data' => $data, ]; } /** * * Dispatch an event to all the listeners, with optional event data. * @param string $evt Event name. * @param array $data Optional event data. * @return array|null Array of all registered listeners results (not null). */ function dispatch(string $evt, array $data = []): ?array { global $_LISTENERS; $results = []; if (!array_key_exists($evt, $_LISTENERS)) return $results; foreach ($_LISTENERS[$evt] as $listener) { $r = call_user_func($listener->func, $data, $listener->data); if ($r !== null) $results[] = $r; } return $results; } /** * Global variable containing registered listeners for * filters management system. * @var array */ $_FILTERS = []; /** * * Register a filter listener. * @param string $filter Filter name. * @param Closure $func Listener function, which will accept the data to * filter as unique argument. */ function register_filter(string $filter, Closure $func): void { global $_FILTERS; if (!array_key_exists($filter, $_FILTERS)) $_FILTERS[$filter] = []; $_FILTERS[$filter][] = (object) [ 'func' => $func ]; } /** * * Dispatch a filter request to all the filter listeners. * @param string $filter Filter name. * @param mixed $data Data which will be send and processed by the * listeners. * @param array $args Additional arguments, unchanged on each filter call. * @return mixed Result of the consecutive filterings. */ function filter(string $filter, mixed $data = null, array $args = []): mixed { global $_FILTERS; if (!array_key_exists($filter, $_FILTERS)) return $data; foreach ($_FILTERS[$filter] as $listener) { $data = call_user_func($listener->func, $data, $args); } return $data; } /** * * Register an entry of something in memory (e.g. an array or an object * describing anything). The collection will be able to be retrieved with * . * @param string $thing Thing type. * @param mixed $data Data to store. * @param string|null $key Save thing in array as $key. If null, the things * array will be considerated as a numeric array. */ function register_thing(string $thing, mixed $data, ?string $key = null): void { $things = get_registered_things($thing); if ($key !== null) $things[$key] = $data; else $things[] = $data; cfg('@core.things.' . $thing, $things); } /** * * Remove all registered things of type $thing. * @param string $thing Thing type. */ function unregister_things(string $thing): void { cfg('@core.things.' . $thing, []); } /** * * Returns all registered things of type $thing. * @param string $thing Thing type. * @return array All registered things of given type. */ function get_registered_things(string $thing): array { return cfg('~@core.things.' . $thing) ?: []; } /** * * Returns the registered thing where its array or object's $prop equals $value. * @param string $thing Thing type. * @param string|null $prop Thing's property name. * @param mixed $value Property value. * @param int|string|null $key Key of the thing. * @param int|null $index Index of the thing. The array will be forced * as a numerical-array. * @return mixed The thing, or null if nothing found. */ function get_registered_thing( string $thing, ?string $prop = null, mixed $value = null, int | string | null $key = null, ?int $index = null, ): mixed { $things = get_registered_things($thing); if ($key !== null) return $things[$key] ?? null; if ($index !== null) return array_values($things)[$index] ?? null; if ($prop !== null) { foreach ($things as $t) { $v = null; if (is_object($t)) $v = $t->$prop ?? null; else if (is_array($t)) $v = $t[$prop] ?? null; if ($v === $value) return $t; } return null; } return null; } // ---{ Class: Microbe Event Emitter }--- abstract class Microbe_Event_Emitter { protected array $listeners = []; public function on(string $action, Closure $func): static { if (!array_key_exists($action, $this->listeners)) $this->listeners[$action] = []; $this->listeners[$action][] = $func; return $this; } public function fire( string $action, array $args = [], bool $filter = false, mixed $value = null, ): mixed { $results = []; foreach ($this->listeners[$action] ?? [] as $func) { $value = call_user_func_array($func, $filter ? array_merge([ $value ], $args) : $args); if (!$filter) $results[] = $value; } return $filter ? $value : $results; } public function filter(string $name, mixed $value): mixed { return $this->fire(action: $name, filter: true, value: $value); } } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending EVENTS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning CONST #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * Define one or several constants, if they are not already defined. * @param string|array $k Key, or Key/Value array. * @param mixed|null $value Value, if $k is a single key. */ function def(string | array $k, mixed $value = null): void { if (is_array($k)) { foreach ($k as $key => $value) def($key, $value); return; } if (defined($k)) return; define($k, $value); } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending CONST #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning Third-Party BEAUTIFY-HTML #} -- // ----------------------------------------------------------------------------- /** * -------------------------------------------------------------------------------------------- * | Microbe sincerely thanks Beautify_Html authors (Ivan Weiler) / 2023-07-27T21:07:07+00:00 | * | Scraped manually and tinkered without any refinement, based on the following URL: | * | - https://raw.githubusercontent.com/ivanweiler/beautify-html/master/beautify-html.php | * | The constructor was simplified. | * | The styles/scripts beautifier system was removed. | * | The method 'set_options' was removed. | * -------------------------------------------------------------------------------------------- * Beautify_Html class * The MIT License (MIT) * Copyright (c) 2007-2013 Einar Lielmanis and contributors. * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * PHP port by Ivan Weiler, 2014 */ class Microbe_Beautify_Html { private $options = [ 'indent_inner_html' => true, 'indent_size' => 2, 'indent_char' => ' ', 'indent_scripts' => 'normal', 'wrap_line_length' => 32786, 'unformatted' => ['code', 'pre'], 'preserve_newlines' => false, 'max_preserve_newlines' => 32786, ]; private $pos; private $current_mode; private $tags; private $tag_type; private $token_text; private $last_token; private $last_text; private $token_type; private $newlines; private $indent_content; private $indent_level; private $line_char_count; private $indent_string; private $input_length; private $input; private $output; private $whitespace = [ "\n", "\r", "\t", ' ' ]; private $single_token = [ 'br', 'input', 'link', 'meta', '!doctype', 'basefont', 'base', 'area', 'hr', 'wbr', 'param', 'img', 'isindex', '?xml', 'embed', '?php', '?', '?=' ]; private $extra_liners = [ 'head', 'body', '/html' ]; public function __construct(array $options = []) { foreach ($options as $k => $v) $this->options[$k] = $v; $this->pos = 0; $this->current_mode = 'CONTENT'; $this->tags = [ 'parent' => 'parent1', 'parentcount' => 1, 'parent1' => '' ]; $this->tag_type = ''; $this->token_text = $this->last_token = $this->last_text = $this->token_type = ''; $this->newlines = 0; $this->indent_content = $this->options['indent_inner_html']; $this->indent_level = 0; $this->line_char_count = 0; $this->indent_string = str_repeat($this->options['indent_char'], $this->options['indent_size']); } private function traverse_whitespace() { $input_char = isset($this->input[$this->pos]) ? $this->input[$this->pos] : ''; if (!$input_char || !in_array($input_char, $this->whitespace)) { return false; } $this->newlines = 0; while ($input_char && in_array($input_char, $this->whitespace)) { if ($this->options['preserve_newlines'] && $input_char === "\n" && $this->newlines <= $this->options['max_preserve_newlines']) { $this->newlines += 1; } $this->pos++; $input_char = isset($this->input[$this->pos]) ? $this->input[$this->pos] : ''; } return true; } private function get_content() { $input_char = ''; $content = []; $space = false; while (isset($this->input[$this->pos]) && $this->input[$this->pos] !== '<') { if ($this->pos >= $this->input_length) { return count($content) ? implode('', $content) : ['', 'TK_EOF']; } if ($this->traverse_whitespace()) { if (count($content)) $space = true; continue; } $input_char = $this->input[$this->pos]; $this->pos++; if ($space) { if ($this->line_char_count >= $this->options['wrap_line_length']) { $this->print_newline(false, $content); $this->print_indentation($content); } else { $this->line_char_count++; $content[] = ' '; } $space = false; } $this->line_char_count++; $content[] = $input_char; } return count($content) ? implode('', $content) : ''; } private function get_contents_to($name) { if ($this->pos === $this->input_length) return ['', 'TK_EOF']; $input_char = ''; $content = ''; $reg_array = []; preg_match('##im', $this->input, $reg_array, PREG_OFFSET_CAPTURE, $this->pos); $end_script = $reg_array ? ($reg_array[0][1]) : $this->input_length; if ($this->pos < $end_script) { $content = substr($this->input, $this->pos, max($end_script-$this->pos, 0)); $this->pos = $end_script; } return $content; } private function record_tag($tag) { if (isset($this->tags[$tag . 'count'])) { $this->tags[$tag . 'count']++; $this->tags[$tag . $this->tags[$tag . 'count']] = $this->indent_level; } else { $this->tags[$tag . 'count'] = 1; $this->tags[$tag . $this->tags[$tag . 'count']] = $this->indent_level; } $this->tags[$tag . $this->tags[$tag . 'count'] . 'parent'] = $this->tags['parent']; $this->tags['parent'] = $tag . $this->tags[$tag . 'count']; } private function retrieve_tag($tag) { if (!isset($this->tags[$tag . 'count'])) return; $temp_parent = $this->tags['parent']; while ($temp_parent) { if ($tag . $this->tags[$tag . 'count'] === $temp_parent) break; $temp_parent = isset($this->tags[$temp_parent . 'parent']) ? $this->tags[$temp_parent . 'parent'] : ''; } if ($temp_parent) { $this->indent_level = $this->tags[$tag . $this->tags[$tag . 'count']]; $this->tags['parent'] = $this->tags[$temp_parent . 'parent']; } unset($this->tags[$tag . $this->tags[$tag . 'count'] . 'parent']); unset($this->tags[$tag . $this->tags[$tag . 'count']]); if ($this->tags[$tag . 'count'] === 1) { unset($this->tags[$tag . 'count']); } else { $this->tags[$tag . 'count']--; } } private function indent_to_tag($tag) { if (!$this->tags[$tag . 'count']) return; $temp_parent = $this->tags['parent']; while ($temp_parent) { if ($tag . $this->tags[$tag . 'count'] === $temp_parent) break; $temp_parent = $this->tags[$temp_parent . 'parent']; } if ($temp_parent) $this->indent_level = $this->tags[$tag . $this->tags[$tag . 'count']]; } private function get_tag($peek = false) { $input_char = ''; $content = []; $comment = ''; $space = false; $tag_start = null; $tag_end = null; $tag_start_char = false; $orig_pos = $this->pos; $orig_line_char_count = $this->line_char_count; do { if ($this->pos >= $this->input_length) { if ($peek) { $this->pos = $orig_pos; $this->line_char_count = $orig_line_char_count; } return count($content) ? implode('', $content) : ['', 'TK_EOF']; } $input_char = $this->input[$this->pos]; $this->pos++; if (in_array($input_char, $this->whitespace)) { $space = true; continue; } if ($input_char === "'" || $input_char === '"') { $input_char .= $this->get_unformatted($input_char); $space = true; } if ($input_char === '=') $space = false; if (count($content) && $content[count($content) - 1] !== '=' && $input_char !== '>' && $space) { if ($this->line_char_count >= $this->options['wrap_line_length']) { $this->print_newline(false, $content); $this->print_indentation($content); } else { $content[] = ' '; $this->line_char_count++; } $space = false; } if ($input_char === '<' && !$tag_start_char) { $tag_start = $this->pos - 1; $tag_start_char = '<'; } $this->line_char_count++; $content[] = $input_char; if (isset($content[1]) && $content[1] === '!') { $content = [$this->get_comment($tag_start)]; break; } } while ($input_char !== '>'); $tag_complete = implode('', $content); if (strpos($tag_complete, ' ') !== false) { $tag_index = strpos($tag_complete, ' '); } else { $tag_index = strpos($tag_complete, '>'); } if ($tag_complete[0] === '<') { $tag_offset = 1; } else { $tag_offset = $tag_complete[2] === '#' ? 3 : 2; } $tag_check = strtolower(substr($tag_complete, $tag_offset, max($tag_index-$tag_offset, 0))); if ($tag_complete[strlen($tag_complete) - 2] === '/' || in_array($tag_check, $this->single_token)) { if (!$peek) $this->tag_type = 'SINGLE'; } else if ($tag_check === 'script') { if (!$peek) { $this->record_tag($tag_check); $this->tag_type = 'SCRIPT'; } } else if ($tag_check === 'style') { if (!$peek) { $this->record_tag($tag_check); $this->tag_type = 'STYLE'; } } else if ($this->is_unformatted($tag_check)) { $comment = $this->get_unformatted('', $tag_complete); $content[] = $comment; if ($tag_start > 0 && in_array($this->input[$tag_start - 1], $this->whitespace)) { array_splice($content, 0, 0, $this->input[$tag_start - 1]); } $tag_end = $this->pos - 1; if (in_array($this->input[$tag_end + 1], $this->whitespace)) { $content[] = $this->input[$tag_end + 1]; } $this->tag_type = 'SINGLE'; } else if ($tag_check && $tag_check[0] === '!') { if (!$peek) { $this->tag_type = 'SINGLE'; $this->traverse_whitespace(); } } else if (!$peek) { if ($tag_check && $tag_check[0] === '/') { $this->retrieve_tag(substr($tag_check, 1)); $this->tag_type = 'END'; $this->traverse_whitespace(); } else { $this->record_tag($tag_check); if (strtolower($tag_check) !== 'html') { $this->indent_content = true; } $this->tag_type = 'START'; $this->traverse_whitespace(); } if (in_array($tag_check, $this->extra_liners)) { $this->print_newline(false, $this->output); if (count($this->output) && $this->output[count($this->output) - 2] !== "\n") { $this->print_newline(true, $this->output); } } } if ($peek) { $this->pos = $orig_pos; $this->line_char_count = $orig_line_char_count; } return implode('', $content); } private function get_comment($start_pos) { $comment = ''; $delimiter = '>'; $matched = false; $this->pos = $start_pos; $input_char = $this->input[$this->pos]; $this->pos++; while ($this->pos <= $this->input_length) { $comment .= $input_char; if ($comment[strlen($comment) - 1] === $delimiter[strlen($delimiter) - 1] && strpos($comment, $delimiter) !== false) { break; } if (!$matched && strlen($comment) < 10) { if (strpos($comment, ''; $matched = true; } else if (strpos($comment, ''; $matched = true; } else if (strpos($comment, ''; $matched = true; } else if (strpos($comment, ''; $matched = true; } } $input_char = $this->input[$this->pos]; $this->pos++; } return $comment; } private function get_unformatted($delimiter, $orig_tag = false) { if ($orig_tag && strpos(strtolower($orig_tag), $delimiter) !== false) return ''; $input_char = ''; $content = ''; $min_index = 0; $space = true; do { if ($this->pos >= $this->input_length) return $content; $input_char = $this->input[$this->pos]; $this->pos++; if (in_array($input_char, $this->whitespace)) { if (!$space) { $this->line_char_count--; continue; } if ($input_char === "\n" || $input_char === "\r") { $content .= "\n"; $this->line_char_count = 0; continue; } } $content .= $input_char; $this->line_char_count++; $space = true; if (preg_match('/^data:image\/(bmp|gif|jpeg|png|svg\+xml|tiff|x-icon);base64$/', $content)) { $content .= substr($this->input, $this->pos, strpos($this->input, $delimiter, $this->pos) - $this->pos); $this->line_char_count = strpos($this->input, $delimiter, $this->pos) - $this->pos; $this->pos = strpos($this->input, $delimiter, $this->pos); continue; } } while ( strpos(strtolower($content), $delimiter, $min_index) === false); return $content; } private function get_token() { if ($this->last_token === 'TK_TAG_SCRIPT' || $this->last_token === 'TK_TAG_STYLE') { $type = substr($this->last_token, 7); $token = $this->get_contents_to($type); if (!is_string($token)) return $token; return [$token, 'TK_' . $type]; } if ($this->current_mode === 'CONTENT') { $token = $this->get_content(); if (!is_string($token)) return $token; else return [$token, 'TK_CONTENT']; } if ($this->current_mode === 'TAG') { $token = $this->get_tag(); if (!is_string($token)) { return $token; } else { $tag_name_type = 'TK_TAG_' . $this->tag_type; return [$token, $tag_name_type]; } } } private function get_full_indent($level) { $level = $this->indent_level + $level || 0; if ($level < 1) return ''; return str_repeat($this->indent_string, $level); } private function is_unformatted($tag_check) { if (!in_array($tag_check, $this->options['unformatted'])) return false; if (strtolower($tag_check) !== 'a' || !in_array('a', $this->options['unformatted'])) return true; $next_tag = $this->get_tag(true); $matches = []; preg_match('/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/', ($next_tag ? $next_tag : ""), $matches); $tag = $matches ? $matches : null; return !$tag || in_array($tag, $this->options['unformatted']); } private function print_newline($force, &$arr) { $this->line_char_count = 0; if (!$arr || !count($arr)) return; if ($force || ($arr[count($arr) - 1] !== "\n")) $arr[] = "\n"; } private function print_indentation(&$arr) { for ($i = 0; $i < $this->indent_level; $i++) { $arr[] = $this->indent_string; $this->line_char_count += strlen($this->indent_string); } } private function print_token($text) { if (($text || $text !== '') && count($this->output) && $this->output[count($this->output) - 1] === "\n") { $this->print_indentation($this->output); $text = ltrim($text); } $this->print_token_raw($text); } private function print_token_raw($text) { if ($text && $text !== '') { if (strlen($text) > 1 && $text[strlen($text) - 1] === "\n") { $this->output[] = substr($text, 0, -1); $this->print_newline(false, $this->output); } else { $this->output[] = $text; } } for ($n = 0; $n < $this->newlines; $n++) $this->print_newline($n > 0, $this->output); $this->newlines = 0; } private function indent() { $this->indent_level++; } private function unindent() { if ($this->indent_level > 0) $this->indent_level--; } public function beautify($input) { $this->input = $input; $this->input_length = strlen($this->input); $this->output = []; while (true) { $t = $this->get_token(); $this->token_text = $t[0]; $this->token_type = $t[1]; if ($this->token_type === 'TK_EOF') break; switch ($this->token_type) { case 'TK_TAG_START': $this->print_newline(false, $this->output); $this->print_token($this->token_text); if ($this->indent_content) { $this->indent(); $this->indent_content = false; } $this->current_mode = 'CONTENT'; break; case 'TK_TAG_STYLE': case 'TK_TAG_SCRIPT': $this->print_newline(false, $this->output); $this->print_token($this->token_text); $this->current_mode = 'CONTENT'; break; case 'TK_TAG_END': if ($this->last_token === 'TK_CONTENT' && $this->last_text === '') { $matches = []; preg_match('/\w+/', $this->token_text, $matches); $tag_name = isset($matches[0]) ? $matches[0] : null; $tag_extracted_from_last_output = null; if (count($this->output)) { $matches = []; preg_match('/(?:<|{{#)\s*(\w+)/', $this->output[count($this->output) - 1], $matches); $tag_extracted_from_last_output = isset($matches[0]) ? $matches[0] : null; } if ($tag_extracted_from_last_output === null || $tag_extracted_from_last_output[1] !== $tag_name) { $this->print_newline(false, $this->output); } } $this->print_token($this->token_text); $this->current_mode = 'CONTENT'; break; case 'TK_TAG_SINGLE': $matches = []; preg_match('/^\s*<([a-z]+)/i', $this->token_text, $matches); $tag_check = $matches ? $matches : null; if (!$tag_check || !in_array($tag_check[1], $this->options['unformatted'])) { $this->print_newline(false, $this->output); } $this->print_token($this->token_text); $this->current_mode = 'CONTENT'; break; case 'TK_CONTENT': $this->print_token($this->token_text); $this->current_mode = 'TAG'; break; case 'TK_STYLE': case 'TK_SCRIPT': if ($this->token_text !== '') { $this->print_newline(false, $this->output); $text = $this->token_text; $script_indent_level = 1; if ($this->options['indent_scripts'] === "keep") { $script_indent_level = 0; } else if ($this->options['indent_scripts'] === "separate") { $script_indent_level = -$this->indent_level; } $indentation = $this->get_full_indent($script_indent_level); $matches = []; preg_match('/^\s*/', $text, $matches); $white = isset($matches[0]) ? $matches[0] : null; $matches = []; preg_match('/[^\n\r]*$/', $white, $matches); $dummy = isset($matches[0]) ? $matches[0] : null; $_level = count(explode($this->indent_string, $dummy)) - 1; $reindent = $this->get_full_indent($script_indent_level - $_level); $text = preg_replace('/^\s*/', $indentation, $text); $text = preg_replace('/\r\n|\r|\n/', "\n" . $reindent, $text); $text = preg_replace('/\s+$/', '', $text); if ($text) { $this->print_token_raw($indentation . trim($text)); $this->print_newline(false, $this->output); } } $this->current_mode = 'TAG'; break; } $this->last_token = $this->token_type; $this->last_text = $this->token_text; } return implode('', $this->output); } } // ----------------------------------------------------------------------------- // -- {# Ending Third-Party BEAUTIFY-HTML #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning Third-Party MYSQLDUMP #} -- // ----------------------------------------------------------------------------- /** * ------------------------------------------------------------------------------------- * | Microbe sincerely thanks Ifsnop's Mysqldump authors / 2024-10-23T13:14:43+00:00 | * | Scraped manually and tinkered without any refinement, based on the following URL: | * | - https://github.com/ifsnop/mysqldump-php | * ------------------------------------------------------------------------------------- * PHP version of mysqldump cli that comes with MySQL. * * Tags: mysql mysqldump pdo php7 php5 database php sql hhvm mariadb mysql-backup. * * @category Library * @package Ifsnop\Mysqldump * @author Diego Torres * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License * @link https://github.com/ifsnop/mysqldump-php * */ class Mysqldump { const MAXLINESIZE = 1000000; const GZIP = 'Gzip'; const BZIP2 = 'Bzip2'; const NONE = 'None'; const GZIPSTREAM = 'Gzipstream'; const UTF8 = 'utf8'; const UTF8MB4 = 'utf8mb4'; const BINARY = 'binary'; public $user; public $pass; public $dsn; public $fileName = 'php://stdout'; private $tables = []; private $views = []; private $triggers = []; private $procedures = []; private $functions = []; private $events = []; protected $dbHandler = null; private $dbType = ""; private $compressManager; private $typeAdapter; protected $dumpSettings = []; protected $pdoSettings = []; private $version; private $tableColumnTypes = []; private $transformTableRowCallable; private $transformColumnValueCallable; private $infoCallable; private $dbName; private $host; private $dsnArray = []; private $tableWheres = []; private $tableLimits = []; protected $dumpSettingsDefault = [ 'include-tables' => [], 'exclude-tables' => [], 'include-views' => [], 'compress' => Mysqldump::NONE, 'init_commands' => [], 'no-data' => [], 'if-not-exists' => false, 'reset-auto-increment' => false, 'add-drop-database' => false, 'add-drop-table' => false, 'add-drop-trigger' => true, 'add-locks' => true, 'complete-insert' => false, 'databases' => false, 'default-character-set' => Mysqldump::UTF8, 'disable-keys' => true, 'extended-insert' => true, 'events' => false, 'hex-blob' => true, 'insert-ignore' => false, 'net_buffer_length' => self::MAXLINESIZE, 'no-autocommit' => true, 'no-create-db' => false, 'no-create-info' => false, 'lock-tables' => true, 'routines' => false, 'single-transaction' => true, 'skip-triggers' => false, 'skip-tz-utc' => false, 'skip-comments' => false, 'skip-dump-date' => false, 'skip-definer' => false, 'where' => '', 'disable-foreign-keys-check' => true ]; protected $pdoSettingsDefault = [ PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; public function __construct( $dsn = '', $user = '', $pass = '', $dumpSettings = [], $pdoSettings = [] ) { $this->user = $user; $this->pass = $pass; $this->parseDsn($dsn); if ("mysql" === $this->dbType) { $this->pdoSettingsDefault[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = false; } $this->pdoSettings = array_replace_recursive($this->pdoSettingsDefault, $pdoSettings); $this->dumpSettings = array_replace_recursive($this->dumpSettingsDefault, $dumpSettings); $this->dumpSettings['init_commands'][] = "SET NAMES ".$this->dumpSettings['default-character-set']; if (false === $this->dumpSettings['skip-tz-utc']) { $this->dumpSettings['init_commands'][] = "SET TIME_ZONE='+00:00'"; } $diff = array_diff(array_keys($this->dumpSettings), array_keys($this->dumpSettingsDefault)); if (count($diff) > 0) { throw new Exception("Unexpected value in dumpSettings: (".implode(",", $diff).")"); } if (!is_array($this->dumpSettings['include-tables']) || !is_array($this->dumpSettings['exclude-tables'])) { throw new Exception("Include-tables and exclude-tables should be arrays"); } if (!isset($dumpSettings['include-views'])) { $this->dumpSettings['include-views'] = $this->dumpSettings['include-tables']; } $this->compressManager = CompressManagerFactory::create($this->dumpSettings['compress']); } public function __destruct() { $this->dbHandler = null; } public function setTableWheres(array $tableWheres) { $this->tableWheres = $tableWheres; } public function getTableWhere($tableName) { if (!empty($this->tableWheres[$tableName])) { return $this->tableWheres[$tableName]; } elseif ($this->dumpSettings['where']) { return $this->dumpSettings['where']; } return false; } public function setTableLimits(array $tableLimits) { $this->tableLimits = $tableLimits; } public function getTableLimit($tableName) { if (!isset($this->tableLimits[$tableName])) { return false; } $limit = $this->tableLimits[$tableName]; if (!is_numeric($limit)) { return false; } return $limit; } public function restore($path) { if(!$path || !is_file($path)){ throw new Exception("File {$path} does not exist."); } $handle = fopen($path , 'rb'); if(!$handle){ throw new Exception("Failed reading file {$path}. Check access permissions."); } if(!$this->dbHandler){ $this->connect(); } $buffer = ''; while ( !feof($handle) ) { $line = fgets($handle); if (substr($line, 0, 2) == '--' || !$line) { continue; // skip comments } $buffer .= $line; if (';' == substr(rtrim($line), -1, 1)) { $this->dbHandler->exec($buffer); $buffer = ''; } } fclose($handle); } private function parseDsn($dsn) { if (empty($dsn) || (false === ($pos = strpos($dsn, ":")))) { throw new Exception("Empty DSN string"); } $this->dsn = $dsn; $this->dbType = strtolower(substr($dsn, 0, $pos)); // always returns a string if (empty($this->dbType)) { throw new Exception("Missing database type from DSN string"); } $dsn = substr($dsn, $pos + 1); foreach (explode(";", $dsn) as $kvp) { $kvpArr = explode("=", $kvp); $this->dsnArray[strtolower($kvpArr[0])] = $kvpArr[1]; } if (empty($this->dsnArray['host']) && empty($this->dsnArray['unix_socket'])) { throw new Exception("Missing host from DSN string"); } $this->host = (!empty($this->dsnArray['host'])) ? $this->dsnArray['host'] : $this->dsnArray['unix_socket']; if (empty($this->dsnArray['dbname'])) { throw new Exception("Missing database name from DSN string"); } $this->dbName = $this->dsnArray['dbname']; return true; } protected function connect() { try { switch ($this->dbType) { case 'sqlite': $this->dbHandler = @new PDO("sqlite:".$this->dbName, null, null, $this->pdoSettings); break; case 'mysql': case 'pgsql': case 'dblib': $this->dbHandler = @new PDO( $this->dsn, $this->user, $this->pass, $this->pdoSettings ); foreach ($this->dumpSettings['init_commands'] as $stmt) { $this->dbHandler->exec($stmt); } $this->version = $this->dbHandler->getAttribute(PDO::ATTR_SERVER_VERSION); break; default: throw new Exception("Unsupported database type (".$this->dbType.")"); } } catch (PDOException $e) { throw new Exception( "Connection to ".$this->dbType." failed with message: ". $e->getMessage() ); } if (is_null($this->dbHandler)) { throw new Exception("Connection to ".$this->dbType."failed"); } $this->dbHandler->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL); $this->typeAdapter = TypeAdapterFactory::create($this->dbType, $this->dbHandler, $this->dumpSettings); } public function start($filename = '') { if (!empty($filename)) { $this->fileName = $filename; } $this->connect(); $this->compressManager->open($this->fileName); $this->compressManager->write($this->getDumpFileHeader()); if ($this->dumpSettings['single-transaction']) { $this->dbHandler->exec($this->typeAdapter->setup_transaction()); $this->dbHandler->exec($this->typeAdapter->start_transaction()); } $this->compressManager->write( $this->typeAdapter->backup_parameters() ); if ($this->dumpSettings['databases']) { $this->compressManager->write( $this->typeAdapter->getDatabaseHeader($this->dbName) ); if ($this->dumpSettings['add-drop-database']) { $this->compressManager->write( $this->typeAdapter->add_drop_database($this->dbName) ); } } $this->getDatabaseStructureTables(); $this->getDatabaseStructureViews(); $this->getDatabaseStructureTriggers(); $this->getDatabaseStructureProcedures(); $this->getDatabaseStructureFunctions(); $this->getDatabaseStructureEvents(); if ($this->dumpSettings['databases']) { $this->compressManager->write( $this->typeAdapter->databases($this->dbName) ); } if (0 < count($this->dumpSettings['include-tables'])) { $name = implode(",", $this->dumpSettings['include-tables']); throw new Exception("Table (".$name.") not found in database"); } $this->exportTables(); $this->exportTriggers(); $this->exportFunctions(); $this->exportProcedures(); $this->exportViews(); $this->exportEvents(); $this->compressManager->write( $this->typeAdapter->restore_parameters() ); if ($this->dumpSettings['single-transaction']) { $this->dbHandler->exec($this->typeAdapter->commit_transaction()); } $this->compressManager->write($this->getDumpFileFooter()); $this->compressManager->close(); return; } private function getDumpFileHeader() { $header = ''; if (!$this->dumpSettings['skip-comments']) { $header = "-- mysqldump-php https://github.com/ifsnop/mysqldump-php".PHP_EOL. "--".PHP_EOL. "-- Host: {$this->host}\tDatabase: {$this->dbName}".PHP_EOL. "-- ------------------------------------------------------".PHP_EOL; if (!empty($this->version)) { $header .= "-- Server version \t".$this->version.PHP_EOL; } if (!$this->dumpSettings['skip-dump-date']) { $header .= "-- Date: ".date('r').PHP_EOL.PHP_EOL; } } return $header; } private function getDumpFileFooter() { $footer = ''; if (!$this->dumpSettings['skip-comments']) { $footer .= '-- Dump completed'; if (!$this->dumpSettings['skip-dump-date']) { $footer .= ' on: '.date('r'); } $footer .= PHP_EOL; } return $footer; } private function getDatabaseStructureTables() { if (empty($this->dumpSettings['include-tables'])) { foreach ($this->dbHandler->query($this->typeAdapter->show_tables($this->dbName)) as $row) { array_push($this->tables, current($row)); } } else { foreach ($this->dbHandler->query($this->typeAdapter->show_tables($this->dbName)) as $row) { if (in_array(current($row), $this->dumpSettings['include-tables'], true)) { array_push($this->tables, current($row)); $elem = array_search( current($row), $this->dumpSettings['include-tables'] ); unset($this->dumpSettings['include-tables'][$elem]); } } } return; } private function getDatabaseStructureViews() { if (empty($this->dumpSettings['include-views'])) { foreach ($this->dbHandler->query($this->typeAdapter->show_views($this->dbName)) as $row) { array_push($this->views, current($row)); } } else { foreach ($this->dbHandler->query($this->typeAdapter->show_views($this->dbName)) as $row) { if (in_array(current($row), $this->dumpSettings['include-views'], true)) { array_push($this->views, current($row)); $elem = array_search( current($row), $this->dumpSettings['include-views'] ); unset($this->dumpSettings['include-views'][$elem]); } } } return; } private function getDatabaseStructureTriggers() { if (false === $this->dumpSettings['skip-triggers']) { foreach ($this->dbHandler->query($this->typeAdapter->show_triggers($this->dbName)) as $row) { array_push($this->triggers, $row['Trigger']); } } return; } private function getDatabaseStructureProcedures() { if ($this->dumpSettings['routines']) { foreach ($this->dbHandler->query($this->typeAdapter->show_procedures($this->dbName)) as $row) { array_push($this->procedures, $row['procedure_name']); } } return; } private function getDatabaseStructureFunctions() { if ($this->dumpSettings['routines']) { foreach ($this->dbHandler->query($this->typeAdapter->show_functions($this->dbName)) as $row) { array_push($this->functions, $row['function_name']); } } return; } private function getDatabaseStructureEvents() { if ($this->dumpSettings['events']) { foreach ($this->dbHandler->query($this->typeAdapter->show_events($this->dbName)) as $row) { array_push($this->events, $row['event_name']); } } return; } private function matches($table, $arr) { $match = false; foreach ($arr as $pattern) { if ('/' != $pattern[0]) { continue; } if (1 == preg_match($pattern, $table)) { $match = true; } } return in_array($table, $arr) || $match; } private function exportTables() { foreach ($this->tables as $table) { if ($this->matches($table, $this->dumpSettings['exclude-tables'])) { continue; } $this->getTableStructure($table); if (false === $this->dumpSettings['no-data']) { // don't break compatibility with old trigger $this->listValues($table); } elseif (true === $this->dumpSettings['no-data'] || $this->matches($table, $this->dumpSettings['no-data'])) { continue; } else { $this->listValues($table); } } } private function exportViews() { if (false === $this->dumpSettings['no-create-info']) { foreach ($this->views as $view) { if ($this->matches($view, $this->dumpSettings['exclude-tables'])) { continue; } $this->tableColumnTypes[$view] = $this->getTableColumnTypes($view); $this->getViewStructureTable($view); } foreach ($this->views as $view) { if ($this->matches($view, $this->dumpSettings['exclude-tables'])) { continue; } $this->getViewStructureView($view); } } } private function exportTriggers() { foreach ($this->triggers as $trigger) { $this->getTriggerStructure($trigger); } } private function exportProcedures() { foreach ($this->procedures as $procedure) { $this->getProcedureStructure($procedure); } } private function exportFunctions() { foreach ($this->functions as $function) { $this->getFunctionStructure($function); } } private function exportEvents() { foreach ($this->events as $event) { $this->getEventStructure($event); } } private function getTableStructure($tableName) { if (!$this->dumpSettings['no-create-info']) { $ret = ''; if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- Table structure for table `$tableName`".PHP_EOL. "--".PHP_EOL.PHP_EOL; } $stmt = $this->typeAdapter->show_create_table($tableName); foreach ($this->dbHandler->query($stmt) as $r) { $this->compressManager->write($ret); if ($this->dumpSettings['add-drop-table']) { $this->compressManager->write( $this->typeAdapter->drop_table($tableName) ); } $this->compressManager->write( $this->typeAdapter->create_table($r) ); break; } } $this->tableColumnTypes[$tableName] = $this->getTableColumnTypes($tableName); return; } private function getTableColumnTypes($tableName) { $columnTypes = []; $columns = $this->dbHandler->query( $this->typeAdapter->show_columns($tableName) ); $columns->setFetchMode(PDO::FETCH_ASSOC); foreach ($columns as $key => $col) { $types = $this->typeAdapter->parseColumnType($col); $columnTypes[$col['Field']] = [ 'is_numeric'=> $types['is_numeric'], 'is_blob' => $types['is_blob'], 'type' => $types['type'], 'type_sql' => $col['Type'], 'is_virtual' => $types['is_virtual'] ]; } return $columnTypes; } private function getViewStructureTable($viewName) { if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- Stand-In structure for view `{$viewName}`".PHP_EOL. "--".PHP_EOL.PHP_EOL; $this->compressManager->write($ret); } $stmt = $this->typeAdapter->show_create_view($viewName); foreach ($this->dbHandler->query($stmt) as $r) { if ($this->dumpSettings['add-drop-table']) { $this->compressManager->write( $this->typeAdapter->drop_view($viewName) ); } $this->compressManager->write( $this->createStandInTable($viewName) ); break; } } public function createStandInTable($viewName) { $ret = []; foreach ($this->tableColumnTypes[$viewName] as $k => $v) { $ret[] = "`{$k}` {$v['type_sql']}"; } $ret = implode(PHP_EOL.",", $ret); $ret = "CREATE TABLE IF NOT EXISTS `$viewName` (". PHP_EOL.$ret.PHP_EOL.");".PHP_EOL; return $ret; } private function getViewStructureView($viewName) { if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- View structure for view `{$viewName}`".PHP_EOL. "--".PHP_EOL.PHP_EOL; $this->compressManager->write($ret); } $stmt = $this->typeAdapter->show_create_view($viewName); foreach ($this->dbHandler->query($stmt) as $r) { $this->compressManager->write( $this->typeAdapter->drop_view($viewName) ); $this->compressManager->write( $this->typeAdapter->create_view($r) ); break; } } private function getTriggerStructure($triggerName) { $stmt = $this->typeAdapter->show_create_trigger($triggerName); foreach ($this->dbHandler->query($stmt) as $r) { if ($this->dumpSettings['add-drop-trigger']) { $this->compressManager->write( $this->typeAdapter->add_drop_trigger($triggerName) ); } $this->compressManager->write( $this->typeAdapter->create_trigger($r) ); return; } } private function getProcedureStructure($procedureName) { if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- Dumping routines for database '".$this->dbName."'".PHP_EOL. "--".PHP_EOL.PHP_EOL; $this->compressManager->write($ret); } $stmt = $this->typeAdapter->show_create_procedure($procedureName); foreach ($this->dbHandler->query($stmt) as $r) { $this->compressManager->write( $this->typeAdapter->create_procedure($r) ); return; } } private function getFunctionStructure($functionName) { if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- Dumping routines for database '".$this->dbName."'".PHP_EOL. "--".PHP_EOL.PHP_EOL; $this->compressManager->write($ret); } $stmt = $this->typeAdapter->show_create_function($functionName); foreach ($this->dbHandler->query($stmt) as $r) { $this->compressManager->write( $this->typeAdapter->create_function($r) ); return; } } private function getEventStructure($eventName) { if (!$this->dumpSettings['skip-comments']) { $ret = "--".PHP_EOL. "-- Dumping events for database '".$this->dbName."'".PHP_EOL. "--".PHP_EOL.PHP_EOL; $this->compressManager->write($ret); } $stmt = $this->typeAdapter->show_create_event($eventName); foreach ($this->dbHandler->query($stmt) as $r) { $this->compressManager->write( $this->typeAdapter->create_event($r) ); return; } } private function prepareColumnValues($tableName, array $row) { $ret = []; $columnTypes = $this->tableColumnTypes[$tableName]; if ($this->transformTableRowCallable) { $row = call_user_func($this->transformTableRowCallable, $tableName, $row); } foreach ($row as $colName => $colValue) { if ($this->transformColumnValueCallable) { $colValue = call_user_func($this->transformColumnValueCallable, $tableName, $colName, $colValue, $row); } $ret[] = $this->escape($colValue, $columnTypes[$colName]); } return $ret; } private function escape($colValue, $colType) { if (is_null($colValue)) { return "NULL"; } elseif ($this->dumpSettings['hex-blob'] && $colType['is_blob']) { if ($colType['type'] == 'bit' || !empty($colValue)) { return "0x{$colValue}"; } else { return "''"; } } elseif ($colType['is_numeric']) { return $colValue; } return $this->dbHandler->quote($colValue); } public function setTransformTableRowHook($callable) { $this->transformTableRowCallable = $callable; } public function setTransformColumnValueHook($callable) { $this->transformColumnValueCallable = $callable; } public function setInfoHook($callable) { $this->infoCallable = $callable; } private function listValues($tableName) { $this->prepareListValues($tableName); $onlyOnce = true; $colStmt = $this->getColumnStmt($tableName); if ($this->dumpSettings['complete-insert']) { $colNames = $this->getColumnNames($tableName); } $stmt = "SELECT ".implode(",", $colStmt)." FROM `$tableName`"; $condition = $this->getTableWhere($tableName); if ($condition) { $stmt .= " WHERE {$condition}"; } $limit = $this->getTableLimit($tableName); if ($limit !== false) { $stmt .= " LIMIT {$limit}"; } $resultSet = $this->dbHandler->query($stmt); $resultSet->setFetchMode(PDO::FETCH_ASSOC); $ignore = $this->dumpSettings['insert-ignore'] ? ' IGNORE' : ''; $count = 0; $line = ''; foreach ($resultSet as $row) { $count++; $vals = $this->prepareColumnValues($tableName, $row); if ($onlyOnce || !$this->dumpSettings['extended-insert']) { if ($this->dumpSettings['complete-insert']) { $line .= "INSERT$ignore INTO `$tableName` (". implode(", ", $colNames). ") VALUES (".implode(",", $vals).")"; } else { $line .= "INSERT$ignore INTO `$tableName` VALUES (".implode(",", $vals).")"; } $onlyOnce = false; } else { $line .= ",(".implode(",", $vals).")"; } if ((strlen($line) > $this->dumpSettings['net_buffer_length']) || !$this->dumpSettings['extended-insert']) { $onlyOnce = true; $this->compressManager->write($line . ";".PHP_EOL); $line = ''; } } $resultSet->closeCursor(); if ('' !== $line) { $this->compressManager->write($line. ";".PHP_EOL); } $this->endListValues($tableName, $count); if ($this->infoCallable) { call_user_func($this->infoCallable, 'table', [ 'name' => $tableName, 'rowCount' => $count ]); } } public function prepareListValues($tableName) { if (!$this->dumpSettings['skip-comments']) { $this->compressManager->write( "--".PHP_EOL. "-- Dumping data for table `$tableName`".PHP_EOL. "--".PHP_EOL.PHP_EOL ); } if ($this->dumpSettings['lock-tables'] && !$this->dumpSettings['single-transaction']) { $this->typeAdapter->lock_table($tableName); } if ($this->dumpSettings['add-locks']) { $this->compressManager->write( $this->typeAdapter->start_add_lock_table($tableName) ); } if ($this->dumpSettings['disable-keys']) { $this->compressManager->write( $this->typeAdapter->start_add_disable_keys($tableName) ); } if ($this->dumpSettings['no-autocommit']) { $this->compressManager->write( $this->typeAdapter->start_disable_autocommit() ); } return; } public function endListValues($tableName, $count = 0) { if ($this->dumpSettings['disable-keys']) { $this->compressManager->write( $this->typeAdapter->end_add_disable_keys($tableName) ); } if ($this->dumpSettings['add-locks']) { $this->compressManager->write( $this->typeAdapter->end_add_lock_table($tableName) ); } if ($this->dumpSettings['lock-tables'] && !$this->dumpSettings['single-transaction']) { $this->typeAdapter->unlock_table($tableName); } if ($this->dumpSettings['no-autocommit']) { $this->compressManager->write( $this->typeAdapter->end_disable_autocommit() ); } $this->compressManager->write(PHP_EOL); if (!$this->dumpSettings['skip-comments']) { $this->compressManager->write( "-- Dumped table `".$tableName."` with $count row(s)".PHP_EOL. '--'.PHP_EOL.PHP_EOL ); } return; } public function getColumnStmt($tableName) { $colStmt = []; foreach ($this->tableColumnTypes[$tableName] as $colName => $colType) { if ($colType['is_virtual']) { $this->dumpSettings['complete-insert'] = true; continue; } elseif ($colType['type'] == 'bit' && $this->dumpSettings['hex-blob']) { $colStmt[] = "LPAD(HEX(`{$colName}`),2,'0') AS `{$colName}`"; } elseif ($colType['type'] == 'double' && PHP_VERSION_ID > 80100) { $colStmt[] = sprintf("CONCAT(`%s`) AS `%s`", $colName, $colName); } elseif ($colType['is_blob'] && $this->dumpSettings['hex-blob']) { $colStmt[] = "HEX(`{$colName}`) AS `{$colName}`"; } else { $colStmt[] = "`{$colName}`"; } } return $colStmt; } public function getColumnNames($tableName) { $colNames = []; foreach ($this->tableColumnTypes[$tableName] as $colName => $colType) { if ($colType['is_virtual']) { $this->dumpSettings['complete-insert'] = true; continue; } else { $colNames[] = "`{$colName}`"; } } return $colNames; } } abstract class CompressMethod { public static $enums = [ Mysqldump::NONE, Mysqldump::GZIP, Mysqldump::BZIP2, Mysqldump::GZIPSTREAM ]; public static function isValid($c) { return in_array($c, self::$enums); } } abstract class CompressManagerFactory { public static function create($c) { $c = ucfirst(strtolower($c)); if (!CompressMethod::isValid($c)) { throw new Exception("Compression method ($c) is not defined yet"); } $method = "\\"."Compress".$c; return new $method; } } class CompressBzip2 extends CompressManagerFactory { private $fileHandler = null; public function __construct() { if (!function_exists("bzopen")) { throw new Exception("Compression is enabled, but bzip2 lib is not installed or configured properly"); } } public function open($filename) { $this->fileHandler = bzopen($filename, "w"); if (false === $this->fileHandler) { throw new Exception("Output file is not writable"); } return true; } public function write($str) { $bytesWritten = bzwrite($this->fileHandler, $str); if (false === $bytesWritten) { throw new Exception("Writting to file failed! Probably, there is no more free space left?"); } return $bytesWritten; } public function close() { return bzclose($this->fileHandler); } } class CompressGzip extends CompressManagerFactory { private $fileHandler = null; public function __construct() { if (!function_exists("gzopen")) { throw new Exception("Compression is enabled, but gzip lib is not installed or configured properly"); } } public function open($filename) { $this->fileHandler = gzopen($filename, "wb"); if (false === $this->fileHandler) { throw new Exception("Output file is not writable"); } return true; } public function write($str) { $bytesWritten = gzwrite($this->fileHandler, $str); if (false === $bytesWritten) { throw new Exception("Writting to file failed! Probably, there is no more free space left?"); } return $bytesWritten; } public function close() { return gzclose($this->fileHandler); } } class CompressNone extends CompressManagerFactory { private $fileHandler = null; public function open($filename) { $this->fileHandler = fopen($filename, "wb"); if (false === $this->fileHandler) { throw new Exception("Output file is not writable"); } return true; } public function write($str) { $bytesWritten = fwrite($this->fileHandler, $str); if (false === $bytesWritten) { throw new Exception("Writting to file failed! Probably, there is no more free space left?"); } return $bytesWritten; } public function close() { return fclose($this->fileHandler); } } class CompressGzipstream extends CompressManagerFactory { private $fileHandler = null; private $compressContext; public function open($filename) { $this->fileHandler = fopen($filename, "wb"); if (false === $this->fileHandler) { throw new Exception("Output file is not writable"); } $this->compressContext = deflate_init(ZLIB_ENCODING_GZIP, array('level' => 9)); return true; } public function write($str) { $bytesWritten = fwrite($this->fileHandler, deflate_add($this->compressContext, $str, ZLIB_NO_FLUSH)); if (false === $bytesWritten) { throw new Exception("Writting to file failed! Probably, there is no more free space left?"); } return $bytesWritten; } public function close() { fwrite($this->fileHandler, deflate_add($this->compressContext, '', ZLIB_FINISH)); return fclose($this->fileHandler); } } abstract class TypeAdapter { public static $enums = array( "Sqlite", "Mysql" ); public static function isValid($c) { return in_array($c, self::$enums); } } abstract class TypeAdapterFactory { protected $dbHandler = null; protected $dumpSettings = []; public static function create($c, $dbHandler = null, $dumpSettings = []) { $c = ucfirst(strtolower($c)); if (!TypeAdapter::isValid($c)) { throw new Exception("Database type support for ($c) not yet available"); } $method = "\\"."TypeAdapter".$c; return new $method($dbHandler, $dumpSettings); } public function __construct($dbHandler = null, $dumpSettings = []) { $this->dbHandler = $dbHandler; $this->dumpSettings = $dumpSettings; } public function databases() { return ""; } public function show_create_table($tableName) { return "SELECT tbl_name as 'Table', sql as 'Create Table' ". "FROM sqlite_master ". "WHERE type='table' AND tbl_name='$tableName'"; } public function create_table($row) { return ""; } public function show_create_view($viewName) { return "SELECT tbl_name as 'View', sql as 'Create View' ". "FROM sqlite_master ". "WHERE type='view' AND tbl_name='$viewName'"; } public function create_view($row) { return ""; } public function show_create_trigger($triggerName) { return ""; } public function create_trigger($triggerName) { return ""; } public function create_procedure($procedureName) { return ""; } public function create_function($functionName) { return ""; } public function show_tables() { return "SELECT tbl_name FROM sqlite_master WHERE type='table'"; } public function show_views() { return "SELECT tbl_name FROM sqlite_master WHERE type='view'"; } public function show_triggers() { return "SELECT name FROM sqlite_master WHERE type='trigger'"; } public function show_columns() { if (func_num_args() != 1) { return ""; } $args = func_get_args(); return "pragma table_info({$args[0]})"; } public function show_procedures() { return ""; } public function show_functions() { return ""; } public function show_events() { return ""; } public function setup_transaction() { return ""; } public function start_transaction() { return "BEGIN EXCLUSIVE"; } public function commit_transaction() { return "COMMIT"; } public function lock_table() { return ""; } public function unlock_table() { return ""; } public function start_add_lock_table() { return PHP_EOL; } public function end_add_lock_table() { return PHP_EOL; } public function start_add_disable_keys() { return PHP_EOL; } public function end_add_disable_keys() { return PHP_EOL; } public function start_disable_foreign_keys_check() { return PHP_EOL; } public function end_disable_foreign_keys_check() { return PHP_EOL; } public function add_drop_database() { return PHP_EOL; } public function add_drop_trigger() { return PHP_EOL; } public function drop_table() { return PHP_EOL; } public function drop_view() { return PHP_EOL; } public function parseColumnType($colType) { return []; } public function backup_parameters() { return PHP_EOL; } public function restore_parameters() { return PHP_EOL; } } class TypeAdapterPgsql extends TypeAdapterFactory { } class TypeAdapterDblib extends TypeAdapterFactory { } class TypeAdapterSqlite extends TypeAdapterFactory { } class TypeAdapterMysql extends TypeAdapterFactory { const DEFINER_RE = 'DEFINER=`(?:[^`]|``)*`@`(?:[^`]|``)*`'; public $mysqlTypes = array( 'numerical' => array( 'bit', 'tinyint', 'smallint', 'mediumint', 'int', 'integer', 'bigint', 'real', 'double', 'float', 'decimal', 'numeric' ), 'blob' => array( 'tinyblob', 'blob', 'mediumblob', 'longblob', 'binary', 'varbinary', 'bit', 'geometry', /* http://bugs.mysql.com/bug.php?id=43544 */ 'point', 'linestring', 'polygon', 'multipoint', 'multilinestring', 'multipolygon', 'geometrycollection', ) ); public function databases() { if ($this->dumpSettings['no-create-db']) { return ""; } $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); $databaseName = $args[0]; $resultSet = $this->dbHandler->query("SHOW VARIABLES LIKE 'character_set_database';"); $characterSet = $resultSet->fetchColumn(1); $resultSet->closeCursor(); $resultSet = $this->dbHandler->query("SHOW VARIABLES LIKE 'collation_database';"); $collationDb = $resultSet->fetchColumn(1); $resultSet->closeCursor(); $ret = ""; $ret .= "CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$databaseName}`". " /*!40100 DEFAULT CHARACTER SET {$characterSet} ". " COLLATE {$collationDb} */;".PHP_EOL.PHP_EOL. "USE `{$databaseName}`;".PHP_EOL.PHP_EOL; return $ret; } public function show_create_table($tableName) { return "SHOW CREATE TABLE `$tableName`"; } public function show_create_view($viewName) { return "SHOW CREATE VIEW `$viewName`"; } public function show_create_trigger($triggerName) { return "SHOW CREATE TRIGGER `$triggerName`"; } public function show_create_procedure($procedureName) { return "SHOW CREATE PROCEDURE `$procedureName`"; } public function show_create_function($functionName) { return "SHOW CREATE FUNCTION `$functionName`"; } public function show_create_event($eventName) { return "SHOW CREATE EVENT `$eventName`"; } public function create_table($row) { if (!isset($row['Create Table'])) { throw new Exception("Error getting table code, unknown output"); } $createTable = $row['Create Table']; if ($this->dumpSettings['reset-auto-increment']) { $match = "/AUTO_INCREMENT=[0-9]+/s"; $replace = ""; $createTable = preg_replace($match, $replace, $createTable); } if ($this->dumpSettings['if-not-exists'] ) { $createTable = preg_replace('/^CREATE TABLE/', 'CREATE TABLE IF NOT EXISTS', $createTable); } $ret = "/*!40101 SET @saved_cs_client = @@character_set_client */;".PHP_EOL. "/*!40101 SET character_set_client = ".$this->dumpSettings['default-character-set']." */;".PHP_EOL. $createTable.";".PHP_EOL. "/*!40101 SET character_set_client = @saved_cs_client */;".PHP_EOL. PHP_EOL; return $ret; } public function create_view($row) { $ret = ""; if (!isset($row['Create View'])) { throw new Exception("Error getting view structure, unknown output"); } $viewStmt = $row['Create View']; $definerStr = $this->dumpSettings['skip-definer'] ? '' : '/*!50013 \2 */'.PHP_EOL; if ($viewStmtReplaced = preg_replace( '/^(CREATE(?:\s+ALGORITHM=(?:UNDEFINED|MERGE|TEMPTABLE))?)\s+(' .self::DEFINER_RE.'(?:\s+SQL SECURITY (?:DEFINER|INVOKER))?)?\s+(VIEW .+)$/', '/*!50001 \1 */'.PHP_EOL.$definerStr.'/*!50001 \3 */', $viewStmt, 1 )) { $viewStmt = $viewStmtReplaced; }; $ret .= $viewStmt.';'.PHP_EOL.PHP_EOL; return $ret; } public function create_trigger($row) { $ret = ""; if (!isset($row['SQL Original Statement'])) { throw new Exception("Error getting trigger code, unknown output"); } $triggerStmt = $row['SQL Original Statement']; $definerStr = $this->dumpSettings['skip-definer'] ? '' : '/*!50017 \2*/ '; if ($triggerStmtReplaced = preg_replace( '/^(CREATE)\s+('.self::DEFINER_RE.')?\s+(TRIGGER\s.*)$/s', '/*!50003 \1*/ '.$definerStr.'/*!50003 \3 */', $triggerStmt, 1 )) { $triggerStmt = $triggerStmtReplaced; } $ret .= "DELIMITER ;;".PHP_EOL. $triggerStmt.";;".PHP_EOL. "DELIMITER ;".PHP_EOL.PHP_EOL; return $ret; } public function create_procedure($row) { $ret = ""; if (!isset($row['Create Procedure'])) { throw new Exception("Error getting procedure code, unknown output. ". "Please check 'https://bugs.mysql.com/bug.php?id=14564'"); } $procedureStmt = $row['Create Procedure']; if ($this->dumpSettings['skip-definer']) { if ($procedureStmtReplaced = preg_replace( '/^(CREATE)\s+('.self::DEFINER_RE.')?\s+(PROCEDURE\s.*)$/s', '\1 \3', $procedureStmt, 1 )) { $procedureStmt = $procedureStmtReplaced; } } $ret .= "/*!50003 DROP PROCEDURE IF EXISTS `". $row['Procedure']."` */;".PHP_EOL. "/*!40101 SET @saved_cs_client = @@character_set_client */;".PHP_EOL. "/*!40101 SET character_set_client = ".$this->dumpSettings['default-character-set']." */;".PHP_EOL. "DELIMITER ;;".PHP_EOL. $procedureStmt." ;;".PHP_EOL. "DELIMITER ;".PHP_EOL. "/*!40101 SET character_set_client = @saved_cs_client */;".PHP_EOL.PHP_EOL; return $ret; } public function create_function($row) { $ret = ""; if (!isset($row['Create Function'])) { throw new Exception("Error getting function code, unknown output. ". "Please check 'https://bugs.mysql.com/bug.php?id=14564'"); } $functionStmt = $row['Create Function']; $characterSetClient = $row['character_set_client']; $collationConnection = $row['collation_connection']; $sqlMode = $row['sql_mode']; if ( $this->dumpSettings['skip-definer'] ) { if ($functionStmtReplaced = preg_replace( '/^(CREATE)\s+('.self::DEFINER_RE.')?\s+(FUNCTION\s.*)$/s', '\1 \3', $functionStmt, 1 )) { $functionStmt = $functionStmtReplaced; } } $ret .= "/*!50003 DROP FUNCTION IF EXISTS `". $row['Function']."` */;".PHP_EOL. "/*!40101 SET @saved_cs_client = @@character_set_client */;".PHP_EOL. "/*!50003 SET @saved_cs_results = @@character_set_results */ ;".PHP_EOL. "/*!50003 SET @saved_col_connection = @@collation_connection */ ;".PHP_EOL. "/*!40101 SET character_set_client = ".$characterSetClient." */;".PHP_EOL. "/*!40101 SET character_set_results = ".$characterSetClient." */;".PHP_EOL. "/*!50003 SET collation_connection = ".$collationConnection." */ ;".PHP_EOL. "/*!50003 SET @saved_sql_mode = @@sql_mode */ ;;".PHP_EOL. "/*!50003 SET sql_mode = '".$sqlMode."' */ ;;".PHP_EOL. "/*!50003 SET @saved_time_zone = @@time_zone */ ;;".PHP_EOL. "/*!50003 SET time_zone = 'SYSTEM' */ ;;".PHP_EOL. "DELIMITER ;;".PHP_EOL. $functionStmt." ;;".PHP_EOL. "DELIMITER ;".PHP_EOL. "/*!50003 SET sql_mode = @saved_sql_mode */ ;".PHP_EOL. "/*!50003 SET character_set_client = @saved_cs_client */ ;".PHP_EOL. "/*!50003 SET character_set_results = @saved_cs_results */ ;".PHP_EOL. "/*!50003 SET collation_connection = @saved_col_connection */ ;".PHP_EOL. "/*!50106 SET TIME_ZONE= @saved_time_zone */ ;".PHP_EOL.PHP_EOL; return $ret; } public function create_event($row) { $ret = ""; if (!isset($row['Create Event'])) { throw new Exception("Error getting event code, unknown output. ". "Please check 'http://stackoverflow.com/questions/10853826/mysql-5-5-create-event-gives-syntax-error'"); } $eventName = $row['Event']; $eventStmt = $row['Create Event']; $sqlMode = $row['sql_mode']; $definerStr = $this->dumpSettings['skip-definer'] ? '' : '/*!50117 \2*/ '; if ($eventStmtReplaced = preg_replace( '/^(CREATE)\s+('.self::DEFINER_RE.')?\s+(EVENT .*)$/', '/*!50106 \1*/ '.$definerStr.'/*!50106 \3 */', $eventStmt, 1 )) { $eventStmt = $eventStmtReplaced; } $ret .= "/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;".PHP_EOL. "/*!50106 DROP EVENT IF EXISTS `".$eventName."` */;".PHP_EOL. "DELIMITER ;;".PHP_EOL. "/*!50003 SET @saved_cs_client = @@character_set_client */ ;;".PHP_EOL. "/*!50003 SET @saved_cs_results = @@character_set_results */ ;;".PHP_EOL. "/*!50003 SET @saved_col_connection = @@collation_connection */ ;;".PHP_EOL. "/*!50003 SET character_set_client = utf8 */ ;;".PHP_EOL. "/*!50003 SET character_set_results = utf8 */ ;;".PHP_EOL. "/*!50003 SET collation_connection = utf8_general_ci */ ;;".PHP_EOL. "/*!50003 SET @saved_sql_mode = @@sql_mode */ ;;".PHP_EOL. "/*!50003 SET sql_mode = '".$sqlMode."' */ ;;".PHP_EOL. "/*!50003 SET @saved_time_zone = @@time_zone */ ;;".PHP_EOL. "/*!50003 SET time_zone = 'SYSTEM' */ ;;".PHP_EOL. $eventStmt." ;;".PHP_EOL. "/*!50003 SET time_zone = @saved_time_zone */ ;;".PHP_EOL. "/*!50003 SET sql_mode = @saved_sql_mode */ ;;".PHP_EOL. "/*!50003 SET character_set_client = @saved_cs_client */ ;;".PHP_EOL. "/*!50003 SET character_set_results = @saved_cs_results */ ;;".PHP_EOL. "/*!50003 SET collation_connection = @saved_col_connection */ ;;".PHP_EOL. "DELIMITER ;".PHP_EOL. "/*!50106 SET TIME_ZONE= @save_time_zone */ ;".PHP_EOL.PHP_EOL; return $ret; } public function show_tables() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SELECT TABLE_NAME AS tbl_name ". "FROM INFORMATION_SCHEMA.TABLES ". "WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='{$args[0]}' ". "ORDER BY TABLE_NAME"; } public function show_views() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SELECT TABLE_NAME AS tbl_name ". "FROM INFORMATION_SCHEMA.TABLES ". "WHERE TABLE_TYPE='VIEW' AND TABLE_SCHEMA='{$args[0]}' ". "ORDER BY TABLE_NAME"; } public function show_triggers() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SHOW TRIGGERS FROM `{$args[0]}`;"; } public function show_columns() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SHOW COLUMNS FROM `{$args[0]}`;"; } public function show_procedures() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SELECT SPECIFIC_NAME AS procedure_name ". "FROM INFORMATION_SCHEMA.ROUTINES ". "WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='{$args[0]}'"; } public function show_functions() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SELECT SPECIFIC_NAME AS function_name ". "FROM INFORMATION_SCHEMA.ROUTINES ". "WHERE ROUTINE_TYPE='FUNCTION' AND ROUTINE_SCHEMA='{$args[0]}'"; } public function show_events() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "SELECT EVENT_NAME AS event_name ". "FROM INFORMATION_SCHEMA.EVENTS ". "WHERE EVENT_SCHEMA='{$args[0]}'"; } public function setup_transaction() { return "SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ"; } public function start_transaction() { return "START TRANSACTION ". "/*!40100 WITH CONSISTENT SNAPSHOT */"; } public function commit_transaction() { return "COMMIT"; } public function lock_table() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return $this->dbHandler->exec("LOCK TABLES `{$args[0]}` READ LOCAL"); } public function unlock_table() { return $this->dbHandler->exec("UNLOCK TABLES"); } public function start_add_lock_table() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "LOCK TABLES `{$args[0]}` WRITE;".PHP_EOL; } public function end_add_lock_table() { return "UNLOCK TABLES;".PHP_EOL; } public function start_add_disable_keys() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "/*!40000 ALTER TABLE `{$args[0]}` DISABLE KEYS */;". PHP_EOL; } public function end_add_disable_keys() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "/*!40000 ALTER TABLE `{$args[0]}` ENABLE KEYS */;". PHP_EOL; } public function start_disable_autocommit() { return "SET autocommit=0;".PHP_EOL; } public function end_disable_autocommit() { return "COMMIT;".PHP_EOL; } public function add_drop_database() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "/*!40000 DROP DATABASE IF EXISTS `{$args[0]}`*/;". PHP_EOL.PHP_EOL; } public function add_drop_trigger() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "DROP TRIGGER IF EXISTS `{$args[0]}`;".PHP_EOL; } public function drop_table() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "DROP TABLE IF EXISTS `{$args[0]}`;".PHP_EOL; } public function drop_view() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "DROP TABLE IF EXISTS `{$args[0]}`;".PHP_EOL. "/*!50001 DROP VIEW IF EXISTS `{$args[0]}`*/;".PHP_EOL; } public function getDatabaseHeader() { $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__); $args = func_get_args(); return "--".PHP_EOL. "-- Current Database: `{$args[0]}`".PHP_EOL. "--".PHP_EOL.PHP_EOL; } public function parseColumnType($colType) { $colInfo = []; $colParts = explode(" ", $colType['Type']); if ($fparen = strpos($colParts[0], "(")) { $colInfo['type'] = substr($colParts[0], 0, $fparen); $colInfo['length'] = str_replace(")", "", substr($colParts[0], $fparen + 1)); $colInfo['attributes'] = isset($colParts[1]) ? $colParts[1] : null; } else { $colInfo['type'] = $colParts[0]; } $colInfo['is_numeric'] = in_array($colInfo['type'], $this->mysqlTypes['numerical']); $colInfo['is_blob'] = in_array($colInfo['type'], $this->mysqlTypes['blob']); $colInfo['is_virtual'] = strpos($colType['Extra'], "VIRTUAL GENERATED") !== false || strpos($colType['Extra'], "STORED GENERATED") !== false; return $colInfo; } public function backup_parameters() { $ret = "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;".PHP_EOL. "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;".PHP_EOL. "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;".PHP_EOL. "/*!40101 SET NAMES ".$this->dumpSettings['default-character-set']." */;".PHP_EOL; if (false === $this->dumpSettings['skip-tz-utc']) { $ret .= "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;".PHP_EOL. "/*!40103 SET TIME_ZONE='+00:00' */;".PHP_EOL; } if ($this->dumpSettings['no-autocommit']) { $ret .= "/*!40101 SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT */;".PHP_EOL; } $ret .= "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;".PHP_EOL. "/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;".PHP_EOL. "/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;".PHP_EOL. "/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;".PHP_EOL.PHP_EOL; return $ret; } public function restore_parameters() { $ret = ""; if (false === $this->dumpSettings['skip-tz-utc']) { $ret .= "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;".PHP_EOL; } if ($this->dumpSettings['no-autocommit']) { $ret .= "/*!40101 SET AUTOCOMMIT=@OLD_AUTOCOMMIT */;".PHP_EOL; } $ret .= "/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;".PHP_EOL. "/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;".PHP_EOL. "/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;".PHP_EOL. "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;".PHP_EOL. "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;".PHP_EOL. "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;".PHP_EOL. "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;".PHP_EOL.PHP_EOL; return $ret; } private function check_parameters($num_args, $expected_num_args, $method_name) { if ($num_args != $expected_num_args) { throw new Exception("Unexpected parameter passed to $method_name"); } return; } } // ----------------------------------------------------------------------------- // -- {# Ending Third-Party MYSQLDUMP #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning Third-Party PHPMAILER #} -- // ----------------------------------------------------------------------------- /** * ----------------------------------------------------------------------------------------------- * | Microbe sincerely thanks PHPMailer authors / 2025-08-05T21:03:14+02:00 | * | Automatically scraped, tinkered without any refinement, then glued the following URLs: | * | - https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/OAuthTokenProvider.php | * | - https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/OAuth.php | * | - https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/SMTP.php | * | - https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/PHPMailer.php | * ----------------------------------------------------------------------------------------------- * PHPMailer - PHP email creation and transport class. * PHP Version 5.5. * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project * @author Marcus Bointon (Synchro/coolbru) * @author Jim Jagielski (jimjag) * @author Andy Prevost (codeworxtech) * @author Brent R. Matzelle (original founder) * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ interface Microbe_PHPMailer_OAuthTokenProvider { public function getOauth64(); } class Microbe_PHPMailer_OAuth implements Microbe_PHPMailer_OAuthTokenProvider { protected $provider; protected $oauthToken; protected $oauthUserEmail = ''; protected $oauthClientSecret = ''; protected $oauthClientId = ''; protected $oauthRefreshToken = ''; public function __construct($options) { $this->provider = $options['provider']; $this->oauthUserEmail = $options['userName']; $this->oauthClientSecret = $options['clientSecret']; $this->oauthClientId = $options['clientId']; $this->oauthRefreshToken = $options['refreshToken']; } protected function getGrant() { if (!class_exists('\League\OAuth2\Client\Grant\RefreshToken')) throw new Exception("[PHPMailer] Missing class RefreshToken"); return new \League\OAuth2\Client\Grant\RefreshToken(); } protected function getToken() { return $this->provider->getAccessToken( $this->getGrant(), ['refresh_token' => $this->oauthRefreshToken] ); } public function getOauth64() { if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { $this->oauthToken = $this->getToken(); } return base64_encode( 'user=' . $this->oauthUserEmail . "\001auth=Bearer " . $this->oauthToken . "\001\001" ); } } class Microbe_PHPMailer_SMTP { const VERSION = '6.10.0'; const LE = "\r\n"; const DEFAULT_PORT = 25; const DEFAULT_SECURE_PORT = 465; const MAX_LINE_LENGTH = 998; const MAX_REPLY_LENGTH = 512; const DEBUG_OFF = 0; const DEBUG_CLIENT = 1; const DEBUG_SERVER = 2; const DEBUG_CONNECTION = 3; const DEBUG_LOWLEVEL = 4; public $do_debug = self::DEBUG_OFF; public $Debugoutput = 'echo'; public $do_verp = false; public $do_smtputf8 = false; public $Timeout = 300; public $Timelimit = 300; protected $smtp_transaction_id_patterns = [ 'exim' => '/[\d]{3} OK id=(.*)/', 'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/', 'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/', 'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/', 'Amazon_SES' => '/[\d]{3} Ok (.*)/', 'SendGrid' => '/[\d]{3} Ok: queued as (.*)/', 'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/', 'Haraka' => '/[\d]{3} Message Queued \((.*)\)/', 'ZoneMTA' => '/[\d]{3} Message queued as (.*)/', 'Mailjet' => '/[\d]{3} OK queued as (.*)/', ]; public static $xclient_allowed_attributes = [ 'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT' ]; protected $last_smtp_transaction_id; protected $smtp_conn; protected $error = [ 'error' => '', 'detail' => '', 'smtp_code' => '', 'smtp_code_ex' => '', ]; protected $helo_rply; protected $server_caps; protected $last_reply = ''; protected function edebug($str, $level = 0) { if ($level > $this->do_debug) { return; } if (!class_exists('\Psr\Log\LoggerInterface')) $this->Debugoutput = 'echo'; if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { $this->Debugoutput->debug(rtrim($str, "\r\n")); return; } if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { call_user_func($this->Debugoutput, $str, $level); return; } switch ($this->Debugoutput) { case 'error_log': error_log($str); break; case 'html': echo gmdate('Y-m-d H:i:s'), ' ', htmlentities( preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, 'UTF-8' ), "
\n"; break; case 'echo': default: $str = preg_replace('/\r\n|\r/m', "\n", $str); echo gmdate('Y-m-d H:i:s'), "\t", trim( str_replace( "\n", "\n \t ", trim($str) ) ), "\n"; } } public function connect($host, $port = null, $timeout = 30, $options = []) { $this->setError(''); if ($this->connected()) { $this->setError('Already connected to a server'); return false; } if (empty($port)) { $port = self::DEFAULT_PORT; } $this->edebug( "Connection: opening to $host:$port, timeout=$timeout, options=" . (count($options) > 0 ? var_export($options, true) : 'array()'), self::DEBUG_CONNECTION ); $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options); if ($this->smtp_conn === false) { return false; } $this->edebug('Connection: opened', self::DEBUG_CONNECTION); $this->last_reply = $this->get_lines(); $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); $responseCode = (int)substr($this->last_reply, 0, 3); if ($responseCode === 220) { return true; } if ($responseCode === 554) { $this->quit(); } $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION); $this->close(); return false; } protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = []) { static $streamok; if (null === $streamok) { $streamok = function_exists('stream_socket_client'); } $errno = 0; $errstr = ''; if ($streamok) { $socket_context = stream_context_create($options); set_error_handler(function () { call_user_func_array([$this, 'errorHandler'], func_get_args()); }); $connection = stream_socket_client( $host . ':' . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context ); } else { $this->edebug( 'Connection: stream_socket_client not available, falling back to fsockopen', self::DEBUG_CONNECTION ); set_error_handler(function () { call_user_func_array([$this, 'errorHandler'], func_get_args()); }); $connection = fsockopen( $host, $port, $errno, $errstr, $timeout ); } restore_error_handler(); if (!is_resource($connection)) { $this->setError( 'Failed to connect to server', '', (string) $errno, $errstr ); $this->edebug( 'SMTP ERROR: ' . $this->error['error'] . ": $errstr ($errno)", self::DEBUG_CLIENT ); return false; } if (strpos(PHP_OS, 'WIN') !== 0) { $max = (int)ini_get('max_execution_time'); if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) { @set_time_limit($timeout); } stream_set_timeout($connection, $timeout, 0); } return $connection; } public function startTLS() { if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { return false; } $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; } set_error_handler(function () { call_user_func_array([$this, 'errorHandler'], func_get_args()); }); $crypto_ok = stream_socket_enable_crypto( $this->smtp_conn, true, $crypto_method ); restore_error_handler(); return (bool) $crypto_ok; } public function authenticate( $username, $password, $authtype = null, $OAuth = null ) { if (!$this->server_caps) { $this->setError('Authentication is not allowed before HELO/EHLO'); return false; } if (array_key_exists('EHLO', $this->server_caps)) { if (!array_key_exists('AUTH', $this->server_caps)) { $this->setError('Authentication is not allowed at this stage'); return false; } $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL); $this->edebug( 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), self::DEBUG_LOWLEVEL ); if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) { $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL); $authtype = null; } if (empty($authtype)) { foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) { if (in_array($method, $this->server_caps['AUTH'], true)) { $authtype = $method; break; } } if (empty($authtype)) { $this->setError('No supported authentication methods found'); return false; } $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); } if (!in_array($authtype, $this->server_caps['AUTH'], true)) { $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); return false; } } elseif (empty($authtype)) { $authtype = 'LOGIN'; } switch ($authtype) { case 'PLAIN': if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { return false; } if ( !$this->sendCommand( 'User & Password', base64_encode("\0" . $username . "\0" . $password), 235 ) ) { return false; } break; case 'LOGIN': if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { return false; } if (!$this->sendCommand('Username', base64_encode($username), 334)) { return false; } if (!$this->sendCommand('Password', base64_encode($password), 235)) { return false; } break; case 'CRAM-MD5': if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { return false; } $challenge = base64_decode(substr($this->last_reply, 4)); $response = $username . ' ' . $this->hmac($challenge, $password); return $this->sendCommand('Username', base64_encode($response), 235); case 'XOAUTH2': if (null === $OAuth) { return false; } $oauth = $OAuth->getOauth64(); if ($oauth === '') { if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 =', 235)) { return false; } } elseif (strlen($oauth) <= 497) { if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { return false; } } else { if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2', 334)) { return false; } if (!$this->sendCommand('OAuth TOKEN', $oauth, [235, 334])) { return false; } if ( substr($this->last_reply, 0, 3) === '334' && $this->sendCommand('AUTH End', '', 235) ) { return false; } } break; default: $this->setError("Authentication method \"$authtype\" is not supported"); return false; } return true; } protected function hmac($data, $key) { if (function_exists('hash_hmac')) { return hash_hmac('md5', $data, $key); } $bytelen = 64; //byte length for md5 if (strlen($key) > $bytelen) { $key = pack('H*', md5($key)); } $key = str_pad($key, $bytelen, chr(0x00)); $ipad = str_pad('', $bytelen, chr(0x36)); $opad = str_pad('', $bytelen, chr(0x5c)); $k_ipad = $key ^ $ipad; $k_opad = $key ^ $opad; return md5($k_opad . pack('H*', md5($k_ipad . $data))); } public function connected() { if (is_resource($this->smtp_conn)) { $sock_status = stream_get_meta_data($this->smtp_conn); if ($sock_status['eof']) { $this->edebug( 'SMTP NOTICE: EOF caught while checking if connected', self::DEBUG_CLIENT ); $this->close(); return false; } return true; //everything looks good } return false; } public function close() { $this->server_caps = null; $this->helo_rply = null; if (is_resource($this->smtp_conn)) { fclose($this->smtp_conn); $this->smtp_conn = null; //Makes for cleaner serialization $this->edebug('Connection: closed', self::DEBUG_CONNECTION); } } public function data($msg_data) { if (!$this->sendCommand('DATA', 'DATA', 354)) { return false; } $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); $field = substr($lines[0], 0, strpos($lines[0], ':')); $in_headers = false; if (!empty($field) && strpos($field, ' ') === false) { $in_headers = true; } foreach ($lines as $line) { $lines_out = []; if ($in_headers && $line === '') { $in_headers = false; } while (isset($line[self::MAX_LINE_LENGTH])) { $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); if (!$pos) { $pos = self::MAX_LINE_LENGTH - 1; $lines_out[] = substr($line, 0, $pos); $line = substr($line, $pos); } else { $lines_out[] = substr($line, 0, $pos); $line = substr($line, $pos + 1); } if ($in_headers) { $line = "\t" . $line; } } $lines_out[] = $line; foreach ($lines_out as $line_out) { if (!empty($line_out) && $line_out[0] === '.') { $line_out = '.' . $line_out; } $this->client_send($line_out . static::LE, 'DATA'); } } $savetimelimit = $this->Timelimit; $this->Timelimit *= 2; $result = $this->sendCommand('DATA END', '.', 250); $this->recordLastTransactionID(); $this->Timelimit = $savetimelimit; return $result; } public function hello($host = '') { if ($this->sendHello('EHLO', $host)) { return true; } if (substr($this->helo_rply, 0, 3) == '421') { return false; } return $this->sendHello('HELO', $host); } protected function sendHello($hello, $host) { $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); $this->helo_rply = $this->last_reply; if ($noerror) { $this->parseHelloFields($hello); } else { $this->server_caps = null; } return $noerror; } protected function parseHelloFields($type) { $this->server_caps = []; $lines = explode("\n", $this->helo_rply); foreach ($lines as $n => $s) { $s = trim(substr($s, 4)); if (empty($s)) { continue; } $fields = explode(' ', $s); if (!empty($fields)) { if (!$n) { $name = $type; $fields = $fields[0]; } else { $name = array_shift($fields); switch ($name) { case 'SIZE': $fields = ($fields ? $fields[0] : 0); break; case 'AUTH': if (!is_array($fields)) { $fields = []; } break; default: $fields = true; } } $this->server_caps[$name] = $fields; } } } public function mail($from) { $useVerp = ($this->do_verp ? ' XVERP' : ''); $useSmtputf8 = ($this->do_smtputf8 ? ' SMTPUTF8' : ''); return $this->sendCommand( 'MAIL FROM', 'MAIL FROM:<' . $from . '>' . $useSmtputf8 . $useVerp, 250 ); } public function quit($close_on_error = true) { $noerror = $this->sendCommand('QUIT', 'QUIT', 221); $err = $this->error; //Save any error if ($noerror || $close_on_error) { $this->close(); $this->error = $err; //Restore any error from the quit command } return $noerror; } public function recipient($address, $dsn = '') { if (empty($dsn)) { $rcpt = 'RCPT TO:<' . $address . '>'; } else { $dsn = strtoupper($dsn); $notify = []; if (strpos($dsn, 'NEVER') !== false) { $notify[] = 'NEVER'; } else { foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) { if (strpos($dsn, $value) !== false) { $notify[] = $value; } } } $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify); } return $this->sendCommand( 'RCPT TO', $rcpt, [250, 251] ); } public function xclient(array $vars) { $xclient_options = ""; foreach ($vars as $key => $value) { if (!class_exists('SMTP')) throw new Exception("[PHPMailer] Missing class SMTP"); if (in_array($key, SMTP::$xclient_allowed_attributes)) { $xclient_options .= " {$key}={$value}"; } } if (!$xclient_options) { return true; } return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250); } public function reset() { return $this->sendCommand('RSET', 'RSET', 250); } protected function sendCommand($command, $commandstring, $expect) { if (!$this->connected()) { $this->setError("Called $command without being connected"); return false; } if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) { $this->setError("Command '$command' contained line breaks"); return false; } $this->client_send($commandstring . static::LE, $command); $this->last_reply = $this->get_lines(); $matches = []; if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) { $code = (int) $matches[1]; $code_ex = (count($matches) > 2 ? $matches[2] : null); $detail = preg_replace( "/{$code}[ -]" . ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m', '', $this->last_reply ); } else { $code = (int) substr($this->last_reply, 0, 3); $code_ex = null; $detail = substr($this->last_reply, 4); } $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); if (!in_array($code, (array) $expect, true)) { $this->setError( "$command command failed", $detail, $code, $code_ex ); $this->edebug( 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, self::DEBUG_CLIENT ); return false; } if ($command !== 'RSET') { $this->setError(''); } return true; } public function sendAndMail($from) { return $this->sendCommand('SAML', "SAML FROM:$from", 250); } public function verify($name) { return $this->sendCommand('VRFY', "VRFY $name", [250, 251]); } public function noop() { return $this->sendCommand('NOOP', 'NOOP', 250); } public function turn() { $this->setError('The SMTP TURN command is not implemented'); $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); return false; } public function client_send($data, $command = '') { if ( self::DEBUG_LOWLEVEL > $this->do_debug && in_array($command, ['User & Password', 'Username', 'Password'], true) ) { $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT); } else { $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT); } set_error_handler(function () { call_user_func_array([$this, 'errorHandler'], func_get_args()); }); $result = fwrite($this->smtp_conn, $data); restore_error_handler(); return $result; } public function getError() { return $this->error; } public function getServerExtList() { return $this->server_caps; } public function getServerExt($name) { if (!$this->server_caps) { $this->setError('No HELO/EHLO was sent'); return null; } if (!array_key_exists($name, $this->server_caps)) { if ('HELO' === $name) { return $this->server_caps['EHLO']; } if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) { return false; } $this->setError('HELO handshake was used; No information about server extensions available'); return null; } return $this->server_caps[$name]; } public function getLastReply() { return $this->last_reply; } protected function get_lines() { if (!is_resource($this->smtp_conn)) { return ''; } $data = ''; $endtime = 0; stream_set_timeout($this->smtp_conn, $this->Timeout); if ($this->Timelimit > 0) { $endtime = time() + $this->Timelimit; } $selR = [$this->smtp_conn]; $selW = null; while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { set_error_handler(function () { call_user_func_array([$this, 'errorHandler'], func_get_args()); }); $n = stream_select($selR, $selW, $selW, $this->Timelimit); restore_error_handler(); if ($n === false) { $message = $this->getError()['detail']; $this->edebug( 'SMTP -> get_lines(): select failed (' . $message . ')', self::DEBUG_LOWLEVEL ); if (stripos($message, 'interrupted system call') !== false) { $this->edebug( 'SMTP -> get_lines(): retrying stream_select', self::DEBUG_LOWLEVEL ); $this->setError(''); continue; } break; } if (!$n) { $this->edebug( 'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)', self::DEBUG_LOWLEVEL ); break; } $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH); $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL); $data .= $str; if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") { break; } $info = stream_get_meta_data($this->smtp_conn); if ($info['timed_out']) { $this->edebug( 'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)', self::DEBUG_LOWLEVEL ); break; } if ($endtime && time() > $endtime) { $this->edebug( 'SMTP -> get_lines(): timelimit reached (' . $this->Timelimit . ' sec)', self::DEBUG_LOWLEVEL ); break; } } return $data; } public function setVerp($enabled = false) { $this->do_verp = $enabled; } public function getVerp() { return $this->do_verp; } public function setSMTPUTF8($enabled = false) { $this->do_smtputf8 = $enabled; } public function getSMTPUTF8() { return $this->do_smtputf8; } protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') { $this->error = [ 'error' => $message, 'detail' => $detail, 'smtp_code' => $smtp_code, 'smtp_code_ex' => $smtp_code_ex, ]; } public function setDebugOutput($method = 'echo') { $this->Debugoutput = $method; } public function getDebugOutput() { return $this->Debugoutput; } public function setDebugLevel($level = 0) { $this->do_debug = $level; } public function getDebugLevel() { return $this->do_debug; } public function setTimeout($timeout = 0) { $this->Timeout = $timeout; } public function getTimeout() { return $this->Timeout; } protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0) { $notice = 'Connection failed.'; $this->setError( $notice, $errmsg, (string) $errno ); $this->edebug( "$notice Error #$errno: $errmsg [$errfile line $errline]", self::DEBUG_CONNECTION ); } protected function recordLastTransactionID() { $reply = $this->getLastReply(); if (empty($reply)) { $this->last_smtp_transaction_id = null; } else { $this->last_smtp_transaction_id = false; foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) { $matches = []; if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) { $this->last_smtp_transaction_id = trim($matches[1]); break; } } } return $this->last_smtp_transaction_id; } public function getLastTransactionID() { return $this->last_smtp_transaction_id; } } class Microbe_PHPMailer_PHPMailer { const CHARSET_ASCII = 'us-ascii'; const CHARSET_ISO88591 = 'iso-8859-1'; const CHARSET_UTF8 = 'utf-8'; const CONTENT_TYPE_PLAINTEXT = 'text/plain'; const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar'; const CONTENT_TYPE_TEXT_HTML = 'text/html'; const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative'; const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed'; const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related'; const ENCODING_7BIT = '7bit'; const ENCODING_8BIT = '8bit'; const ENCODING_BASE64 = 'base64'; const ENCODING_BINARY = 'binary'; const ENCODING_QUOTED_PRINTABLE = 'quoted-printable'; const ENCRYPTION_STARTTLS = 'tls'; const ENCRYPTION_SMTPS = 'ssl'; const ICAL_METHOD_REQUEST = 'REQUEST'; const ICAL_METHOD_PUBLISH = 'PUBLISH'; const ICAL_METHOD_REPLY = 'REPLY'; const ICAL_METHOD_ADD = 'ADD'; const ICAL_METHOD_CANCEL = 'CANCEL'; const ICAL_METHOD_REFRESH = 'REFRESH'; const ICAL_METHOD_COUNTER = 'COUNTER'; const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER'; public $Priority; public $CharSet = self::CHARSET_ISO88591; public $ContentType = self::CONTENT_TYPE_PLAINTEXT; public $Encoding = self::ENCODING_8BIT; public $ErrorInfo = ''; public $From = ''; public $FromName = ''; public $Sender = ''; public $Subject = ''; public $Body = ''; public $AltBody = ''; public $Ical = ''; protected static $IcalMethods = [ self::ICAL_METHOD_REQUEST, self::ICAL_METHOD_PUBLISH, self::ICAL_METHOD_REPLY, self::ICAL_METHOD_ADD, self::ICAL_METHOD_CANCEL, self::ICAL_METHOD_REFRESH, self::ICAL_METHOD_COUNTER, self::ICAL_METHOD_DECLINECOUNTER, ]; protected $MIMEBody = ''; protected $MIMEHeader = ''; protected $mailHeader = ''; public $WordWrap = 0; public $Mailer = 'mail'; public $Sendmail = '/usr/sbin/sendmail'; public $UseSendmailOptions = true; public $ConfirmReadingTo = ''; public $Hostname = ''; public $MessageID = ''; public $MessageDate = ''; public $Host = 'localhost'; public $Port = 25; public $Helo = ''; public $SMTPSecure = ''; public $SMTPAutoTLS = true; public $SMTPAuth = false; public $SMTPOptions = []; public $Username = ''; public $Password = ''; public $AuthType = ''; protected $SMTPXClient = []; protected $oauth; public $Timeout = 300; public $dsn = ''; public $SMTPDebug = 0; public $Debugoutput = 'echo'; public $SMTPKeepAlive = false; public $SingleTo = false; protected $SingleToArray = []; public $do_verp = false; public $AllowEmpty = false; public $DKIM_selector = ''; public $DKIM_identity = ''; public $DKIM_passphrase = ''; public $DKIM_domain = ''; public $DKIM_copyHeaderFields = true; public $DKIM_extraHeaders = []; public $DKIM_private = ''; public $DKIM_private_string = ''; public $action_function = ''; public $XMailer = ''; public static $validator = 'php'; protected $smtp; protected $to = []; protected $cc = []; protected $bcc = []; protected $ReplyTo = []; protected $all_recipients = []; protected $RecipientsQueue = []; protected $ReplyToQueue = []; public $UseSMTPUTF8 = false; protected $attachment = []; protected $CustomHeader = []; protected $lastMessageID = ''; protected $message_type = ''; protected $boundary = []; protected $language = []; protected $error_count = 0; protected $sign_cert_file = ''; protected $sign_key_file = ''; protected $sign_extracerts_file = ''; protected $sign_key_pass = ''; protected $exceptions = false; protected $uniqueid = ''; const VERSION = '6.10.0'; const STOP_MESSAGE = 0; const STOP_CONTINUE = 1; const STOP_CRITICAL = 2; const CRLF = "\r\n"; const FWS = ' '; protected static $LE = self::CRLF; const MAIL_MAX_LINE_LENGTH = 63; const MAX_LINE_LENGTH = 998; const STD_LINE_LENGTH = 76; public function __construct($exceptions = null) { if (null !== $exceptions) { $this->exceptions = (bool) $exceptions; } $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); } public function __destruct() { $this->smtpClose(); } private function mailPassthru($to, $subject, $body, $header, $params) { if ((int)ini_get('mbstring.func_overload') & 1) { $subject = $this->secureHeader($subject); } else { $subject = $this->encodeHeader($this->secureHeader($subject)); } $this->edebug('Sending with mail()'); $this->edebug('Sendmail path: ' . ini_get('sendmail_path')); $this->edebug("Envelope sender: {$this->Sender}"); $this->edebug("To: {$to}"); $this->edebug("Subject: {$subject}"); $this->edebug("Headers: {$header}"); if (!$this->UseSendmailOptions || null === $params) { $result = @mail($to, $subject, $body, $header); } else { $this->edebug("Additional params: {$params}"); $result = @mail($to, $subject, $body, $header, $params); } $this->edebug('Result: ' . ($result ? 'true' : 'false')); return $result; } protected function edebug($str) { if ($this->SMTPDebug <= 0) { return; } if (!class_exists('\Psr\Log\LoggerInterface')) $this->Debugoutput = 'echo'; if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { $this->Debugoutput->debug(rtrim($str, "\r\n")); return; } if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { call_user_func($this->Debugoutput, $str, $this->SMTPDebug); return; } switch ($this->Debugoutput) { case 'error_log': error_log($str); break; case 'html': echo htmlentities( preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, 'UTF-8' ), "
\n"; break; case 'echo': default: $str = preg_replace('/\r\n|\r/m', "\n", $str); echo gmdate('Y-m-d H:i:s'), "\t", trim( str_replace( "\n", "\n \t ", trim($str) ) ), "\n"; } } public function isHTML($isHtml = true) { if ($isHtml) { $this->ContentType = static::CONTENT_TYPE_TEXT_HTML; } else { $this->ContentType = static::CONTENT_TYPE_PLAINTEXT; } } public function isSMTP() { $this->Mailer = 'smtp'; } public function isMail() { $this->Mailer = 'mail'; } public function isSendmail() { $ini_sendmail_path = ini_get('sendmail_path'); if (false === stripos($ini_sendmail_path, 'sendmail')) { $this->Sendmail = '/usr/sbin/sendmail'; } else { $this->Sendmail = $ini_sendmail_path; } $this->Mailer = 'sendmail'; } public function isQmail() { $ini_sendmail_path = ini_get('sendmail_path'); if (false === stripos($ini_sendmail_path, 'qmail')) { $this->Sendmail = '/var/qmail/bin/qmail-inject'; } else { $this->Sendmail = $ini_sendmail_path; } $this->Mailer = 'qmail'; } public function addAddress($address, $name = '') { return $this->addOrEnqueueAnAddress('to', $address, $name); } public function addCC($address, $name = '') { return $this->addOrEnqueueAnAddress('cc', $address, $name); } public function addBCC($address, $name = '') { return $this->addOrEnqueueAnAddress('bcc', $address, $name); } public function addReplyTo($address, $name = '') { return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); } protected function addOrEnqueueAnAddress($kind, $address, $name) { $pos = false; if ($address !== null) { $address = trim($address); $pos = strrpos($address, '@'); } if (false === $pos) { $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), $kind, $address ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { throw new Exception($error_message); } return false; } if ($name !== null && is_string($name)) { $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim } else { $name = ''; } $params = [$kind, $address, $name]; if ($this->has8bitChars(substr($address, ++$pos))) { if (static::idnSupported()) { if ('Reply-To' !== $kind) { if (!array_key_exists($address, $this->RecipientsQueue)) { $this->RecipientsQueue[$address] = $params; return true; } } elseif (!array_key_exists($address, $this->ReplyToQueue)) { $this->ReplyToQueue[$address] = $params; return true; } } return false; } return call_user_func_array([$this, 'addAnAddress'], $params); } public function setBoundaries() { $this->uniqueid = $this->generateId(); $this->boundary[1] = 'b1=_' . $this->uniqueid; $this->boundary[2] = 'b2=_' . $this->uniqueid; $this->boundary[3] = 'b3=_' . $this->uniqueid; } protected function addAnAddress($kind, $address, $name = '') { if ( self::$validator === 'php' && ((bool) preg_match('/[\x80-\xFF]/', $address)) ) { $this->CharSet = self::CHARSET_UTF8; self::$validator = 'eai'; } if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { $error_message = sprintf( '%s: %s', $this->lang('Invalid recipient kind'), $kind ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { throw new Exception($error_message); } return false; } if (!static::validateAddress($address)) { $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), $kind, $address ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { throw new Exception($error_message); } return false; } if ('Reply-To' !== $kind) { if (!array_key_exists(strtolower($address), $this->all_recipients)) { $this->{$kind}[] = [$address, $name]; $this->all_recipients[strtolower($address)] = true; return true; } } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) { $this->ReplyTo[strtolower($address)] = [$address, $name]; return true; } return false; } public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591) { $addresses = []; if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { $list = imap_rfc822_parse_adrlist($addrstr, ''); imap_errors(); foreach ($list as $address) { if ( '.SYNTAX-ERROR.' !== $address->host && static::validateAddress($address->mailbox . '@' . $address->host) ) { if ( property_exists($address, 'personal') && defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $address->personal) ) { $origCharset = mb_internal_encoding(); mb_internal_encoding($charset); $address->personal = str_replace('_', '=20', $address->personal); $address->personal = mb_decode_mimeheader($address->personal); mb_internal_encoding($origCharset); } $addresses[] = [ 'name' => (property_exists($address, 'personal') ? $address->personal : ''), 'address' => $address->mailbox . '@' . $address->host, ]; } } } else { $list = explode(',', $addrstr); foreach ($list as $address) { $address = trim($address); if (strpos($address, '<') === false) { if (static::validateAddress($address)) { $addresses[] = [ 'name' => '', 'address' => $address, ]; } } else { list($name, $email) = explode('<', $address); $email = trim(str_replace('>', '', $email)); $name = trim($name); if (static::validateAddress($email)) { if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) { $origCharset = mb_internal_encoding(); mb_internal_encoding($charset); $name = str_replace('_', '=20', $name); $name = mb_decode_mimeheader($name); mb_internal_encoding($origCharset); } $addresses[] = [ 'name' => trim($name, '\'" '), 'address' => $email, ]; } } } } return $addresses; } public function setFrom($address, $name = '', $auto = true) { if (is_null($name)) { $name = ''; } $address = trim((string)$address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim $pos = strrpos($address, '@'); if ( (false === $pos) || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported()) && !static::validateAddress($address)) ) { $error_message = sprintf( '%s (From): %s', $this->lang('invalid_address'), $address ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { throw new Exception($error_message); } return false; } $this->From = $address; $this->FromName = $name; if ($auto && empty($this->Sender)) { $this->Sender = $address; } return true; } public function getLastMessageID() { return $this->lastMessageID; } public static function validateAddress($address, $patternselect = null) { if (null === $patternselect) { $patternselect = static::$validator; } if (is_callable($patternselect) && !is_string($patternselect)) { return call_user_func($patternselect, $address); } if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) { return false; } switch ($patternselect) { case 'pcre': //Kept for BC case 'pcre8': return (bool) preg_match( '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', $address ); case 'html5': return (bool) preg_match( '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', $address ); case 'eai': return (bool) preg_match( '/^[-\p{L}\p{N}\p{M}.!#$%&\'*+\/=?^_`{|}~]+@[\p{L}\p{N}\p{M}](?:[\p{L}\p{N}\p{M}-]{0,61}' . '[\p{L}\p{N}\p{M}])?(?:\.[\p{L}\p{N}\p{M}]' . '(?:[-\p{L}\p{N}\p{M}]{0,61}[\p{L}\p{N}\p{M}])?)*$/usD', $address ); case 'php': default: return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; } } public static function idnSupported() { return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding'); } public function punyencodeAddress($address) { $pos = strrpos($address, '@'); if ( !empty($this->CharSet) && false !== $pos && static::idnSupported() ) { $domain = substr($address, ++$pos); if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet); $errorcode = 0; if (defined('INTL_IDNA_VARIANT_UTS46')) { $punycode = idn_to_ascii( $domain, \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII, \INTL_IDNA_VARIANT_UTS46 ); } elseif (defined('INTL_IDNA_VARIANT_2003')) { $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); } else { $punycode = idn_to_ascii($domain, $errorcode); } if (false !== $punycode) { return substr($address, 0, $pos) . $punycode; } } } return $address; } public function send() { try { if (!$this->preSend()) { return false; } return $this->postSend(); } catch (Exception $exc) { $this->mailHeader = ''; $this->setError($exc->getMessage()); if ($this->exceptions) { throw $exc; } return false; } } public function preSend() { if ( 'smtp' === $this->Mailer || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) ) { static::setLE(self::CRLF); } else { static::setLE(PHP_EOL); } if ( 'mail' === $this->Mailer && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017) || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103)) && ini_get('mail.add_x_header') === '1' && stripos(PHP_OS, 'WIN') === 0 ) { trigger_error($this->lang('buggy_php'), E_USER_WARNING); } try { $this->error_count = 0; //Reset errors $this->mailHeader = ''; if ( static::CHARSET_UTF8 === strtolower($this->CharSet) && ($this->anyAddressHasUnicodeLocalPart($this->RecipientsQueue) || $this->anyAddressHasUnicodeLocalPart(array_keys($this->all_recipients)) || $this->anyAddressHasUnicodeLocalPart($this->ReplyToQueue) || $this->addressHasUnicodeLocalPart($this->From)) ) { $this->UseSMTPUTF8 = true; } foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { if (!$this->UseSMTPUTF8) { $params[1] = $this->punyencodeAddress($params[1]); } call_user_func_array([$this, 'addAnAddress'], $params); } if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); } foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { if ($this->{$address_kind} === null) { $this->{$address_kind} = ''; continue; } $this->{$address_kind} = trim($this->{$address_kind}); if (empty($this->{$address_kind})) { continue; } $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind}); if (!static::validateAddress($this->{$address_kind})) { $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), $address_kind, $this->{$address_kind} ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { throw new Exception($error_message); } return false; } } if ($this->alternativeExists()) { $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; } $this->setMessageType(); if (!$this->AllowEmpty && empty($this->Body)) { throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); } $this->Subject = trim($this->Subject); $this->MIMEHeader = ''; $this->MIMEBody = $this->createBody(); $tempheaders = $this->MIMEHeader; $this->MIMEHeader = $this->createHeader(); $this->MIMEHeader .= $tempheaders; if ('mail' === $this->Mailer) { if (count($this->to) > 0) { $this->mailHeader .= $this->addrAppend('To', $this->to); } else { $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;'); } $this->mailHeader .= $this->headerLine( 'Subject', $this->encodeHeader($this->secureHeader($this->Subject)) ); } if ( !empty($this->DKIM_domain) && !empty($this->DKIM_selector) && (!empty($this->DKIM_private_string) || (!empty($this->DKIM_private) && static::isPermittedPath($this->DKIM_private) && file_exists($this->DKIM_private) ) ) ) { $header_dkim = $this->DKIM_Add( $this->MIMEHeader . $this->mailHeader, $this->encodeHeader($this->secureHeader($this->Subject)), $this->MIMEBody ); $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE . static::normalizeBreaks($header_dkim) . static::$LE; } return true; } catch (Exception $exc) { $this->setError($exc->getMessage()); if ($this->exceptions) { throw $exc; } return false; } } public function postSend() { try { switch ($this->Mailer) { case 'sendmail': case 'qmail': return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody); case 'smtp': return $this->smtpSend($this->MIMEHeader, $this->MIMEBody); case 'mail': return $this->mailSend($this->MIMEHeader, $this->MIMEBody); default: $sendMethod = $this->Mailer . 'Send'; if (method_exists($this, $sendMethod)) { return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody); } return $this->mailSend($this->MIMEHeader, $this->MIMEBody); } } catch (Exception $exc) { $this->setError($exc->getMessage()); $this->edebug($exc->getMessage()); if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) { $this->smtp->reset(); } if ($this->exceptions) { throw $exc; } } return false; } protected function sendmailSend($header, $body) { if ($this->Mailer === 'qmail') { $this->edebug('Sending with qmail'); } else { $this->edebug('Sending with sendmail'); } $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; $sendmail_from_value = ini_get('sendmail_from'); if (empty($this->Sender) && !empty($sendmail_from_value)) { $this->Sender = ini_get('sendmail_from'); } if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { if ($this->Mailer === 'qmail') { $sendmailFmt = '%s -f%s'; } else { $sendmailFmt = '%s -oi -f%s -t'; } } else { $sendmailFmt = '%s -oi -t'; } $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); $this->edebug('Sendmail path: ' . $this->Sendmail); $this->edebug('Sendmail command: ' . $sendmail); $this->edebug('Envelope sender: ' . $this->Sender); $this->edebug("Headers: {$header}"); if ($this->SingleTo) { foreach ($this->SingleToArray as $toAddr) { $mail = @popen($sendmail, 'w'); if (!$mail) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } $this->edebug("To: {$toAddr}"); fwrite($mail, 'To: ' . $toAddr . "\n"); fwrite($mail, $header); fwrite($mail, $body); $result = pclose($mail); $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); $this->doCallback( ($result === 0), [[$addrinfo['address'], $addrinfo['name']]], $this->cc, $this->bcc, $this->Subject, $body, $this->From, [] ); $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } } } else { $mail = @popen($sendmail, 'w'); if (!$mail) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } fwrite($mail, $header); fwrite($mail, $body); $result = pclose($mail); $this->doCallback( ($result === 0), $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, [] ); $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } } return true; } protected static function isShellSafe($string) { if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) { return false; } if ( escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) ) { return false; } $length = strlen($string); for ($i = 0; $i < $length; ++$i) { $c = $string[$i]; if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { return false; } } return true; } protected static function isPermittedPath($path) { return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path); } protected static function fileIsAccessible($path) { if (!static::isPermittedPath($path)) { return false; } $readable = is_file($path); if (strpos($path, '\\\\') !== 0) { $readable = $readable && is_readable($path); } return $readable; } protected function mailSend($header, $body) { $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; $toArr = []; foreach ($this->to as $toaddr) { $toArr[] = $this->addrFormat($toaddr); } $to = trim(implode(', ', $toArr)); if ($to === '') { $to = 'undisclosed-recipients:;'; } $params = null; $sendmail_from_value = ini_get('sendmail_from'); if (empty($this->Sender) && !empty($sendmail_from_value)) { $this->Sender = ini_get('sendmail_from'); } if (!empty($this->Sender) && static::validateAddress($this->Sender)) { if (self::isShellSafe($this->Sender)) { $params = sprintf('-f%s', $this->Sender); } $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); } $result = false; if ($this->SingleTo && count($toArr) > 1) { foreach ($toArr as $toAddr) { $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); $this->doCallback( $result, [[$addrinfo['address'], $addrinfo['name']]], $this->cc, $this->bcc, $this->Subject, $body, $this->From, [] ); } } else { $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); } if (isset($old_from)) { ini_set('sendmail_from', $old_from); } if (!$result) { throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL); } return true; } public function getSMTPInstance() { if (!is_object($this->smtp)) { $this->smtp = new Microbe_PHPMailer_SMTP(); } return $this->smtp; } public function setSMTPInstance(Microbe_PHPMailer_SMTP $smtp) { $this->smtp = $smtp; return $this->smtp; } public function setSMTPXclientAttribute($name, $value) { if (!class_exists('SMTP')) throw new Exception("[PHPMailer] Missing class SMTP"); if (!in_array($name, SMTP::$xclient_allowed_attributes)) { return false; } if (isset($this->SMTPXClient[$name]) && $value === null) { unset($this->SMTPXClient[$name]); } elseif ($value !== null) { $this->SMTPXClient[$name] = $value; } return true; } public function getSMTPXclientAttributes() { return $this->SMTPXClient; } protected function smtpSend($header, $body) { $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; $bad_rcpt = []; if (!$this->smtpConnect($this->SMTPOptions)) { throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); } if ($this->UseSMTPUTF8 && !$this->smtp->getServerExt('SMTPUTF8')) { throw new Exception($this->lang('no_smtputf8'), self::STOP_CRITICAL); } if ('' === $this->Sender) { $smtp_from = $this->From; } else { $smtp_from = $this->Sender; } if (count($this->SMTPXClient)) { $this->smtp->xclient($this->SMTPXClient); } if (!$this->smtp->mail($smtp_from)) { $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); } $callbacks = []; foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { foreach ($togroup as $to) { if (!$this->smtp->recipient($to[0], $this->dsn)) { $error = $this->smtp->getError(); $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; $isSent = false; } else { $isSent = true; } $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]]; } } if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); } $smtp_transaction_id = $this->smtp->getLastTransactionID(); if ($this->SMTPKeepAlive) { $this->smtp->reset(); } else { $this->smtp->quit(); $this->smtp->close(); } foreach ($callbacks as $cb) { $this->doCallback( $cb['issent'], [[$cb['to'], $cb['name']]], [], [], $this->Subject, $body, $this->From, ['smtp_transaction_id' => $smtp_transaction_id] ); } if (count($bad_rcpt) > 0) { $errstr = ''; foreach ($bad_rcpt as $bad) { $errstr .= $bad['to'] . ': ' . $bad['error']; } throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE); } return true; } public function smtpConnect($options = null) { if (null === $this->smtp) { $this->smtp = $this->getSMTPInstance(); } if (null === $options) { $options = $this->SMTPOptions; } if ($this->smtp->connected()) { return true; } $this->smtp->setTimeout($this->Timeout); $this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setVerp($this->do_verp); $this->smtp->setSMTPUTF8($this->UseSMTPUTF8); if ($this->Host === null) { $this->Host = 'localhost'; } $hosts = explode(';', $this->Host); $lastexception = null; foreach ($hosts as $hostentry) { $hostinfo = []; if ( !preg_match( '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/', trim($hostentry), $hostinfo ) ) { $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); continue; } if (!static::isValidHost($hostinfo[2])) { $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]); continue; } $prefix = ''; $secure = $this->SMTPSecure; $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { $prefix = 'ssl://'; $tls = false; //Can't have SSL and TLS at the same time $secure = static::ENCRYPTION_SMTPS; } elseif ('tls' === $hostinfo[1]) { $tls = true; $secure = static::ENCRYPTION_STARTTLS; } $sslext = defined('OPENSSL_ALGO_SHA256'); if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) { if (!$sslext) { throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); } } $host = $hostinfo[2]; $port = $this->Port; if ( array_key_exists(3, $hostinfo) && is_numeric($hostinfo[3]) && $hostinfo[3] > 0 && $hostinfo[3] < 65536 ) { $port = (int) $hostinfo[3]; } if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { try { if ($this->Helo) { $hello = $this->Helo; } else { $hello = $this->serverHostname(); } $this->smtp->hello($hello); if ( $this->SMTPAutoTLS && $this->Host !== 'localhost' && $sslext && $secure !== 'ssl' && $this->smtp->getServerExt('STARTTLS') ) { $tls = true; } if ($tls) { if (!$this->smtp->startTLS()) { $message = $this->getSmtpErrorMessage('connect_host'); throw new Exception($message); } $this->smtp->hello($hello); } if ( $this->SMTPAuth && !$this->smtp->authenticate( $this->Username, $this->Password, $this->AuthType, $this->oauth ) ) { throw new Exception($this->lang('authenticate')); } return true; } catch (Exception $exc) { $lastexception = $exc; $this->edebug($exc->getMessage()); $this->smtp->quit(); } } } $this->smtp->close(); if ($this->exceptions && null !== $lastexception) { throw $lastexception; } if ($this->exceptions) { $message = $this->getSmtpErrorMessage('connect_host'); throw new Exception($message); } return false; } public function smtpClose() { if ((null !== $this->smtp) && $this->smtp->connected()) { $this->smtp->quit(); $this->smtp->close(); } } public function setLanguage($langcode = 'en', $lang_path = '') { $renamed_langcodes = [ 'br' => 'pt_br', 'cz' => 'cs', 'dk' => 'da', 'no' => 'nb', 'se' => 'sv', 'rs' => 'sr', 'tg' => 'tl', 'am' => 'hy', ]; if (array_key_exists($langcode, $renamed_langcodes)) { $langcode = $renamed_langcodes[$langcode]; } $PHPMAILER_LANG = [ 'authenticate' => 'SMTP Error: Could not authenticate.', 'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' . ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', 'data_not_accepted' => 'SMTP Error: data not accepted.', 'empty_message' => 'Message body empty', 'encoding' => 'Unknown encoding: ', 'execute' => 'Could not execute: ', 'extension_missing' => 'Extension missing: ', 'file_access' => 'Could not access file: ', 'file_open' => 'File Error: Could not open file: ', 'from_failed' => 'The following From address failed: ', 'instantiate' => 'Could not instantiate mail function.', 'invalid_address' => 'Invalid address: ', 'invalid_header' => 'Invalid header name or value', 'invalid_hostentry' => 'Invalid hostentry: ', 'invalid_host' => 'Invalid host: ', 'mailer_not_supported' => ' mailer is not supported.', 'provide_address' => 'You must provide at least one recipient email address.', 'recipients_failed' => 'SMTP Error: The following recipients failed: ', 'signing' => 'Signing Error: ', 'smtp_code' => 'SMTP code: ', 'smtp_code_ex' => 'Additional SMTP info: ', 'smtp_connect_failed' => 'SMTP connect() failed.', 'smtp_detail' => 'Detail: ', 'smtp_error' => 'SMTP server error: ', 'variable_set' => 'Cannot set or reset variable: ', 'no_smtputf8' => 'Server does not support SMTPUTF8 needed to send to Unicode addresses', ]; if (empty($lang_path)) { $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; } $foundlang = true; $langcode = strtolower($langcode); if ( !preg_match('/^(?P[a-z]{2})(?P [ 'secret_key' => password(128), ], ]; }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending DEV #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning DOM #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Returns a Microbe_DOM_Element, helping to build HTML elements. * @param string $tag Tag name, optionnaly containing classes and ID * as . and # suffixes. * @return Microbe_DOM_Element The created Microbe_DOM_Element. */ function dom(string $tag): Microbe_DOM_Element { return new Microbe_DOM_Element($tag); } // ---{ Class: Microbe DOM Element }--- class Microbe_DOM_Element { public const AUTOCLOSE_TAGS = [ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr' ]; private string $tag; private array $attrs = []; private array $children = []; public function __construct(string $tag) { if (!preg_match('/^(?[a-z0-9_-]+)(?\.[^#]+)?(?#[^.#]+)?(?\.[^#]+)?$/i', $tag, $m)) throw new Microbe_Exception("Unable to parse Microbe_DOM_Element's tag name"); $m = array_merge([ 'cl1' => '', 'cl2' => '', 'id' => '' ], $m); if ($id = trim($m['id'], '#')) $this->attr('id', $id); if ($cl = implode(' ', array_values(array_filter(explode('.', $m['cl1'] . '.' . $m['cl2']))))) $this->attr('class', $cl); $this->tag = strtolower($m['tag']); } public function __toString(): string { return $this->html(); } public function getChildren(): array { return $this->children; } public function hasChildren(): bool { return count($this->children) > 0; } public function attr(string $k, mixed $v = null): mixed { if ($v === null) return $this->attrs[$k] ?? null; if ($v !== false) $this->attrs[$k] = $v; else if (array_key_exists($k, $this->attrs)) unset($this->attrs[$k]); return $this; } public function attrs(array $kv): self { $this->attrs = array_merge($this->attrs, $kv); return $this; } public function addClass(string $class): self { $current = $this->attr('class') ?: ''; $current .= ' ' . implode(' ', array_filter(array_map('trim', preg_split('/[.,\s]/', $class)))); $this->attr('class', trim($current)); return $this; } public function addClasses(array | string $classes): self { if (is_string($classes)) $classes = [ $classes ]; foreach ($classes as $cl) $this->addClass($cl); return $this; } public function css(array $properties): self { if (!$properties) return $this; $current = $this->attr('style') ?: ''; foreach ($properties as $k => $v) $current .= ' ' . $k . ': ' . $v . ';'; $this->attr('style', trim($current)); return $this; } public function append(self | array | string | int | float $child): self { if (is_array($child)) foreach ($child as $c) $this->append($c); else $this->children[] = $child; return $this; } public function appendText(string | int | float $text): self { return $this->append(esc($text)); } public function prepend(self | array | string | int | float $child): self { if (is_array($child)) foreach ($child as $c) $this->prepend($c); else array_unshift($this->children, $child); return $this; } public function prependText(string | int | float $text): self { return $this->prepend(esc($text)); } public function appendTo(self $parent): self { $parent->append($this); return $this; } public function prependTo(self $parent): self { $parent->prepend($this); return $this; } public function html(): string { $attrs = []; foreach ($this->attrs as $k => $v) { if ($v === null || $v === false) continue; $attrs[] = $k . ($v === true ? '' : ('="' . esc((string) $v) . '"')); } $html = '<' . $this->tag . ($attrs ? ' ' . implode(' ', $attrs) : '') . '>'; if (in_array($this->tag, self::AUTOCLOSE_TAGS)) return $html; foreach ($this->getChildren() as $child) $html .= $child instanceof self ? $child->html() : $child; $html .= 'tag . '>'; return $html; } } /** * * Returns an array containing the useful pages numbers, * and null entries for ellipsis. * @param int $page Current page number. * @param int $total Total pages. * @return array Array of pages numbers. */ function get_pagination_numbers(int $page, int $total): array { $numbers = []; if ($total < 1 || $page > $total) return $numbers; $numbers[] = 1; $i = max(2, $page - 5); if ($i > 2) $numbers[] = null; for (; $i < min($page + 6, $total); $i++) $numbers[] = $i; if ($i !== $total) $numbers[] = null; $numbers[] = $total; return $numbers; } /** * * Create a Microbe_Pagination instance. * @param string $var Variable name. * @param string|null $url Url format (default: * url('.', [ $var => '{{page}}' ])). * @param int $totalItems Total items of the collection. * @param int $itemsPerPage Items shown per page. * @return Microbe_Pagination The instance. */ function pagination( string $var = 'page', ?string $url = null, int $totalItems = 1, int $itemsPerPage = 9, ): Microbe_Pagination { return new Microbe_Pagination(var: $var, url: $url, totalItems: $totalItems, itemsPerPage: $itemsPerPage); } class Microbe_Pagination { private ?string $var = null; private ?string $url = null; private int $totalItems = 1; private int $currentPage = 1; private int $itemsPerPage = 9; public function getTotalItems(): int { return $this->totalItems; } public function getCurrentPage(): int { return $this->currentPage; } public function getItemsPerPage(): int { return $this->itemsPerPage; } public function getTotalPages(): int { return (int) ceil($this->getTotalItems() / $this->getItemsPerPage()); } public function getOffset(): int { return ($this->getCurrentPage() - 1) * $this->getItemsPerPage(); } public function getShownItems(): int { return min($this->getItemsPerPage(), $this->getTotalItems() - $this->getOffset()); } public function __construct( string $var = 'page', ?string $url = null, int $totalItems = 1, int $itemsPerPage = 9, ) { $this->var = $var; $this->url = $url ?: url('.', [ $var => '{{page}}' ]); $this->totalItems = $totalItems; $this->itemsPerPage = $itemsPerPage; $this->currentPage = get_page_number(var: $this->var, max: $this->getTotalPages()); } public function html(string $labelPrevious = "Previous", string $labelNext = "Next", array $attrs = []): string { $currentPage = $this->getCurrentPage(); $totalPages = $this->getTotalPages(); if ($totalPages <= 1) return ''; $prevPage = $currentPage > 1 ? $currentPage - 1 : null; $nextPage = $currentPage < $totalPages ? $currentPage + 1 : null; $pageUrl = function(int $p): string { $u = $this->url; if ($p <= 1) $u = preg_replace('/([?&])[^?&=]+=\{\{page\}\}/', '$1', $u); $u = str_replace('{{page}}', (string) $p, $u); $u = trim($u, '?%'); return $u; }; $container = dom('div.pagination') ->attrs($attrs) ->append($div = dom('div')); $div ->append($prev = dom('span.pagination-prev')) ->append($ul = dom('ul')) ->append($next = dom('span.pagination-next')); $prev->append(($prevPage ? dom('a')->attr('href', $pageUrl($prevPage)) : dom('span'))->append($labelPrevious)); $next->append(($nextPage ? dom('a')->attr('href', $pageUrl($nextPage)) : dom('span'))->append($labelNext)); foreach (get_pagination_numbers($currentPage, $totalPages) as $p) { $li = dom('li')->appendTo($ul); if ($p === null) { dom('em')->append('…')->appendTo($li); } else { $el = dom('a')->attr('href', $pageUrl($p))->append($p)->appendTo($li); if ($p === $currentPage) $li->addClass('active'); } } return $container->html(); } public function render(?string $labelPrevious = null, ?string $labelNext = null, array $attrs = []): static { if ($labelPrevious === null) $labelPrevious = icon('arrow-left') . ' ' . t("Previous Page") . ''; if ($labelNext === null) $labelNext = '' . t("Previous Page") . ' ' . icon('arrow-right'); echo $this->html(labelPrevious: $labelPrevious, labelNext: $labelNext, attrs: $attrs); return $this; } public function countingSentence( string $none = "No item to show.", string $one = "Showing {shown} of 1 item.", string $several = "Showing {shown} of {total} items.", ): string { $totalItems = $this->getTotalItems(); $shownItems = $this->getShownItems(); $args = [ 'total' => $totalItems, 'shown' => $shownItems ]; if ($totalItems <= 0) return t($none, $args); if ($totalItems === 1) return t($one, $args); return t($several, $args); } } // ----------------------------------------------------------------------------- // -- {# Ending DOM #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning EMAILS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Check if the email address is valid. * @param mixed $email String supposed to be an email address. * @return boolean If it seems to be a proper email address, true. */ function is_valid_email_address(mixed $email): bool { if (!$email || !is_scalar($email)) return false; return (bool) filter_var($email, FILTER_VALIDATE_EMAIL); } /** * * Parse several email addresses using for each one. * @param string $str String to parse. * @return array Array of parsed email address as objects. */ function parse_email_addresses(string $str): array { return array_values(array_filter(array_map(function(string $s): ?object { $e = parse_email_address($s); return $e->addr ? $e : null; }, explode(',', $str)))); } /** * * Parse an email address, with optionally the name and the address. * @param string $str String to parse. * @return object Parsed email address as an object. */ function parse_email_address(string $str): object { $e = (object) [ 'addr' => trim($str), 'name' => null ]; if (preg_match('/^(?.*)<(?.+)>$/', $e->addr, $m)) { $e->addr = $m['addr']; $e->name = trim($m['name'] ?: '') ?: null; } $e->elements = (object) []; list($e->elements->user, $e->elements->domain) = explode('@', $e->addr); $e->formatted = $e->name ? $e->name . ' <' . $e->addr . '>' : $e->addr; return $e; } /** * * Parse email address, get its left part, and optionnaly tries to format * the username. * @param string $str String to parse (perhaps an email address). * @param bool $formatted Tries to format the username. * @return string|null User name, if found. */ function get_email_address_user_name(string $str, bool $formatted = true): ?string { $e = parse_email_address($str); if (!($name = ($e->name ?: $e->elements->user))) return null; if ($formatted) return $name; $name = strtolower($name); $name = preg_replace('/\d+$/', '', $name); $name = str_replace([ '.', '_', '-', '+' ], ' ', $name); $name = preg_replace('/\s+/', ' ', $name); $name = ucwords($name); return trim($name); } /** * * Obfuscate the characters of an email address except the two firsts of * the username and the @... part. * @param string $email Email address * @return string Obfuscated email address. */ function obfuscate_email_address(string $email, string $replacement = '***'): string { list($left, $right) = explode('@', $email); if (strlen($left) <= 2) $left = $replacement; else $left = substr($left, 0, 2) . $replacement; return $left . '@' . $right; } /** * * Register an email carrier. * @param string $name Name of the carrier. * @param Closure $func Function called when sending an email through * this carrier. $func should take three arguments: * - object $cfg * - object $opts * - string $body * - array $embeddedImages */ function register_email_carrier(string $name, Closure $func): void { $carriers = cfg('~@emails.registered_carriers') ?: []; $carriers[$name] = (object) [ 'name' => $name, 'func' => $func ]; cfg('@emails.registered_carriers', $carriers); } /** * * Returns the email carrier object currently in use. * @return object|null Object givin the callback function of the carrier. */ function get_current_email_carrier(): ?object { if (!($current = cfg('~@emails.current_carrier'))) return null; $carriers = cfg('~@emails.registered_carriers') ?: []; return $carriers[$current] ?? null; } /** * * Send an email. * @return bool Is it a success (true) or not (false)? */ function send_email( array | string $to, string $subject, string $body = '', ?string $tpl = null, array $vars = [], ?array $from = null, array $cc = [], array $bcc = [], array $reply = [], ?bool $debug = null, bool $debugShowAttachments = true, bool $debugClose = true, bool $debugSend = false, ?bool $store = null, ): bool { if ($debug === null) $debug = cfg('~@emails.debug') ?: false; if ($store === null) $store = cfg('~@emails.store') ?: false; if ($from === null) if (!($from = cfg('~@emails.addresses.from'))) throw new Microbe_Exception("Trying to send an email without a valid From address"); if (!$tpl && !$body) throw new Microbe_Exception("Trying to send an email without passing a body or a template name."); if (!$subject) throw new Microbe_Exception("Trying to send an email without a subject"); // If the recipient is forced in the configuration, we set it here if (cfg('~@emails.addresses.to.enabled') && ($toAddr = cfg('~@emails.addresses.to.address')) && ($toName = cfg('~@emails.addresses.to.name'))) { $to = [ [ 'address' => $toAddr, 'name' => $toName ]]; } // We prepare the addresses $from = [ $from ]; if (is_string($to)) $to = [ $to ]; foreach ([ 'to', 'from', 'cc', 'bcc', 'reply' ] as $k) { $v = []; foreach ($$k as $entry) { if (is_numeric_array($entry) && ($entry = array_values($entry))) $entry = (object) [ 'address' => $entry[0], 'name' => $entry[1] ?? '' ]; else if (is_string($entry)) { if (preg_match('/^(?.+)\<(?.+@.+)\>$/', $entry, $m)) $entry = (object) [ 'address' => $m['addr'], 'name' => trim($m['name']) ]; else $entry = (object) [ 'address' => $entry, 'name' => '' ]; } if (is_assoc_array($entry)) $entry = (object) $entry; if (!is_object($entry) || !property_exists($entry, 'address')) continue; if (!property_exists($entry, 'name')) $entry->name = ''; $v[] = (object) $entry; } $$k = $v; } $from = (object) $from[0]; // We create the HTML body if ($tpl) { $body = render( return: true, tpl: $tpl, vars: array_merge([ 'subject' => $subject, 'to' => $to, 'from' => $from, 'debug_email' => $debug, ], $vars), ); } // We parse the HTML, checking the embedded images $content = process_embedded_email_body($body, $debug); if ($store && ($firstTo = ($to[0] ?? null))) { $dt = new DateTime(); $storedPath = get_data_dir('emails', $dt->format('Ym'), $dt->format('YmdHis') . '-' . ((string) (int) round(microtime(true) * 1000000)) . '-' . preg_replace('/[^A-Za-z0-9_.-]/', '', str_replace('@', '--at--', $firstTo->address)) . '.html'); rmkdir(dirname($storedPath)); file_put_contents($storedPath, $content->body); } // If we are in debug mode, we show the result in the browser if ($debug) { header('Content-type: text/html; charset=utf-8'); echo $content->body; if ($debugShowAttachments && $content->attachments) { $info = dom('div') ->css([ 'overflow' => 'hidden', 'background' => '#222', 'border-top' => '1px dashed #333', 'color' => '#eee', 'font-family' => 'monospace' ]) ->append(dom('fieldset') ->css([ 'margin' => '30px' ]) ->append(dom('legend')->append("Embedded images")) ->append($ul = dom('ul'))); foreach ($content->attachments as $cid => $path) { dom('li') ->append(dom('strong')->append($cid)) ->append(' → ' . $path . ' (' . bytes_unit(filesize($path)) . ')') ->appendTo($ul); } echo $info; } if ($debugClose) exit; return true; } if (!cfg('~@emails.carriers_registered')) { dispatch('register_email_carrier'); cfg('@emails.carriers_registered', true); } // And send with the proper carrier. if (!($carrier = get_current_email_carrier())) { throw new Microbe_Exception("The current carrier is not defined in the configuration or the carrier is not registered."); } if (!cfg('~@emails.send')) return true; $opts = (object) []; foreach ([ 'debug', 'debugSend', 'to', 'from', 'reply', 'cc', 'bcc', 'subject', 'body', 'tpl', 'vars' ] as $k) $opts->$k = $$k; return call_user_func($carrier->func, to_object(cfg('~@emails.carriers')[$carrier->name] ?? []), $opts, $content->body, $content->attachments); } /** * Process the body string, to find the src="@cid{...}" or src="@base64{...}" * images and process it. * An object with the new body and the @cid attachments will be returned. * The @cid will be replaced by a src="cid:{sha1_of_the_path}", and this * identifier will be returned as a key of the returned attachments, with the * file path as a value. * The @base64 images will be replaced by an inline src, base64 encoded. * @param string $body Body string. * @param boolean $debug If the debug mode is enabled, the image will be kept * unchanged, to be able to see it in a browser display. * @return object Object, containing the 'body' and the 'attachments'. */ function process_embedded_email_body(string $body, bool $debug = false): object { $response = (object) [ 'body' => $body, 'attachments' => [], ]; if (!preg_match_all('/@(cid|base64)\{([^}]+)\}/', $response->body, $matches, PREG_SET_ORDER)) { return $response; } foreach ($matches as $m) { if (!is_file($path = join_path(get_root_dir(), ltrim($m[2], DIRECTORY_SEPARATOR)))) { continue; } $replacement = $m[0]; if ($m[1] === 'cid') { // If we are in debug mode, we still store the items to return them, // but we replace them as a base64 data to show them in the browser. if (!($cid = array_search($path, $response->attachments))) { $cid = sha1($path); $response->attachments[$cid] = $path; } if (!$debug) { $replacement = 'cid:' . $cid; } } // If it's embedded as a base64, or in debug mode we force this // replacement to show image in browser if ($m[1] === 'base64' || $debug) { list($w, $h, $type, $attr) = getimagesize($path); $mime = image_type_to_mime_type($type); $b64 = base64_encode(file_get_contents($path)); $replacement = 'data:' . $mime . ';base64,' . $b64; } $response->body = str_replace($m[0], $replacement, $response->body); } return $response; } /** * * Returns an array of stored emails (years-months or HTML files). * @param string $ym Year-Month. If not provided, available years-months * will be returned instead of HTML files. * @return array Array of stored emails files. */ function get_stored_emails(?string $ym = null): array { $dir = get_data_dir('emails'); if (!is_dir($dir)) return []; if (!$ym) return get_folders($dir); return get_files(join_path($dir, $ym), filter: '/\.html$/'); } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'emails' => [ 'debug' => false, 'method' => 'smtp', 'from' => [ 'address' => null, 'name' => '{@app.name}' ], 'contact' => [ 'address' => null, 'name' => '{@app.name}' ], 'smtp' => [ 'host' => null, 'user' => null, 'password' => null, 'secure' => 'tls', 'port' => 587, ], ], ]; }); listen('register_email_carrier', function(): void { register_email_carrier( name: 'mailjet', func: function(object $cfg, object $opts, string $body, array $embeddedImages): bool { if (!($cfg->user ?? null)) throw new Microbe_Exception("Trying to send with Mailjet without any user"); $msg = [ 'From' => [ 'Email' => $opts->from->address, 'Name' => $opts->from->name ], 'To' => [], 'Subject' => $opts->subject, 'HTMLPart' => $body, ]; foreach ($opts->to as $entry) $msg['To'][] = [ 'Email' => $entry->address, 'Name' => $entry->name ]; if ($opts->bcc) foreach ($opts->bcc as $entry) $msg['BCC'][] = [ 'Email' => $entry->address, 'Name' => $entry->name ]; if ($opts->reply) foreach ($opts->reply as $entry) $msg['ReplyTo'][] = [ 'Email' => $entry->address, 'Name' => $entry->name ]; if ($opts->cc) foreach ($opts->cc as $entry) $msg['CC'][] = [ 'Email' => $entry->address, 'Name' => $entry->name ]; $response = curl( url: 'https://api.mailjet.com/v3.1/send', method: 'post', data: json_encode([ 'Messages' => [ $msg ] ]), json: true, headers: [ 'Content-Type: application/json' ], username: $cfg->user, password: $cfg->password ?? null, ); return true; }, ); register_email_carrier( name: 'mailgun', func: function(object $cfg, object $opts, string $body, array $embeddedImages): bool { $cfg = $cfg->sandbox->enabled ? $cfg->sandbox : $cfg->prod; $data = [ 'from' => $opts->from->name . ' <' . $opts->from->address . '>', 'subject' => $opts->subject, 'html' => $body, ]; foreach ([ 'to', 'bcc', 'cc' ] as $field) { $data[$field] = []; foreach ($opts->$field as $entry) $data[$field][] = $entry->name . ' <' . $entry->address . '>'; $data[$field] = implode(', ', $data[$field]); } $response = curl( url: 'https://' . $cfg->api_url . '/' . $cfg->domain . '/messages', method: 'post', data: $data, json: true, username: 'api', password: $cfg->api_key ?? null, ); if (!$response || !($response->id ?? null)) throw new Microbe_Exception("Error while sending email through Mailgun API: " . print_r($response, true)); return true; }, ); register_email_carrier( name: 'phpmailer', func: function(object $cfg, object $opts, string $body, array $embeddedImages): bool { if (!class_exists($className = 'Microbe_PHPMailer_PHPMailer')) throw new Microbe_Exception("PHPMailer for Microbe is not loaded"); if (!class_exists($classNameSmtp = 'Microbe_PHPMailer_SMTP')) throw new Microbe_Exception("PHPMailer for Microbe is missing SMTP class"); if (!($host = ($cfg->host ?? null))) throw new Microbe_Exception("Trying to send with SMTP without any host"); $mail = new $className(true); if ($opts->debugSend) { $mail->SMTPDebug = 4; $mail->Debugoutput = 'echo'; } $mail->CharSet = 'UTF-8'; try { $mail->isSMTP(); $mail->Host = $cfg->host; $mail->SMTPSecure = $cfg->secure ?: 'tls'; $mail->Port = $cfg->port ?: 587; if ($mail->SMTPAuth = (bool) $cfg->user) { $mail->Username = $cfg->user; $mail->Password = $cfg->password; } $mail->setFrom($opts->from->address, $opts->from->name); foreach ($opts->to as $entry) $mail->addAddress($entry->address, $entry->name); foreach ($opts->bcc as $entry) $mail->addBCC($entry->address, $entry->name); foreach ($opts->reply as $entry) $mail->addReplyTo($entry->address, $entry->name); foreach ($opts->cc as $entry) $mail->addCC($entry->address, $entry->name); foreach ($embeddedImages as $cid => $path) $mail->AddEmbeddedImage($path, $cid); $mail->isHTML(true); $mail->Subject = '=?utf-8?B?' . base64_encode($opts->subject) . '?='; $mail->Body = $body; $mail->send(); return true; } catch (Exception $e) { throw $e; } return false; }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending EMAILS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning ENV #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * Returns an array of valid environments names. * @return array Array of environments names. */ function get_valid_env(): array { return [ 'local', 'dev', 'test', 'staging', 'prod' ]; } /** * Check if the given environment name is a valid one. * @param string $env Environment name. * @return boolean Returns true if the name is in the allowed list, * given by . */ function is_valid_env(string $env): bool { return in_array($env, get_valid_env()); } /** * * Get and returns the current environment, based on the '/ENV' file. * If this file is not found, or empty, 'prod' will be returned. * @return string Current environment name. */ function get_env(): string { if ($env = cfg('~@core.env')) return $env; $default = 'prod'; $f = join_path(get_root_dir(), 'ENV'); if (!is_file($f)) return $default; $env = strtolower(trim(file_get_contents($f))); if (!is_valid_env($env)) return $default; cfg('@core.env', $env); return $env; } /** * * Set current environment via /ENV file. * @param string | false $env Environment name (one of get_valid_env()). */ function set_env(string | false $env): void { $f = join_path(get_root_dir(), 'ENV'); cfg('@core.env', null); if ($env === false) { if (is_file($f)) unlink($f); return; } if (!is_valid_env($env)) throw new Microbe_Exception("Trying to set current env to invalid environment: {$env}"); file_put_contents($f, $env); } /** * * Check if the current environment is one of those given in arguments. * @param string... $envs Environment name (or several, as different args). * @return boolean Returns true if one of those is the current env. */ function is_env(string ...$envs): bool { $current = get_env(); foreach ($envs as $env) { if ($current === $env) { return true; } } return false; } /** * * Returns the directory where the framework's file is located, which is * assumed to be the root directory of the project. * @return string Root path. */ function get_root_dir(): string { return __DIR__; } /** * * Join paths parts together, using the system's directory separator (/ or \), * and returns the result. * @param string... $paths Paths parts as separated arguments. * @return string Path joint. */ function join_path(string... $paths): string { $path = ''; foreach ($paths as $part) { if ($path !== '') $path .= DIRECTORY_SEPARATOR; $path .= rtrim($part, '/\\'); } $path = preg_replace('/[\/\\\]{2,}/', DIRECTORY_SEPARATOR, $path); return $path; } /** * * Join paths parts together exactly like , but prefixing the root * directory got through . * @param string... $paths Paths parts as separated arguments. * @return string Path joint. */ function get_path(string... $dirs): string { array_unshift($dirs, get_root_dir()); return call_user_func_array('join_path', $dirs); } /** * * Returns the vendor directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_vendor_dir(string... $dirs): string { array_unshift($dirs, 'vendor'); return call_user_func_array('get_path', $dirs); } /** * * Returns the vendor-static directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_vendor_static_dir(string... $dirs): string { array_unshift($dirs, 'vendor-static'); return call_user_func_array('get_path', $dirs); } /** * * Returns the backend directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_src_dir(string... $dirs): string { array_unshift($dirs, 'src'); return call_user_func_array('get_path', $dirs); } /** * * Returns the controllers directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_ctrl_dir(string... $dirs): string { array_unshift($dirs, 'ctrl'); return call_user_func_array('get_src_dir', $dirs); } /** * * Returns the data directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_data_dir(string... $dirs): string { array_unshift($dirs, 'data'); return call_user_func_array('get_path', $dirs); } /** * * Returns the sessions directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_sessions_dir(string... $dirs): string { array_unshift($dirs, 'sessions'); return call_user_func_array('get_data_dir', $dirs); } /** * * Returns the uploads directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_uploads_dir(string... $dirs): string { array_unshift($dirs, 'uploads'); return call_user_func_array('get_data_dir', $dirs); } /** * * Returns the cache directory. * @param string... $paths Optional sub-paths parts as separated arguments. * @return string Path to the directory. */ function get_cache_dir(string... $dirs): string { array_unshift($dirs, 'cache'); return call_user_func_array('get_data_dir', $dirs); } /** * * Returns a cache file path. * @param string... $parts File name with extension, with optionaly some * directories before. * @return string Path to temporary file. */ function get_cache_file(string... $parts): string { return call_user_func_array('get_cache_dir', $parts); } /** * * Returns the directory path for the temporary files, optionaly with a * subdirectory (which will be created if it doesn't exists). * @param string|null $sub Subdirectory name. * @return string Path to the directory. */ function get_tmp_dir(?string $sub = null): string { $dir = get_data_dir('tmp'); if ($sub) $dir = join_path($dir, $sub); if (!is_dir($dir)) mkdir($dir, get_mkdir_chmod(), true); return $dir; } /** * * Returns a temporary file path. * @param string|null $name File name. Random string if empty. * @param string|null $sub Subdirectory name. Temp directory root if empty. * @param string|null $ext File extension. * @return string Path to temporary file. */ function get_tmp_file(?string $name = null, ?string $sub = null, ?string $ext = null): string { if ($name === null) $name = uid(16); if ($ext !== null) $name .= '.' . $ext; return join_path(get_tmp_dir($sub), $name); } /** * * Include all PHP files of a directory. * @param string $dir Directory path. * @param bool $once Default true. If true, the file will be required using * 'require_once'. In other case, it will be 'require'. */ function include_dir(string $dir, bool $once = true): void { if (!is_dir($dir)) return; foreach (glob(join_path($dir, '*.php')) as $f) { if ($once) require_once $f; else require $f; } } /** * Includes specific file type (helpers, ctrl, etc.) located at root. * @param string $type Type of file (helpers, ctrl, etc.). * @param bool $once Require once instead of simply require. */ function include_root_files(string $type, bool $once = true): void { if (is_file($path = join_path(get_root_dir(), $type . '.php'))) { if ($once) require_once $path; else require $path; } include_dir(join_path(get_root_dir(), $type)); } /** * Includes specific files type (helpers, ctrl, etc.), from root and bundles. * @param string $type Type of file (helpers, ctrl, etc.). * @param bool $once Require once instead of simply require. */ function include_files(string $type, bool $once = true): void { include_root_files($type, $once); include_bundles_files($type, $once); } /** * * Returns the current domain name, aka HTTP hostname. * @return string Domain name. */ function get_domain_name(): string { if (!array_key_exists('HTTP_HOST', $_SERVER) && function_exists('cfg') && ($host = cfg('~@app.hosting.hosts.fallback'))) return strtolower($host); return strtolower($_SERVER['HTTP_HOST'] ?? ''); } /** * * Verify is the result of match with the string or the * regex pattern given. * @param string $pattern String or regex pattern (beginning and ending with * a slash, with optionnaly some letters at the end). * @return boolean If we got a match, true. Else, false. */ function is_domain_name(string $pattern): bool { if (!seems_regex($pattern)) $pattern = '/^' . preg_quote($pattern, '/') . '$/'; return (bool) preg_match($pattern, get_domain_name()); } /** * * Returns the top level domain name (e.g. when will be * 'foo.bar.tld' or 'john.doe.bar.tld', this function will return 'bar.tld'). * This function can be useful with the cookies policies. * @return string Top level domain name. */ function get_top_level_domain_name(): string { return extract_top_level_domain_name(get_domain_name()); } /** * * Returns the current HTTP scheme: https:// or http://. * @return string HTTP scheme. */ function get_http_scheme(): string { if (!array_key_exists('SERVER_PORT', $_SERVER) && function_exists('cfg') && ($scheme = cfg('~@app.hosting.scheme.fallback'))) return strtolower($scheme); return ((int) ($_SERVER['SERVER_PORT'] ?? 80)) === 443 ? 'https://' : 'http://'; } /** * * Returns true if the current HTTP scheme is HTTPS. Else, false. * @return boolean True if using HTTPS. Else, false. */ function is_ssl(): bool { return get_http_scheme() === 'https://'; } /** * * Returns the base URL, based on the $_SERVER's SCRIPT_NAME. * Generally, the server configuration should redirect every request * (except for existing files) to the 'index.php'. * This function retrieve the directory URL to the called file, so 'index.php' * and returns it. * If the app is working at the root of the server (at the domain name level), * an empty string will be returned. Else, the subdirectories will be returned. * @return string Base URL. */ function get_base_url(): string { if (php_sapi_name() === 'cli' && function_exists('cfg') && ($baseUrl = cfg('~@app.hosting.base_url.fallback'))) return rtrim($baseUrl, '/'); return rtrim(dirname($_SERVER['SCRIPT_NAME'] ?? ''), '/'); } /** * * Convert an absolute path into a URL. * @param string $path Absolute path to a file or a directory. * @param bool $host Include host in URL. * @return string URL targeting this file or directory. */ function path_to_url(string $path, bool $host = false): ?string { if (!$path) return null; $path = str_replace(DIRECTORY_SEPARATOR, '/', $path); if (strpos($path, get_root_dir()) !== 0) return null; return url(substr($path, strlen(get_root_dir())), host: $host); } /** * * Convert a URL to a local path. * @param string $url URL to process. * @param string|bool $validateHost Validate the host if the URL contains one. * If true, the current host will be used. * If false, every host will be allowed. * If a string, it should be a regexp. * @return string|null Path, if the host matched. */ function url_to_path(string $url, string | bool $validateHost = true): ?string { if ($hostRegex === true) $hostRegex = preg_quote(get_domain_name(), '/'); if ($hostRegex && ($host = extract_domain_name($url)) && !preg_match($hostRegex, $host)) return null; $url = preg_replace('/^[^:]*:\/\/[^\/]+\//', '/', $url); $url = trim($url, '/'); $url = str_replace('/', DIRECTORY_SEPARATOR, $url); return get_path($url); } /** * * Returns the requested URL, as given by the server. * @param bool $full Returns the URL with scheme and domain, or only path. * @return string Request URL. */ function get_request_url(bool $full = false): string { $url = $_SERVER['REQUEST_URI'] ?? '/'; if (!$full) return $url; return get_http_scheme() . get_domain_name() . $url; } /** * * Returns the referer URL if available. * @return string|null Referer URL, or null if unavailable. */ function get_referer_url(): ?string { return $_SERVER['HTTP_REFERER'] ?? null; } /** * * Returns the current URL, without query strings. * @param bool $trimmed If true, trim the slashes. * @return string Current path. */ function get_request_path(bool $trimmed = false): string { $path = preg_replace('/\?.*$/', '', get_request_url()); if ($trimmed) $path = trim($path, '/'); return $path; } /** * * Returns the requested path, relatively to the project root. * The given path should be located insidide the project folder. * @param string $path Absolute path to relativize. * @return string Relative path. */ function get_relative_path(string $path): string { if (!$path || $path[0] !== DIRECTORY_SEPARATOR) return $path; if (!str_starts_with($path, $root = get_root_dir())) return $path; return substr($path, strlen($root) + 1); } /** * * Returns the requested URL, based on , relatively * to the base URL of the app got using . * @param bool $keepQueryString Keep or strip the query strings from the URL. * @return string Request URL relatively to the app root. */ function get_relative_url(bool $keepQueryString = true): string { $url = substr(get_request_url(), strlen(get_base_url())); if ($keepQueryString) return $url; return preg_replace('/^([^?]+)(\?.*)?$/', '$1', $url); } /** * * Returns the HTTP method (GET, POST, PUT or DELETE). * @return string HTTP method (uppercase). */ function get_http_method(): string { return strtoupper($_SERVER['REQUEST_METHOD'] ?? 'GET'); } /** * * Returns true if the current HTTP method is the one given. * @param string $method Method to compare. * @return boolean True if this is the current HTTP method. Else, false. */ function is_http_method(string $method): bool { return get_http_method() === strtoupper($method); } /** * * Returns true if the current HTTP method is POST. * @return boolean True if the current HTTP method is POST. */ function is_post(): bool { return is_http_method('POST'); } /** * * Returns true if the browser sent the headers of a XMLHTTPRequest, * aka ajax request. * @return boolean True if it's an ajax request. Else, false. */ function is_xhr(): bool { return strtolower($_SERVER['HTTP_X_REQUESTED_WITH'] ?? '') === 'xmlhttprequest'; } /** * * Returns the client IP address, as given by the server. * @return string|null The IP address. If the server doesn't got or * passed it, null. */ function get_remote_ip(): ?string { return strtoupper($_SERVER['REMOTE_ADDR'] ?? '') ?: null; } /** * * Returns the user agent of the visitor. * @return string|null The user agent. */ function get_user_agent(): ?string { return ($_SERVER['HTTP_USER_AGENT'] ?? '') ?: null; } /** * * Get the variable given in argument from the POST or GET data. * If the argument is an array of variable names, an associative array * will be returned with all the corresponding values from POST or GET. * @param string|array|null $k Variable(s) name(s). * @param string $method Variables passing methods * ('both', 'get' or 'post') * @param boolean $trim Trim string values. * @return mixed POST/GET value(s). */ function get(string | array | null $k = null, string $method = 'both', bool $trim = false): mixed { if ($k === null) return array_merge($_GET, $_POST); if (is_array($k)) { $all = []; foreach ($k as $kk) $all[$kk] = get($kk, method: $method, trim: $trim); return $all; } $v = null; if ($method === 'get') $v = $_GET[$k] ?? null; else if ($method === 'post') $v = $_POST[$k] ?? null; else if ($method === 'both') $v = $_POST[$k] ?? $_GET[$k] ?? null; else throw new Microbe_Exception("Unhandled method {$method} while getting request var"); if ($trim && is_string($v)) $v = trim($v); return $v; } /** * * Getting the variable given in argument from the GET data. * Does exactly the same as , but only get data from GET, not from POST. * @param string|array $k Variable(s) name(s). * @param boolean $trim Trim string values. * @return mixed GET value(s). */ function get_queried(string | array $k, bool $trim = false): mixed { return get($k, method: 'get', trim: $trim); } /** * * Getting the variable given in argument from the POST data. * Does exactly the same as , but only get data from POST, not from GET. * @param string|array $k Variable(s) name(s). * @param boolean $trim Trim string values. * @return mixed POST value(s). */ function get_posted(string | array $k, bool $trim = false): mixed { return get($k, method: 'post', trim: $trim); } /** * * @param string|array $k Key or array of keys to get with . * @param Closure $modifier Modifier function. Takes two params: the * value and the key. * @param bool $nullable Returns null if string is empty. * @param array $nullValues Nullable values. * @param string $method Method used by . * @return mixed A single casted value if $k is a single * param, or an object with casted values * for each param key's value. */ function get_func_casted( string | array $k, Closure $modifier, bool $nullable = false, array $nullValues = [], string $method = 'both', ): mixed { $multiple = true; if (!is_array($k)) { $multiple = false; $k = [ $k ]; } $values = []; foreach ($k as $kk) { $v = get($kk, method: $method); $v = $modifier($v, $kk); if ($nullable) { foreach ($nullValues as $nullValue) { if ($v === $nullValue) $v = null; break; } } $values[$kk] = $v; } return $multiple ? (object) $values : array_pop($values); } /** * * Get the variable(s), cast it to trimed string. * @param string|array $k Key or array of keys to get with * . * @param bool $trim Trim the value. * @param bool $nullable Returns null if string is empty. * @param string $method Method used by . * @return null|string|object A string if $k is a single param, or an * object with string for each param * key's value. */ function get_str(string | array $k, bool $trim = true, bool $nullable = false, string $method = 'both'): null | string | object { return get_func_casted( k: $k, nullable: $nullable, method: $method, nullValues: [ '' ], modifier: function(mixed $value, string $key) use ($trim): string { if (!is_scalar($value)) $value = ''; $value = (string) $value; if ($trim) $value = trim($value); return $value; }, ); } /** * * Get the variable(s) with , but returns null as value if the * string is empty. * @param string|array $k Key or array of keys to get with . * @param bool $trim Trim the value. * @return null|string|object A string if $k is a single param, or an * object with string for each param * key's value. */ function get_nullable_str(string | array $k, bool $trim = true): null | string | object { return get_str($k, $trim, true); } /** * * Get the variable(s), cast it to a number. * @param string|array $k Key or array of keys to get with * . * @param bool $int Don't allow floating values. * @param int|float|null $min Minimum value. * @param int|float|null $max Maximum value. * @param bool $nullable Returns null if string is empty. * @param array $nullValues Nullable values. * @param string $method Method used by . * @return null|int|float|object A number if $k is a single param, * or an object with numbers for each * param key's value. */ function get_number( string | array $k, bool $int = false, int | float | null $min = null, int | float | null $max = null, bool $nullable = false, string $method = 'both', ): null | int | float | object { return get_func_casted( k: $k, nullable: $nullable, method: $method, modifier: function(mixed $value, string $key) use ($int, $min, $max, $nullable): int | float | null { if (!is_scalar($value)) return $nullable ? null : 0; if (ctype_digit($value)) $value = (int) $value; else if (is_numeric($value)) $value = (float) $value; else return $nullable ? null : 0; if ($min !== null && $value < $min) $value = $min; if ($max !== null && $value > $max) $value = $max; return $value; }, ); } /** * * Get the variable(s), cast it to an integer. * @param string|array $k Key or array of keys to get with * . * @param int|float|null $min Minimum value. * @param int|float|null $max Maximum value. * @param bool $nullable Returns null if string is empty. * @param array $nullValues Nullable values. * @param string $method Method used by . * @return null|int|float|object An integer if $k is a single param, * or an object with integers for each * param key's value. */ function get_int( string | array $k, ?int $min = null, ?int $max = null, bool $nullable = false, string $method = 'both', ): null | int | object { return get_number( k: $k, int: true, min: $min, max: $max, nullable: $nullable, method: $method, ); } /** * * Get the variable(s), cast it to an integer, in nullable mode. * @param string|array $k Key or array of keys to get with * . * @param int|float|null $min Minimum value. * @param int|float|null $max Maximum value. * @param array $nullValues Nullable values. * @param string $method Method used by . * @return null|int|float|object An integer if $k is a single param, * or an object with integers for each * param key's value. */ function get_nullable_int( string | array $k, ?int $min = null, ?int $max = null, string $method = 'both', ): null | int | object { return get_int( k: $k, min: $min, max: $max, nullable: true, method: $method, ); } /** * * Check if the given POST/GET param seems to be equivalent to a true, * aka 1, (y)es or (t)rue. * @param string $k Variable name. * @param string $method Variables passing methods ('both', 'get' or 'post'). * @return boolean Is the variable a true or not? */ function get_is(string $k, string $method = 'both'): bool { return value_seems_true(get($k, method: $method)); } /** * * Get the given POST/GET param and check if its value is one of those * specified with $values. If not, $default will be returned. * @param string $k Variable name. * @param array $values Allowed values. * @param mixed $default Value returned. * @param string $method Variables passing methods ('both', 'get' or 'post'). * @return mixed The value. */ function get_in(string $k, array $values, mixed $default = null, string $method = 'both'): mixed { $v = get($k, method: $method); return in_array($v, $values) ? $v : $default; } /** * * Get the POST/GET param $k and tries to build the DateTime object. * @param string $k Variable name. * @return DateTime|null The DateTime object if the value is valid. */ function get_date(string $k): ?DateTime { if (!preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $v = get_str($k))) return null; return new DateTime($v . ' 00:00:00'); } /** * * Get the POST/GET param $kd and tries to build the DateTime object. * If $kt is given, it should corresponds to the time variable name. * @param string $kd Date or datetime variable name. * @param string|null $kt Time variable name. * @param string|DateTimeZone|null $timezone Optional timezone. * @return DateTime|null The DateTime object if the value * is valid. */ function get_datetime(string $kd, ?string $kt = null, string | DateTimeZone | null $timezone = null): ?DateTime { $d = null; $t = null; if (!preg_match('/^([0-9]{4}-[0-9]{2}-[0-9]{2})/', $v = get_str($kd), $m)) return null; $d = $m[1]; if ($kt && preg_match('/^[0-9]{2}:[0-9]{2}(:[0-9]{2})$/', $v = get_str($kt), $m)) $t = $v . ($m[1] ?? '' ? '' : ':00'); else if (preg_match('/([0-9]{2}:[0-9]{2}:[0-9]{2})$/', $v = get_str($kd), $m)) $t = $m[1]; if (is_string($timezone)) $timezone = new DateTimeZone($timezone); return new DateTime($d . ' ' . ($t ?: '00:00:00'), $timezone); } /** * * Get some query-string passed values, which use the same name. * E.g. foo.html?a=foo&a=bar&b=john => a=[foo,bar] * @param string $k Variable name. * @return array Array of values. */ function get_multiple(string $k): array { $values = []; foreach (explode('&', $_SERVER['QUERY_STRING'] ?? '') as $param) { if (!str_contains($param, '=')) $param .= '='; list($key, $value) = explode('=', $param, 2); if (urldecode($key) !== $k) continue; $values[] = urldecode($value); } return $values; } /** * * Get the variable given in argument from the POST or GET data, then cast it * to an associative array. * If no variable match, or the value is not a valid associative array, an * empty array will be returned. * @param string|array $k Variable name. * @param string $method Variables passing methods * ('both', 'get' or 'post') * @return array Value, casted as an associative array. */ function get_assoc_array(string | array $k, string $method = 'both'): array { if (!($value = get($k, method: $method)) || !is_assoc_array($value)) return []; return $value; } /** * * Getting the variable given in argument from the GET data and cast * it as an array. * Does exactly the same as , but only get data * from GET, not from POST. * @param string|array $k Variable(s) name(s). * @return mixed GET value(s) casted as an array. */ function get_queried_assoc_array(string | array $k): array { return get_assoc_array($k, method: 'get'); } /** * * Getting the variable given in argument from the POST data and cast * it as an array. * Does exactly the same as , but only get data * from POST, not from GET. * @param string|array $k Variable(s) name(s). * @return mixed POST value(s) casted as an array. */ function get_posted_assoc_array(string | array $k): array { return get_assoc_array($k, method: 'post'); } /** * * Execute on $_POST. * @param mixed $data Pattern of the data we are waiting for. * @param bool $trim Trim string values or not (default true)? * @param string $separator Chained keys separator (when default one may be * found in one of the key names). * @param string $key Current walking key. Internal use only. * @return mixed Casted data. */ function cast_posted_data(mixed $data, bool $trim = true, string $separator = '§', string $key = ''): mixed { return cast_data( input: $_POST, data: $data, trim: $trim, separator: $separator, key: $key, ); } /** * * Execute on $_GET. * @param mixed $data Pattern of the data we are waiting for. * @param bool $trim Trim string values or not (default true)? * @param string $separator Chained keys separator (when default one may be * found in one of the key names). * @param string $key Current walking key. Internal use only. * @return mixed Casted data. */ function cast_queried_data(mixed $data, bool $trim = true, string $separator = '§', string $key = ''): mixed { return cast_data( input: $_GET, data: $data, trim: $trim, separator: $separator, key: $key, ); } /** * * Get the queried or posted page number, and cast the value to get an integer * between $min and $max, with a $default value. * @param mixed $page Value to process. If null, the value will be got * from $_GET or $_POST with the key $var. * @param string $var Var name corresponding to the page * number requested. * @param int $default Default page number. * @param int|null $max Maximum page number. * @param int $min Minimum page number. * @return int Casted page number. */ function get_page_number(mixed $page = null, string $var = 'page', int $default = 1, ?int $max = null, ?int $min = 1): int { if (($page === null) && (($page = get($var)) === null)) return $default; if (!is_scalar($page)) return $default; $page = ((int) $page) ?: $default; if ($min !== null) $page = max($page, $min); if ($max !== null) $page = min($page, $max); return $page; } /** * * Validate some GET/POST parameters based on the rules given in the array, * then return the casted data and the errors if exists. * @param array $fields Numerical array containing each field and its * rules, as a Closure getting the value as first * parameter, and returning an error as a string * or nothing if the rule passed. A special '@' * key can be included, to cast the value. * In this case, the return of the Closure will * be the casted value. * @param boolean $dataAsArray Returns the data as an array instead * of an object. * @return array An array containing two elements: 0 is an object * containing the casted data, and 1 is an array * containing the errors. */ function validate(array $fields, bool $dataAsArray = false): array { $data = []; $errors = []; foreach ($fields as $name => $rules) { $value = get($name); foreach ($rules as $idx => $func) { if (in_array($idx, [ '@', 'cast' ])) { if ($func === 'trim') $value = $value === null ? null : (trim(is_scalar($value) ? ($value ?: '') : '') ?: ''); else if ($func === 'int') $value = is_int_val($value) ? (int) $value : null; else if ($func === 'float') $value = is_float_val($value) ? (float) $value : null; else if ($func === 'bool') $value = value_seems_true($value); else if ($func instanceof Closure) $value = $func($value); continue; } if (is_string($func) && str_starts_with($func, '?') && $value === '') $value = null; if (is_string($err = $func($value))) { $errors[$name] = $err; break; } } $data[$name] = $value; } if (!$dataAsArray) $data = (object) $data; return [ $data, $errors ]; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending ENV #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning ERRORS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Exceptions }------------------------------------------------------------ class Microbe_Unauthorized_Exception extends Exception {} class Microbe_NotFound_Exception extends Exception {} class Microbe_Exception extends Exception {} // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Register a custom error callback function, based on an error code. * @param int $errorCode Error code: basically 403, 404 or 500. * @param Closure $func Callback function, executed when the * $errorCode is thrown somewhere. * @param array|null $environments Option environments array: when the current * environment is not in this list, the * callback will not be called. */ function register_custom_error_handler(int $errorCode, Closure $func, array $environments = null): void { if ($environments !== null && !in_array(get_env(), $environments)) { return; } cfg('@core.error_handler_' . $errorCode, $func); } /** * * List error files. * @param string $type Type of error (500, 404, 403). * @param string|null $year Filter by year. * @param string|null $month Filter by month. * @param bool $reverse Reverse files (default true: recent first). * @return array Objects describing error files. */ function get_logged_errors_files( string $type, ?string $year = null, ?string $month = null, bool $reverse = true, ): array { if (!($cfg = cfg('~@errors.log.' . $type))) return []; if (!($cfg['enabled'] ?? false)) return []; $dir = $cfg['path'] ?? get_data_dir('logs', 'errors'); $files = []; if (!is_dir($dir)) return []; foreach (get_folders($dir) as $fYear) { $thisYear = $fYear->getName(); if ($year && ($thisYear !== $year)) continue; foreach (get_files($fYear->getPath()) as $f) { if (!preg_match('/^(?[0-9]{4})(?[0-9]{2})(?[0-9]{2})-(?.+)\.log$/', $f->getName(), $m)) continue; if ($type !== $m['t']) continue; if ($thisYear !== $m['y']) continue; if ($month && ($month !== $m['m'])) continue; $files[] = (object) [ 'instance' => $f, 'year' => $m['y'], 'month' => $m['m'], 'day' => $m['d'], 'dt' => $dt = new DateTime($m['y'] . '-' . $m['m'] . '-' . $m['d'] . ' 00:00:00'), 'day_name' => get_day_name($dt, locale: 'en_US'), 'short_day_name' => get_day_name($dt, locale: 'en_US', short: true), ]; } } return $reverse ? array_reverse($files) : $files; } /** * * Returns logged error for a specific error type and date. * @param string $type Type of error (500, 404, 403). * @param string $year File's year. * @param string $month File's month. * @param string $day File's day. * @param int|null $limit Limit results. Null for no limit. * @param bool $reverse Reverse results: recent first. * @return array Array containing error objects. */ function get_logged_errors( string $type, string $year, string $month, string $day, ?int $limit = 100, bool $reverse = true, ): array { if (!($path = get_errors_file_path($type, $year, $month, $day))) return []; if (!is_file($path)) return []; return array_values(array_filter(array_map(function(string $line): ?object { if (!($line = trim($line))) return null; return parse_eror_line($line); }, $reverse ? tail_file($path, $limit) : head_file($path, $limit)))); } /** * * Returns path of error log file. * @param string $type Type of error (500, 404, 403). * @param string $year File's year. * @param string $month File's month. * @param string $day File's day. * @return string|null File path. */ function get_errors_file_path(string $type, string $year, string $month, string $day): ?string { if (!($cfg = cfg('~@errors.log.' . $type))) return null; if (!($cfg['enabled'] ?? false)) return null; $dir = $cfg['path'] ?? get_data_dir('logs', 'errors'); $path = join_path($dir, $year, $year . str_pad($month, 2, '0', STR_PAD_LEFT) . str_pad($day, 2, '0', STR_PAD_LEFT) . '-' . $type . '.log'); return $path; } /** * * Log error in local file. * @param string $type Error type: 404, 403 or 500. * @param string|null $message Optional message. */ function log_error(string $type, ?string $message = null): void { if (!($cfg = cfg('~@errors.log.' . $type))) return; if (!($cfg['enabled'] ?? false)) return; $at = new DateTime(); $dir = $cfg['path'] ?? get_data_dir('logs', 'errors'); $path = join_path($dir, $at->format('Y'), $at->format('Ymd') . '-' . $type . '.log'); rmkdir(dirname($path)); file_put_contents($path, implode(' | ', [ $at->format('c'), $type, get_remote_ip() ?: '', get_http_method() ?: '', get_request_url(full: true) ?: '', get_referer_url() ?: '', get_user_agent() ?: '', $message ? base64_encode($message) : '', ]) . "\n", FILE_APPEND); } /** * * Parse an error line got from a log file. * @param string $line Line as a string. * @return object Object describing the error. */ function parse_eror_line(string $line): object { $cols = explode(' | ', $line); $err = (object) [ 'at' => $cols[0] ?? null, 'type' => $cols[1] ?? null, 'ip' => $cols[2] ?? null, 'http_method' => $cols[3] ?? null, 'url' => $cols[4] ?? null, 'referer' => $cols[5] ?? null, 'user_agent' => $cols[6] ?? null, 'message' => $cols[7] ?? null ? base64_decode($cols[7]) : null, ]; $err->pretty_url = $err->url ? preg_replace('/^https?:\/\/[^\/]+(\/.*)?/', '...$1', $err->url) : null; $err->pretty_referer = $err->referer ? preg_replace('/^https?:\/\/' . preg_quote(get_domain_name(), '/') . '/', '...', $err->referer) : null; $err->browser = $err->user_agent ? guess_browser_by_user_agent($err->user_agent) : null; return $err; } /** * Throw a 403 error, with the registered custom handler * or with a system message. * Generally reached after a catching of an 'Microbe_Unauthorized_Exception'. * @param string|null $message Message to pass to the handler or to show * in the system message. */ function throw_403(?string $message = null): void { log_error('403', $message); if (!MB_CLI && ($func = cfg('~@core.error_handler_403'))) { $func($message); close(); } message( type: 'error', title: "403 Unauthorized", before: '' . "\n", html: "You are not allowed to access this resource." . ($message ? "

" . $message : ''), ); } /** * Throw a 404 error, with the registered custom handler * or with a system message. * Generally reached after a catching of a 'Microbe_NotFound_Exception'. * @param string|null $message Message to pass to the handler or to show * in the system message. */ function throw_404(?string $message = null): void { log_error('404', $message); if (!MB_CLI && ($func = cfg('~@core.error_handler_404'))) { $func($message); close(); } message( type: 'error', title: "404 Not Found", before: '' . "\n", html: "The resource you're trying to access was not found." . ($message ? "

" . $message : ''), ); } /** * Throw a 500 error, with the registered custom handler * or with a system message. * Generally reached after a catching of any 'Exception' which is not an * 'Microbe_Unauthorized_Exception' or an 'Microbe_NotFound_Exception'. * In the case of an 'Microbe_Exception' which means an 'Exception' sent through * this framework or the friends of it, $isExternal will stay false. * When it's reached from an unmanaged Exception, $isExternal will be true. * @param array $err Error details, generally given from an * 'Error' or an 'Exception' instance. * @param bool $isExternal Is it an error caught from a * 'Microbe_Exception' or not? * @param string|null $message Message to pass in the $err array. */ function throw_500(array $err = [], bool $isExternal = false, ?string $message = null): void { if ($err instanceof Exception) { $err = [ 'message' => $err->getMessage(), 'file' => $err->getFile(), 'line' => $err->getLine(), 'trace' => null, ]; } $err = (object) array_merge([ 'message' => $message, 'file' => null, 'line' => null, 'trace' => null, ], $err); log_error('500', $err->message); if (!MB_CLI && ($func = cfg('~@core.error_handler_500'))) { $func($err); close(); } if (!headers_sent()) { header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500); } message( type: 'error', title: "500 Internal Server Error", before: "\n", html: '
' . trim($err->message) . '
' . '
    ' . '
  • File
    ' . (html_backtrace_file_path($err->file, (int) ($err->line ?: 0)) ?: '(unknown)') . '
  • ' . '
  • Line
    ' . ($err->line ?: '(unknown)') . '
  • ' . '
  • Backtrace
    ' . ($err->trace ? $err->trace : '(empty)') . '
  • ' . '
', ); } /** * Generate the HTML string for a file path entry, separating the relative URL * from root and the other part of the absolute path, then appending the * line number. * @param string|null $path File path. * @param int|null $line Line number. * @return string|null Formated file path and line number. */ function html_backtrace_file_path(string $path = null, int $line = null): ?string { if ($path === null || $path === '') return null; $parent = get_root_dir(); if (strpos($path, $parent) !== 0) return $path; return substr($path, 0, strlen($parent) + 1) . '' . substr($path, strlen($parent) + 1) . ($line ? ':' . $line . '' : '') . ''; } /** * Errors callback, used by , and * . * @param Exception|Error|int|null $exception Error, exception or exit code. */ function handle_error(Exception | Error | int $exception = null): void { if (!($exception instanceof Exception) && !($exception instanceof Error) && !($err = error_get_last())) { return; } $trace = null; if ($exception && ($exceptionTrace = $exception->getTrace())) { $trace = '
    '; foreach ($exceptionTrace as $entry) { $entry = array_merge([ 'file' => '(unknown file)', 'line' => '(unknown line)', 'function' => null, 'class' => null, ], $entry); $trace .= '
  • ' . html_backtrace_file_path($entry['file'], (int) ($entry['line'] ?: 0)) . ':' . $entry['line'] . ($entry['class'] || $entry['function'] ? ' >> ' : '') . ($entry['class'] ? $entry['class'] . '::' : '') . ($entry['function'] ?: '') . '
  • ' . "\n"; } $trace .= '
' . "\n"; } $error = [ 'message' => $exception ? $exception->getMessage() : $err['message'], 'file' => $exception ? $exception->getFile() : $err['file'], 'line' => $exception ? $exception->getLine() : $err['line'], 'trace' => $trace, ]; if ($exception) { if ($exception instanceof Microbe_Unauthorized_Exception) { throw_403($error['message']); return; } else if ($exception instanceof Microbe_NotFound_Exception) { throw_404($error['message']); return; } else if ($exception instanceof Microbe_Exception) { throw_500($error); return; } } throw_500($error, true); } /** * * Returns a HTML string, representing a red
with the $str message. * @param string $str Error message. * @return string HTML error. */ function html_error_block(string $str): string { return '
' . $str . '
'; } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'errors' => [ 'log' => [ '404' => [ 'enabled' => false, 'path' => null ], '403' => [ 'enabled' => false, 'path' => null ], '500' => [ 'enabled' => false, 'path' => null ], ], ] ]; }); // ============================================================================= // ---{ PHP Error Handlers }---------------------------------------------------- if (defined('MB_HANDLE_ERRORS') && MB_HANDLE_ERRORS) { set_exception_handler('handle_error'); set_error_handler('handle_error'); register_shutdown_function('handle_error'); } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending ERRORS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning FILES #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Returns 0755, aka the default new directory chmod. * @return int The chmod 0755. */ function get_mkdir_chmod(): int { return 0755; } /** * * Returns 0644, aka the default new file chmod. * @return int The chmod 0644. */ function get_new_file_chmod(): int { return 0644; } /** * * Check if the path or the file name extension is not one of known * non-ASCII extensions. * @param string $path Path or file name. * @return bool Does file name seems ASCII or name? */ function file_seems_ascii(string $path): bool { if (is_dir($path)) return false; return !preg_match('/\.(jpg|jpeg|png|gif|bmp|tiff|tif|webp|ico|psd|heic|mp3|wav|flac|aac|ogg|wma|m4a|aiff|mp4|mkv|avi|mov|wmv|flv|webm|mpeg|mpg|zip|rar|7z|tar|gz|bz2|xz|lzma|exe|dll|so|dylib|bin|elf|app|pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odp|sqlite|db|mdb|accdb|parquet|avro|ttf|otf|woff|woff2|class|jar|pyc|wasm|iso|img)$/i', $path); } /** * * Returns file type based on extension. * @param string $path Path or file name. * @return string|null Category name. If no type matches, null. */ function guess_file_type(string $path): ?string { $types = [ 'image' => '/\.(jpg|jpeg|png|gif|webp|bmp|tiff|tif|heic|heif|svg|ico|raw|cr2|nef|arw|dng)$/i', 'video' => '/\.(mp4|mkv|avi|mov|wmv|flv|webm|mpeg|mpg|m4v|3gp|ogv)$/i', 'audio' => '/\.(mp3|wav|aac|flac|ogg|m4a|wma|aiff|aif|alac|opus|mid|midi)$/i', 'document' => '/\.(pdf|doc|docx|odt|rtf|txt|md|html|htm|xls|xlsx|ods|csv|ppt|pptx|odp|epub|tex)$/i', 'archive' => '/\.(zip|rar|7z|tar|gz|tgz|bz2|xz|lz|lzma|cab|iso|arj)$/i', 'code' => '/\.(c|h|cpp|hpp|cs|java|kt|swift|go|rs|php|py|rb|js|mjs|cjs|ts|jsx|tsx|scala|lua|pl|sh|bash|ps1|sql|r|dart|asm|vb|vbs|groovy|styl|scss|less|gitignore|gitkeep|htaccess|htpasswd|phtml|xml|json)$/i', ]; foreach ($types as $n => $re) if (preg_match($re, $path)) return $n; return null; } /** * * Create recursively a directory. * @param string $path Path of directory to create */ function rmkdir(string $path): void { if (!is_dir($path)) mkdir($path, get_mkdir_chmod(), true); } /** * * Sanitize a filename, removing special characters and accents, * and shortifying the name if too long. * @param string $name Original file name. * @param string $separator Separator used in replacement of * non-alphanumerical characters. * @param int $maxLength Maximum length of the part before the extension. * @return string Sanitized file name. */ function sanitize_filename(string $name, string $separator = '_', int $maxLength = 32): string { return sanitize_string(str: $name, separator: $separator, keepExtension: true, maxLength: $maxLength); } /** * * Check if a filename seems secure, without slashes, double dots, * control characters, banned Windows characters and NULL character. * @param mixed $name Filename (should probably be a string). * @return bool Does filename seems secure or not? */ function filename_seems_secure(mixed $name): bool { if (!is_string($name) || !$name) return false; return !preg_match('/(\.\.|[\/\\\\]|[\x00-\x1F\x7F<>:"|?*])/', $name); } /** * * Returns a hashed string, suffixed optionnaly with an extension, in order * to use as a filename. We replace the 'c' followed by a 'd', by a 'f' * to avoid sometimes problematic 'cd'. * @param string $str String to hash. * @return string|null $ext Extension. */ function hashed_filename(string $str, ?string $ext = null): string { $str = hash('sha256', $str); return str_replace('cd', 'fd', $str) . ($ext ? '.' . $ext : ''); } /** * * Convert a size into a human-readable value. The input size and the output * size can be one of those units: * - B: bytes * - KB: kilobytes * - MB: megabytes * - GB: gigabytes * - TB: terabytes * - PB: petabytes * @param float $size Size. * @param string $from Input unit. * @param string|null $to Output unit. If null, the detection will be * made to find the most readable unit. * @param bool $asConfig Remove spaces and 'B', to make a string usable * for PHP or server configuration. * @return string Number suffixed with the proper unit. */ function bytes_unit(int | float $size, string $from = 'B', string $to = null, bool $asConfig = false): string { if ($from === 'KB') $size *= 1000; else if ($from === 'MB') $size *= 1000 * 1000; else if ($from === 'GB') $size *= 1000 * 1000 * 1000; else if ($from === 'TB') $size *= 1000 * 1000 * 1000 * 1000; else if ($from === 'PB') $size *= 1000 * 1000 * 1000 * 1000 * 1000; if ($to === null) { if ($size >= 1000 * 1000 * 1000 * 1000 * 1000) $to = 'PB'; else if ($size >= 1000 * 1000 * 1000 * 1000) $to = 'TB'; else if ($size >= 1000 * 1000 * 1000) $to = 'GB'; else if ($size >= 1000 * 1000) $to = 'MB'; else if ($size >= 1000) $to = 'KB'; else $to = 'B'; } if ($to === 'PB') $size /= 1000 * 1000 * 1000 * 1000 * 1000; else if ($to === 'TB') $size /= 1000 * 1000 * 1000 * 1000; else if ($to === 'GB') $size /= 1000 * 1000 * 1000; else if ($to === 'MB') $size /= 1000 * 1000; else if ($to === 'KB') $size /= 1000; if ($asConfig) return round($size) . str_replace('B', '', $to); return format($size, 'number') . ' ' . $to; } /** * * Returns the bytes value of an input size, which can be suffixed with one of * the units returned by . E.g. '345.67MB' will return 345670000. * @param string|int|float $size Size suffixed or not with a unit. * @return int Size in bytes. */ function size_string_to_bytes(string | int | float $size): int { $regex = '/^([0-9]+(\.[0-9]+)?)([KMGT])?B?$/i'; if (preg_match($regex, (string) $size, $matches)) { $size = (float) $matches[1]; if (count($matches) >= 4) { $unit = strtoupper($matches[3]); if ($unit === 'K') $size *= 1000; else if ($unit === 'M') $size *= pow(1000, 2); else if ($unit === 'G') $size *= pow(1000, 3); else if ($unit === 'T') $size *= pow(1000, 4); } } return (int) $size; } /** * * Get hash for the given file. * @param string $path File path. * @param bool $force Force hash computing even if already stored. * @param string $algo Hashing algorithm. * @param bool $store Store computed hash. * @return string Hash. */ function get_file_hash(string $path, string $algo = 'sha1', bool $force = false, bool $store = true): string { $algo = strtolower($algo); $hashName = hash('sha256', get_relative_path($path) . ':' . filemtime($path) . ':' . filesize($path)) . '-' . $algo; $hashPath = get_data_dir('hashes', substr($hashName, 0, 2), substr($hashName, 2, 2), $hashName); if (!$force && is_file($hashPath) && ($hash = trim(file_get_contents($hashPath)))) return $hash; $hash = hash_file($algo, $path); if ($store) { rmkdir(dirname($hashPath)); file_put_contents($hashPath, $hash); } return $hash; } /** * * Returns the file's extension. * @param string $f File name or path. * @param bool $dot Prepend the dot before the extension. Default false. * @param bool $lower Lowercase the extension. Default false. * @return string File extension, or an empty string if none found. */ function get_file_extension(string $f, bool $dot = false, bool $lower = false): string { $ext = preg_match('/\.([^.\/]+)$/', $f, $m) ? $m[1] : null; if (!$ext) return ''; if ($dot) $ext = rtrim('.' . $ext, '.'); if ($lower) $ext = strtolower($ext); return $ext; } /** * * Returns true if the file extension corresponds to the given one(s). * @param string $f File name or path. * @param string|array $ext Extension or array of extensions. * @return boolean Is $f's extension equals or in $ext? */ function is_file_extension(string $f, string | array $ext): bool { return in_array(get_file_extension($f, lower: true), array_map(function(string $e): string { return strtolower(trim($e, '.')); }, is_array($ext) ? $ext : [ $ext ])); } /** * * Removes a file's extension. * @param string $f File name or path. * @return string File name or path, stripped from extension. */ function remove_extension(string $f): string { return preg_replace('/\.[^.]+$/', '', $f); } /** * * Returns an array containing the owner of a path (file or directory). * @param string $path Path to the file or directory. * @return array An array with 4 entries: * - User name; * - Group name; * - User ID; * - Group ID. */ function get_path_owner(string $path): array { $owner = [ null, null, null, null ]; if (($userId = fileowner($path)) !== false) { $owner[2] = $userId; $owner[0] = get_system_user_name_by_id($userId); } if (($groupId = filegroup($path)) !== false) { $owner[3] = $groupId; $owner[1] = get_system_user_name_by_id($groupId); } return $owner; } /** * * Returns the file/directory permissions as octal string (0644, 0777, etc.). * @param string $path Path to the file or directory. * @return string|null Octal string. */ function get_path_perms_octal_string(string $path): ?string { if (($p = fileperms($path)) === false) return null; return substr(sprintf('%o', $p), -4); } /** * * Returns the file/directory permissions as a human readable string. * @param string $path Path to the file or directory. * @return string|null Readable rights. */ function get_path_perms_readable_string(string $path): ?string { if (($perms = fileperms($path)) === false) return null; $type = match ($perms & 0xF000) { 0xC000 => 's', // Socket 0xA000 => 'l', // Symbolic Link 0x8000 => '-', // Regular File 0x6000 => 'b', // Block Device 0x4000 => 'd', // Directory 0x2000 => 'c', // Character Device 0x1000 => 'p', // FIFO pipe default => 'u', // Unknown }; return $type // Owner . (($perms & 0x0100) ? 'r' : '-') . (($perms & 0x0080) ? 'w' : '-') . (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x') : (($perms & 0x0800) ? 'S' : '-')) // Group . (($perms & 0x0020) ? 'r' : '-') . (($perms & 0x0010) ? 'w' : '-') . (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x') : (($perms & 0x0400) ? 'S' : '-')) // Others . (($perms & 0x0004) ? 'r' : '-') . (($perms & 0x0002) ? 'w' : '-') . (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x') : (($perms & 0x0200) ? 'T' : '-')); } /** * * Check if a given path is a valid path to a file or a folder, and if this * file is properly located inside a root directory. * @param string $path Path to be checked. * @param string $root Base directory. * @param boolean $rootAllowed Does $path can be $root itself? * @return boolean Is $path a valid subpath of $root? */ function is_valid_subpath(string $path, string $root, bool $rootAllowed = true): bool { if (!is_dir($root) || !($root = realpath($root))) throw new Microbe_Exception("The given root is not a valid directory"); if (!file_exists($path) || !($path = realpath($path))) return false; $path = trim($path, '/\\'); $root = trim($root, '/\\'); if ($root === $path) return $rootAllowed; return strpos($path, $root . DIRECTORY_SEPARATOR) === 0; } /** * * Returns the file name as an array containing the name and the extension. * @param string $f File name. * @param bool $includingDot Include the extension's dot or not. * @return array Array containing the file name, and optionaly * the extension. */ function get_file_name_parts(string $f, bool $includingDot = true): array { $parts = explode('.', $f); $ext = count($parts) >= 2 ? ($includingDot ? '.' : '') . array_pop($parts) : null; return array_filter([ implode('.', $parts), $ext ]); } /** * * Get the maximum upload size, based on the PHP configuration * ('post_max_size' and 'upload_max_filesize'), and an optional * configuration context defined with the configuration * key '@upload.{ctx}.max_size'. * @param string|null $ctx Context. * @return int Maximum upload size in bytes. */ function get_max_upload_size(string $ctx = null): int { $size = min( size_string_to_bytes(ini_get('post_max_size')), size_string_to_bytes(ini_get('upload_max_filesize'))); if ($ctx !== null) { $size = min($size, size_string_to_bytes(cfg('@upload.' . $ctx . '.max_size'))); } return $size; } /** * * Get the maximum upload size requested by configuration. * @return int|null Upload size in bytes. */ function get_max_config_upload_size(): ?int { $max = null; foreach (cfg('@upload') ?: [] as $ctx => $ctxCfg) { if (!($size = ($ctxCfg['max_size'] ?? null))) continue; if (!($size = size_string_to_bytes($size))) continue; $max = max($max ?: 0, $size); } return $max; } /** * * Get uploaded files metadata, from $_FILES. * @param string $name Name of the posted file field. * @param bool $one If false (default), it will return the * uploaded file metadata as an array of * objects representing each uploaded file with * the given post name. * @return object|array|null Return an object representing the $_FILES * entry if there is only one file. If multiple * upload for a POST var like 'files[]', * returns an array containing those objects. * If the file was not posted, null will * be returned. */ function get_uploaded_files(string $name, bool $one = false): object | array | null { if (!array_key_exists($name, $_FILES)) return null; if (!is_array($_FILES[$name]) || !array_key_exists('tmp_name', $_FILES[$name])) return null; $files = []; if (!is_array($_FILES[$name]['tmp_name'])) { $files[] = $_FILES[$name]; } else { foreach (array_keys($_FILES[$name]['tmp_name']) as $idx) { $files[$idx] = []; foreach (array_keys($_FILES[$name]) as $prop) $files[$idx][$prop] = $_FILES[$name][$prop][$idx]; } } $files = array_map(function(array $f): object { $f = (object) array_merge([ 'name' => null, 'type' => null, 'size' => null, 'tmp_name' => null, 'error' => null, 'full_path' => null, ], $f); $f->extension = get_file_extension($f->name); return $f; }, $files); if (!$one) return $files; foreach ($files as $f) return $f; return null; } /** * * Get uploaded file metadata, from $_FILES, using with * $one as true. * @param string $name Name of the posted file field. * @return object|null Return an object representing the $_FILES * entry. If the file was not posted, null will * be returned. */ function get_uploaded_file(string $name): ?object { return get_uploaded_files($name, true); } /** * * Move the uploaded file from its temporary path to the given one, and create * the subdirectories if asked and needed. * @param object $file File object got from or * . * @param string $path Path where the file will be saved (new file's path). * @param bool $mkdir Make the (sub)directories if doesn't exists. * @return bool Is it a success or not? */ function save_uploaded_file(object $file, string $path, bool $mkdir = true): bool { $dir = dirname($path); if ($mkdir && !is_dir($dir)) mkdir($dir, get_mkdir_chmod(), true); if (!is_writable($dir)) return false; if (!move_uploaded_file($file->tmp_name, $path)) return false; return true; } /** * * Perform the file upload, based on the file object got from * . If an error occur, an 'ErrorException' will be * thrown. The options are the following: * - 'path': The path of the new file. * - 'keep_filename': If true, the 'path' will be considerated as a * directory and the file will be stored inside * this directory with its sanitized uploaded * file name. If false, the 'path' will be kept * as the new file path. Default: true. * - 'keep_extension': If true, the extension of the uploaded will * be kept, and the extension given in 'path' * will be ignored. Default: true. * - 'letters_folders_levels': Append X levels of letter folders * (e.g. when 2: '/path/to/images/a/b/abc.jpg'). * Missing folders will be created. * Default: 0. * - 'iterate_filename': Iterate to the file name if conflict. * Default: true. * - 'iterate_format': Iteration suffix format. Default: '_%s'. * - 'default_folders_chmod': Default: the result of . * - 'default_files_chmod': Default: the result of . * @param object $file Upload file object. * @param array $opts Upload options. * @return string Uploaded file path (absolute). */ function upload_file(object $file, array $opts): string { $opts = (object) array_merge([ 'path' => null, 'keep_filename' => true, 'keep_extension' => true, 'letters_folders_levels' => 0, 'iterate_filename' => true, 'iterate_format' => '_%s', 'default_folders_chmod' => get_mkdir_chmod(), 'default_files_chmod' => get_new_file_chmod(), ], $opts); $path = rtrim($opts->path, '/'); if ($opts->keep_filename) { $path = join_path($path, sanitize_filename($file->name)); if (!$opts->keep_extension) { $path = preg_replace('/^(.*)\.[^.\/]+$/', '$1', $path); } } else if ($opts->keep_extension) { if (preg_match('/\.([^.\/]+)$/', $file->name, $m)) { $path .= '.' . strtolower($m[1]); } } if ($opts->letters_folders_levels > 0) { $d = dirname($path); $f = basename($path); for ($i = 0; $i < $opts->letters_folders_levels; $i++) { $d = join_path($d, $f[$i]); } $path = join_path($d, $f); } if ($opts->iterate_filename && is_file($path)) { $part = preg_replace('/^(.*)\.[^.\/]+$/', '$1', $path); $ext = preg_match('/\.([^.\/]+)$/', $path, $m) ? '.' . $m[1] : ''; $newPathModel = $part . $opts->iterate_format . $ext; for ($i = 1; is_file($newPath = sprintf($newPathModel, $i)); $i++); $path = $newPath; } $dir = dirname($path); if (!is_dir($dir)) { mkdir($dir, $opts->default_folders_chmod, true); } if (!is_writable($dir)) { throw new Microbe_Exception("Path {$dir} is not writable"); } if (!move_uploaded_file($file->tmp_name, $path)) { throw new Microbe_Exception('Error while moving uploaded file'); } chmod($path, $opts->default_files_chmod); return $path; } /** * * Check if $path is already a file. If yes, an increment will be added to * the end of the name, before the extension. * @param string $path File path. * @param string $separator Separator between the filename and the iteration. * @return string Unique file path. */ function get_unique_file_path(string $path, string $separator = '_'): string { if (!file_exists($path)) return $path; $part = preg_replace('/^(.*)\.[^.\/]+$/', '$1', $path); $ext = preg_match('/\.([^.\/]+)$/', $path, $m) ? '.' . $m[1] : ''; $newPathModel = $part . $separator . '%s' . $ext; for ($i = 1; file_exists($newPath = sprintf($newPathModel, $i)); $i++); return $newPath; } /** * * Check if the directory $dir is empty or not. * @param string $dir Directory path. * @return boolean Empty (true) or not? */ function is_dir_empty(string $dir): bool { $handle = opendir($dir); while (false !== ($entry = readdir($handle))) { if ($entry !== '.' && $entry !== '..') { closedir($handle); return false; } } closedir($handle); return true; } /** * * Compute directory size. * @param string $path Directory path. * @param bool $readable Returns readable size or not. * @return int|string Size (as bytes integer or readable string). */ function get_folder_size(string $path, bool $readable = false): int | string { $total = 0; $path = realpath($path); if ($path && is_dir($path)) { foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $f) { $total += $f->getSize(); } } return $readable ? bytes_unit($total) : $total; } /** * * Remove a directory and its files recursively. * @param string $dir Path to directory. * @param bool $deleteRoot Delete also the directory $dir itself. * @param Closure|null $filter Filter function, which will accept the path * of the item processed. If this function * returns true, the file or the directory * will be deleted. If false, the item will * be kept. * @param string|null $rootDir Path to the original directory (the * initial value of $dir). */ function rrmdir(string $dir, bool $deleteRoot = true, Closure $filter = null, string $rootDir = null): void { if ($rootDir === null) $rootDir = $dir; if (!is_dir($dir)) return; foreach (scandir($dir) as $f) { if ($f === '.' || $f === '..') continue; $path = $dir . '/' . $f; if (is_dir($path) && !is_link($path)) { rrmdir($path, $deleteRoot, $filter, $rootDir); continue; } if (!$filter || $filter($path)) unlink($path); } $shouldDelete = $filter ? $filter($dir) : true; if ($shouldDelete && ($deleteRoot || ($dir !== $rootDir))) rmdir($dir); } /** * Make a file name shorter, by removing middle characters. * @param string $name File name. * @param int|null $maxLength Maximum length. If null, the file name will * not be truncated. * @return string Truncated file name. */ function shortify_file_name(string $name, ?int $maxLength = null, string $replacement = '...'): string { if ($maxLength === null) return $name; if (($len = strlen($name)) <= $maxLength) return $name; $remaining = $maxLength - strlen($replacement); $parts = get_file_name_parts($name); if (count($parts) === 1) $parts[] = ''; if ($maxLength < (strlen($parts[1]) + strlen($replacement))) return $name; $remaining -= strlen($parts[1]); if ($remaining <= 0) { $name = $replacement . $parts[1]; } else if (!$parts[1]) { $name = substr($parts[0], 0, $remaining) . $replacement; } else { $half1 = $half2 = $remaining / 2; if (!is_int($half1)) { $half1 = (int) ceil($half1); $half2 = (int) floor($half2); } $name = substr($parts[0], 0, $half1) . $replacement . substr($parts[0], -1 * $half2) . $parts[1]; } return str_replace('...', html_entity_decode('…', ENT_COMPAT, 'utf-8'), $name); } /** * * Send a file to the browser, with proper headers to force the download. * @param string $path Path to the file */ function force_download(string $path, string $name = null): void { header('Content-Type: ' . mime_content_type(basename($path))); header('Content-Disposition: attachment; filename="' . ($name ?: basename($path)) . '"'); header('Content-Length:' . filesize($path)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); readfile($path); } /** * * List files and folders inside a directory. * @param string $path Path to directory. * @param bool $files Retrieve files. * @param bool $folders Retrieve folders. * @param string|null $filter Filter regex. * @return array List of files and folders. */ function ls(string $path, bool $files = true, bool $folders = true, ?string $filter = null): array { $all = []; foreach (new DirectoryIterator($path) as $f) { if ($f->isDot()) continue; if ($f->isDir() && !$folders) continue; if ($f->isFile() && !$files) continue; $filePath = $f->getPathname(); if ($filter !== null && !preg_match($filter, $filePath)) continue; $all[] = new Microbe_File($filePath); } usort($all, function(Microbe_File $a, Microbe_File $b): int { if (($aa = strtolower($a->getName())) < ($bb = strtolower($a->getName()))) return -1; if ($aa > $bb) return 1; return 0; }); return $all; } /** * * List files inside a directory. * @param string $path Path to directory. * @param string|null $filter Filter regex. * @return array List of files and folders. */ function get_files(string $path, ?string $filter = null): array { return ls($path, files: true, folders: false, filter: $filter); } /** * * List folders inside a directory. * @param string $path Path to directory. * @param string|null $filter Filter regex. * @return array List of files and folders. */ function get_folders(string $path, ?string $filter = null): array { return ls($path, files: false, folders: true, filter: $filter); } /** * * Read $lines lines from the end of the file. * @param string $path Path of file to read. * @param int $lines Number of lines to get. * @return array Array of lines. */ function tail_file(string $path, int $lines = 10): array { if (!($f = fopen($path, 'rb'))) return []; fseek($f, 0, SEEK_END); $pos = ftell($f); $buffer = ''; $lineCount = 0; while ($pos > 0 && $lineCount < $lines) { $pos--; fseek($f, $pos); $char = fgetc($f); if ($char === "\n") { $lineCount++; if ($lineCount >= $lines) break; } $buffer = $char . $buffer; } fclose($f); return array_reverse(explode("\n", rtrim($buffer, "\n"))); } /** * * Read $lines lines from the beginning of the file. * @param string $path Path of file to read. * @param int $lines Number of lines to get. * @return array Array of lines. */ function head_file(string $path, int $lines = 10): array { if (!($f = fopen($path, 'rb'))) return []; $result = []; while (!feof($f) && count($result) < $lines) $result[] = rtrim(fgets($f), "\r\n"); fclose($f); return $result; } /** * * Returns the latest modified file time in a given directory. * @param string $dir Directory path. * @param string | null $filterClass The name of a RecursiveFilterIterator * class. * @return DateTime | null The DateTime instance of the last * modified time. */ function get_latest_modified_file_time(string $dir, ?string $filterClass = null): ?DateTime { $t = 0; $directoryIterator = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); $filteredIterator = $directoryIterator; if ($filterClass) $filteredIterator = new $filterClass($directoryIterator); $iterator = new RecursiveIteratorIterator($filteredIterator); foreach ($iterator as $f) { $mt = $f->getMTime(); if ($mt > $t) $t = $mt; } return $t === 0 ? null : new DateTime('@' . $t); } /** * * Returns a new instance of Microbe_File. * @param string $path Path to file. * @return Microbe_File The Microbe_File instance. */ function get_file(string $path): ?Microbe_File { if (!file_exists($path)) return null; return new Microbe_File($path); } class Microbe_File { private string $path; final public function __construct(string $path) { $this->path = $path; } public function getName(?int $maxLength = null, bool $removeExtension = false): string { $name = shortify_file_name(basename($this->getPath()), $maxLength); if ($removeExtension) $name = remove_extension($name); return $name; } public function getPath(): string { return $this->path; } public function getExtension(bool $lower = false): string { return get_file_extension($this->getName(), lower: $lower); } public function hasExtension(string $ext): bool { return $this->getExtension(lower: true) === strtolower($ext); } public function getParent(): static { return new static(dirname($this->getPath())); } public function getParentPath(): string { return $this->getParent()->getPath(); } public function isDir(): bool { return is_dir($this->getPath()); } public function isFile(): bool { return is_file($this->getPath()); } public function getUrl(): string { return path_to_url($this->getPath()); } public function getModifiedAt(?string $format = null): DateTime | string | null { if (!$this->isFile()) return null; $dt = new DateTime('@' . filemtime($this->getPath())); return $format ? $dt->format($format) : $dt; } public function getRelativePath(?string $absRoot = null): ?string { if ($absRoot === null) $absRoot = get_root_dir(); $absRoot = realpath($absRoot); $absPath = realpath($this->getPath()); if (!str_starts_with($absPath, $absRoot . DIRECTORY_SEPARATOR)) return ''; return substr($absPath, strlen($absRoot) + 1); } public function getSize(bool $readable = false): int | string | null { if ($this->isDir()) return get_folder_size($this->getPath(), readable: $readable); $size = filesize($this->getPath()); return $readable ? bytes_unit($size) : $size; } public function delete(bool $recursive = false): void { if ($this->isFile()) { unlink($this->getPath()); } else if ($this->isDir()) { if ($recursive) rrmdir($this->getPath(), deleteRoot: true); else rmdir($this->getPath()); } } public function rename(string $newPath): static { $newPath = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $newPath); if (!str_contains($newPath, DIRECTORY_SEPARATOR)) $newPath = join_path($this->getParentPath(), $newPath); rename($this->getPath(), $newPath); $this->path = $newPath; return $this; } public function copy(string $newPath): static { copy($this->getPath(), $newPath); return $this; } public function getOwner(): array { return get_path_owner($this->getPath()); } public function getPerms(bool $octal = false, bool $readable = false): int | string | null { if ($octal) return get_path_perms_octal_string($this->getPath()); if ($readable) return get_path_perms_readable_string($this->getPath()); return (($p = fileperms($this->getPath())) === false) ? null : $p; } public function seemsBinary(): bool { if (!($raw = $this->read())) return false; return !mb_detect_encoding((string) $raw, null, true); } public function seemsAscii(): bool { return file_seems_ascii($this->getPath()); } public function read(): string { if (!$this->isFile()) throw new Microbe_Exception("Trying to read the contents of a folder."); return file_get_contents($this->getPath()) ?: ''; } public function write(string $data): static { if (!$this->isFile()) throw new Microbe_Exception("Trying to write the contents of a folder."); file_put_contents($this->getPath(), $data); return $this; } } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'upload' => [ 'app' => [ 'max_size' => '10MB', ], ], ]; }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending FILES #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning FORMS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Returns a new Microbe_Form instance. * @param string|null $name Name of the form (useful for storing results). * @return Microbe_Form Form instance. */ function form(?string $name = null): Microbe_Form { $form = new Microbe_Form(); $form->setName($name); return $form; } /** * * Returns a new Microbe_Form_Field instance with a specific type. * @param string $type One of Microbe_Form_Field::T_*. * @param Microbe_Form_Element|null $parent Parent as a Microbe_Form_Element * instance. * @return Microbe_Form_Field Form field instance. */ function form_field(string $type, ?Microbe_Form_Element $parent = null): Microbe_Form_Field { return (new Microbe_Form_Field($type))->setParent($parent); } /** * * Get a form defined in a form file (located in the forms folder of * each bundle). The name of the form is the name of the file. * The file has to return a Microbe_Form instance, and receive optional * variables given by $args. * @param string $name Name of form file. * @param array $args Args passed to file before including it. * @return Microbe_Form Form instance if found. */ function get_form(string $name, array $args = []): Microbe_Form { $formName = $name; $bundleName = 'default'; if (preg_match('/^@(?[_.a-z0-9]+)\/(?[_a-z0-9]+)$/i', $name, $m)) { $bundleName = $m['bundleName']; $formName = $m['formName']; } if (!($bundle = get_bundle($bundleName))) throw new Microbe_Exception("Invalid bundle name while trying to get one of its forms: {$name}"); if (!is_file($path = join_path($bundle->dir, 'forms', $formName . '.php'))) throw new Microbe_Exception("Invalid form name: {$name}."); extract($args); if (!($form = (include $path))) throw new Microbe_Exception("Nothing was returned by the form file: {$name}. A Microbe_Form must be returned."); if (!($form instanceof Microbe_Form)) throw new Microbe_Exception("A Microbe_Form must be returned by the form file: {$name}."); if (!$form->getName()) $form->setName($name); return $form; } // ============================================================================= // ---{ Classes }--------------------------------------------------------------- // ---{ Class: Microbe Form Element }--- class Microbe_Form_Element { protected ?Microbe_Form_Element $parent = null; protected array $children = []; private ?string $label = null; protected ?string $description = null; protected ?string $icon = null; protected ?string $iconFormat = null; protected array $errorMessages = []; public function __construct() { $this->errorMessages = [ 'mandatory' => t("Field is mandatory"), 'invalid_regexp' => t("Invalid format"), 'invalid_array' => t("Invalid set of values"), 'invalid_scalar' => t("Invalid value"), 'invalid_number' => t("Invalid number"), 'below_min' => t("Value is below the minimum allowed"), 'above_max' => t("Value is above the maximum allowed"), 'invalid_date' => t("Invalid date"), 'invalid_time' => t("Invalid time"), 'invalid_email' => t("Invalid email address"), 'weak_password' => t("Password too weak"), 'invalid_phone' => t("Invalid phone number"), 'invalid_url' => t("Invalid URL format"), 'below_min_length' => t("Length is too short"), 'above_max_length' => t("Length is too long"), ]; } public function __toString(): string { return $this->render(asString: true); } public function setLabel(?string $label): static { $this->label = $label; return $this; } public function getLabel(): ?string { return $this->label; } public function setDescription(?string $description = null): static { $this->description = $description; return $this; } public function getDescription(): ?string { return $this->description; } public function setIcon(?string $icon = null): static { $this->icon = $icon; return $this; } public function getIcon(): ?string { return $this->icon; } public function setParent(?Microbe_Form_Element $parent = null): static { $this->parent = $parent; return $this; } public function getParent(): ?Microbe_Form_Element { return $this->parent; } public function getForm(): ?Microbe_Form { if ($this instanceof Microbe_Form) return $this; $elem = $this; while ($elem = $elem->getParent()) { if ($elem instanceof Microbe_Form) return $elem; } return null; } public function addChild(Microbe_Form_Element $child): static { $this->children[] = $child; return $this; } public function getChildren(): array { return $this->children; } public function addGroup(): Microbe_Form_Group { $group = (new Microbe_Form_Group()) ->setParent($this); $this->addChild($group); return $group; } public function addHtml(string $html): static { $html = (new Microbe_Form_Html()) ->setParent($this) ->setHtml($html); return $this->addChild($html); } public function addField(Microbe_Form_Field | string $field): Microbe_Form_Field { if (!$this->children || !($this->children[array_key_last($this->children)] instanceof Microbe_Form_Group)) $this->addGroup(); $group = $this->children[array_key_last($this->children)]; $group->addField($field); return $this; } public function getFields(bool $recursive = false): array { $fields = []; foreach ($this->getChildren() as $child) { if ($child instanceof Microbe_Form_Field) $fields[] = $child; if ($recursive) $fields = array_merge($fields, $child->getFields()); } return $fields; } public function setIconFormat(?string $iconFormat = null): static { $this->iconFormat = $iconFormat; return $this; } public function getIconFormat(): ?string { return $this->iconFormat; } public function formatIcon(string $icon): string { $iconFormat = null; $elem = $this; while ($elem) { if ($iconFormat = $elem->getIconFormat()) break; $elem = $elem->getParent(); } return icon($icon, format: $iconFormat); } public function setErrorMessage(string $errorCode, ?string $errorMessage = null): static { if ($errorMessage === null) { if (array_key_exists($errorCode, $this->errorMessages)) unset($this->errorMessages[$errorCode]); } else { $this->errorMessages[$errorCode] = $errorMessage; } return $this; } public function getErrorMessage(string $errorCode, array $params = []): ?string { if (!($msg = ($this->errorMessages[$errorCode] ?? null))) return null; return replace_params($msg, $params); } public function render(bool $asString = false): string | Microbe_DOM_Element { $div = dom('div'); return $asString ? (string) $div : $div; } } // ---{ Class: Microbe Form }--- class Microbe_Form extends Microbe_Form_Element { private ?string $id = null; private ?string $name = null; private ?string $url = null; private string $method = 'get'; private bool $multipart = false; private array $buttons = []; private ?string $header = null; private ?string $footer = null; private ?Microbe_Form_Result $lastResult = null; private Microbe_Form_Result | null | false $storedResult = false; private string | null | false $storedError = false; public function setName(?string $name): static { $this->name = $name; return $this; } public function getName(): ?string { return $this->name; } public function setId(?string $id): static { $this->id = $id; return $this; } public function getId(): ?string { return $this->id; } public function setUrl(?string $url): static { $this->url = $url; return $this; } public function getUrl(): ?string { return $this->url; } public function setMethod(string $method): static { $this->method = $method; return $this; } public function getMethod(): string { return $this->method; } public function addButton( ?string $label = null, ?string $icon = null, ?string $action = null, bool $submit = true, ): static { $this->buttons[] = (object) [ 'label' => $label, 'icon' => $icon, 'action' => $action, 'submit' => $submit, ]; return $this; } public function getButtons(): array { return $this->buttons; } public function getHeader(): ?string { return $this->header; } public function setHeader(?string $header): static { $this->header = $header; return $this; } public function getFooter(): ?string { return $this->footer; } public function setFooter(?string $footer): static { $this->footer = $footer; return $this; } public function storeError(string $error): static { if (!($storeKey = $this->getStoreKey('error'))) return $this; set_flash_var($storeKey, (string) $error); return $this; } public function getLastErrorStored(): ?string { if (!($storeKey = $this->getStoreKey('error'))) return null; if ($this->storedError !== false) return $this->storedError; $this->storedError = get_flash_var($storeKey); return $this->storedError; } public function isMultipart(?bool $multipart = null): bool | static { if ($multipart === null) return $this->multipart; $this->multipart = $multipart; return $this; } public function render(bool $asString = false): string | Microbe_DOM_Element { $div = dom('div.form'); $form = dom('form')->appendTo($div); $form->attr('novalidate', true); if ($id = $this->getId()) $form->attr('id', $id); if ($url = $this->getUrl()) $form->attr('action', url($url)); if ($method = $this->getMethod()) $form->attr('method', $method); if ($header = $this->getHeader()) dom('div.form-header')->append($header)->appendTo($form); if ($lastErrorStored = $this->getLastErrorStored()) dom('div.form-error')->appendText($lastErrorStored)->appendTo($form); $groups = dom('div.form-groups')->appendTo($form); foreach ($this->getChildren() as $child) $child->render()->appendTo($groups); if ($buttons = $this->getButtons()) { $actions = dom('div.form-actions')->appendTo($form); foreach ($buttons as $button) { $bt = dom('button')->appendTo($actions); if ($button->icon) $bt->append($this->formatIcon($button->icon)); if ($button->label) dom('span')->append($button->label)->appendTo($bt); if ($button->submit) $bt->attr('type', 'submit'); if ($button->action) $bt->attrs([ 'name' => 'action', 'value' => $button->action ]); } } if ($footer = $this->getFooter()) dom('div.form-footer')->append($footer)->appendTo($form); return $asString ? (string) $div : $div; } public function process(string $method = 'both'): Microbe_Form_Result { $fields = $this->getFields(recursive: true); $data = []; $errors = []; $hasError = false; foreach ($fields as $field) { $name = $field->getName(); list($value, $errorCode) = $field->processValue(method: $method); $data[$name] = $value; $errors[$name] = $errorCode ? [ 'code' => $errorCode, 'message' => $field->getErrorMessage($errorCode), ] : false; } $this->lastResult = new Microbe_Form_Result($data, $errors); return $this->lastResult; } public function processAndRedirectOnError(string $url = '.'): ?Microbe_Form_Result { $result = $this->process(); if ($result->hasErrors()) { $this->storeResult(); $this->redirect($url); } return $result; } public function redirect(string $url = '.'): void { redirect($url); } public function getStoreKey(string $type): ?string { if (!($name = $this->getName())) return null; return 'forms.' . $name . '.' . $type; } public function storeResult(?Microbe_Form_Result $result = null): static { if (!($storeKey = $this->getStoreKey('results'))) return $this; if ($result === null) $result = $this->lastResult; if (!$result) throw new Microbe_Exception("Trying to store a result without giving a valid one and without a last result available"); set_flash_var($storeKey, (string) $result); return $this; } public function getLastResultStored(): ?Microbe_Form_Result { if (!($storeKey = $this->getStoreKey('results'))) return null; if ($this->storedResult !== false) return $this->storedResult; $this->storedResult = ($stored = get_flash_var($storeKey)) ? new Microbe_Form_Result($stored) : null; return $this->storedResult; } } // ---{ Class: Microbe Form Html }--- class Microbe_Form_Html extends Microbe_Form_Element { private string $html = ''; public function setHtml(string $html): static { $this->html = $html; return $this; } public function render(bool $asString = false): string | Microbe_DOM_Element { $html = dom('div.form-html'); $html->append($this->html); return $asString ? (string) $html : $html; } } // ---{ Class: Microbe Form Group }--- class Microbe_Form_Group extends Microbe_Form_Element { public function addField(Microbe_Form_Field | string $field): Microbe_Form_Field { if (!($field instanceof Microbe_Form_Field)) $field = form_field($field, parent: $this); $this->addChild($field); return $field; } public function render(bool $asString = false): string | Microbe_DOM_Element { $group = dom('div.form-group'); $lblStr = $this->getLabel(); $icoStr = $this->getIcon(); if ($lblStr || $icoStr) { $lbl = dom('div.form-group-label')->appendTo($group); if ($icoStr) $lbl->append($this->formatIcon($icoStr)); if ($lblStr) dom('span')->append($lblStr)->appendTo($lbl); } if ($descStr = $this->getDescription()) { $desc = dom('div.form-group-description')->append($descStr)->appendTo($group); } $elems = dom('div.form-group-body')->appendTo($group); foreach ($this->getChildren() as $child) $child->render()->appendTo($elems); return $asString ? (string) $group : $group; } } // ---{ Class: Microbe Form Field }--- class Microbe_Form_Field extends Microbe_Form_Element { const T_TEXT = 'text'; const T_PASSWORD = 'password'; const T_EMAIL = 'email'; const T_TEL = 'tel'; const T_URL = 'url'; const T_SEARCH = 'search'; const T_NUMBER = 'number'; const T_RADIO = 'radio'; const T_CHECKBOX = 'checkbox'; const T_TOGGLE = 'checkbox/toggle'; const T_FILE = 'file'; const T_RANGE = 'range'; const T_COLOR = 'color'; const T_DATE = 'date'; const T_TIME = 'time'; const T_HIDDEN = 'hidden'; const T_SELECT = 'select'; const T_TEXTAREA = 'textarea'; const T_RICHTEXT = 'richtext'; const T_CHECKLIST = 'checklist'; const ATTRIBUTES = [ 'Name' => [ 'attr' => 'name', 'cast' => 'string', 'default' => null, 'scope' => null ], 'Value' => [ 'attr' => 'value', 'cast' => 'string', 'default' => null, 'scope' => [ 'input' ] ], 'Disabled' => [ 'attr' => 'disabled', 'cast' => 'bool', 'default' => null, 'scope' => null ], 'Readonly' => [ 'attr' => 'readonly', 'cast' => 'bool', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'password', 'email', 'tel', 'url', 'search', 'number', 'select', 'file', 'date', 'time' ] ], 'Placeholder' => [ 'attr' => 'placeholder', 'cast' => 'string', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'search', 'url', 'tel', 'email', 'password', 'number' ] ], 'Checked' => [ 'attr' => 'checked', 'cast' => 'bool', 'default' => null, 'scope' => [ 'checkbox', 'checkbox/toggle', 'radio' ] ], 'Required' => [ 'attr' => 'required', 'cast' => 'bool', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'password', 'email', 'tel', 'url', 'search', 'number', 'select', 'radio', 'checkbox', 'checkbox/toggle', 'checklist', 'file', 'date', 'time' ] ], 'Pattern' => [ 'attr' => 'pattern', 'cast' => 'string', 'default' => null, 'scope' => [ 'text', 'search', 'url', 'tel', 'email', 'password' ] ], 'Multiple' => [ 'attr' => 'multiple', 'cast' => 'bool', 'default' => null, 'scope' => [ 'email', 'file' ] ], 'Accept' => [ 'attr' => 'accept', 'cast' => 'string', 'default' => null, 'scope' => [ 'file' ] ], 'Capture' => [ 'attr' => 'capture', 'cast' => [ 'microphone', 'video', 'camera' ], 'default' => null, 'scope' => [ 'file' ] ], 'SpellChecked' => [ 'attr' => 'spellcheck', 'cast' => 'bool', 'true' => 'true', 'false' => 'false', 'default' => 'false', 'scope' => [ 'textarea', 'richtext', 'text', 'search', 'url', 'email', 'tel' ] ], 'AutoCorrected' => [ 'attr' => 'autocorrect', 'cast' => 'bool', 'true' => 'on', 'false' => 'off', 'default' => null, 'scope' => [ 'textarea' ] ], 'AutoCapitalized' => [ 'attr' => 'autocapitalize', 'cast' => [ 'none', 'off', 'sentences', 'on', 'words', 'characters' ], 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'tel', 'search', 'number', 'select', 'radio', 'checkbox', 'checkbox/toggle', 'checklist', 'file', 'range', 'color', 'date', 'time', 'hidden' ] ], 'AutoComplete' => [ 'attr' => 'autocomplete', 'cast' => 'bool', 'true' => 'on', 'false' => 'off', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'password', 'email', 'tel', 'url', 'search', 'number', 'select', 'file', 'range', 'color', 'date', 'time', 'hidden' ] ], 'List' => [ 'attr' => 'list', 'cast' => 'string', 'default' => null, 'scope' => [ 'text', 'email', 'tel', 'url', 'search', 'number', 'select', 'file', 'range', 'color', 'date', 'time' ] ], 'Max' => [ 'attr' => 'max', 'cast' => 'int', 'default' => null, 'scope' => [ 'date', 'month', 'week', 'time', 'number', 'range' ] ], 'Min' => [ 'attr' => 'min', 'cast' => 'int', 'default' => null, 'scope' => [ 'date', 'month', 'week', 'time', 'number', 'range' ] ], 'Step' => [ 'attr' => 'step', 'cast' => 'float', 'default' => null, 'scope' => [ 'date', 'month', 'week', 'time', 'number', 'range' ] ], 'MaxLength' => [ 'attr' => 'maxlength', 'cast' => 'int', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'search', 'url', 'tel', 'email', 'password' ] ], 'MinLength' => [ 'attr' => 'minlength', 'cast' => 'int', 'default' => null, 'scope' => [ 'textarea', 'richtext', 'text', 'search', 'url', 'tel', 'email', 'password' ] ], 'Size' => [ 'attr' => 'size', 'cast' => 'int', 'default' => null, 'scope' => [ 'text', 'search', 'url', 'tel', 'email', 'password' ] ], 'AutoFocused' => [ 'attr' => 'autofocus', 'cast' => 'bool', 'default' => null, 'scope' => [ 'textarea' ] ], 'Cols' => [ 'attr' => 'cols', 'cast' => 'int', 'default' => null, 'scope' => [ 'textarea', 'richtext' ] ], 'Rows' => [ 'attr' => 'rows', 'cast' => 'int', 'default' => null, 'scope' => [ 'textarea', 'richtext' ] ], 'Wrapped' => [ 'attr' => 'wrap', 'cast' => [ 'hard', 'soft', 'off' ], 'default' => null, 'scope' => [ 'textarea', 'richtext' ] ], ]; // ==={ Static }============================================================ public static function getTypes(): array { return get_class_constants(static::class, 'T_*'); } public static function isType(string $type): bool { return in_array($type, static::getTypes()); } // ==={ Entity }============================================================ private ?string $type = null; private ?object $classes = null; private ?object $customAttrs = null; private mixed $defaultValue = null; private bool $passwordStrengthIndicator = false; private ?float $passwordMinScore = null; private ?string $altLabel = null; private bool $isMandatory = false; private ?string $validationRegExp = null; private ?Closure $validationFunction = null; private array $choices = []; private array $attrs = []; public function __construct(string $type) { parent::__construct(); if (!static::isType($type)) throw new Microbe_Exception("Trying to instanciate a Microbe_Form_Field with an invalid type: {$type}."); $this->type = $type; $this->classes = (object) [ 'root' => [], 'label' => [], 'ctrl' => [] ]; $this->customAttrs = clone $this->classes; } public function __call(string $func, array $args): mixed { $value = $args[0] ?? null; if (!preg_match('/^(?get|set|is)(?[A-Z][A-Za-z0-9]*)$/', $func, $m)) throw new Microbe_Exception("Invalid method format while calling Microbe_Form_Field::{$func}."); $method = $m['method']; $attrName = $m['attr']; if (!($attr = (static::ATTRIBUTES[$attrName] ?? null))) throw new Microbe_Exception("Unknown Microbe_Form_Field attribute: {$attrName}."); $attr = (object) $attr; if ($attr->scope !== null && !in_array($this->type, $attr->scope)) throw new Microbe_Exception("Trying to get/set '{$attrName}' on a non applyable field type ('{$this->type}')."); if ($method === 'is' && $attr->cast !== 'bool') throw new Microbe_Exception("Using method is on a non-boolean attribute: {$func}."); else if ($method !== 'is' && $attr->cast === 'bool') throw new Microbe_Exception("You should use " . preg_replace('/^(get|set)/', 'is', $func) . " to get/set the value of the boolean attribute {$attrName}."); if ($method === 'get' || ($method === 'is' && $value === null)) return $this->attrs[$attrName] ?? null; if ($attr->cast === 'bool' && $value !== null && !is_bool($value)) throw new Microbe_Exception("Trying to set a non-boolean and non-null value to a boolean attribute: {$attrName}."); if ($value !== null) $this->attrs[$attrName] = $value; else if (array_key_exists($attrName, $this->attrs)) unset($this->attrs[$attrName]); return $this; } public function getType(): ?string { return $this->type; } public function isMandatory(?bool $isMandatory = null): bool | static { if ($isMandatory === null) return $this->isMandatory; $this->isMandatory = $isMandatory; return $this; } public function setValidationRegExp(?string $validationRegExp = null): static { $this->validationRegExp = $validationRegExp; return $this; } public function getValidationRegExp(): ?string { return $this->validationRegExp; } public function setValidationFunction(?Closure $validationFunction = null): static { $this->validationFunction = $validationFunction; return $this; } public function getValidationFunction(): ?Closure { return $this->validationFunction; } public function setDefaultValue(mixed $defaultValue = null, ?string $defaultValueGetter = null): static { if ($defaultValueGetter && !$defaultValue) return $this; if (is_array($defaultValue)) { if (array_key_exists($defaultValueGetter, $defaultValue)) throw new Microbe_Exception("Default value array doesn't contains given getter key."); $defaultValue = $defaultValue->$defaultValueGetter; } if (is_object($defaultValue)) { if (property_exists($defaultValue, $defaultValueGetter)) return $defaultValue->$defaultValueGetter; $defaultValue = $defaultValue->{$defaultValueGetter}(); } $this->defaultValue = $defaultValue; return $this; } public function getDefaultValue(): mixed { return $this->defaultValue; } public function getAttributes(): mixed { return $this->attrs; } public function addClass(string $className, string $target = 'root'): static { $this->classes->$target[] = $className; return $this; } public function clearClasses(string $target = 'root'): static { $this->classes->$target = []; return $this; } public function getClasses(string $target = 'root', bool $asString = false): array | string { $cl = $this->classes->$target ?? []; return $asString ? $cl : implode(' ', $cl); } public function setCustomAttribute(string $key, string | bool | int | float $value, string $target = 'root'): static { if ($value !== false) $this->customAttrs->$target[$key] = $value; else if (array_key_exists($key, $this->customAttrs->$target)) unset($this->customAttrs->$target[$key]); return $this; } public function clearCustomAttributes(string $target = 'root'): static { $this->customAttrs->$target = []; return $this; } public function getCustomAttributes(string $target = 'root'): array | string { return $this->customAttrs->$target; } public function addChoice(string | int | float $value, ?string $label = null, ?string $icon = null): static { $this->choices[] = (object) [ 'value' => $value, 'label' => $label ?? $value, 'icon' => $icon, ]; return $this; } public function setChoices(array | string $choices, bool $clear = true): static { if ($clear) $this->clearChoices(); if ($choices === 'countries') { $this->addChoice(value: '', label: t("Select Country")); foreach (get_countries() as $country) $this->addChoice(value: $country->code3, label: $country->name); } else if ($choices === 'languages') { $this->addChoice(value: '', label: t("Select Language")); foreach (get_languages() as $language) $this->addChoice(value: $language->code3, label: $language->name); } else if (is_array($choices)) { foreach ($choices as $choice) { if (!array_key_exists('value', $choice)) throw new Microbe_Exception("Trying to set a choice without a valid value."); $this->addChoice( value: $choice['value'], label: $choice['label'] ?? null, icon: $choice['icon'] ?? null, ); } } else { throw new Microbe_Exception("Invalid choices array or keyword."); } return $this; } public function clearChoices(): static { $this->choices = []; return $this; } public function getChoices(): array { return $this->choices; } public function setAltLabel(?string $altLabel = null): static { $this->altLabel = $altLabel; return $this; } public function getAltLabel(): ?string { return $this->altLabel; } public function assertMinScore(?float $score = null): static { $this->passwordMinScore = $score; return $this; } public function enablePasswordStrengthIndicator(): static { $this->passwordStrengthIndicator = true; return $this; } public function disablePasswordStrengthIndicator(): static { $this->passwordStrengthIndicator = false; return $this; } public function isPasswordStrengthIndicator(): bool { return $this->passwordStrengthIndicator; } public function render(bool $asString = false): string | Microbe_DOM_Element { $type = $this->getType(); $name = $this->getName(); $form = $this->getForm(); $lastResult = $form ? $form->getLastResultStored() : null; $lastError = $name && $lastResult ? $lastResult->getError($name) : null; $lastValue = $name && $lastResult ? $lastResult->get($name) : null; $lblStr = $this->getLabel(); $iconStr = $this->getIcon(); $field = dom('div.field')->addClass('field-' . $type); if (!$lblStr && !$iconStr) $field->addClasses('field-no-label'); if ($cl = $this->getClasses(target: 'root')) $field->addClasses($cl); if ($attrs = $this->getCustomAttributes(target: 'root')) $field->attrs($attrs); $lbl = dom('label.field-label')->appendTo($field); if ($iconStr) $lbl->append($this->getForm()->formatIcon($iconStr)); if ($lblStr) dom('div')->append($lblStr)->appendTo($lbl); if ($cl = $this->getClasses(target: 'label')) $lbl->addClasses($cl); if ($attrs = $this->getCustomAttributes(target: 'label')) $lbl->attrs($attrs); $ctrl = dom('div.field-ctrl')->appendTo($field); if ($cl = $this->getClasses(target: 'ctrl')) $ctrl->addClasses($cl); if ($attrs = $this->getCustomAttributes(target: 'ctrl')) $ctrl->attrs($attrs); if ($descStr = $this->getDescription()) { $desc = dom('label.field-description')->append($descStr)->appendTo($field); } if ($lastError && is_object($lastError)) { dom('div.field-error')->append($lastError->message ?? $lastError->code ?? 'unknown')->appendTo($field); } $defaultValue = $lastValue ?: $this->getDefaultValue(); $inputs = []; if ($type === static::T_SELECT) { $inputs[] = $input = dom('select')->appendTo($ctrl); foreach ($this->getChoices() as $choice) { $opt = dom('option') ->attr('value', $choice->value) ->append($choice->label) ->appendTo($input); if ($choice->value === $defaultValue) $opt->attr('selected', true); } } else if ($type === static::T_CHECKLIST || $type === static::T_RADIO) { $input = dom('ul')->appendTo($ctrl); foreach ($this->getChoices() as $choice) { $li = dom('li')->appendTo($input); $liLbl = dom('label')->appendTo($li); $inputs[] = $checkbox = dom('input') ->attrs([ 'type' => $type === static::T_RADIO ? 'radio' : 'checkbox', 'value' => $choice->value ]) ->appendTo($liLbl); if ($choice->value === $defaultValue) $checkbox->attr('checked', true); dom('span')->append($choice->label)->appendTo($liLbl); } } else if ($type === static::T_TEXTAREA || $type === static::T_RICHTEXT) { $inputs[] = $input = dom('textarea')->appendTo($ctrl); if ($defaultValue) $input->append(esc($defaultValue)); } else if ($type === static::T_CHECKBOX || $type === static::T_TOGGLE) { $inputLbl = dom('label')->appendTo($ctrl); $inputs[] = $input = dom('input') ->appendTo($inputLbl) ->attrs([ 'type' => 'checkbox', 'value' => '1' ]); if ($defaultValue) $input->attr('checked', true); if ($altLabel = $this->getAltLabel()) $span = dom('span')->append($altLabel)->appendTo($inputLbl); } else { $inputs[] = $input = dom('input') ->appendTo($ctrl) ->attr('type', preg_replace('/^([^\/]+)(\/.*)?$/', '$1', $type)); if ($defaultValue) $input->attr('value', $defaultValue); if ($type === static::T_PASSWORD && $this->isPasswordStrengthIndicator()) { // } } foreach ($inputs as $input) { $attrs = []; foreach ($this->getAttributes() as $attrName => $attrValue) { if ($attrValue === null) continue; if (!($attr = (static::ATTRIBUTES[$attrName] ?? null))) continue; $attr = (object) $attr; $attrs[$attrName] = true; if ($attr->cast === 'bool') { if ($attrValue) { $input->attr($attr->attr, ($true = $attr->true ?? null) === null ? true : $true); } else if ($false = ($attr->false ?? null)) { $input->attr($attr->attr, $false); } } else if (is_array($attr->cast)) { if (in_array($attrValue, $attr->cast)) { $input->attr($attr->attr, (string) $attrValue); } } else { $input->attr($attr->attr, (string) $attrValue); } } foreach (static::ATTRIBUTES as $attrName => $attr) { $attr = (object) $attr; if ($attr->default === null) continue; if ($attr->scope !== null && !in_array($this->type, $attr->scope)) continue; if ($attrs[$attrName] ?? false) continue; $input->attr($attr->attr, (string) $attr->default); } } return $asString ? (string) $field : $field; } protected function processValueValidation(mixed $value): array { $err = false; if (($regExp = $this->getValidationRegExp()) && is_string($value) && !preg_match($regExp, $value)) $err = 'invalid_regexp'; if ($func = $this->getValidationFunction()) $err = $func($value); return [ $value, $err ]; } public function processValue(string $method = 'both', mixed $value = null): array { $type = $this->getType(); if ($type === static::T_FILE) { return [ null, 'unhandled_yet' ]; } if ($value === null) $value = get($this->getName(), method: $method); $multiple = $type === static::T_CHECKLIST; if ($type === static::T_CHECKLIST) { if (!$value) return [ [], false ]; if (!is_array($value)) return [ [], 'invalid_array' ]; return $this->processValueValidation(array_values(array_filter(array_map(function(mixed $v) use ($type): mixed { if (!is_scalar($v)) return null; if (!$v) return null; return (string) $v; })))); } if ($value !== null && !is_scalar($value)) return [ null, 'invalid_scalar' ]; if ($type === static::T_CHECKBOX || $type === static::T_TOGGLE) { return $this->processValueValidation(value_seems_true($value)); } if ($value === '' || $value === null) { if ($this->isMandatory()) return [ null, 'mandatory' ]; return $this->processValueValidation(null); } $value = (string) $value; if ($type === static::T_NUMBER || $type === static::T_RANGE) { if (!is_float_val($value)) return [ null, 'invalid_number' ]; $value = (float) $value; if ((($min = $this->getMin()) !== null) && ($value < $min)) return [ $value, 'below_min' ]; if ((($max = $this->getMax()) !== null) && ($value > $max)) return [ $value, 'above_max' ]; return $this->processValueValidation($value); } if ($type === static::T_DATE) { if (!($dt = build_datetime_from_form(date: $value))) return [ null, 'invalid_date' ]; return $this->processValueValidation($dt->format('Y-m-d')); } if ($type === static::T_TIME) { if (!($dt = build_datetime_from_form(time: $value))) return [ null, 'invalid_time' ]; return $this->processValueValidation($dt->format('H:i:s')); } if ($type === static::T_EMAIL) { if (!is_valid_email_address($value)) return [ $value, 'invalid_email' ]; return $this->processValueValidation($value); } if ($type === static::T_PASSWORD) { if (($this->passwordMinScore !== null) && (compute_password_score($value) < $this->passwordMinScore)) return [ $value, 'weak_password' ]; return $this->processValueValidation($value); } if ($type === static::T_TEL) { if (!($tel = cast_phone_number($value))) return [ $value, 'invalid_phone' ]; return $this->processValueValidation($tel); } if ($type === static::T_URL) { if (!is_valid_url($value)) return [ $value, 'invalid_url' ]; return $this->processValueValidation($value); } if ($type === static::T_COLOR) return []; $len = strlen($value); if (in_array($type, static::ATTRIBUTES['MinLength']['scope'])) { if (($minLength = $this->getMinLength()) !== null && ($len < $minLength)) return [ $value, 'below_min_length' ]; } if (in_array($type, static::ATTRIBUTES['MaxLength']['scope'])) { if (($maxLength = $this->getMaxLength()) !== null && ($len > $maxLength)) return [ $value, 'above_max_length' ]; } return $this->processValueValidation($value); } } // ---{ Class: Microbe Form Result }--- class Microbe_Form_Result { // ==={ Entity }============================================================ private array $data = []; private array $errors = []; public function __construct(string | array $data = [], array $errors = []) { if (is_string($data)) { if (!($d = json_decode($data, true))) throw new Microbe_Exception("Trying to initialize a Microbe_Form_Result without a valid JSON string or two arrays data/errors"); if (!is_array($d)) throw new Microbe_Exception("Trying to initialize a Microbe_Form_Result without a valid string data/errors JSON object"); $data = $d['data'] ?? []; $errors = $d['errors'] ?? []; } $this->data = $data; $this->errors = $errors; } public function __toString(): string { return json_encode([ 'data' => $this->data, 'errors' => $this->errors ]); } public function getErrors(bool $asObject = true): object | array { return $asObject ? (object) array_map(function(array | false $error): ?object { return $error ? (object) $error : false; }, $this->errors) : $this->errors; } public function getError(string $field): object | false { if (!($error = $this->getErrors(false)[$field])) return false; return (object) $error; } public function getErrorCode(string $field): string | false { if (!($err = $this->getError($field))) return false; return $err->code ?? false; } public function getErrorMessage(string $field, bool $fallback = true): string | false { if (!($err = $this->getError($field))) return false; return $err->message ?? ($fallback ? $err->code : false); } public function hasErrors(): bool { return count(array_filter(array_values($this->getErrors(false)))) > 0; } public function get(string | array | null $fields = null, bool $asObject = true): mixed { if ($fields === null) return $asObject ? (object) $this->data : $this->data; if (!is_array($fields)) return $this->data[$fields] ?? null; $values = []; foreach ($fields as $fieldName) $values[$fieldName] = $this->data[$fieldName] ?? null; return $asObject ? (object) $values : $values; } } // ----------------------------------------------------------------------------- // -- {# Ending FORMS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning FRAMEWORK #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * Returns the Microbe file path. * @return string Probably the Microbe file path. */ function get_microbe_file_path(): string { return __FILE__; } /** * Returns the Microbe file name. * @return string Probably the Microbe file name. */ function get_microbe_file_name(): string { return basename(get_microbe_file_path()); } /** * * Returns the version and hashes of the framework. * @return object An object describing the meta hash, the hash and the * integer version. */ function microbe_version(): object { $raw = file_get_contents(__FILE__); return (object) [ 'meta_hash' => get_microbe_version_meta_hash($raw), 'hash' => get_microbe_version_hash($raw), 'version' => get_microbe_version_number($raw), 'date' => get_microbe_version_date($raw), ]; } /** * Parse the source code to find the meta hash. * @param string $raw Source code of the framework. * @return string|null Hash, or null if not found. */ function get_microbe_version_meta_hash(string $raw): ?string { $r = '/^[ \t]*\/\/[ \t]*\|[ \t]*\-\{\#[ \t]*(?[a-f0-9]{16})[ \t]*\#\}\-[ \t]*\|[ \t]*$/m'; if (!preg_match($r, $raw, $m)) return null; return $m['h']; } /** * Parse the source code to find the source code hash. * @param string $raw Source code of the framework. * @return string|null Hash, or null if not found. */ function get_microbe_version_hash(string $raw): ?string { $r = '/^[ \t]*\/\/[ \t]*\|[ \t]*\-\{\#[ \t]*(?[a-f0-9]{64})[ \t]*\#\}\-[ \t]*\|[ \t]*$/m'; if (!preg_match($r, $raw, $m)) return null; return $m['h']; } /** * Parse the source code to find the version number. * @param string $raw Source code of the framework. * @return int|null Version number, or null if not found. */ function get_microbe_version_number(string $raw): ?int { $r = '/^[ \t]*\/\/[ \t]*\|[ \t]*\-\{\#[ \t]*(?[0-9]+)[ \t]*\#\}\-[ \t]*\|[ \t]*$/m'; if (!preg_match($r, $raw, $m)) return null; return abs((int) ($m['v'] ?: 0)) ?: null; } /** * Parse the source code to find the version date. * @param string $raw Source code of the framework. * @return DateTime|null Version date, or null if not found. */ function get_microbe_version_date(string $raw): ?DateTime { $r = '/^[ \t]*\/\/[ \t]*\|[ \t]*\-\{\#[ \t]*(?[0-9-]+T[0-9:]+[0-9:+-]+)[ \t]*\#\}\-[ \t]*\|[ \t]*$/m'; if (!preg_match($r, $raw, $m)) return null; return new DateTime($m['v']); } /** * Generate an API URL for framework requests * (e.g. Updates and Plugins Warehouse). * @param string $do Action to perform on the API. * @param array $args Optional query-string arguments. * @return string URL targeting the API. */ function microbe_api_url(string $do, array $args = []): string { $prefix = cfg('~@framework.api_url') ?: 'https://microbe.barbichette.net/api'; if (is_domain_name('microbe.test')) $prefix = 'http://microbe.framework/api'; $url = null; if ($do === 'warehouse') $url = $prefix . '/warehouse'; if ($do === 'updates') $url = $prefix . '/updates'; if ($url === null) throw new Microbe_Exception("Unable to generate API URL of unknown API context {$do}"); if ($args = array_filter($args)) $url .= '?' . http_build_query($args); return $url; } /** * Retrieve the available updates from the framework's API, based on current * framework and plugins versions. * @param string|null &$reason Reason of the error will be set in this * variable. * @return array|null Updates available, or null if an error occured. */ function get_available_updates(?string &$reason = null): ?array { $versions = [ '*:' . microbe_version()->version ]; $result = curl_post(microbe_api_url('updates'), [ 'c' => implode('|', $versions), ]); if (!$result) { $reason = "Empty cURL response"; return null; } if (!($data = json_decode($result))) { $reason = "Invalid JSON"; return null; } if (!property_exists($data, 'success')) { $reason = "Invalid data: missing 'success' property"; return null; } if (!$data->success) { $reason = "Response sent an error ('success' is false)"; return null; } if (!property_exists($data, 'updates') || !is_array($data->updates)) { $reason = "Invalid updates array"; return null; } return $data->updates; } /** * Perform an update on the framework itself. * @param string $url Download URL got from . * @return bool Success (true) or not (false). */ function update_framework(string $url): bool { if (!($raw = curl_get($url))) return false; if (strpos($raw, ' [ 'api_url' => null, ], ]; }); // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'dev' => [ 'secret_key' => password(128), ], ]; }); listen('init', function(): void { register_cli_action( bundle: 'core', name: 'version', description: "Get Microbe's Framework installed version.", opts: [], func: function(object $opts): void { $version = microbe_version(); cli_write("Version: " . $version->version); cli_write("Hash: " . $version->hash); cli_write("Meta Hash: " . $version->meta_hash); cli_write("Date: " . ($version->date ? $version->date->format('c') : "(unknown)")); }, ); register_cli_action( bundle: 'core', name: 'update', description: "Update Microbe's Framework file.", opts: [ 'yes' => [ '.', 'y' ] ], func: function(object $opts): void { $reason = null; if (($updates = get_available_updates($reason)) === null) { cli_write("Unable to fetch available updates: {$reason}."); } else if ($nbUpdates = count($updates)) { $paddedNbUpdates = str_pad($nbUpdates, 3, '0', STR_PAD_LEFT); cli_write("{$nbUpdates} update(s) found."); foreach ($updates as $idx => $u) { $paddedIdx = str_pad($idx + 1, 3, '0', STR_PAD_LEFT); cli_write(" ({$paddedIdx}/{$paddedNbUpdates}) <{$u->title}> {$u->current} -> {$u->available} (Y/n) ", end: null); if ($opts->yes || strtolower(trim(readline(''))) !== 'n') { if ($opts->yes) cli_write("y"); if ($u->type === 'framework') { update_framework($u->url); } cli_write(" > Updated."); } } cli_write("End Of Updates."); } else { cli_write("Up-to-date."); } }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending FRAMEWORK #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning GEO #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Convert a coordinate given as a string or a set of degrees, minutes, * seconds and direction, to a decimal coordinate. * @param string|int $deg Coordinate string (e.g. 1°2'3.456"W) or degrees * as an integer. * @param int|null $min If $deg is not a string: the minutes. * @param float|null $sec If $deg is not a string: the seconds. * @param string|null $dir If $deg is not a string: the direction * (N, S, W/O, E). $deg can also be signed, * and $dir ignored. * @return float Decimal coordinate. */ function dms_coordinate_to_decimal(string | int $deg, ?int $min = null, ?float $sec = null, ?string $dir = null): float { if (is_string($deg) && ($min === null)) { if (preg_match('/^\s*(?-?\d+)\s*°\s*(?\d+)\s*\'\s*(?(\d*\.)?\d+)\s*\"\s*(?[NSEWO])?\s*$/', strtoupper(trim($deg)), $m)) { $deg = (int) $m['deg']; $min = (int) $m['min']; $sec = (float) $m['sec']; if (!($dir = str_replace('O', 'W', $m['dir'] ?: ''))) $dir = $deg < 0 ? 'W' : 'E'; $deg = abs($deg); } else return 0; } return (str_contains('NWO', strtoupper($dir)) ? -1 : 1) * ($deg + ((($min * 60) + ($sec)) / 3600)); } /** * * Convert a decimal coordinate to a string like 1°2'3.456"W. * @param string $type (lat)itude or (lon)gitude. * @param float $dec Decimal coordinate. * @param bool $asString Returns a string (default) or an object * containing direction/degrees/minutes/seconds. * @param int $round Round the seconds. * @return string|object Object or string representing the coordinate. */ function dec_coordinate_to_dms(string $type, float $dec, bool $asString = true, int $round = 6, bool $spaces = true): string | object { $space = $spaces ? ' ' : ''; if (($type = str_replace('longitude', 'lon', str_replace('latitude', 'lat', strtolower($type)))) !== 'lon') $type = 'lat'; $parts = explode('.', $dec); $deg = (int) $parts[0]; $tempma = ((float) ('0.' . ($parts[1] ?? '0'))) * 3600; $dms = (object) [ 'direction' => $deg < 0 ? ($type === 'lat' ? 'N' : 'W') : ($type === 'lat' ? 'S' : 'E'), 'degrees' => abs($deg), 'minutes' => $min = floor($tempma / 60), 'seconds' => $tempma - ($min * 60), ]; return !$asString ? $dms : ($dms->degrees . '°' . $space . $dms->minutes . "'" . $space . round($dms->seconds, $round) . '"' . $space . $dms->direction); } /** * * Execute with $type = 'lat'. * @param float $dec Decimal coordinate. * @param bool $asString Returns a string (default) or an object * containing direction/degrees/minutes/seconds. * @param int $round Round the seconds. * @return string|object Object or string representing the coordinate. */ function dec_lat_to_dms(float $dec, bool $asString = true, int $round = 6, bool $spaces = true): string | object { return dec_coordinate_to_dms(type: 'lat', dec: $dec, asString: $asString, round: $round, spaces: $spaces); } /** * * Execute with $type = 'lon'. * @param float $dec Decimal coordinate. * @param bool $asString Returns a string (default) or an object * containing direction/degrees/minutes/seconds. * @param int $round Round the seconds. * @return string|object Object or string representing the coordinate. */ function dec_lon_to_dms(float $dec, bool $asString = true, int $round = 6, bool $spaces = true): string | object { return dec_coordinate_to_dms(type: 'lon', dec: $dec, asString: $asString, round: $round, spaces: $spaces); } /** * * Create a box of coordinates, based on a center latitude and longitude, * optionaly enlarged with a radius. * Based on: 1 latitude-deg = 110574 (meters) * 1 longitude-deg = 111320 * cos(latitude) (meters) * @param float $lat Decimal latitude. * @param float $lon Decimal longitude. * @param int|null $radius Radius in meters. * @return object Coordinates box. */ function get_coordinates_box(float $lat, float $lon, int $radius = null): object { $box = (object) [ 'center' => (object) [ 'lat' => ($lat = (float) $lat), 'lon' => ($lon = (float) $lon) ], 'top' => $lat, 'right' => $lon, 'bottom' => $lat, 'left' => $lon, ]; if (!$radius) return $box; $latRadius = abs($radius / 110574); $lonRadius = abs($radius / (111320 * cos($lat))); $box->top -= $latRadius; $box->bottom += $latRadius; $box->left -= $lonRadius; $box->right += $lonRadius; return $box; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending GEO #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning IMAGES #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Constants }------------------------------------------------------------- define('MB_IMAGE_RESIZE_COVER', 'cover' ); define('MB_IMAGE_RESIZE_CONTAINS', 'contains'); define('MB_IMAGE_RESIZE_ADJUST', 'adjust' ); // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Check if the given path extension corresponds to a valid image file. * @param string $path Path to the file. * @param array $extensions Array of allowed extensions. * @return bool Is it a valid extension or not? */ function is_image_path(string $path, array $extensions = [ 'jpg', 'jpeg', 'png', 'gif' ]): bool { return (bool) preg_match('/^.*\.(' . str_replace(',', '|', preg_quote(implode(',', $extensions), '/')) . ')$/', $path); } /** * * Returns raw data of a PNG image containing a single transparent pixel. * @return string PNG Data */ function get_pixel_image(): string { return base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAALiMAAC4jAXilP3YAAAADUExURUdwTIL60tIAAAABdFJOUwBA5thmAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg=='); } /** * * Resize an image. * @param string $src Source image path. * @param string|null $dst Destination path. If null, nothing * is written, and the Imagick instance * is returned. * @param int|null $width Destination width. * If null, $width = $height. * At least width or height must * be provided. * @param int|null $height Destination height. * If null, $height = $width. * At least width or height must * be provided. * @param string $mode Cropping mode (MB_IMAGE_RESIZE_*). * @param int $outputQuality Output quality (0-100). * @param mixed $paddingColor Padding color, when mode is "contains". * @param bool $mkdir Make directories recursively if needed. * @param string $method Image generation method: "imagick". * @return Imagick|null The Imagick instance, or null if image * is written in directly to file. */ function resize_image( string $src, ?string $dst = null, ?int $width = null, ?int $height = null, string $mode = MB_IMAGE_RESIZE_COVER, int $outputQuality = 70, mixed $paddingColor = 'white', bool $mkdir = true, string $method = 'imagick', ): ?Imagick { if ($method !== 'imagick') throw new Microbe_Exception("Method {$method} not supported"); if ($height === null) $height = $width; if ($width === null) $width = $height; if (!$width) throw new Microbe_Exception("Missing width and height while trying to resize image"); $im = new Imagick($src); $oldWidth = $im->getImageWidth(); $oldHeight = $im->getImageHeight(); $isSrcPng = is_file_extension($src, 'png'); $isDstPng = !$dst || is_file_extension($dst, 'png'); if ($mode === 'cover') { $newWidth = (int) (($height / $oldHeight) * $oldWidth); $newHeight = $height; $x = (int) (($newWidth - $width) / 2); $y = 0; if ($newWidth < $width) { $newWidth = $width; $newHeight = (int) (($width / $oldWidth) * $oldHeight); $x = 0; $y = (int) (($newHeight - $height) / 2); } $im->resizeImage($newWidth, $newHeight, Imagick::FILTER_LANCZOS, 0.9, true); $im->cropImage($width, $height, $x, $y); } else if ($mode === 'contains') { $backgroundColor = $isDstPng && $im->getImageAlphaChannel() ? new ImagickPixel('transparent') : new ImagickPixel($paddingColor); $im->thumbnailImage($width, $height, true); $x = (int) (($width - $im->getImageWidth()) / 2); $y = (int) (($height - $im->getImageHeight()) / 2); $n = new Imagick(); $n->newImage($width, $height, $backgroundColor, $isDstPng ? 'png' : 'jpeg'); $n->compositeImage($im, Imagick::COMPOSITE_OVER, $x, $y); $im = $n; } else if ($mode === 'adjust') { $newWidth = (int) (($height / $oldHeight) * $oldWidth); $newHeight = $height; if ($newWidth > $width) { $newWidth = $width; $newHeight = (int) (($width / $oldWidth) * $oldHeight); } $im->resizeImage($newWidth, $newHeight, Imagick::FILTER_LANCZOS, 0.9, true); } else throw new Microbe_Exception("Resizing mode {$mode} not supported"); $im->setImageCompressionQuality($outputQuality); if (!$dst) return $im; if (!is_dir($dir = dirname($dst))) rmkdir($dir); $im->writeImage($dst); return null; } /** * * Read the image file with the proper content type. * It will guess automatically the content type. * @param string $path Image path */ function output_image_file(string $path): void { $contentType = null; switch (get_file_extension($path, lower: true)) { case 'jpg': case 'jpeg': $contentType = 'image/jpeg'; break; case 'png': $contentType = 'image/png'; break; case 'gif': $contentType = 'image/gif'; break; case 'webp': $contentType = 'image/webp'; break; case 'bmp': $contentType = 'image/bmp'; break; default: throw new Microbe_Exception("Unable to display image with unknown extension"); } header('Content-Type: ' . $contentType); readfile($path); exit; } /** * * Load the GdImage instance from image path. * It will guess automatically the file type. * @param string $path Image path * @return GdImage|null GdImage instance if success. Else, null. */ function image_create(string $path): ?GdImage { switch (get_file_extension($path, lower: true)) { case 'jpg': case 'jpeg': return imagecreatefromjpeg($path); case 'png': return imagecreatefrompng($path); case 'gif': return imagecreatefromgif($path); case 'webp': return imagecreatefromwebp($path); case 'bmp': return imagecreatefrombmp($path); } return null; } /** * * Save the GdImage to given path, guessing automatically the output file type. * @param GdImage $im GdImage instance. * @param string $path Destination path. * @param int $quality Image quality if appliable. */ function image_save(GdImage $im, string $path, int $quality = 80): void { switch (get_file_extension($path, lower: true)) { case 'jpg': case 'jpeg': imagejpeg($im, $path, $quality); break; case 'png': imagepng($im, $path); break; case 'gif': imagegif($im, $path); break; case 'webp': imagewebp($im, $path); break; case 'bmp': imagebmp($im, $path); break; } } /** * * Resize an image and returns the path of the created file. * @param string $path Path of source image. * @param int|null $width Destination width. * If null, $width = $height. * At least width or height must * be provided. * @param int|null $height Destination height. * If null, $height = $width. * At least width or height must * be provided. * @param string $mode Cropping mode (MB_IMAGE_RESIZE_*). * @param int $outputQuality Output quality (0-100). * @param bool $force Force cache refreshing. * @return string|null Path of created image. Null if not * successful. */ function get_resized_image_path( string $path, ?int $width = null, ?int $height = null, string $mode = MB_IMAGE_RESIZE_COVER, int $outputQuality = 70, bool $force = false, ): ?string { if (!cfg('~@images.resizing.enabled')) return null; if (!is_file($path)) return null; if (!is_image_path($path)) return null; $cacheDir = cfg('~@images.resizing.dir'); $cacheDir = $cacheDir ? get_path($cacheDir) : get_uploads_dir('images', 'resized'); $cacheKey = hashed_sha1(implode(':', [ $path, $width, $height, $mode, $outputQuality ])); $cacheName = $cacheKey . rtrim('.' . get_file_extension($path, lower: true), '.'); $cachePath = join_path( $cacheDir, substr($cacheName, 0, 2), substr($cacheName, 2, 2), $cacheName, ); if (!$force && is_file($cachePath) && filemtime($cachePath) > filemtime($path)) return $cachePath; resize_image( src: $path, dst: $cachePath, width: $width, height: $height, mode: $mode, outputQuality: $outputQuality, ); return $cachePath; } /** * * Resize an image width and returns * the URL of the created file. * @param string $path Path of source image. * @param int|null $width Destination width. * If null, $width = $height. * At least width or height must * be provided. * @param int|null $height Destination height. * If null, $height = $width. * At least width or height must * be provided. * @param string $mode Cropping mode (MB_IMAGE_RESIZE_*). * @param int $outputQuality Output quality (0-100). * @param bool $force Force cache refreshing. * @return string|null URL of created image. Null if not * successful. */ function get_resized_image_url( string $path, ?int $width = null, ?int $height = null, string $mode = MB_IMAGE_RESIZE_COVER, int $outputQuality = 70, bool $force = false, ): ?string { $path = get_resized_image_path( path: $path, width: $width, height: $height, mode: $mode, outputQuality: $outputQuality, force: $force, ); return $path ? path_to_url($path) : null; } /** * * Create a thumbnail of an image image and returns its path. * @param string $path Path of source image. * @param int $size Thumbnail width and height. * @return string|null Path of created image. Null if not successful. */ function get_thumbnail_path(string $path, int $size = 256): ?string { return get_resized_image_path(path: $path, width: $size); } /** * * Create a thumbnail of an image image and returns its URL. * @param string $path Path of source image. * @param int $size Thumbnail width and height. * @return string|null URL of created image. Null if not successful. */ function get_thumbnail_url(string $path, int $size = 256): ?string { return get_resized_image_url(path: $path, width: $size); } /** * * Generate a random image. * @param int $width Width of image. * @param null|int $height Height of image. Default is equals to width. * @param null|string $path Path to save file. If null, the image will be * rendered in the browser. * @param int $maxShapes Maximum number of shapes. More: the image * will be more complex. Less: the image will * be faster to render. * @param string $output Output mode. 'auto' will switch between * direct rendering or saving to $path if * provided. * Possible values are: * - auto * - display: display in browser * - write: write to $path * - gd: returns GdImage instance * - raw: returns image's raw code * - base64: returns image base64-encoded */ function generate_random_image( int $width = 500, ?int $height = null, ?string $path = null, int $maxShapes = 15, ?string $backgroundImage = null, string $output = 'auto', ): null | GdImage | string { if ($output === 'auto') $output = $path === null ? 'display' : 'write'; if ($height === null) $height = $width; $minAlpha = 0; $randomColorAlpha = function(?int $alpha = null) use ($minAlpha): array { if ($alpha === null) $alpha = mt_rand($minAlpha, 127); return [ mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), $alpha ]; }; $im = imagecreatetruecolor($width, $height); $bg = null; if ($backgroundImage) { list($bgWidth, $bgHeight) = getimagesize($backgroundImage); $bgIm = image_create($backgroundImage); imagecopyresampled($im, $bgIm, 0, 0, 0, 0, $width, $height, $bgWidth, $bgHeight); $minAlpha = 110; $bg = imagecolorallocatealpha($im, ...$randomColorAlpha(100)); } else { $bg = imagecolorallocatealpha($im, ...$randomColorAlpha(0)); imagefill($im, 0, 0, $bg); } $randomPolygon = function(int $maxPts = 20) use ($im, $width, $height, $randomColorAlpha): void { $color = imagecolorallocatealpha($im, ...$randomColorAlpha()); $pts = []; for ($n = 0, $nbPts = mt_rand(3, $maxPts); $n < $nbPts; $n++) { $pts[] = mt_rand(0, $width); $pts[] = mt_rand(0, $height); } $num = count($pts) / 2; imagefilledpolygon($im, $pts, $num, $color); }; $randomArc = function() use ($im, $width, $height, $randomColorAlpha): void { $arcStyles = [ IMG_ARC_PIE, IMG_ARC_CHORD, IMG_ARC_EDGED, IMG_ARC_NOFILL ]; imagefilledarc($im, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, 360), mt_rand(0, 360), imagecolorallocatealpha($im, ...$randomColorAlpha()), $arcStyles[mt_rand(0, count($arcStyles) - 1)]); }; $nbShapes = mt_rand(ceil($maxShapes / 2), $maxShapes); for ($i = 0; $i < $nbShapes; $i++) { if (mt_rand(0, 1) === 0) $randomArc(); else $randomPolygon(); } imagefilter($im, IMG_FILTER_SCATTER, 6, 10); if ($bg) { imagefilledpolygon($im, [ 0, 0, $width, 0, $width, $height * (mt_rand(3, 11) / 100), 0, $height * (mt_rand(3, 11) / 100) ], 4, $bg); imagefilledpolygon($im, [ 0, $height, $width, $height, $width, $height - ($height * (mt_rand(3, 11) / 100)), 0, $height - ($height * (mt_rand(3, 11) / 100)) ], 4, $bg); imagefilledpolygon($im, [ 0, 0, $width * (mt_rand(3, 11) / 100), 0, $width * (mt_rand(3, 11) / 100), $height, 0, $height ], 4, $bg); imagefilledpolygon($im, [ $width, 0, $width, $height, $width - ($width * (mt_rand(3, 11) / 100)), $height, $width - ($width * (mt_rand(3, 11) / 100)), 0 ], 4, $bg); } imagefilter($im, IMG_FILTER_BRIGHTNESS, -25); imagefilter($im, IMG_FILTER_CONTRAST, -25); if ($output === 'gd') return $im; if ($output === 'write') { imagewebp($im, $path); imagedestroy($im); return null; } if ($output === 'raw' || $output === 'base64') ob_start(); else if ($output === 'display') header('Content-type: image/webp'); imagewebp($im); imagedestroy($im); if ($output === 'display') return null; $raw = ob_get_clean(); return $output === 'raw' ? $raw : base64_encode($raw); } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'images' => [ 'resizing' => [ 'enabled' => true, 'dir' => null, ], ], ]; }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending IMAGES #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning INTL #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Retrieve the accepted languages sent by the browser, parse it and try to * match with the locales handled by the framework. * @return array An array containing the parsed locales. * It can be empty if the string is not given or parsable. */ function get_accepted_locales(): array { if (!array_key_exists($k = 'HTTP_ACCEPT_LANGUAGE', $_SERVER)) return []; $locales = []; $idx = 0; foreach (explode(',', $_SERVER[$k]) as $l) { if (!($l = trim($l))) continue; if (!preg_match('/^(?[a-z0-9]{2,3})([_-](?[a-z0-9]{2,3}))?(\s*;\s*q\s*=(?[0-9.]+))?$/i', $l, $m)) continue; $m = (object) array_merge([ 'l' => null, 'c' => null, 'q' => 1 ], $m); $m->q = (float) $m->q; $language = $m->l ? get_language($m->l) : null; $country = $m->c ? get_country($m->c) : null; $locale = null; if ($language && $country) $locale = get_locale($language->code3 . '-' . $country->code3); if ($locale === null) $locale = get_locale($language->code3 . '-' . $language->default_country); $locales[] = (object) [ 'browser' => (object) [ 'lang' => $m->l, 'country' => $m->c, 'priority' => $m->q, 'index' => $idx ], 'language' => $language, 'country' => $country, 'locale' => $locale, ]; $idx++; } usort($locales, function(object $a, object $b): int { if ($a->browser->priority > $b->browser->priority) return -1; if ($a->browser->priority < $b->browser->priority) return 1; return 0; }); return $locales; } /** * * Returns an array containing the valid locales existing in the configuration * file. The locale will be constructed from the countries and the * languages codes, then the valid ones will be returned. * @param bool $force Force the renewing of the locales in the memory cache. * @return array Configured locales. */ function get_app_locales(bool $force = false): array { if ($locales = cfg('~' . ($ck = '@core.intl.locales'))) return $locales; $locales = []; $countries = cfg('~@intl.countries') ?: []; foreach (cfg('~@intl.languages') ?: [] as $l) { foreach ($countries as $c) { if (!($locale = get_locale($l['code'] . '-' . $c['code']))) continue; $locales[] = (object) [ 'code' => $locale->code, 'locale' => $locale, 'country' => $country = get_country($locale->country), 'language' => $language = get_language($locale->lang), 'standard_code' => $language->code2 . '_' . $country->code2, 'full_name' => $language->name . ' (' . $country->name . ')', 'is_default' => $l['default'] && $c['default'], ]; } } cfg($ck, $locales); return $locales; } /** * * Returns a specific app locale. The returned locale will be one of the * locales defined in the configuration file. * @param string $locale Locale code. * @return null|object App locale if exists. */ function get_app_locale(string $locale): ?object { foreach (get_app_locales() as $l) if ($l->code === $locale) return $l; return null; } /** * * Get the app locales using and returns the default one. * @return null|object Default app locale. */ function get_default_app_locale(): ?object { foreach (get_app_locales() as $l) if ($l->is_default) return $l; return null; } /** * * Returns the current locale, based on: * - user configured locale, stored in cookie; * - first valid browser's accepted locale; * - default locale. * @return null|object Current locale. */ function get_current_app_locale(): ?object { if (($appLocaleName = cookie('MBL')) && ($appLocale = get_app_locale($appLocaleName))) return $appLocale; // Then get from return get_default_app_locale(); } /** * * Set current app locale in cookies. * @param string $locale Locale code. */ function set_current_app_locale(string $locale): void { if (!($l = get_app_locale($locale))) return; cookie( name: 'MBL', value: $l->code, lifetime: 24 * 3600 * 365 ); } /** * * Returns translation variables. * @return array Key-value array of variables. */ function get_translate_vars(): array { return cfg('~@intl.translate_vars') ?: []; } /** * * Set translation variables, which will be applied on each string passed * to . * @param array $vars Key-value array of variables. */ function set_translate_vars(array $vars): void { cfg('~@intl.translate_vars', array_merge(get_translate_vars(), $vars)); } /** * * Declare current locale in use with . * @param string|null $locale Locale name. */ function locale(?string $locale = null): void { cfg('@intl.translations_locale', $locale); } /** * * Returns the current locale name for translatable strings through . * @return string Current locale name */ function get_translations_locale(): string { return cfg('~@intl.translations_locale') ?: cfg('~@intl.hardcoded_strings.default_locale') ?: 'eng-USA'; } /** * * Translate a string, with an optional formatting of the string with the * passed variables. * @param string|array $format String to translate. * If an array is given, this array have to be * a numerical-keys array with 1, 2 or 3 * entries. If there is 1 entry, the format * will be considered as non-array. * If there is more entries, a parameter in * $vars matching 'n', nb', 'num', 'number' * or 'count' will be considered as a counter. * If there is no match, the first parameter * found will be considered. * Then, with a 2-entries array, * $format[0] = $format if counter is 1; * $format[1] = $format if counter is 0 or > 1. * With a 3-entries array: * $format[0] = $format if counter is 0; * $format[1] = $format if counter is 1; * $format[2] = $format if counter is > 1. * @param array|string $vars Variables to process in string. If this is * an associative array, the keys will be * replaced in the string using brackets like: * {foo} or {{foo}}. The double-bracket will * be replaced by an escaped string. * If string is provided, we assume $vars * corresponds to $fromLocale. * @param string|null $fromLocale Locale to be translated to. * @param string|null $toLocale MMMMMMM. * @return string String of the translation processed with * the vars. */ function t( string | array $format, array | string $vars = [], ?string $fromLocale = null, ?string $toLocale = null, ): string { if (is_string($vars)) { $fromLocale = $vars; $vars = []; } if ($fromLocale === null) $fromLocale = get_translations_locale(); if (is_array($format)) { if (($nb = count($format = array_values($format))) === 0) { $format = ''; } else if ($nb === 1) { $format = array_shift($format); } else { $count = null; foreach ([ 'n', 'nb', 'num', 'number', 'count' ] as $k) { if (!array_key_exists($k, $vars)) continue; $count = (int) ($vars[$k] ?: 0); break; } if ($count === null) { foreach ($vars as $k => $v) { $count = (int) ($v ?: 0); break; } } if ($count === null) $count = 0; if ($nb === 2) { if ($count === 1) $format = $format[0]; else $format = $format[1]; } else { if ($count === 0) $format = $format[0]; else if ($count === 1) $format = $format[1]; else $format = $format[2]; } } } $str = $format; if (cfg('~@intl.scrap_all_translations')) store_intl_string($str); if (!$toLocale && ($currentAppLocale = get_current_app_locale())) $toLocale = $currentAppLocale->code; if ($toLocale) { $translations = get_translations($toLocale); if (array_key_exists($str, $translations)) { if ($translations[$str] !== '') $str = $translations[$str]; } else if (cfg('~@intl.save_default_translation') || ($toLocale !== $fromLocale)) { set_translation(locale: $toLocale, format: $str, translation: '', clear: true); } } if ($vars && !is_assoc_array($vars)) { $str = vsprintf($str, $vars); $vars = []; } foreach (array_merge(get_translate_vars(), $vars) as $k => $v) { $str = str_replace('{{' . $k . '}}', esc($v), $str); $str = str_replace('{' . $k . '}', (string) $v, $str); } return $str; } /** * * Translate a string, exactly like , then echo the translation. * @param string|array $format String to translate. * @param array $vars Variables to process in the string. * * * @param string|array $format String to translate. * @param array|string $vars Variables to process in string. * If string is provided, we assume $vars * corresponds to $fromLocale. * @param string|null $fromLocale Locale to be translated to. * @param string|null $toLocale MMMMMMM. */ function _t( string | array $format, array | string $vars = [], ?string $fromLocale = null, ?string $toLocale = null, ): void { echo t($format, $vars, $fromLocale, $toLocale); } /** * * Translate a string, exactly like , escape it, then echo the translation. * @param string|array $format String to translate. * @param array $vars Variables to process in the string. * * * @param string|array $format String to translate. * @param array|string $vars Variables to process in string. * If string is provided, we assume $vars * corresponds to $fromLocale. * @param string|null $fromLocale Locale to be translated to. * @param string|null $toLocale MMMMMMM. */ function __t( string | array $format, array | string $vars = [], ?string $fromLocale = null, ?string $toLocale = null, ): void { echo esc(t($format, $vars, $fromLocale, $toLocale)); } /** * * Load the translation file and store translations in an array. * @param string $locale Locale code. * @param bool $force Force the refresh of the memory-saved translations. * @return array Array containing original text as key, and translated * text as value. */ function get_translations(string $locale, bool $force = false): array { if ($translations = cfg('~' . ($ck = ('@core.intl.translations.' . $locale)))) return $translations; $translations = []; foreach (get_bundles() as $bundle) { if (!is_file($f = join_path($bundle->dir, 'intl', $locale . '.xml'))) continue; $xml = simplexml_load_file($f); foreach ($xml->str ?? [] as $str) $translations[(string) $str->o] = (string) $str->t; } cfg($ck, $translations); return $translations; } /** * * Store a translation entry in the bundle's translation file for the * specified locale. * @param string $locale Locale code. * @param string $format Original text. * @param string $translation Translated text. * @param string $bundle Bundle name. Default is 'default'. * @param bool $clear Clear memory-saved translations for this locale. */ function set_translation(string $locale, string $format, string $translation, string $bundle = 'default', bool $clear = true): void { if (is_env('prod')) return; if (!($bundle = get_bundle($bundle))) return; $translations = get_translations(locale: $locale, force: true); $translations[$format] = $translation; $f = join_path($bundle->dir, 'intl', $locale . '.xml'); rmkdir(dirname($f)); $dom = new DOMDocument('1.0', 'utf-8'); $dom->preserveWhiteSpace = false; $strings = $dom->createElement('strings'); $dom->appendChild($strings); foreach ($translations as $k => $v) { $string = $dom->createElement('str'); $strings->appendChild($string); $original = $dom->createElement('o'); $original->appendChild($dom->createTextNode($k)); $string->appendChild($original); $translated = $dom->createElement('t'); $translated->appendChild($dom->createTextNode($v)); $string->appendChild($translated); } $xml = $dom->saveXML(); $xml = str_replace('', "\n ", $xml); $xml = str_replace('', "\n", $xml); file_put_contents($f, $xml); if ($clear) cfg('@core.intl.translations.' . $locale, null); } /** * Sotre an internationalizable string, in a simple XML file. * @param string $str Translatable string. */ function store_intl_string(string $str): void { if (!is_env('dev')) return; $path = get_data_dir('intl', 'scrap.xml'); $dom = new DOMDocument('1.0', 'utf-8'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $strings = null; if (is_file($path)) { $dom->load($path); $strings = $dom->getElementsByTagName('strings')[0]; } else { $strings = $dom->createElement('strings'); $dom->appendChild($strings); } foreach ($strings->getElementsByTagName('str') as $s) { if ($s->nodeValue === $str) return; } $string = $dom->createElement('str'); $string->appendChild($dom->createTextNode($str)); $strings->appendChild($string); rmkdir(dirname($path)); $dom->save($path); } /** * * Get the list of all handled countries. * @return array Array of countries descriptions. */ function get_countries(): array { $countries = [ 'ABW' => (object) [ 'code3' => 'ABW', 'code2' => 'AW', 'dialing_codes' => [ '297' ], 'postcode' => null, 'bounds' => [ 12.8102998, -70.2809842, 12.1702998, -69.6409842 ], 'name' => "Aruba" ], 'AFG' => (object) [ 'code3' => 'AFG', 'code2' => 'AF', 'dialing_codes' => [ '93' ], 'postcode' => null, 'bounds' => [ 38.4910682, 60.5176034, 29.3772, 74.889862 ], 'name' => "Afghanistan" ], 'AGO' => (object) [ 'code3' => 'AGO', 'code2' => 'AO', 'dialing_codes' => [ '244' ], 'postcode' => null, 'bounds' => [ -4.3880634, 11.4609793, -18.038945, 24.0878856 ], 'name' => "Angola" ], 'AIA' => (object) [ 'code3' => 'AIA', 'code2' => 'AI', 'dialing_codes' => [ '1-264' ], 'postcode' => null, 'bounds' => [ 18.7951194, -63.6391992, 18.0615454, -62.7125449 ], 'name' => "Anguilla" ], 'ALA' => (object) [ 'code3' => 'ALA', 'code2' => 'AX', 'dialing_codes' => [ '358' ], 'postcode' => "22\d{3}", 'bounds' => [ 60.87665, 19.0832098, 59.4541578, 21.3456556 ], 'name' => "Åland Islands" ], 'ALB' => (object) [ 'code3' => 'ALB', 'code2' => 'AL', 'dialing_codes' => [ '355' ], 'postcode' => null, 'bounds' => [ 42.6610848, 19.1246095, 39.6448625, 21.0574335 ], 'name' => "Albania" ], 'AND' => (object) [ 'code3' => 'AND', 'code2' => 'AD', 'dialing_codes' => [ '376' ], 'postcode' => "AD\d{3}", 'bounds' => [ 42.6559357, 1.4135781, 42.4288238, 1.7863837 ], 'name' => "Andorra" ], 'ARE' => (object) [ 'code3' => 'ARE', 'code2' => 'AE', 'dialing_codes' => [ '971' ], 'postcode' => null, 'bounds' => [ 26.2822, 51.498, 22.6444, 56.3834 ], 'name' => "United Arab Emirates" ], 'ARG' => (object) [ 'code3' => 'ARG', 'code2' => 'AR', 'dialing_codes' => [ '54' ], 'postcode' => "([A-HJ-NP-Z])?\d{4}([A-Z]{3})?", 'bounds' => [ -21.781168, -73.5600329, -55.1850761, -53.6374515 ], 'name' => "Argentina" ], 'ARM' => (object) [ 'code3' => 'ARM', 'code2' => 'AM', 'dialing_codes' => [ '374' ], 'postcode' => "(37)?\d{4}", 'bounds' => [ 41.300712, 43.4471395, 38.8404775, 46.6333087 ], 'name' => "Armenia" ], 'ASM' => (object) [ 'code3' => 'ASM', 'code2' => 'AS', 'dialing_codes' => [ '1-684' ], 'postcode' => "96799", 'bounds' => [ -10.8449746, -171.2951296, -14.7608358, -167.9322899 ], 'name' => "American Samoa" ], 'ATA' => (object) [ 'code3' => 'ATA', 'code2' => 'AQ', 'dialing_codes' => [ '672' ], 'postcode' => null, 'bounds' => [ -60, -180, -85.0511287, 180 ], 'name' => "Antarctica" ], 'ATF' => (object) [ 'code3' => 'ATF', 'code2' => 'TF', 'dialing_codes' => [ '262' ], 'postcode' => null, 'bounds' => [ -11.3139928, 39.4138676, -50.2187169, 77.8494974 ], 'name' => "French Southern Territories" ], 'ATG' => (object) [ 'code3' => 'ATG', 'code2' => 'AG', 'dialing_codes' => [ '1-268' ], 'postcode' => null, 'bounds' => [ 17.929, -62.5536517, 16.7573901, -61.447857 ], 'name' => "Antigua and Barbuda" ], 'AUS' => (object) [ 'code3' => 'AUS', 'code2' => 'AU', 'dialing_codes' => [ '61' ], 'postcode' => "\d{4}", 'bounds' => [ -9.0882278, 72.2460938, -55.3228175, 168.2249543 ], 'name' => "Australia" ], 'AUT' => (object) [ 'code3' => 'AUT', 'code2' => 'AT', 'dialing_codes' => [ '43' ], 'postcode' => "\d{4}", 'bounds' => [ 49.0205305, 9.5307487, 46.3722761, 17.160776 ], 'name' => "Austria" ], 'AZE' => (object) [ 'code3' => 'AZE', 'code2' => 'AZ', 'dialing_codes' => [ '994' ], 'postcode' => "\d{4}", 'bounds' => [ 41.9502947, 44.7633701, 38.3929551, 51.0090302 ], 'name' => "Azerbaijan" ], 'BDI' => (object) [ 'code3' => 'BDI', 'code2' => 'BI', 'dialing_codes' => [ '257' ], 'postcode' => null, 'bounds' => [ -2.3096796, 29.0007401, -4.4693155, 30.8498462 ], 'name' => "Burundi" ], 'BEL' => (object) [ 'code3' => 'BEL', 'code2' => 'BE', 'dialing_codes' => [ '32' ], 'postcode' => "\d{4}", 'bounds' => [ 51.5516667, 2.3889137, 49.4969821, 6.408097 ], 'name' => "Belgium" ], 'BEN' => (object) [ 'code3' => 'BEN', 'code2' => 'BJ', 'dialing_codes' => [ '229' ], 'postcode' => null, 'bounds' => [ 12.4092447, 0.776667, 6.0398696, 3.843343 ], 'name' => "Benin" ], 'BES' => (object) [ 'code3' => 'BES', 'code2' => 'BQ', 'dialing_codes' => [ '599' ], 'postcode' => null, 'bounds' => [ 12.36651, -68.48601, 12.01237, -68.09565 ], 'name' => "Bonaire, Sint Eustatius and Saba" ], 'BFA' => (object) [ 'code3' => 'BFA', 'code2' => 'BF', 'dialing_codes' => [ '226' ], 'postcode' => null, 'bounds' => [ 15.084, -5.5132416, 9.4104718, 2.4089717 ], 'name' => "Burkina Faso" ], 'BGD' => (object) [ 'code3' => 'BGD', 'code2' => 'BD', 'dialing_codes' => [ '880' ], 'postcode' => "\d{4}", 'bounds' => [ 26.6382534, 88.0075306, 20.3756582, 92.6804979 ], 'name' => "Bangladesh" ], 'BGR' => (object) [ 'code3' => 'BGR', 'code2' => 'BG', 'dialing_codes' => [ '359' ], 'postcode' => "\d{4}", 'bounds' => [ 44.2167064, 22.3571459, 41.2353929, 28.8875409 ], 'name' => "Bulgaria" ], 'BHR' => (object) [ 'code3' => 'BHR', 'code2' => 'BH', 'dialing_codes' => [ '973' ], 'postcode' => "((1[0-2]|[2-9])\d{2})?", 'bounds' => [ 26.6872444, 50.2697989, 25.535, 50.9233693 ], 'name' => "Bahrain" ], 'BHS' => (object) [ 'code3' => 'BHS', 'code2' => 'BS', 'dialing_codes' => [ '1-242' ], 'postcode' => null, 'bounds' => [ 27.4734551, -80.7001941, 20.7059846, -72.4477521 ], 'name' => "Bahamas" ], 'BIH' => (object) [ 'code3' => 'BIH', 'code2' => 'BA', 'dialing_codes' => [ '387' ], 'postcode' => "\d{5}", 'bounds' => [ 45.2764135, 15.7287433, 42.5553114, 19.6237311 ], 'name' => "Bosnia and Herzegovina" ], 'BLM' => (object) [ 'code3' => 'BLM', 'code2' => 'BL', 'dialing_codes' => [ '590' ], 'postcode' => null, 'bounds' => [ 18.1375569, -63.06639, 17.670931, -62.5844019 ], 'name' => "Saint Barthélemy" ], 'BLR' => (object) [ 'code3' => 'BLR', 'code2' => 'BY', 'dialing_codes' => [ '375' ], 'postcode' => "\d{6}", 'bounds' => [ 56.17218, 23.1783344, 51.2575982, 32.7627809 ], 'name' => "Belarus" ], 'BLZ' => (object) [ 'code3' => 'BLZ', 'code2' => 'BZ', 'dialing_codes' => [ '501' ], 'postcode' => null, 'bounds' => [ 18.496001, -89.2262083, 15.8857286, -87.3098494 ], 'name' => "Belize" ], 'BMU' => (object) [ 'code3' => 'BMU', 'code2' => 'BM', 'dialing_codes' => [ '1-441' ], 'postcode' => "[A-Z]{2}[ ]?[A-Z0-9]{2}", 'bounds' => [ 32.5913693, -65.1232222, 32.0469651, -64.4109842 ], 'name' => "Bermuda" ], 'BOL' => (object) [ 'code3' => 'BOL', 'code2' => 'BO', 'dialing_codes' => [ '591' ], 'postcode' => null, 'bounds' => [ -9.6689438, -69.6450073, -22.8982742, -57.453 ], 'name' => "Bolivia" ], 'BRA' => (object) [ 'code3' => 'BRA', 'code2' => 'BR', 'dialing_codes' => [ '55' ], 'postcode' => "\d{5}[\-]?\d{3}", 'bounds' => [ 5.2842873, -73.9830625, -33.8689056, -28.6341164 ], 'name' => "Brazil" ], 'BRB' => (object) [ 'code3' => 'BRB', 'code2' => 'BB', 'dialing_codes' => [ '1-246' ], 'postcode' => "(BB\d{5})?", 'bounds' => [ 13.535, -59.8562115, 12.845, -59.2147175 ], 'name' => "Barbados" ], 'BRN' => (object) [ 'code3' => 'BRN', 'code2' => 'BN', 'dialing_codes' => [ '673' ], 'postcode' => "[A-Z]{2}[ ]?\d{4}", 'bounds' => [ 5.1011857, 114.0758734, 4.002508, 115.3635623 ], 'name' => "Brunei Darussalam" ], 'BTN' => (object) [ 'code3' => 'BTN', 'code2' => 'BT', 'dialing_codes' => [ '975' ], 'postcode' => null, 'bounds' => [ 28.246987, 88.7464724, 26.702016, 92.1252321 ], 'name' => "Bhutan" ], 'BVT' => (object) [ 'code3' => 'BVT', 'code2' => 'BV', 'dialing_codes' => [ '47' ], 'postcode' => null, 'bounds' => [ -54.187, 2.9345531, -54.654, 3.7791099 ], 'name' => "Bouvet Island" ], 'BWA' => (object) [ 'code3' => 'BWA', 'code2' => 'BW', 'dialing_codes' => [ '267' ], 'postcode' => null, 'bounds' => [ -17.778137, 19.9986474, -26.9059669, 29.375304 ], 'name' => "Botswana" ], 'CAF' => (object) [ 'code3' => 'CAF', 'code2' => 'CF', 'dialing_codes' => [ '236' ], 'postcode' => null, 'bounds' => [ 11.001389, 14.4155426, 2.2156553, 27.4540764 ], 'name' => "Central African Republic" ], 'CAN' => (object) [ 'code3' => 'CAN', 'code2' => 'CA', 'dialing_codes' => [ '1' ], 'postcode' => "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d", 'bounds' => [ 73.621511, -143.953554, 43.253727, -50.163565 ], 'name' => "Canada" ], 'CCK' => (object) [ 'code3' => 'CCK', 'code2' => 'CC', 'dialing_codes' => [ '61' ], 'postcode' => "6799", 'bounds' => [ -11.6213132, 96.612524, -12.4055983, 97.1357343 ], 'name' => "Cocos (Keeling) Islands" ], 'CHE' => (object) [ 'code3' => 'CHE', 'code2' => 'CH', 'dialing_codes' => [ '41' ], 'postcode' => "\d{4}", 'bounds' => [ 47.8084648, 5.9559113, 45.817995, 10.4922941 ], 'name' => "Switzerland" ], 'CHL' => (object) [ 'code3' => 'CHL', 'code2' => 'CL', 'dialing_codes' => [ '56' ], 'postcode' => "\d{7}", 'bounds' => [ -17.4983998, -109.6795789, -56.725, -66.0753474 ], 'name' => "Chile" ], 'CHN' => (object) [ 'code3' => 'CHN', 'code2' => 'CN', 'dialing_codes' => [ '86' ], 'postcode' => "\d{6}", 'bounds' => [ 53.5608154, 73.4997347, 8.8383436, 134.7754563 ], 'name' => "China" ], 'CIV' => (object) [ 'code3' => 'CIV', 'code2' => 'CI', 'dialing_codes' => [ '225' ], 'postcode' => null, 'bounds' => [ 10.740197, -8.601725, 4.1621205, -2.493031 ], 'name' => "Ivory Coast" ], 'CMR' => (object) [ 'code3' => 'CMR', 'code2' => 'CM', 'dialing_codes' => [ '237' ], 'postcode' => null, 'bounds' => [ 13.083333, 8.3822176, 1.6546659, 16.1921476 ], 'name' => "Cameroon" ], 'COD' => (object) [ 'code3' => 'COD', 'code2' => 'CD', 'dialing_codes' => [ '243' ], 'postcode' => null, 'bounds' => [ 5.3920026, 12.039074, -13.459035, 31.3056758 ], 'name' => "Congo (Democratic Republic; Kinshasa)" ], 'COG' => (object) [ 'code3' => 'COG', 'code2' => 'CG', 'dialing_codes' => [ '242' ], 'postcode' => null, 'bounds' => [ 3.713056, 11.0048205, -5.149089, 18.643611 ], 'name' => "Congo (Republic; Brazzaville)" ], 'COK' => (object) [ 'code3' => 'COK', 'code2' => 'CK', 'dialing_codes' => [ '682' ], 'postcode' => "\d{4}", 'bounds' => [ -8.7168792, -166.0856468, -22.15807, -157.1089329 ], 'name' => "Cook Islands" ], 'COL' => (object) [ 'code3' => 'COL', 'code2' => 'CO', 'dialing_codes' => [ '57' ], 'postcode' => null, 'bounds' => [ 16.0571269, -82.1243666, -4.2316872, -66.8511907 ], 'name' => "Colombia" ], 'COM' => (object) [ 'code3' => 'COM', 'code2' => 'KM', 'dialing_codes' => [ '269' ], 'postcode' => null, 'bounds' => [ -11.165, 43.025305, -12.621, 44.7451922 ], 'name' => "Comoros" ], 'CPV' => (object) [ 'code3' => 'CPV', 'code2' => 'CV', 'dialing_codes' => [ '238' ], 'postcode' => "\d{4}", 'bounds' => [ 17.2053108, -25.3609478, 14.8031546, -22.6673416 ], 'name' => "Cabo Verde" ], 'CRI' => (object) [ 'code3' => 'CRI', 'code2' => 'CR', 'dialing_codes' => [ '506' ], 'postcode' => "\d{4,5}|\d{3}-\d{4}", 'bounds' => [ 11.2195684, -87.2722647, 5.3329698, -82.5060208 ], 'name' => "Costa Rica" ], 'CUB' => (object) [ 'code3' => 'CUB', 'code2' => 'CU', 'dialing_codes' => [ '53' ], 'postcode' => null, 'bounds' => [ 23.4816972, -85.1679702, 19.6275294, -73.9190004 ], 'name' => "Cuba" ], 'CUW' => (object) [ 'code3' => 'CUW', 'code2' => 'CW', 'dialing_codes' => [ '599' ], 'postcode' => null, 'bounds' => [ 12.46581, -69.3334, 11.84297, -68.48333 ], 'name' => "Curaçao" ], 'CXR' => (object) [ 'code3' => 'CXR', 'code2' => 'CX', 'dialing_codes' => [ '61' ], 'postcode' => "6798", 'bounds' => [ -10.4123553, 105.5336422, -10.5698515, 105.7130159 ], 'name' => "Christmas Island" ], 'CYM' => (object) [ 'code3' => 'CYM', 'code2' => 'KY', 'dialing_codes' => [ '1-345' ], 'postcode' => null, 'bounds' => [ 19.9573759, -81.6313748, 19.0620619, -79.5110954 ], 'name' => "Cayman Islands" ], 'CYP' => (object) [ 'code3' => 'CYP', 'code2' => 'CY', 'dialing_codes' => [ '357' ], 'postcode' => "\d{4}", 'bounds' => [ 35.913252, 32.0227581, 34.4383706, 34.8553182 ], 'name' => "Cyprus" ], 'CZE' => (object) [ 'code3' => 'CZE', 'code2' => 'CZ', 'dialing_codes' => [ '420' ], 'postcode' => "\d{3}[ ]?\d{2}", 'bounds' => [ 51.0557036, 12.0905901, 48.5518083, 18.859216 ], 'name' => "Czechia" ], 'DEU' => (object) [ 'code3' => 'DEU', 'code2' => 'DE', 'dialing_codes' => [ '49' ], 'postcode' => "\d{5}", 'bounds' => [ 55.099161, 5.8663153, 47.2701114, 15.0419319 ], 'name' => "Germany" ], 'DJI' => (object) [ 'code3' => 'DJI', 'code2' => 'DJ', 'dialing_codes' => [ '253' ], 'postcode' => null, 'bounds' => [ 12.7923081, 41.7713139, 10.9149547, 43.6579046 ], 'name' => "Djibouti" ], 'DMA' => (object) [ 'code3' => 'DMA', 'code2' => 'DM', 'dialing_codes' => [ '1-767' ], 'postcode' => null, 'bounds' => [ 15.7872222, -61.6869184, 15.0074207, -61.0329895 ], 'name' => "Dominica" ], 'DNK' => (object) [ 'code3' => 'DNK', 'code2' => 'DK', 'dialing_codes' => [ '45' ], 'postcode' => "\d{4}", 'bounds' => [ 57.9524297, 7.7153255, 54.4516667, 15.5530641 ], 'name' => "Denmark" ], 'DOM' => (object) [ 'code3' => 'DOM', 'code2' => 'DO', 'dialing_codes' => [ '1-809', '1-829', '1-849' ], 'postcode' => "\d{5}", 'bounds' => [ 21.303433, -72.0574706, 17.2701708, -68.1101463 ], 'name' => "Dominican Republic" ], 'DZA' => (object) [ 'code3' => 'DZA', 'code2' => 'DZ', 'dialing_codes' => [ '213' ], 'postcode' => "\d{5}", 'bounds' => [ 37.2962055, -8.668908, 18.968147, 11.997337 ], 'name' => "Algeria" ], 'ECU' => (object) [ 'code3' => 'ECU', 'code2' => 'EC', 'dialing_codes' => [ '593' ], 'postcode' => "([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?", 'bounds' => [ 1.8835964, -92.2072392, -5.0159314, -75.192504 ], 'name' => "Ecuador" ], 'EGY' => (object) [ 'code3' => 'EGY', 'code2' => 'EG', 'dialing_codes' => [ '20' ], 'postcode' => "\d{5}", 'bounds' => [ 31.8330854, 24.6499112, 22, 37.1153517 ], 'name' => "Egypt" ], 'ERI' => (object) [ 'code3' => 'ERI', 'code2' => 'ER', 'dialing_codes' => [ '291' ], 'postcode' => null, 'bounds' => [ 18.0709917, 36.4333653, 12.3548219, 43.3001714 ], 'name' => "Eritrea" ], 'ESH' => (object) [ 'code3' => 'ESH', 'code2' => 'EH', 'dialing_codes' => [ '212' ], 'postcode' => null, 'bounds' => [ 27.6666834, -17.3494721, 20.556883, -8.666389 ], 'name' => "Western Sahara" ], 'ESP' => (object) [ 'code3' => 'ESP', 'code2' => 'ES', 'dialing_codes' => [ '34' ], 'postcode' => "\d{5}", 'bounds' => [ 43.9933088, -18.3936845, 27.4335426, 4.5918885 ], 'name' => "Spain" ], 'EST' => (object) [ 'code3' => 'EST', 'code2' => 'EE', 'dialing_codes' => [ '372' ], 'postcode' => "\d{5}", 'bounds' => [ 59.9383754, 21.3826069, 57.5092997, 28.2100175 ], 'name' => "Estonia" ], 'ETH' => (object) [ 'code3' => 'ETH', 'code2' => 'ET', 'dialing_codes' => [ '251' ], 'postcode' => "\d{4}", 'bounds' => [ 14.8940537, 32.9975838, 3.397448, 47.9823797 ], 'name' => "Ethiopia" ], 'FIN' => (object) [ 'code3' => 'FIN', 'code2' => 'FI', 'dialing_codes' => [ '358' ], 'postcode' => "\d{5}", 'bounds' => [ 70.0922939, 19.0832098, 59.4541578, 31.5867071 ], 'name' => "Finland" ], 'FJI' => (object) [ 'code3' => 'FJI', 'code2' => 'FJ', 'dialing_codes' => [ '679' ], 'postcode' => null, 'bounds' => [ -12.2613866, 172, -21.9434274, -178.5 ], 'name' => "Fiji" ], 'FLK' => (object) [ 'code3' => 'FLK', 'code2' => 'FK', 'dialing_codes' => [ '500' ], 'postcode' => "FIQQ 1ZZ", 'bounds' => [ -50.7973007, -61.7726772, -53.1186766, -57.3662367 ], 'name' => "Falkland Islands; Malvinas" ], 'FRA' => (object) [ 'code3' => 'FRA', 'code2' => 'FR', 'dialing_codes' => [ '33' ], 'postcode' => "\d{2}[ ]?\d{3}", 'bounds' => [ 51.268318, -5.4534286, 41.2632185, 9.8678344 ], 'name' => "France" ], 'FRO' => (object) [ 'code3' => 'FRO', 'code2' => 'FO', 'dialing_codes' => [ '298' ], 'postcode' => "\d{3}", 'bounds' => [ 62.3942991, -7.6882939, 61.3915553, -6.2565525 ], 'name' => "Faroe Islands" ], 'FSM' => (object) [ 'code3' => 'FSM', 'code2' => 'FM', 'dialing_codes' => [ '691' ], 'postcode' => "(9694[1-4])([ \-]\d{4})?", 'bounds' => [ 10.291, 137.2234512, 0.827, 163.2364054 ], 'name' => "Micronesia" ], 'GAB' => (object) [ 'code3' => 'GAB', 'code2' => 'GA', 'dialing_codes' => [ '241' ], 'postcode' => null, 'bounds' => [ 2.3182171, 8.5002246, -4.1012261, 14.539444 ], 'name' => "Gabon" ], 'GBR' => (object) [ 'code3' => 'GBR', 'code2' => 'GB', 'dialing_codes' => [ '44' ], 'postcode' => "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}", 'bounds' => [ 61.061, -14.015517, 49.674, 2.0919117 ], 'name' => "United Kingdom of Great Britain and Northern Ireland" ], 'GEO' => (object) [ 'code3' => 'GEO', 'code2' => 'GE', 'dialing_codes' => [ '995' ], 'postcode' => "\d{4}", 'bounds' => [ 43.5864294, 39.8844803, 41.0552922, 46.7365373 ], 'name' => "Georgia" ], 'GGY' => (object) [ 'code3' => 'GGY', 'code2' => 'GG', 'dialing_codes' => [ '44' ], 'postcode' => "GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}", 'bounds' => [ 49.5090776, -2.6751703, 49.4155331, -2.501814 ], 'name' => "Guernsey" ], 'GHA' => (object) [ 'code3' => 'GHA', 'code2' => 'GH', 'dialing_codes' => [ '233' ], 'postcode' => null, 'bounds' => [ 11.1748562, -3.260786, 4.5392525, 1.2732942 ], 'name' => "Ghana" ], 'GIB' => (object) [ 'code3' => 'GIB', 'code2' => 'GI', 'dialing_codes' => [ '350' ], 'postcode' => null, 'bounds' => [ 36.180807, -5.3941295, 36.100807, -5.3141295 ], 'name' => "Gibraltar" ], 'GIN' => (object) [ 'code3' => 'GIN', 'code2' => 'GN', 'dialing_codes' => [ '224' ], 'postcode' => "\d{3}", 'bounds' => [ 12.67563, -15.5680508, 7.1906045, -7.6381993 ], 'name' => "Guinea" ], 'GLP' => (object) [ 'code3' => 'GLP', 'code2' => 'GP', 'dialing_codes' => [ '590' ], 'postcode' => "9[78][01]\d{2}", 'bounds' => [ 16.5144664, -61.809764, 15.8320085, -61.0003663 ], 'name' => "Guadeloupe" ], 'GMB' => (object) [ 'code3' => 'GMB', 'code2' => 'GM', 'dialing_codes' => [ '220' ], 'postcode' => null, 'bounds' => [ 13.8253137, -17.0288254, 13.061, -13.797778 ], 'name' => "Gambia" ], 'GNB' => (object) [ 'code3' => 'GNB', 'code2' => 'GW', 'dialing_codes' => [ '245' ], 'postcode' => "\d{4}", 'bounds' => [ 12.6862384, -16.894523, 10.6514215, -13.6348777 ], 'name' => "Guinea-Bissau" ], 'GNQ' => (object) [ 'code3' => 'GNQ', 'code2' => 'GQ', 'dialing_codes' => [ '240' ], 'postcode' => null, 'bounds' => [ 3.989, 5.4172943, -1.6732196, 11.3598628 ], 'name' => "Equatorial Guinea" ], 'GRC' => (object) [ 'code3' => 'GRC', 'code2' => 'GR', 'dialing_codes' => [ '30' ], 'postcode' => "\d{3}[ ]?\d{2}", 'bounds' => [ 41.7488862, 19.2477876, 34.7006096, 29.7296986 ], 'name' => "Greece" ], 'GRD' => (object) [ 'code3' => 'GRD', 'code2' => 'GD', 'dialing_codes' => [ '1-473' ], 'postcode' => null, 'bounds' => [ 12.5966532, -62.0065868, 11.786, -61.1732143 ], 'name' => "Grenada" ], 'GRL' => (object) [ 'code3' => 'GRL', 'code2' => 'GL', 'dialing_codes' => [ '299' ], 'postcode' => "39\d{2}", 'bounds' => [ 83.875172, -74.1250416, 59.515387, -10.0288759 ], 'name' => "Greenland" ], 'GTM' => (object) [ 'code3' => 'GTM', 'code2' => 'GT', 'dialing_codes' => [ '502' ], 'postcode' => "\d{5}", 'bounds' => [ 17.8165947, -92.3105242, 13.6345804, -88.1755849 ], 'name' => "Guatemala" ], 'GUF' => (object) [ 'code3' => 'GUF', 'code2' => 'GF', 'dialing_codes' => [ '594' ], 'postcode' => "9[78]3\d{2}", 'bounds' => [ 5.7507111, -54.60278, 2.112222, -51.6346139 ], 'name' => "French Guiana" ], 'GUM' => (object) [ 'code3' => 'GUM', 'code2' => 'GU', 'dialing_codes' => [ '1-671' ], 'postcode' => "969[123]\d([ \-]\d{4})?", 'bounds' => [ 13.706179, 144.563426, 13.182335, 145.009167 ], 'name' => "Guam" ], 'GUY' => (object) [ 'code3' => 'GUY', 'code2' => 'GY', 'dialing_codes' => [ '592' ], 'postcode' => null, 'bounds' => [ 8.6038842, -61.414905, 1.1710017, -56.4689543 ], 'name' => "Guyana" ], 'HKG' => (object) [ 'code3' => 'HKG', 'code2' => 'HK', 'dialing_codes' => [ '852' ], 'postcode' => null, 'bounds' => [ 22.4393278, 114.0028131, 22.1193278, 114.3228131 ], 'name' => "Hong Kong" ], 'HMD' => (object) [ 'code3' => 'HMD', 'code2' => 'HM', 'dialing_codes' => [ '672' ], 'postcode' => "\d{4}", 'bounds' => [ -52.7030677, 72.2460938, -53.394741, 74.1988754 ], 'name' => "Heard Island and McDonald Islands" ], 'HND' => (object) [ 'code3' => 'HND', 'code2' => 'HN', 'dialing_codes' => [ '504' ], 'postcode' => "(?:\d{5})?", 'bounds' => [ 17.619526, -89.3568207, 12.9808485, -82.1729621 ], 'name' => "Honduras" ], 'HRV' => (object) [ 'code3' => 'HRV', 'code2' => 'HR', 'dialing_codes' => [ '385' ], 'postcode' => "\d{5}", 'bounds' => [ 46.555029, 13.2104814, 42.1765993, 19.4470842 ], 'name' => "Croatia" ], 'HTI' => (object) [ 'code3' => 'HTI', 'code2' => 'HT', 'dialing_codes' => [ '509' ], 'postcode' => "\d{4}", 'bounds' => [ 20.2181368, -75.2384618, 17.9099291, -71.6217461 ], 'name' => "Haiti" ], 'HUN' => (object) [ 'code3' => 'HUN', 'code2' => 'HU', 'dialing_codes' => [ '36' ], 'postcode' => "\d{4}", 'bounds' => [ 48.585257, 16.1138867, 45.737128, 22.8977094 ], 'name' => "Hungary" ], 'IDN' => (object) [ 'code3' => 'IDN', 'code2' => 'ID', 'dialing_codes' => [ '62' ], 'postcode' => "\d{5}", 'bounds' => [ 6.2744496, 94.7717124, -11.2085669, 141.0194444 ], 'name' => "Indonesia" ], 'IMN' => (object) [ 'code3' => 'IMN', 'code2' => 'IM', 'dialing_codes' => [ '44' ], 'postcode' => "IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}", 'bounds' => [ 54.4178705, -4.7946845, 54.0539576, -4.3076853 ], 'name' => "Isle of Man" ], 'IND' => (object) [ 'code3' => 'IND', 'code2' => 'IN', 'dialing_codes' => [ '91' ], 'postcode' => "\d{6}", 'bounds' => [ 35.6745457, 68.1113787, 6.5546079, 97.395561 ], 'name' => "India" ], 'IOT' => (object) [ 'code3' => 'IOT', 'code2' => 'IO', 'dialing_codes' => [ '246' ], 'postcode' => "BBND 1ZZ", 'bounds' => [ -5.037066, 71.036504, -7.6454079, 72.7020157 ], 'name' => "British Indian Ocean Territory" ], 'IRL' => (object) [ 'code3' => 'IRL', 'code2' => 'IE', 'dialing_codes' => [ '353' ], 'postcode' => null, 'bounds' => [ 55.636, -11.0133788, 51.222, -5.6582363 ], 'name' => "Ireland" ], 'IRN' => (object) [ 'code3' => 'IRN', 'code2' => 'IR', 'dialing_codes' => [ '98' ], 'postcode' => null, 'bounds' => [ 39.7816502, 44.0318908, 24.8465103, 63.3332704 ], 'name' => "Iran" ], 'IRQ' => (object) [ 'code3' => 'IRQ', 'code2' => 'IQ', 'dialing_codes' => [ '964' ], 'postcode' => "\d{5}", 'bounds' => [ 37.380932, 38.7936719, 29.0585661, 48.8412702 ], 'name' => "Iraq" ], 'ISL' => (object) [ 'code3' => 'ISL', 'code2' => 'IS', 'dialing_codes' => [ '354' ], 'postcode' => "\d{3}", 'bounds' => [ 67.353, -25.0135069, 63.0859177, -12.8046162 ], 'name' => "Iceland" ], 'ISR' => (object) [ 'code3' => 'ISR', 'code2' => 'IL', 'dialing_codes' => [ '972' ], 'postcode' => "\d{5}", 'bounds' => [ 33.3356317, 34.2674994, 29.4533796, 35.8950234 ], 'name' => "Israel" ], 'ITA' => (object) [ 'code3' => 'ITA', 'code2' => 'IT', 'dialing_codes' => [ '39' ], 'postcode' => "\d{5}", 'bounds' => [ 47.0921462, 6.6272658, 35.2889616, 18.7844746 ], 'name' => "Italy" ], 'JAM' => (object) [ 'code3' => 'JAM', 'code2' => 'JM', 'dialing_codes' => [ '1-876' ], 'postcode' => null, 'bounds' => [ 18.7256394, -78.5782366, 16.5899443, -75.7541143 ], 'name' => "Jamaica" ], 'JEY' => (object) [ 'code3' => 'JEY', 'code2' => 'JE', 'dialing_codes' => [ '44' ], 'postcode' => "JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}", 'bounds' => [ 49.2621288, -2.254512, 49.1625179, -2.0104193 ], 'name' => "Jersey" ], 'JOR' => (object) [ 'code3' => 'JOR', 'code2' => 'JO', 'dialing_codes' => [ '962' ], 'postcode' => "\d{5}", 'bounds' => [ 33.3750617, 34.8844372, 29.183401, 39.3012981 ], 'name' => "Jordan" ], 'JPN' => (object) [ 'code3' => 'JPN', 'code2' => 'JP', 'dialing_codes' => [ '81' ], 'postcode' => "\d{3}-\d{4}", 'bounds' => [ 45.7112046, 122.7141754, 20.2145811, 154.205541 ], 'name' => "Japan" ], 'KAZ' => (object) [ 'code3' => 'KAZ', 'code2' => 'KZ', 'dialing_codes' => [ '7' ], 'postcode' => "\d{6}", 'bounds' => [ 55.4421701, 46.4932179, 40.5686476, 87.3156316 ], 'name' => "Kazakhstan" ], 'KEN' => (object) [ 'code3' => 'KEN', 'code2' => 'KE', 'dialing_codes' => [ '254' ], 'postcode' => "\d{5}", 'bounds' => [ 4.62, 33.9098987, -4.8995204, 41.899578 ], 'name' => "Kenya" ], 'KGZ' => (object) [ 'code3' => 'KGZ', 'code2' => 'KG', 'dialing_codes' => [ '996' ], 'postcode' => "\d{6}", 'bounds' => [ 43.2667971, 69.2649523, 39.1728437, 80.2295793 ], 'name' => "Kyrgyzstan" ], 'KHM' => (object) [ 'code3' => 'KHM', 'code2' => 'KH', 'dialing_codes' => [ '855' ], 'postcode' => "\d{5}", 'bounds' => [ 14.6904224, 102.3338282, 9.4752639, 107.6276788 ], 'name' => "Cambodia" ], 'KIR' => (object) [ 'code3' => 'KIR', 'code2' => 'KI', 'dialing_codes' => [ '686' ], 'postcode' => null, 'bounds' => [ 7.9483283, -179.1645388, -7.0516717, -164.1645388 ], 'name' => "Kiribati" ], 'KNA' => (object) [ 'code3' => 'KNA', 'code2' => 'KN', 'dialing_codes' => [ '1-869' ], 'postcode' => null, 'bounds' => [ 17.6158146, -63.051129, 16.895, -62.3303519 ], 'name' => "Saint Kitts and Nevis" ], 'KOR' => (object) [ 'code3' => 'KOR', 'code2' => 'KR', 'dialing_codes' => [ '82' ], 'postcode' => "\d{3}[\-]\d{3}", 'bounds' => [ 38.623477, 124.354847, 32.9104556, 132.1467806 ], 'name' => "Korea (South)" ], 'KWT' => (object) [ 'code3' => 'KWT', 'code2' => 'KW', 'dialing_codes' => [ '965' ], 'postcode' => "\d{5}", 'bounds' => [ 30.1038082, 46.5526837, 28.5243622, 49.0046809 ], 'name' => "Kuwait" ], 'LAO' => (object) [ 'code3' => 'LAO', 'code2' => 'LA', 'dialing_codes' => [ '856' ], 'postcode' => "\d{5}", 'bounds' => [ 22.5086717, 100.0843247, 13.9096752, 107.6349989 ], 'name' => "Laos" ], 'LBN' => (object) [ 'code3' => 'LBN', 'code2' => 'LB', 'dialing_codes' => [ '961' ], 'postcode' => "(\d{4}([ ]?\d{4})?)?", 'bounds' => [ 34.6923543, 34.8825667, 33.0479858, 36.625 ], 'name' => "Lebanon" ], 'LBR' => (object) [ 'code3' => 'LBR', 'code2' => 'LR', 'dialing_codes' => [ '231' ], 'postcode' => "\d{4}", 'bounds' => [ 8.5519861, -11.6080764, 4.1555907, -7.367323 ], 'name' => "Liberia" ], 'LBY' => (object) [ 'code3' => 'LBY', 'code2' => 'LY', 'dialing_codes' => [ '218' ], 'postcode' => null, 'bounds' => [ 33.3545898, 9.391081, 19.5008138, 25.3770629 ], 'name' => "Libya" ], 'LCA' => (object) [ 'code3' => 'LCA', 'code2' => 'LC', 'dialing_codes' => [ '1-758' ], 'postcode' => null, 'bounds' => [ 14.2725, -61.2853867, 13.508, -60.6669363 ], 'name' => "Saint Lucia" ], 'LIE' => (object) [ 'code3' => 'LIE', 'code2' => 'LI', 'dialing_codes' => [ '423' ], 'postcode' => "(948[5-9])|(949[0-7])", 'bounds' => [ 47.270581, 9.4716736, 47.0484291, 9.6357143 ], 'name' => "Liechtenstein" ], 'LKA' => (object) [ 'code3' => 'LKA', 'code2' => 'LK', 'dialing_codes' => [ '94' ], 'postcode' => "\d{5}", 'bounds' => [ 10.035, 79.3959205, 5.719, 82.0810141 ], 'name' => "Sri Lanka" ], 'LSO' => (object) [ 'code3' => 'LSO', 'code2' => 'LS', 'dialing_codes' => [ '266' ], 'postcode' => "\d{3}", 'bounds' => [ -28.570615, 27.0114632, -30.6772773, 29.4557099 ], 'name' => "Lesotho" ], 'LTU' => (object) [ 'code3' => 'LTU', 'code2' => 'LT', 'dialing_codes' => [ '370' ], 'postcode' => "\d{5}", 'bounds' => [ 56.4504213, 20.653783, 53.8967893, 26.8355198 ], 'name' => "Lithuania" ], 'LUX' => (object) [ 'code3' => 'LUX', 'code2' => 'LU', 'dialing_codes' => [ '352' ], 'postcode' => "\d{4}", 'bounds' => [ 50.430377, 4.9684415, 49.4969821, 6.0344254 ], 'name' => "Luxembourg" ], 'LVA' => (object) [ 'code3' => 'LVA', 'code2' => 'LV', 'dialing_codes' => [ '371' ], 'postcode' => "\d{4}", 'bounds' => [ 58.0855688, 20.6715407, 55.6746505, 28.2414904 ], 'name' => "Latvia" ], 'MAC' => (object) [ 'code3' => 'MAC', 'code2' => 'MO', 'dialing_codes' => [ '853' ], 'postcode' => null, 'bounds' => [ 22.2170361, 113.5281666, 22.0766667, 113.6301389 ], 'name' => "Macao" ], 'MAF' => (object) [ 'code3' => 'MAF', 'code2' => 'MF', 'dialing_codes' => [ '590' ], 'postcode' => null, 'bounds' => [ 18.1902778, -63.3605643, 17.8963535, -62.7644063 ], 'name' => "Saint Martin (France)" ], 'MAR' => (object) [ 'code3' => 'MAR', 'code2' => 'MA', 'dialing_codes' => [ '212' ], 'postcode' => "\d{5}", 'bounds' => [ 36.0505269, -17.2551456, 21.3365321, -0.998429 ], 'name' => "Morocco" ], 'MCO' => (object) [ 'code3' => 'MCO', 'code2' => 'MC', 'dialing_codes' => [ '377' ], 'postcode' => "980\d{2}", 'bounds' => [ 43.7519311, 7.4090279, 43.7247599, 7.4398704 ], 'name' => "Monaco" ], 'MDA' => (object) [ 'code3' => 'MDA', 'code2' => 'MD', 'dialing_codes' => [ '373' ], 'postcode' => "\d{4}", 'bounds' => [ 48.4918695, 26.6162189, 45.4674139, 30.1636756 ], 'name' => "Moldova" ], 'MDG' => (object) [ 'code3' => 'MDG', 'code2' => 'MG', 'dialing_codes' => [ '261' ], 'postcode' => "\d{3}", 'bounds' => [ -11.9519693, 43.2202072, -25.6071002, 50.4862553 ], 'name' => "Madagascar" ], 'MDV' => (object) [ 'code3' => 'MDV', 'code2' => 'MV', 'dialing_codes' => [ '960' ], 'postcode' => "\d{5}", 'bounds' => [ 7.3106246, 72.3554187, -0.9074935, 73.9700962 ], 'name' => "Maldives" ], 'MEX' => (object) [ 'code3' => 'MEX', 'code2' => 'MX', 'dialing_codes' => [ '52' ], 'postcode' => "\d{5}", 'bounds' => [ 32.7186553, -118.59919, 14.3886243, -86.493266 ], 'name' => "Mexico" ], 'MHL' => (object) [ 'code3' => 'MHL', 'code2' => 'MH', 'dialing_codes' => [ '692' ], 'postcode' => "969[67]\d([ \-]\d{4})?", 'bounds' => [ 14.4518742, 163.4985095, -0.5481258, 178.4985095 ], 'name' => "Marshall Islands" ], 'MKD' => (object) [ 'code3' => 'MKD', 'code2' => 'MK', 'dialing_codes' => [ '389' ], 'postcode' => "\d{4}", 'bounds' => [ 42.3735359, 20.4529023, 40.8536596, 23.034051 ], 'name' => "Republic of North Macedonia" ], 'MLI' => (object) [ 'code3' => 'MLI', 'code2' => 'ML', 'dialing_codes' => [ '223' ], 'postcode' => null, 'bounds' => [ 25.001084, -12.2402835, 10.147811, 4.2673828 ], 'name' => "Mali" ], 'MLT' => (object) [ 'code3' => 'MLT', 'code2' => 'MT', 'dialing_codes' => [ '356' ], 'postcode' => "[A-Z]{3}[ ]?\d{2,4}", 'bounds' => [ 36.2852706, 13.9324226, 35.6029696, 14.8267966 ], 'name' => "Malta" ], 'MMR' => (object) [ 'code3' => 'MMR', 'code2' => 'MM', 'dialing_codes' => [ '95' ], 'postcode' => null, 'bounds' => [ 28.547835, 92.1719423, 9.4399432, 101.1700796 ], 'name' => "Myanmar" ], 'MNE' => (object) [ 'code3' => 'MNE', 'code2' => 'ME', 'dialing_codes' => [ '382' ], 'postcode' => "8\d{4}", 'bounds' => [ 43.5585061, 18.4195781, 41.7495999, 20.3561641 ], 'name' => "Montenegro" ], 'MNG' => (object) [ 'code3' => 'MNG', 'code2' => 'MN', 'dialing_codes' => [ '976' ], 'postcode' => "\d{6}", 'bounds' => [ 52.1496, 87.73762, 41.5800276, 119.931949 ], 'name' => "Mongolia" ], 'MNP' => (object) [ 'code3' => 'MNP', 'code2' => 'MP', 'dialing_codes' => [ '1-670' ], 'postcode' => "9695[012]([ \-]\d{4})?", 'bounds' => [ 20.616556, 144.813338, 14.036565, 146.154418 ], 'name' => "Northern Mariana Islands" ], 'MOZ' => (object) [ 'code3' => 'MOZ', 'code2' => 'MZ', 'dialing_codes' => [ '258' ], 'postcode' => null, 'bounds' => [ -10.3252149, 30.2138197, -26.9209427, 41.0545908 ], 'name' => "Mozambique" ], 'MRT' => (object) [ 'code3' => 'MRT', 'code2' => 'MR', 'dialing_codes' => [ '222' ], 'postcode' => null, 'bounds' => [ 27.314942, -17.068081, 14.7209909, -4.8333344 ], 'name' => "Mauritania" ], 'MSR' => (object) [ 'code3' => 'MSR', 'code2' => 'MS', 'dialing_codes' => [ '1-664' ], 'postcode' => null, 'bounds' => [ 17.0152978, -62.450667, 16.475, -61.9353818 ], 'name' => "Montserrat" ], 'MTQ' => (object) [ 'code3' => 'MTQ', 'code2' => 'MQ', 'dialing_codes' => [ '596' ], 'postcode' => "9[78]2\d{2}", 'bounds' => [ 14.8787029, -61.2290815, 14.3948596, -60.8095833 ], 'name' => "Martinique" ], 'MUS' => (object) [ 'code3' => 'MUS', 'code2' => 'MU', 'dialing_codes' => [ '230' ], 'postcode' => "(\d{3}[A-Z]{2}\d{3})?", 'bounds' => [ -10.138, 56.3825151, -20.725, 63.7151319 ], 'name' => "Mauritius" ], 'MWI' => (object) [ 'code3' => 'MWI', 'code2' => 'MW', 'dialing_codes' => [ '265' ], 'postcode' => null, 'bounds' => [ -9.3683261, 32.6703616, -17.1296031, 35.9185731 ], 'name' => "Malawi" ], 'MYS' => (object) [ 'code3' => 'MYS', 'code2' => 'MY', 'dialing_codes' => [ '60' ], 'postcode' => "\d{5}", 'bounds' => [ 9.8923759, 105.3471939, -5.1076241, 120.3471939 ], 'name' => "Malaysia" ], 'MYT' => (object) [ 'code3' => 'MYT', 'code2' => 'YT', 'dialing_codes' => [ '262' ], 'postcode' => "976\d{2}", 'bounds' => [ -12.6365902, 45.0183298, -13.0210119, 45.2999917 ], 'name' => "Mayotte" ], 'NAM' => (object) [ 'code3' => 'NAM', 'code2' => 'NA', 'dialing_codes' => [ '264' ], 'postcode' => null, 'bounds' => [ -16.9634855, 11.5280384, -28.96945, 25.2617671 ], 'name' => "Namibia" ], 'NCL' => (object) [ 'code3' => 'NCL', 'code2' => 'NC', 'dialing_codes' => [ '687' ], 'postcode' => "988\d{2}", 'bounds' => [ -17.6868616, 162.6034343, -23.2217509, 167.8109827 ], 'name' => "New Caledonia" ], 'NER' => (object) [ 'code3' => 'NER', 'code2' => 'NE', 'dialing_codes' => [ '227' ], 'postcode' => "\d{4}", 'bounds' => [ 23.517178, 0.1689653, 11.693756, 15.996667 ], 'name' => "Niger" ], 'NFK' => (object) [ 'code3' => 'NFK', 'code2' => 'NF', 'dialing_codes' => [ '672' ], 'postcode' => "2899", 'bounds' => [ -28.796, 167.6873878, -29.333, 168.2249543 ], 'name' => "Norfolk Island" ], 'NGA' => (object) [ 'code3' => 'NGA', 'code2' => 'NG', 'dialing_codes' => [ '234' ], 'postcode' => "(\d{6})?", 'bounds' => [ 13.885645, 2.676932, 4.0690959, 14.678014 ], 'name' => "Nigeria" ], 'NIC' => (object) [ 'code3' => 'NIC', 'code2' => 'NI', 'dialing_codes' => [ '505' ], 'postcode' => "((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?", 'bounds' => [ 15.0331183, -87.901532, 10.7076565, -82.6227023 ], 'name' => "Nicaragua" ], 'NIU' => (object) [ 'code3' => 'NIU', 'code2' => 'NU', 'dialing_codes' => [ '683' ], 'postcode' => null, 'bounds' => [ -18.7534559, -170.1595029, -19.3548665, -169.5647229 ], 'name' => "Niue" ], 'NLD' => (object) [ 'code3' => 'NLD', 'code2' => 'NL', 'dialing_codes' => [ '31' ], 'postcode' => "\d{4}[ ]?[A-Z]{2}", 'bounds' => [ 53.7253321, 1.9193492, 50.7295671, 7.2274985 ], 'name' => "Netherlands" ], 'NOR' => (object) [ 'code3' => 'NOR', 'code2' => 'NO', 'dialing_codes' => [ '47' ], 'postcode' => "\d{4}", 'bounds' => [ 71.3848787, 4.0875274, 57.7590052, 31.7614911 ], 'name' => "Norway" ], 'NPL' => (object) [ 'code3' => 'NPL', 'code2' => 'NP', 'dialing_codes' => [ '977' ], 'postcode' => "\d{5}", 'bounds' => [ 30.446945, 80.0586226, 26.3477581, 88.2015257 ], 'name' => "Nepal" ], 'NRU' => (object) [ 'code3' => 'NRU', 'code2' => 'NR', 'dialing_codes' => [ '674' ], 'postcode' => null, 'bounds' => [ -0.5025906, 166.9091794, -0.5541334, 166.9589235 ], 'name' => "Nauru" ], 'NZL' => (object) [ 'code3' => 'NZL', 'code2' => 'NZ', 'dialing_codes' => [ '64' ], 'postcode' => "\d{4}", 'bounds' => [ -29.0303303, -179.059153, -52.8213687, 179.3643594 ], 'name' => "New Zealand" ], 'OMN' => (object) [ 'code3' => 'OMN', 'code2' => 'OM', 'dialing_codes' => [ '968' ], 'postcode' => "(PC )?\d{3}", 'bounds' => [ 26.7026737, 52, 16.4649608, 60.054577 ], 'name' => "Oman" ], 'PAK' => (object) [ 'code3' => 'PAK', 'code2' => 'PK', 'dialing_codes' => [ '92' ], 'postcode' => "\d{5}", 'bounds' => [ 37.084107, 60.872855, 23.5393916, 77.1203914 ], 'name' => "Pakistan" ], 'PAN' => (object) [ 'code3' => 'PAN', 'code2' => 'PA', 'dialing_codes' => [ '507' ], 'postcode' => null, 'bounds' => [ 9.8701757, -83.0517245, 7.0338679, -77.1393779 ], 'name' => "Panama" ], 'PCN' => (object) [ 'code3' => 'PCN', 'code2' => 'PN', 'dialing_codes' => [ '870' ], 'postcode' => "PCRN 1ZZ", 'bounds' => [ -23.8655769, -130.8049862, -25.1306736, -124.717534 ], 'name' => "Pitcairn" ], 'PER' => (object) [ 'code3' => 'PER', 'code2' => 'PE', 'dialing_codes' => [ '51' ], 'postcode' => null, 'bounds' => [ -0.0392818, -84.6356535, -20.1984472, -68.6519906 ], 'name' => "Peru" ], 'PHL' => (object) [ 'code3' => 'PHL', 'code2' => 'PH', 'dialing_codes' => [ '63' ], 'postcode' => "\d{4}", 'bounds' => [ 21.3217806, 114.0952145, 4.2158064, 126.8072562 ], 'name' => "Philippines" ], 'PLW' => (object) [ 'code3' => 'PLW', 'code2' => 'PW', 'dialing_codes' => [ '680' ], 'postcode' => "96940", 'bounds' => [ 8.222, 131.0685462, 2.748, 134.7714735 ], 'name' => "Palau" ], 'PNG' => (object) [ 'code3' => 'PNG', 'code2' => 'PG', 'dialing_codes' => [ '675' ], 'postcode' => "\d{3}", 'bounds' => [ 1.8183931, 136.7489081, -13.1816069, 151.7489081 ], 'name' => "Papua New Guinea" ], 'POL' => (object) [ 'code3' => 'POL', 'code2' => 'PL', 'dialing_codes' => [ '48' ], 'postcode' => "\d{2}-\d{3}", 'bounds' => [ 55.0336963, 14.1229707, 49.0020468, 24.145783 ], 'name' => "Poland" ], 'PRI' => (object) [ 'code3' => 'PRI', 'code2' => 'PR', 'dialing_codes' => [ '1' ], 'postcode' => "00[679]\d{2}([ \-]\d{4})?", 'bounds' => [ 18.5159789, -67.271492, 17.9268695, -65.5897525 ], 'name' => "Puerto Rico" ], 'PRK' => (object) [ 'code3' => 'PRK', 'code2' => 'KP', 'dialing_codes' => [ '850' ], 'postcode' => null, 'bounds' => [ 43.0089642, 124.0913902, 37.5867855, 130.924647 ], 'name' => "Korea (North)" ], 'PRT' => (object) [ 'code3' => 'PRT', 'code2' => 'PT', 'dialing_codes' => [ '351' ], 'postcode' => "\d{4}([\-]\d{3})?", 'bounds' => [ 42.1543112, -31.5575303, 29.8288021, -6.1891593 ], 'name' => "Portugal" ], 'PRY' => (object) [ 'code3' => 'PRY', 'code2' => 'PY', 'dialing_codes' => [ '595' ], 'postcode' => "\d{4}", 'bounds' => [ -19.2876472, -62.6442036, -27.6063935, -54.258 ], 'name' => "Paraguay" ], 'PSE' => (object) [ 'code3' => 'PSE', 'code2' => 'PS', 'dialing_codes' => [ '970' ], 'postcode' => null, 'bounds' => [ 32.5521479, 34.0689732, 31.2201289, 35.5739235 ], 'name' => "Palestine" ], 'PYF' => (object) [ 'code3' => 'PYF', 'code2' => 'PF', 'dialing_codes' => [ '689' ], 'postcode' => "987\d{2}", 'bounds' => [ -7.6592173, -154.9360599, -28.0990232, -134.244799 ], 'name' => "French Polynesia" ], 'QAT' => (object) [ 'code3' => 'QAT', 'code2' => 'QA', 'dialing_codes' => [ '974' ], 'postcode' => null, 'bounds' => [ 26.3830212, 50.5675, 24.4707534, 52.638011 ], 'name' => "Qatar" ], 'REU' => (object) [ 'code3' => 'REU', 'code2' => 'RE', 'dialing_codes' => [ '262' ], 'postcode' => "9[78]4\d{2}", 'bounds' => [ -20.8717136, 55.2164268, -21.3897308, 55.8366924 ], 'name' => "Reunion" ], 'ROU' => (object) [ 'code3' => 'ROU', 'code2' => 'RO', 'dialing_codes' => [ '40' ], 'postcode' => "\d{6}", 'bounds' => [ 48.2653964, 20.2619773, 43.618682, 30.0454257 ], 'name' => "Romania" ], 'RUS' => (object) [ 'code3' => 'RUS', 'code2' => 'RU', 'dialing_codes' => [ '7' ], 'postcode' => "\d{6}", 'bounds' => [ 82.0586232, 19.6389, 41.1850968, 180 ], 'name' => "Russian Federation" ], 'RWA' => (object) [ 'code3' => 'RWA', 'code2' => 'RW', 'dialing_codes' => [ '250' ], 'postcode' => null, 'bounds' => [ -1.0474083, 28.8617546, -2.8389804, 30.8990738 ], 'name' => "Rwanda" ], 'SAU' => (object) [ 'code3' => 'SAU', 'code2' => 'SA', 'dialing_codes' => [ '966' ], 'postcode' => "\d{5}", 'bounds' => [ 32.1543377, 34.4571718, 16.29, 55.6666851 ], 'name' => "Saudi Arabia" ], 'SDN' => (object) [ 'code3' => 'SDN', 'code2' => 'SD', 'dialing_codes' => [ '249' ], 'postcode' => null, 'bounds' => [ 22.224918, 21.8145046, 8.685278, 39.0576252 ], 'name' => "Sudan" ], 'SEN' => (object) [ 'code3' => 'SEN', 'code2' => 'SN', 'dialing_codes' => [ '221' ], 'postcode' => "\d{5}", 'bounds' => [ 16.6919712, -17.7862419, 12.2372838, -11.3458996 ], 'name' => "Senegal" ], 'SGP' => (object) [ 'code3' => 'SGP', 'code2' => 'SG', 'dialing_codes' => [ '65' ], 'postcode' => "\d{6}", 'bounds' => [ 1.4504753, 103.6920359, 1.1304753, 104.0120359 ], 'name' => "Singapore" ], 'SGS' => (object) [ 'code3' => 'SGS', 'code2' => 'GS', 'dialing_codes' => [ '500' ], 'postcode' => "SIQQ 1ZZ", 'bounds' => [ -53.3500755, -42.354739, -59.684, -25.8468303 ], 'name' => "South Georgia and the South Sandwich Islands" ], 'SHN' => (object) [ 'code3' => 'SHN', 'code2' => 'SH', 'dialing_codes' => [ '290' ], 'postcode' => "(ASCN|STHL) 1ZZ", 'bounds' => [ -15.704, -5.9973424, -16.23, -5.4234153 ], 'name' => "Saint Helena, Ascension and Tristan da Cunha" ], 'SJM' => (object) [ 'code3' => 'SJM', 'code2' => 'SJ', 'dialing_codes' => [ '47' ], 'postcode' => "\d{4}", 'bounds' => [ 81.028076, -9.6848146, 70.6260825, 34.6891253 ], 'name' => "Svalbard and Jan Mayen" ], 'SLB' => (object) [ 'code3' => 'SLB', 'code2' => 'SB', 'dialing_codes' => [ '677' ], 'postcode' => null, 'bounds' => [ -4.81085, 155.3190556, -13.2424298, 170.3964667 ], 'name' => "Solomon Islands" ], 'SLE' => (object) [ 'code3' => 'SLE', 'code2' => 'SL', 'dialing_codes' => [ '232' ], 'postcode' => null, 'bounds' => [ 9.999973, -13.5003389, 6.755, -10.271683 ], 'name' => "Sierra Leone" ], 'SLV' => (object) [ 'code3' => 'SLV', 'code2' => 'SV', 'dialing_codes' => [ '503' ], 'postcode' => null, 'bounds' => [ 14.4510488, -90.1790975, 12.976046, -87.6351394 ], 'name' => "El Salvador" ], 'SMR' => (object) [ 'code3' => 'SMR', 'code2' => 'SM', 'dialing_codes' => [ '378' ], 'postcode' => "4789\d", 'bounds' => [ 43.992093, 12.4033246, 43.8937002, 12.5160665 ], 'name' => "San Marino" ], 'SOM' => (object) [ 'code3' => 'SOM', 'code2' => 'SO', 'dialing_codes' => [ '252' ], 'postcode' => "\d{5}", 'bounds' => [ 12.1889121, 40.98918, -1.8031969, 51.6177696 ], 'name' => "Somalia" ], 'SPM' => (object) [ 'code3' => 'SPM', 'code2' => 'PM', 'dialing_codes' => [ '508' ], 'postcode' => "9[78]5\d{2}", 'bounds' => [ 47.365, -56.6972961, 46.5507173, -55.9033333 ], 'name' => "Saint Pierre and Miquelon" ], 'SRB' => (object) [ 'code3' => 'SRB', 'code2' => 'RS', 'dialing_codes' => [ '381' ], 'postcode' => "\d{6}", 'bounds' => [ 46.1900524, 18.8142875, 42.2322435, 23.006309 ], 'name' => "Serbia" ], 'SSD' => (object) [ 'code3' => 'SSD', 'code2' => 'SS', 'dialing_codes' => [ '211' ], 'postcode' => null, 'bounds' => [ 23.88697, 3.50917, 35.298, 12.248 ], 'name' => "South Sudan" ], 'STP' => (object) [ 'code3' => 'STP', 'code2' => 'ST', 'dialing_codes' => [ '239' ], 'postcode' => null, 'bounds' => [ 1.9257601, 6.260642, -0.2135137, 7.6704783 ], 'name' => "Sao Tome and Principe" ], 'SUR' => (object) [ 'code3' => 'SUR', 'code2' => 'SR', 'dialing_codes' => [ '597' ], 'postcode' => null, 'bounds' => [ 6.225, -58.070833, 1.8312802, -53.8433358 ], 'name' => "Suriname" ], 'SVK' => (object) [ 'code3' => 'SVK', 'code2' => 'SK', 'dialing_codes' => [ '421' ], 'postcode' => "\d{3}[ ]?\d{2}", 'bounds' => [ 49.6138162, 16.8331891, 47.7314286, 22.56571 ], 'name' => "Slovakia" ], 'SVN' => (object) [ 'code3' => 'SVN', 'code2' => 'SI', 'dialing_codes' => [ '386' ], 'postcode' => "\d{4}", 'bounds' => [ 46.8766816, 13.3754696, 45.4214242, 16.5967702 ], 'name' => "Slovenia" ], 'SWE' => (object) [ 'code3' => 'SWE', 'code2' => 'SE', 'dialing_codes' => [ '46' ], 'postcode' => "\d{3}[ ]?\d{2}", 'bounds' => [ 69.0599699, 10.5930952, 55.1331192, 24.1776819 ], 'name' => "Sweden" ], 'SWZ' => (object) [ 'code3' => 'SWZ', 'code2' => 'SZ', 'dialing_codes' => [ '268' ], 'postcode' => "[HLMS]\d{3}", 'bounds' => [ -25.71876, 30.7908, -27.3175201, 32.1349923 ], 'name' => "Eswatini" ], 'SXM' => (object) [ 'code3' => 'SXM', 'code2' => 'SX', 'dialing_codes' => [ '1-721' ], 'postcode' => null, 'bounds' => [ 18.13613, -63.22413, 17.97727, -62.91869 ], 'name' => "Sint Maarten (Netherlands)" ], 'SYC' => (object) [ 'code3' => 'SYC', 'code2' => 'SC', 'dialing_codes' => [ '248' ], 'postcode' => null, 'bounds' => [ -3.512, 45.9988759, -10.4649258, 56.4979396 ], 'name' => "Seychelles" ], 'SYR' => (object) [ 'code3' => 'SYR', 'code2' => 'SY', 'dialing_codes' => [ '963' ], 'postcode' => null, 'bounds' => [ 37.3184589, 35.4714427, 32.311354, 42.3745687 ], 'name' => "Syrian Arab Republic" ], 'TCA' => (object) [ 'code3' => 'TCA', 'code2' => 'TC', 'dialing_codes' => [ '1-649' ], 'postcode' => "TKCA 1ZZ", 'bounds' => [ 22.1630989, -72.6799046, 20.9553418, -70.8643591 ], 'name' => "Turks and Caicos Islands" ], 'TCD' => (object) [ 'code3' => 'TCD', 'code2' => 'TD', 'dialing_codes' => [ '235' ], 'postcode' => null, 'bounds' => [ 23.4975, 13.47348, 7.44107, 24 ], 'name' => "Chad" ], 'TGO' => (object) [ 'code3' => 'TGO', 'code2' => 'TG', 'dialing_codes' => [ '228' ], 'postcode' => null, 'bounds' => [ 11.1395102, -0.1439746, 5.926547, 1.8087605 ], 'name' => "Togo" ], 'THA' => (object) [ 'code3' => 'THA', 'code2' => 'TH', 'dialing_codes' => [ '66' ], 'postcode' => "\d{5}", 'bounds' => [ 20.4648337, 97.3438072, 5.612851, 105.636812 ], 'name' => "Thailand" ], 'TJK' => (object) [ 'code3' => 'TJK', 'code2' => 'TJ', 'dialing_codes' => [ '992' ], 'postcode' => "\d{6}", 'bounds' => [ 41.0450935, 67.3332775, 36.6711153, 75.1539563 ], 'name' => "Tajikistan" ], 'TKL' => (object) [ 'code3' => 'TKL', 'code2' => 'TK', 'dialing_codes' => [ '690' ], 'postcode' => null, 'bounds' => [ -8.3328631, -172.7213673, -9.6442499, -170.9797586 ], 'name' => "Tokelau" ], 'TKM' => (object) [ 'code3' => 'TKM', 'code2' => 'TM', 'dialing_codes' => [ '993' ], 'postcode' => "\d{6}", 'bounds' => [ 42.7975571, 52.335076, 35.129093, 66.6895177 ], 'name' => "Turkmenistan" ], 'TLS' => (object) [ 'code3' => 'TLS', 'code2' => 'TL', 'dialing_codes' => [ '670' ], 'postcode' => null, 'bounds' => [ -8.0895459, 124.0415703, -9.5642775, 127.5335392 ], 'name' => "Timor-Leste" ], 'TON' => (object) [ 'code3' => 'TON', 'code2' => 'TO', 'dialing_codes' => [ '676' ], 'postcode' => null, 'bounds' => [ -15.3655722, -179.3866055, -24.1034499, -173.5295458 ], 'name' => "Tonga" ], 'TTO' => (object) [ 'code3' => 'TTO', 'code2' => 'TT', 'dialing_codes' => [ '1-868' ], 'postcode' => null, 'bounds' => [ 11.5628372, -62.083056, 9.8732106, -60.2895848 ], 'name' => "Trinidad and Tobago" ], 'TUN' => (object) [ 'code3' => 'TUN', 'code2' => 'TN', 'dialing_codes' => [ '216' ], 'postcode' => "\d{4}", 'bounds' => [ 37.7612052, 7.5219807, 30.230236, 11.8801133 ], 'name' => "Tunisia" ], 'TUR' => (object) [ 'code3' => 'TUR', 'code2' => 'TR', 'dialing_codes' => [ '90' ], 'postcode' => "\d{5}", 'bounds' => [ 42.297, 25.6212891, 35.8076804, 44.8176638 ], 'name' => "Turkey" ], 'TUV' => (object) [ 'code3' => 'TUV', 'code2' => 'TV', 'dialing_codes' => [ '688' ], 'postcode' => null, 'bounds' => [ -5.4369611, 175.1590468, -9.9939389, 178.7344938 ], 'name' => "Tuvalu" ], 'TWN' => (object) [ 'code3' => 'TWN', 'code2' => 'TW', 'dialing_codes' => [ '886' ], 'postcode' => "\d{3}(\d{2})?", 'bounds' => [ 26.4372222, 114.3599058, 10.374269, 122.297 ], 'name' => "Taiwan" ], 'TZA' => (object) [ 'code3' => 'TZA', 'code2' => 'TZ', 'dialing_codes' => [ '255' ], 'postcode' => null, 'bounds' => [ -0.9854812, 29.3269773, -11.761254, 40.6584071 ], 'name' => "Tanzania" ], 'UGA' => (object) [ 'code3' => 'UGA', 'code2' => 'UG', 'dialing_codes' => [ '256' ], 'postcode' => null, 'bounds' => [ 4.2340766, 29.573433, -1.4823179, 35.000308 ], 'name' => "Uganda" ], 'UKR' => (object) [ 'code3' => 'UKR', 'code2' => 'UA', 'dialing_codes' => [ '380' ], 'postcode' => "\d{5}", 'bounds' => [ 52.3791473, 22.137059, 44.184598, 40.2275801 ], 'name' => "Ukraine" ], 'UMI' => (object) [ 'code3' => 'UMI', 'code2' => 'UM', 'dialing_codes' => [ '11' ], 'postcode' => null, 'bounds' => [ 6.6514388, -162.6816297, 6.1779744, -162.1339885 ], 'name' => "United States Minor Outlying Islands" ], 'URY' => (object) [ 'code3' => 'URY', 'code2' => 'UY', 'dialing_codes' => [ '598' ], 'postcode' => "\d{5}", 'bounds' => [ -30.0853962, -58.4948438, -35.7824481, -53.0755833 ], 'name' => "Uruguay" ], 'USA' => (object) [ 'code3' => 'USA', 'code2' => 'US', 'dialing_codes' => [ '1' ], 'postcode' => "\d{5}([ \-]\d{4})?", 'bounds' => [ 49.5904, -125.0011, 24.9493, -66.9326 ], 'name' => "United States of America" ], 'UZB' => (object) [ 'code3' => 'UZB', 'code2' => 'UZ', 'dialing_codes' => [ '998' ], 'postcode' => "\d{6}", 'bounds' => [ 45.590118, 55.9977865, 37.1821164, 73.1397362 ], 'name' => "Uzbekistan" ], 'VAT' => (object) [ 'code3' => 'VAT', 'code2' => 'VA', 'dialing_codes' => [ '39-06' ], 'postcode' => "00120", 'bounds' => [ 41.9073912, 12.4457442, 41.9002044, 12.4583653 ], 'name' => "Holy See; Vatican" ], 'VCT' => (object) [ 'code3' => 'VCT', 'code2' => 'VC', 'dialing_codes' => [ '1-784' ], 'postcode' => null, 'bounds' => [ 13.583, -61.6657471, 12.5166548, -60.9094146 ], 'name' => "Saint Vincent and the Grenadines" ], 'VEN' => (object) [ 'code3' => 'VEN', 'code2' => 'VE', 'dialing_codes' => [ '58' ], 'postcode' => "\d{4}", 'bounds' => [ 15.9158431, -73.3529632, 0.647529, -59.5427079 ], 'name' => "Venezuela" ], 'VGB' => (object) [ 'code3' => 'VGB', 'code2' => 'VG', 'dialing_codes' => [ '1-284' ], 'postcode' => null, 'bounds' => [ 18.464984, -65.159094, 17.623468, -64.512674 ], 'name' => "Virgin Islands (British)" ], 'VIR' => (object) [ 'code3' => 'VIR', 'code2' => 'VI', 'dialing_codes' => [ '1-340' ], 'postcode' => "008(([0-4]\d)|(5[01]))([ \-]\d{4})?", 'bounds' => [ 18.464984, -65.159094, 17.623468, -64.512674 ], 'name' => "Virgin Islands (United States of America)" ], 'VNM' => (object) [ 'code3' => 'VNM', 'code2' => 'VN', 'dialing_codes' => [ '84' ], 'postcode' => null, 'bounds' => [ 23.393395, 102.14441, 8.1790665, 114.3337595 ], 'name' => "Viet Nam" ], 'VUT' => (object) [ 'code3' => 'VUT', 'code2' => 'VU', 'dialing_codes' => [ '678' ], 'postcode' => null, 'bounds' => [ -12.8713777, 166.3355255, -20.4627425, 170.449982 ], 'name' => "Vanuatu" ], 'WLF' => (object) [ 'code3' => 'WLF', 'code2' => 'WF', 'dialing_codes' => [ '681' ], 'postcode' => "986\d{2}", 'bounds' => [ -12.9827961, -178.3873749, -14.5630748, -175.9190391 ], 'name' => "Wallis and Futuna" ], 'WSM' => (object) [ 'code3' => 'WSM', 'code2' => 'WS', 'dialing_codes' => [ '685' ], 'postcode' => null, 'bounds' => [ -13.2381892, -173.0091864, -14.2770916, -171.1929229 ], 'name' => "Samoa" ], 'XKX' => (object) [ 'code3' => 'XKX', 'code2' => 'XK', 'dialing_codes' => [ '383' ], 'postcode' => "\d{5}", 'bounds' => [ 43.36112, 19.70452, 41.72367, 22.42957 ], 'name' => "Kosovo" ], 'YEM' => (object) [ 'code3' => 'YEM', 'code2' => 'YE', 'dialing_codes' => [ '967' ], 'postcode' => null, 'bounds' => [ 19, 41.60825, 11.9084802, 54.7389375 ], 'name' => "Yemen" ], 'ZAF' => (object) [ 'code3' => 'ZAF', 'code2' => 'ZA', 'dialing_codes' => [ '27' ], 'postcode' => "\d{4}", 'bounds' => [ -22.1250301, 16.3335213, -47.1788335, 38.2898954 ], 'name' => "South Africa" ], 'ZMB' => (object) [ 'code3' => 'ZMB', 'code2' => 'ZM', 'dialing_codes' => [ '260' ], 'postcode' => "\d{5}", 'bounds' => [ -8.2712822, 21.9993509, -18.0765945, 33.701111 ], 'name' => "Zambia" ], 'ZWE' => (object) [ 'code3' => 'ZWE', 'code2' => 'ZW', 'dialing_codes' => [ '263' ], 'postcode' => null, 'bounds' => [ -15.6097033, 25.2373, -22.4241096, 33.0683413 ], 'name' => "Zimbabwe" ], ]; foreach ($countries as $code3 => $country) { $countries[$code3]->sanitized_name = remove_accents($country->name); } uasort($countries, function(object $a, object $b): int { if (($aa = strtolower($a->sanitized_name)) < ($bb = strtolower($b->sanitized_name))) return -1; return $aa > $bb ? 1 : 0; }); return $countries; } /** * * Retrieve info about a specific country. * @param object|string $code Country object or code, with 2 (ISO 639-1) * or 3 (ISO 639-2) character. * @return object|null Corresponding country, or null if the code * was not found. */ function get_country(object | string $country): ?object { if (is_object($country)) return $country; $all = get_countries(); if (strlen($country) === 3) { if (!array_key_exists($country, $all)) return null; return $all[$country]; } foreach ($all as $c) if ($c->code2 === $country) return $c; return null; } /** * * Returns the regex which can be used to validate a postcode. * It will be a simple regex compatible with all countries. * @return string Postcode regular expression. */ function get_default_postcode_regex(): string { return "[a-z0-9][a-z0-9- ]{0,10}[a-z0-9]"; } /** * * Check if a postcode is valid. If country is provided * @param mixed $postcode Postcode to validate. * @param object|string|null $country Country object or code. If null, the * default postcode regex will be used. * @return boolean Is valid or not? */ function is_postcode_valid(mixed $postcode, object | string $country = null): bool { if ($country !== null && !($country = get_country($country))) throw new Microbe_Exception("Invalid country while trying to validate postcode"); if (!is_scalar($postcode)) return false; return (bool) preg_match('/^' . ($country->postcode ?: get_default_postcode_regex()) . '$/i', (string) $postcode); } /** * * Cast a given value to a phone number. If the value is not readable, null * will be returned. * @param mixed $number Input phone number. * @param string|int $dialingCode Prefix automatically a dialing code. * @return string|null Phone number formatted, or null if * invalid format. */ function cast_phone_number(mixed $number, string | int $dialingCode = null): ?string { if (!is_scalar($number)) return null; $number = preg_replace('/[^\d+-]/', '', (string) $number); if ($dialingCode = preg_replace('/[^\d-]/', '', (string) $dialingCode)) { if (str_starts_with($number, $dialingCode)) $number = substr($number, strlen($dialingCode)); $number = str_replace('-', '', $number); $dialingCode = '+' . $dialingCode; } if (strlen($number) < 5) return null; return ($dialingCode ?: '') . $number; } /** * * User the phone casting function to check if the phone number is valid. * @param mixed $number Input phone number. * @return bool Is phone valid? */ function is_valid_phone_number(mixed $number): bool { return cast_phone_number($number) !== null; } /** * * Check if a given value is a valid postcode and clean it. * @param mixed $postcode Possibily a postcode. * @return string|null Cleaned postcode if the given value is * acceptable. */ function cast_postcode(mixed $postcode): ?string { if (!$postcode || !is_scalar($postcode)) return null; return preg_replace('/[^A-Z0-9]+/', '', strtoupper((string) $postcode)) ?: null; } /** * * Get the list of all the handled languages. * @return array List of languages, with codes, english name and country codes * where it can be spoken. */ function get_languages(): array { return [ 'afr' => (object) [ 'code3' => 'afr', 'code2' => 'af', 'name' => "Afrikaans", 'default_country' => 'ZAF', 'countries' => [ 'ZAF' ] ], 'alb' => (object) [ 'code3' => 'alb', 'code2' => 'sq', 'name' => "Albanian", 'default_country' => 'ALB', 'countries' => [ 'ALB' ] ], 'amh' => (object) [ 'code3' => 'amh', 'code2' => 'am', 'name' => "Amharic", 'default_country' => 'ETH', 'countries' => [ 'ETH' ] ], 'ara' => (object) [ 'code3' => 'ara', 'code2' => 'ar', 'name' => "Arabic", 'default_country' => 'ARE', 'countries' => [ 'ARE', 'BHR', 'DZA', 'EGY', 'IRQ', 'JOR', 'KWT', 'LBN', 'LBY', 'MAR', 'OMN', 'QAT', 'SAU', 'SDN', 'SYR', 'TUN', 'YEM' ] ], 'arm' => (object) [ 'code3' => 'arm', 'code2' => 'hy', 'name' => "Armenian", 'default_country' => 'ARM', 'countries' => [ 'ARM' ] ], 'arn' => (object) [ 'code3' => 'arn', 'code2' => null, 'name' => "Mapudungun; Mapuche", 'default_country' => 'CHL', 'countries' => [ 'CHL' ] ], 'asm' => (object) [ 'code3' => 'asm', 'code2' => 'as', 'name' => "Assamese", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'aze' => (object) [ 'code3' => 'aze', 'code2' => 'az', 'name' => "Azerbaijani", 'default_country' => 'AZE', 'countries' => [ 'AZE' ] ], 'bak' => (object) [ 'code3' => 'bak', 'code2' => 'ba', 'name' => "Bashkir", 'default_country' => 'RUS', 'countries' => [ 'RUS' ] ], 'baq' => (object) [ 'code3' => 'baq', 'code2' => 'eu', 'name' => "Basque", 'default_country' => 'ESP', 'countries' => [ 'ESP' ] ], 'bel' => (object) [ 'code3' => 'bel', 'code2' => 'be', 'name' => "Belarusian", 'default_country' => 'BLR', 'countries' => [ 'BLR' ] ], 'ben' => (object) [ 'code3' => 'ben', 'code2' => 'bn', 'name' => "Bengali", 'default_country' => 'BGD', 'countries' => [ 'BGD', 'IND' ] ], 'bos' => (object) [ 'code3' => 'bos', 'code2' => 'bs', 'name' => "Bosnian", 'default_country' => 'BIH', 'countries' => [ 'BIH' ] ], 'bre' => (object) [ 'code3' => 'bre', 'code2' => 'br', 'name' => "Breton", 'default_country' => 'FRA', 'countries' => [ 'FRA' ] ], 'bul' => (object) [ 'code3' => 'bul', 'code2' => 'bg', 'name' => "Bulgarian", 'default_country' => 'BGR', 'countries' => [ 'BGR' ] ], 'cat' => (object) [ 'code3' => 'cat', 'code2' => 'ca', 'name' => "Catalan; Valencian", 'default_country' => 'ESP', 'countries' => [ 'ESP' ] ], 'chi' => (object) [ 'code3' => 'chi', 'code2' => 'zh', 'name' => "Chinese", 'default_country' => 'CHN', 'countries' => [ 'CHN', 'HKG', 'MAC', 'SGP', 'TWN' ] ], 'cos' => (object) [ 'code3' => 'cos', 'code2' => 'co', 'name' => "Corsican", 'default_country' => 'FRA', 'countries' => [ 'FRA' ] ], 'cze' => (object) [ 'code3' => 'cze', 'code2' => 'cs', 'name' => "Czech", 'default_country' => 'CZE', 'countries' => [ 'CZE' ] ], 'dan' => (object) [ 'code3' => 'dan', 'code2' => 'da', 'name' => "Danish", 'default_country' => 'DNK', 'countries' => [ 'DNK' ] ], 'div' => (object) [ 'code3' => 'div', 'code2' => 'dv', 'name' => "Divehi; Dhivehi; Maldivian", 'default_country' => 'MDV', 'countries' => [ 'MDV' ] ], 'dsb' => (object) [ 'code3' => 'dsb', 'code2' => null, 'name' => "Lower Sorbian", 'default_country' => 'DEU', 'countries' => [ 'DEU' ] ], 'dut' => (object) [ 'code3' => 'dut', 'code2' => 'nl', 'name' => "Dutch; Flemish", 'default_country' => 'NLD', 'countries' => [ 'BEL', 'NLD' ] ], 'eng' => (object) [ 'code3' => 'eng', 'code2' => 'en', 'name' => "English", 'default_country' => 'GBR', 'countries' => [ 'AUS', 'BLZ', 'CAN', 'GBR', 'IND', 'IRL', 'JAM', 'MLT', 'MYS', 'NZL', 'PHL', 'SGP', 'TTO', 'USA', 'ZAF', 'ZWE' ] ], 'est' => (object) [ 'code3' => 'est', 'code2' => 'et', 'name' => "Estonian", 'default_country' => 'EST', 'countries' => [ 'EST' ] ], 'fao' => (object) [ 'code3' => 'fao', 'code2' => 'fo', 'name' => "Faroese", 'default_country' => 'FRO', 'countries' => [ 'FRO' ] ], 'fil' => (object) [ 'code3' => 'fil', 'code2' => null, 'name' => "Filipino; Pilipino", 'default_country' => 'PHL', 'countries' => [ 'PHL' ] ], 'fin' => (object) [ 'code3' => 'fin', 'code2' => 'fi', 'name' => "Finnish", 'default_country' => 'FIN', 'countries' => [ 'FIN' ] ], 'fre' => (object) [ 'code3' => 'fre', 'code2' => 'fr', 'name' => "French", 'default_country' => 'FRA', 'countries' => [ 'BEL', 'CAN', 'CHE', 'FRA', 'LUX', 'MCO' ] ], 'fry' => (object) [ 'code3' => 'fry', 'code2' => 'fy', 'name' => "Western Frisian", 'default_country' => 'NLD', 'countries' => [ 'NLD' ] ], 'geo' => (object) [ 'code3' => 'geo', 'code2' => 'ka', 'name' => "Georgian", 'default_country' => 'GEO', 'countries' => [ 'GEO' ] ], 'ger' => (object) [ 'code3' => 'ger', 'code2' => 'de', 'name' => "German", 'default_country' => 'DEU', 'countries' => [ 'AUT', 'CHE', 'DEU', 'LIE', 'LUX' ] ], 'gla' => (object) [ 'code3' => 'gla', 'code2' => 'gd', 'name' => "Gaelic; Scottish Gaelic", 'default_country' => 'GBR', 'countries' => [ 'GBR', 'IRL' ] ], 'gle' => (object) [ 'code3' => 'gle', 'code2' => 'ga', 'name' => "Irish", 'default_country' => 'IRL', 'countries' => [ 'IRL' ] ], 'glg' => (object) [ 'code3' => 'glg', 'code2' => 'gl', 'name' => "Galician", 'default_country' => 'ESP', 'countries' => [ 'ESP' ] ], 'gre' => (object) [ 'code3' => 'gre', 'code2' => 'el', 'name' => "Greek, Modern (1453-)", 'default_country' => 'GRC', 'countries' => [ 'CYP', 'GRC' ] ], 'gsw' => (object) [ 'code3' => 'gsw', 'code2' => null, 'name' => "Swiss German; Alemannic; Alsatian", 'default_country' => 'FRA', 'countries' => [ 'FRA' ] ], 'guj' => (object) [ 'code3' => 'guj', 'code2' => 'gu', 'name' => "Gujarati", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'hau' => (object) [ 'code3' => 'hau', 'code2' => 'ha', 'name' => "Hausa", 'default_country' => 'NGA', 'countries' => [ 'NGA' ] ], 'heb' => (object) [ 'code3' => 'heb', 'code2' => 'he', 'name' => "Hebrew", 'default_country' => 'ISR', 'countries' => [ 'ISR' ] ], 'hin' => (object) [ 'code3' => 'hin', 'code2' => 'hi', 'name' => "Hindi", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'hrv' => (object) [ 'code3' => 'hrv', 'code2' => 'hr', 'name' => "Croatian", 'default_country' => 'HRV', 'countries' => [ 'BIH', 'HRV' ] ], 'hsb' => (object) [ 'code3' => 'hsb', 'code2' => null, 'name' => "Upper Sorbian", 'default_country' => 'DEU', 'countries' => [ 'DEU' ] ], 'hun' => (object) [ 'code3' => 'hun', 'code2' => 'hu', 'name' => "Hungarian", 'default_country' => 'HUN', 'countries' => [ 'HUN' ] ], 'ibo' => (object) [ 'code3' => 'ibo', 'code2' => 'ig', 'name' => "Igbo", 'default_country' => 'NGA', 'countries' => [ 'NGA' ] ], 'ice' => (object) [ 'code3' => 'ice', 'code2' => 'is', 'name' => "Icelandic", 'default_country' => 'ISL', 'countries' => [ 'ISL' ] ], 'iii' => (object) [ 'code3' => 'iii', 'code2' => 'ii', 'name' => "Sichuan Yi; Nuosu", 'default_country' => 'CHN', 'countries' => [ 'CHN' ] ], 'iku' => (object) [ 'code3' => 'iku', 'code2' => 'iu', 'name' => "Inuktitut", 'default_country' => 'CAN', 'countries' => [ 'CAN' ] ], 'ind' => (object) [ 'code3' => 'ind', 'code2' => 'id', 'name' => "Indonesian", 'default_country' => 'IDN', 'countries' => [ 'IDN' ] ], 'ita' => (object) [ 'code3' => 'ita', 'code2' => 'it', 'name' => "Italian", 'default_country' => 'ITA', 'countries' => [ 'CHE', 'ITA' ] ], 'jpn' => (object) [ 'code3' => 'jpn', 'code2' => 'ja', 'name' => "Japanese", 'default_country' => 'JPN', 'countries' => [ 'JPN' ] ], 'kal' => (object) [ 'code3' => 'kal', 'code2' => 'kl', 'name' => "Kalaallisut; Greenlandic", 'default_country' => 'GRL', 'countries' => [ 'GRL' ] ], 'kan' => (object) [ 'code3' => 'kan', 'code2' => 'kn', 'name' => "Kannada", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'kaz' => (object) [ 'code3' => 'kaz', 'code2' => 'kk', 'name' => "Kazakh", 'default_country' => 'KAZ', 'countries' => [ 'KAZ' ] ], 'khm' => (object) [ 'code3' => 'khm', 'code2' => 'km', 'name' => "Central Khmer", 'default_country' => 'KHM', 'countries' => [ 'KHM' ] ], 'kin' => (object) [ 'code3' => 'kin', 'code2' => 'rw', 'name' => "Kinyarwanda", 'default_country' => 'RWA', 'countries' => [ 'RWA' ] ], 'kir' => (object) [ 'code3' => 'kir', 'code2' => 'ky', 'name' => "Kirghiz; Kyrgyz", 'default_country' => 'KGZ', 'countries' => [ 'KGZ' ] ], 'kok' => (object) [ 'code3' => 'kok', 'code2' => null, 'name' => "Konkani", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'kor' => (object) [ 'code3' => 'kor', 'code2' => 'ko', 'name' => "Korean", 'default_country' => 'KOR', 'countries' => [ 'KOR' ] ], 'lao' => (object) [ 'code3' => 'lao', 'code2' => 'lo', 'name' => "Lao", 'default_country' => 'LAO', 'countries' => [ 'LAO' ] ], 'lav' => (object) [ 'code3' => 'lav', 'code2' => 'lv', 'name' => "Latvian", 'default_country' => 'LVA', 'countries' => [ 'LVA' ] ], 'lit' => (object) [ 'code3' => 'lit', 'code2' => 'lt', 'name' => "Lithuanian", 'default_country' => 'LTU', 'countries' => [ 'LTU' ] ], 'ltz' => (object) [ 'code3' => 'ltz', 'code2' => 'lb', 'name' => "Luxembourgish; Letzeburgesch", 'default_country' => 'LUX', 'countries' => [ 'LUX' ] ], 'mac' => (object) [ 'code3' => 'mac', 'code2' => 'mk', 'name' => "Macedonian", 'default_country' => 'MKD', 'countries' => [ 'MKD' ] ], 'mal' => (object) [ 'code3' => 'mal', 'code2' => 'ml', 'name' => "Malayalam", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'mao' => (object) [ 'code3' => 'mao', 'code2' => 'mi', 'name' => "Maori", 'default_country' => 'NZL', 'countries' => [ 'NZL' ] ], 'mar' => (object) [ 'code3' => 'mar', 'code2' => 'mr', 'name' => "Marathi", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'may' => (object) [ 'code3' => 'may', 'code2' => 'ms', 'name' => "Malay", 'default_country' => 'MYS', 'countries' => [ 'BRN', 'MYS' ] ], 'mlt' => (object) [ 'code3' => 'mlt', 'code2' => 'mt', 'name' => "Maltese", 'default_country' => 'MLT', 'countries' => [ 'MLT' ] ], 'moh' => (object) [ 'code3' => 'moh', 'code2' => null, 'name' => "Mohawk", 'default_country' => 'CAN', 'countries' => [ 'CAN' ] ], 'mon' => (object) [ 'code3' => 'mon', 'code2' => 'mn', 'name' => "Mongolian", 'default_country' => 'MNG', 'countries' => [ 'CHN', 'MNG' ] ], 'nep' => (object) [ 'code3' => 'nep', 'code2' => 'ne', 'name' => "Nepali", 'default_country' => 'NPL', 'countries' => [ 'NPL' ] ], 'nno' => (object) [ 'code3' => 'nno', 'code2' => 'nn', 'name' => "Norwegian Nynorsk; Nynorsk, Norwegian", 'default_country' => 'NOR', 'countries' => [ 'NOR' ] ], 'nob' => (object) [ 'code3' => 'nob', 'code2' => 'nb', 'name' => "Bokmål, Norwegian; Norwegian Bokmål", 'default_country' => 'NOR', 'countries' => [ 'NOR' ] ], 'nor' => (object) [ 'code3' => 'nor', 'code2' => 'no', 'name' => "Norwegian", 'default_country' => 'NOR', 'countries' => [ 'NOR' ] ], 'nso' => (object) [ 'code3' => 'nso', 'code2' => null, 'name' => "Pedi; Sepedi; Northern Sotho", 'default_country' => 'ZAF', 'countries' => [ 'ZAF' ] ], 'oci' => (object) [ 'code3' => 'oci', 'code2' => 'oc', 'name' => "Occitan (post 1500)", 'default_country' => 'FRA', 'countries' => [ 'FRA' ] ], 'ori' => (object) [ 'code3' => 'ori', 'code2' => 'or', 'name' => "Oriya", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'pan' => (object) [ 'code3' => 'pan', 'code2' => 'pa', 'name' => "Panjabi; Punjabi", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'per' => (object) [ 'code3' => 'per', 'code2' => 'fa', 'name' => "Persian", 'default_country' => 'IRN', 'countries' => [ 'IRN' ] ], 'pol' => (object) [ 'code3' => 'pol', 'code2' => 'pl', 'name' => "Polish", 'default_country' => 'POL', 'countries' => [ 'POL' ] ], 'por' => (object) [ 'code3' => 'por', 'code2' => 'pt', 'name' => "Portuguese", 'default_country' => 'PRT', 'countries' => [ 'BRA', 'PRT' ] ], 'prs' => (object) [ 'code3' => 'prs', 'code2' => null, 'name' => "Dari, Afghan Persian", 'default_country' => 'AFG', 'countries' => [ 'AFG' ] ], 'pus' => (object) [ 'code3' => 'pus', 'code2' => 'ps', 'name' => "Pushto; Pashto", 'default_country' => 'AFG', 'countries' => [ 'AFG' ] ], 'que' => (object) [ 'code3' => 'que', 'code2' => 'qu', 'name' => "Quechua", 'default_country' => 'PER', 'countries' => [ 'BOL', 'ECU', 'PER' ] ], 'roh' => (object) [ 'code3' => 'roh', 'code2' => 'rm', 'name' => "Romansh", 'default_country' => 'CHE', 'countries' => [ 'CHE' ] ], 'rum' => (object) [ 'code3' => 'rum', 'code2' => 'ro', 'name' => "Romanian; Moldavian; Moldovan", 'default_country' => 'ROU', 'countries' => [ 'MAC', 'ROU' ] ], 'rus' => (object) [ 'code3' => 'rus', 'code2' => 'ru', 'name' => "Russian", 'default_country' => 'RUS', 'countries' => [ 'MAC', 'RUS' ] ], 'sah' => (object) [ 'code3' => 'sah', 'code2' => null, 'name' => "Yakut", 'default_country' => 'RUS', 'countries' => [ 'RUS' ] ], 'san' => (object) [ 'code3' => 'san', 'code2' => 'sa', 'name' => "Sanskrit", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'sin' => (object) [ 'code3' => 'sin', 'code2' => 'si', 'name' => "Sinhala; Sinhalese", 'default_country' => 'LKA', 'countries' => [ 'LKA' ] ], 'slo' => (object) [ 'code3' => 'slo', 'code2' => 'sk', 'name' => "Slovak", 'default_country' => 'SVK', 'countries' => [ 'SVK' ] ], 'slv' => (object) [ 'code3' => 'slv', 'code2' => 'sl', 'name' => "Slovenian", 'default_country' => 'SVN', 'countries' => [ 'SVN' ] ], 'sma' => (object) [ 'code3' => 'sma', 'code2' => null, 'name' => "Southern Sami", 'default_country' => 'NOR', 'countries' => [ 'NOR', 'SWE' ] ], 'sme' => (object) [ 'code3' => 'sme', 'code2' => 'se', 'name' => "Northern Sami", 'default_country' => 'NOR', 'countries' => [ 'FIN', 'NOR', 'SWE' ] ], 'smj' => (object) [ 'code3' => 'smj', 'code2' => null, 'name' => "Lule Sami", 'default_country' => 'NOR', 'countries' => [ 'NOR', 'SWE' ] ], 'smn' => (object) [ 'code3' => 'smn', 'code2' => null, 'name' => "Inari Sami", 'default_country' => 'FIN', 'countries' => [ 'FIN' ] ], 'sms' => (object) [ 'code3' => 'sms', 'code2' => null, 'name' => "Skolt Sami", 'default_country' => 'FIN', 'countries' => [ 'FIN' ] ], 'spa' => (object) [ 'code3' => 'spa', 'code2' => 'es', 'name' => "Spanish; Castilian", 'default_country' => 'ESP', 'countries' => [ 'ARG', 'BOL', 'CHL', 'COL', 'CRI', 'DOM', 'ECU', 'ESP', 'GTM', 'HND', 'MEX', 'NIC', 'PAN', 'PER', 'PRI', 'PRY', 'SLV', 'URY', 'USA', 'VEN' ] ], 'srp' => (object) [ 'code3' => 'srp', 'code2' => 'sr', 'name' => "Serbian", 'default_country' => 'SRB', 'countries' => [ 'BIH', 'MNE', 'SRB' ] ], 'swa' => (object) [ 'code3' => 'swa', 'code2' => 'sw', 'name' => "Swahili", 'default_country' => 'KEN', 'countries' => [ 'KEN' ] ], 'swe' => (object) [ 'code3' => 'swe', 'code2' => 'sv', 'name' => "Swedish", 'default_country' => 'SWE', 'countries' => [ 'FIN', 'SWE' ] ], 'syr' => (object) [ 'code3' => 'syr', 'code2' => null, 'name' => "Syriac", 'default_country' => 'SYR', 'countries' => [ 'SYR' ] ], 'tam' => (object) [ 'code3' => 'tam', 'code2' => 'ta', 'name' => "Tamil", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'tat' => (object) [ 'code3' => 'tat', 'code2' => 'tt', 'name' => "Tatar", 'default_country' => 'RUS', 'countries' => [ 'RUS' ] ], 'tel' => (object) [ 'code3' => 'tel', 'code2' => 'te', 'name' => "Telugu", 'default_country' => 'IND', 'countries' => [ 'IND' ] ], 'tgk' => (object) [ 'code3' => 'tgk', 'code2' => 'tg', 'name' => "Tajik", 'default_country' => 'TJK', 'countries' => [ 'TJK' ] ], 'tha' => (object) [ 'code3' => 'tha', 'code2' => 'th', 'name' => "Thai", 'default_country' => 'THA', 'countries' => [ 'THA' ] ], 'tib' => (object) [ 'code3' => 'tib', 'code2' => 'bo', 'name' => "Tibetan", 'default_country' => 'CHN', 'countries' => [ 'CHN' ] ], 'tsn' => (object) [ 'code3' => 'tsn', 'code2' => 'tn', 'name' => "Tswana", 'default_country' => 'ZAF', 'countries' => [ 'ZAF' ] ], 'tuk' => (object) [ 'code3' => 'tuk', 'code2' => 'tk', 'name' => "Turkmen", 'default_country' => 'TKM', 'countries' => [ 'TKM' ] ], 'tur' => (object) [ 'code3' => 'tur', 'code2' => 'tr', 'name' => "Turkish", 'default_country' => 'TUR', 'countries' => [ 'TUR' ] ], 'tzm' => (object) [ 'code3' => 'tzm', 'code2' => null, 'name' => "Central Atlas Tamazight", 'default_country' => 'DZA', 'countries' => [ 'DZA' ] ], 'uig' => (object) [ 'code3' => 'uig', 'code2' => 'ug', 'name' => "Uighur; Uyghur", 'default_country' => 'CHN', 'countries' => [ 'CHN' ] ], 'ukr' => (object) [ 'code3' => 'ukr', 'code2' => 'uk', 'name' => "Ukrainian", 'default_country' => 'UKR', 'countries' => [ 'UKR' ] ], 'urd' => (object) [ 'code3' => 'urd', 'code2' => 'ur', 'name' => "Urdu", 'default_country' => 'PAK', 'countries' => [ 'PAK' ] ], 'uzb' => (object) [ 'code3' => 'uzb', 'code2' => 'uz', 'name' => "Uzbek", 'default_country' => 'UZB', 'countries' => [ 'UZB' ] ], 'vie' => (object) [ 'code3' => 'vie', 'code2' => 'vi', 'name' => "Vietnamese", 'default_country' => 'VNM', 'countries' => [ 'VNM' ] ], 'wel' => (object) [ 'code3' => 'wel', 'code2' => 'cy', 'name' => "Welsh", 'default_country' => 'GBR', 'countries' => [ 'GBR' ] ], 'wol' => (object) [ 'code3' => 'wol', 'code2' => 'wo', 'name' => "Wolof", 'default_country' => 'SEN', 'countries' => [ 'SEN' ] ], 'xho' => (object) [ 'code3' => 'xho', 'code2' => 'xh', 'name' => "Xhosa", 'default_country' => 'ZAF', 'countries' => [ 'ZAF' ] ], 'yor' => (object) [ 'code3' => 'yor', 'code2' => 'yo', 'name' => "Yoruba", 'default_country' => 'NGA', 'countries' => [ 'NGA' ] ], 'zul' => (object) [ 'code3' => 'zul', 'code2' => 'zu', 'name' => "Zulu", 'default_country' => 'ZAF', 'countries' => [ 'ZAF' ] ], ]; } /** * * Retrieve info about a specific language. * @param string $code Country code, with 2 (ISO 639-1) * or 3 (ISO 639-2) character. * @return object|null Corresponding language, or null if the code * was not found. */ function get_language(string $code): ?object { $all = get_languages(); if (strlen($code) === 3) { if (!array_key_exists($code, $all)) return null; return $all[$code]; } foreach ($all as $c) if ($c->code2 === $code) return $c; return null; } /** * * Retrieve all the possible languages combinations, aka lang mixed with * countries where it can be spoken. * @return array Array of the mixed languages/countries. */ function get_locales(): array { $locales = []; foreach (get_languages() as $l) { foreach ($l->countries as $c) { $locales[$code = ($l->code3 . '-' . $c)] = (object) [ 'code' => $code, 'lang_name' => $l->name, 'country_name' => ($countryName = get_country($c)->name), 'full_name' => $l->name . ' (' . $countryName . ')', 'lang' => $l->code3, 'country' => $c, ]; } } return $locales; } /** * * Get a specific locale, based on its code (aka xxx-XXX). * @param string $code Locale code. * @return object|null Locale object if found. Else, null. */ function get_locale(string $code): ?object { $all = get_locales(); if (!array_key_exists($code, $all)) return null; return $all[$code]; } /** * * Get the flag of a country, as a SVG string, based on its 3-char code * (aka ISO 639-2). * @param string $code 3-char code of the country. * @param boolean $url Returns the string ready to include in a * HTML src="" attribute. * @return string SVG source code, or Base64 encoded SVG with the src * data prefix as required in a src="" HTML attribute. */ function get_country_flag(string $code, bool $url = false): ?string { $flags = [ 'AFG' => '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', 'ALB' => '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', 'DZA' => 'eJxtj8EOgjAMhu88RVPPY2Wbcxrw4MmLV+9EHJBMMUKY8ekt4sFEk/Zv++drmub9WMPjEq59gc0w3DZSxhjTqNPuXktFRJIJhLYq0IeyFu2pu/aieiKM7TnuukeBBATWEBhHuE0A8ls5NODbEApceO8RePmgFXMN68jcnusT5Q9NZJXW88I3/heuVEbazLBRBjJHZcZXpmSFt3K/tlNMDnuCnYsByw05oZepArtiWatj5nSqgviM74v59P02eQGH9UnD', 'ASM' => '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', 'AND' => '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' . '5tjum8ecUDngmwMb3i0a4ZHj7XqZySFWJm4Ok76DN7szZk6k9ifGRkeBtOZZhCVSyK0zgMnimanTTrSnF2JYEHAK3yXIU2Hl9PVeyIeqoCuQhVfbiJLi1yb3flKUv/XHH5zLsXtw9wY8rr+2UfOar4qgml5wBN/Fbz94ZPB2//17Tt0wb0PUNzokcfPon1DQyK2FB9HzS6VBuHV26H2aev/H0aiLpG9TxYzv2Z8j03Coe/BnyQoAbwZPBusXduuJz43xblcesQl4f4pc9OnQyFS10QPlqrFr1ra3N/S4k+KndjyqxwIi7Wxi+JB9sfEYJDaoDC5MKGjim61/1tu9Tk35fePoNtfv/nwbMLxvwG4Jdsg', 'AGO' => 'eJydVU1vGjEQvedXjLbnMfaMP3YriNSeekiuvaNlA6gLREAh4tf3jWnaVI2qpIoYbDN+8958ONPDaUlPm3F7mDWr4/Hx42RyPp/dWd1uv5yI934Cj4bWi1nzMM6XvO532wPPdw2d1sP58+5p1njylKOn2Prm9oZouqSH9Tjy/vs4zJrhNGx3i0VDh+N+923g83pxXM2a8HisznB/nB9X9cas2Q9wRKh7YK6AeZKoLn/xl2by0vnqIZpdNK+viPzLZzpZ1q8XqB8eHobe++ZVWoYl0rpCIbZO+pCTE0JYpdSRpOQyl4BdyMXJyK1rKYBUXzLupOgyhSRmvZkSOYIWiTjhBGcuAAgxuMSd2DL5kSsekJ85v4PsJhRPqh40JBhr7wLDiG1btrO6vWxC7LjrXFpJRB5XLPGy4WC/a+s6Y6hQk8m0140Z28FNMkvnAvQYeob71QC71GX1gUTtjIhAcesi4FLdcDU4udxryCTFjz/BQemam2raCpQ7QEOVCHdw6ioIHLAyyloPXPtSB/Kp0AKW3hapfqOCJodFn49xxaURrCxcpnLlCrkRWTCPrpYPV3GmiPZaPYZ/dI5qJrWC96ipaUZOKNiis9qgoUa1RW8tQ9Hie+Sqs3JV1+LSvJh8fHz9s+K5coBgDgRkTr1yrClAwhAmWhFRlYAd1HToLtZkSUdS/lLwKutskrUgxjxiZR8EJiCCrKffZ3ZqPeKt3jU0dLzpTrE70AJpb/Z/d/atvKQZKe452nThAE1dYJJH1YN6LtEy2dpY1NlAyVlRay4crfGCNSOI1ISjQPYTUDGw1FK2ZkdjBRtpHH1K0rZUzZW4akQDYJR7xkVKAMnWAMrWtaH9nwmXDi8NqU+GYD2LPg+5LvlqXns4trvt8PzKIoi3CH++uXqFVzVtGu1xCpK4IA4qZaOAByvcSYEkH13YWP8S8lruJNpkqojFndr/hNubHwnnc/M=', 'AIA' => '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', 'ATA' => 'eJxlVsty4zYQvO9XTDGX5ACaeBMpaw/JJYfkI1y0ZSuhpY2lWFv79eluUK6k9iCBBAfATE/3DO7P78/29XU9nnfDy+Xy5ee7u+v1Ol7jeHp7vgvTNN3BYrDD427Yrw/P7rCcjmf38Pdg74en6y+nr7thsslKmizN0/D5k9n9l4fLi+0P67obfogP9XF5Ggzr/4DhCwzfYfjb9G24+854v993S5/rWC3EaZwXF8fs6jj/b/R5LM6Ps00u2BhdxIMfvcOjH7PVMbiErxnmsMZTGJMrmB2rm7keD3jLnAnYNSCGySWZVcdl2MYFfMNptv2fxyYDuBYXffRyp+EAbF7xmDA940f3Mt7gBHbPRp8b3OgxNPNazeV0IW3/M/Zo2xy8wozsGDQ/NOcnetUYAJ9ShONJxxTjjAGXar5hOvixrFwOENoCj3Eq9gc0s/lkOLuuRNEKPmZOan3kTtqE3/iA5CrKiuWF0dIyum4Hb8wjQLgMgJAAhG9YjK/Bw624AqPKkM+xA0QnXFgcbAkGQ4mIAUNFIFFIExdAzSAr1hMYnKaxmnCDm0TZMR1eRsQ7ACKuLzwZbhdmlscROhzok/iBH0Ky1rPFXCTumRQ40f41lGR1slAITEEstXDDstCJ2GFQxr3y26yHgiNBrECAgrDDWRaIBg6C53KP75HGTJyGRjd6MPhGVhaLyHe2fhySqeeIY4Cu+M0AA/nqLXrjW9bOWfj6nkpGHoypSxjJcm9N/lnQJHfrOYkEvfNgxp4h6w1JwFEIq7swGV3jIvKIUQfyIFCAWCTaEoGZlJGtT2JRISdJpYkucqXbMiqmjJRcMsoAMRqpFKx0J6QWKk4qYphRuycBSmHLcQoT37wyQVFAPQhLDmkt4ldApBCVOJnke3uGHwqoGR2NCKk/ZJWGpPyRVhnTbdtq6oTR7oqjdLVJX5VJTHzxCi8wIbMU4IOoMXNBIskTVXkjDvgE/CdQQynyNt/EPavmdWk6RaF9YySjmW2M8yhBFslJ/pEKXo4FlR2jC0GFCBDULjN60NZeeJYbLkqH9x8AqUYCexjNKr2CNlkU/6J42cNAWILp5kclx61XZNEv3XQnf1lueYyPt/FMwgbtmf5barPqIt9YdAqr/kQ6KjPUWSFYnCyq4En5AaKOAg5uQ56tACzK1DDGyNog8RXZbePvsTVLsS5OO6jKSVKsdnIhwIzRAXfqkmzeNLC1DrmaWNz1PctXbzCgbxnhUzozUfKqs15lXo1E9c31SofRMYaqrbuys/pNUjXi6HVMku+ELgqzRuyiUypU5tj8aDa7pBJJMTFhSYBRq6ySbdw8FkDya+6liqQgETIdZTi1D2rLvfwqsNL5SuIimKb+FRlJU8FrzF2RqGEFaTlWqLSVvcoUqnOwLUvyHi0haykrjAsdmPjx8J5WF2hGCi1bgySFuzZC6LX9Xd9f2EoWJYgdb+q9WBwDmCtlsTCwCR+phLn3F+fzVsZGUbV+XEq6zm4ldLt6APDQ+1ruOca7Vx2drDec3neTbi9F3Y+e9osE/5RuyR8XgA5o3gSmwhp5GenD9/ep4+mIm9f58nb66+l2u+pvbj0cn/48HY674e30z/HxY/56eLy87AaQq1/EclNjb6DP0ku2Whd8kvY54TclBIWBuW+vLlWyDRw6Iya1WbaquCAadYughsL5CGtMQEaLatskOZDvven1+q0N+J+/vap6RsjzDC+cygTmsdrx0qRdZTjY5e3heN6f3l53w3l5WJ9+HOcyBaivlVrTTwTsntfbz5/+BUfNMr0=', 'ATG' => 'eJxtUrtu4zAQ7P0VC6axC674EkkFkotUKXTAVSncCXoDjGVIipzk6496OcWlW87O7sysFA9TDZ/v7jokpBnH23MQ3O93vEvs+joQjLHAMwi0RUIql9W0zbvrQDMPTW15f+k+E8KAgVYMlGXkfACIi7Ia5sKXuWtvf7OxWRZkZEU9fpuxqnWOdrcsb8evhKAh4El/qInQAHvVTE4hF6/L+5sE28ZgX7lIBbtWXK/r+g9XJqScymtXFARmMp3FEvLRu+NTdiIw9tl1qLr+PSFL6bKxPBqF5gRDnrnyiJE04Wkz+2M1IU9VVf2Y1BZYo61AbR5GtX1jl4fXZXSnh9FGD+0kmEK7DaR785c5wVGCYBJF4687cS4aOhfUVxeyu2LMiFz/P62ZwChC/ja7E5qjTlcI2IT8soVY+41UHEWU7sFmwkMgL73eLwJKMVSLPwlSK+BWOa0woipavyLnvq841T4hNcwjiqdSiplvHFUGI9ASLeURSmoU9YENGO0fvmepDoFLj1h/gZRLiyEY6xSHdaFBRbk/6LID5onU6tVPI0OF8vsRocoLzrcIcVCfD/H8Y58P/wBGI780', 'ARG' => 'eJy1V8tu4zgQvM9XEFoskBxI8yVKCuI57Gkv+xGKIlvGyPHA9sbZfP1WNe0kEyeIjUkg6GGy2Wx2V1e3rzf3c/WwHO8202LYbn9eTSa73c7sglmt5xNvrZ1AosgiVw/j4u7HW4KuaZqJzBZqcTstZmM714tudbfR7bpQ94t+99fqYVpYZVWKVsXaFt+/KXX9s90OarYYx2nxRxXb7nZWKKz/B4IDBO8h+Ld9LCZHwrPZk6RLWRbvZ9m52NEVartu7zaz1Xo5LeRzbLf9hU7xUm26duwvTJMuxZbDBlzXFk/7pJto+0JttuvVjx4DdRmibQ8Dere43Q7Twhkn5ixDk0ytfOlMUL42pUp+g6czHncwTWdqbaIJ2pmUn6P2wVSwaKlNpXw0voOEanCXuF00SUXOBA3NVBnwdgEaoTdROUaoCgPGa2xcQtwpSmpvnPIm6sR9Kw1luL1OOmAQq6FLO4vlHHUeIljjsxPhkX83vZK4Xg3rfobj4+SHI1v7Z6GGfjEftodfL5y9Xm3pae9hRrQWLrGXn6c2foXSVL1l6xMobp5AccAA8RdtZKiraGKH5Q2cnxAdxbB5QQHdbUo43GmHeCMktcaMX+oK7vYSzYY7e0wyJDoCKO8f6+ZrQnCu2pNCcK7SN0JwPZnL60h3d6buxqrgoTk+af5tla7+fJ362M5use7GXnVgUMwUqvtvWmC6UGu8k6nOZ6v4klIJ7uEZ3DGUzh0tyWgPvgERAfEd+KZSFqguAeeIqIFlFEmuUYnQB4FV2vi2UhDjpUskAJLhcWkVcsUB9jgol+MJvmJmQEmAHJIGuRHJftgmCoF50p72j++5+fZUNy/b7XrxcKGdmOVYj8Cc78ev/yrFs1MVP9ctVxv3rr75Jxn6ssy+ZLrgEFZQU9Uydjl+VMEvj7BHXBJpUp5JAwoZgGAlslKFUMBYcErTSLzLXzTxgkQwCTSK9bVJMufbXDt9NlYTZsANrsNv0C30vRwpCc4O+oBAzqKyAVN80yCdP3QeR3lG7VQsg8AmDonDxMa4TkonAA4sRsGog25CMotKzaVhUcv5kwyJ5fSAZlEutZgeRYAGJK7ipGlk+1xvMY8nz8VBDitpC1Cw32p9fo1JhS3YbqSOdlBDDQ2o7rJZxUFkJxsR46URSRKgUlySkJL4jGJMhFHSKfCYB2X4CFKxjP/YFmRqCfsHLO4iIy3H5jbw34abejEEx+3IGdwn7KGRspNIKNhYMp6jfH64MRsobF2bpuUX70w5VQaLhK/eo13GHl/zX39U3N/mPxvIR8KAUfopoMLKB8BKP1YtmrT9Vk6aNfQFmcIMu4JGcIUyNyJQpMG0dwG7BMGIRus3amkU9m5iHPMu2pWM95H5tyeaDy1wcwidFx8BjdJdlpJCkmhkcMqwgQySdQx+YA4TzoRNto0ISpv8kS3stHhes/1kQHmqOi9TXgJLbOH9LokP51OiBifGV4VS/oIUuV7ixM2+YgY4WGomcuRDf71y8PxUfIDd4GDEt8v4Z/3z0hi6fernZ654jhnKxCcYhNuctPKVFFVSDbPZNOKxa/4X+/7tfxHYWwY=', 'ARM' => 'eJx9zr0OgjAUhuGdqzg5ztCPlhAklMHJxYtoRKBJ+YkQSrx666CDJu7Pm7zVsnW0D25cNPfrOpdCeO8Tr5Lp3gkJQATBZBvNrTNdbK/TuMRmYNrszZ+mXTMIlGegrADXEVE1m7Wn1jqn+dAcgVQyhf4SYB/gluY448HiBwNKGbxxYP95K02BD1fym1ev9zp6Aj9RPZs=', 'ABW' => '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', 'AUS' => 'eJx9VD1PYzEQ7PkVq3e1Ha+/fSIUVBRJS5EOHYREegEE3AvKr78ZP+B0OkSRlb2eHc/O+uX8ZbqXt8P48LIcdq+vTz8Xi+PxaI/BPj7fL7xzbgHEIPvb5bAdb+7N/tfjw4u5+T3ItL87Xj6+LQcnTnJ0EqsbLs5Ezp9uXney3Y/jcvgBBlcvB0H9GsAdgBOAV+40LP4Db7fbjjyEYhNY1XtpzqaVr4ra0Kago1HvpDYA5sW1j25nousHhgeriBpB+spNJrhRFUmcrJwEf/3Vzc93t7NEr160lweQe+8mT+KQQNDAcjqYBgSIRAtzWYpHM2vC3aQ2UUZEfYuixvuVb+jkxN5nHVLrDqKgxet3HqzRDU2Y2F511+ixug14qpsqvPDumjZuvmnGScs2wW6iJxPraa0hf5LG+qUXf6eQfJEAimK6FG8zfl64MRptZYgMBZ4R0HHvwUY6FIyq9UadbYaGCSzIQg2ZGfpRrDIbpU+JtwFdWJwZkFerm4MJPEECArgKpkFBEw3kBw9HpB5kqT8NsuJIlFOyVRrLkKKgjGtyX0BGBre6aNVkR+2hN6ko4eazx7llNqoAxI5kQNOz2kDdlSF9thrAX1ehElDHTCCTbBcSekXrtQzKTv1mnT22FeCR/LNuT1ndxAShtBwr6YrQqfHaoR+u0yiqUGILKfCFgqXQ8Sr0sC8QmumDwN2VlZUaAhzB2NXUMI9zvl870Tz28v4AElXDoQ9Lynuw9UPHKmZcDKIRtxWOXbpXrb+BrqG7UiFklvzv6NNm7UOUUBMNiQklCScREGyaCbiLIZoQ8NGitYhsPyLYsCBUekPBHjC+tRh4BRwkBJvIVWK6hzL3iBJwNnCCAU6j2/69nfNP8eLsD+oUIWE=', 'AUT' => 'eJxtj8sOgjAQRfd8xWRc0w6PGDCUhSs3bt0TaEuT8gggJX69FV0Y425yzz03mWJeNWyd7WeB7bKMJ86dc8wlbJg0j4mI+waCaQQqW+nQ1EM/h9WCsBrpzsMmkIDgmBKkGWEZABQalLE2nO5WCpSr7Iem2YlnY7W0OxZ4UEoh+OHrx77QjVp/P5D/addZRLH8FZL4rXQUJlHOch+x6Guk4LoMitcTZfAEWHJBBg==', 'AZE' => 'eJx10ctugzAQBdB9vmI0XWMG2+ER4Sy66oJ+BHV4SU6IAEGar6/tBqkl7YLF6J4ZXZl8nBu4nc1lVNhO0/UQhsuysEWwfmhCTkShFQjdSWFtyibodH8Zg/KOMHfV8trfFBIQxJJApoTHHUB+LacW6s4YhS+izrTYI9j9dxYBtVbOVr6x6I7hE69OPBPZhgv+Hyf6yCq54VH8k+tu0KYCbYsKslR/KuSSEAaFCcf1Ul3Xfyxw+r0QE26aPndyl1yhs0gl2BeEhCXAI7a3A4uDjKXuc0NSSG6JJBP43MFHFAcrLvyZ1Bobe+cjD90tNxRCft/xsXNrAqstHm38s+Tupx53X28tfZk=', 'BHS' => 'eJx1UTtvgzAQ3vMrrMuSDLYPm/CocIZOHVqpU3cK5iE5gIBA2l9f84iSSslifz7d9/Bd1A05uZxM1Sko+r554XwcRzZKVrc5F4jIbQeQMlWQmTinZVJXHf3ugAylHl/riwIkSDwXiRsgHDeERKnOuglYmJiy+Yz7YhaIYanaejPVstIYWjdxUvY/CpgPxDZ9UEcQLKzgYAXf7OsX+KrGr3KzDb/6RPki1Z6NVqAHXdVpCmRqppORgnNrdtt4D6Rv46rL6vakYIYm7vXOEfs12S2Xgm2WZUui0AvYYfpeQUM//HJYUNj7Fus/SYeI9zzpuuywMl3J5HMuBolOvYeeUiDzZuYJqXQC5i918UBtGaJDMBFM2t3I0CYmQnr2vMPv06BdP2SCOshCgqtMxPPjJprWftz8AVAxj7w=', 'BHR' => 'eJxlj0EOgjAURPee4ue7hv6WWosBFq5Y6CEQKSWpQIRQjm+JK3T5kjczmWxaWlhfrp9ytPM8Xhjz3sc+iYd3ywQRsWAgdM8cjavaqKuHfooeFmHpGn8d1hwJCJQkkJqwOABkYzVbMJ1zOR6NMQghfA+WDdYSrJKQ/Yl1w7lQX3drozJVjnOKz6H4lir4QZ6KHQutd5xoueOwa09SbsvZ9qk4fADyLUDz', 'BGD' => 'eJwtjsEOgjAQRO98xWY9QxdsiDEtB09e/IhaCjSplACh6Ne7GE8zhzcvo5ath/0VxkXjsK7TVYiUUpHORZx7URGRYALBtxq7YPrc2zgu+bNF2LxLt7hrJCCoJYG8EDYZgJrMOkDnQ9B4IqqNdAi8fzA4MLgxeKcPih9s/WyDA8uiigVg31wkl1ljWXP+RZ2sjCyPkTouNdkXOvkzjQ==', 'BRB' => 'eJxtks9uozAQh+99ipFXK3UPM/gfNo5CD3vqpQ9BaQioJKmAhWiffn9O1EPVlRCM4ZtvxoP383qk62k8z7Xql+VjVxTbtsnm5DIdC6u1LkCoO7K7jsP5/X+gSSkVt6+KhrdadWNz5KG9nGd+fVW0Doft9+VaK02agtfkK62eHoj2H83SUzeMY61+aG1D7BQh/wVgD3AF+Kz/quIb3HVttOEOW+PEISE//S3l9uZLWu6quePOJKnIuFLKliOZxMaTqySwTWKpdBLJS2QjARQ7MpVYtlKtMUk5srUCXlzL0Gg2AB3uDgiwnFmxhxxaqThERmglca6DwLOxlDMJNngCQU9GUlOVhCvPSLMPAK1vIS9ZsttnI6EG3RvwyPQoTRG1cmTIWA9ZVjvNJUjsKuZgLYOYZ2f1aLMFq/g5nT/zgW5/btdPhw6TxZS24W3pa2W0/qmoPwzHfvlcLVNznrvLdKrVqVmm4fqIpnLLhoLLG9K/snifj83Twz9dd5Qn', 'BLR' => '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', 'BEL' => 'eJx1j7uOgzAQAHu+YrVXgxeM8jhhilQ09xG52BgrDkbg4ChfH+NLcU3KXc2Mdptl1fC42XEROHg/fTMWQigCL9ysWUVELBIIRgrs7Vnn5uLGJf9VCKtR4eQeAgkIdjVBfSBsM4BGQ2+szee7VQLVqkYnJcLiZ3dVeTDSDwLLySc44tPZDxD7PzE0VCUv+BpTHT2R/Se2psCvvpdHumASEvyW6iSlzQeRlwdOf2Jd7Yo9UBfPTlqa31rDdJs129tt9gI+905C', 'BLZ' => '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' . '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', 'BEN' => 'eJx1UctuwyAQvOcrVptLcsBA7OCmMjn0lEul/gKNsU1LbAsTO+3XF/KqVKWHhdHuzuwOFMNYw+lg20Fi433/TOk0TcmUJp2r6YoxRkMHgiklVlbVxOy7diDvHwij0dNLd5LIgIHIGGRPDLczgKLU1RBBgHtr+jflm7OAwks25PuYq4y1EmunvhBC+VXkiSB8nTVCiDFEQ8LxjfSqRW9i5yH0NqWoIRZIlJR4dHYxV0sE71Q7VJ07SDwo78xpkWwEh7hskq9YDkSsgXO+vC4VZOI+xB2tlqhH3XZliTB4131qMpkyqvPeP/QwT/kmY+xig509pGkaPezY3cAfSlWV4kYJzXfjAe9C/Ecr9YrzXxrwfPOQVtD68k7hKuInbmc/MviDyQ==', 'BMU' => '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', 'BTN' => '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', 'BOL' => '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' . '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' . '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', 'BES' => 'eJx1zr0OgjAUQOGdp7i5ztBLaRpiWgYnFx8CkJYm5UchlPj01sGBGPfvJEctm4V98OOisV/X+cxYCCELRTY9LeNExKJAcHeNxtc2de00LmnzQNhcFy7TrpGAQAoCURJWCYCa67UH47zXeOK5kGWDEPtbhH2EW4RXeiH7wcaYoyz4H1l3ecvLI87lF6vPdJW8Adq4POw=', 'BIH' => 'eJyVVMtu2zAQvPsrFszFPpDim1Jh+dACRg4K0FPvqi0/APoB27FTf313KSsKUqdNAYmghjszOyvZ4+N5CS+buD2WbHU67b9k2eVyERcjdodlpqWUGVYwWM9Ltoj1kq9nu+2R/6wZnNfN5evupWQSJHgrweaSTQYA43mzONIGt7O43n+vT6skULMWRXxP2GIdI9/t69n69KtkIjDAoieeO2FArnyuhT87pR8TcmXZTTPrRJNZ1rmNl63g4Tk2JWvOzXY3nzOgYk52JXs+xOFDPWJwOtTb42J32JQsbWN9aoa5HMFxVsdmKAoT3OjWbN9qyR6kLP7a5A/Zt/mWN/0mE2/jvHA4LqcU3hoJwlQt9gFxOm0NrSlEgSNWWGuVBuuV0JHrXHjQUmhQUuTcGKEJw0UKtzIuvsJUEAB3hmAsIlog1CJ63aCySU/cOC4Up3IiGtrlRNQrPIqkTlTX40Bd8NRFK5s4Dtn4TLi/PhnvsFOTWxFiC4Z3RroXbE/gTyvzamVuVrazum64t+iMi+ts70UpuihWFP8KE7C6i2NvHga1cPE3j0BDqbSWWKgFDvb+tOznI9iU47MRKmVyUIWO/5PA01Kk0z5DoRAKZJ0r/BCC8I/WVwhYUDqPvXFVaHw5yqqIAn0C0yXA6510aoNKQAWw6J/Q9Ol5i8oqDabCvhWE8LFsVSBGcdJs+6FU3AbCbdLlDt8RyDcTqRCmDswd6fZnN86Wk8GY/usmg99IiyVy', 'BWA' => 'eJxtz78OgjAQx/Gdp7icM/RUQohpGZxcfAj+tIWkUgLYEp/eCkYHnW74ffJNjk9Ow3Iz/SSwnefhxJj3PvHHxI6aHYiIBYHQNQKVKXXc1baf4sojuE76s10EEhBkKUGaExYRANegOmPi8W6kQOlkb5tmXcI2lHO7zgJ3RHWlFEJoX0OkDREXIhd6IPvD1dfus02H+6PfIs82QflHcKaLiL8eKqInrBpEfg==', 'BVT' => 'eJyFkstugzAQRff5CsvZtAsPfoAfFWTRFZtI/QUaHkYlAQExKV9fE4jSRaVurPG175k7luPBVeh2bi5Dgu04dm9BME0TTALavgo4pTTwNzCq8wSXTVaR+tReBvLpMHJ1Mb23twRTRJEMKQo1xYcdQnFelMNS+PLU1N1HNto7IMOr6vVu0cq6aUjbZad6/E4wKIz8paPHWY9zHpfSGQcbKXig7i2CR4+4WjH9tSkSXLji0uY5RsPYt18Fmep8tAlm3YjR4idL3wRf++Zln71ucZ5hErwvy3KNQbheghgDykWMp37/DPPbkSuuud5MkSBKgbacae/jSoJ3RmI+cm0gJCCt0MwxYyzxxey7KJBIcGqZoRC6ZRXpXZ3Pghl/yIFZoTQIx7T2OG7430EoFdpsj8iMBEV4BGHKJXORiEBZIkOI/veumTgP/RzSaCcFRN5rHvPHQXXYxcu/OOx+ALF6l6k=', 'BRA' => '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', 'IOT' => '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', 'BRN' => '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', 'BGR' => 'eJyFz70OgjAQwPGdp7icM/YA06ihDE4uPgTaDxorJVAp8emtJk6auF5+/7tcPc0GlpvrJ4FdCMOesRjjOlZrPxpWEhFLAsFKgdq1JrcX30/5OY1mq+LBLwIJCPiGYLMlbDKA2oC2zuXj3SmBala9lxJhCqO/qjxaGTqBxRDeOPGhDd27ELiSvORFiZDOnQiqkrq0eS44HemB7Eegtf7ov5Zox7n68AS/gpqZJqtfLzfZE0fUTkE=', 'BFA' => 'eJxtkDtzgzAQhHt+xY1S63R6IGwPUKSicFr3JCDBjAweQ8CTXx9BHpXL291vd+byafHwuIZhKlg3z7eTEOu64qpxvHuhiEjEBIO+KZgLtef9xzhM/N0xWPp2fR0fBSMgsIbAHIiVCUDuwfUh8PtnaAvWLu0wNs3uRO9Wz91uF+ylaWM/MYjdb3tBdkRboblQFc8vJp4wOq3lP6Njfput6KIMoep25TnonNO/4FWlJoIqs6i4JMszhaaTWp61IjjY6GlLaECRCVHmKLcYbDGIOylImaH+Q+1ZSQP6qNH8LOfCl0m+Pa5MvgG5SFhT', 'BDI' => 'eJy1lD1v2zAQhnf/igOz2AMpfokiC8tDpwwu0Km7Yku2UMkyJEVK/et7JO3ECJJm6iDo+N7xeY9HQethOsBL25yGnBzH8fwtSeZ5ZrNiXX9IJOc8wQoC9T4nVVMcaL3rTgN9qglMdTl/715ywoGD0Ry05WSzAFjvy2rwAYa7pj7/LMZjABQkqqifvVbVTUO7c7Grxz85YRkBLPpBHWcp8MfUySkV8jGsLyS5EpMbMlglN6/1IeL656bMSTmVp26/J+CLqTfLyXPfLB+KFYGxL05D1fVtTkLYFGO5tJq5FQy7oimXzKksXV2bfWs1Jw/CPhkV+2ypyCyeXEvLLMjUbIOAHV9am2bMAN/KlMdc81r1dpB77q7iTopPuCZznnZpuafHBMUEfAGtqipO9Ao4Uny72KY2mqlfiDsGLVbojGVfoJSzzHnLQmgL/uEgQFDpDBM+flW9jir2/W9iPO7kvbepcyyDW1cTDSJFS/EZ5ja4Yey73+XdDUWBzvXe371iLg5XWg74VTNJhWOKKSqwT8M0RT8aAtQlZRqcTxpU/RoDPNc1I3ioxArn96YhERDKr+2lpThdA0IIZgLvf/kIxf3Fvve4bvSyeGehPraIO+8cdHSIM18nh81i7X8Em8Vfr7L/TQ==', 'CPV' => 'eJytlD2P4jAQhvv9FZa3gcKOPf4+EYqrKFjpqusjSEgkBxBkw97++nMcQsgtS3XdaDzzzOvXkyzO7Q591H5/TnHZNMcfSXK5XOhF0MNplwBjLAkVGFXbFBc+25Fqc9ifyabFqK3yy8/DR4oZYkhLhqRlePmC0GKbF+cuCOHGV8dfWVNGQIb7bMgfu1xReU8Ox2xTNX9STA1GoeiNcBBUIlZqC1S3ikNJYviJkys1GbBxXDLMW+x65Ond5ynO23x/2G4x6opJNzDF7yc/e83mGDWnbH8uDqc6xTH0WZPPOFfUzNF5k/l8Rp2cX/WOalP8WhTFRCcIsTIgWmC6JFZqqkad933McmvErRWoDVcM9S0oTfvWz5oKJKyirrQKKP8d7x7Dx8xtLhy4O6ZCggWnIle4Afuwtyg2ObOxt+aCI+EcBRSkIGBUrrhynnATLsiBmiGv1l2plGx6Zkh3FlOkS5XAqXoT3CBQAeZDRexeCanGTn2jjp3TkVOs7rC6JgBBpwxlQ3sct3YOCW2pHqbJsXFtGA2n1vkrVD7SKsBRdeuear05cEd9ptVctcqY1Ly3qQeDs4+s/caE0Vt1Dw4GKCJVfDIzuvDUXT05/OfR9Io76LkIgltPsAZNJT3bhYAFXhMhw75LMW5Y5OrIVV+53y7DWlkEhkdRNefdynLp4i78L7nBhfC3ASL53av3KwZWhUsAFf6xWPX0g+g/w0WyW74sur/q8uUvOhU9MQ==', 'KHM' => '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', 'CMR' => 'eJytk0FugzAQRfc5xchVpWRhMzYOhAiy6CqbHoIQg1EJROCGqKevcZy2arKo1Hjlsf/7/jOS0+FUwfnQtENGtDHHdRCM48jGkHV9FQhEDKyCXCTrc1O3b/eEPEmSwN0SqPcZKZu8onXRtQMtDgROtRpfunNGEBAiiSBXSDYzgPSYGw1l3TQZeUKM86UiYPlXK9SChyw8WekWP0hwIy8U5yK6yJ3UI9Ih7uQeVhZ7zj0mRcRiwK2N5CBXX6HqN2H6vB3Krj9kxG2b3Kh5KBCExAUMRd6oecy4XQvXnPOYprHz5TXJdJb7PumKCrakTAJnIUv84077PihwM13rXpU2iGXGem90RjjiMwGt6kqba/Uj3iUL5WCTeL80qPzmxnb3V9u+M1PLsfh2/bcZl/KBbvTBdl+tuvGl01/YzD4Bj+TlBw==', 'CAN' => 'eJxlUstS40AMvPMVKu9Z8mhG8/BWwoETB/iIrMFJqgyhSCqm8vW0zInay3hG3Wq1JG/O1z19vc3v5213uFw+/vb9siyyJDl97vsYQujB6Oj4su2mebfn43h6P/O46+h6fF0eTl/bLlCgYoGshe7+jmjzsbscaDrO87b7M01TR0h+1hxEKRxSGqRewX1E5Nb1/2W85PhPX3+SWEFGkpZB2pq0Rm5vOQySfwHWBhluzzEoxRRn1iSJTIyK4sg2GpQQrKxSSKs0zrjEPJcihZvYCpSVNLAkTqLsGOGo1EY2BBoEPNfl2ThWiTMqJM7KGgDaCE7jIo0SvilCAIXYmgwYVOCU3Uj0Ag1Im3mQyDCUf8jAUStJhovMiPoFz1kzV4NkhK6bRKVIwIzgK0MjwgtQtuKcQlZdSZ0NYx5R1ySpT7EYJAKq+0gIuupMJW+7rs696VUxKbThKmECVGDIe4NfNAycsBD3aOQtoW7GnLLzC1csAARb+YTFFxrcVV33vvFf6/7uG0HQjto=', 'CYM' => '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', 'CAF' => 'eJyNUrlug0AQ7f0Vo3VjFzvsASxE4CJVCkdKlR6ZU1obCzA4+frMgi27SZTu7Zt5x0ib9GMF16M99Smrh+H84nnTNOGkse0qTwkhPNpg0OQpK21W8ebQnnp+KBmMTTG9tteUCRAQ+gL8SLDdCiDJi7J3gODBNuePbKhng4wtLPFnx5WNtbw9Z4dm+EoZGga09M6lQh+0qslzJM+aE/hm3s3Ru1vOUd49K6kWu+5ii5QVY3Fq85yBW+YuLGWXzm7W2ZbB0GWnvmy7Y8pmaLOh2MyhXKvtreOjYcrWQpS3boFyzYyMUY9Sxm9EPKo9S8pSPEliieGi+gyk+l0lRJyJJ6EyEvU9TgnUfwU+dZSB/JeqK/JFpHyDhk7DoKazMJ5rzuTf5x1jCgGpaZFriQFXEiOHNCi1J70PUkiQIcZgIqsjVJyelMN1iHofUTswxg0kmn1EcydYMhOv2q0S9wF3qx+Zpq6r', 'TCD' => 'eJxtz7EOgjAQxvGdp7gcM/REgsZQBicXH4LYUkgqEMCW+PSexcFEx8v3yz+5cnYG1rvtZ4ntsownIbz3qd+nw2RERkSCBUKnJDa2Nkl3G/o5WRSC67Q/D6tEAoIiJ8iPhFUEUBpoOmuT6WG1RO10PygVFt7GemnDLDHmOhUHBG5fOdJmu9xx5EJPFL980mqjeVZ8Yb7+8rhpaPMsg8+C5+vjS2GqqHz/V0UviSdH0w==', 'CHL' => 'eJxtks1ugzAQhO95itXmkhzwH2BDhXPoKYdU6iu4/EsOICCQ9ulrSNK0Ug9G69HM7IfkZJhKuJ5tM2isxrF7oXSeZzL7pO1LKhhj1DkQ6kxjYU3p1WnbDF5qEaY6n1/bq0YGDGTAIIgYHjYASZYXwzK4MbV1927Gai0weFOd3i1aUVvrtZ1J6/FTI1EIzvTm6ioZCaKmkIsj+0J676KPsnUJfWxJyltRf7G5xnzKmzbLEBazt6zReOntbmv2CGNvmqFo+7PGITU235HYV+H+jvWE0rgtiuKGI0LpgBzK5KajO0+g337G/NjI5x844xpg/9t/6rlUJAIec6KAi4gI4FJYz49JCD4DHhDlBRGJTjIAzn3Crbspj4QnLpakDCwPndep60cRvoSFCxOXuGn/M2Sh+OD5A9nBVkpGf6ATWh42yfICDptvtJKQqw==', 'CHN' => 'eJytkrtywyAQRft8xQ5pkgLEQ7w8lotUafIRGlsSTGTJIxFLk68PCLtLqYLhzu7ePbBwnO8drNd+mCvkQrgdimJZFrIIMk5dwSmlRaxAueSw9n74/q+QWWuLLYvAXyrU9nWH/XkcZnweENx9s3yMa4UoUFAlhdJQdHoBOF6adk4iylsd3GauEbS+7yv02rYUQYx8YaKIAYoZJIEZJsLxX1RsPYpnk9zi4W0aduYy2yPWRew9Yj/p0/YzN7Ad+eCmpo2OyF38JbgKiYh1je9cqBCPOkz1MLfjdK3QtQ6TX980I/HKDNKFNAfGaVrve7TGjBMhpOKAOSXSaAbbrkwJj5zWwEtKRJzjPkhBhJFaRKIgWlprIAtl4JGLEWPASrIPURGZxpd4VJcW8q4gx+0GY2ofFivzW2FmiBZSashCCMgpbtM4gTO18Y7py59e/gCzndip', 'CXR' => 'eJylVstu5DYQvPsrGgwCJAdy+BZleHzIKYfNRwjyvBDZXsxMPE6+PlUtadfALrCHhcciJTa7q4vVLT1c3g7y/jy9XLbmeL1+vt9sbrebuyX3ej5sovd+Awszm9y/T6eXv79nGPq+3+iqkdPT1uyn4WBP4+vLxY7vRt5Ou9sfr+9b48VLzV5y8+bxTuTh83A9yv40TVvzi/cxDE9GsP8vGB5h+AbDP/1/ZvONcRjbkOM3xqvpeDqP005GxEzRGxn/3ZqYMTlvTelcM6uf/X6sqf9BgNiy6ySGPGYprkjwErKrvDQJ0UVJWPdY61ySivvo2pA6SXzKv5QsjNMF9l5csdmV0Vu1swGedBSXZb7AT48rnFvcRtfZJBmbqksWawF7ios2OuDCHNhcxpjUj8sTsbk6qgegKYotMjRwaIBoufBxdMjB6pyu4bPDP26EPhLSFBckL3GKqzoiXwIUIuBqBRM98grMGaAT8DSgQL42eJg2IlgmF0vqsiZSOI7MS3NIjIiFrOlXS9KZqtLvETarIenNM9qKuAhPYHCA2wInAWEAGJaMFGDI87JVUwyBoDjJyihzUJSkvtjolShMwBhc245nBFptQagAhJbcY4n4yWuyUY9Dj3R+HLlRicWPWBwZIcmJGoD3iod8tox6IMX2rqfLwgu96waSUhCdLGRkHgCb64k5M56eBXxRll/HrLnNcZUU5gT/0RbND3qSD/nDsqgm6V4FxIwrCZgs9bYcFPUY9FSqhqmk9XulupSYVlKpgfRmoBot94Bu0AaOSF0mU5knOYuiKcOB3Ai1zTqjwhoEUAUIwYoWT9FiyVp4GWdftehmceEmqzCwoLWJXeHLZMi94DdXKRUhIL2OVWNRCIhS1XuMKr1M7ojDUoqJMgF5jTX9ZcYOYyMrobIeO9spP2wiEPQQIhzHNWjqASf2rk6drjdpmmAaq+aUOaeOlxESkaalEbULKY7QzSrECqOB1bgOiVxFpE9Y4JHCp7eoqke3IEhNLTH3op2isKFB40V6T+TCVDRe08CRemxDbMQ0X5VAzGfd5rHNEpdE056RqaGQtDiDVvTatULUAkBFz83Famdhijw7MNgr7XW+as0m5jNL3PaQcNIZtQrm59JGH1z6SLmwangQRSs9jLTQolb9JQWN/mxL/tHLprRGPj1YGKKWR1OFoITKUmofHpOSMnf01fHha13sjVzPw8tl/3p+3prn4Xo+vf/map7Vq2Pzv+ubckXEt+ugSJ5DoxRCj4z09RE59hQxwwNKN1+SNsSQta2wHVceEHZWYC36wkLB43g/hYanJUxcsUUbdyjciQS8ulpqLVJwK1UrNGKKiT0oJXY2HjUiBk4goOUsw7JUsVSIofIVV+wivUoNJsVmXfgUY4Ni/aTPyseQ/1x2ol8c98fzbg86wcrt9HQ9bk3w/lcjx93pcLyud/gQAHQj/A6oAPUTfqAdvOzUVUCRx59wFTwqUT21sshjc3i8e+BH1+Pd/xKSBi0=', 'CCK' => 'eJylV8mO3DYUvPsrCBkB7APZ3ERRxrQPOeXgfIQs9wb3zBjdHY/jr09VUUq8BQFizLSGIt9ar95rzt3148F8uj8/XLfd8Xb78GqzeXp6ck/JPV4Om+i930CiayKvPp1PD+9/JBjGcdzotDOnd9tuf54O9jQ/PlztPHfm42n39Ovjp23njTcle5Or714/M+bu3W5/5QLLD9PtKOWpM3jee5sKpEeXTQy9q3hGW71Lb0JfbOpdMakPBjvBhNibcXT1nALeYsyuvPEmFH+2EHYRy+yS4anlaf/GNt1zGHsbYH6wsOGwrtWNdEXD6XO3+Ta6t4rud29j8KbPbrQD9M4hZ4QYvCswF8yY8JayG0zIAaHgPcFDQjJh8GecQC4HylrJhgzf0F483m1WZJrn/el83naHy273sPg3/ggkPwLJ3/yqNJ8u83lnZiCdou/M/Oe2ixmLy7YrxQ3dYuf5fr9DaX+glb2rX+sxxe4r/99pBT+uWmFAos2f9n7k74uEnldPjnXmers8vt9hY3ibwj8b9un07naEWde3tIPvUd5yDIPrrywacHTRRpdnG6yrNnPTJjyJarQijss2G+5BrU5DGg0/Xj+RVOqPMFGurjeFUgaE6GEQ1aqwGcCIEdxIOA/FpalwpQct0F0yIbjYVDKjMtkFhQCPsA3useLQiAp3wHm2pAfEoLR4UTp8keCw/Pn8PXBfMCGESvcxun6KyeC3BYV4EHU0sdBKWYL1Cga1YawV7hpUoxX52SmKVfEBjIJPhji7MBjSNylo5pcsP8gJutkOtpLAaQpIYwHXBln1M5z2TNQz6d7WxQ6ihf0quwjJoA2Rb3LcTYb+g6FtIcpSsgSwgqUqawlmYAZIIDBmIReUSoZqVUWTQE/aSXZQ/qPlWEBRmEarenMG5Bgd0THsUiJC6AhbQ4AoMUrgtKyJCDxHlhhZ40j1RAx48jBbio6qNNKBJEGLkh0E4ai/iRARjyRmNqukJlMclIbCIp8zTyDUVixVL1+9gkSWypgcIvpG5HUSVtxk1oiwQAwoDxxdJEIxTHiEONyb3LrBRIkHIRYbxDAcl/S1K8oEUXt0whCFQQuIKNHAMNNc3DYP4HpCgxGQtIxOWRFW2GjgLR4jq0GcDUJ07UOKtQbvBQATbiGmZRffEgILtmtTwhReCIGvAaHRGq+2ASGEgm2MzAwwqLuNBFkCuKAwc9c7SgReIPGg9i2GtY+NQ+pMsbGu+ealDkkVQVdwQgCFVoEp4HQZKzpAHWevZAcpNdbEhjQ4wQxFsEF2yctR7oCeiKUWRZubhYyNB6HxqpcIUWlVqewKggdzxVIYhuCZeQaOuF6FC5pwbCAeJgHCIavmyDbKfVJg4i3RiWv3CmO6VTx0pmT6dXqnVjblp/72rbKaLlJR49dGxWzaEKpKKmmMRY01rBWN0A2qjxjvwlTFu3VQqvXnhZN4dXFBgiWqre8CDRuCss6rNvWLgkZZLL8oyHRFXfRtwdmykFolWGJuHdgYAgt2aS42amNgGwSazq2dRw5tQTOoUBh+0mjYC91mxWqqcjgaFsmqKA000XUZclGTHt6n0K4oeCwD23OKzWpYmewVrgbrwN20zN1MfD7fg6sZEcxL9X1rInKdxjj3lETSB5Ynhjys0Cv4sH69Hb65LZjbZXq47h8v99tOy/N0273wuJi9NNd5Ou9eOF9S/7Jbrmh/XHdGd9BXx8tuDzu4SK73B+9/6cxxdzocb+sbLi5DX+AG15Yc19vJ/7JTkm92YvT9T9j5O56afyacWmozE2oZ/93O2/+040tuaQ1pvbxtDq+f3fF/gtfP/gKUC5dU', 'COL' => 'eJx1j80OgjAQBu88xWY9Y5efGGIoB09efAhCS2mslEClxKe3QtSLnvYyM1+2nGYFy830E8fOueHImPd+77O9HRVLiYgFAkELjq2pVawb209xYxFmLf3JLhwJCA45QV4QVhFAqaDVxsTj3UiOcpa9FQJhcqO9ythr4TqOyeBWOOBD7brV4LhrW1kQIYS5S+h2oTuH7pkeyH7gREleyDee5psQ7j9B1EH59LPDJiTpVyiZqqLy9XUVPQFO8079', 'COM' => 'eJyFk81ymzAUhfd+Co2ySRYS+v/pgBftpot0pq9AMGCmYDxAIM3T9woMIVnUCzy6V0ffPefOOO7HEr019aVP8HkYrt+iaJomOknadmUkGGMRKDCqTgku6rQkVdZeevKnwWis8ul7+5ZghhgyiiHlGD4eEIpPedGHAxyzurr+TofzDEjx0oX+NfSKqq5Je02zavibYGoxAtEvwJ2NE9SOmouf7B1HN1a0wuYh0TolLhdQ91rnCc7H/NKeThgFMQljEvza1Y8P6RNGQ5de+qLtmgT3WVrnj9RLq59utj5MJfihKNiHHWscdSMXbm/ns7pY1aC6r3/JGRNbXqHN/SfyRaepXJ9Ip+4/EdLnymwxwj5r6Tj1RGhN5TP07sTh2lKBuOJUZcRpoqgkXEjqkZFUz0eHONeABJ0RSDtqoCHhE/MV+8G5RVKDHMFogSRXIHEcUtuMAE8LCoUHnLcgsibMAKT5v7eGa5jkLZggPjwJ2PBpKkKhCGwHLqlCABNw4UMlQQPuFLXhR0E1i8AR1e8N+EHBzwJVe+g8QQLUb9CQaa4EaMKaQnYFTbWI7AKFK2CaHVPvjcovRndMuTE/GTXBKEDlLfszFx5WzOqbS/XF5S662KLrlbi4XHYdR+XxEIe//PHwD83T91A=', 'COD' => 'eJxtkLFuwyAQhvc8xYnO4APTM67sDJ0yJGv2yA7GEomj2oIoT1+wO7Ud/4/vP93RzGGA583f55a5ZXl8FEWMUcRSTF9DoRCxSAaDsW+Z9ZeBj910n3nXMwjjNX5Oz5YhIJBG0AbZfgfQPC6LAzt637I3xMpayyD1T0l0SQxJPOCLFX9kW/UkzSYrIwzUdKjJKxSGUyXUUZaVoERdTp6/a6FBy4SyAhmujGf263Ub8DP1dSLMayOUhEEqdBp9QjzFMzqu8Z/tuqtEJbft8r1r3ehQ0zHHms5rq8k/tt99A3yeVfQ=', 'COG' => 'eJxtkc1ugzAQhO95CmtzSQ7GxuSnrXAOvVfqqXcLDFh1MDIOpH36roGIqurB1mi03+xIm/dDTe5X2/YSmhC6F8bGcUzGLHG+ZoJzznACiCklVFbV1BSu7WmB1mD0+OruEjjh5HTg5PDE4bIhJC911UeBsrCme1ehmQIUzC76XfQqYy11nSpM+JKQnIHg0Bs9PydHkokGMwfMbCiKb2BLIntETqvYY1dez3H+ZrUEPejWlSWQPnj3qeloytBISLsAJPI07pdw83a3VXsgwau2r5y/SpikVUHvph40E/ul9lpawraq+FI3TZe+Z7H0RbH2/Q1xXij+l4uMxUcnFr9/Wa/LmUsFR+yYigZHPzJhI0JWLGf1ZZPHq102P2L7g2k=', 'COK' => 'eJyFVctuG0cQvPsrGpvzLOf9CEQffMqBvOpuSKQoeFcyLHlp6OtT1TMyEsRwDiR2+1ld1TN787I9yI91eXrZT5fX169/7nbX63W+hvn528POW2t3iJjk8X4/nZfPD+bx7vnpxdx9mWR7PF0/Pf/YT1as5GglVjt9/CBy8/Xz60XOj8uyn/6wNk+C5COiLojaEPWXfZt2/4k8n8+TPptv35fTfjptp6fn+3vNXmNxcxbvgqTZG5fnYlw0zsLoypzN7CXTnOCHiQ+wlzkhbHaCQHhk5NFqV1/oCPShUpibad1bNQ6F8ODoSRt7LLBGyQzOcCVDv3awhBTnuJpWEeLgQiF1IdIA8SEG9Gp1ozkuyGjCwjICMnqjWkRb+IAJTYoB0NWEhoEiEkxha6DSGuKY4Pnm53AINYIdt8DvpeKH6sE4BJnAYM2I6FpRCG9B/JyOoTbxDUGLeY/HwEka6eyDFtZv9CjTAQiLUSYicRa20r9OdUZuXQPzbS+QMEYlR06U+U5N0xqYXClwJs8e3FQyU6RL1v1kBp3T6hsltDo+wEcTusYRvMCWWRVZDPbUA6zA4zpW0BIwehqMYeJDaEFC9mtMEip5dcqbf98oROrsynmWor/Al9aLkxcZVGbREig1yF5TgD7NVJLE5uhZKIpX9QzZrsxPRltoafBoFGvtWo8t0oEU+ZpK31VnxvCkKXStsLFI8e87STVYEzpFLlV93/Fo+p5loE5zOaaEJbCQbXHahWyPbRvoeQ7Yj32xlqSQyOd0SBmMhbbQrHqgoIH+kUw6GfIqo4loaFeJB4Kqx3OgzaJbksYJI976zyMeV8cdCCTRj+kT97HzBDkR5Vm4KLtFVe2nRbUC97S7LpWjoH5FWlPCK6vlQ7awFB0JQLgEdSyQCT91UgE13lTjh22Qh9dVjzPqus41z1Po10XQC4UrmHjSKjIyjbl7HNfKjeEAkmetKwisv7g0/3W9Bm83H393vfIqDVwpC5xeGq7Fg6+OuW0LDkN7K7XpzvHhFuUuJlp1GDoOkVepdtlMsIujJvAcrAR/+8vOd9VZf+owPXdMSwCseAJm8QBBTEOlN1DHFZHQ97hBJI+Bjgy3GyghFNwj0sCJ8f7gG6Z54/wdi9R6ATDg8e53PBwxEYkgY5dqb7VGtVtVHm/r/45ipeF2w/dMeTexvh1dyD9LxjrYuOEX9OOHvwFABZI1', 'CRI' => 'eJx1j71ywjAQBns/xc1RWzpsExPGckGVJg8B6MeaCMtjC4vh6SM0QyrSXbG731y3rAbuVzcuAocQpgPnMUYWa+Znwysi4olAsFKgdidT2osfl/IyI6xWxaO/CyQg+GgImj1hXwB0BrR1rpxvTglUqxq9lAhLmP2PKqOVYRC4nUKGEz6dwpANgZs0SOcGIc19p+6QumvqftED+Rtca/1i2x1rMl5XFav/E+Tnc+HlbHcta7OUrz+p46YvuufnffELbiRPpg==', 'HRV' => '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' . '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', 'CUB' => 'eJyFUj1PwzAU3PsrnszSDn55/kpSlHRgYgCJid2kSRrJbaokbYBfj22KqACJyffu3bu7wcV4buF17w5jyXbTdLxNknmecVbYD20iiSjxCgbdtmSNsy3vqv4w8urE4NzV813/WjICglQT6JzYZgFQbOtmDMDDynXHJzvtooFln6znj4FrOud4f7RVN72VDDMGXvTIlQTapbnE7GyEvPfzO0sufsmXYQxKvpKK9tNsOLm6ZPW5PvTbLYMg5iGqZKfBLW/sisE02MPY9MO+ZBE6O9VLRSsYK+vqJa716lLzu2TJboikzZvrhlma/+53fdI0V3pBEnW8iShe7Qkkacx/0H+aVS/CCBP99jEftCbMQBqD2UNgjBDP9E8TkQrMQUmDBoTQqECuyXGdoQRl/EpkmHKTo4gcVyn4QXHUIAJp8vAaMJnXhk0QprgGlXovEbhLgyJpN4sifJ7N4gNqb525', 'CUW' => 'eJylUk2PgjAQvfsrJuNFDx0KVD4MeNiTBzfZv4BIodkqBFB0f/22KFmzMdnDXpqZ6Zv35k2bdJcSrkd96lKs+r5ZO84wDDT4VLel43HOHYPAO2R91er0+QroxnHsjLcI6pCi1FnJVF6fOpYPCBdVDG/1NUUOHALBQUQcNzOA5FDIzgYmzLVqPrK+GgkyvFdNvbE1qbRmdZPlqr+lSCGCAb0buiqIPAovK9fb8i90HlzORPbIm4l3PzYeOXOBTN/W3ZEPXNt4x4GEZhSQII9RyGjFSFQUPmgTZxo2KcHyM8ua4rnVi3m2ROjb7NTJuj2m2OWZLhYUiyU+T2BdpDjn3NuH8sdCGES/DTzDZVxErpjgvndvCMQz/twVMO5/XbWFNE3G6KAOdj7XX3GOUBWqrPoUY24z8xYewm08JxkpX3gQHgXh8j86/qjj/6GzCiheTosuN7PE/rvN7Bv50rmc', 'CYP' => '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', 'CZE' => 'eJx9zrEOgjAQgOGdp7icM/QKFY2hDE4uPgQBCk0qECEt4ek9MU4m7t+f/MXsO1gfbpg19ssyXYQIISQhS8ZnJ1IiEiwQbKPRuKqLbT0Oc1xvCN624TquGgkIckWgzoRlBFBM1dKDsc5pPBhjEDi+s+pZ+VTRjTYUP7I5SSWrL2b2n0upjqf2w7N8D/iDPF/svHiPl9EL2qQ9Hw==', 'CIV' => 'eJx1j0EOgjAQRfecYjKuoWMlBA1l4YqNhyBAS5MKBLAlnt5Sdae7mfz3/mSKxSrY7mZYBPbrOl0Yc84l7pSMs2KciJgnEHQrUJpaxboZhyVuNILVnbuOm0ACgiwlSHPCMgIoFEhtTDw/TCews90wtm1IfDbVax9igQeipiVC8N23lGdJDlT5IuuLqrA/kf3QpDzXX83f7vmRJ+cg0T9BvulABiPd+T72w0cpmCqjYn+2jF4kI0rN', 'DNK' => 'eJx9z7EOgjAQxvGdp7icM+2BiI2hDE4uPgQBShsqECGU+PS2ymbidsPvny9XzGsH28MOs0S9LNOFc+ccc0c2PjueEhH3AsE0EpWtutjU4zDHTY+wmtZdx00iAUGeEWSCsIwAiqlaNChjrcRDLRJKWwTf3z3UHrJk9fRGL+Q/XCn1tSmd2Dl4wfLAdRyuvwnBJ9onAt83ivBDGb0Bcz1AQQ==', 'DJI' => 'eJx1Us1ygyAYvOcpviGX5AAiKmhHcuiph3Smp94dBbVD1FGjaZ++QJJppz8nlmW/3YUhn5YaLifTTRI18zw8BMG6rmSNSD/WAaOUBlaBoK0k0qaocVv23YSrNwRLq9bH/iIRBQo8phCnFB02AHml9OSAhaVph5dibrxBga6s5QfH6dYY3A9F2c7vEhGBwIqesbWiDU8ZEUsSsie7/0DBzS+4G/qg4J6U11ez8WyURGpRXV9VCJwYuyiJzqPZbYs9gnksukn340kiD00xq10kSLKHqSyM2pEs3t+KftWUaEtL+r2g4Onvet/1PNM/9Szh/+u11korP3LyIxC5NwCWJEQcHZOE4evfw6OqrllhmJEUWMYgzYAJanBEnQcj8ZFn3o17jmPLJWAvnmESQRgSgSPuEAO7ssadeGXipoVXuJP4ViAP6sMmd7/jsPkEqnCXwg==', 'DMA' => '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', 'DOM' => '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' . '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' . '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', 'ECU' => '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', 'EGY' => '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', 'SLV' => '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' . '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', 'GNQ' => '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', 'ERI' => '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', 'EST' => 'eJyFkM1ugzAQhO88xWp7xjaBllJhDj310oeIwvpHcTEyLk7y9DU0OVY9jbT6ZnZn+2XVcPly0yLRxDi/cZ5SYqlmPmh+EELwTCDYUaJyR13ak5+WkghhtZTe/UWiAAEvjYDmVeBQAPQalHWuDN+OJNJKkx9HhCUGf6Yy2TEaidUcdzjjgU4R7uOcg2DIahMlNm3LOoSw7chy3YT/Z6qeO1YjZLg+CNbifovEJ6XUH1HzMZoHVbVdtYG57mfuZXL0uid+iNuvoed6KPrtK0PxA4zBWJQ=', 'SWZ' => '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', 'ETH' => 'eJxtVMtu2zAQvOcrFswlOXDNN6nCyqGnHBqgp95VWbaFyrEhK3bqr++snKBpkYNNcTWcmZ0ltDyeNvS6G56PtdpO0+HLYnE+n/nseT9uFs4YswBCUb+q1XpoNrpv989H3U2KTn13/rp/rZUhQykYCsWohxui5apbH+UBj+3QH74303YmaNS1ivpBaut+GPT+0LT99LtWnBUB9KSTZU9mm4rjfIrWPc6Vi1q8cS7eSWexxbvacnMlHF+GrlbdqXver1aKjtO4/9Xpc7+atrWyBziX81oc1OplHO5um3tF09g8H9f7cVer+XFopu4uZo73dGybobvjKty/+f/rvla363WbnH2z7nwhz/GxGHMKVXmUwl/jH491a2dteT+G9HxwOJiriv2PuWkUPz/qqtKa8kHRzHq2mP/02n5sh45azCj6wA6dI2cfvaIRUUAKkb+RGpN+tumfHHbNNPavdxwDyYhl1S5yoYwkPjP2IYqdswFTtKWw04kjBfwcoiHvKbHXAVY5aI/SZecqDpSLhiGACwVtMXsdClssFlvDmVLEBiveOe0TVyBKZKO2CdXoLrsMJZ3NzAIJLggRLrwDfQQ2AOeixt5fnlwEgFzIAzxoa9ltrWf/zcUEuK3MkIQZtg3+knD4wkWwMEBiSYMClqBcGdBHcJAYz9JZgQUh1E4ik7Ng9ZwvO50qtjrMMtIgWziz0leaJbSDCtnM6E9Hj1eoZsEivozmkQjYxB3eO7agtBVUrHGUuWIn3RvJAigsEqnhCkE7XYwkImALE3OwuLMyAJclRgJrEdWEFrQXTYeeaA4JEYZrfFA0Xibs0bGHapxNztlop8Wlr0QDqsVjF/Q85KtmAUAGi7xCkhVJGGQOjSQBQlYuiHhBiDI5gXhhu9685WLzcLOUb9PDzR8QCB1J', 'FLK' => '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', 'FRO' => 'eJxtUrtugzAU3fMV1s2SDDZ+gDEVZOjEUqlTdhSeKsEIHJP262uTpA+1273H53Ulp7Nt0PXcD3MGrTHjUxAsy0IWQfTUBJxSGjgGoK7MoO6LBncnPcy41oBsVy3P+poBRRTJkKJQUThsEErLqp794MZT342vhWlXgwJuqMNHj9Vd32M9FqfOvGdAYkCO9IJjhQRvnaN1jrlbPyC42wUPvzUneASlzc1ruvRVBpWtBl2WgGYz6bcKL11pWlcTkFdjH53BZep322IPyEzFMNd6Omewjn1hqp2rgAXf3/t+t81gW9f1755SkORv058SSoVKvq6TiDNF4papiCRHwXPOpGVKOkjEjCjLqCTSo8eI8ZzRZKVFRLTY0Y6r+v+gMuaKqx9BoVdxxknoHNpIEGY5E0TkkVLWrWHOVEIiH9TiSBx54rzdIdJi/3pPSYPmsEn9RzhsPgGir5W6', 'FJI' => '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', 'FIN' => 'eJyFz70OgjAUhuGdqzg5zrSn/KqhDE4uXgRBS5tUIEIo8eo9kDg5uD9vvnzVtHSwPn0/abTzPJ6lDCGIkIrh1cmEiCQLBHfXaHzTxa4d+ik2DmFxj3AZVo0EBEVGkB0J6wigGpvZgnHeazwYYxA4vrGyrBZWV3qj/JFEiSnaL1ZlJvI9UKn6H6gyFzkvqJTEaduwMXd7VW0P6ugDCsU/lg==', 'FRA' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'GUF' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'PYF' => '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', 'ATF' => 'eJy1lMFu2zAMhu99CkLDgO0gmZJoWQriHnbKIbvubjR2ZExOitizszz9aKcZiiEYiqE7SRR/fvxFC1734x7OXTr0pYjD8LzKsmma1GTV8bTPDCJmrBBXyeqc2sP3e0IdQsiWrIB2V4omVXvZPh0PvRwaAWNbT1+O51IgIDhCII/i8QFgvaubft7w9rka4lJcCWjalErxoWm4mE86lEaDNsqC9VtpUDqVR8KtXM50cRHZgstuvCvtBYNobMgX0ld2ENnByA42eCt7Lb71XJQmGOVHHZzy99V/ooNjtbmvrXcm2HDVsui3Osrg/uakI+PA6KAc6FwRGFIuEn2zFpO0VuZaOUnEmQKVj4bDZNi3JA6B2Dt4WlbJ65wBugm3OTG78Fyca56uxVFSoShyO580qUIaq2jDyVFqnjml2YOcPWzY16Wbu4PGPEriSXGTSP7SBa3mC74+e7nhj76G5aWs4qlu+Jr8uad2N8RSaMSPAmLd7uNwi/jRkHYCfpbCOiNgOFWHvjmeulL0T1WqP3Gjz/+MtoW+oo1/bzS5/4a21i5oY4p3dx3CG9Dr+afw+PALuEQgZg==', 'GAB' => 'eJyFjz0PgjAURXd+xctzhj4+gsa0DE4uru4V2kJSgQBS4q+3EgdiTNxecu65N4+Ps4HlbttRYD1N/ZEx51zk0qgbDEuIiPkEQlMJ1FaasCm7dgyNRJgb5U7dIpCAIM8IsgNhEQBwA7qxNhweVglUs2q7qlqJZ72c6hUL3Gmt9kQIvvvyKTjTlWp/P5H9ENJcxlshzv8IRHl1K78X0mSrcGaKgL/fLIIXa7dJBw==', 'GMB' => 'eJyNkb1uwjAURneewrosMMQ/AUJSxQydulTq1N0idhLVxJFjEtqnr20IZUHqdnV1fL7PdjmMNbqcdDdwaJzrXwiZpglPG2xsTVJKKfEEoLbioLSok/ZouiGpT4DGVk6v5sKBIoqyLUXbnMJhgVBZSTWEwY9H3fYfwjVRIOC69fs+7FSrdWJ6cWzdNwe8B+Shd5ps88b7Ru97oz9Abioyu2IGmUPK+uqxZy05yFF2pqoADc6aL5lMbeUaDqx3gML5JARzOFu9Woo1IGdFNyhjTxziqIWTq3CV9a3rX1MOVlZzRZbGjp/5Dm8eSz7QS6XUDUcBizxL2TOc0mLGWUpxEfk0+4/eU5jFN9vscPY0oKD3A0WO9zFgx9I7X5L6sCjDhx8Wv/T4kvs=', 'GEO' => 'eJztVE1rwzAMvfdXCO8sx45NGo+mh5122Y8obr4gTUrdJaW/frLjjrbQncpgsNOTrPdk+SG8cmMNp13Xu4I1x+P+NUmmaeKT4sOhTlIhREIMBu22YFW3qbG1Q++wLhmMbTm9DaeCCRCQaQE6F2y9AFjtN8cGqrbrCvZSVRUDEn8QqyHWSKx3cWbJPfNQbmdiukyJajLPbNBkP3EFSJOGtiZ73NWHePjsyoKVY9kP26iWOuM5qKXi0kqUPtGoJJcRHBo6oor2YFFzAyJkKCM4BRQo0ECC1Pomhoo+QR3BSVhyDRJmyTUEMSqYidaf+gY6HgRwJL5XRUCFocF8k/Vaqvk4DgTa0TTme2ArwiMuTwrgQg9Q8eXnncpyTPP8KZbIW0sUhZfgl2yRD22RYp75zo8rO1JvB5IfIP4X5GZB4FkL8vct8UviP56V/ynXiy+2QiK1', 'DEU' => 'eJx1zkEKgzAUBNC9p/j8rjVTFSnFuOiqmx5CjDGB1EgVIz19U1oQCl3Pm2HqeR1ou7txlmyWZToLEULIQpH5xyByACIKJqska9cOqe38OKeqZ1ptHy5+kwwCVSWoPIGbhKie2sWQts5JPmjd9QBT7N9ARQ4T6XqscMWTxc4/+b/0O6b2pWh+bP1+2iQvQBE5mw==', 'GHA' => 'eJx1z7sOgkAQBdCer5iMNezsghswQGFFoR+BPDfhFSEs8esd7MRYTXHPvcnE89rA1nfDnGC7LNNFCGutZ31vfDZCEZFggWDKBOsub1xTjMPsNi3Caip7HbcECQh0QBCEhKkDEE/50kJtui7BE5F++DUC9+8MW4Yrw4xeKH5wXZRS6m/sqz+4qKRUByz1EXPa8wRwAme1H1f62pNuFHpRFlBwUzoEFp9WvH+bOm/Bg0k1', 'GIB' => 'eJyVVk1z4jgQvc+vUHlrqyYHCevTcirMYU+5zDV3LwHEDoYsECeVX7/vNYYkJJmqPYBb0utWf7du9sNSPffrzX5alcPh4XoyeXp6Mk/ebHfLiavregJEdYRcP69Xm1+fAW3bthM5rdTqflot1t1Sr2bbzV4vV5UaVvOnv7bP06pWtUqhViHX1Y9vSt08dIeiFqv1elr9cd/hulmlwP8TwALgAOBt/VJNPoAXi8V7pHfWpFfsUu0Pu+2vOaCQWqnDrtvsF9tdP62EXHeH+XdtU32l9rNuPf9uTW7ilWgl7DSjqy51OwrVsHQ+6x6m1f7fx243H7kuVJR7T1pstpv5UWHbJpOUtcl4KD6EUHQKo9qvMoh0rjVZ2ehNW7Rv1zqbRkXTDKmExjS9pgztm1mEwFrZ2jgVABECf3GwWJbG+EHHVHSoQYGwzqRB82xWa/IGEzXxwinUB31+b5OrIUKlutgM0R4mkfjCKK8yDCnU3kExk0Fa0w5CZdm5tdkN0COUYHvtAUSUfRxwCzwRX3obdIAn7jJ8OOhWLPGwxMESujcZi28uJnT4KP6Ye1aNKzKSH35ML7128GMwGfJzgdPhL1DY96aBcDvgx+tJF+jnB/qVFxFIU+rTTpSdl58wAJFrDUKVe29xA4zzzoS1ZlCBGZpbl+yliy4T7O/Hw2H0MVyKbEjWRDC6E+PNZDkSj/u5khq8Lrv5AsFC+j6t7g9lWtm6/rNSZb5alsNp9aYi+u6wWz2jHEYnRQt/X51vWJ6LLt/n+k22Lz+ou9s+bu7PgAujRmVMHg1qvPFwUj2Dd5C1OiJ8QTfIJG9y12Ch5I9K1Uj+VqUZdERM4FsgyUUObGVsIXPhIA/2WhnEWNNdODZtFyAljJIsIFabMLMIOs6VZ/h5jHCHrml4bXMGWw+N0lpbnr7J6Hc5nZCqsARcA4q1p1KRhXCmuZ97Zqdkz0cxn7qod55Ww0UsSxQBHNZl5rf8jQqiXlSGNXChQOhG2kNfIJfpCFQ2S5zuhiQ4UORFHMB2xBoLK7QFr9MiQnwLvBQTtGiEB2VNp0GEF6Cm39ypgDTDR3ubLrcQLH/H8LHd4NB97sLeRToQqnpoHXqGyFJPGuF7GmElvGhdPXVDseNS0QWngV/tFaBkCbSPSDAZhpd25B6VByAbKMT36J0IBdzViykRzQgbb+rxVFjvIu3pbeeQEkMuLPaS0LpCYYg1WgYiYod86yJ6SC4SeTZ4YPQXTT4iKC0aDaRFcvwGlY+omqherG8Z0lpiJI37TDS406GDwe3IhcJaQYsKBd+17GVyBoBBYDezbwkur/Vp/wtVIlkThHRRxTG8AYPJDujj7nUTOZjGXyu/024er4GWtnM4cOMhioyRQpUzvYFqSVF5xMgOWuS/Y5DqTTOAOPNMlCpopQOg8LVkBjJfOzRp07708VgWZyWZVS2zfEDfWVMEr6nf5Olrg11evAb+14TE8MXNmSHggMFQh0okP3eyzyMcDwQMPeDu0jjm0Ogw0lGPLb97DhOEE2vPqYaKuyMfZiRtjRJbkE5ii4xg4H3xjBWGmQcusWUC1573JM+T8m7gK4Wq33kn8zCzwLHAWOOsa4xkt2WSN6wG7ORjxudxieq4hTnMf1SgQtN3yMRU0jgsv3om1CqLSrE0eCbgIzL5OHBNOr0b0K2OWyFfbBXdys4H6W9G1j/b1eY0s8Zbs7yf0DGGyHqwUhkO7R2eb/nGYUYFVk7kt5GHBVd8RB0JGwYyjLwUc5lL8rnhy/rHt/8A0X61fw==', 'GRC' => 'eJylUztPwzAQ3vsrTsec+BKnKUJxB6YurOwRcZyoIakSY1f8ehxTSyAKlspiydJ9r3tUi1Fwfh3GRWCn9emBMWttank6zYrlRMRcBULfCGyHWiX9yzQuiZoRTC/t43QWSEBQFgTFPeF+A1Cdat1B2w+DwDtqtrJu0X+T+W2QAqWR49Q0CI7zyYE7BzZbnvIDvSP7wdC2f8JXYGAorjPEPWRUpruV5Tkr6SYbDhfJEVyE1HnpNI1/b7WdZ/HwEd9e3yfn+S/J4z4c9H9D5LvrQVQUv+h5OsrE9o3uBGYp9ysY1Fd2P1ugg5vQZ7e7ZPV5kfhaGfbAV33fBKYi8yzy0Ed3Bhdctd7OfvMB9FHzjQ==', 'GRL' => 'eJxljs8KgzAMxu8+RcjOtZkVkWE97LTLHqLoWgv1D1Os7OkXHdtlhC8JH78vpJpXB1sfhlljtyzTRcoYYxpVOj6dzIhIMoHgW402GCd8Mw6zcAFh9Y94HTeNBARFTpCXhHUCUE1m6cD6EDSerLUIHL4z1TG1MnWjF8o/siVqlPrCWf7BeTLelxw354JgF3eWyo7t53GJw9tvV/vbdfIGCw06EQ==', 'GRD' => 'eJy1VduOm0AMfd+vsKaqlH0YM54LlyjsQ5/2of0IdkIAlSQroEnar+/MsEnZ5tLuqpXA8hgf+2AfxKLfVXBYt5s+Z/UwPM+jaL/f417htqsiKYSIXAYbU+aHttl8vZRIWZZF4SmDZpmzVVtUvLHbTc+rJYNdU+4/bQ85EyAg1gJ0KtjDHcBiWa567zi3CkjLxuMp8HQKuNBzMdQhWjBYNW2bsw8ruySKGbjgF8FpRzUaBkNXbPrVtlvnrNsOxVDOKHW9Od2zaFLvW19CoD2vu3LlqhWvoL0t2nLGCaawRVSd3DP806XWiZzC/w5DWr8dJCl+ByhNT6CXd1tEx72ME38ZtS2J5HHUIGq3yZ3b5KP4MeJfJQuRFKYck+MEJXhTG2Ew3int7KMPXEJON3pEqhH5OZw1SczGwBFvm862JVinMUUZZgzs95xJLZAYdDkzCcbst/cYkWdDsgz2zXKoc0ZCfGRQl01VD8fTZH7rYuiaw8xI9NISEBwlBbi299eqL29Wd/S58161CW7rN8WVQHW1sh0/vdsNzukrchP19IPj6SuF8fv5X6c/ZX9NViQkKj9ATIpUoIZgxEhQofFGAhGFO8Q5ESquTculDM8w/ZOqMicLoExjYsnXl4QJl4kLJgoTUMY1Sg1mRey7BeNbkdsNZlwTZpAIf4WoG5onJjC1FKPmJkPDteTGYMqd8Ign+henf68I9z3oGxt7q57PBaF1ivJ/KWLCfuH/NQ93PwH95MIi', 'GLP' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'GUM' => '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', 'GTM' => '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' . 'doogv3ngHy4/WLkkb44ju7pfTg9VHvQ2KqjivdDXnE6KJpFiTlK1OKqY+R3X23MQiI3hefcQzs6q4+mMBmuHdsdC3eyzthgBQ88rjz5KIRLD/KhaSlD1Iv7wex0zB5vzpEhYnFSmi7tvl20v4TvD9sEGjQ6WAgvypdp8ebUGheY4WBhiUvZT/DXsQDYHTGwYnbliQ/86KMNox90/OB3vu+LJzrPO43ToN1x+/nXCCKvglcI1fv5nutDk4ZDKWwFnibLwpMpIzbF6GwEbcHJDB4mvi8PnjCYJH0Vk+ztPZiuNFBgljIIcYLh/OgMgyq6obVLFzyshxB6iyUWVTHhmIyugbGvxubPc9n2XGyvH0rnjcejH7Iw66OTmJt8n2EVvo0n4Sy+6rDBrL9JExr5Uee/PrPX6pYmR3triIjlu5prjBJQXumokC1eVLR/6POks6X319lPeJva8JC4ChjiVQWFkSfWAQ8moraocDIxU4vQfU20R/2cKZ6Z/xyH+OiNYvfcIz/wTSKPKDH/E5TAO6yTuYVd3mH+Cjf9CyrHOdJPE6J9JSHCTgix13kvthyCIH+ui4gUkknz6canjgbSNMDiNlpqEmzY5N47Fxiz9XxBLN579TUk8bbWB14Hz0lFUl81Qx9ZDwParA26p+3O8qiziRedtdN0UgOFhe8fOF4SWHkeTxTWAV6LzCku/YbR9F9/fc8X9tz+hm3OWYfZmojCZc7HkYJ8Z0DGaQfT6K84aaO/U5kMps33M19MNPNkX+4/APXpKvhp8vS1W38PB/SX+1JftdG5D29TSqWN/sKfvI9v5euu6hGs3I5v4fiavzTWXzeX5GchRi7rjPPRO1frbc6PzDv/+u7b+4/21/8GKFdSGQ==', 'GGY' => 'eJytkk1PhDAQhu/7KybjRQ/AtGAXCN2DJw/6I4hQ2sjHBioQf70DG038SLzspWkzz/vMZNJimhtYu7afNFrvz3kULcsSLnE4jE0kiShiAi9Ivrauf/0LFFmWRXsVwVUaTVs2gXsZ+iloOD27enkYVo0EBCohSFLC0wGgOJfegnFtq/HGGIPA4WemLFMzU4/0jtEvsk6FkNUFlveKcSHTHefXfwECcVS7n0M//NvsJX4NlFWVUHuqE4JApio8gozDOOAjsVLQHCQqVDbg69OGiIyrn8q3qYZ9Kbkda8NCVi+u8lZjzFpbu8Z6jTJB8GPZT2YYO43j4Etf32YEseSeCd1dQxdc2SfS775i+yenwwevvaa5', 'GIN' => 'eJxtj7sOgzAMRXe+wnJniHmoLxGGTiz9CFRCiJoSBClB/fqmKVs72jrn2recFwnrQw8zx97a8cyYcy5xeWImyTIiYp5AUC3HTjcyVjczzLEcEBYl3MWsHAkI9gVBcSSsIoBSQqe0jqenFhzFIgbTtgizncxdxE61tueYjjbAHh8b2weD4yQ86E9dfWafpXmSLz61pheyX3jXdfSlA7kZRTDC5r9Fp80qsn1yAKr978EJ8+aUTFZR+eleRW824VAH', 'GNB' => 'eJy1k7FuwjAURXe+4ulVlWBI/Jy6lKCEoRNLP8IEx7YaEpS4cdSvrwkg2sLQgU6W5XOP77PkrOs1DLuq7nI0zu2XjHnvY/8UN61mCRGxQOARWQ6Vrd9vgTxNUzaeIthtjmUldWSLpu4i7RF6q/xrM+RIQDAXBGJBuJoAZHvpDJS2qnJ8KBTnyRwh5N8CaJKE+gCu6RPZFVwWW85PcAADLgKeCFqH3a0AUapEegkE9FZEj/03CK6VdVc27S7HnXStHaaLQ3uCsHA+5mfjDOd7Djl5ah/xnpv4+YelbZx0asoXwRHx2fG+EP7oFIxPtzStKkPTIPF260yOnOgRwSirjTvvvhm7QlZqGnE42zKmx+VKufmr8lTyJbnMyO6j5ELc3Rn9i/TX8NnhB6wmX20L49c=', 'GUY' => 'eJx1kbtuwzAMRfd8BaHOpqmXLRV2hk4Z3DV74FcMOHaQpHbary/l9BEU6UJRuJeHV1B2nlq4HvrhnIv95XJ8juN5nnHWOJ7aWBFRzA4BXZWLpt+1UVeOwzlq3wVMXT2/jNdcEBAkhsA4EusVQNZC0/V9dHrr61zUUz2MVbUorB13l/0i5+JJe2/ICWD2q0IDtGHMxJgN3z5E/GCkaZqbHxVQGaEPu6XHBJSRaO/7ghOlHl1w/ger6u/9qEERqlKHHGCtByVTxltruSpFheTTJBrVzar/MAOELehKiY4RylMYNEv97YugmjTdonscqqqVlPQTSmv0TEwiaUElC4YcZ7zrC36hsRLTbTB/UbO4Xa+y8Hnr1Sd0I3UK', 'HTI' => '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', 'HMD' => 'eJx9VD1PYzEQ7PkVq3e1Ha+/fSIUVBRJmyLd6SAk0gsgQC8ov/5m/IDT6RBFVvZ6djw765fLl+le3o7jw8ty2L++Pv1cLE6nkz0F+/h8v/DOuQUQgxxul8Nu/HVvDr8fH17M/jjIdLg7XT++LQcnTnJ0Eqsbri5ELp9+ve5ldxjH5fADDK5eD4L6NYB7ACcAb9x5WPwH3u12HXkMxSawqvfSnE0rXxW1oU1BR6PeSW0AzIuNj25vousHhgeriBpB+sZNJrhRFUmcrJwEv/nq5ue721miVy/aywPIvXeTJ3FIIGhgOR9NAwJEooW5LMWjmTXhblKbKCOivkVR4/3KN3RyZu+zDql1D1HQ4vU7D9bohiZMbK+6DXqsbgue6qYKL7zb0MbtN804adkm2E30ZGI9rzXkT9JYv/Ti7xSSLxJAUUyX4m3Gzws3RqOtDJGhwDMCOu492EiHglG13qizzdAwgQVZqCEzQz+KVWaj9CnxNqALizMD8mp1ezSBJ0hAAFfBNChoooH84OGI1IMs9adBVhyJckq2SmMZUhSUcU3uC8jI4FYXrZrsqD30JhUl3Hz2OLfMRhWA2JEMaHpWG6i7MqTPVgP46ypUAuqYCWSS7UJCr2i9lkHZqd+us8e2AjySf9btKaubmCCUlmMlXRE6NV479MN1GkUVSmwhBb5QsBQ6XoUe9gVCM30QuLuyslJDgCMYu5oa5nHO92snmsde3h9Aomo49GFJeQ+2fuhYxYyLQTTitsKxS/eq9TfQNXRXKoTMkv8dfdqufYgSaqIhMaEk4SQCgk0zAXcxRBMCPlq0FpHtRwQbFoRKbyjYA8a3FgOvgIOEYBO5Skz3UOYeUQLOBk4wwGl027+3S/4pXl38AeUWIWA=', 'VAT' => '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', 'HND' => 'eJy1lE1vgjAYgO/+ijddluihXxTxI+Bhpx22H4FIabMKBjox+/WrFWTRHUzGuEDh6ZOnhRA3xwJOe1M2CVLWHtaUtm1LWkGquqABY4w6Al2Q9cno8uM3kK9WK+qfItC7BEmTFlhnVdlgVSI46rx9qU4JYsAgChmES4Y2E4D4kFoFUhuToCe+zMROInDz3x2oHHh04Cv7QvQOlvJK8ujCuvPAFr4jQ7dyW6dlI6t6nyB/aVKbT0XAIAjZDJosNfk0iEjkjvnMN15l227Yl5zvpT5ij4lwKyNzwt8Y5l2DJz+bHPzGrFWdSxfiZrR6Z1WCOGPPCFSuC2X70Y+8SwvmwGe9L6ZFd3Gn3T6qrSt7XvIiGKx/luFRbTwMx2wbdN323TuzR53DJ8OFcO8chwFZ9PbxtGJBxJhW/E+1+CY3Pv8sNpNvJkE9aA==', 'HKG' => 'eJydksFOwzAMhs/wFFa4wMFunKRpMq07gJC48BDVWNdq3Trask48Pc6AE1zg4Mr1//2OY2U5nrbQvpSq7qottuv+MGKzU3Ded4exVM00HRdZNs8zzZb6YZsZrXUmpi9kce7aw+43kGOM2UVVcGo3831/LpUGDd5pcEGr1fXV8lhNDdRt15Xq5vGB782jAhnmWbhGuJNwT1plq2uATzaNWqlvS13Xn7x1niywtsQPxhcQAxiryYPRTBGszlPuNNk1Go/GkEMjOuY5WWRNjIXUugQz8RrZUmpBOTKTgdxQAZIxFIwsP+ljMYpuxWHE7wLFURxeKmkWL0e4SPyK7IQ3aQIR0Ar3/mx1kY7yrkNRoRCYKWAQewppLrUgmsVLKYKnXIIhpB6XKCRnSH09hfe0pavl27iBy9IXzbCpZUWyrGmoDmPdD/tSDf1UTZvbwoCVoXNZiVzx7i9Wdu7fXsP+/94QfniX6SGuPgCXl7XG', 'HUN' => 'eJx9z7sKwkAQBdA+XzGMdXYnD0OQbAorG1v74D4SWJOQ1wa/3jUIiojdwL3nwhTjYmC92XYUWE9Tf+DcOcdcwrrB8JiIuG8gNFKgtpUJm2vXjmE9IyyNcsduFUhAkKUEaU5YBgCFAd1YGw6zVQLVotpOyi3xWV9N9RYL3GmtEfzw+aVPdKHa33fkP9pJnkuib5DEf4hMk32UvUmUEYs8YtGHKbgpg+L5Zhk8AH0qSMg=', 'ISL' => 'eJxtUT1vgzAU3PMrrJelHWy/AAVS4QydWCp1Ykfhw1ZcQEBM2l9f2wQ1qro8vTvduzvL2WRacvvU3SRAzvPwyvmyLGwJWT+2PEBEbhVAVCWg0WVL1bnvJqomIEbVy1t/E4AESRwhiVKE046QrKqbyS12PWs1fJSz9AYlrKzlB8c1SmvaD+VZzV8CWALEit6tnbR2xtrl+A387sQ3Kx/Bt4ysXW3Gq64F1Kbu+qoCMs1jf6npoqpZ2oZA3DV1qQKuo37al8/3Mr9VBOwRw/T42COOWfK3yeNB0zSb+pBarfSzQHnAmMVm5cIkZJHxTB4cQxYWznFVepxj4dH/GVUSpEG6xQQHeyD9tDEvznmlIkTjoKR2cwmSOlgE7g05Go/uCRlvT7vMfe1p9wOKKYjJ', 'IND' => 'eJyllM9ugkAQh+8+xWSaJnoAhkURDHjoqYf2ISh/N0Uwy1aIT98VBZdgmpieYIdvvv3tQAiaUw7doayaEAspjzvLatvWbB2zFrnFiMhSBF6RXVfy6vsRaPu+b/VPEXgSYlZGucHjumoMXiGceNq+1V2IBATummDtEe4XAMExkgVkvCxDfMl8B0E1fyqqUNTJdumdzmjNySwbSMX8zdrM82g74A57gOcgRVQ1WS0OIR4iKXi3dEwGl7SXq2oCtqZVH1nxMRdxmYIIkREO+xB5V90EsLfmBvXYc8TRCF2S95NMbpuOhXgsjKUvrTQWo4lUBya7mz7qpxe1jGS6VKnB8EwPbEfFWw2Zxv5+wLcXoFjTha2aFSsNdbf5uBbP067AyifLnyaF/ovZFSLNVEwVuOWJLNTQiF4RipTnhRxW84z2NNfEP7d/PWl3SLNr7rk5ftLs3s2jd25Nnp0G07T/thl3XZ8xuPwF9otfE5AZ8A==', 'IDN' => 'eJxlzr0OgjAUQOGdp7i5ztALNmpMy8Dk4gu4EaE/SaXENi2PTx1cdP9OckRIGraXW4JEE+N6ZSzn3ORj49+adUTEikCwk0TlRl3bp19CbSeEZOc8+E0iAcGJE/ALYV8BiHWMBpR1TuJhPhO1LULp7wWaAlPH6UYPZH9YKfWVxfxY8Tnpqx1twDFc', 'IRN' => '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', 'IRQ' => 'eJx1VLtuIzkQzP0VjdlkNyDF5nsWloOLnFx6+YCrFzCydyVhtOevvypKNgzcXaAZarrYXVXN5uN52cnv4/xyXg/7y+Xn99Xqer3aa7Cvp93KO+dWQAxy+LEetvO0M4f2+nI2h1+DLIfN9Y/X3+vBiZMcncTqhqcHkcef02Uv28M8r4cv2+12EGz+04lmtwduwfvZvQ2rf2HbRtXnd/j/gW/R4P8jvnvP5FyZwo9BLqfp5bx9PR3XQ1/O02Xz1WgZbRAzelu/yblN8+ar2pK0+m9dwOdKwSebREuwfkqShGLVqI1Gm7HB2GSsGkKsN9aLt8EWCbbaKInxOiteahWIZEuzYwdXW8WLLbbcdqnB03ibxRl8zT2lIFkGGP8CciZggh0Z96TATT3W+SCszAYUarspdQbxzjihbnw7JluxDFOV+i7FxEYFuZNFmBVRmIKwUAmE8XugOGBI6O1oMlmqHWEDtTEaJWI3iKKwZzYyI1mEwAthozRGq/EqHqylAIU6mQLwKVABOJOkJDyzYIMp3bOCEkUynkkyIvgtChbPXvM0IsTfXRWoIndqqE0XwKASj4wFYZaDhQ4EQSlOPoq/OeWkGJjeTE+ALR4/mEFx2epdC/303W4y7LaMJGe047OJNi6jzXPM9FabM0HgYUH32E6+PaB9dHomsvN7E8BvMblp7yZ7TwshnruUMGgTGlsYjfwKz96OdWSh0Hx3io1IaISnB3C9t/OeCTSYJ1hdfGkBagrQ5ADHEeQJ5v7Q91fmgfw9bLJpMbFXMzqyjfhy5iGPveN8l790HPc4/jPHwsO6DynkikAHoiNLpFyUajyylX2HltK7iAWYIJW7zRjOOOVBYOnToN10jky2PCR15hHEoKLyuPCMVXLkNGGdG7d1NXiafpRpheFEaW/M/QLB4LfDqc0babjXvI+DtL+xgFAsT1h94D4uCF+RPIPD3frwyfpM62O/Gm7Wl5v1n43XfmbQ9m58+mQ8Jwmy/DNK3I2/33Or3dPDIy/mp4d/AHndOas=', 'IRL' => 'eJx9j0EOgjAQRfecYjKuoSMQFUNJdGHceAgjbWmslEClxtNbUePGuJzkvfcz5TAquF1MO3BsnOvWjHnvE58ltlcsJSIWCARdc5TmqGJ9su0Qa4EwauG39saRgGCRE+QrwioCKBVIbUzcX43gKEbR2rpGGFxvzyL2unYNx3nnJjjg3dE1k8FxJqVECFuHEG1CdAzRPd2R/WCJik1efPF0niXZP2G3WxZELyFPF8kSaP/ZmO63VjJVReXz8Sp6ADFOTzw=', 'IMN' => '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', 'ISR' => 'eJyNUzuP2kAQ7vkVo70Gih3vzD68jjBFqivupFTpHbDB0hoQcHDh12dsw0ERKWmsz7Mz32PWnh/Pa/js0vZYqs3ptP+WZZfLBS8Wd4d1xsaYTDoUtKtSNala63a52x51mxSc2/ryffdZKgMGgjPgolGLCcB8VTfHHghcpnb/ozptBoJKjVWp7/ta06akd/tq2Z5+lwpzBdL0rmOOAcyrL/zZE78O71eV3RizO+Ugld215uuR7vCR6lLV53q7W60U9M26FyvVxyFNX6qZgtOh2h6b3aEr1QBTdaqnkZFmcFxWqZ5i4WY3qw+jpXppmma0GKhAB4M5Iv5pNrkldA+Pz0PG2PgrPs8RebxNungb7QxYb9AP5bMOOfL9RLtoNede5gwSUEEY3qwvRpQ0M2PQGP8uf/fcMXuMYCmXJxssRA89sEhoQVY7FoT87xBkA1hhCMAuIANxkcR0H6wwGEc//2lniDDY0V92emNusIN0fafIwDkhSVDCHETckUbSskqrbZD9SN3qEGTcEbJgOZKkQdAYL8j305GXQwj5I7yW9lz3qr1t66+dAC+71yMPfPHAE49ckJOKeaNYiB/2IXGUPrk9C577UKJjWYue11zI3Xh58bITf9vJPFsvJvP+x1pM/gDTGtkr', 'ITA' => 'eJx9j0FugzAQRfecYjRdY08MIk2FWXTFJodIg22sOBiBi1FOH4cm6qbqcqT33tfU82JgvbphltiHMH5wHmNksWB+MlwQEU8Egu0kancyuT37Yc5tQFisip9+lUhAUJUE5TthkwHUBrR1Lp++nZKoFjX4rkOYw+QvKo+2C73E3Rg2OOHjKfSbIfFNa42Qto4p2qfokqIt3ZD/wRIdRFn94mJXsOI/4azEV7H/EUpRsT1Q+9rY7qdWc9Nk9ePxJrsDTOBPow==', 'JAM' => 'eJyFkLFugzAQhnee4nSdbZ/ApEmFGTp1oGv3KIAhsiEK1I54+tpOKlWq1E6W/rvv03+uFqfhZs20KBzW9fIihPee+4LPVy1yIhJhA2FsFfbmqNl4mqeFnS2CGzv/Ot8UEhDsJIHcE9YZQKWhH41h10/TKexcN81tmyZhdjmuAwSZjVSRE+SSmsRuNkqoeYTm8W4ofqLRrPCJDoS/NInfbLLFkIUQ/tT0p7vmPaEDKw98F9sUJS8+gmVIQTpO8ud/HMHg4lpT7onLWOItkI7dsyCC7xaV0HVWxZ+tsy/nVWDV', 'JPN' => 'eJx1kctygyAUhvd5ijMnm7jg4iXGdCSLrrrpTF+BIiotUQeJpn36okkmq+5+zsD3f0A5Tg1cz7YbBbbeDy+MzfNM55T2rmEJ55yFHQimElhb2RCj+m4kXwPCZPT82l8FcuCQZxyyguNpA1BWuh6XEKKyZviQvl0BEm/TMB+WWW2sJf0glfE/AukBIWx6J0UBadIG4hSIb2H5i+yOYw/e2sMeRWVzY7mL1QL1pLu+qhBG7/pvTWZT+VZgPHiE5TxZygVenN1tZYTgnezGundngWu00utdkCBpEt2Nn74Ct3Vd303jZFU9JKtqS0J4uirjlNWgwgvtk5TGoTzcMs2yJbrgc8zoER/QT8V5Uv0jQ+K8oBkUNI9gVNLqHT3k+30W3cpK1pw25fJRp80f2K2DVw==', 'JEY' => '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', 'JOR' => 'eJyFUrlywyAU7P0Vb3BjFyBAd0ZykcpFMpMqPSOhI0HHSLLk5OsDkuzYKZyCYXnsLvuAqB9zOFeq7mNUDEP7ZFnTNJHJJk2XW5xSamkGgjKNUaZEjsukqXv80SAYSzk9N+cYUaDgORScgKLDBiBKZdYboGGiyvZNDMVsINBS1fXW1LJSKdy0IimHrxgRH4EmvWLGfBIALbyAE290GS/wDL+RtbpaF9v5OOtyXpSD2cDGPEanTu22Yo9g6ETdZ01XxWiGSgxyxxgl7h76RCi5I6Htu/s1nXaZg3UnJWMkR1k3aYqgH7rmU+KpTI05a4c/zdxFZ5Q7I/Mp8Qts8DX6besx2mZZdtf0IrmqvcdqGtI7te0wYs/q9/nWHmg7mc7SapVqvhmYux5eZ3Pz/+WuuENc4EEILvGxXoRHh/iK29oWM5eEmIUkBG4DY5riGUpguGC4L57ZsglXmHnwyzy6unV1YS0+nN48f768u54i8z0Pmx/op7SS', 'KAZ' => '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', 'KEN' => 'eJytVE2PmzAQve+vGLmq1D3Y+AsMUdhDT7n02jshfFghIcI0pPvrOzYk2m3aaivlYo89b97MPA+s3bmBy6E7upy043haRdE0TWxSrB+aSHLOI0SQGbK6dPa4/xNQZFkWBS8Bu8tJ3RUNtWV/dHRfETjbavraX3LCgUOiOeiUk5cngPWuqp030DwVYxuCCwJuHPp9RQ92rIbO4pYTwQmg80BlyhLQhsUgWAoCdMIMTUUpcfMeJqliEmI8xh5APSymKTPgkcIwU8R4k4KvhlMhWAZCM1MiMgbJEqowWlLJFBiWvZIolBpda50rrW3X5eRTXdehrm9I1WJrZ2xtw68xAfnWK7T+zbvw8IRfeZRK7rFNkGZLYByKo6v74YBaFONgL19UaESBkhyk5s9kEfSHqyC8yaodqhpzoLCT3Y2tF5N/JtBWtmnH62nW3JfC+Zz0/zneiLKI1oTtjmb7T5r7HqkITYowPdjivYBbvgiICD8bSbpRBt80o1JTlVEjaWxwdVSnOH94ACM3lMmgs0xUmaF6oDK8huB0iEJsiGoRwOLvyPru8fyblHNaTAZKyNLnAxH7SFx9vgRtGmysBnOgDeHG58CB9UA0F947qcqHSNW8G9iPD1HVdfaEJQ349WoCw8+cJLfpuGmwmzUQ+N2kTgMKDFLQ2/L693nafbQ7VxZdhc09P5ALHsgm4FZbmPq1/3G+PP0CZUdpLA==', 'KIR' => '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', 'PRK' => 'eJyNUjuPm0AQ7v0rRuvGLnbY9yMCF1ddEylSpOsRBowOGwScucuvzy7YcVLcKd2n2e81A+l4reH93F7GjJymqf+WJPM84yyxG+pEMMaSwCDQHDNStXlNm6K7jPS1J3Btyvmpe88IAwZGMVCOkcMGID2W1RhBgEXb9D/y6bQY5GSdhnkfZ1XTtrTr86KZPjKClkAgfdeA/GScQPOiuXjWyH+R5GaX3P2WnOQelNar1/DWlhkpr+WlOx4JRDKNSRl5G9rdNt8TmIb8MlbdcM7IAtt8KndUoQOKfA9jkbflDr20xu1vdR9lM7KtqorAOA3da0jahvuspa01oDlH/UyteUF9clo8av9tIEttvHuoFPdRc/XiK1Vh2D9Z0ls0SxbnCtX/x91UXn4uWVaMfCkcahDaFOEDS9RUS+BcU84dmoh+eo4SJPeBtsDAHbWksZODhbbiwuhAYesoHAoV3E0U+k9WVn9WPnOrg6GwLBhqSxVDC5ZTFCAEWmpMMBQcOQTElxcVeOjDdSMnVosvdy3VLr7IW3Ca1IdNGn/0w+Y3PwjDuQ==', 'KOR' => 'eJyFU8uumzAQ3d+vGPmqUrKwsQ0YiOBK7SqbSl1n5wvmoTgQGQJpv76GhIS0aYp4DMPMOcdnTNz2BZwPum4TVHbdceM4wzCQwSWNKRxOKXVsBbqUbM66qvfPClkURc70FUGVJSjXssBV2tQt3hsEfaWGb805QRQoCI+CF1L08QYQZypvx8CGqa6OP2RXTgASXbI2fxxzeaU1bo4yrbqfCSIBAlv0HUc+CTHxShFyEvQ+49sp9Qs5V1BnRp3YnJkuLi6I5qRVglSv6ibLEIzFeORL0Mno1btcI+iMrNu8MYcETaGWnVqFEQmBeGtoU6nVikRu4K+vku+CE/Se5/mj1K0fLoTubkKLJZFpupEF+4K44ApGBGBGGXFnQkaJsEewvttUTL6lt8QsZMx+XjUIzMVW9JZc7A4U3GfxrGhCOLUKprFuSqNyux6LNFTZaBCj9AuCUlVF2c1vdjSedweIneJxim1nmr1a2kKBBT2ji56le2nGlSuvlZhxyTjYc9xFzF7c2/2jkVIvkPRpI50avwoQt1e6hEkrk2oFqV0LFghMguz9Uc9tcxWvhse4SwJgESMcBCf8xez+sjl9ZbPzX1OxpfZ79+KuDcf59u4fuqdHPP7eH2+/AdtmDGs=', 'XKX' => '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', 'KWT' => 'eJx9UbtuwyAU3fMV6GZJBvPwO5XJ0KlDK3XqbvmJQoxliEn79TWOraQdMnF0OS8umR4bdD3LTnNojelfCLHWYhtgNTTEp5SSiQFIlBxqmTeeKFSnvZMFNIrKvqorB4ooikOKwpTCcYNQVla1dmCChRT9Z27a2SCH23Sa925WCyk91eeFMN8ccAJoIn1Mdm2c+jgZI+a/0R8gixdZzeYQsqZkzc1ouMiKQzVWnSpLQNoM6lR5VpSm5cB6A8jpPZfM4TLI3TbfAzJD3ulaDWcOushltcOHIIn2S9N7Tw7buq7XhiyhOG4Z9cPRweSx5h9JwNKArqogZDiYVV//nvaoobQ8hOy+iycpC8UtSvpRhENv5uF4PtP36W5RZKQ5bjL3l8fNL8V+hzw=', 'KGZ' => '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', 'LAO' => 'eJx1kbtuhDAQRfv9itFskxTYY2OxJMIUqdJEyi9YvCUvIGBhk6+PDayIIqWxrsdzzymcjHMF96ttR431NPWvnC/LwpaQdUPFJRFxt4HQ5BpLa6qgybp2DKxBmJtieevuGgkIIkWgYsL0BJDkRTn64GJmm/7TTPUKMLhN3bz3s7KxNuh6kzXTl0Z2QXBLHw5XO9zscO/0jXwn8QdqVfCHI6k2zHCzhcZiLtouzxH8cuAlGm+DfTqb5919mDWes0IIGW3aQHnxRW5idzvUvytEMo7ioyLECwvXmlSCqf+LZVluLSVDpkAqMoJ82k5HAhFIiljs898X2F92dsKr9JT4r0lPPyS2dR8=', 'LVA' => 'eJxtjkEOgjAQRfecYjKuoUMhBk3LwpUbD0GkLSSFEsCWeHorbjRxO+/9lxGLN7ANdlwkdus6nRkLIWShyNxsGCciFg2EvpWobWPS/u7GJbUewfcqXNwmkYDgWBKUFWGdAAgDurc2nR9WSVReja5tdxLZ1KzdjiUetNYIMXyLhS4WfCxc6Ynsj3uqclXwXz0/8agPBLyqvg6fvWCmTsT7+zp5AbjqP+E=', 'LBN' => 'eJx1VttuGzcUfM9XEJsX+4EU7+QWVoC2SNGHGsgvqCvJVruWDK0sp/r6zhyuEidpEWTF5Z7LnDnDQ99N5wf1+WncT8vu8XR6/mmxeH19Na/BHI4PC2+tXcCiU7v1stuOqwe9Gw77SY9/duq827z+cvi87KyyKkerYrXdh3dK3a0324kLLIdx9/xpdXqUAKuu7WL/mXvb3Tjqw/Nq2J3+WXamdApG97omE5R9zNWbfE7O/y47l24xx1xcg0qyxTXb3YPiB83Qy+7lON68X9126nRc7aft4fi07GQ5rk6bm2pv1TSsxs2N6UNJtzMwhBBMx5dxs+w2583+sF53ajodD39v9Otuzcju+fQfdSy79x8/uux+m4twvqpQ42PJ9Yz1o8bi8mT1D3vXsr4Ltt1u30SiNb18yt963S0e5sVbZ2t/rsk2f5+8ccoFO+hiECmZpF1ovz4rn3UyXiXjuFtM0WAd5tpZk9p2MqV9sKZXrho30gT/J2d1ZExrIt0GhxffIuGTi7R3JozaOVUGbBOJNUF71yJWhPYBFoDBAISCDJ4RkK4KwmryOCcPA7VBCyUbrCgELOB8RXVGkJGOLkw6WOIrJuvgZs9BMwk0y2TtyQKUuGd5Dxm1W7IgXxPcxQQxvKxWzlrSJE/q3+kkkNBYfB7ogl3PR+hZ2giYVXwHgrZqphXoQstQyEUl0p6cRB17pIzZ1D88bELuByE6teIlWFASlq6S8gq3PVBGFNORTlrY81Lnl4IFhXiFN87XWolPUwvCgDzQO7SK8ATM9UshaqjBoVJpD4INrU8MyJZyEWML+jXv3FewJMmoCrEG9qCF7xTJyVxKP2u3lYpwgXHPrO9XMARCfIEksqN5TqDHU5M5jWILM7GddAzM5EhzbKt+gIGIBJvQpKJDhBCqITeRVHMT4fmgFwBnkuBbBAgaETIKsuSCFr7gmGEFDfQG/3QhGczhVCgKOmutectlJsUkYWwvOBfNQGgnE1r6n7y+CjLp0gSRWodwBmFSvo6JH0bL/8+5q8U89cbdfjOsnpfd8fCyX3+z/ddht/9+fx6Swfh5/HgQZwNGQw+uHGiLpIpy98JVe0vCMTpFYgqFWC5PTnrkTRhAQqAe0PdK9XCOuKYyvjIGHkYWXhxBBL0iZwh66GgnymYEkooJQOuk5Wyny73POH+p5xDTQcvgA0jqnD8chSoxQFV8dfbyBPz4OgCblhGUdKVkNKWbpcncDSL4iF4HukQ5ef1EacHK64pVP+BBcfmmNkV99Zd7V4GpQFnkj6wQeWgHQaLiVwY50RHHvIhQoCzEROJCwSAmkqSQBhIL8yLKcSQ5cpSL/omEG4pnVBb4AuheNIbhJvxBfCSZUaRPuSnRN5KK6mW0mTLXHXgvoMtTo8lLFzKkzTEQSJyiGLCL3wwHfsWsdiwYGJGF3GGoSenEBHBZxIBucEawvsozh1QTT1ZAEsxxNKjIYWZwq2UPCYQ3Mu/aEOEHbggWqgn3gOqlW5Fd0Y7tozZxlQp/LJ8qYm9ZNw1dlmiIQB140uZJwUSW5jhCMB6DcOylDN03Z1lMTuY8pcu29E03rBudgyKF1aI5BnmMQCAlLjuOyXi4SOvliakwJPIgqJJuAkKOXrVrX8DhMCGNU73IiaBd6+KgRRNwQj+gojbuOOBk3ilP5WDKwoLwRTxOSCO2nqPf8I53FGyWM4sQEFOttOElQVDtjhY54urTxFThHWTiKXQFkkctcn774YvaZu1lLRc872wvwkqiB2bLcvdzzM6jUP5euuPftB/e/QuI31+/', 'LSO' => 'eJx9VE1PGzEUvPMrrO35Obaf7bUrwqGnHtofgQIhUXcTxEYJ2l/fGW+gUqEV0uKPeeOZeQ9up/OTeR2Hw7TudqfT89fV6nK52Iva48vTKjjnVkB0Zv+w7rbD/ZPsN8fDJMPUmfP+8fLt+LrunHEmR2dicd3djTG3z/enndnuh2Hdfdlut51B8U+gdkCdgfru5m71AelcTVHfwKq5wX2M/4IHV//i/gieTi/HX48N7rrrTi77h9Nu3Xmbl3L11Wbjk24k2N44STYaXb6DVaPBRvEOK3z6XbF69sWmQWI1OUtvA+qyeBaHflJPJCn7jBNfN7HaIjZxXwU39c9qEK8SMsozAAE4gLFJNp8J8Hgu/NCQrDe+lLNATJioU6gwYVU/iedwPDx2/3Vfrt6VGoM6G3eiautEHzCUKBCeJcZNEPiNxtNl6KGkCcYKPrniSbLBFC56W9o9zCBUhEWaYGKE5PfVZx19H5WQHbOowfqNWOgTVIC8vv0ewNSsK8KP8xjZmMQ1Ho1EGMWeGNiYR11EoJPsh8N1bR0jAXTzLopaP48J4n3kh0KbZ0wCDpp0Ke2FMo9esatgjMtUBDDySWLTkhtSnEckgEzBhlFq1CZQEkpZnnEYGxnmyxtGWNnn64tNFNgyp6efx56BhiahN01kBg0QWdAragHIoz9oYRPfCuiNWWGyeO7biz0eK0smnKyFMFFsoXAhcYuW0RVg1OSWfS+cXMUPBCst+nSNuzSQggyZ0XQzALvsEoHcQ2YAouKYdK1BQp2cemW0LO1br/AHIz07Ku0OBiW3wbnlP6W7m9/sWw9/', 'LBR' => 'eJx9kj1vgzAQhvf8CstZkgFjY2xDBRk6ZWikTtkR35ITEBBI++t7l4Sm6dfiOz9+771XiKgfS3I+2GMf02oY2ifXnaaJTZI1Xel6nHMXFJTUWUwLm5ROnTbH3rEdJWOdT8/NOaaccKJ9TvyA082CkCjLix4baFNbt6/JUF0MEnqlwFtkRW2t07RJWg9vMWWGEhDtwK7SgcfMqIS35e/UvXm5s9lliTtvicqrUXeyeUzzMT82WUYJih1cE9NTZ1fLZE3J0CXHvmi6Q0z7NLH5ioXSqPUt1j1UTJdFUdzjGG1Y+D3OVzXn+q72JIbHM/hLn3I+633ts/C6Yf/PhocJxfyHiQN3Qm92GX3NZiiZB1DvpaeB7C7JIKGSignUqe0FgZaIQN958MnR2Pwc+DXj/M0OQmsmiTCGKUdxZhwpsPpECuQBELiGeEh4gwftQQdVhFBx5EVIRUJV4YNFInDYoEAQuAa3CJFbbhYR/qSbxQfZlrb3', 'LBY' => 'eJx1kU1ugzAQhfc5xcjZJAvb419IBVl01U2kXgElQJCcEAGFtKevbUgjtepmPH7z/PSNnPVjDfeLu/Y5OQ/D7YXzaZrYpFjb1VwiIvcOAs0pJ5Uratoc22tP3SeBsSmn1/aeEwQEqxF0imS/AshOZdWHxrdH19zei+EcAwoyq16/Bc1LB2EtS6jEs/WNHQ3iW5S+CF8i+CMjZvNHeFZDGNCQlJOPzm3WxZbA0BXXvmq7S04uxdA19w3bWQiI4aTCIogdk9sFZQapGudyspZqV2pLIhcGJuH3j0j4xPkhfzpUYv44lsgyQRTqd6SQ/z6oqmp2G62ZBJEalhZGMwWxePq4TJoyDVYyM5cg+wEN8sEo9EOp0KWaCSoTpqiRkAhmxuhwy20hyHi9X2Xhn/erb+SchEQ=', 'LIE' => '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', 'LTU' => 'eJydkbFugzAQhnee4nRdmgFjwDlDhRk6delDUDAGxQFkXEj79HVSpUuHSp3+5f7vO91V62bgcrbTqnDwfnlKkn3f2Z6z2Zkk45wnYQJh7BT2tjHx2M7TGluPsI16f54vCjlwIMFBFBzrCKAy0I/Wxu7daoV609PcdQird/NJx/vY+UFhugSEd8209rM7K1zbxupHRiIVObCSpMwPN1rgOd16uPc45QiDHs3gFUpeMIk3ncIHzqkRAsFdlwrxcYvfkjIv6AiMSirogMmfliwnliEEnJBHRj++Ns1k1v3XtzR+uJP67q1MgzFc+TWccyhLyYotJcHohX9+V6rE1FF1fUcdfQFugHog', 'LUX' => 'eJyFzrEOgjAUheGdp7i5ztBLaYgYyuDk4kMQS0uTQokgJT69Ncrk4PQv30lOPa8GtsGNs8R+WaYTYyGELBSZvxvGiYhFgWCVRO1ak9qbH+fUPRBW24Wz3yQSEJSCQBwJmwSgntqlB22dk3gganPVIcT9lYAL6iNdYy/0RPbDO8Wrotr5H6y13mVefmzs19bv403yAtzGPfI=', 'MAC' => 'eJx9VMluGkEQvfsrShNFSg7d9L5YxlJy8iH5iAkGBoXFAmIQX59X1YOCnSjSTMFUV79a3ut+OLwu6bxZbw/TbjgeX+4nk9PppE9e7/bLiTPGTBDRtZD783q1/fmvQFtrnchqR6vnabdY90u1mu22B7XZdfS6mp++7s7TzpChFAyFYrrHO6KHl/440GK1Xk+7D8bkEucdYf93BA4IfEXgk7l0k7+CFz+erU0SvHE1kjVFZwpGR3JVx2/eGar4Wisb4Qu5rSbFq1fApRTbSynv8ReLVgkDeW91enI269jbkLSnZrkdq7wuKjwhrnfaEr/iJ6sDuZkhLKMCq7MSz2VjFPB8bwHTMBCtnco6kXUIESN+xX7gU3H8jPkcw1Uqlp/mcx4+vINKXlsUGRhHbEsQGWRIdub4yxfJ5yg67ZWt2l42yprK8wk690jhSUyDr5ieu0kIFg0AHQZCxejazJip6KgcRh6svM0b4MRKeetW7E7gZqYSuk8ohSyI5CoKV+m/3CZ11ZGzsUe2TGLG6XlmN9Jbv1U2qwC6Z5gjj9SBCQA7yvjjxz4jiWkb0I8CJ+/wMRmWkAGXtmCSlXgzWf4XCsYN/dU4xmavA4ssMG5qpukhMQXY8icavoJlib7FSCDUoc5bn09ImcFIgSaaac0XzgAe3QzT5M6qqA20igYgtMJciWldxsQlYhqXpu6EwEHFJhwWUrMjnXDjdLGR56pXr+KtR4mHdWR4xhBi9ToJXqFm205UiEk4OS8BlYdxPg2TkwUKN5heMPlMADNjCIKZqNlxJ3daBJIPUb6BdKoRHuV9c6jGW+B/F4th4m1mMbrICkJOKDVDPTxe0MtH2hueNui9bMBSxQEVgfBhyqzlcX7e88UhPTldr3fQZCk/vw5zkgv0ftjPF6ij7+i0ej4O084a87GjYb5aDsfr13Hfbw+L3X6DKvvjfnX+pK7XDt+v5jOjP/Dd/Xj3Gzj3QLc=', 'MDG' => 'eJyNkLuOgzAQRXu+YjSpwROMdqMIU6Si2Y9A8QMrBiNw7Gi/fh02RYottpzROTO6t92igcfk5k3gGMJyZiylVCVe+dWwmohYJhCsFKjdYEp79fNWTnkVrUoX/xBIQPDREDQnwq4AaA1o61y53p0SqKKavZQIW1j9TZXJyjAKPC5hhzO+DGHcDYEHfeWS1wj53Vd95BUH6vPtWDfU7/M3sj80ok/Fh3ftKfxD1Fr/WjnEuHMxx+jpRbfMdEX7rKArfgAZ7lGo', 'MWI' => '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', 'MYS' => 'eJyVVLFu20AM3fMVhLK0Ayne8XSSCytDAxRZCnTKkE1IIlmAHBuxa6X9+vJOlqsUDioDsnwgH9/jkRSXu0MDb+vuZVcmq/1++yVN+76nXmjz2qSWmVNFJNA+lUndVQ22j5uXHa5/JXBon/uvm7cyYWDwjsEVnNxcASwbeOzaLW6r/apMfr52n66rz9GjvmCEuu26Mrm+ZU5Aib8rw0oZDspwx/f8kKRz0OJI7vj3WXBd1yM4wP6Ln5D7gvwl/IYtLULAvZF8Br+iyFwkkBtyl9zAckZ5zMg6niGgqIvo8zkVnXaA55R0oiBuLKnkH5Z0KpDPKelEwJk5JZ0oODeWNM7oeTyzH/GUrcTyIZZKR5qy8zP97XZIaW05pwxyoQI8OKYcrKA4NJYcyIIsSEYZWqYCbUFGa6qXQCGLUpCAcRp5OuHggiMST7GgfBL4BCM/GRzkMKMFxoNVvws4h0E3xkKMtQUql1PGkE6hgKgVVOMJBlfMT5FwisSRTSCya1I+ij2sUSTkTHmlQ24gvsI+YTSsn2IG/5jhaC44PNGARcjH629qdKKSGvfOqtfy5NGP3VimTfx7eq53x+6EzfUjdChsvOq4tT6ei8ne+jsT6UgyaAzsy7BIb67+AGZWRyI=', 'MDV' => 'eJx1j7sOwjAMRXe+wjIzjUnCQ6jpwMTCR1ShaSOlFLVVUvh6jKATMFjycI6vbz7EGqY2XAeDzTjeDkKklLKksq6vhSQiwQSCvxh0oaxX3nbXYdVGhOirdOwmgwQEW02g94TFAiC/lWMDzodgcHmRa1Iagf0zgw2DkcETPVB8wUS7SpVveC0JeBpNFKWmE++zYn1vQwWWs9WGEOzdICMIvUH+Yb7mnPsh7P8Ln3h28lfrYvEEC/9MfA==', 'MLI' => 'eJxtj8sOgjAQRfd8xWRcl44VFQxl4YqNH0GkFJLyCCAlfr2lstPdTO45dzLptGhYW9NNEut5Hm6cW2tDewr7UXNBRNwRCE0psTKFZs2z7ybWGoSlUfberxIJCC4RQRQTZgFAqqFqjGHjyyiJalFdX5Y+cdlQzLWPJY6qRHC9j0icwxgodyWLK8m3/fpG/qsciJKC6Ku5u7U4ijDxEv0XqmqnPemNaONr5oZdSbnOgnR7NAs+IVZJxg==', 'MLT' => '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', 'MHL' => 'eJxtUs1ym0AMvvspNPQssb/a3YzxIacc3IegNQbPYDsTu5DJ01da2lsuO7D6/vTB/rGM8Hmdb4+umZ7P95e2XdeVVk/3j7F1xphWEA1cTl1znvsRL7/vtwdepwaWy7C+3j+7xoABDgZCNs1hB7Af4XyZZ/z4Mw9dMyzD7X461YnM3vvnVMdd88P/in3vGxDtnyIysS9UFpF5M19N+w1hcP0Q039C4ASVAmbJ6VgDLGj999zz+bwRnaOg0JrZpkJuRrJYIsVNY1LE19VGj4ED5aPlAtbmGV1CjsRgjUhwoYzBUsHI8uoSRZEkjzFicIKSI0P0xMhODATAEIOaW3LIiRIWYYCLFI42gM2G/GyNERzLkD0lcEwOWJAoVA8SmX2VwuBFTQVZU+gliE+BoI5yndBaCcCZbA236amcWiQoijC6iauDIB5c6VU1o8safbOAEFAnKqyh5ZAyYpIbrUDL0I6EJVlloSQmQZZm8ZUnLOqQ5UW6zZgsFIi5JkdmXTJCiJo71gLVUHO42gNTNbdQiy6CSBJ7s2F1KMK0RpT/ffp9Ox52e/1zD7u/ZOSjWQ==', 'MTQ' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'MRT' => 'eJx9kcuKwzAMRff9CuFZ25Et222GpIuuupmPCGnzAKcpTUhKv75yJh0oM8xCD+49AiFlw1TDvQuXIRfNOF4/k2SeZzWT6m91YhAxYUJAe8pFFYpatmV/GWR3EzC15/nQ33OBgOAtgt2h2G8AsmsxNlC1IeTiozyZgs4CeP6LwYbBicEjPkTyC0b0hugFb81CE/m/6aoqLeI3bbcI2lnlC+1iF3fiKgmXyk665sWRDihVhiW3BCMcpF+wXfMKywg/BJShGPhQw6j/X6cjg5CS2klNyoHVyh2Np0BOERin/I9uIWoyavDuyne3kZaUX86QxZfsN09ljmo0', 'MUS' => 'eJyFkLkOgkAURXu+4uVZwzwW0RiGwsrGjyDMAsmwhG2IX+9Igo0m1OecW9xsXDSsjWlHjtU09TfGrLWBjYNu0CwiIuYMhFpwVKbQfl127eg3M8JSS3vvVo4EBGlCkFwJcw8g06BqY/xhNpKjXGTbCbERx/piqjbM8URUUCIQ3PaTIE6pcjNLGNGDXsj+BOE5VOk3cOJRIGV0iS97cKgrVQqiXY+S3yBjOveyzye59waQZ1Ti', 'MYT' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'MEX' => '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' . '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' . 'MBM/smjIglbonLBiJRLEb5yp2DImnBlKTF5V7Sbr+75RKyH6uozNjIpkQBcDkyqIwzhWxeenn+nfgK9dnJFHwQv4e+lDwD1xrLUPOT6TxwUH6NFwQ5Q1RmjzqbEcKS5t37mKFKw8K22BGpzUFcIt6J6cCXA0pZxwJZR588QtfbqM57igYS6QH4Oxa5D84IakPwJzIbKM38igkFRjz3hJNDG6UzeOOgKnmI9UU6rcn1fRTr7l4MNhNYeP7VD/NK25Kx+s2FXMJKEdOIhKlRUbFxoL7w0qHJGx35YKJ+a+fJ1EFse0jDTaO3f3rqVTx8YK1ANIwuP5hcdUQdJdx3hEQRgim169ZlcUyHXuv63AJO+VP0ngG46faUZ0VBhDfxa14v64KNurxgaBHeAFBqWxZjvrCQ+vnp/fAkM7zreR6jU6lIFhxitgK86xRZv6Ie14cF849SHhwsO8vUmtFsw2w5D13fbZ1GeMLg0uOL1j2zAnaktjucMmvvBM7vfTfq5aM48HEYcZCYZtdJGfWNZY7zLqkEk+xD4SlrsK+8q6pnlwNTvKn+qYpAyCZzTzMcD2OSUYiM748ox5pZPAmVmW2n9CY9T7wyhiK6hDaQWKgmOLMTEltMUgmK7/H6HdvmvpztUjDXWZVXxZ2PQVSbGLXLxtn5Pq8ibUgJRHws5h2VEEQobtwOVwwFkPO/tdAcedtZaqz1ZK8ybMrM3627l0WTfq0rOkx+pZTDzFQ5k1PJ0dRKNJV9hbZDZWKwZOmsKOG3umvr+8d7YEc19Mcszwfj99OSLn2+KJu9nWbCZvqiVlC7qzesFKnZz2bwcryZVHFpAgRCeFHHPnlMJHrRz6I3wr9wFv6isulV76I40ObvAlN3QH8asAOKgoeCL10ZDc0ji5JnAW6sQhFpVCm4rIRjdZUxOq5k9kXJUiF6Z3nYIlD7VBxJ+/sgMAGAdxew90gQEgzs/GHFQAu0qQz6fq1DnMFXmC2rSjlmVLSiBgEHZKRUN68Ub8WQ0COZQzaPHVvlX5p1269iE2EsaHI/pIt/bT9M2RvnZUrhQiotyUWBmIl5/QBVNpq0kC5BycsxsKBSGSENFFV8kNg+XaUisciRxSosU80sB/yQtndnx7Blb+0w6nxvFF2f8kiJKe0DV7VqK6DnGS4Hve4sUpRzLln80TuVSR9FxHGWdhVTVUKJjauqaVrQBZVFMW4YEwPC5GC8JbhaSIbwa0MaScB9YbGRllUcIPJZD9QPbJTJ+LoB8b7maZTQCRTQ8054MKiHhleYucxsQqlCJZQQWeAMruExdBbW16yLwuTu7h9vv7QYyQOnDIqXbIHQ0JZACyW5vufdaz1cH5p25/XDJ8IS9VTRELzRd+YnoWO0996Qi9jssnoqw9UBA2W2OOjkVeHkvYInbr0ibztY9x/wx++l9HBM/foZYr8OU+2ei0juJsjwsGSFBQ1XmSD8cvUgIWMmoMNuEDD31Oo3/+HWnYwEo26AxNkrjHBoqTCMIaJqpRJ7f7ITAGWy17t+YN4uzppqv16ESRE4M+vETg8mDXv+cUzDxbzCGaHaZAOnTRsxBeIVMwUIo5T7aQYtbr3sL4X7i8mMw23opYofuLSPfjixULTBGaqXlUAB4RxYH9e8wVtF1O1kziwVii/qbeCvHTNOapIpnwc0vy8lfvJpYiECpmn13lEixHfYJTNbHgcrga8oKG+OhPwTXv7cF/VEpC+QLzKL0e8FygqlkHzIw1iCDEX+gLnKVj5gt2EinsG1mCjcq5LvOIhCGvl6GA1gM/7G0zjmcRtfA+KVn1LZmihTqAQgFZ/gNya4SzOB/cGNmMwLrzf6uJ4bQtY+AagxbQBIc9/KDFHM2bcyOly/jLzagkeIXZbdi9OSB/t/+pEYq43yqbnfnktvmdpoSC6b+27cEEqNS6+aGrsLGv+6NGUf/Q3bYnG2i/ku1QFiVSJiJ1LlClt/pS4KG/C9dmITKsNLoWq6lGuJ4VPSd3VPcOfB6fqlup40qjz5zf2UdpnahHjbkKc38rBpeMoUdD8Sz32gshxKw1VztA0M1HA90+hKs5Bq2EnXCmoLX6hZ6We/7BIrFpzp0M1jtaKNsMqFWNVuc4QqJvRRYPcneolMTBdaNeteaXmpFtK8tkxtrBOJ3SwEZXMnw2mnQEjfUhI7QX96w7xst7SkZtjt5WKfryTsQ8IOIf/ozdQy+5T+eSPyxVKn2ABSE+cgqm9yScBlcDdWV2kCUKZGRUAMIgFKFr+CsVZP8LzMeUOX1+llJSfE3yNTWiepKuaI7pcKLZqQ+fW8K6b+EojSuRGMf84XmQLk9mYTHYQDcLrUDSo9GcZlicmU6/oO7WyhTMiL78ZDZmSPV+gBW0L0HISNUYmEzTpMspHOY4G678oCHUFsuB4SvSEiZrngchJbx2myey2Di8nkw/XXEn9kOXtpYqKf5DWPOejVHjujsxFahdqnAWeMo3duUIMxXk26HG74GqSOYYolBg6h5BFuyDlopCK8qfW22s5cryqe6Gy+aP4yQCtKkKhqrVx+DaqFbwmj3NP/SkU9td93DIDfWezPdOi2M3kxqHfP7CxbO/dWvp7S+aP8FlBzJSi03hdAyiyVIUpmZ7TYhqMXYjNII83x1HiL9fj6fleQ3TdAuGTezkSGVpbILFxzkirLNHdonQuoDus9+R3dUS3e0ZgEcEd4boVzTDkul7sgqBsVf+GKZBMZ4UkaGJCFEbOGen+MTigTOiQ2ohxVUE69uQ9TkY+lxsB54ka1PVZnPnbktXmDFD4hDZcGFEEtsC5AqACaMo4s9QGnZOzCCLxAkv91oiiDDhkLy4m18ZPJGi6if7Kb+UUc6uLeG/9ky2hRiLA8d/bjDymm6DkHjsMqSHYmbNVue4bA3/pBudr9cROBgE1QcXEiD9p6aNKy+FhoRB5wDvaGuLXXejBnpDPU9fvYoUTZ9MU55lWif8EVZZ8eic1lXdXI1HxDm+yTZGecxnt39iH6D9Hy4W6XFTmMRUQHuR/ZdyUzV/DcIS8HDhfUgz7ICH5xPzZUhg2eXYmfuMpO8n77YggGZfXYg8gMxR7LflXvskg8QIZsrIM3P9H1/QMpg8fkJJgz0U5PQS3GQaEuCbQYAlSEg1eWoOk7u3+gV6LrALMw5wNVv4e9lxJS7FlFAxLgzUJFzaQDDMOCwDfCHKNzrQpe1HEl0LNyiaZAt33h8aEymEKPjRXw0OZCwy9WtqWesmZ18aiDjR13JowraQBV+UNcT8nfQbbprgVZRPM9okikFH5F/8YI5VoX5VmoXTJdvFIs2U0xNtGQ7NlMkCfYbkO68YyE0RgzWmxu3cAsPbiSJk8SGn0M+xjKeTJWlUNsZ+WHNvTJysl03srogqLRJxIl/LeI3X2VKUr7aHd2bBfqiZbsjm/tpqm8lSgct4MoU9Gf0f7aEEwUnCTPCCqU8x1LOXJBv8eg6nuTDjhXnb0QdzKJwjZU/BTH+mBKB2aKorJ+o/rH4nJSm24l5mTVVepxmAV/0J/x1hKXxhDFWxxnLZ2BU45BaCDZDiJecgVBDTZA1i98BYlhdbyeMipTEHtivtky83LeDVqvq02Qs+RBP7OMCVH354HUw9w/fNXs3YCErGAGIqTrrD88iMfZE/QUal304KoeHJAdM/k7cBrLy/wPYLtmlTL6FTurtn3vLVmE1/EWc4mXncBCdCqaXayCYj0Q9mOAV8ezcNhE+UHquiJf2NvQKaPm7WjhEoPs85lmjJL7XkHGjgLECM0zfMgWYBVT6JAk0VFqkLOUzDbuI/YraZYAjUiZ9B6REcHGZ/+/yNS0Kd8162fqJZRrjWeSTspMr+7GpG5XbgkUkd+OYQXMoMYE6BlIs7/eovUG83E1533vDce2gWLpM5lkgPL5enqL2UK0vksW6SyF8RpUsuAUvUIxBZJRGO8gfkqMzHrJoGsU1xsIsbELwQhG19nJ5nx0xIJKrwmYslPggs6WxEsqxgJSLXYgr7diC7RcugFlqKym3diTgCeNTcIyxp266lugBCOujEBQhLxzwgljz8hMfQWRB65Clv6kyR4j4L0VGMXa489CHB54qXVUs6GrPQpFvU8hCBTxCcYzdVs5Uk25oDsDG0aMVA2fD2b9CjV1UJzKGJU5JoQNGX0I1jvgHawOFpTaS6+qVOA5qu2TnWu2f0lht+TCPnAZr3ox+M3EiHtVeRvfQ9Z06dB4VqvDVWFEF6M5VN16Dl08C8m922z3Oeexq8LbvLxkciRDVpT6Hbx7azt73pGDY9Et5VVjkA5AcnK/kkLMWSLQCuJ/zUBtZ9VNsoUE2bleUM2mUSB6fg0MukD7v5zeYk+0FRz/BS9nFN+7or/yMPJhyPWeT2bTmEmxTN3VZVRivmGmDtqqtlyzpD+T9qQ38Myg1ufg0q7Qlso7H87jViwz6exrV1MAv6vmeeqj9kqw+3SIpzBXVzCjRrp4fDxenwbzcbH/LpKeNaMzl8Wmua83BOOZRwz1tfMXmDABofwVvW0z5DFMTnnvFWyDJ86R/h69rSmiJna1JsEecxVUBMPA0o6wRbkLBqofsTgeiwEqm4rBuSUlAWq+TOnbJhy9CfYsS2ZJFY/ZihhHQLGO0RkSOD93Va6ErmOtuHUSkwI+tGd9oW/LC/d0JNvwK0jh9nU8w2DAxQd0O86EJfU2WbeSh9Lb0MgPq+xMb3zqYeZRYaX1hWaqQgBtYbAa5l25xXh3bnlnKCh5BZoEyt3JXx/Znd6sy8genbygUza+4ZmPM+cteS5uQmQ4mbkg79K+LPDAAhzGTPWoh8SfqDyWJItJeSQ+sk1WfD2+/WuhirB0ZKMiataECvwHtrx6t0h6GM26XGXoe/R6GFelSBDes8tdl2Hb9UgYm58+oBe7HdyR6+L5SH3/+9v3db+CEWt5AtG3vquMB787SPIYakj9J3+UHn9k9md1ZsD6oDV3eX/0+iB9rcuMNovwbjjnAZNobZNVg/v8QR6Jiig3mDY26HHJ03UfRL90LcCK8liMWPLXE5talQ27FAn4HkR4BG+Du5gkZ/HNKn8gFsfXg/HMzoqlhfTteCD/zYZAtjB2pbwHJgSSAo/VzdIiOUS6C5Kny32BSJqxuZdG1+p8OMTZNG1wdYNL5n5ApL1bC4ZIoeG7l5/vdKbJVsT/3e2303h5WXmByoWCz6zUKENIzhS73Hs2leLloHnLZKK5RiX5pItlYYZIUrdIMOTcriRzkRSzknOy3LKFq3jR+YnD4VT6m9K0oyoi1H9VjtBIHFByWG8R5UDUNpTQWmAXBH0u0utBvR+zsrjssVKtHtsk+5dTth4LZFfEykUmzZnC0eg0fiyjSD0BScBXiX4thyt6jK49R5IxxFeam7hZA6OeGIrcyovXzWl+00XYZyJBUr+Ijihw6vjUOyDd6IQzs0GYJfod49UzEbWlgeqD80esiTsg1aPRqRn1Gz2wzu6Ei7NAL2fwphyV7eCdxq1e6EkVY0EJ3SyLDoVBAKXye9TiEChFonN9V38SleBZ/HpQahAylbgd5gyOSyAreyO/k7AZ5j5j7KSqQclg81u84Uoa2PFsZZ8trsTq9Bf2i8L1BGzpHVatC4nCammHoxEl6pYoPMy+vkG64UF9Y+Hfw3+QxENRFREx47MLuiEUvVWcsLVPQb0zZTMRVohYtfjD7m4+ezEqrrsYh6D/AX2EkqurlpXuV7ZzOZhzwfblm/t0whNN5ygODOoBlFhQNCYKCDofedolCDpKlx8XdtB0SZ9B5Ca7tph8YnY0eE6cWaBVolQje/gp/o3khrXF/8py4uC3djfLW2Sw7r2qVpTzoXhUNFS1oKBj1KVXRXnqWRQmRePOJnpcJH71aq6RrV97+WmS95u4rF0KSE2eARIStQpsnObmoVxEZ/0VF3cAr0O25eL+Z+mi00aHDmMTfMONYwGraO8rSgwieqVMkYtJdWpKNwjAxjW4ohi7CqddPUSAli18PXRTlkAd0E32OpYpB8fzax+9MzDDBipia9XUoWvNO1KuSl658ZuSG+iyoeYwnBNWX8x9Ulw9dlQvcYgcRK+SZdhWBm8Hi6PMzpCXnmbCLW+zWEzqQlp3dVwVmxeXk+g3lYr2DqMSAMZlgYP7GjicYaqttySx6+R0oZnND6qHCBnyv/lgaJt03MNDWlALhZ5wp6ti5pF9fzqYxfyqrueEh0HJ2K2a2cGLR5BbsHp3wR/1oJ96kl8R5VUgODRsCqk5lOUILE47j3MahX49mc6SztcuODiKsXpeiDMPV6bXuGKtc473FkEiVH0kHNDo9lnXU7WCuJtDv/uaY9PmPxuGZ5mHuHSbbaLPNGhJwb5r+yvtZ3/zpcjTEL1IK0qupI3hOkhQKrKnaZvSN9jRwRLa60k5BxJaIS4ACXEc/Xg9XRciCux37aE7Xf9TVngK5H4TGF0DeU25iwVbqyLW//HJZr+eKKGXQiZIcLq8dk5xZjXXQ6iCfHEAXQfRGCN2oGzfBoztWNxAU3C3ixCz052yMxK8DJR4ZxoFtqAfq3LyFhilzIg6McmRvU/nquGDk0I5mcB16SwGBS3wh6kZcNdChu4p5cuqI2XUNzP9eDgBtkrv6dyMfxJdOzrC5Fk6egIaySzoxe0YbTbal9+1CaTk/ApqCjnIBZkFuL8e4hB/se4fpOMHVtsSq8YKBen3efi3lE8XfAe8c7MiWkgmUakLA/UgNkIyMbVQOD4X4QB1h0+/6vdpiVeUX2F5wYmFhkCA9k9w+btLPbvwaKDfVkD+R9fxgWVGuFIy16R2n2eAH4J1bIaNZB4KcbGtJPK3QxaRNhOKKTqiIc7FbgishUXigcvDWwHDHZKtRqEkbCEcQcmnDGiX3GvaWehaRf4KItjsUDMAjEuLMYDtpBpkVH4+bCO+bTmEwxAOejEBLU7F4lvZLRTdmOGq7GjQVlUXmZxk3vNC3pUFi270phtcyTDWPMoF1qKjK0Jy5DWhnUFF7ZWxzxzU5TwqVUPZdu1t5pyZo0MGj3ziLLrkYvn6OPRwGG0CuT3IgvwKVDRNNgini+wi2YmNjhWxE9mkJoZTKbHrYJwdSrxZnts7pLja/3KMtIVFHWM+QtAfCS3Iha5F1LssqnsWHFNuTtfosso4FTbFI8xFsjdKUtaO1AFdDwEz4wdr5OGAjOibuSak0q4GlJkhypUgWJQsy8E1kIivu5QwMqAE08P0oNTrGkftSWf73/OS3iZ3dh8rKZO90RrMkjYyIM+PD8YAma01ojWLZpAO2HwktxbAE4O/TR+wsdJEJ2r2d3mwq7P00I1C2MQVgQxf5GL1QP8DJtyjq46xXCvIIrMjxm/wuGaVlxeKE/AJGVqmO2OrSGI9mPR4aW0jXLIN6S5mXmwWt33olnYhrwWv3GlkpthM3LJxF/AyORKE+q5Aympi3MjsDLXQvmLnsfvwJvqtyi7Yykw83y7GdnakyxRwMP3xSnjRB4ReK0rN4FoMrr2W2CptYwwi8tYkIc6FYg7sDSh06GD+DoAWmVoBY0G+0XYwWN5VYhWVBZwt8Y5Cl/kjDsOXp5AtgolSUeT4BcpXlQuWa7NxQ3ueu2zPAnFvJatoEFU9Et/y0YNYDozpGG0Hi2CLagBfB0bXzbG5jxxtHVFcHgyz5Jhqdw559E4J+d5RxuW8E14pzjYoUCWExLH3VC0hdneWT6vLy9hqohO/mfD3donLYeFkKgWOSaSI5AT0NApNeY7EP8wZGIprQQWGAlMGxUmRVlGwkC7PjGJRY5LgP/Jdbn6eYr+PX5l0SuczqZYSnAC7afJPZ2kkF37ticp7JJIss6l1xX6ZxXkhX8Hmsfp+qyhGU3GdPjsBMpRe2svJEM3yLzspoUSoBpkoCbx0SRdo17/m1nAa14mtpgTHoKwsexMWYKeBa5Ou6MnYdaaAmhDZZe/FNyTShun9eYz++PAzBx2t0oyTc4HoOA/aKfzYFipBCJbcI+eRtHm5GbV17WfaijrpqPzDoDQeKAI8Tc3ygezA7BrtUK/fXZnUI7JvkUtXDFTYWaXDiddTbEUdr5A3yIpv8Hqo5+/r6YB+3YoMD6VsVd02dQDNJLHE5DeGqPE9tKVNmZ86cd4mCcbJiBvxSx6QHc7bzjQEoolCK6IIQPgncwREAtJrEa/fmXBVXDf2hoNOzLZLoWrkLkmoMCY8cVc+SDeESW5RNvVyCFC+axoflZN8XUSt29mEbCPu30QSSohh0h2LjLmRvNPS82VM3rYiOxGbgHy4a7gRmMpQN0RRxjGGjsnQdWOMK8n7QT8rAT6+npOXYay7SoPcxGOtOw398lIDxVO81qN+NC6P6C+4outigJZKu7OILd5azSGLrGwFzjj0CuaOYhifwkNfy2ST2tljUrJ/djd1z5+cI502HiTG2mYQRDdlFX7MXsbMTzlCXMQYtpYombKROIGZV1gxzraiK18PJWE8hfQVkasleNptzTCMHOW2s3bywQuyHlXZD6yISnrgQMb7W1dLiq6Atw1X41Oh5HnoGqMyIXzQvZ/0XS15OcZZpT2stRbuRAk+8BAnDwr9KzJxwvXokt4eMQJIJvnrUMEbZxQRMdLNJI3ARXxZbkKrhYZu6MOUFR96QuNenHj9l7gVd/BVoQvbk5Ff9iyxLofZu6d0rUcag2Mpyc0mECaBrJ4/XUUqcv4kHafxyrbN/SgFvs0YSP4coLD2y7QO8xsqc14X4phgvanDLGheQ6NlDe2Y1BilGYkgMbtjPZqeBYJwkkgWXU6CQlbZY+KUBKBsepG80vXMQqPcfXd1UjLEiGBsKmy0Az+6kVsGgUrrI1pp11OupPeUmCnDh69l5mViWVqVU4aCeubhOO9E+T6st36cTChbLRtCNpcfXjtmGJRDnwcHYwcpI4LKyNeP+sw8Llt4aQtjwyjdTPAl/TsrjE7060n0ihz0Kjxs9uuHOYn7MD9tDPMXfKn3GrFWegxm9BS84thiD2/I0QuUEbt8cxLKKhTSB4Vxl+UPMnJM5eRuoyBKsXh38HKIjl3Q/1pEzKQcho22dQGwJc+2h9ltMpbNwte+a5fgJQLUrln4asnXAJrLqtgd0PBOBzn0BPGp7Chp27vL1/U0BfIhwLawwAHZaYgMguKXY6xcaPDMQjhRgQhWLoxi+aB47dOnT9fGtWlqNvcmredQF6Kh8PjLs3fH+kOs1wdEBBPxpgP1+gCdt/cfwffQVpRblLVRnP/sy76fv8/7zb8M5d5r81pv7iOQajW6z8Aan6FL0vPPr8NTe44VcVg6eeJw/qhv72qFxGktceweTRkEqpEe1/kCqLPCseCUZSZ/E/N/aCUqcgrp1uWh+hYsQjLgN/u/A+TBXLpKFIGwA0PDfj0YNX6NxY6YeCTpUqCRuysKVLaatFYjRV0MmEo28Cu3NG2boD7BuWhRrEM/dgDUtpwnyiGiHR2YYs766fc8zh0oZRuqmQcX20GKDyi5J4fTnW890anamR8B9zPArAtGr3xam4P8BWUbRfUgaQ5wxYaLyUANQNAiYi82K93/Dc/HrO4lxrsjfkYWAyRy78XeKUH1luUTu+cJItGBcPEcpZIWcN5qBcqTLmwdGVgQ9YH3/NGtwH2RWJfcrITswQhSYKWsIE/qj6Cq339aJ/FAP1t7opVpcui/b6S99hZbDHnrGyBv+8inVmzb13y7E/VwKPALUY/iNGEcuJtKXtn6yMmUaVyvy0Gv6HQIERRq4zn3fVhJ5NwGHl7ix1SpXI5eAZr9epInD2av9PEZbJ7au9XNwC6wT2oQa+CZvPR4XzUOAvOcidoW6kCy8+QwGPEoeQ02tCV05kMZ2DoOr1a9EM+FjINgpN/nnV/2T/l7j2VWOFfTZM+f6fzDFUe9H+4HTXAZQ4hkQZwDVuuxc4cF9jPS2Os5zOKpUcC+ghlMMrbaZT29t+9/uN0+PThWW6YGNvHcaSeqyayiIk05eBRrYVfkxft3jWBp0eNjlYXrQyJqHdWYnG0fo9iHkbEsjV2IuiaVU2PXqeCAWY7J/QlmdU/IqyIL97ziNuaa5oezcJuR7s9uLsd6KJbn6ZOCANLn/XC0g75X57gVLJIsaCqSm0JzLYYcayD69XT9GRYMmCgf26hcIa2IkDSrVBVw6bU83F8SFKqki6I2Bvz1XIxjjildq9FmPFIoW+c/9R0sCzIm6WezlQzC1nTrHgLuLB39XzoYREkJCqhqboF2mP485Vo8cUGZubG+M8uNDJpZ2zcT3Ln7ImT3rj+T2QGJ73gbPRcC6uOEhpjjpeGAbH/vdBoIGuGW0N8V93f78qPv/5zunCLe44sl8dnWmB2shQUwQahgP1awgSmoy0Y78oeK0m9UEYdrj+p5vr4D7CpdUT4QNeBuSf/cIgfQ/BgavE592eRbUEwJuQ4S1R4IjvGa5egmfXHpraxm5RbbvMsWiqUaRYjX78erolWN4wfVjowf9ULe91u+q3yIKC6u7xHrDAWbxrmyYcqlAwXsIuuY19PHj3VPNz/VoAI8Sl/wrnibWKOtycxWupF1hTnE0n1jbEQsnmwNy7M1Rr1TjcDhZ0lnEATMNHXIlTxp0yG4PqtgMWYolw1qSepoMYYwkQ1tFaMjhFbnu48zSlhXGbQPoUtrPLOR3TbaXZh4vwv4gz+zBstk8KXTfQJaUiSc26bKy9fL8eOpB4c9D0JAmK0tb/xu8d1uXi6k74OVPSTtIZQQ2z2dhOg7T0P4UqerzncsUiuoeRsAy1PX7AYR5U6wBkdmV/cgQrjAsHonFjqT4hit11eJaIQCjfTmo9g+5T2ygUBItxkKHKlTzGht30wUIblwFU5xVdfL1PdPM87VvSM9Mct2h3GTffpmo4/ipbtQDPKKB0u03+niYRiA+r+bBlHwaIenh0iCRGNxk/A0brbPV7ENpaAKK//w0OxIzEFk7PJlXxzxQO382C7zq1pupoROQj/S5tjJvyKvcNa3LnoKJKntKaiRfNGtvE8j+gV7xNA2KwIXPx1RJTFj2V7kb2Rne10RSUrp7jEtF9dOnS9k+VzvKDrIablqEb5ir+9QBcdG/xX8OHuIhdlfRka3qkJ23eEsaarcP6erp7s/iisPzkRTgAAByXcTJwrpetyMHnd1ED6o9nd8vfsI6jWhCKTa8uPZ4R9jKqQd8/WgKR1i07o1IdTb2Xbtm3O/F+0yAI/dyPFzysGjFMR3NTuilw/LwWqR23jVLdtsvutsTtepztbYiRKoxTvD3YwfvPijUHigP7fJCprqxfpmphEn/LtaYr9jtuCtRLoAyaw0fAH8DbpuvtOqt32TNDpIe6m50xj7OkD/njYelw8S5IOUQ/pogTMAsgs/lSQI+plmhMpwt7LME8uO5c1M7pO/bzVAvWG7PfI7p8f53Jx/wWMKe+EfdkoHgbXZDq5E6zFcRLksEmNWZV/sG8XOv2RKjWnyrRmkPHj0JNQs7nKkVeeHt41K6evc3+gtk5X1gBG/b42DBzadkIxffiC3L8dp+uxYX9YlW3M8D5AZfBc4nNBgx0vPxNmvvfsJgXkOpPHb6rtBZ/KOWjlbUoeAJ3ttlQGktId8MslyVb96bkuKhCibv8xQcH3q0v8WzLKd5VTiwszaIRgWVOWCFSc1sEs7wYMjdqcF3x+ZyGL948Fvn68dBmrfGyj2IOevQ4sTeZQWEdXaXz0kiSe1vNr2gXqZGfQd40bV29WLXhmU0Km31FC0bbUTpEV3F5AOnX1pX1jCgi42SU5A4Y3ABV4gXMRsF2s22T4OM3FDnSdefI2oucz4Ad38tt72JfoyIfS1KuODyAcnU7MeQTnAN8QHH9R8/emiSxNDncITEG3xVKEU+WnZ1NbbN8ja44ffbSOiFuu9S8DYQsRfvtOqwVKN9dfmsxcoOtLzpJoJbx0vtJ4foBCCrj/zM5LeQv4WDeSr59TXQ3oE/l56f04EumByvKH0N0Q8LdevPy6hAHQ+U9mNSRAirvygQPl+Hlcs8bSJzJ35To69lyep9JNcjai41KbCIlwraFyV+lMAr0NHR37y9/z5Ud2gbJpFeccp+YHU8d39/87eZtJJ8DkEgiBYwsKz7cOFwN+qY1eknrwdlm9fcVvs9wfgTJMG02/0uzmd5GEBQcgc+edA0UN4C0xmm4HRviGejq9Zhp+Rv9hmMuqixvoCDWxGnj6NNz9VjQOEC+MdyisySqTL4eOIT/qn35zv//pf/8v/BzZi0zY=', 'FSM' => 'eJxdks1upDAQhO/zFC3nMnOw8R82rGAOe8phI+0roOFXMQMCZ8ju069tiCfaW1PV9XVJplgfHXyO5r6WqLd2/pEk27aRTZBp6RJOKU3cBoKhLlFrqg4Pt+m+4nZE8Bia7ef0WSIKFJSkIDOKrieAom7a1Q9uvJlh/l3ZPgAqtKtOn73WDsbgaa5ug/1TIqIRuKU3nDEigPYq40Q9UsZfg/IXJQcz+YKGY8nXtaLbgcuHaUrUPJr7VNcIVrtM7w3ehtr2JWKzReDz2Dco0cdizi/VBYFdqvvaTstYojCayjZnrYi4wHqrTHMmubwc/Z/tS/SidK5rdVTnKQf6qjXfe7vPZ+3vobZtQ2LkaU4yYFxgwYkEzgl3X0RikZLcayn2Wi8pYSYaYQWEcrKJQXaozn/bsSI/bBy5LhSoIfCkQqRiocC9JWH/BcPdEbMsc3PuhF86d88kqDLMuxkW2pVljGgQfidM7t2c5Y/5VV/psDLMJVFe096VYRq5loTvyWjjHQ8RjyMe73gc8dHKvuUjfn+JIumup8L/1dfTPw3kuIY=', 'MDA' => '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', 'MCO' => 'eJxtz80OgjAQBOA7T7FZz9DlJ4aYloMnLz4EgbY0FkqgUuLTW0k86f2bmQxfNw37aKdV4OD9fGEshJCFMnOLZgURsSgQTC9Q2VanpnPTmo4dwmZkuLpdIAHBuSKoasImAeAalLE2XZ5WCpSbnFzfI6x+cQ+ZBtP7QWA++wNHPrd+OBICT6rM65IQ4tw99g6xdysqutEL2T+u1NdG9aM5003CPw+a5A1nxkJY', 'MNG' => 'eJx9VMtu4zAMvPcrCPXSHsToZcleNDnsKZf+QG9eNy/ASYokSLr5+h3S6aJNdgtDlkQNyeHo8bQ/Luh93W/2Y7M8HN5+jEan04lPkbe7xSg450ZAGJqv+n5s7ufz18Y5Q6vXsZn37cKuuu1mb9cbQ8fV7PRz+z42jhzl5CjVzkzuiJ7e2sPyI8BrG1wMhuD/DOASwCOAU/diRjdg53L+FQdw8JEjHKRP6qKWD7dutev6GXXI713mYqj7jWHtuTa0G5vkvgfmyHkA6uAr2289i+NGPUPD/nMRwtq7hguVzKmtMZAm8jhbcaDCVWfRB664oQrledgEkTjYhHnFWXvvuYI5kAdQDegbLHKCd20DRa5shC9aiwpImmTysObLyicr7Mh6ZeNkOXYIh+DBemEGzwS2nr2VNCzmCpTCHsS1CA+vwr7DYkbUxB4Rk62UO9eg91GQBMzwhkGcpKQArwg8FtUWAJQ/9Gh9LdHlp4pRzLL/nVMGQiihFw4N+EpwtIImNJONQ0KJb3VaYxqt5h8KkZWk+jYIAu5oqJguRWEnvFCVMImi/pOSCQrwsm0kwqf2SsaoNX1Rm27UtsOsQDiobqMWJXoX3S1nsWMQVlOLtE4m4J+tx4EbBqqIlKyCK/z8HLKwDs00x6MvEGkqlpe1D5p7CR3TsLC0Mj6vbQ1GU59ib1XkgIgvaxTaiPHoodIUpzyKzTscvVuzuFxH+PbaRJBPem2EwwW6uH4lDrt2s59vd+ux0WHfHmYPNtY4VxEH65H2XdvPHrgEfI/62nzNGOSx0ny44JXm85eX4D/ABGI3wL/3GTCKMbW469j8Rm+lbLCjCncmijFejPKlcsy3WPsvrE3lfJFhtJjcPcmzO7n7A4+xON4=', 'MNE' => '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' . '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', 'MSR' => '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', 'MAR' => 'eJxdj8GOwjAMRO98heU9N3GdKKWo4bAnLvsRFS1tRGgQjRrE15N2xYWL5bHezMjNvAzwvPlptjjGeD9ImVISSYnwGCQTkcwEgussXnw7FO4cprm4tQiL69NveFokIDCaQO8JjzuA5t7GES7Oe4s/55Ir7hCy/2+F6ERLBse8v1B+41OYeoQ5PsK1z2Yiw0p9DkVyXRwtlqWo/gMVE5RVLTTwXm+z9rUSXJhKmBMbFnrTsOqtrlnfOe7ewt1DRg==', 'MOZ' => 'eJy9VsmS2zYQvc9XoOiLfQCEhViYkuaQUw6TqvyCiloTaClRIzn++rzX5MROypkpJ+UcCEJYul+/ft3UfLht1cdDPQ6LZne9nn+Yze73u7kHc7psZ95aO8OJRu1Xi2ZTl1u970/HQR8+Neq2X99/PH1cNFZZlVqr2mKbxwel5qv1ZuAE077uz78srzsxsGzGVayfubbZ16pP52W/v/6+aExuFA79DHO7VLzJt+j8T/ZTM5tszV6MiZPZi5f5VnFD0+Sieb7U9++WHxp1vSyPw+Z0OSyaoV/W9XvThRw/TBA+A1g076ztltY2I57Lc10vmvVtfTytVp8R5VRuLtkv8XxpYrPZvHYfNycLXzXwD5dy+o9uQ0ivuRUD/Ruhh+jfQHFZr17ljnmsgKJ9TE/4/a+QHFxXTEREQUdnvA7ZxKcuGcel6jrT6WSNbEZuOpWCicYrbAVutZy1CrMoW3o6rHj4G9kdrpfTb2tRjn35pev+uO6XZ/Bxej6u/rL862l//Pv6fb+iXp1xI1HOelOU76zpdiH3QQUTVAd8rcnKRexBEc4knRBFaPGLQ21Nq3FCO4shRDIDKlrjB10YofYtVkKvYQJ2cMiTPsQ/vQftguwk7bJJcJsq7reKlslYALdf5ed4Oq6/ExeIJihfnCmDxCR4IobOuF4zkpYRF4AM2iXjTTBFM5vOM5DALbQQBJC/EfqfWPykuxZZaROsAlIophwCWcQsPLmSlM/lfyXn4FyeAEne0tvt5HugyMV0UGtEoRWoBsnwvVOYeRmwaStyUai7VuGBbnMPaTpIzWmPe06jcK2oDMlGDj1UqpFt8ktJY1KqxwG8FR+kecBVirTV9IH3DpNSdRTFAhLeHusRUimi4SDuAARfKUwTSwCqCUQNEv2AQggKksHFDou416NvWIUawe9xhFvgk4ueuoIVFXXkU7UXLx4nCRL1B78FtGSdGTtlGUFSLyjYsaaQAAHKTk8uRmQUxypV3ELieMEKCUADY8Q1IUK3zEDKh59c2oGNUYSu6w2LBNQJT2gS1SfQ7SMHYdgKp8iCnYwrq6VahPKRUCfMOHnTj5YCw+bYWXxFftiREFlUmZXIPlqwiNBU4D14z4NU7BgN34k+YbEbnWEMEiuYYCcSH2C314b+2Laj+GT3Q3JdSxmhBxKjLlLXsSce8imNjoAZpSAqklmQjwMyVqbblKdC06C6uinnoI5WSBAuwpCkDs57MkkheVmD0VjHRhmpAQkTD3WrRommkb6ekKgrJV8icAmtM90SIlNO/fADBOVkGESqSLUQIClAvhTJwndKuZacwcFNikE6HA/TAzAPDFVxUUvL5LfuZSKpclPtJGYeEFo2SNbM6BtPT28EloVxSgjApIPiqJ86/3y2fXyY87/g48Mf8eyAIQ==', 'MMR' => 'eJyt0rFugzAQBuA9T3G6qlIygM+YkhBBhk5d+hBOYmOrBiJwQ9Snr0NKU6ntxmbL3935t1z05woutWv6Eo33py1jwzDEg4jbrmIJEbEg8Ea2F2ebt78gz/OcjacI9liidrKK7KFt+qiuEc5WDc/tpUQCgiwlSDeEuwVAcZLegLbOlfig1WFPhBDqXwM0AZ4DfKEPZL+wSPeJEBPm2Y2L5B+uZLIR+cQDG3kou/MKfCebXrddXeK4dNKrZbCQPGVxvoL+IJ1a8nUWb9Yh8GqMMA26xpb4nUXrcVhNEYdYADdRnH1NChXvvYLxubamUzr4UDnYozclcqJHBKNsZfy0+3GxrvXXW0U8TVcztlsnM3abtdk9aMGq3aK4/sfd4hMEJsZN', 'NAM' => 'eJyFU8uSmzAQvPsrprSXzUGDXkiQAh9yysGuyi9QGDBVrHEZr9nN12dGmMSHOLlMjXt6ulsSLqZbBx9vw2kqxfF6PX9NknmecbY4XrrEKKUSYgjoD6Voh6qTfT2eJnmqBNz6Zv42fpRCgQLvFLhMie0GoDg07cQNtfXQn39U12MUqMSCEn5mrO2HQY7nqu6vn6XAIIBIe5I7ktyN5L6rnyK5KyWrVLRIVo+iW2Qu70NTiubWnMbDQQCTJZuU4v0yvL5UX+7ef5xL8dK27T89H7nWe1OZSH+TxqNDgxlYl6LfpdpgCuoOP9nPKq3UYuc9EcGFHD14n4I2Ci1VQ5XRbEidk8+U6kDPon4nARs0ZqSnVYYGtA6YStQ7EiYwpzJIDDJ3qKXWXurduhT+rt+2TVj1jeaMOhhpyERqi0bSYT1QVs0dDZZC8ZG40pBhLJyF6XFxpacQ6dRZLjyASPYUmdeIQMHi5k5nni/EDewTF6nwWi45AR8vurGg5SE5xWCcJY3BuOObjYMlG/r/PvDeWMMXSnuuVmxC51KYg6NAkoqP3RRbnoSlYxDoZ8adgRVbOh4EWJefvO3D3e9N/B5iiMp6uplYFNDxZLDUPIIMM3iXLZJuuyn4v7vd/AJaVOXc', 'NRU' => 'eJx9kktvqzAQhff5FaPpJlnY+EVwKpxFV1m0Ulfdc8MjqA4gcEPv/fUdQ6p2dSULzYy/c+aAyKdbA59X300OLyEMj0kyzzOfNe/HJlFCiIQIhLZ0WPuiYe257ybWjQi3tpqf+k+HAgTsjQBjBR43AHlZ1VMsqDz7dngtwmUxKHCd0nyIs7r1nvVDcW7DX4c8QyDohaWGZyBOe2VvqVSnpf+Hyd0x+bZcViXfu/JmtRs/fOWwulVdX5YIUxj794rNbRkuDuUQEKKexf0OP0a/fSh2CGEsuqnux6vDpfRFqLap5HoH07nw1ZYfdJbu7vl/0jt8EELJTNyjS/oM4mStWZNT+xP8t6iu/yhR/hIpbbiMwjeV2f8K60V1lXvJLRhtmdbxSMFTMCk3TCpmUqYlP4A2IBWX1D8bBUZk/OBXfCUF35MmKrSJCjJMSfGcKVDWEgp0IrXwdBPvIxf5tTOGk4Gmx0qvIIVhi1WMoJdAFETd3ylPmuMmjz/WcfMFRcyiDg==', 'NPL' => 'eJxtU8tu2zAQvOcrFswlOZDiS3wUVg499eAC/QVBlmyhsmVYip3m6ztLJ0VRFIYp7nI4M7sLbpbrnt6O02lpxGFdz1+q6na7qZtT82VfWa11BYSgcdeIYWr3cuzm0yJPZ0HXsb99nd8aoUlT8Jp80uLlgWiz64eFN9h203j+0a6HQtCKexb5M+eGcZrkfG67cf3VCBUFAfRdSxMOtbFX/L/pd1F9UFWfXEWj+hTZ7IkPJDM24vUyPT22z4LWS3tahvlybETZTu3aP2ky9TMtXTv1Tyq7WD9/OAJJMXN5nfpG9Nf+NO92/3HbiMeuR1O0oGW9zD8BfuQwuM+EvI07NmKcSvd6gqrRmqzqg4tJpa1xUXmyLikz2Toqp9w2qCCBuPqc/xT8j+4wDIXvaJJWkVxdqyRtpEzWKEsmc5hULY1KZAwgNigrbc0pC5WacBykSQzUKkuj7yCWBjAox3lHWAKZwq7i1mfyOk+gCCCTNoMqsGbNVI5BjqlAH2XeOgszzsYJYp5ZmMBp3EaxzAsrEnfZC7EXlsvEXthCoKwMmyo2PBuCZQDYCyugMs/1IIBiRsC+4IbJ3PtRwgAAyauCdcQ2WNir0GYMhcqiy8+xqgsdtwwcqINVQpYhla+q28jNKAtfMDJy4YhdZzRLovNoM5yhaHKY9cTKnj2w9cS1OVZBEO/W0RbPC09K3reWRbDBOQ+q9CNRmSZPxHOvPE81gdHKUq7HARaOogzwi6u2iJH/69Xs788Fnw0/5ZeH3/UR54k=', 'NLD' => 'eJx1zrEOgjAUQNGdr3h5ztBHIYSYlsHJxY9ApKVJaYkllPj11sGBGPdzkyvCpmGfrQsSp3VdzozFGItYFf6pGScilgSCeUhUtte5GbwLubMImxnjxe8SCQiamqBuCbsMQCz9OoEy1ko88bJu2jtC6m8JTgluCV7phewHK6WOsuJ/ZD+WA2+PuGy+WHymu+wN30c88w==', 'NCL' => 'eJx9VLty2zAQ7P0VN0x9EO7wIjOWi1Rp0rrXQLLFCS15RI3k+OuzICg/Exc8AsTeY3cxvB5P9/T0MOzGZbM9Hh+/Lxbn89mcndkf7hdqrV0A0VC/XjZ3w+qe+7zfjbzLDZ36zfnH/mnZWLIUvSXf2ubmiuj6cXXc0l0/DMvmm7Vd8K4h5P8CcAvgCcCf9rlZfAJv1l5ceA92+h+wtS6s1u/BEt+Ac3/Iw4YyRlRvG8p/5sVh2UhIBlPNpe5Wm2hxMB4P+9+bqfbLjs/9+rhdNgH4N0N8BY3G17FUnHGk0ZmwDVhePqift1CtdUZvXdC3xUuupGgiudYbn6M3ijJIFcWexKTX1ciqJjG2kZ03rgTNLGI8d3i8Ny13HCJq2JVvWyTXWIyz7JzpyKkJF902w9A/jh+EcwIEpMM3SSZiVdQMWH2RpN6ZVJNUit4lCRKELxyStiLnlA+qaERLEiumG8W05FixA9u2iIXK7GAsFQnY2wJIRtgTROaS6WokyKSmA1wgG9STAD3wZV7EchJMII+Cgnc50umd2NX4/MBRYUHS0U/OEIQm9VlIOmiN4EtIEHd6n1isSRmmBMgOFdEW/sC4qZlfSTGSaqzeQHRXkBHNkCUB045l3rZ0LI4rymRfKqOtg9MSaboPEtEvZFYLKFy2lIo6QEGqldPieTe1ES43C2rJ8ye5cQlbkoQrMnJlyTNLrjT5hSbPNG/VpjxxpAtHunAMMCJyuYnTiZahXynODHGjK0XPF4pt5sqRZ448c7zVZHOlSJUi/YsiflATxYngdfml3Vz9BaX7IVo=', 'NZL' => 'eJzNVk2P2jAQve+vGLmqtHuwYzt24iCyh556gCv3LORLDbBKsgHx6zt2EhbalNVWQu2J8XjmvZk3tsO86XI4bqtdE5OibV9nnnc4HNjBZ/s69yTn3MMI0ofMjlW5+zEVKKIo8twugXITk6xKclqu97uG7k4EujI9fNsfY8KBQ6A4KMPJ8wPAfJNmjTXQzF3mC+mXZ0dydqDrNWkLQOcSgTqmFwI4wrd1smuyfb2NiTOrpE0fOVDmPxHvT9l0Kr3etzaX+gEwjQDyAmDu5WfzrUnBtTsr6jSLyZfkCqZZJxWiCBCX+R8kDdyhRI345/PopxMvqoQz+Tl/aHfujSPq5cvKqkIkzqUKN8Qtaf1WpTFJu3S336BvULjAQXc46O+oscPEgU5OigohwA8YltGXxILASP00DP73Nl4IHMpNW8REcP6VQJGWedGOq6HCLMuuut0mbV0eH5VmyuoEzog4ByHfRftLrvVaKPkyRedzR4Y/11SjuvnEJI0ELTWTIIRiwV1FGc+OpRQRUKVDFo6MijN1B2VuctoO/1OBEJ4FQH15KZG+t0RTrP7NU/SPLpbmw8Vyhj3tePfveLF0f7H0L1SjJFePlZAiiN4fJl/yTqqLh+ky2LWHkVs/ZJZDSIkU+LGQRtjcqPNFRfEmg4kwoDdWCFdQxd0GtRsLvD0aHEtHfV4JgU7cWWDNcjXJvDaCy7QvUwo83Q4CiwVpC7bgvkaQCJFOWxphBIKBCK0vgFBiQ0sbzjvBtC1FYX6kQFApFzLCbk62/74WMKbAwrAeKW7psMSOrBBWscLwlcMwvDNOx5X5sBV8+gKm8UvgdKfKnJYCD+UIqcygxtz+03h++Ak04k/E', 'NIC' => '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', 'NER' => 'eJx1z7EOgjAQBuCdp7icM/QsSIihDE4uPgQUCk0qECAUfXrPTTRuN3z/n//yeW1hu7t+Vtgty3gWwnsf+TgaplZIIhIsEGyt0LiyDa0e+jnsG4TVNv4ybAoJCNKEIMkIiwAgH8ulA2OdU3iguiJZIXD+xrBjuDK80hPFDzbG7GUs/8iGTpLSPT6mH1jbSbsGNO/jEgT9UCgTPiaFaYZfPZzJ348WwQuvn0m0', 'NGA' => 'eJxtj0EOgjAQRfecYjKuoSMgGkNZuGLjIYi0pbFSApUSTm/FuDBxOT/vv58pp1nB8jD9xLFzbjgz5r1PfJbYUbGUiFggEHTLUZpGxfpm+ynuQzRr4S924UhAUOQE+YmwigBKBVIbE49PIziKWfS2bREmN9q7iL1uXcdxP7gNDvjQuG5rcNxJKRHC1jVIuyCdg7SmFdkfluh0PGQfPE+LpACqv5XtXjdLus+S7MdTMlVF5fuxKnoBrJBHhQ==', 'NIU' => 'eJyNk01v2zAMhu/9FYR2lkJSsj6KuIeedrCvuRdOHBuwkyLJ7Da/fpQDNNjWbrsIgvjw1UtSWp+nPbyNw+Fcqu5yeX1creZ5NrM1x9N+xYi4EkJBvy1VO7zsdd8cD2d9+KFg6nfz8/GtVAgI3iG4iOrpAWD9+nLpoO2HoVTf2t12i6hA8msBOwEnAb/jVa3+gJGYfLrDlnFi9wXctu1CjjaYQiwQMyQ0RcWRcm6aLA2aGCEmAW6bjch12uES0DlQOcmB5ZZJWxyI5FAiFYLlzac3N5GQdzebTAy0SIhZ4Gw4i9tCRJIoXUedhBAxoJDPPASWguqM40SmyFac5CcHpJkrTlLNNdd/8wIxdmJM/DD9rQ+1VJQbkTvWRdwsGhGnuPRxE/9ZCkLyppDpLH3XLl5rsv5D0sV7N5r+1Aw7aGT65GW6zbtsWDanUkkzovptop+4vr+LUSQgJMMyBQjWRO1ZFlcY34VgfCUugApbe28CpGjsQA6cNa6SJQFR0QkcBm0DsDdxlHdrgpagjN0ZWlgtpSSdw7/Cdb6dwk31gw1fkv8B5nLX+d88PfwErqzPbA==', 'NFK' => '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', 'MNP' => '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', 'NOR' => 'eJyF0LEOgjAQxvGdp7icM/QopEFDGZxcfAgilJIgJUIo8ek9IE4aHZv8vn8uzce5geXe9aNGO03DSQjvfeSTyD0aIYlIsEBoK42mK5uwvbl+DHuHMLe1P7tFIwGBSgnSjLAIAPKhnCyYtus0HupKHpMjAu+vDC3DmeGFnig+sDFml3G22ljull8/NQGLrcyL72UiqVS6cxlvh2xtG6q/noAXW1696/n6K0XwAqr5VN0=', 'OMN' => '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', 'PAK' => 'eJxlUstunEAQvPsrWuPL7mGa6RlmYKLFUnLyxVJ+gfBaZHZBgBcnX58eWMdEvjRNdVV1Cfo03Rp4v3TXKRPneR6+RdGyLLgY7Mcm0kqpiBkC2jITdZc3si366ySHVwG3tlp+9O+ZUKDAxQriVImnB4BTWdVTaLgtunb4mc/n1SAXG8r4ELC67TrZD3nRzr8zgYkAJr1Iq9GAOrtUo7tZ0s8r8kdEd8/ow3RdFn1sOzWb4fjWVZmobtW1L0sB0zz2r5Vc2nI+Z4KGWUDQy5AgE29jd3jMjwLmMb9OdT9eMrG2XT5Xh9gfYSryrjqgN4k93vN/ps/EoyqsV7/u0b3l4IlLt9jefobeS+q63vGffYL2q6DZs///biy9xMpgAlpbjKUh1NKhk+QwBp2gkWaDHReZoAbtJRmpMQko6ygQDToeMJs008miD2LGCHT8L8lu60vMpBiMcjmxhYathgMgXk7836xnAmmNdK/bkGHLDAa+E6W8Y6vrELTjd+Nzsi54rjVMlCTCFEihZ1W4iq2uMwhZbMiyu4xmOwl+nMLdPj38BUZbtEA=', 'PLW' => 'eJxdkc1ugzAQhO95itXmkhz8hymkFc6h90p9BSs2YNUBBA6kffqanyhVb6PdnZlPdjGMFdyvvhkU1iF0b4xN00QnSdu+YgnnnMULBGcUll5XxF3aZiDdhDA6O723d4UcOGQph/TE8bwDKIwth1lEefGu+9ShXgI0rtM47+ZZ6bwnbacvLnwrpDlCPPogOacSeB0jxxhZkyh+kG2B7JG4NLFHVVGtaf3NW4V2tE1rDMIQ+vbLksmZUCsUXUCY/WSuV3jr/WGvjwih181Qtv1V4SK9DvYwYxw34ievwn2qtTHZBitySdNIe0ozKlfeRT6J/1rL0ljOV6uULzSDRCZUaBH1KwjJqYiPKUCQJBc0n/X/DWybraBg1XlXzJ903v0CwFd8yg==', 'PSE' => 'eJx9UbFugzAQ3fsVp8uSDBgbCJAKZ+iUoZU6dbfAJqgOIOxA2q8vNkkbVWoHy6fne+/ePRdmrOFy0q3heLS2fwzDaZrIFJNuqMOIUhrOHQhNxVFpUQdN2bUm6A3C2MjpqbtwpEAhTSgkOcX9A0BRSWVcMZelbvpXYY9eQOCCznjvMNVoHXS9KBv7wZFkCHPTS8BYDvSY5hHJxi2LDg74xPCqGN4k/ajwNquowT0ETpjjedDrldgg2EG0RnXDiaMvtbByzRgl6QZMKbRck12cbTdXZ7OKNzWcteQoR9l2VYVg7NC9y2BqKifOevtrEW87SlKghyzLR5ZRkh0c8G37fmWOK6UU/rCW/hsz/ZdJd/SOGSeMxI755oP6mzfIytNOnjY3uxNE2/R58e2Cvsu4XsKdr8L9//7hCxSWkns=', 'PAN' => 'eJx9kj9v2zAQxXd/igOztANP5JG0pELykClDC3Tqrlh/AdoSbEdK8ul7p9jo0MQLcXi693uPkorz3MHrIR7Ppeovl+lHkizLgovD8dQlZIxJeEPBUJeqjVWnh/14POupUjAPzfI4vpbKgIGtN+Azo3YbgKJu2rMMPO7jMP2uLv0KqNSHyvokWjvEqMep2g+Xt1JhqoCXfjGuZ9zMuCfzrpIrKbmh1ojkllF0IA+0AEv1corfHqrv15x/KaV6aNv2Lv+/3bXd6SU2pWrm5jjW9Yc/JwyM8GmKtEJY8J9z6md+geZrlCMHDre9C9lMZDF9YuVzlICq5zsoJCAK6Hpnc8z/SDHW3g9kLW61T+UgTTl67TkJeNqCDRi0z35aE8AaE4PsogfLyxmf6ICdeS96FF8AZ8SV89f+4s7Z3TsfAlPZbR3mXIjbUIqpTBYoEzRHh2vZDAJpzmQLiSrF+PByzUBroYxd64aot89QJN1uU8ifu9v8BT00vYo=', 'PNG' => 'eJyllctuIzcQRffzFYWeTbIg1XyTgTVAkk0WzipfILQeFtKyDEmxDH99TrGdYDKYXSA0m00Wb926VUU9XF8P8naan6/r4el2e/lptbrf7/Ye7PlyWPlxHFdYDHLcrof9vDmY43R+vpoXll6Pu/sv57f1MMooOY4S6zh8+STycJD9cZ7N5a95tx52r7vn83bbd9h72dyeBLCTs1lGY5Mee+L4Y194H1ZfGyrOerjstkM/gxlGHBCbDK/fnHVzDm1B+Tj7sDr011cAn/fTOMj1djn/ufvvl7kft7en9QDQ4sKVKimaYKuxfjLOeuOZRxzqWraZ7/xzCEH00diduJQlublYJ8G6X11Okpq44iSPH6/JwLyCUG0D1RmXbMO6mSSBJ+Og2CLO22DYQQ2cRkndeX/PnECwRxeL1DgXAwiROxsnJ9ZL5bMs46PDcU1zhWy7qrLOQpixzc5EiUraxAlK/BzbeKwziHHjswdsGZfwKrBx7rzLFG2FduyLAVCHfyZlNp4wPLDBVHVlolG3CVAVD19sEghqEaUSgD9jNOo8SNYtMMUjueijukTAUJWfbukRgQczDJweaxzzOIGxAX4E0yANHyMWGlJSgirTlQAqaQxQjROxMXckhFoizW60cSZoi8vlEyqaDP+HJ1nUXRSPwxjmYNxkMoG6oEkgj7OGDbr1r4CSo4YGedZFQiH8Lni6GlUVW5tt2yTNVx/GRWlyjrTTR2JHrbplNBQGQsBK05xVB1KItfjyPsjtsnm+7s+XEwW8uV2Obz/gBgqtw+rcNewpz/HHjyb5tr2+07H/Nkw3+LZfYu+X31WaKgXtJqsVnYkvaL2xIrlXeiSshqpo2EU2+X9T/rzf77/PeelheqpRJprWpvlp4ERy6bJmVgWFNhnJllKBq3FV6epSQnM/9uKuvdC4ct5PQQ+W1vs/MIYlSFrWa30RY5OiXa07asW+NnVkVe8PLgTrgaHw0j8UcB36sdrrDM+saIXiskr/5KioSxc7UtYG6oJ3M20hm95PJustkYEovZoJK/WQ1TORZXW0BEPXUjTMS29gFUAXPxj0fqYCFVI5ZA0NUBWoSO+IrmJb6LoO2ZS21oC+KyZFr6+qdd46005fW7xf0A/6h/Ll09/vtWx2', 'PRY' => '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', 'PER' => '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' . '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' . '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', 'PHL' => 'eJx9VMlu2zAQvecrBup5aA5JbUWcQ08+ONfeDSWODTALmsAO/PV9j1raJkEPtiTyceYtI12/nh7k/TE/va6rw9vby/fV6nw+u3N0z78eVsF7vwKikuPdutrn3YMeh+enV305VHI63p9/PL+vKy9emuQldb66uRK5ftm9HWR/zHldffM+druuEpy/BfAA4Ckkv/GXavUJPNybhWYGA/Z/+H6/H7HJatcSL4XFT/8VeLgzm2qHBvAUXJJkUtfZGtdo74K2WLLW1WK4RrVeDTudM64GTQ5rnau32G6Nx/DsL48xRNcBElxkgV6sk7LHS9CypmauVhA1lghSs4t3HZcaXe5k3rzcRrSU2KF77kp/mfhYdGgRZWarE39UTlyisEhc51pSTb7PuO8VG5dHAyhoSL2CG/kBa5JajQLKMFLhTI8bWIMWDSi4tEt0pfzRZK+FTwtqGgxHIkpv+ibDWfSGT7vUIYoJTEIhazRQjNB2gKXdCb+MJ+BNgwTo4EFFiXhiZdSshdUHpa01WNcUbohpDGTbACshxDzRJXMAcYJuKTdduUQypcZF9PzjorMRovN5lKqLbrRqPmqXuX3WheKJjwv9v8ULpaWsk1Kq3nR9jjaulALbHi4jtnBgmdnQeqCoMlHQRuWL53Mshecc2WCC/SCjFgdTIlhDpE1ii3gtOluJtIVSEy9GA1lWv0p7nH52Jjcht8KUYpN+jJt6FW4Y2UPjgWEz8dEEjIGEMhI8KCVuXdws4zRA9Jio43tDzWXgMsjFMpOF8Tyo7QB2xumleArMFFjePajX8Rpm1bRlOogadVGMovWnGf/TdiZ2KiboQvzfKaeoPEmk4H4TjMkXG+oPbwQK5sW+Aw3YWtsJPrkuDCUNmmAMptfF/ymhWIjX41esK5EydSgs38lrfrRvrn4D7788kA==', 'PCN' => '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', 'POL' => 'eJxtjj0PgjAURXd+xctzhj6hMca0DE4uru6EftCkUgJIib/eShyMcbvJuefmimmxsN59P0ns5nk4MRZjLGJVhNGykohYaiA4JdH4xuauDf2UDx5hcTqewyqRgODACfiRsM4AhAXjvM/Hh9cS9aL7oNRGEhuauduwxJ0xBiENXz/2hW7UpfxE9qet2j2v2l+h5N+KYLbOxPtynb0A8X88xg==', 'PRT' => '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', 'PRI' => 'eJyFUj1vgzAU3PMrnpwlGfx42BhDBRk6dWilTt1R+AiSAwhISPvra0OipFWlTj6f7+6dLSfDuYLL0TRDyg7j2D153jRNOEls+8oTRORZBYM6T1lpsorX+7YZeNczONfF9NxeUkZAEAYEQURstwJI8qIcHLBwb+ruPRsPc0DGFtbynePK2hjedtm+Hj9ThpqBFb1xqVECHcJIoD4rX7zMzBfzrpneLXQe5t2mJdUS2J9MkbLiXDRtnjNwYu7GpezUm8062zIY+6wZyrY/pmyGJhuLjVRbGPaZKTYYS62217L3qilbF7l9EfrZU4eRa3ngFtxLPrrKsny0+CQwmG0Lmo1HAkEBRr/5PwOJFJVLjeO1BgQBoQahFOrXhVO+/0H/NPJViAFIoVDZXjGImAwPNAqQCiPwNYZcRejPHJch2I3k1uI7UkVuVaC01boTJwwxBhm6ezruOj/xqt0qcX9pt/oGokWhHA==', 'QAT' => 'eJyt0E0OgjAQBeC9p5iMa9rhr1QDLFy5wEOgWCCpgEIo8fSWGEiMLt29vHyTzEzcjyVMN930CVbD0O05N8Yw47P2UXKPiLgVCHWRoNJ56dSXtumde44w1ldzaKcECQhEQBBIwnQDEHf5UIGqtU5wKwv37BcIdv5kYWXhaOGRnsi/sFJqlbOq3FCyQO8iJh1PsMhZkgCborV7p7UTn90/ZzMvFMwFSfqHE9m8rw/LdfH8u3TzAlRdVZE=', 'MKD' => 'eJxlkE1ygzAMhfc5hUZdg4VxIOngLLrqghwiY/48MSEDDE45fQW0k0y7k58+PT05G6YaHq27DRqbcby/C+G9D30cdn0tJBEJJhBsobFylzqwprsNQXtFmGzpP7qHRgKCRBGoA+FpB5DdL2MDlXVO41uxeBACz58ZbBicGPykGcU/uKrK5BU+Jk5KBTKOQpXvlVqlfN300wuevU2c2yVKdJTTSm7FfJYH9nPckbQP0zxO+Dm3qxMoCp4qC7/JjO2NK8HwibHkVOZLo1Rc9BrTNIzwb+xh7Ltr+XL0JgTeFmOjMVpm2DpbvvS0+wbC72LR', 'ROU' => 'eJxt0M0OgjAMB/A7T9HUM6wD4lcYB09efAjjxlicjMBkxqd3To4e2/x/bdpmXjS8HnaYBfbej0fGQghFqAo3aVYSEYsJBCMFdvaqc3Nzw5xPDmExKpzcSyABwbYmqPeEbQbQaOiMtfn0tEqgWtTgpESY/eTuKg9G+l4gH30Kx/h49X0SAjdEFT/cEOK6S5zbl7wqqiVOPtMb2R/QdVIR/UAKr6hOKHX+Q6lKzldYl9tiB3SOVySW6pU1TLdZ8/1Cm30AM59SSA==', 'RUS' => 'eJx1z8+OgjAQx/E7TzGZPWMHcMlqKIc97cWHYO0fGisl0KXGp3dkoye9fz+/yTTzYuFy9sMssY9x3AuRUtqkahMmK0oiElwgOCXR+M7m7hiGOZ/+EBan03e4SCQgqLcE2y/CNgNoLBjnPUdeS9SLHoJSCHOcwknnyanYSyzGuMacj13sVyHxwxiDwLcOPNrz6MKjP3RF8aIlqnZd/ciL+h9U5VugPsvfQj8Ahytg+ASNsG3W3F9usxuRIk65', 'RWA' => 'eJyVUstuwjAQvPMVK1eV4GDHrzgBJRx66oF+RCDOQxiCkpSgfn03LxVEe2h88e7OzsyuEzXXHG4nd25iUrTtZeN5XdexTrGqzj3JOfcQQUbI5ubK8/E3oFiv195QJVCmMclcktPyUJ0bWncErqXt3qpbTDhwMJqDDjnZLgCiS9IWkJXOxeRFcsNVSgD7PxBYIPCKwHf+RbwncJakkotHsDJ/gDlPRGofwVLfgXNo6+TcZFV9islwdUlrl74QIKTP9AqaQ+Lskhn8gtXgfWjrh91P4Sza5xIya1t/b2ejQhgmcAXKZwFoFrjAMA29AA1CFlIsq53gnBnwQ0cDSZVhchdKCCU2SsHWIENmXJ8GLGvNFDUBdikOQsiedGTvQxSjeKYhB4OfjYXhnTZFbTO0h0a7Mm2LmKDuK4HClnnRztHdVsYFCKBiNfNFXj5dnmj3/6OluOcf2kNZH5yFOiYK53vaZNPW1dHePeuYoJOgYnp61d5e1P+/28U3XtTFjw==', 'REU' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'BLM' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'SHN' => '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', 'KNA' => 'eJyNkstuo0AQRff+ilJnYy+66HfDCLzIahYZaX4B2bw0bbCAmCRfP9UYK6MoixGboqruubcb8unWwNsl9FPB2nm+/kiSZVlw0TiMTaKEEAltMOjOBatD2fDuNPQT/9MzuHXV8jy8FUyAAGcEmFSw4w4gP1f1FAsqT6G7/i7ndgWU7N6l/jX26i4EPlzLUze/Fww9A1r6xVOBEkTrUoX+ZqX6uXY+WLIxkwd0NUsebnlzB46voSpYdav64XxmEJd5tCvY6xj2T+WBwTyW/VQP46VgaxnKudp7i/IA06kM1R4z7e1hi/sZtmBPdV1lQmxJpfCYomq99ugoqkTd8vXlM+2/Ym1LuYkvJCYpPSlol6J7Mc6hAxG49SZSv0ecPH2TDeG0QA/R1nKJhutUoyJ5BrGyYOneDEf9hbS5e6S9jDxpU0qLBqSyqDkqcIT03Ei69henMiA4WGFj3MCd1KvOfB+wrut7Oh3dQVpy4Bmm3JAatEYNylNArgwNpKcdQ/cWJ4Ym3Bg6w3oiT904InW2quNMxtnHhSv6XAqkzx5T/X9s+WCbBzv9wr6fKk+a4y6PP/9x9xcAgMKQ', 'LCA' => 'eJx1kM1ugzAQBu88xco9e722weAKc+iph/QhIv4lB6JAcdSnr5uCVFXteb6dkbZcth7uFz8tjg3ren0WIoSAQeN864UiIhEXDMbGsc6fez7W87RwXzPYxja8zHfHCAhMSpAWxKoEoOyhG73nt3ffOtZu7TQ3zYNEdj2vwwM79mSyuus6BtH9FiVDlGxR8kofTPwxP7YXLQu0kCqQRmEO2maouVYKDdrTAX85vu8sWIMZyJSwAJ0SV7kFLE4H+S9ct0Q/2yoK5J6XNkez56M6s2i5tAXKXVaKvkrKrzdWySdbQV0A', 'MAF' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'SPM' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'VCT' => 'eJyFkctugzAQRfd8xchd2x7bA4YKs+iqm34ECk+JRxSoifL1NURpN2m7HN1z7rXkfPEtXMdhWhzr1vX8KuW2bWIzYr60UiOiDASDvnKsGcqW96d5Wrg/MfB9vb3NV8cQEBJCoBRZEQHkLTT9MPDL51A7Vvt6mqvqSEJ2LtfuiB17aahRiAxC90co6UKJDyXveGPyCa6yrHzglO2Ciu9CuJ4riHFalj8LD+H/hVHHmTCgDHJKBIFV4SISFiyFk4xIuTXCctJCcatvo9JKaDhw8yeuD5wnO55ZYb4HaDfS34z7i3PZFlG+f0oRfQGuW20f', 'WSM' => 'eJx1Us1uozAQvucpRu7ZZsZ/QBVy2NMe0ofoNkBQSYgCC1Wefj+7lfbSSsiM7e9vBvbz2tPHZbzOjTovy+25KLZtM5sz070vLDMXQCgaTo3qxtdeD2/TddbbrGgd2u3X9NEoJqbomXzF6rAj2vfUDeOo73/HtlHt2l6n00nRvNyn91Zvw2k5N0puSwYDfntdzpnRqKe3VsRGRbB7ge4Zuit0f/NDFd/Ame2fsvsPd5ZX63+Ed90n9iIVk7W1cdqyKbV4LbWpSbwRiiZo602NIy3BWMImaDGBKiPaOhNRVDhNTyKDF417XDSutMRg4lFCDUhwI/YkbDx54+EFp4SxpiQYwhVipbFaqlx4QpGvhMSURykteZ+1S0fQRA7QBWuCCYXEhdAxMvxqIfRV85hDRZxArk5yCIHsEgjW4fFiA4PNY+oPITjfcM4IhsvzkE+6y53H9EZQgmuOWSZ/LS69bA7oHUJjSXpAx68C1Eg2jQkwXSMvNMHRAKdRpAn4FDIVWFDp1D5QX99wX/SH3T79hofdP/CsnFY=', 'SMR' => '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', 'STP' => 'eJytk8lugzAQQO/5itFUlZID4C2rIIeeeuk1d8JmVAci7IaoX18bCKmaqKrUHJBs8+bNggn1qYDzQVU6QmnMcRMEbdv6LffrpggYISSwBPbI5qzK6v0eSNfrddC9RSjTCHMVF16Z1JX2tEE4lVn7Up8jJEBgIQiIFcHtBCA8xkZCXioV4RNlccr2CDb+zYLSgicLvpJPDG7gPE8yQi4w5UufuoAdF/x+QMoo4WK0O7Nignj2GeiiKz1BME1c6bxuDhF2SxWbbMrn1F+ApWegk1hlU58LtlrMuj7G6P2wvSR3Z/GQ1LPj3BFJXdnfUjS1cX66srNxyKwvp3N86Ay6sW5kk+W2C+tqy9TICK3mGUFmZSHNZffN2tfoUaCjLwyKYXGj3f9VOxS7ZFfrv2VUiAfavAfrxlaH8d0qk1+V9tYvf3zx66Xy5oz7fYLQ/WjbyRe5IwIl', 'SAU' => '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', 'SEN' => 'eJx1kMtuwyAQRff5itF0DYzBxW5lsugqm35EEj+wSm3Lpibq1xcTL1op3fCYe89lhmpZO7h9umExaL2fXoUIIfCg+Dh3QhKRiA6EvjbYunPH+us4LGwZENa+CW/jzSABgc4J8pLweACoOmh759j85RqDzdoMY10jLH4ePxoW+tpbg9nkkznap7O3iTD4RJdCSo0Qn3uPuVZmiqs1Jp/oG8UDoG3p7k7OP0Q6PaYu1zjZDuZScw10iiMkLN13rBJd2v5rUeUSZFby0hYZLx173qJyFRdJvAD9wlWqsa22q9muMl38Vm00l07KKMSse9/V9vnHww9LSWuy', 'SRB' => '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' . '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' . 'pLgf9NbTUgCuuFrcbW7XetNbMNznfNNvlMUUazjeaFodtlGGqur81SCRLvZ/cfLaeQJ/glyzcjxZ8o6FXYdDXrAg8/mQPjATetBBW8wYG6UCAx/yewXkkT3cp8RZKYmTEGjUE1XTjJstf0hOb+TVFQUXOhOl4mq8vB7LfU23CeUxehDHcrGQUHapp5i5kVm8UCWiCy4UcQGW+iG83Sd00yiAIf8txfy1Q0WgRO3zd0V9N8qbjx18f++w9IUHTt7uff7JqVN5sTLaVQTJplS2QshoWWic3zk5kKHnhyVuGaBivTBRcePlLt58IgdqKzcmcYlSDpwv4+OAC7dzQZUVziYjv6iAoAviLkNE+6kbrSn4dmtBE4CUOzUZHPrrgXUpfJE+S6Ll5eMQGjZwO4kHgWp0st4pI7Jg4lmTKXH2fVaAf9Ji/+mCyeSEGnk1fU8vO0U5+U/r/tkw/1wSUfUXu/TJZMeJjDc33sdTu/G/lQmnVWjz9ULilnBHG/vrF/J0Ai/OSpUtPLiO3tIGxTTValmXrIApxKtQRL0Tremw7E0qkehK9jQEh+D6mtPkqvl917MPCl0u2leB6bubOlm62nVnJz1Q0pfit6u1jZsssvoU8A40FXkUiA7q6030Bn7K8aE6Wczh566uKs0Ry8IkMMhsz1+XAcGDS8c+i1WWnYSgIftNNRGRoFzSsj2Xu0i10Q2KvNS3UEiZj3jHJR0bmQIesgPA6+13zRClqr2+wN+BFdD99tdEUonrayT8hfjjR2H3TRyaLZta2xf7N05Np/LQ+/XcYePnYtr+8q6MLunZE2U2eB5di9KnMwbOkfuKJ1UUnqEzNMYsPMdOaimT7TKdPbUWwcH4cpTptZ3ZaRYFxR5kFbk9dXH6or2OWDrRr0m2lHRjUNXPEBeUUPi+TUvQ4fCOvX7GqAUkRjxUeadfx3ZDfey1kzAfLHIo2IonpMHXcSR3oXx8yxFAt76thyIC0EzdQwVLpvut+Q+PVlSfNxKUuIHmhHB/4wbPBMCtJACtijCkeXom4zMbQJvwnsAYk3csbBfItwIQ3Z+VZhl0N1VqA7G1QYWHFvRVPbZSbr/JkEFcOQRRVg7P/CGhZCL34mGAji7WxaEkXfnWUCCKGZCBDaswJEABqJ+M65uH6/AGwP4KNnApCI8FUVAeQFEMXg8xoMomhu25vGRDcISlBBxLU2LYb0EmUDkrlaabM6VyGxy+yviIsutK7iHknBowgQQHwSYt9vq+sRi0YibcR+wlLM/pN+8gTqqm4AZVGDJkG1CinVoVKkcAcpmloZdD+vDJRSzpdpEUQoOo20laGw7fMYUSmnKkpH5bLavr9YA225hoZaZuhvUayPJElKYFA6p2H9ref1/W0h1+MlvmmzGyWuzR5CZkUB/CoRqikgLghDuTPR6tn+s8bzTWYkeA0SU5ATlSYtah9/BG6xmjjKBZaOmauPjCLIXh+fGpKhOotToTRFIpg/ZqsXCDsGp66ctCZ8dSvItRT47RM5PuZFysLDoZ/MfbhDrJOlD0j+WiGc89W9Ca7uHvkBP1tN+FCZBWyTsPaFVHm+1LNPUmhoQbcICvw3lPxriXSb1T2aZq2hC7eByg2WGPCyEMFh8oOFnGfQpYByKdVnzcqeiYpaTz80/GAd15z3MTS4MLdDpYVjZP0HD6mnLPY/KV4eRbyNyHzLPP9+Og8+vH7cHd8iPkcyqR6FRaFj43J6mGY66K0RehJEuMfHUl38pwLVKpwPUW9RDUg+u+thtp9G7SLOuXdL7tRmHJGoGmIbBMPD5b2EQbr1fAiueRBTj1ijqorjUf4H2Vw8deRpOVlpTVs8g5soxByMP9mVg3EFx2SrR/JaKGvuApAkSBD840s9FNRdIGKK3+5hPK3rGbyeBnwiiNenFrZuKNkuZjhBD94/nbAmF6BU09tshVmkC9WrTPtkmlz0qhIhCWGszDSfwmQ6Z62DLPIBcwOKoEH5BELd12WBeIWtJewpSHEl86QyTAbetDJrGeVFnf0Vj7UivRyTMrVZUh4gi5SEdU5N/elIGjIx+qcha40sbXV4KyTWZcpJ45/Y0kJrE5PTqyOfPz2xKMXnA2oy7p+2gJ8uJ3TylZnB+YEFT15rw/1s6aRf0/kz3gOKwGERqWyUvBiesRhd7r1SSUXmSvjyhjQ9wcPe9+pXt3iIrsTkGFbS13qJadyLZm3OjgJQnpfDq9qbs1iLSwHP2YqjnbzqKYCzTI+tzIk6BE3fPGAkZFbuNr+AU41YOaN8g8lziFrKqvl26huklyMxvgikPpbPe42HTjTD58EaeghNt9+U4g6ET1qClrmzl9HwuQ7vFyCDKdYm+rAo8KH+7Mf2hcgKM9LtZpOTZyiCSUH4nvaf9XQWjoOZekyYDrXEYtN088hPUHOLKP76Ume2+sfUo6cjJta1VyjWU1G3JqlvRH3/WNOT2p4Wq6/jCckfFj6QwnLcvvmEBGB5b6Tu8g6udWVOZ7JwCp84iYjLbGSgGxguIpYijQqnA61iCU8xDW3RsJcMfHHhn3JEj0ItLqXc0UZ55eWK5kFXL6JscMGYP2oNRXJPVtbjjfJ87JFw8dPGr9GsoPmcdAEc6jGEZaGraenkL/tY9kj0I3I9tCimrLceCX+Ijg95wu09s4k0HgWPjxbTfAJ++Kapo27JnYFCtZXhAO2/zb0X+woaZbgo0XzZuaaEPl2YRs0jdLecVItyjkBBtWnyswu9w+8z420nbdulHG0es4RotMPDR1n+mnZdWTvohQ+k0/nKR868yy2xmU2xOKQ/tDIZTbmfbZnM3dNOonrqd71PnC+FMnWfkWJxMHV2I5mjLDRkljhQge/rs1HmOC12rujL8pLxknCGsYz7A34SpCjABebempevyz6T1LE/rUwzRPEX+bKRR2NFoEkmFPhW3+6sFLl6aDkzei7TA18j2pNJKTdBus6frOgosuIufGZJorvsbHnxDJkQot8CJAEQVQBUi+HSMafEUPhVs4W6+bDQfEi+warDKJCAcKwGJIK4WtPEaCsJeKYxswIOUT8hTK8XwnT7FcL09xWOkLqSYf2fHO302HtU+qa5cS8sucO+jPKPfzp7paj5KMGccxRdEoYg75nOR40jTuezjSefQstj+EIkliqQdXNsHs16ZzubhHfrIl6DHjswOIVcvkBrbsz0Tw/vRvHGw4FWX6kOtoPZQgQdUA7oaPB9HoyEZwsCX5cqiB4Z6/wGrOQzRh7JMUtPqYbMuxHAfujs5jkYNkbTn2YiDeZBnTAnw/gQvz5GvcR/QTmYXSMYxy+WnjqZjFPMEhlorshm26ygTOSTG2XDj6TEKFmNmxN1XtRQ5b/7bc4wSpffPLkoUhEhAbDpyPA1Lcj6ZFLK7jJlpWL5cnKJZP22RLKemyqRLO6avZJJzAH5f4sjl+KIKTPfk0UuJZFhrf8tJZFR2bkWQz4wsX9OEEFtba6IevU8fyO7z9WaPZh+rBQOBwDyPYBBMyTA5gNJjB86tRKg2KJv21J2qEX10TXuFbSuMrlT1eOZlB4pDSoKRGvWJ4mmF5/4eNWnY9x3kWKR2ggicm0QvTZkfF8BPmJCHLE1N4hyGi8053mDFCdUAPGi27xNbf60vIhgpVQOxVotqO/QnDutPxqfon1qNMscDvsXR9tP6U0rXB7sXE/FGDD0tagOVzRBaQlAyXrr8aDF2/Z/h1NmLeOmf91O5/Y6rQsC++LyNOzCU5PvJkcs97DGNBjOXTV1ZTra0e3wKhRdpBd1sCYVjQoTnWZWPpxvwa7QVebO9oqr1j3oIx80bRPsXMTLiG4Xm9QGWWJVcWhVXRhmQ6+86P17iCq9pWBQ7Clj1bpWTshTWOEylXExQEUWw4mQQ/Nq5p2jVA+yST7Nwm9P5dJFjo6x3cTSIQnu15cmqD1mvsvv4yAEM8Zo7LVJM0TUFzMjWcpPld/M7coZoElAw5Q5JgQt4/wKG5uaxafM5YZLy2Y4zzw+S8d23rDsfPMNeYsSEp2Jh1gq3VRASZDrXMozICFahdy2oVIFqtzNTbTUn1nKgFk7PllMUgL0WqRl3Zl2LUoG+3K47Ftu9mCT7rJQNGs73apm5Fq8DrURLRN/hjD2PBqgew2AQRo3f3FIwHwbcLP0MSBJZiPZugyw6Na9p4nSRqcurIIjbUrIJ/ZklvPjHA42PDeMDqL1cHgS0vN4bumZEBpSrGxI9GEE23Eag0cjajTap2NqgNxHwUIlbxLxtc/dznfOPowxbP9QTfTb/z6aWp2zxtKyL3g+kbUVhXBglO/R2HXosVNX5oHS9DzGHevalcJZZc6V0J6jU2u0b7nK7fxt1JmCxJdHThhZ5jfWciyGWRaExqT7bUXhnWx1PCZUvdCUhhI/vG8D6iwjDLm8SV8nhfIxNPmzuMCldiJyIBemiw/67Qf04XziOXteOqYOOVKCV6cHvZniJB7KpFqNTMvVW1RMWX25f19ZqH1FL1QsR8+Fb0YNoQvlucsPOLEwOQpjzHGVmXOiPcTfyZdlNtsUumIDgz3GkEUTU9AU+zKMBqHnaU3ZRxFMw6QHGXRlZqhZD9T80Erga4pgHDwoZ8ti6po6w7PvQqRvOuwCfdbkL0DWVqx1hq0h8hEOQlwRoHb1iReqg6LxT7/7kzeva7ht++LYMlSNdUIZKdZp2qU+2b5h4dxRtihrFbsNNeYyLtjmuJw+zpSwiXax7NvNyw/NLNnZkC+BlfOiQTezbN8bcoROhL42IgnHAliw1m6IlMdZfqmyvtO8qGiBIl1emBJhqatkoUMhpqaSSNJsS/ILWTI8dmIyLb9IIthpedylbuNwJz54QmWuZZK/XpmLD9qrdaHm0i8/rVDVKqq1xbeuGvE3/ADyk1m/ESiCq4QnjE8KxO7y0YiMo74ucdRDuSpxlS8suoFybCvKsXG02+3XjPfqo110tFfgZqTY1Gm02/Vol9NoFx/r/BvGunKsLa/WN0Z6f/rrkc6/fqTLbxjpNox0/u0jXR+7GP5rxnrTsd5+xVhLNemPRnv97tquOtrtYrR1up4WdtXBbjQArYzZiGu6YJzrxTgXFt67CRSwWulWLb8HuNV0emrEBK2XpRjb94c+DjKHvn166P8TizytNvCsHEfivpF2h4JvN0yDXzPeufxXX9v5G2t7f/peg69MrIJXpxMbQs1FDnq81X/t9Z732RnWe5MIlr0h9QwHfn5LLEf4829d86V8xM0vVrzOAZlxVcueNi6EC36+/i34+SdofCkXi79eLn6dB57THK/6mxb+myLlVoZWpy4U1WEKpKspMGR/+sYkKNv/pklQ69Uk+IDs/wZC8PedAPWK+n9zAvwWQoCKp58mBPW3E4LBBLftr/nYf+5t0RAyrjpk8yJuQagejW/MC2axXIIyJm6BORsqEn1VzSRRZ6bm32ZUGH3OLEHFpIGIwZpZgpWXVi3JiqLMM3HPUM9nApwBZSZiAmkrGI+N7CR4CInmqoFXyXeSVD6YGVk2G9oiMXZtxitsQ0nXhGvyJ6b1T2UDbPuxIkDP/KkHL/xFVOWIcFXnVsguPqK9ymELp5pcT/O9mO4yXYQLslxd4i5MqZVOD17LzYxZDyTcYQWIzfD8vinBbpyPdp7WDQIX2Naen4JPszyTJ7odw0nM/nfThEVmmvLCAW7sTtGpoU9ZgGJGzCODAoN1stu9A4zPle1gmYoOGX/bj8ybaVDUi+vr/CZS1bnd/hWsHmebm2dTCyaUcOVsZtDur7lO5aUH/ZtM+S4G9Jc5Hy79v99unSAM+iQbHdejpWOognawHh6gbPF0DdlyE2zRmFHPQs9JUavuU6Err16XSsRJ5qoSp7rQZXnSCV9a1dZzuHnSDFeKvbFZ6Obzj1Zet0ghWOy0noPF6GrVj1CFaATUtgLxK93KhgrIgSa4MTqceA+PfZXoNqAY8vNwy3y45QkwdbSVnYjLFUD/bAd/DVTo6nA01l3ELiYa3ppMiHcscaEpt57mKUwwt1JbfQ43kVpndY9k9+9mCy4ytzJ+tzvz9KFKuKKPcB6cR0tcRwGFLptiZAjvm2RmZwYfdnjD4GJFC4ba1BP19Dz+DJDO4vOPJvthrR1Kadia3bxu7iExmz9+GY2SmqaN3QKiyxDqouvhMBDfNoUesCPvBFn4lSfSc4ZSXX3sHgTghGYAn5QtVn/d4NkSIBgSFDJrJPr1x10u7v3dWZVXqEhGVyDWkLiWbwCqzh9c7A9gqF7KNDiiPtxGFN5wfmbmX0XFQoHgvUWOkLloyRFSP4tMWLOauMunZPxdGGL+AOl0MeO/zSq8pXmFff9BSVBTlG1w86KEwsf3H2TUB8rVP7ZbfjO4LBC8jBiHgNdQfgGOv8UkGU0LgNimUOFehPHljYnOIEAnADcWzVC7aNQdAMQyD96Q3xaSZ6bkWX6F5Ini8ZeSpwzKtGjCBpU9pyiF50mTwzElLawPhNelLtKWof78x2P0AB5ZSjqs6lq6BiZ+VjRwuai8E7t7rhV05Pb5TCHGjP3PWbPZss75ykXrvm5zbV1kqTrsiwm37YpkbMRbXaY5dWFtuahM+EHzeOKcsn38p3IJch8hAl1jrLAkhfZgCa8DAPsARXyHInCmJMu4E2cfspauswciXpPMp2IQPG8pnWqKye5e5DKQdg4W4PEhU6Q9ppeTrIffzMOoHPy/HQSFj1bi37sAGvhJl5sH5+IFNiC0dKx/LGsAjo3UmhyeObKEriRNZOsiY1fUxrJfFzkDAo2OmXeOXKAeji9ckReCJcGugXozttzSlSIvTp6V+PBb+3vfXR0rKoCs3xRApHg7LncFKpQS0pKVRScxvOyo1/T3F0gogNT/8gJI/jsJIJqhsxcK+1D8OH/89xY+RDjNmo/9v7R5pAPCv2EgYUUUQOEkifCjGzSKhOGumkB2ZQLZzIqXLNmCtZEYMIsMfPV40aesdDurX3Zq9FZuAfArAN+f1bUkQF7Zrmpel/2qdjnZr8BoflKey5TmMHBvN5pId2FuUmHu64IaakVzFtx3Keogyv2vn/8w/cf7n//1f/y351/+8Mf9/v/9h+nf//wvf33+8w9Lrvcfpucf/vyn51//+YfHfT/461++/uvPf/y3v/y0//jXv/7lz//xD7M6TadHk2ir+z9+p5N+/utf/u1//OFge67r/tQPsaUzckqzV2kUFsS3RFTQV7HmhRQMQgve5naHrLoPdKLEurc22GjP188im2JpZs06pcUKmP12QraprxsAws0M2AgWeNt/ZqXmnypM4oK2oNEXlzJv8qEU7TfqTexTZReVDylWLEuhEp4by6+l58V+w75fISsBLUHakB88IH/stCptbMlJzUSzn1zecS4LumjFzz0OZ0SywL2y49+lvXlbfwMEEaGc7XR6yV4iBfQRDPaXn0pj5TVB2vxYarYHbFh2aGpo/JMVYRc8WNUXr6QEaD201ZDqHQUhIBbpQ8sdNvJG5GfflHzjWsH2LyhhyhQOa6TtGRVUEEEmN6wgSPh5bbMTGgQvni8C837Up/XgiieWx9SdWDwaxxb3lgw45NVLZOu5D1iyJjt+U16vY1tzsZMZXbdhHuEXks+N1efLqudYaKb4gycf4f2W2Udyv+f+Pu0p78i5wfeAjViPw47gzgmkdlkaJCkXxgaRAt6vnx5MzBKJfWBzvR5reS20vt1l6TYulUxMWTE4KerzGeCcGfmRSVAz+EkpCqaq59VyLa58dVMlMpTrdWv8fuXSRF700/Wb5eP085eP8sFPypW88IPr6EaitNHIJB1CC7Pp8G194MT6u/H8/eoRjm9X4qMVufl43rKFLueOvg+WX/yyZ2nSy9/lwF7Tb28cfmF8Vjr16FNlKX1d1lrJr/5Dip6Tnwn99mF/+zNefEmIuahZh864j98q+hrPbPFSKr50pOHmYxTu2IZJsmKSNHbjehq+fB4+dMDCH1u0C07zhT+4Hn8QryB3xq/o0DQMTTU90h/hLgUzvjOhrzpGB/udFayKj2pfJ+vwPg1Uo33v9xtL5ZGIGxo23x4C8c7N1Fybtted9xCXKe9gxt1s5l+MI2j8Yopnan7D3BdTjlOpHqfKLnnA3JP4MxvAnYmPXMnSyztJa0Jd49kItbY2bVnYDB6ndQKtzdybW2/S7bE/+t1P3g4vceqVw/BJyVdRVxR1vMwqY298qGYt5yJ+xq/aG4u/9OqtfpV/Uy+rDIqS+mTVeN3S5ZT73U5aqMyP+dGM6fUL82Oxk8Yof8zbakJEv27Lfk6vs76YuWYIvjWLSnCwOqMaspPEQPclKEBmCAsBIBbh5pab9n6KdDpsiytazh+H6ktAKLfuIx0eFz4Af1xPoQLdFvNRvqk6j4y/DL+49787GMMQ+KlkHbvc2nEswm2GAVpcZgnzJE4mmzlrmIXHebmFmcbPvjHjyD6nxat0asq5n7LUtkAizJ2oPOxdsNoW0oRsHEyXm55OJZzW2cWSsouZKdP5dui5fgEZfHpfSNwWa/BcPpzL9i7ZPkT61sPHIjAvRixreH2ARdWFu09FK02kFUbpH3NOJM6JqWeRoqwgpgNc7rWP0isSldCvS4U5nvTVFxfF5sI+QfRE1Um5OrlE6LS4JFQaAA/54Ef4jE7iy/GtqF7ZQ5p0crpLmpbjO4HOa4QH72vdwidbrVvwcAs65cOOtUcI3Vr6jbPW3/mxtI3iRe4PJcNCUmnPzUG6U5hemPNjfHb4XqTnqUTJNPD+W+zN5ZCixenb7fDtFdYaYRqmJmXmDV/spbXP0sUYAauGb67ADlx+T5mRfu/Qmwg1lDs80JcZg9P7sPauZf4T9nj2gTjcDpISRRKbWjMHnEJp63c9Duv4mEFINSTD8Zetf3Ocnxd3SaffYuJqyEjGL36s9+JKmmRrWJ6NjKXdtLGEYsSXI917oYTZGbqQdaDGdYPiOmkYkpXqsRI2GuyW3jRCiacujdYADQVa5kgSqXyudrr0z/VbP9YUThbFn7yThmaSwk4UrTUZcZw++izrLYRM49Riny3qUj91YtLs6ftcrFu3C5Cx4VHXbiaJZ8v5WumMfvHi5oQfa6vhkrWfvofTTZc1FXNwucnFL+eczgqNcbrMdjyxGvsMJ5xfaoFsD/3LR/SEwatGA/0SURjRBzcAUXikvp7yPjSrTcRK+wlrguUhS0DpseoGngl4Nc/oFwLnSxSaUhSf9BmLdPdmVWpEPK4285ZTN3r3QQyZLvpRBWZK0NvhWA0o8diC0n2sryfPOpxeLi+2s6XPohbmnK+wtpzv4PLxoJPRcpEP5oHf1/yYUqsUZx7vYPaZOxg0281UHjtTdYFKQ3VhHXHXdfBo9e4mqrIejI28onQbpGg+qgqelPn5bHSh+vOADwB0heJ6Nrl94YsulrXVzGScopnFhY4WmRxu3TDZSLKqOS0UO9d9HovWyLjQq1mvchWCkwaDxnrUrTl+wibrggQXlFiUDePhvmERujSSoCPd7hCNQR9ZmmiEaMNjHewULJx8vu23RsgsFmoxaB/8ohr5gEh5qe3Y4Ai0GnbCDpknzuva71M/sCRdWUhytJBcm2bEWqXFLudo43GrwnO+aQLZk2XxwhznZhlR2Or93n8jnZ/ve5a/oSvL2Qi2nI1l3x6qaHGIZhOB6JirGqJcuTLDXdz04jWOhqnBPPOBcTb2Y43Pu8LocTZSHc1r63Gencyiu4QbuzOz6t5Ci5VMPhX+b9v/p7T7lNamloBlSoCAI0ewqhocI0Y2I2gUuKcsFxX/ihQT53hlVu8BIklrvMGyg3rjze9PjFJCrNICP5QYMreu690kXA8PV3d6nIAMgy+s8nub3EV1IvbqMi8aDiNC5AdesCEjgDhM2+Ot0td3RwBJYmP9WcJPpv1Z7xIzse8Yh3CfWb1uf+P7JyOWH1l6mHibAGkN1UsGi0qAkh7BJqFxzhRxtuNY3pD3IeNN7Qy8KtF/kEZBVOvSTdgXk3aSny+3MR+SHWeXguIVml4ja9YfA8Qg89eioTmURlTxXsxCVN/58GozypZARrM0RetST1vU8+T0/L4hPkGxI45OW3viG6lfRUxLCY1j7oLiP3H4MTtXQivpYXXTWOlyZR8WtNw8QX9gNV+hTENx1XtetxzMfNkSuNx6ZpI+DP1Yi3GmIckV64nLXoWlpcu4JGqPPmmqNv2ETqgxm1IZ52M+z0o7n8fpXE5T+5QpDFmT3r0pOvwdoAXzSbjxtLfc0INnbP1pfXwwevXSiJmHORRn2KkYYEyvlJH/ZCWordrj0txfjhMmjTNpaGXH3ho03KY9kpn7IuG6ieun8aP/ctCRnSLeAQV+CN2HWckpYTk1y8nifCSbg336ijIe7dnPfsenY/Wj0idr7sveH+/qH0qaaQkrJvWVVN5d6TMiF9ddXIn8Vg2r1co3hL0wsm1nN5tZaepR0R2DAwwVGZTgPj8HvTJ14tcnuGvKxWkgl5evLqTz9Fy7NZLDEGDVc6OXeHiayAOFHBKJ2TCMxLE49dukW/Aw25igKUTlhHb/OxJDS5hlAOHi1TmoLePzdXSOmC5+QeZ8UtbLiXYicGfeHebxRQwJ1cGwKlCzHr1Bv/ViZgKb06EvA2Y5ToUTNTvMmzIe5pH7dRIn3ibmGG59wrx3HsfDbIs5uqziZCjjjIgTKRm586cx4udyAVPdfprC7ZLwGxA6EviL5NtVIw3ugPgnTQVBJNcGeBaTyDXsISnOyOOt1yA6+XMxzrKyjejt1MWA2SGT7hj6pScOcqD+e/arn32CdEsWTBB6ZzOVLx5ZabqorYTSo796fkX3IVqquGHvq1Dz/MJUCUf5OUtcj6nseYk6aeqY7m7BC9njAtUaQgq8tYA0hGDIMI09inJMYWa9d0qseH2Yx/WFRThLMnjSpDF6LOBdCdPwDtcOCwF4IWpvhPFjlB4KS+gjegiduyAnp6mRovR0UCgC/bGrRx4c0h0+fvlJ3pjaZY+qK53AmPzagybeD316Shk3lCaxMx4jsupCcfKS+zwJM+BI2UbGF+dZDCLINvMGBvvsLLd9WoVcdrKgKeUkp1LDfpea/n9lkwJhecJVCXUSNsYWEf6JCKj2M9uI3JH956iJrLQuQnmYxznX+TDmI4E4psDuhIIJtisnq20ZBTrGw8bjrteJgQmhti8C38ae/Xzi6QOsHzaacb6MMP3Oz9IwLSMb9DyrCKZRMEQHjXfsRPj/uEIV4+q0+zm7a6HXq8t9SR07OtL5fBwqY/P7w5kB/hh1MYQuDC/NYcAlS1w+aVw0vb/CUolxP4F0c9B6tlZPBTfMzreWW37TWsEL0uDcxRiV1kUq1e1rAHnb9gWAILPyAJZ5v+7/tbR0e0zcMkOGrJe1PL4uLU/yx7NS/25nu6Kl5LssnYS7zCvvNsvd6hf86nPOuSs+17lN8iI6Tr7f90cU4VdS9yDnYcVWINxSUa/iDFDtCEyUWLuCGDxYd9nGtxmNZ9k/mCED9TewbRNrmhaUOmaYY9bCx6ttkbWihX3RssglHJeJYX5Z94L4WnW/33PKtGIhdYlASnYxBoUcWPNYRK0EQpN4FsclnEdacOh4MkGwR3hk30rQppCwDW1N7gGSVhgNBds6KxmiVIltZZRm1irMM9L19h2jQFm5bEb2l8odWFehiM0RljrjWYq/fKkrluDElPrIac68lTMHbkaic7n7RGMlfxE7jKBsZ45fhhG9+LZg28J21cQ53O/fQXRpG7eI/6yHfZmTZirWsdN9CvsV+P9NijOGFsZo0pHTUAQeMbCHZ6vus57H+PW9bxurjGtClnXiGG6eoIWFZjekjSkTi5Bs2BfmOut/t8R42obKgFWaLBLILZnJ/oRwODE9NHtfhwmLxHeNu31kODw6MDY4vi261Qk3cQK2MDArBmKdFzVOJN+2MBhJ90UHwwanXA7KODSIDgnbtQ8NFmENg2KDVMPgZB+IpkOkxd+x5WCUMDQNR9yWsM10MHFhYUgyB4ZtrKjCdYXUORXbwrWFbxcsIF9XPUj4n/400Mtj5Mwon1Agkedfc5Hy8FiySKBbNc8SipFidj10Pi0FgeCpotvT3DaQmiVtM9ggE0tJno+vi3AKDyK6v+GO9cHyLNNyZ083yVGnGcIJTcqsSF/YpUz2C5pdmSHteY6VoXlKQtH3V5EfqkhRKkHjs5aAMqL6AEmV+KavbSnbhA0fUmxj8jDtDTM7w+c2IdGqMDMkcGLMt/xSBSuk5wHP/YCXpaFWFGfOJl4X6ZZpqfOi67colUd24XeJqLx+nwpU8JqXm79RRtiWxCPNrJpc8GoPTNVNXgrh7hyd5S5HiLeWd+aTpVmLyYr+DBfs27LrzpIufZGXeshvZqDiEl4NbyJHePr9RJsXjX3nXGfxrIwXOcvAeJG8z7DU8BKkSChmy3FQlvVAmFTjKyxy37Q/nuBK2748Fzx/mUBpWEm+gt4D/tOASsycPJu8zL6KZVo/du5xl4dNLKMiHB3BbWnC/GJ+gX0VYXHLIPM1kEtWaA3WBBSETS0MvA9Jljz0pFNpTUleMlmigBVPLFNJlgXzocmY73Ppa0KX1ZD5a5aINJtTc59Tc59TyHK9rxfMKPmJylLrFHEgqCDB/vuH86mUprNpQejZvjykPAgzFuhqX2UuCakuMAgUzCRxmTWEgj+wQIBmmTXbo8wAlE8RNYkzafaZNPeZhNEhPUuYTRy/pkkSVhWzbDZ9OJlKQjK0fTotlPjw6jKbdAbobJpsNon7cV/5kqBU1kOT2S1vIUkgbkq8ZswmgskaEkVwZupsmnU2zX02gdUg1d1+zDKlhWnbJqGgiSmrJrzIPp0eMr8LNMmMdSwUHzNg1s5H1rzHLM88yx3B/PbZjxVzl2sY9oVY6kmTtbGobWVlORWFQIiyPPd+fpfaH1NpmEQJEia7eJGHXFi1OinLkuVVwNraO8rjfbCa9++2TVRnJ0qN1GxWi9uiroaHSoOLPFjFgkbd1BXxAjKR/HVUhkB2EnBGSsvx5D63kJZtw4QEp0cGjYSa3OAQIFPMYEc2hYWxgo2T8qLAFN+ufMBEkJVvw8olQ5SvgzwUlPcuykmKLFiOXoF8DaLbhCEuizESoVgUUZhjdKbWMffygBSXp02WvswledU7thsYI/gec4UklissuloXY59IFQgsIBLoXb+XpATd3yvdOk0rYKmVqQ1nzYI6PyTzX5l0Dk46B6c+B2cOmiwRDi/897MVM9eVY3NwxhycbQ4iTT+ZxiKEd4FmxjlIHWmyOSgv8wENqKgjgkloL1NBACtXQ1XZspCc3UDQRH7dQAhQTH2nlQ3aZ/MXwiykyrIN0guLT5LASYKRPglnm4SQaYR5cRJCVFURBpNwykbnqDC+f2MOtk1nINGtSNGYNUWjTsBJJ+BkE3DiBJxkApLkYQLOcHJwAs6cgMB5QWekXCmfcPrNffrNNv3Aam36zTr/lGhXtZyVifMvAfR5+UobEl5uMl5Zxysx6Fr1H+jdKmUmlTJveCch1JAyhWRssZApyBXkyuSvBPFYo7PbXW57NwlfZFRKmbrOOES0/bGkxGKZaZ/pwj1A8odknkVmw6S5OmfScZSzgWr9gGguA4MmiPkii6HJ62S8Ycqa5lMH0+uYbZbVkhX9Fj5jRTlQ6a2doueK1USpBkoVaJ9JNTRTaBIk6i71Hcmxr1/pvr9QXeyFVqqGyLE0M2HSqiIm1xEtCVUEzApqfldaDlmMaSGYS2llzcDkJwgGUkpelI7Lkkwo5SFFPQBU4pAUQJFIbk3nbUrBpwsPucF22k4fVnudRpMG3kUMIA/LHaXyH6eYHOyT7IFVszJ6X1lQobyM+odSP1YtvjdUMoKkI1+44xFVnRFppE6Qc6Rw26KKDeU31QJXvMQHy6WIa14mGbJKQaMoaLFkks6xiXNssjk2+RzbhRzOMK6N1bNlJSfXsxbcnX16zTq95j69VLPeVGqbOcHUDIb5Ndn8+nB6lSpEWCYYX6ZBclIdGm8DKp0pr2WaAkQ/xOyaOLu+yqisnpOCs+sNaTtMFpXpBXSb0midXnMCwZIJBtMPJxi1MYhvE8npqiyIE+zj+bUiaTFmmL0PJOYpkS4rVeYEm2yCTZxgk06wr5I4+eEZgbPmmEBxza4vFPjlQJkfSphXyFAyx2RNQTlHNppChSBpGgy3Yb5/PMc2oYmtZlEBZ7VG3tVMw4LFCwRpzhDT+aG7scCq0NOF9j0kdIYkmIj9nmELzCTFVPqxpO/kjUKtROsmrULn62iEV0g0yj4/eP51pyP18Ub7FOyHD6xSifW4kxCJ/Ro/sF8pv7lxz5zOol5LaoCmLQSZAa8FW/8bjBYgFxhMcHQh60wWIlrIxlxyUIHavIZKi93W/qfpz/vT/ssP3/R0X2Y4kWQfdStS0jpLbkaZWwus8ZLZDtr9ss+/O3jLlB5qF6MuQXsWrGFft1289NTUUojyDWy/AC8KAvGYqKHBagUz9gpFQZUY3heiyIJaCzdaW2FjkBILS8PlcLRLV0ofy0K7QxrDyiLFFOwpHfhS0pLEY4MIQskJlcQnccxBCRJOO2/U4aogDhfRxuSHSQP3E3cOfoPsuoBIZOq1ggKFnIgqD4tmA1wo5S7MCpi0y6rqBpL6PGuWv0qRB+ygwrCSJ74OuNe+fLPa0Rup7C5GwQyz4eubyiJyC2jWNFGKPWlVURuMErgFvjkKTi2LUg6QX7z6PgADaT0l4Hn7jQl4tjtMAb8pAU8uMjdaxgRlxfWmNsGNCZOQPGdTHrRMTPPKDPQA/xVIwTCovNGKA8fKjRXp8y8/gSlVKV2CUd/UAgvOQK+N3BUWipt5KkAzsWphNIHNZNZUPRM1dbUv0sUAp4uIjPmX3+e2Kz9tP3ijQAkVHSotraGLmI35cGrIKDCgLwt5dAuyJJI3go4uJJ5IXd24aiThye9zRWpuEbyKGgQLZnWl7QVfr8pYaPcFf0s0EUlGeHnByQQs0t7pSgO8yAOVd5LQEvtQyy1ryaqQ4u7dwFjdi5qZoLBNy7VPOnpRZ4MRpQsv98HF+qWlgBGR+ppqblvCHY9QmiERYx4v0ecKrt51SBx3SlK5MI1izF/Yva0BDKP58a6rWFunDfsR0Kue6U+los+b8JmGcpbIYuyJ9ga/9+Ddz6enMV/4ady6s/sCc+C5005jhnyGX9qyebY+Ha1VRyvcMl//0gXsMzjjt/dxBAIMyHL5hbpp2dzdscygZrrsw2MAntwzaB8HyTJt2yB9aoQeyz4+UCctNfzL1pMBvn1VGdAojosht+wcKeEFfKyfCQizD5uHyEkg1jQoJmR3DQsOY7fpT18gHwdY2/fAbX1IA4RiHUbVs+Mzs/fCxLX5hHpwmIQO+BGcthznekfK5VsK7Yg27Xuc/9xAi4jQ7pAHkBS3OqJyPSQO9SfpUypMN/t1TuqmSQ2tg2PmDiOfEUcdBuJcTDQQ1CFqJd2G1OUJixZEBRYGTeL4Eeo1Hx/t22M/Nm0GriOUb1zWTNMpHwU0/4giPAJeAzApFJ7It8i3jiT3eL4HwJRP0uPHLiHcWakpHeok5FfyxPRD6swBmhQnxHE6DuvvSDtPZODD0dfJdMAFRgDTC8Hx44RISga0vuB5UhwmyIHX9jMnIm+c3mDP+cB8bUr0SdB81AM2kE9KFPEJ8GRrcCTrXp38qgo5h10DAb5ZUulK/v2pNOCQtzu0c1F9yhuqYooutGTa1eFEhDAvSuiiZq+0ovrPLihDpl2aYisECIUSObsOABPGKikI5/RhEvBvPN0KzWzN47PBPyL+RXqf9eEkFeZCB584j/CAqz/gJg8oZtNUII6L3gh74CJ6FdTO3/KARX6otgfuER4RVjQxKqD3vjaxTVpOTXbdmz1ZGbquXHTd8o0s9L1a1l28IKU93jBalPUbs81v04rEy1XUVWqo+5333mKZM/qsF+AMxOUBK7sAasQEJZE1d3hRFwRaJukx8WSJ0vkptOh976GSNbl/EsCorlvkfQP7lnUzV7bWFzJ77e39XNZ94xoZWpVX4RsrxYD0Ze8AgVRqiR7RaF4bWYgoxi9gilEWIXtLz736VdW' . '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' . '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', 'SYC' => 'eJxt0L0OgkAQBOCep9isNdxyBwgGKKxsbC3sCHhAcvxECEd8eg+MJkT6b5KZiYephLlR7ZBgNY79iTGttaOF0z1LxomIGYFQFwlKlZV2nXftYA85wlQ/9LmbEyQgCDwCLyRMLYC4z8YKZK1UggcpJYIJX42qjJqMutAd2Z8sIs65+GLDbp+AG9Brh8u8iHx/yz0eOMc9TCSKMNxi7gpH7ONjJqIVNyte1tmmxq9KvJySWm8lI1QL', 'SLE' => 'eJx1jzsPgjAURnd+xc11pr08xEcog5OLqzsBWppUIICU+OstGJx0/s45NzcdJgXzwzSDwHocuzPn1lpmI9b2iodExB2BoEuB0uTK10XbDP5gECZd2Us7CyQgSGKC+EiYeQCpAqmN8funqQRWU9W0ZbkubuvysV5ngTtXp6JEcO0bQRQSi2oXurvQlV7IfyhSyo0PEmKHhZ+C/Ykl/4zlBNEm0UdY1K+QcpV56fJn5r0BwHNJdw==', 'SGP' => 'eJyNk8uOozAQRff5ipJ707OwcfkVuwVZzGo2I80voPAIEglRSIfufP2UDZlOsmiNQMi+rjr3Uoh8vLTwse8PY8F25/PxLcumaRKTFsOpzZSUMqMKBl1VsKYvW95th8PIR5IuXT39HD4KJkGCMxKMl2yzAsiruhnjgpbbvjv+Kc+7BCjZrJJ+jFrT9T0fjuW2O38WTKwZUNFvwu0IdyHcL3ll2ULKbqhkkd088nbGnN77umD1pT4MVcUgFvNoUrD3U//6Uv5YvL+cC/bSNM3syVV0XavZlXZfvvf1VUMDkc8tynzT8s8CjQMjhSq9EQbSQ6ZLeEBnhQLv4h0l5CidcNyGexFsiPoWHTfCgZbC02INxonAhfref49aAyJ9JREALUfNg1AcFdkHykIgjnZR6IiKbcIC1VqwtN2R4q97XAvaqyQJvAMFiG2G2ueDGWQWEEbndLLA3HVvvbA8mcdMkRJh+pZK31Lhf6Uy3CLNZYHh0ys+JgtzMjfn8k+5OI1Uc22oyT4HC8u4/MO40lv6SLOPrPmj5Fm7WeXxV9qs/gLgK8xL', 'SXM' => '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', 'SVK' => 'eJyFVMty2zAMvOcrMOoZNAG+pI6dQ3vppad8gav6NXHjTOWRM/36LmjZjSdtcwJELneBJaj5MG7o5cf+aVg02+Px+eNsdjqd3Cm4w8/NTL33MyAa2n1fNOv9csO7/vA08PDY0LhbnT4dXhaNJ085eoqtb+7viObPy+OW1rv9ftF8WK2k19QQzn8FcAvgCOAX/6uZvQH7b3G11Ftw0H+A1+v1LVLye0gNgULxru05BlbvCouPLnMW102pxOCUPLfiIkUWaf/ErXpxYQiuAw1ZqMsPWjKF5OnK/7cqXjtRgdn3HDqXWDruMqfsWosSoAwNZL51IL5kW2mja7GTKESyUJc/B0U5PrhAWrRuCk0C/3cjWovqu17gBJqGcIZg8k44IYGxDESGTQgSUZaJIk6hZylAFg5tPdIyzqqtjODWLQt6GtlyQJUBCsEJaE2DgDMNggXQMCPAic0CounrEgk+J1SCIjt8QQplIuSRNbmu5864WAN4ormab9nza/bylh0cOAAHu5q0dKGokAwodjmUKQyAgV6Ca13pwVpTnpYQB8ZVwVvcndGG0gPv7F7OZho9TxVy7cyU6FwiwYBbo5ciNmtdbchbf9X3UfN7z8gGQTOGAxdgveGwB6ma3ddsYBs7VsXliSHtiqBmMhphOty3bmxCCiUxj/AQqGRkIMcUwSWlhEkwhK2zraNIZbysYMTgqGznTHJ9ZqZJkzbig6apXrpWXluc23/o/u43if8E6w==', 'SVN' => 'eJyVVbtyIzcQzPUVU3uJFADEGwsXqcCRElc5cr7mu7wUWSSPPPvr3Y1dSvT5rJIDrgAMpqd7HtD0dFnLt13/epo1m/P58NNkcr1e9dXr/XE9ccaYCW40sl3MmlXfrdV2vn89qdO2kct2ef15/23WGDGSgpHQmub5QWS6WK5OXGA577eHX7vzpgJ0zXCK8wPPVtu+V/tDN9+e/5w1OjeCS78oG8VsUut0ukTrXrDX9q9mMiJObpA11OQWa7oe4I5f++WsWV6Wr/vFopHT+bj/Y6mu28V5M2vs4dwI/RXjz5qvx/7xS/fUyPnYvZ5W++Nu1tRl352XjzZo+ySnedcvH3XxOT6N/N/Zz5ovq9Vq5J2cmJeS3MA6uXfO9/cXEUk17y4+WO3p9tuHbnT6/S6SzUbnGo2r9Ll4zrU6SPFzFSRZnVTiNurAHGex1iprNMCTbpUz4oq2KhaYQlC+wAE5KSoUeLisHW1JwVYGCNitzoOdiNjaPhJrDkOrvE7iTI0bBQBWZd1K0V5REP4EBA+uLrK4KKDnvThc4qkELEjZ8odwEojiJeuMMEU+kTvn0FdS7BxkWiYhqixtIVdwMB6iClly4RjPA1jFzGAQACq4COLY0ExL5iYqC3WqVcFW3bwHNI+k4vhOeLgJz/8U7n8oPN+E5861cMWP42YJEqj7x4pXq8VqLPrORpAwBVIgVjwgUWnEiQO8ZpgCYrgFNp6lBd+okmLaVS2K4tVEYQSB+T/jDmneOdMSMJcqvgDFMU/YsdsgRzEo/w77gn2qe970quaPiSdB2qTagOkZvXoPiMwzHVp+DIO21YPS2HG5yoPnG4dc44UapQgjOfYOhY9xwEkGTuVun0fUqkh8lyI7iB8zFKWFu6+JNLn+hnMc1epHnOFJGb9vNk6ajnOOSeLkYYjKIAOBgPaJCicMnLS+qkl3JU5jicPnS5xqiVMt8U6hB80dZk3bx30TCFr+b9/cT6gtfHCc8RsMSehVVvBkTcOG70yPtQU+npBhnhTHjhP5Yl2hNVQrOw9Tq2Dx9SKnlm+b5QcUcQXIUpG13RC65fPDFwaKgQ9kqcijMVQjnwc0Gsommk3jq0SLbLX1OQVmJqsR+jvgKOlmdG9GDDh8oo61Z9MGpHs0HXlWKf/OgKsaw/CUfpABPEvaX7TrGRkJG9M/nayfH6b81/788DcLmr8P', 'SLB' => 'eJyNk7uOnDAUhvt5iiNvs1vY2OZmRzBFqi0mUqrtCXfFDAhY2MzT59gMM5ooq6RB9vnP/52LRTItNXx05jylpJnn4YvnrevKVp/1Y+1JzrmHGQTaIiWVyWra5v15otMPAktbrl/7j5Rw4BAFHALFyfEAkBRlNdkDHnPTDt+zuXGAjGxRjA82VrXG0H7I8nb+lRIWE8Ckb4hrIiVZvIRCvvIL8a4sb4e5It5eJak30PhuypSUS3nui4LANI/9z5KubTE3KRHDTMD6qa2ckvfRPD9lLwTmMTtPVT92KZnyzJTPTPtx+HLt9N5nSp5wGbyI9iZDHjMJWsUsAP7KF3e/N/tojNC6GQWXmA/Smu189v7G/+6r8gdTQ8OA6ZNddMiCN3Q3LuBUBEafcqrKcbpYYLOaCRCCKfADFja+YuFJcxbhE7LYoKCtEJxcbqwg4MwHrZl0GrUa9QUTVArmW3tw6YTGAE61uzessXkSpP0IuVFlJB3Walbx4YEqb9Tw0iEvQNa/qXfnf1CpDqmb7TaqG+KhIbVjd+hWEDX5GTTCBexY9Ue34trtXvC+v5t6Q58kvo5S22K310y8+nhI7H94PPwGjUfg3w==', 'SOM' => 'eJxNUctugzAQvOcrVptLcvADG4NT4Rx66qGV+gsW4SU5gIBA2q+vTYjS23h2ZnZWzsa5gvvVtaPBepr6N8aWZaGLpN1QMcE5Z16B0FwMls5WpMm7diRjhzA3xfLe3Q1y4JDEHGLN8bwDyC5FOQbgYe6a/ttO9Rpg8cF6vg9c2ThHut7mzfRjkKYIXvRFtKISeJ1oQZNZReJjZX6RbZnsGbouY89tWfUIHG6uMFjMRdtdLghBTMI6g7fBHfb2iDANth3LbrgaXKGzU3HQ/Ahjbl1xoCeZquNW9lXV4D7mNinLrWcktK+ZJjqUrIkHr47/TeXTIWVCFUgdUQFCxSBFSlNH/J0RhCenimhPeYaomIpPIbxQnpyMaBwm3hy0HkmIuCdpRHya8m6aggy5fpZsNTJWnXdZ+L/z7g9it4BY', 'ZAF' => 'eJx9U8tu2zAQvOcrCOZiH7jiS6RYWDn05IMLFCjgO6s3SluCpEipv76k5MROAPekxexyZmdI7YapQm8ndx5SXI9j9y2K5nmGWUDbVxGnlEZ+AqMmT3HpbEWarD0P5GIxmppi/t6+pZgiipSkSCYUvzwhtMuLcgiFLzPXdD/tWC8EFq+ox7uAlY1zpO1s1ox/UwwaIz/0g2gGBtFaJRz0FDO+X5ALjq6c0TvpIha9q+0qFBokUKf4tXebZ7vFaOzteSjb/pTipXR2LDZKg9yiIbOu2IARWibb626eZVmrf3VFioupOLd5jtEw9u2fgsxNHshZN36xcltcUg3JkVEJ8sBiiXisgBHN18aHi/sMUvzsg84SuwRw8r458r6B+cMCFGGagtoro44hjdB+RFMwYXi+5qhUCFHQKRxP9kLEoH8pA4Iw0Ch0H7GU5W/D4vvbUHKS9Gbow05AheOJhJgwww+hoeRjkzqR+jPvkdYmdoIy75lTWQuPJ1OIj+8FlyAOXIQwamIkmIkoAWYRlFdBP/4fybIsVz3PQuvYAHdLpiiEopdMvepNCdjlRNfw76ZvNzARIb5sdvcwq/VF+s8u/DYvT/8Ac4HXaA==', 'SGS' => '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', 'SSD' => 'eJx9kL1OwzAQx/c+xcnMte/iqxOjpAMTQ3kIq8FJJLepcBRXPD1uLRgAdb7f/b/auA5wPYVz7MS4LJdnpVJKMmk5fwyqQkSVCQFT3wkf3LCdjvM5bmMUsE7v6WW+dgIBwTACNyj2G4D24pYR/BRCJ56wbqxGAfn/DUFrM2Z0JeZX/BTqD+69/2YzU1hb/WLLHR8r9Y4qcj9ipnmMo+faFe/TrRDTTtZQMR7uxf7Neux7tMUhL5VxsiwbMFQ+A2kLvJN0IGJpc4Y6+5u7VHubdb/5ArIrY2s=', 'ESP' => 'eJztfU2T48iR5X1/BaznDAgRAQSAtdGYzRzG+jLXvlPslqhdUj021KbG+tdvvPc8QABkEkyCWVXSlFUlP0AgPj083D3cn//z+e1PxX+fjn85//6Hw1//+p//+3e/+9vf/lb9LVS//teffufruv5duuOH4s8///6HPx53fyr/vP/1L+fyl/MPxduff/nbv/3637//oS7qIjZ10fT1D//yv4rin/9z99dD8cc/H4+//+Gf/vVfXev+7YciPf8f6cZDuvEt3fhj/dsPv7u6+d/dv/17Xeebndftvnnn9t3PqeyBt5+c76pQeBeqUFZ9WbkS/6qurJqyiunSGV9cup4u+D3uGqohXfCFS1dc1e5c+ugL9Mala21ZtUfcnT6nmwMuhH2FG6oO95SVx+94Plbu0FT9Pt2cfqh8akkqtGp2oS3S/5r/fHpuX7WV4wOprem+mL6H1JAuXUvXj1VbuLf08ZgqRy8iqumreMb3tnRF1ezRpLps8HNfdta3DsXo9Xqg/vLrX375oTj/9b9+/b+/pGGrMcT6Vh7//Jdf/s+vf/7L73/4r1//319+Hq//7c8///Xw+x+q8H1056N7iw73/R9cJlsXAmqvu32duh1SAWpvwHvVswcNh6BJbVSPApriOU68eMaTHE09135oSudT9zkNWh+FZqzS8xGX6AOvATOcBr5gDS5XxwlTrV5TkBrqSrbWb+v+K1vyyOz3qb6malONIFIQGGjpDOpCZf0+VQvyx/ooquHMBdXw9cbaXRTfci6byr9V8YDpeUstO1TtT74Oh7QG9RVvbbr6htfIW9NbGoBD1WwbzM+o/6qLw6SKRGws0z1ag9vawa9Ze8PaA1hZU4GRNekPaxQUk34ENSWKIZtNL4OILFFtB17cr6/KxAvBxf2PLtRvpXghVnYidQ82vbeVjiXSpr8+/Q34DNYeuDDQFHJUvAXw1KJNfDpxlsRgq+6QVsAR9NztHR/vitSVxFEDbisDuHNF/o27SfmoMKqqtOrao9h+q7dUJZiTO6Qiuq2j+/fd+xvc5wPd95GsKb3uU+PT1sldMREYGn9yDo3bkw2x6+xjg/uqeJ+uKB2kol0LSkz76E7SQkcWy/0eI19r292lfhctN/kazJUMk33Hiy5G7rv71IyYvrVk3NjMe87XrfY8PA7fQmOvFmXabFxawXvtv1jqBbaHikX7gtMFUQVNIK2i4KbUBo1ecPsgbSZppS3YAohMeLo20m2046U3EHDaefACym1T/S3koK2r6xvpxsomfXINtnsygpI78RlNDJSO/L7kNGJz5stZvBW/dXus+VrCAF74W8vfGnuOK7a3N5bLL+xDpNiMB1Rng2IojjiJ0fZGzpDocI/xsiIbewN3oKxcodQ2EW8iXSPcDncMewxPEmfT4HeQOI5kW5tWzP/A8XpAwOVmUieWX/ldqt30EJAmJLwoobpwk9+wZ7D48JZuSi1qubujTz1Go5BCVLokXjjuIg0bDV0qcyAT1nOJqddcbNhLsFel/YNL6y1pU+lqMCGis5ZZHUfc3r1BsKcmpMGjwNtKZKUgTNGX0gU/SCDGSycJ2cY6aCJ6jHLIU0yVD+I1O4ZqnR5aXKRUvLgvXN/nUfHVjZ7fW/7layCWvc16T2qiMkcGAvLgSGEcgyiqopKnzoqQk+ZZsmWOoyO9Mglf9if2Y8I9JMFwxNDswfihR6ab2tmkg0nlCUQNkJnTNEGDxVq5EI4T4bQinCKTRJC4MeSqoCdTMCT/UwlSvfk2pTgwzUNaxy8Qm75T+ndK//Yp/RG+HWXI2lPihsQGSoD8J3UgVYmmLLaKNNO2U3TcKaLVjAHBEB8pniyEyToVm3aiT7DIfZ2O3BrdP/7xj7lFjoJ1A7YwCmuQAnegAGtA1YhrYOkabU1+pnyx0UTxqlasWJxHxphKP5TgKo5EyBfSL14PfgdekavFwhm/koscPkge73DnT2jEP9Vt/0v8JddTs5YBRpBlNYviWW9XUlJLK11GXRPap7ei6gblbRuAL9qwm2cOrbaD5pA2PWO12ES2aqkfKnq6DiM5w3wFNMsV0NIIcaH4+ddm8zJ8USNurcI5YQ4cKFBAFS+TqJ3LX77bguD46ejCjXol9yqRA3kg538rXX7Jds3JsvGkHNqWwBcgiwVp4VuYzUcLvuKWsg+4nW8Ln8WYSFN72rr0YqIe7fF7GsaaMlBwicUHtdgPbqSbGvaAySFV4TnD4eb0Ghcy4jfWVG4S3TfUui5GiT0lwRTLmwU3pR2Y0LyDOr2Y66WW49Yubat4dZaCV9EUMfP+oIV3KY8iw1Hmq02z8+HaVttvm4YvNOPzDW5Rpg1XZkCv2KyeqXd9Trg8615aTks9KJAd+tKMQYG6zJZT0m3VLImIAmjN3awtTP1y0sV00BBK08k20s+WihaNhhbPsnQY78w0600Z9vmc/uZpwEcavamiBblzi60HmhzNEFxRP9QxjnwVNpL2s3UsmtrbWtdMwT7wRvV7MlOUOzeebWyoZkEQsDSM8xRxYna0WTJFXadhW5fdhmrmO5KXwIkj6SoeaQzRGYN7M1+SAZv21iO05+pYNHWoPDs9jLJxK8N6heOjFoawUeaQVDz9ulU03179urhTY80UOpYe6M3DJSPq4wnA5pX5dB2LptLHxbk8DJNVU7mRH7nNS3NTPYu12Y2MP8A5gcayzPbtPJvHIhvX5oZqrg7cWq2byo0767hsdHK0cXFuqeTKQqjl0UyWgeygewk1WiXNYpW006/NNnnkha1YF+UHnu6N7CBkdjCreFHyq3nSqxqxLiI3JGpvxAuTkWi6y/b/oMMHCiGwl8/Hv/Igp/N4CP22TaN+fXNW5ztXuZemRKm8nZoY5ITSmiHCVrvJaNuIelvV67tOIzUEpyUYS8kRGMPLQJYmE2soox2xSCXmUI4acniDecNt3aU+p02rs5zr3dfZ0cLbqVDWkEFV7VGDLSXHm/6wbZI31fwA9Rbeh4On62FaCT+mK2/tTQvMA21uPl7qldSZ2DRcq8azKB701QcXeS7Y0LHWjsdKM1tEHRzqCDDdBIeybmTa6eHSxcWzGMF9hdpwEkZ/XTxJT95cPKTll5rImm+1l4/MS1SLUxP3Ol+EScLJvVxnPjgOTjekZmTXEfOr7M80A9BZaRtdvawZj/Y4TCtq5hVFVBTnFXl65si7qjWX+OcE3eYTGnLT+l+3f/hDPutoBvgvug4ORSQjem0mFkP22u/6dK038qpLagT95c5ON/K+UPQjjQWcp+O2drVAXCzwb7yA79elvaXtbq/TexbYFGzMkAr0RV/lyAgVuNeKYAMLFnnGBjLw8zBvg5Ujn04y195KKcbqWEo/L+UNngabJvr72G8a+5srer+fD+6AblsPnbo8zLp4Z2DPjPAYOAaDhrKxIt4Zyslw2HDusVLbaUFvcMu4PZiu6Cs3HcxuMpieXe9ms13DHyG99um1H6XajmE80+JqTQSG7TlprPk+qh8d1Vt81vtdV3TTYetvDVs3HTbPLnfk+NMenx8au/niXh+3kMctqZJJiKjHxd2x6Nx6dX0obqzm/vHV3GsAf0rj8gKq/D64jw/uFaNMQke3XNLokYIZaKR/b1ea9bzXleVMLDpT2jp8jztYKVxZi6WpESxuj+A4I4+PYK8RvN6yQh7Bt9cwze8j/MERvslAFwz9Wx/Gd9brfCy6hVDE3WdPHY8PdiqruzmI/tVk+n2E743wun0Uyneoe9jk2n3NSDTHoNjIaLb0fkg7lT7mgfGMmMNhRrvQ1vHhHT3/EywVX7L5jynkoY5Ve6X7M6KTmjC37m6uCQfq/jL4KdrwWR/J5lOast5zhGYFlzaMNNY/BecOpfcvMNJ9oNi575n3he8jVqm3qMpAAmjTOyRtuqcwQKFwXH7Z2d7hJkZKdkWzg+E9G99pt+23moc+r133tUvGgoa6xbFeevnJ+yFNfPr01sWbRtgPdCogRHKoPIoKJ7jO4IO+lY6u6qz0Ddeb+9XOp7EFB/Qt+CGZPV/UaY8jI78vBwVZlLBLFgjxdK049hvOAGFZ6hWzVsLLCgI0eKmDH19q8q4JRZP9hQcew+xljndwqUgz0OIAo3JvwwdtJ49aWr/1Li7WFUOKYwfvwkaHGJ0FyXSs32Jm5Isi9cE8U0TCJvEn6thoi/rklsy7rZPmiIBxzyiKhrbqlhvwgPMZv2eoq4PBp8T0tDhY6J48WWk+o955l+D+mngR6Iahk4Ukl5hIpC8Ry9zxu9/3Em8QJY2hTXJ2IGEh1Mfv6b2dpC/+kWMFYKkUdHiA899QYbvVLCD2JM1JXTRlo+01US7i5UMJIamFVzT27+6Du9+ja+0b7/P6NsuV2sK0Cc+G1HxHCuf+oSMEgu/IFhCPjFAHsQfGSTOKrdceD0iXEz06vPxpwn5EICAAQeoQ3Q1yFHeSlBoS4CgSRTYdYu4JK49RaQNCS9JAQqCKBBuQu5xXaFhzJLZCZMWp6ycwvxZD2tuG2BE5AfJZ2ip2rUbIaoSA33KgmyprpdglG3W1IR9AbNsBgWKBElwYZThiN6Td79STEyC8qRp22nazaM84kbjXO8VESpE9G4YTscpxk06UY08pym7IoXg9C2Fou2CQ/AFHvB358ihjNgJiKLJ0zxjJNKm07hGpga574OQQEIhhUwb+EZ5GgYzyH7IYOcUaesQe3LKeTJe+70DR8JtRfHZPz6lhDKZ2ar1TDLbhJMUcnj0NxD5adGXMzwV7OzOghvGHB8VkRx7qd/zf2hk//HQQz+hyFHhDCJ7U8TQtMJwPNnMeZ4StyJDqEojq7BmwGJIIO5OHQO+DbKaBqlGru/oJwgZmsCaRB64OPEPqe6M7QmPkjZeOn845ogWxAOiJyz3pcnh8g2ECa2l1tMV/ZywJBWp2e4v4cLPoeK4FDkPLHxmibm9bTuW/z/LfyyyvsX0PURmQVml6ajP8cu37wtC8gs7NC/iNYPQ413jfGx6DuLD8lzdS1Wvbst53Bhpc6gPh9KRcGUdA2ZSG+rO8hzsFWGMeDMqLeyEe2LqcXtaQ9V47RQLuILE2F0UPi9RDDvTduK05boZHrq4d9ut2PHr6AHpNJHrNRuCQb63hV6TUP4tXs/MNRMcmH6QZZs2eYl49Qa75GHDNVor81vpzN1zc94G8o1eEqL9EiGY39MZ8BNtFcPbTsan+FTUnOZmrfRFPfgnhaoTvdX4ntNzKIH7BWD03znDOz94LTadP70mb8bL9M8fgSQNsf5KH7Emm6knd7aN1v+Nhu6KL7Xf/uQIv6nsRr2OL3Mw8W5t5ts+ySiEYym1+mYkGED2gEej3EmXw5wX9NoJ+cK6fdU0fCa6XM/ck3qJhvAWDEzXm4TLm5yxtTOktLuZ6GUe9mDdzGZ3PO3o4f+6KbOe0tgjPzuQDRWPSnJZLZ9kXIha2S/ox2q3ce8+/Q7Ur5xa+JzLlV8eoCu9hVDV3MapcxqhyVxhVAQ5GnuIUw+MLAXxs3Zz/h47Y/S2po6h6c2Mw6ry3PDbvS9ur/+2kvWmBuYB9za3ua+OGFC6bgj03ZS43Hk6L+mo/emRRn27tRDN2VHz53eg/YEa23WjHENvRvITBLWZnh0XenCjcYm+ShrlNlGMV2J2WXtPBNitqtF6nmjtouiZDY3I2kWBUhONypxqDuW8R4f4Sh38hQ3fZssJdcrDo/UyB2hjuwPas7k83t6cJFoCI6v4WdWuHWmnI/nrHfUAFGe4jq7XPI6vNELfmKGtjaS8CWTvTxvME0tpuDmkGE+d0B8lwa4vbyPNnjuNk7cu7ist2ZBK7Ybs1FxNMNG3cIO3TJF8htNEKlm/y2VRWbUJd24Eem+yaBLns+DoIthkm2gWB7e1Z0DXedg90bRM++/dF8H0R/EMsgke4ff8QYN+e2qeiZChZFw/h9WUR+BnQwXeMSV+qrStSefsQnt/qfrxtRF7UiDUnl8wPvyqq4Cc2Ygbe5jsenxp83wQlTXKkn5aviuMXghX80i2bAbj5roaB8jNwBT9c9HQdDjeQNadmR6ofxX1VceMqfEkT1jAFfS8oCWL3dTPsvjCdewtwPgq17/MxBb9su+Yk2beVy+B/YGWvQxX8cNFX/LK/A9/X6EVLlRH4Oh1pqNRGMzx9PszgZ7TzEaPoHQRAOIw1M25VbjWqf7y+VbGprw1zKQMKaBGHsnoA8W/battS87o4qLGaARnKuCnW7C+GlZDP6jaalZ6pcZXGbEO5jf1HQ20zJ4StRPZMheu94Oq8Bf8XUGIsX4IyuKmaRYPjl8AY3FTNosFDFW8B/6Ecoadxpra3eEs9iyZzu73C/jPEkpfgCz5fx6KpjAngAWpbfSLC4MaKFo3OmSUE/od8cuETQAa31TPn2nGwo4HPQxl8vo7FBgMB4hbM3xfE9XpZI9ZFHeprn4w5uKWWRXObLFuUn4k6uK2eRZPd52MObqhkITW2XPK2hriELivoJYCDG+q4sgtqiSxPT++fWc0XyCbIrhc1YV2U9/Q4uAb5m/ottdlv6QrbcCsv2l79AzbexB1aDaMZ/HPyV0Vb5mOBqr/kOnLc4teSd/qup6SQlOVEbj+mqpSLtEEiS4RZtDkpKS8zK+krc7++ov718RvGGpB8VdllXa7B0q7Gd2vYaPRE0Dhyv0Y7/1mmX+3p2H01cfusSCld9BofjTPAx503d3Qz3DD2Zo74ONdwXgk/+eq2rM5vvA//6Kbwj84ESgty2SZSPV/vuuTRSR+tvh3Uyc9q0zqHt3r3eQxlSPgSuJNb616n3Y4giBOUyMSi8HFrYPtHS14MObPdz7AZa9LugRHC+9H3u+NRrrfD50Yer+SszgzEkf5NcrvLe6Ll9vscYMkv1vj1yR0YXfABoEY7U38pXuQLm/Fojx+Gabz4EIwwjc0r8CJf2pA1vEgfgyEWjkgppaBSlngwV3CAU3SqEfnnBjrWdTFxCrbl8oMFI3UbQQwJo/AaCVFwMwv8uBu4dFFEMUPvuoVwdw3IeAUxdhsJbCtY5PeB3zDwd7E8NLLDFLiyZBQzaj7PcIXeGdILtOWkv8U4CNdjehn8ymCGinFUh2KEjntvVCcIhDfQkzxHtbse1SUO0158TwBIho23ux7UrljiQdmwbkKb+j7qrxv1aw7t/XRY/QiLVVYTwKtuCnjVC76h6p4b2/e5xAMje8UlrtDA4g2IxvGWNcjcFUZhAGNbQSi/j/srx33BnmfYifXIF8p3gd8e3fOGW3ted80prpHnbkHSPTO27SeO7VZIwO9j/+qxv8Gq53iLTw/wwzzjxggXVzLde8N7A41ZF+fDFLl/TbDBNcQ3Yc4XwJJ9aagWd7AgX0LW38f9mXFft+bBIhHqnpYiAUjCgIBQqyIDSJbcJ1vbJ/UrESR1Bg6QxQ/aAR6Et3xd6x4zD3wIMtL08pejV764Kes9j6ju1eiVHyp27uE40A+NOJEC44LIFYUASZ3Dy3eIkprhRJYK4RDwWODVZoGYkx7biF/5uS27r/V2NcC3PgXB0vdEJfJD5TKGZT/DsAwFzppSe9drnc9ky6RuN9AdXWHojgO9UdIAIU0qDian4I4Z21HQjgQ4ZMxFhnZsgWvBFzFUg3csowK2vWyHKPATISz/Djo5nxQd4xM60nATDDmy6KjhCgJCrhOhNODIUnmbCTSVrg3bISw/tx0Ln+laMJK7RMouC4IGI/kmPCuDnCVU4EvQK19Y6YI90nm6BxCjxkYojokwOqA4UmpwJTA9DM+xNDzHMuM5ljM8R4UUJNGKfwLWKwzQsciAjpB6yO8I6FgA0BHohpS1DNCxyICOAiH9FAzLv5vOr++6sB6AdzR76evExmxoeHAAdoKHwQwXio5irmgRnt9eYvTRiEaA7yjBG3wMkCTdkVBdGQ8yFHoVbwIn6g75dPAUVaebGHNRxVtMz+uAtDtQqEqtS2NzEkqzT3IJfjpy8Kv2DQdbZHfDWJEnyhWqg4dTRH1pEk8Y05hTe+Klh49WX6n5AzdNoREwbtHnGNWKudKCgvIILyYUOmqEgdF7UBGIERo4mJZy3oSkjkxFju0jyAYA7gSiSRaTWnYCnmyqlPXRZYay5xuDUKGEZkwCANFCLm9OfSGUTMLwIUYzXe9mEJuKTUltj0TS7On31RjypyRXorETM4YNLSyGlT+VxJN7iik5kZ3riQE4eLrsIFVdKrj0Z14lPqDfK/DT4TpIfyccwZq48env3qb/0Ll1TR7YwWsocvod6nbcDapmFxxRz8cwZkePPkRe8hK8VnvkuQi82xOXbgQXLQwlmKCyhTA6DPvY4Trh+voS4trATQR7KYkkOG7AXan6pXLZVoPDtyY9gNUljFYHCFXQSqAWRppBW2Lhu3H3xzZOT9yI/7qGBB0glr0vFA2c2iW4sl1I2mhtnU5V74NRwCAw3ZZUdvfY/qFtqWZuQ8TlJJbhqC54z0WQujfQuoKoakeQ1swISguiIPx2oe87VyPryIhfac/unebOG0/DD1CX4zzVANW1Zk+sbu70vKfMN69tgnW0GCrA1dZc2762qHDfcWIEjeMhdaWGFfnqzrk0mm7E0SRP3zPSNz3eUYjXxScjD92liQOb2L2VkqPTuECqxrdNoCU1lY5ZyXFbyeParBclc7PBSUa6BKQRSCrppxMIvyCofVpD9gNdObblUhwUg9r/5F194orVJ2yDqfQTIYAbtK55UjprMyMc6MzawH8vLUOCQaeSXfr2VLkxl4vxSyMROCgBO2eS3U/S/iqXuvMcA+9y+cyYABmGxieikxUeHoO9+uDwy7P+VBke3eJOPSb7SWtGXgZODW5Bni0aiR06grzcqRT78+8Q7kcZGwFKm8SXsEGMub5g5Bv28uZrZSYxCHBu+JM/CHGl4lPKtG1Alkyl+cS1fOZaIUmHZ0kQ0ug94/7SYJVCTuIxEjU4cTUFMKZWSAx9AfeGz6ajkVBIBV6hSom5edoWxoy1Ck2JIzaEvIXAhL3jX+4SBU+/d/J29K0EEvzQcouKgAUxfNfsEN0bpHIsew5e6m8aNLRh+OAKelT0/zIs/11ohsf4V0eH2j77QzthkhhWFvW9s0G1TABeKL8+K1YtKKOFr3IdJnmL0zAdItSMRStateJQ3tzoxgDxByo/uYHyGEyWNEAT0EXgKiZkTxMpE8zlKAS0gjJ3GBtHXJJEbIK7g+wxAIADhd7S8h+fGQRa1FE4WUzUbFLu1APLFeb5/Pr5ObmuUSBkoTg3EFvgyomU8d/xiP/ILHik16mjmBJTYzAZdWVYLzOXw4FzUGoSpPiEye+chD2t7jI8YxY2TwIBVm4skHOmyneG/sQcLU5xDDZ549QJzaj63NnzgYimtSCvifVWcv50ElG8N38fEH2EsI0td9+RLpxy2LCSnsaM1DPDe1efA36A48BKzM3JMRQEsoNOx6DcAZhGqDVZNwUz7wgzRHUJyhEhbZjSSARLBQwE0esgLAMcZeDYRGMoz+VCa2T7QF/AbXE39xjoTw6bS1rnu56m0CGfx8HGQsj9TcP5D9PjeQaUnoYodGoH+8poYymJVLTHkSL0+ci+hBKHnZeUuDUpKPIYct6ASFCUYeOYf53mzQco4pTE9R1HGSVlWxasJy0ZCCMglBqGSgymHiewaCMkB75BDmoKGt+GPDtJwYdR0F8yj8EmQB1WhvheB5AQxyKynuT0sHIjomwypkHhYSUUKGWpaYTxzHqIr7lpHv5hRmE1JVD0tCUFbF6ASeCLNQvFFYDH6y+hHvSy2teFnLdyZozUPRmMiJNXg4jrkUdgzOCajxIh5nbsWFMOWyfpqzZ91T5d47iqof8yJjBQJ1AWISgENO1w+xuokbdvQDLlDUHGCO5PPYQMGrHxWrZ7aiA9ZaDGcvj0FQPeHKky0qYvUziNTZWyaHhyY0iX25zvv91uPTYjcS/jNrcp7W2VslZRFGGj/Zs1GaVHO7jojmU+og7USb0a3VE4tNRwOLl4Ax49IwMvadilIBajJdgSm2w7//sG+7PqLeNhNeIOJ0W6vJYqatoxQSmX/OA1HYklZSDxF3P0ZSljB+U0L/0sZfhQ+Am4FYdmJmeAP0jO0JUsZuBDcyVmJCZPMWOzXPWPOgLzpeZ5/GSCjOMRoLqB1o+iTKmTOvVnLsy44pYw4ygAQZzZOg9fr4nzgWr9DTmjpkFfLg4d/0alMzDJChZfabJGKVlj54fCj6luCpsoChszpDAmcGDKN5M0mKQQjJkaJEyNhQSNRdY5zyQt8ehp02LMHE8NN0tb/yhjsLr/NDzXzQJLLGSDK3SWLIHl0lOaDIINyEwApcji5DW1kFgo3GSJBa2lHRUK/0Zh62u3/T7ea80tr3d2JkvO2tuW1J9hDaPxQ0aGwc6K+b6zG4ts78Uj25wPX92YTfZUa03Xv6YtJxnjYUUSFrScLohhQylEAGVtDqjNKebzYfK5nKTsSH8qL3zMlkWm3C8AM+QBMUC0n/h4ZvyFCw2uAWc8tIXzBNgNJrASmJqQxuMGkrQEptrNmN+4lnq6r8zE5iw5Sid0BO4UOjMwrcTr1J0FYIdaVtCV7VGn5jz13425QIU3PRTTXKtqEQ8oWISF5WBGh6PSCL6N3sFcmz0zlNYmWKYlXmrNktdBlOdRgb0f1fIzacvLd7po9jmORmceTWFZIXl4TyWV2vMu8kz3EjIGS1GkmjUCXjJxaVdcAsvAM8qJdARxVdIvTozjuBO3ODe6vlbMn5TmMS+9CstGwKOhWDa2KZXY0plGgq6F7EXNrgKZr1T0uR/9rRq9HimVdWcdOjbmAev2yjKJU/yhkJ1b79mPxdxaArSjllvckgJ5YrgXZgV8/jxfG+TVmxBKCXchW/DXGXrxDwk5JEsaQcVCyl1jJO1IWAzrs2Klqo2kzRSGpIG4W64InucWV2unBDSSv4Mt/BDjC9D83YDsdoptYNMsgaLha7vKj6okAejExKKIScmLdciitYbzVmDCEa1HiZCZ0ogFKzGnVrfXXDlGPmBRDVZsrQIzxTQnJGkflNGmr7TMWB6RbGmbl78+84solognOyxwklNVKZFVIrZmIlqO3VavDRuh8tkXq7ow7liaQm3TF8be3QTU/ciRK6ya0HjgtA27ZdYh6SxVDefaoGKiHbUIiFjCFVnh0ugscrKNaxjpTicXk21LNubhrKwJNkBMl43FyEXqCIAgE0atSAF60PVcUmCj2TuHy/1EvahfbI4oe5/zGAw6sMuyKsmhzzltkY+ZbAGHwAfkL0BSV8FIIScWktQWozW38MU0gXVNIwvA9OFVAOEWYiwhSkQT9HXjpttkgh0Jl/GZ7SxPQ60kpLQVFu4iYKfeHG1XTyIanDVtvkrKbqg11b5raXgcEw3Rz6WYakbu8p0uC9CKGv5Z7ajVCy6+EZ0yFgdjs3OpWZdT+P4+BPqjVLjRce8lrgeur5mudDJ4pOLEss/kNSSavdAOLA2x3o5l9sjrC0EQTOOeNI1sd3U5hFQs4HjewiWtagXgJO3lKFe90XfTKVlGR68FOmLy+UbuwWQTr/DE4KYNKWoy0GKfEu6UjaQ0j7dSy8gpkKvj/lVS82pL+SsSsog2r2rYgee2I3cIIvE9NRNv0QS6GHMqZy+P2ZKeslpUveKYcygQRSuOdHo9pVbtZjyooEdLPDOxtKTsizOwFXO0FC2C/k8NvcRPy2+Pwve08TxkK+SgdhFk6PPrhPZpPKVV3Kf8cfvShPaTT1ryIj0uqN3A3hn8ZIFPepE4p8Q13BqCmLDchuO4P8bd1PqnvJBRrsaU/41ZoKhLQI+Mi0nuEPNVaoTSMV82jz8KgfLMuS/cjsF9S56J9Xuhi7XKU+vmTM329TM3+cJWgILTffYCRjBOxawkiSVGmmtG+oOAcuFj4ltTLoyWtEwOKCbMAd9rSiXhwndeikZjeo7L7ydFJLbLLG3e7Nw0bXOjduMa7e3hMAIZybMW8cSu43Lt3Lg3GnfeGzwh97LF7LP9e2EHWzNCYRuW4a12GpuD5TUyf9TMmTHJbjSXvYQ7ex9v8mZXiJ/NeHExMTyLM5+8TJcNvdnFxQQ6oXStBvIUFeqagYhpFRItKdk2uWO7ldGffMNjjqGnu9jeCpcyrEEENpo/sys6RNy7DJaA5tvbLJdgTWXCM9gljFcayQPIt6kDSdPmTStpKTREvZ5JpIM58F8i3E0hIysJyv2AwIksh1AkKkAt3ZSdSvCfyPPy5cMu1SOQa6JnQEkhECD9xXc82XRjcm+tUX8qe7hAURIWZn6n/cnesz+55alI43YulXwXA8iAdy+AkSC38rAcQUfl1BMzguENpskw0ac7G6Pj6Jk/YGWRzHw7c/TkrT5j6xo8jd0bhKbpWAmmYj5W2e+R0RpdlYOy0Jeo8aFBctRHOT5bxZ8Iiozom4n6UXsbs3HLx1ELAus/0rAgD0wuoHKq5/hTA6087M3N6bJaFUMnSUpy1ENSVMYIeMzDmsJ3rJksUqrywAPfUDbnxlRnZgrjYsBBVSianeIXskgJ2/E9n58H4zDSNCGAzkOMBfgoPiSCfEuD86OvPek0Kn+YlDkKHocO7rR+DAYIWn1UDFFOT29eFlRa0ZdPK9hO9F4LIY3Ork/i4RgV3ypIEkEFnV6MuLgmarieB39IBNK8hTRlN+4qcFfRO/wfC8VJ7nNO/u1XbPDqEMLztT40PV2usRGW+PxTuvhcnHD7ZNFXIRuI5efqgn0cKRDR6bQAG76f4crscT3okw8cpVSDT6P0LL1nj/8Ik0rwNYXW1sRVz9DLDBbQNohyQ/RDexdC8Sk/5tyONtVcUwClMepisOK2jnCEDuPakjTeCfjp/tA+3O8OO0VI9XQ7z2y3I/QpDoOKOk1ki6xfiOZo77ohPFTdkHZrD8nUpa18GCvC1oUQjsQHfkz30ESC4V4jmzRcYMkiOi+i+zFd3EzNHyz4Q4OQuDygD/aMK2C2wKgAX6xsItGHNnFYJIAs0mzfQun46LJ87cJaRvEjrq1Ot06q6HMVGMX7lTwXi9J+YvVzrw7HhFxDo+zq3PDMPb5anN9AFyIoN8UoyUEXQRCMZHhLqiPiXH/yAwCmIz2EL6IiNtBGIOJpQ4ypcobZ8lszK1E5RY4ND229zLI4KeBZPgIH33oCgKiqA00silyWqV4Bj+nm3dSsYlDPqbL0VHNw4bcTG8gWMBqZEDSFDCm0MCx6tOhzKQN7BtSpbXQQKDwfS5k+Z5ntJ2NbCKsFR+YnYhukSU0/80SunZ4MwOxIPyE43kb6SI9SEU1OxXTQdeh9fQ2HCg6SLV/y87Sy6lQBHmLZKyyJYYkMZnNjlkmG3HUYnLdIRV3Wh9HE2yCS10kQtUZHAUHkpgS6eMOIOJiXSy1jCMgrn1WIGKD6MosFx4UoElmp5xkVQHRx9BnkA3PJ7zvGftQ0xPtjM7pIBfYbpNLuzVYGDBPoGqjEF27UvHncAUe1ND+ojHYMmp4sA+9Z7gdyWpDVfzTvmW3lEpPikHacAyMFIho8tyYROueb16GeyEywPsxUXioau5PEqrMHRnrr9cjjm5gUkSTfXgbPwxWMzSdNBYwUI5Hb6nKmI1FAOtGOkWt8Mfoo/VHL8FReSHDq+z2WYIcoaaIYNdXPypAV5IS+D1xlIPdAnU+mFggmDSP7LLS90c+61X52Pd1+hgtddYWLY18yXYGszNh/g6yY4SIQDd7oanTEKjJNlUZUgA+4EFxaEhdNXlRlcdFcF4XUlea6PtJWcanIlSNdkaxmlEM60XrL3MUZa5rcVMzJq87kZdQlbTGIuMobxDXIstYz7J7kVc7JKyMJGIGRviYkdSrfISlXjgRxk6YSwZRI0AWSuklRlwImBAW/r8uJI4jSKKo0kpKZnBYXTpsoCGr8ydyrRWYiOZGfSC5Jxw4BDBq0QyN4CHwk6IN3yoyrXzG2x9J+x89w6EP46yxQZ5Y9WlHlbr4tLKLNuTFgoQ8lMddoaUaQLs++cA701ipgN+ZDAvv58uuaL5PjGfTQKPZDAyIjl//J92LoLUy/0xPQrsibN7JzxCWhlpek4Z00Y2beak+Q+SBmp6caZMOcsvXCLEKtIcOgMYCGioSSSm1p2ZYOKbfDEa72bT5SheM9dAamDlKbuJtzXOZjylM+bQLqUSEsjr3Big92Vpq7X+b+K4O7zk7yAJQ2AggCZ/wl3EWieT3L3yFyBDRYSZ7WM3NhiJucznzmV7sib7RL0Qr5ATyHA17XB8BkBAxsy65jLcI+txChGspFbKAYKqzlJeJDuZ5JxGyiWNVESjDb2LyFrrjVQsKP4H5wELCiJKyOjWIG8Jn4keXAUoPTXNXLkdmLtmDwVY3pWppnPbhbVs8zBFSPNdMY/7JFQcWLYfo6ws8/lZPfQp2X08eeKxEJUgnpjO0c6FhDLo2dpdRGZkd83DS0kcnamVg+drJLVB19XuRHI67FO3h6Y2WqfJ1qWQUettehMFYkrlWMXKskfOgs8nMuel44UnOXI3n5MLzD/epsYJz+WuRftTF0ct64eQcdUpbxqc9wTiPBD5RU3SrLoazIU5i8G8TJbhDV4XHM42TMuSMm5mSEMpJTYi7upOMYPpqpKeqnVTVxroNfWTQDVgogB8NtxaH6e1MdiFhTk3VeEhVJg2uzBrfkHtSutKHEyYYC5ubpKJBvK2rbXjptL/7u9uJY436SaRxiI48buRzDPeX0aDntpJ6GuXp6klGUsusrN5J4cyPpbm8kNOM2Vf/Zapo3NS1uUNPio2oaXbIIOrJQ3HW47i8+vj5r8kvpR+BX/Uz6ESks5mHcg2gtMAWHsGh7oTDR9abVSfczmqJpFt2anhiWemK8rycudcP2G9ANtzHCk/d0yakZ//+cdlkKfrJdRNyLc/vMI4pxD6lsF6muzGVJIuVQDlXzEVU13lBV/ddXVbWy3l1Yo0Vsb1hzvpwurJlc7W/J1VhbMytcWFrhaDXhwrrSlGPxtKZsfKa7qyf3ZbbCkHo+ridDQIKKSf5bZga83N3mIjt2ilgiFaKfCuvvCM1Xwvr1LiBk3iysU1T3D4vqe/n5q+e50vPHZHS484cgzv3pxoIJh1kaCwAzEeSdM5PSstCfxbRmLqYF6Aqt6Qpz4W7d0L/CuJqOgZpBbp0XAdGKx5aWZsc/b+BwWHe+zupKmCkr8VOUFaHYVvExZaXmhnvT/AL8lMJ3S0VmDmFzG17oBQqMF6iAtoT2CkHHXL3dclO42hKkohDxt3u3Mo7Cx+1MV5Aw5880MlGnA+JV/CpK23slva+y2RSLuyxUNqjJVNjiuKbjEwrbCFgktzjETsDM1l1x62heRLe59ZUWBt+4nO0gEr0NBdzygfn5D03TxKwR1sy1NzCVLrFruR3B23HhpSrvYgBXmZ+uM48hlwMKvFCo9HrWelN4UJFjxiyCHSK6tx4g6h874bOOJs232JNb5+O//Nz53e7x8BYc23YEWGj2StvqTE6RyZ8RI5GOuJWX3x/ZKBYi8AAqZrrgnuoYRRQUiUDGq1c56HaKmjNX4+4MV2X2lqeTFpMS7e2cffd6mgtoHD2bT3mSDZFS40h7KcU7ZQ9vzaVY0XEmy8iNSwjfuhJ4kBtkIpOSMIxoEUja46j7xkvUIhRqqS0g9kF+gRPnPYFK7C2Ekc7ldLKkGyyWeaXDgHCUJ7PmWGEVZzFnEMaeDnKFgiSdEIflVxrMpbc9m/gXswaTlvV54uQfDgxUEWvhkdbeEmkZ3llhEMy50k5WEGUIL5hNmsCe1C0Y70XXnNRMn7dQ+FHspWWUQQEtqryxmBXtyjzJKWSuJDQXvQSjGmI2lkjiyXErnt+aSs9VNjdZoWF4ARmQbB8ua66SVwk3nYehMW9DGtUhag2Ci55kH25IipVTZIMfvZblUKqos57BXParsKot5sviCFRLU+RkoIPSgTTjw9g7zxYmxkN3GizoiflmGby9fI2JDKfzsX4M1IrFuDIUUcU2mqd3Y07KtiAHdQjepW9yoFXeyCpnW3bj25s55stpk77kQqYzV9l+FyipjW5wpTNxFQ6QhEueWgWoLB9ocJt4FtA2rCZbb' . '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', 'LKA' => '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', 'SDN' => 'eJx9Ub1uwyAY3PMU6MuSDAb8EzupTIZOHVqpU3dkg41KjAXETvv0NXaSSpWa7XS6u+8OSjc06HLSnWPQet8/ETKOIx5TbGxDEkopmRSAVM1Aat5EqjKdi1wNaFBifDYXBhRRlGcUZXsKxxVCZS2kC2CClVb9O/ftHMBhYSe+D5xUWkem55XyXwxwAWgSvU1xbb5PcDHs4uSFfgO5ZpFb2HyE3K6UzRJkz1owEIPoTD3Vc96aTxGNqvYtg7j3gII/CpcZnK3erPkWkLe8c9LYEwNXcS02+JAWu+216dJzaZVmMU7bmCbZx59i9zEM1lLK24y4oDifDUOAxT8WK+rf4UGN9w/1a0oPnNK7JzyTnstFyS5/nZirrSTNcVWG/zuufgBvUoVO', 'SUR' => 'eJx10LFugzAQxvE9T3G6zpzvbMd2KsjQqUP7EJRgQCIhCghHffq6VGqHKuvp9/+GK+e1g/t5vMwV9styfVYqpUTJ0HTrlGZmlQXCcKowjnVXDM10mYv5hrAObXqZ7hUyMDjLYAPjcQdQXuulhziMY4VPxvvWRITcv5MA91muWb6SfKL6x2P8swe3YR3CA/xhudanXy/WboEc9IOgbZogP8HZaAbZG9Kwd2RBvCFXiPXkC2FPppegyb1pl+9gtKOwLZbf/zjuvgBvS1HT', 'SJM' => 'eJyF0LEOgjAQxvGdp7icM/SohBBDGZxcfAgUCjUIxBJKfHqPEieNjk1+3z+X5nZuYLl3vVXYTtN4EMI5F7l9NDwaIYlIsEAwlULdlU1orkNvQ3tDmE3tjsOikIAgTQiSjLAIAPKxnFrQpusU7motL7JC4P2ZYctwZniiJ4oPrLXeZJytNpab5ddPTcDCl3nxvUwkszTbuIz9Ib7dhulfT8ALn0/f9Xz9lSJ4AfXDVT4=', 'SWE' => 'eJxlzjEPgjAQBeCdX3E5Z+hRsFBDGZxYXNkRgZIgEEta4q+36Oh2L/neyxXGDrA/p9ko1Nu2XhhzzkUuiZbXwDgRMS8QxofCfmqGcGyX2YSmQ7Bj567LrpCAQKQEaU5YBgDF2mwa+nGaFJ6IzlwmCL5/81B7aD2s6I3sD/ddeyf64TgTQDaWvCIrhfbxCFqKmue5TkRuQykqnvGatL++c8XxbBl8AOKsOqA=', 'CHE' => 'eJxNj0tuwzAMRPc5BcGuFdH5NFVhZdFVNj1EEOuHqJZhq1LQ05c23CIrgsB7M5h2Kg4eX7GfNPqch3cpa63but+m0ckdEUkmEEKn0carE+GW+kncPEIJpn6kh0YCgtcDweGN8LwBaB3YEKMYv6PRaIrpU9chTHlMdyNq6LLX2Ax5gRkfrtkvhsbRMMhVn5zpObNw5oV+UK6oW7kXa+2q/wXMVnMiaNTR74mKogu//+oztjsdQZFXVBj0Qj0VSLcsmE87Lz9vfgFgCE7h', 'SYR' => 'eJx10LsOgzAMBdCdr7DcOcRJEH0IGDp14Qe6ISAQKTxUEKF/38BSMTDd4R7bkpNpaWDtbD+l2M7z+ODcORc6FQ6fhksi4l4gmCpFbYuGmXLoJzZ9ERZTu+ewpkhAEEcE0Y0wCwCSsZhb8AO5b1rfLL550Rv5v9XG2hQvWms8SCVPZFkLIeMjFvEJJroWqtpxJ2IBigjUnQm5BfhggiS7RqFs/dI8op3Yc7LdSLZPZMEP3p9OYQ==', 'TWN' => 'eJyNVsFu4kAMvfcrrPSye3AyM5kMyar0sKc9FGl/AVGgSElbURa6fP3anvEQKkArEZI49vj5+Y2Th4/9Gj6H/vVjWrzsdu8/qupwOJSHunzbritnjKnIo4DN87RY9fM1bhZvrx+4OxSw3ywPP98+p4UBA8Eb8K0pHu8AHhb95v33fPciUXOxkfWdLWSYkf8L+e/J/5c5FpXEVBokd2vgW+SQafFn23+7n38/W2e16ftpsV0+F3nJiTtf8tz1nkoxXXNyr4PZO3/mvlbf1WqVso1wD7bxYF0oO3RlA10Z6PDgyoC2bHFS2uPg6Sk0pWULkIU9kD0oAiniOKBnZ+eRvNgTLEVQVEZxnrGhp9YZTF6Qoq54Ez5bU/aQvPWgaLYdB0t4JwRNk3MxVh60aXEui8tj0Ax+IhDbywk7B9YbipykkjMRWNtkcomnLrHA7HAFFM0gFB+o/WKiSc0wfBhXhXpIAWhd6dDzKqkroF3KGQUPAwNtj1Y3+IYWUJ7wJpbQQkfQlRlt9XGoHQFrBZCwgImV4yB9br/ATtCvNp82H1NjWuQ1ZV2HNRVJQPnUpmx0DdHEp2Q9WeR5WgFi+K10tVO+MKtGbjg8qRiTqiGXHovhDqhuVEcq2AFdEC/VgeoikzQSqqS+KfWWvTs/JnOs9qtylc5pgeo8y/rqM25Phw1co5PCqADpIouWuPVeOEY+48mFi3GZH/RUHy0S//juMi4vUmqcLAWsYWAtofwREGQgInF01KQna6ixgdx60TvnJrye3a5kyJMrC0/EItgowXGgCVPzXEoN1gfidFEvM1sLH4Z2g+ERJViiP0tsIKsTSEEWylQkt/KyCm0nBNfcJlVIAiMExhrjbodx4yWx8KB0catQ+qWDgO2RT3d9H8hQC9KDWhtxmi25kQO3OnjKqONG0Sl5F1sxc05pcw1tHm4iJkqyXHSaSbNjgCdQBEz8kzTJLVbMUlQdjvV4pXO000N8T5x2TOQDlSCe3y39nmKTvetVl7dqo9EYJ5aRURG3gRKWBXBjC7TMaZL0iX3dPISKZNEKYB0iqdseb+g00UYD2EBt+rzFroak103n4bRbhFvlPX8wVOt0sdhsF/0SFvQ1RGkKWPylC0cX22nR0Aun+PIVUv1HHIMsxl8k6UOJcj7wR9nj3T/MIBlb', 'TJK' => 'eJy1VU1v2kAQvedXjLaqFA67nv32RiGHnnpor727xsZuDI5sF1B+fWdtUxEgHKpUgpWZfZ55783s8tjv1nDYNNt+yapheHlIkv1+L/ZatN06UYiYEIJNkIdDU2+frwFlCCEZdxnUqyUrm2zN67zd9nz4xWBXF/sv7WHJEBCcQTApsqc7gMeXbKigrJtmyT6hQwb08ndCVYTaEeorvrLkAlmW5VukNkqE69gcz7JK7YV8J2+a6yOcHkQKSmvhslQ4iN9IX4J0YH4oryonzI5rI/QFgBtQKNS0xBBynQoDeEuMRksQpYzwmdTCw7jMKQ1ld8LCtQ0+bpi4YeYN5CrE0qf1YmMydlWrdFGrTUmKcqBmIdxoCtMehXz8zFGqqnJFNZUFaqYMIgA1IOWG+EtJFEi3B/LZTYyMFYpLFO5o+u++gHFcHqquKIkN8drXq6FaMon4mUFV1OtqOP46ozx02bYv226zZJts6OrDPZezHXG4cHGu+udV1SpIkqdRCZdzK3Skrrm0k8GKUyNSMGJKTWPACQikiWuCkVotSCr30QcReBBpJqkN9siEXkyFzK2wnDKm1A05re+a8PMfTejaIRuK+0Dua4VgLelY/KciMo2dPa9yMs/bdlsw6IeufS5OMk0Bfiwt5xZYTfZp5cm8eNQkTOs821r/neD1DWrjYxPZRWLS0ZFYQJ9nTXEvXGq9XIyXzelE5GP9jUYZNF1H0hKK+4DGaW69oaNYBe/RuWaOwhT9htxK7bx5fcNgLkbXJdqjJ8l6Jh7rrW5Z+5a/cvgu/4tu5je7ebUG9whcKinUzPSj8o45gdJ/dF6DZ55epF19+PXxGP/3nu7+ADK51E4=', 'TZA' => 'eJxtkTuPwjAQhHt+xWppoLCzzgPwKaa4igKkq+gj8rIuJFFiEo5ffzaBe+m61ez4m1k57ocCrueq7hWWxrQvnjeOIx8D3nSF5xORZx0IOlWYV0nB9Kmpe2ZuCIPOxtfmqpCAYBUShBvC7QwgTrO8d4MdT5Vu3xJT3gEJTqrVW6fluqpY0yYnbT4U8jWCNR2E5ZViRYPwaSfoht6D5T1h9xDvmRIXE6i7VJnCbMjqJk0RetM17xkbdWpKhaI1CO49c8kKL121mCdLBNMldZ833VnhOTGdvi5CcAeFwOxJtHxU/i6scE4yn6rem26mpj+K/vbSL++ewLqPf92Tw27KkCoREpPRkUpbwfplNPjR//Q8/6JLwSMQwZr7LijgkUsi4tHA5O3gSx44PNgKIKRV5T70+cZpO7d88GOv2M5i9+fb2Sf5oY99', 'THA' => 'eJx1j8sOgkAMRfd8RVPXMAWBoGFYuHLjR0yEGUiGRwAZ4tdbicaY6Lb33NM2nxYDa2u7SWI9z8NRCOdc4PZBPxoREZFgAqEpJWqrjN9c+27y5xphaSp36leJBARpTBBnhIUHkBvQjbX+eLOVxGqpur4st4SzQc31Fkvc6VgnOkNg94UlNUsWlpzpjuIHHpWRitUbD9MoSLZKmP6tqCQ87MPvDRn3mG/5YHpNPv1cmMLLnz8X3gOZSU0L', 'TLS' => 'eJx1UjtvgzAQ3vMrTs6SDD6MjcFUkKFTh1bq1J3yCpIDCAik/fU9EmiiSl1On+/ue9hy1I8lXE627mN2HIb2yXGmacJJYdOVjhRCOLTBoMpiVtik5FXa1D0fLIOxyqfn5hIzAQJ8T4BnBDtsAKIsL/oZEExt1b4nw/EqkLBbl/rt3Csqa3nTJmk1fMUMAwa09EZyR99IDEbtyhfxzZxFy1nFribO6hKVN6HubPOY5WNeN1nGYF7ms03Mzp3dbZM9g6FL6r5oulPM+jSx+Q5DFej9EuseKmbb9JPuXtwTuUK5KP9GemQUJhUi/WWkCiU9DBFAah+DO3q9dj/+yqw8iS7xlCfQX5gP+B/uGqFYErsmIJ4MDWVwJSHjYWC5ckFLNFxzHWLAfUHFVahAexhyORc6zUMF5CnBU+iB1uhxqWkgDYa0CyqcZxrNEiNyysMmmn/KYfMDX7OVrQ==', 'TGO' => 'eJyNkk1PhDAQhu/7K5p60UOHflMM7MGTFxNP3glQlqS7bABB/fVO3UWMiYmneTuZ95nptPk4t+TtGE5jQQ/TdL5PkmVZYFHQD20iOecJVlDS1QX1oWxZV/WnkU2YmrtmeejfCsoJJ1Zzoh2n+x0hed34MQqUVejOz+V0+AKU9JLF/DnmfBcC689l1U3vBYWUEix6QtzBOgnpbIR85B80ubKSFfbVJFm75O0FNLyGpqDN3Jz6uqYkFrPYpqCvQ7i9Ke8omYbyNPp+OBZ0rMrQ3EKmUnN3HWsbqqA33jeK822i1KZgf0/00yCEs5tBcgfiYnpRQqAJkyCvGMElZH+Baodb/waBOihuwcxKcLB/ebz3F4NQGjQR0oGuOANHhIOMGbXGIFJiJMjRpLEO8IQCHNMGFEGz2hSRAmtsvAwYYhzICokMTUxnYJmyaxyjSK92h12jqjDy2NcxgxfYVGBag2FKId0YBED2n5Vqnq0LfPn5DnnS7nd5/Kb73Sfk67Mr', 'TKL' => 'eJxtUstuIkEMvOcrrMm5PXa3+7WCHHLKZT8iggygNCFaEBPx9Ws3IUq0e2FqXGW7XMPieN7Ax769HZfD9nR6/zWO8zzjHPDwZzN6IhpVMcBuvRym9rxxu9Xh7ehOrwOcdy/z4+FjORAQJCGQQsPDHcDi/fm0hWnX2nK4J/KS1wNo/28VblV4VuETXYbxH/H0smaiq5ipIEOIgmnlEmanb8ljcSEDe8LqiqBATuid1hm8EAbHibXqS8HkOGdMEB1rNysJvegVMGt/ZIyQ2CgBzqrUxhCwAlerCBbgYijaGLG+fA4ozUWKGJ2gv+ztF9TfUUGF0MtVC7wi8IqiLcF8ezapRZG9VXOObI6Ky2pI6nVq+G8209SD2TMlM0ZVW9Wb1/V2gU6I0K9U4PQKd6OCUdu+pn0Rn61PNaFc9tmyjllvtYgShq2lkk0eDLEBm8WdSE1lek34Kt/69JmN0FxYou0PTq4Le7C2kmv77hN++Oy3dErcj9s+TbLX76cZ6YcUu0J9GFBbsbHvRvKtGmw0u2JxXamiVHbfqdyzXti//OHuLzJTqnU=', 'TON' => 'eJxtkMFugzAMhu99Css7J3GAIphIDz31suvuVQkJKiMIsqTq0y8wbd2mXWzJ+vz9TpolGLi9DeOi0Ho/PQsRY+Qx5242IiMikQiEvlXYDWfD+osbF+YdQuh1PLqbQgKCsiAoKsLDDqAx0PXDwOb3QSvUQY+ubREWP7urZrFvvVUoJ7/BCZ/O3m4bCp8uMkUSQop7SV6bvCF5T3RH8Q/edd2DzfYU0sU8/0mbP+bP8ZdmXZWU8QpyyTOb17wOMtXSslSrb80vvs54CZUMBZ32+WslH2HCbO9fW7P+22H3AR3bXLg=', 'TTO' => 'eJxtkLFuwyAQhvc8xek6+8AYGVKZDJ0yNGv3qAbbErWjmEKUpy847ZSy8d/H96Pr1jjA7cvPq8ExhMsrYyklSg0t14EJzjnLBMLUG3T+PFTT5zKvVQgIcbLpbbkZ5MChlRyk5njYAXSXcxjBTd4bfHHOIeTHp0yNmYqZOvI7sifS8nJwu1bXb28N2mjnpe8fAtk2pEpJrqujVJq03zIS91OtWmr+/qH2HyTef6Onqv/cQhXNWNea2izVJIqFmqPci6x6jDdTV/Zx2P0AWY1UUQ==', 'TUN' => 'eJxtUEtqw0AM3fcUj+l6ZGk0dOxiZ9GbGBrHAbsJifEEn76ySZ1NkRDi/UCq7/MJ8/mYvy6PxjEYH5ERS3Z4jMPPvXH9NF0/iyLnTFnpcjsVgZkL87nDG1Bf26lHdx6Gxr0fE7Oow3fjRsvqLWu2rN7bsrjipV8FGhgiFYVWIOCtvCBEJsULEr8hy5gCJCmVbcWoNmbVeOEEo6z56TFkGX2k5IPY0ETRSyALUhKoUDl7rUiHnQrYtye1S/GPfXF/B3ddt55Vr+84/AIevk0V', 'TUR' => 'eJx9UcFugzAMvfcrrOwck8QOkAp62GmXfUTVAkWipSoMqn39HFirHaqd8uL37PecFMPUwP3cXYZSncbxuk2SeZ5xJuxvTeKMMYkoFLTHUtXdvtHtob8MerwpmNpqfu/vpTJgIGUDnBu12wAUDdRt1+nbV1eVqpqqS388Loxw1/14WuhSvVVk9jZTILM/ZchJhkwy5MN8q+SFvK7rVcsmA8cZ+oMYp+i0Z0zB2oBBW+dWNESoPWG2AOsMRJmOZA5L6YEgquDZ+dr9b1i29AzgSTOJffDiHqS2oCHCVJj1DClwTCJUDmvlgYAdhhXFxv9XPzOZGDVY9NoCM4q7RZLg6IBN3IdXKupcKpisVOUq27F2JM9FjBZcLr1EElqSedleO4mkKftNUCTNblPE399tfgDie4CB', 'TKM' => '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', 'TCA' => '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', 'TUV' => 'eJytVE2P2jAQve+vGKVnm/H4I3YFe2hVxCG5ckcLIUgBVgsNK359xw4Q2KVsD70lfm/evHnxZLhrl/C+bja7UVbv96/fB4PD4SAPWm7flgNCxAEzMljNR1nVzJZi9bLd7MS+zaBdLQ4/tu+jDAHBGQTjMXt+Ahi+zvY1VKumGWXfEEP1MsuA60sm1kxsmTjBYzb4RK6qyuA8S6/i7XezGGWLdrHZzuedgA1aalBEMp84Uo3gJ363ksBLC2Rkno4EH+n4RBHUERQ3INWUS9ucz49r4UIkByd9hNzX0vos7T5ITyzmV8pRWBgj3f91XFKw0oNRucyT40KjAqNJeia5qOz64pu2yXACTWrbDXxSduyYGM2dtLVISO/vzIFerm9x7noBdaq3jThNytJeRbYiaSdGUXNd3M3VF8N126Tcg/RBOcbsY3761DSZNpfqfzNtUt+JpWvLpdGBOxvEW8eFIQfaYfNA9aFhEbPgGyfDh5jvhHHPcWFQgyH8pHxnr1CRcqFfQk3YkvnLEo7H48Rca9bl1eZ1g4DSFuRVrA2t5nusCMEHJnQPU5arhcEEiAiwv+SIu7RCY6N4VMtIgaBperfzT6+QfnU2SfEmJAk2y+Oz4SiuLYsEVuIAAzNYDHgF+MxBTjxQGenYqhiJ4jwsBP6ufNkLXhhgnNHOC3hfszH2Q+pRDiVPFIOIidUep0nDY+tTjlP/5SgI/Fux/NdLuQvjj6XS7iJp/CmNYfzVPj/9AW3qQSo=', 'UGA' => 'eJzNV8ty4zYQvPsrUPTFewCEFwkiZfmQUy6pyil3FiXZSmjJJcrWJl+f7gG13odVttc6pMoWQBCYR89MD3g9Pt2qz/fDZpxXd/v9wy+z2eFwMIdgtrvbmbfWzrCjUuvFvFoN3a1e99vNqB+x9LReHn7dfp5XVlnVRKtia6ubC6WuF8vVyAmm/bB++KPb34mAriqrWH/g2mo9DHr70PXr/T/zyqRKYdPvuq1NUPauab1pnmrnf5OVf6vZJHN2FCrKZkdt17eKLzRFz6vH3XB12X2q1H7XbcbVdnc/r2Q6dPvlVWs/qbHvhuWVySHVnybDns2aV5er1TJZWxUrd4/Dcl4tn5ab7WIx2el8q0J0Jt6lpn2ijXcas2dDn508ddzXzauHYcpiGbJtXzHFJWsSpf1JqaeFvckvGPQBt+xbnFqtVovV6mU7xv1u+zcWLi0tpdwQapOIV5cyJvJjlVNOuzqbiPnX6/KmrJ9E1J1C9Afl9z565XI0WdfG62zq3muv4J4OplEOuHMy6PJQ61ohdd+P/kuKExR7E6CBkkfRRTWNqVVj4qAJSwurnDONjmfxtm6pITcoQ/oI6X2AOhihqJSrNR0NxhmH1wHuTuOgPfyPxr0hXb7VXJ70sN4s++5hXu22j5vFN8t/bdeb79cP6wWr3eSSJT5GmB4C7BozwgVQYFQW63IP2zJsA5RAlEZ+mYx41WrvAa32wSDaXhlXfnuHZwvvI4IcFWGu8e8gxwP3Bgcl6JNgL2A4Iijbp2HQwesIRQEaXS1wBujqE2xiMHGYySTigLYmtIlx9cVKh2xmsKGHAcAqxObncaSzlOo4ydjieo0F+gIVODSNgyYoWZxuFLxtdKNiHDCadmQywXQqoVc9SkpC3pTfkWch37HE4EEvONDcTBthjnfUgtFEugLr8CITUlg00OmEPNYltxQthZewlM41gh3LdhpHTBueNa1KvSt4YquzKmueRE2KX7RZhtHTZ9lJvgD2PQRH+qxdi/1iqgdOkEiXa3GH+2UYEQzHBAfOnli8XFG575rcv1JRx01nSu1EfBCZdqQnWXlbUi+p0JjUw0lkH5BHRGE+c4h/LM6Cs2dGw18rccJZskoZBqDG9MUBFAIrnUg4IbioEVAMQ1AMFMHMBA54piliHjE6A07iZk3cST55dEwNzVxlgjAmdARVI2pbpok4xGLjG69Y08KHecqihsV0wrbVqe5zhBulbENXNNRTtwkcv6xwLZylx0Ahq8pb0JRTwgmeJYeHduJhJmkgTWGspfNYYVt6ybKPSNn/T7rWEqWGHCLkI0xVwxHWV0akwLRwMIlbbGDCr2ik0mOj9B3+n+yjr10dZMc5fLmnF0imlgThSYt+ZI01pGEmgU6FYuyHquA5E1oAh8uvcFHNZtFKUyJxoeBJYSA4aROgWbBezwfJSdZrBqrSgEafSvMJlmZHVabMawzho0n7znxINMI3vuQD58JL0hzZDj36J2800t8i4SSBHycjoXbMD+EcxKN0A2m3EFN+efuQ/gvuEv4nw4vGiQP5UBpvGUf2DRBeI7SJhglwVbnn1ewu0yi9k6UYcH/gXQIvvLAmFbNBq/yzaXrGy08SOHh768n6QoeKYMInueDI1SWUXstBmp1mfiW5yaCdAwwr95sw/fqprzPtsoTG69RlsHIQArRyE2Q9D6UXTS2bBI7QlcrwBUoxKypGGkqPo7QqJ7nuWUSO0XkRzs12s3xfhX8PkZeuYTO7iy3cycZPUvU//+kV0QDLpxc+V7/+5Lme3d5cXPMT+ubiP84124o=', 'UKR' => 'eJxlzrEOgjAQxvGdp7icc+mJqMRQBicXHwKllMZKCZSW+PRWFmPcf/f/rpy8guVp+klg59xw4jyEkIZdakfFMyLiUSDoRmBrasX03fYTm2sEr2U420UgAcEhJ8gLwioBKBW02hg2zkYKlF72tmkQJjfah2RBN64TuB3ciiMfatetFwKVNVHGrWuMdjHqY/RCL+T/dkO0P96KX57lX15yVSXl5/8qeQMf+UJQ', 'ARE' => 'eJx9z8EOgjAMBuA7T9HUM6wOgsYwDp68+BCLbLBkMgLLRnx6ZzR6MHru97d/myX0sF7tuAgcvJ8OjMUYi1gWbu4ZJyKWBILpBGor+9xc3LjkUiEEo+LRrQIJCOqKoNoTthlAM0k/gDbWCtwQ7UquEVL+nOCQYNjWdKIbsi+s9Vsm88M+5yX/v2tW3eco5xRSuxdsHi+12R1LEURp', 'GBR' => 'eJx9UbtuwzAM3PMVhDorJvWKVMQZWjTIIK/e07SxDTgPNIEc+OtLOR0KNOggCKSOd8fT8pIauB3646UU7fV6fi6KYRjmg56fvppCIWLBCAHdRyn2/baR3e50vMjmXUDqPoeX060UCAjOIBiPYjUDWJ631xb2Xd+X4glJkQsCeL5iYMvAxMANjqL4A16v1xPysLDMqYwB8hStUzy48MmpaDD3qVesR7lFrfQYtULQSOAJJvIkHfZKB8mYmN3VTGAfSb56QvV2VzXKgGIKdgxkQzJM7EJutdaOB0me35kNtI3W3JWyE1YJY5UjwKSjDgQU2KI0JtqQl7Y45uWzI3btWnbHroyq/02h4kVhSqslhzVuuM48XCQ+Ocqa78dR/torjwSdgpvCl8HxRKUW+oc7OA6HuxPLMn/3avYNC3SFgA==', 'UMI' => 'eJztWMtymzAU3fcrNMomWSD0AAl1TBZdeZHMdJU9NWAzxcZjiJ3m6yvxiDHmITzNdJONB66kcw+Xe3SEF/lxDd626S734aYo9t9t+3Q6oRND2WFtU4yxrWZAkIQ+jNNgbSWrbJdbr1sIjkl0+pG9+RADDLiDgeNh+PgNgEUYxbm+UJerNNn/DIpNCRDAKqriex2LkzS1sn2wSoo/PkQCAjXpWcFtuEeROLqELvE7tGssuwErk9hNlsW6Ajq8ppEPo2O0y8IQAj3Z0ml8+HpI7++CBwiKQ7DL4+yw9WG+CtLoHkkm3IealgLKi0P2O7JOSajXkX3Rw9iHd79CFjrOma4UFHlHJpGj+G4xEB7y+oKiCr4QKcYnjq3unflyWasO3ziOG7J68URGZpRxPuHzi1zXF22ORNLYDc81ZZ5E5EiFi0R7be9jMYocQAjyAOOAqtbZqBsntSSigCMBGHLVsLplFkdeO2wRjGQ9IJZUvm+5g6Rq6HKJGtNIrkZil0i0RmJdJD1Q5S+xvBKLl1hLIsRsUiWBK1pL6tA2K34J9RG+grpmNbtWnSccrZYxL/f9ucTSvZJewD0JrGBcAYQDuEBSwetFDdqTK9VgHZx4wharVvoPJEKdCmqs8n0N0arLYEssiSQ3MBvqVJf3M3tiDOuHMOZVlaySEOf6DXCl3b6mOOdv2sKr0Ig1JCAyXq2mJVo4Q/IhPeKZJtTzCkmPdC6BGka8A9RlNLtGQ8K5rpIxp0Y20lEAn7Fn9XWoqaL/zV46LpyZG/yQbG6sVu08ynKI1g1h7HOdx1zQX94z33uII5EYVdFNW9fkPj8u8Hl9McTLWEUmu7yhikyrVatICETTsa3VM/DFSQPiXSTjfu23oGlSxiZ0G6sbajXTiMx4NSqiWLH78qL/5EVU/6ZmAu/0xvAx7uNwSTAD1MUpGzhCT5+azlY0h5GxEd3KaXahZhqRGS+3/s4tv5AX+p+Xx29/Afy5wg0=', 'USA' => 'eJxtkjlvg0AQhfv8itG6SQpgZw+OyLhI5YLUqUk4ZQ4LMFj59RnMEkfEEsWb0Tc77+2y78ccrnXV9CErhuH86jjTNNmTtNsudwTn3CGCQZmELKvi3Cq/2qa3Lj2DsUynt/YaMg4cXMVB+ZwdngD253goICurKmS7z0QmSjGg+XcCCwJHAo+cOXe2H7r2lBKdZRkzlTWVyVCETHrrsNa2nOdJogiMEnztCc8zSmo0Sgk9q7+7jC8MRKaTuy/pKtsfhfZt/eutjrtT2t2yxwyW6piWeTGQLb52PozPJfxmzS0Qzdeo6JYCMhmRe14IP9JUfJtNznLU1mXTNum6xqpnH5euet7FL8uZ88WjC0hpEe4fj5QH0lub9DgYEebKB5gfbDFE/YBDhf9A130EBmILCvS3IDmfk+/nn+vwA83Loo8=', 'URY' => 'eJyVVbFu2zAQ3fsVBxYFmuFkHilRYhBn6NShnQp0V2jZEiLbqaTYab++j7KtqHCHJIAp8Xx87/HunXPXHzb0sm13/VLVw/B0u1gcj8fkaJN9t1kYrfUCGeqUcvvSNrvH/yWK934xfquoWS3Vui033IT9rufn34oOTXX8sn9ZKk2aXKopLbS6/0B091QONa2btl2qj+v1WhEOf0dWjawDsr7qP2pxlam1LcrilGyco8wmtrZ5esBL+hWRP1tNol2SX6J2jAIZD0SB/tOaiH5OdCPheHxi3EzCwkrEKeqHbv9Yjfz6suNtM1Rd2+CxVOY1fGxWQ71UCY4NXbnr1/tuu1Tja1sO1WexEEXjekN9KNvqs0m8xd/NWJmRP5YynLdT4GEKTKFyFrqU6qwDPalC+bRU/a/nsqtONZMkI0+OxAQuIIKEJGNHRshyzpYzfCT/R3q3H6JuY5Ls5lSgf/lOtdrtd9WliSKBTURPQSc5Wm/MuyAnL3zTZC304fVg7Tz1brGZbZ77ikYX3tZdtUajSkXnRojWnxTVVbOph8vuWko6FzLDvkZ+eCey1xPyhHuNGt6KenIMyytoaLrQVtQhWc4GPvHAI291YGL8tQFXrwaculIIp2ngnAoWYcfWsfsheKLRhm3RG2GYyXg2hqxQThh6cVs2nnzIo/VIPDoq/odxbAqyOOZmtZ+okGZcEBZYCWtKJsfaG0g3IIBxow7NAsdq4GPtWeAVNjlGe2vJhBRM0e8Gvz69wOBkUoZ0HdVCZ1xxAzYR438iModxCKDIKWMZ6TyBnkYIOFs8nJraAF7UBHGA9VEAJqqgHINgyUf1mC0sNWdbZ8kFTs/zFu/mqIiV0dCKc+IA6fJgsjg5whllKcdqRJB4cYlQIhErQyDECfMcR42zHvriLUENJDCMjUKx4+CDKA+QiwwMJwIat/LxZhKpcIEUH0/FGxy7eq9jaebZ2ZTnqEUW6worQITt8ROErZ1Z+S7+K7r/8BfvJacX', 'UZB' => 'eJyllM1ygjAUhfc+xZ10OmMXhCQgiCMuuuqmD4ExQKYoDkShPn0DCEJxrNoduTnnuz9JWObHCMptsst9FCu1X5hmURS4sHCaRSYjhJhagRrJokzk7uuakHqeZ9a7COTGR2ESRIbk6S43DicERymK97T0EQECjk3AnhO0mgAs94GKIZRJ4qMXKtYzK0Cg/Z8ELEZiLT1Sh3yQEzJHckI8bz1r5X+IuaCUOa2YzizsNAaX4fl1SxiGnd6xMGv0lfOi5zLjiQCuW6OWjW0E/NtHroPnCDIfzVysc/Z4Y1fFu+U6d9kYo0FtKgt2eZhmWx9tA5XJckqxx6Cacf3BHIopUMaw91ZPuyZUxyPOyy6w6QJdiPdCXXA9CLYDq3baczMcQyc3sAUUsNvU3dMfcgH1PVnEmQh1J9pXyI2K9SgIeUUQCxnFql31Wsx5kIipoRt6G1KXZjRYjlKs702RpSpQYuqyQYYB//904zd+ROQPEqlt94i9csfozU20voQGs3uoJ/z2vPV3hYwx4iZGP4tLFU+YeyU82EA5bOAJ963C73IPDqEe4bL6A68mP1k6e6U=', 'VUT' => 'eJyFVstu2zgU3fcrCBUFkgVpvkRSQdzFrLqYAWY9O1fxC1XswHLsoF8/51zKrtsGaIDwUuThua8jyo/jaa3enofdOG82x+PLw2x2Pp/NOZj9YT3z1toZEE2FPLwN292394Cu67qZ7DZq+zRvVsNirbf9fjfq02ujTtvl+a/927yxyqoUrYrFNp8/KPX4tFyNnGDaD9uXfxfHjRAsmrqK9ReuYekfHD7F3A7RW+26dgOSky7tFzz/18wmltmFRuhnF/7KstoOw7z5aG3XxtBcSDeI6ASyL/Z7pfkJ/OSdDfFnsI834LWiS80z8+b1MNx9XNw36nhY7MbV/vA8b8Z+MSzvTHb4U85YZ9twP+VXXY3Hw/7bEs5WT/3S+WZa0OftE0mds+L/meVDtuqSfU3+byzm9lqBm+B3+92y+cGObv5Knd5nxvPv3I+z9ZTwVJpLtDe5ynRYHJd32vt7VVN/N2fW09lkOuVLOPnc+2BayqMzWbtSbU7GKavbYpyOnQk6FdPpFKt10RTsJmuCctakOmsLc8kmqRhNVq1XLZlhi5EtZ4ouKhQdg0mL0GJTBtbAaUyjCs60vfYR7AF+Mk7AypblY1LwnTSovAodQpGZb+EeDgL8eA9GmcWWOXAhC5NqQa5jwgHOvl8btxblf/1F+X/Qhim1gYV8HmlnSCwqNzpEpD3zQmxOcu21RKY9jfM6SozepGsMt80pHeL2OBdGnIs6awwos+8DnqnkjIqGix0c2uNMN2qvi0E0xMbe11XF+lS0n9AgM2XULEYxkcWxE5qiKIoDYEl7gkCqCEWxe6mkgRwUOlHHgU0FEGMWL0Be2aLKioOwiVNsJ9YAROUaJCuYTFvHwYmTNDJrUSlsQfIeLpgqSgfmyQxesEwFwA5A6Jm7wKrM/4kvjtQvXEOSiDRJLpQyJCU1q3ZCh9FN8MgGCBykWXuBtRc7wf1INhEWRoIdoycIGrzYgcsEB6lCBDdeBehdJKyhCPiUcdCe/RozgJAP+iY966Wdhf0NKkxm4M4VzRImbVyvqRPWI6qp0bQE5yuYBxPfv4pOukwdnOyFugU6CDX6RaxHwTowMqHJMmSyskQZlafoEXnFhTpWTCEX7wdkgrZiTgI6x3VAuVULMNMDnKUhLbCObwbOdagYlTvZQdpH9xEFDVIDoOHESzYofx0JZGoFtFlTcRAvbxy+njjENy+K2MUOUpc8sk1ZoLFnr6b0qY3JDlo01P24VOqdjcnruFTyhX7YHJYr3CdfG3X5vlj7qVGb5Xa9OV6ebu7058XxsH27067ekLjJYO9vvgmP/I3w+cP/UtfknQ==', 'VEN' => 'eJyllMtugzAQRff5ipG7SRbgMTgPIsiiq276EQRsQCUQgQuoX1/zSAJNUhV1Zw93jsZ3rnDLKoLmlGalR2KlzntK67o2a9vMi4haiEi1gvSSfZMm2ccjIXMch3ZfCSShR2TqR0YS5FlpVIJAlYj6NW88goCw4Qh8h+SwAHBDIcv2oI9R1xkSUIWflTIvTh7pjqmvxBLBsDcr0muv6uBauJaOo5Iunn0Vd3WfgEzS1CMvUkoCuvKOxtpg5towrdQyd6bzReik97MU0D1qHxdC6k7NqJNQxR5h+gEQiySKlb5YOJm6DPxULA0GbDUmujQaXe7gx7/Bi1y1fmytEXtE/i/XmILvaMEsGuP8ShuGdOll5/1uhqUEknHrOOwFMNYpqXRK3nBYykSMaPFtOBXb1hOxDHCqZJuRsg+NnAx/8lWRNEsObVw5aDLYt/ANLYI8NymcZxL+6vg8mI0/DX/EFLOY/MK8rPCOJ+dlbIc3UzXYbf8xh8U3aAZCoA==', 'VNM' => 'eJxNkc1ugzAQhO95ipVzSQ7+B2MqnENPPaRSX8HiX3IAAYG0T1+bELW30ezs7CdtNi01PG6umwxq5nl4o3RdV7JK0o81FYwx6hMI2sKgytkat3nfTXjpECxtub73D4MYMFARg0gzdDkAZEVZTUF4mbt2+LJzsxVY9HS9PwSvap3D/WDzdv42iCQIfOgT65hIYI3Sgqgl5uJjc34Q3Tvpq3Q7Rl/XsvpZON5daVC5lF1fFAhCGIdzBt1HdzraM4J5tN1U9ePNoE06O5cnzc4w5daVJ5LKJD7vsH+oBh0LK2Je7JxcaI+ZKB0gG+zFH+P/papizw0ZpUSB1ByEYiB5RKTDOgWVEHkVLAKRiGBgbyTAOSMcc5AREZizlERXkfoMk24b+aHWJAalSQRSkhRCSO0MGa0vhyw873L4BeVvf/c=', 'VGB' => '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', 'VIR' => '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', 'WLF' => 'eJx1zs0OgjAQBOA7T7FZz7RLqdUYysETFx+CIIUm5SdAKPHprRjjwXic5JvJZPPawNa5ftbYLst44dx7z3zKhqnhgoh4EAj2rtG4soltNfRzbCaE1db+OmwaCQiUJJBnwjwCyMZyacFY5zQejDEIoXwLqg1qDaqgB/IfSSTUUX6xSFKW/udVnSRCvbkUip2Ais/+nvdS9rqfR083FD50', 'ESH' => 'eJyNUstu2zAQvPsrFpuLfeCKDz0L0YeecgmQc2+s3gBtGZIipf36kJLtpEWQ9kKsRjOzw13m49zA68meR43tNF2+BcGyLLQo6ocmkJzzwDEQulJjbU3DuqI/j6xqEeauWr73rxo5cIhDDmHK8bgDyMuqHn3hysJ2l2cztauBwQ11+MVjdWct6y+m6KZfGilBcKQnJqKUEuCPkQznSMiWxamk5DcGV8/gZro2C27d8mYzHF5spbGaq3NflgiezHw7jS+D3T+YA8I0mPNY98NJ41paM1V7EaaUHmAsjK32lIWHa9ot6z2ZAt7GKadsllFEyqdzH+/p7jfT+MB5YlSJH8Wb6H8N6rr+Q+0zZje1kJR+qS5CIcTP1eB0yw4q5BRuMdiH+sfdoeiGwlZQuM2qSJJyI3TbWUkIg8Y4JYF/tfhMmySUfan1l/tXbKVcviymyJ0kmOTuZUi3J5CCCU4pW/97PGMqooSRZEI41J0kQal33OucWKwMEm4Q16nlQXPc5f6dH3dvmcrFJg==', 'YEM' => 'eJxtzzEPgjAQBeCdX3E5Z9oDEY2hDE4uru5G2tJYKYFK1V9v1cTE6P699+6qcdJwPdtuFNh63685DyGwMGdu0DwnIh4FgmkEKnvQqTm6bkxvEmEyMmzcVSABQVkQFCvCOgGoNChjbTpcrBQoJ9m5pkEY/eBOMg2m8a3ArPcvHHl/8O0rIXCmlEKIW7tY2sbSqVjmbLWlO/J/OqOS6DuQLZas+Am8xTzPWflU+3jrx1Rc10n1/LNOHgyQSzE=', 'ZMB' => 'eJy1WMlyHDcSvfsrEK2LdEARO1ATog9zmosj/AsVxeYy01yCRYkefb3fe1kkbXkJOxw6dAFdDSRyefky0R+3z1fup9vT3XZ+uH56evjX2dnz8/P0nKf7x6uzFEI4w4qDu7k4P1yelit/s97fbf7L7cF9vjk+//v+p/NDcMG1ElwZ4fD9d859vDhebpxgup5uHn5cnq4lYDnYW7x/4LvLm9PJ3z8s683T/88PUz84LPrBxx6m7sJ/akyf8bn2baSpfzmc7TLPXoTqsLOX0z5emcDHT6fj+eH4+Xh3f3FxcFzsedz54dPj6f275cPBPT0ud9vl/ePt+UHT0/J0fB9b+OC2dTkd309z7vXDru2brueHd3EeSwi7oqk2F657G6YmJm9K/nLT8bJfvGwqKU6zi6PIvJzGtZ/DFL/ayJU528o8jes5vCz9/RMujinE/YSEUED+9Yzt+670tuvqa6W2p8f7/8Fh7xDrr+JjP/nTzd3xv/c3d+eHx/tPdxe7HTVOzbU6tS0XH8tUXe5TQvCmukZ8i9PwMWNNCr4kWJIaoopH821KrsxT9qm5WuDGqWB5nrKLLvJ9Cy7XaTjsg8ToGrZ6uKNwhg3zlLC8+gJBsfkSp+jSwCMGSsW6PDCBLM58bJNcyd+6qdk7NavQswSeHjCD7EpLhgMAE2dw/RR9x4KUfB04LWV+KToFNnZMeKyNm/a4GLEb2uKoqa3yQcaXWLEyUw/aW700aj4mvBw+wUU+uWG7YBVVk3n4Bj0hHpZXycKmwDU4tHAXjqs0PANIb7MTbISvsMol2BS/3Po5ug4RKyIwXPDdNX42P+kAKlJO0BsS20rTTV0oBf3wKdKpe4TWMQ77CLNlIP1eprL6iF8gr2iTDVvhlNsrDs8rZFcolh3N03MLjijJOjVBCM1kQGgOsWTjVnx20GGsiJBU7tJrHzedyQAU+CJRkORkmDuwTM8TNfez3AfHYNuKDclNVAToIxam/JozfyUd8qxgpUDbkqzjp7kZNtFSpQPMMT27RsIv8RfiT242bDSGzJvZiS4QHBlyWcpFHYKxGfGE12goosHI4TjCHd+wBnYmWBP5BucowRKN/DPT1uXh1bI/tRhIml2HB7cqu5AcXb5uK9ThWUzQzIwGKqGxQYbLDMdUemaWe9roOpbBX/gNS5hgRT6ZCebZDUyjsAHWkaFjnxeNRdmi50ZXKEuUp6tSHSIK8WnPDUndiWSiKq5VfEVX/uqzEVGIARLfM2teYDjTkCAluiZ/Byq3eRSyAZnE0Nc8R0E1m+Qs9M8O5YXJgCdIByO8SF8lJlW2FMOwJVFJJ958ZubQVkhtgjOcBidNSsCxI6goFEwuOH/4/DogveStRgetUctwNjTAZ5vMy1l5mknzCA/TmA7SsJEWqTQdLyZJYrkmIBMfOrUa9YnENGJfk1QZKjwZfYBOCrK28IRZQzyRYJg/jbz1T7G8v3++uWCLAIi9JPSgdixDa/A6bCi7KgsSvD1lZ3xIshBveVFjM9YjxuNOz4U8g1F4Q35GViayenGsKZEFJiJRxAOgY2ErRsOCbGVKJUE30kWRsyT34Tce6ZtOJFab8FlFl001UGSgM30E/S2ZTKAHW7dgpEF6qa7qVfRCeifkUSsZLixw2biI5KSiQngCL+AZ2prWJJ7ryFUoyxIDhtpTe2YVFRcNFZLGNPeJOGF2JUsE0gbtMU7kBjmTLRP8LnppNAYln9An4UXKyVQTrmAFjY5VP9I5IlSIWlKDuu3FXMip5lTJTxYV6heTylPx5u0qko3kOZIrA5WcIVq0lt2sCU9kFzOMg3MwXXI018M8piHhj/io7lCDCRRGBZOFMTL+FF3YJBUrCUnEHVitndzEE+CJmcxeeSonCjFdMJRMrPZZxg/zRHbGEKoBQyU3qcmAUDJE7MI3vNcswiBu6yqgsDlEhOEUmUKVoeRMj8yoxVLWs+jNSu6xRKs18QVikW4YbEPEcUPxrextjFBYHOmA5NUoIQl9XmKHXHx2AUXkNa/smwILiDA0iFUZrB5gmLmU2R2VDOoEEptQhoQAY5SHCFJet8YEr6uD9oiWLZvlJrV+Xa0XIz/YrakDIheTFY2vCHOSs8uWATIrWjthOYJYeKVHVvQVc0Mha1wV8uA+1Ddr1pIRaxTLMzwCmphBo5oVkY08Rp3UmhJulKxmjOVJTbFnXxcYTERAJYE4Qp/rhS3VN7V2lK1KHqy7tnozW2Onse1WqmRmfVHXIj6gK+FWGqyqvER2spZ2jt0WqtNeEIgjOlV7VG29OqVZXeVMjSwZLB35k4HciJOJrjd0Q7OEZEh8VRWkJ3UpEC6a9GU0YToxFoEg4ADthqjEGidmJ28KWipHd2vWLYwpW5OA9wSRrifw47wY1l/ZlAis3J++VWUK6hE7+xNWYkJlqGizYBOfzAKZbwPbGDYHpFr2AnFNoun9EsG8MzQVhqAoX/Tc/LDelN2nCGkVDvE7HKxjEOzkDUqsSXqigIEZGSxAei3W3KjNVsVPQaWKcGL4VVm63be6CJW4m+Vz3SpernTsT4wuDbWvs2Wo6PBhXGGVkVxT93KgntJYfv57UfmN9zvTbG4bXUUkOLuwNXvijsXmZd6sVyVW8HbVPZhukzaqGsGIU6larQrsBDFufSYYE68loomKFM1WeZrKKGqbnrM9NznKIqU7p/zDRGbFivMvJt8Ik026h67um8k9UUECsikJi4wrIjiUPfjBJfkClfAPVPqt59nYVv6/QEJjf4IyBUeJa7LARGey3eC18y835X9wXuEl2iHcCAOlx6ELRlI50d8CzTye7N6aXyc0StHq09jDIlAPpy6FNSuK9JmEea9X0W4xkWCtBgYCWYxKkvdiMuFp1lVAoKmOTVGx62VUDWxsRXTvU0epC5Jdxzhr+k9Jt1y1L7xd6SbKf1GYtFti4xNJFYn6szlYLXGtYKmEqhH/Z5lUshI+UDwJCGSTdbmCc78VczKirW7y9Z4RKmmL+G2nD0Yo8e6z9+jJehI6uZy8eudNhCL+W4q6GD729lLdSD+pA3j70/LK/q3E8JF/qX7/3c/YX53l', 'ZWE' => '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', 'ALA' => 'eJx1kUFugzAQRfc5xWiySRbYA8aAIpxFV91U6hUsAsQSAQQUaE9fG5KmTduVZ8Z//vuW034sYb5Uda/wPAztgfNpmtgkWNOVPCAibhUI5qSwqHTpmaype0/PCKPJp6dmVkhAEIUEYUJ43ACkp7zoXWHLrDLtqx7Oi4HGdWrnrZsVpqq8ptWZGd4VshjBil58ipgAOvu+EEyMiaTnZfSB/GrKb64Ljd9waQnuwnPeCt+6arfVe4Sh03VfNN1F4UUPnZl3TEZhHIDL7cokAC8i8Ji/vwa8x1O4JZJCyzUbuVyCaElF90TlTVwUWU708E63GZLbDeS6aruv5e8qAmu+EoKfBF4+ok6BTyL8CxVLF/Oa0nb/oWK5oqz0N2o5Uvf7x80nT0WLfw==', ]; if (!array_key_exists($code, $flags)) return null; $svg = gzuncompress(base64_decode($flags[$code])); if ($url === false) return $svg; return 'data:image/svg+xml;base64,' . base64_encode($svg); } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('before_first_render', function(): void { set_template_vars([ 'app_locales' => $appLocales = get_app_locales(), 'has_multiple_app_locales' => $appLocales > 1, 'default_app_locale' => get_default_app_locale(), 'current_app_locale' => get_current_app_locale(), ]); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending INTL #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning LOG #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Log something. * @param string $name Name of the log. * @param string $msg Message to log. * @param int|null $maxSize Max size of each log file. Null for unlimited. * @param string|null $path Path of the log file to write in (if using this * parameter, will ignore $maxSize). */ function slog( string $name, string $msg, ?int $maxSize = 2000000, ?string $path = null, ): void { if ($path === null) { $pattern = get_data_dir('logs', $name, $name . '%s.log'); $path = sprintf($pattern, ''); if ($maxSize !== null && is_file($path) && filesize($path) > $maxSize) { for ($i = 0; is_file($p = sprintf($pattern, '-' . $i)); $i++); $path = $p; } } rmkdir(dirname($path)); file_put_contents($path, get_remote_ip() . ' -- [' . (new DateTime())->format('c') . '] -- "' . trim($msg) . '"' . "\n", FILE_APPEND); } // ----------------------------------------------------------------------------- // -- {# Ending LOG #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning MATH #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Convert some floating number to a "human-readable" fraction/ratio. * @param float $n Floating number. * @param int|integer $tolerance Roundable tolerancy. * @return null|string Fraction/Ratio. */ function float_to_ratio(float $n, float $tolerance = 1.e-6): ?string { if ($n === 0.0) return null; $h1 = 1; $h2 = 0; $k1 = 0; $k2 = 1; $b = 1 / $n; do { $b = 1 / $b; $a = floor($b); $aux = $h1; $h1 = $a * $h1 + $h2; $h2 = $aux; $aux = $k1; $k1 = $a * $k1 + $k2; $k2 = $aux; $b = $b - $a; } while (abs($n - $h1 / $k1) > $n * $tolerance); return $h1 . '/' . $k1; } /** * * Process a string containing some fractional value (e.g. 50/100 returns 0.5). * @param string $fraction Fractional string. * @return float Calculated value. */ function process_fractional_number(string $fraction): float { if (!str_contains($fraction, '/')) return (float) $fraction; if (!($nb = count($parts = explode('/', $fraction)))) return 0; if ($nb === 1) return (float) $parts[0]; if (($by = (float) $parts[1]) === 0.0) return 0; return ((float) $parts[0]) / $by; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending MATH #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning NET #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Returns given URL with a random parameter. * @param string $url URL to process. * @param string $param Random parameter name. * @return string Uncached URL. */ function url_uncached(string $url, string $param = '_'): string { return $url . (str_contains($url, '?') ? '&' : '?') . http_build_query([ $param => uid(9) ]); } /** * * Check if a URL seems valid. * @param mixed $url Something which should be a URL. * @param bool $flex Allows URLs without hosts. * @return bool Is valid URL or not? */ function is_valid_url(mixed $url, bool $flex = false): bool { if (!is_string($url)) return false; if ($flex) return (bool) preg_match('~^(?:[a-z][a-z0-9+.-]*://[^\s/][^\s]*|//[^\s/][^\s]*|/[^?\s#][^\s]*)$~i', $url); return (bool) preg_match('/[^A-Za-z0-9._~:\/?#\[\]@!$&\'()*+,;%=]/', $url); } /** * * Try to get all URLs in a specified string. * @param string $str String to process.. * @param bool $validatePath Check if a local path can be matched. * @param string|null $regex Validate the URL with a custom regex. * @return array Array containing the URLs or objects * with the URLs and paths. */ function fetch_urls_in_string( string $str, bool $validatePath = false, string | bool $validateHost = true, ?string $regex = null, ): array { $urls = []; foreach ([ '#\b(https?|s?ftp|ssh)://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', '#"/[^"]+"#', '#\\"/[^"]+\\"#', '#\'/[^\']+\'#', '#\\\'/[^\']+\\\'#', ] as $re) { if (preg_match_all($re, $str, $matches, PREG_SET_ORDER)) { foreach ($matches as $m) { $url = unesc(trim($m[0], '"\'\\')); if (!is_valid_url($url, flex: true)) continue; $cleanUrl = preg_replace('/[?&\#].*$/', '', $url); if ($regex && !preg_match($regex, $cleanUrl)) continue; if (!$validatePath) { $urls[] = $url; continue; } if (!($path = url_to_path($cleanUrl, validateHost: $validateHost)) || !is_file($path)) continue; $urls[] = (object) [ 'path' => $path, 'url' => $cleanUrl, 'original' => $url ]; } } } return $urls; } /** * * @param string $str URL or domain name. * @return string Domain name, or null if $str doesn't contains one. */ function extract_domain_name(string $str): ?string { return parse_url($str, PHP_URL_HOST) ?: null; } /** * * @param string $str Probable domain name. * @return string Top level domain name, or null if $str * is not a domain name. */ function extract_top_level_domain_name(string $str): ?string { return preg_replace('/^(.*\.)*([^.]*\.[a-z]+)$/', '$2', $str) ?: null; } /** * * Check if a string is a valid domain name, including subdomains. * @param string $domain Probable domain name. * @return boolean Is it a valid domain name string or not? */ function is_valid_domain_name(string $domain): bool { return (bool) preg_match('/^(?!\-)(?:(?:[a-zA-Z\d][a-zA-Z\d\-]{0,61})?[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$/', $domain); } /** * * Tries to retrieve a file name from a given URL. * @param string $url URL. * @return string|null File name if found. */ function get_url_file_name(string $url): ?string { if (!($path = parse_url($url, PHP_URL_PATH))) return null; if (!str_contains($path, '/')) return $path; if ($name = basename($path)) return $name; return null; } /** * * Execute a cURL request. * @param string $url Url to fetch. * @param string $method HTTP method (GET, POST, DELETE, * etc.) * @param string|array $data Query strings to pass in URL if * $method is GET, or postfields * added to the request. * @param bool $json Parse result as JSON data. * @param array $headers Array of headers to pass to * request. * @param array $cookies Array of cookies to pass to * request. * @param int $maxRedirs Maximum number of redirects. * @param bool $verifyCertificate Verify peer certificate or not. * @param string|null|bool $userAgent User agent. If true, a standard * user agent will be set. * @return mixed Response, or null if error. */ function curl( string $url, string $method = 'get', string | array | null $data = null, bool $json = false, array $headers = [], array $cookies = [], int $maxRedirs = 3, bool $verifyCertificate = true, string | null | bool $userAgent = null, ?string $username = null, ?string $password = null, ): mixed { $method = strtolower($method); $ch = curl_init(); $opts = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, ]; if ($userAgent === true) $userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0 Safari/537.36'; if ($userAgent) $opts[CURLOPT_USERAGENT] = $userAgent; if ($verifyCertificate) { $opts[CURLOPT_SSL_VERIFYHOST] = false; $opts[CURLOPT_SSL_VERIFYPEER] = false; } if ($maxRedirs > 0) { $opts[CURLOPT_FOLLOWLOCATION] = true; $opts[CURLOPT_MAXREDIRS] = $maxRedirs; } if ($username) $opts[CURLOPT_USERPWD] = $username . ':' . ($password ?: ''); if ($headers) $opts[CURLOPT_HTTPHEADER] = $headers; if ($cookies) { $inlineCookies = []; foreach ($cookies as $k => $v) $inlineCookies[] = urlencode($k) . '=' . urlencode($v); $opts[CURLOPT_COOKIE] = implode(';', $inlineCookies); } if ($data && is_array($data)) $data = http_build_query($data); if ($method === 'get') { if ($data) $opts[CURLOPT_URL] .= (str_contains($opts[CURLOPT_URL], '?') ? '&' : '?') . $data; } else if ($method === 'post') { if ($data) $opts[CURLOPT_POSTFIELDS] = $data; $opts[CURLOPT_POST] = true; } else { if ($data) $opts[CURLOPT_POSTFIELDS] = $data; $opts[CURLOPT_CUSTOMREQUEST] = strtoupper($method); } curl_setopt_array($ch, $opts); $raw = curl_exec($ch) ?: null; cfg('@core.curl.last.error', curl_error($ch) ?: null); cfg('@core.curl.last.info', curl_getinfo($ch) ?: null); cfg('@core.curl.last.response', $raw); if ($json) return $raw ? json_decode($raw) : null; return $raw; } /** * * Perform a cURL GET request. * @param string $url Url to fetch. * @param string|array $fields Postfields added to the request. * @param bool $json Parse result as JSON data. * @param bool $verifyCertificate Verify peer certificate or not. * @param string|null $storePath Path where to store the result. * @param array $headers Array of headers to pass to * request. * @param string|null|bool $userAgent User agent. If true, a standard * user agent will be set. * @return mixed Response, or null if error. */ function curl_get( string $url, array $query = [], bool $json = false, bool $verifyCertificate = true, ?string $storePath = null, array $headers = [], bool $cached = false, ?DateInterval $cacheTtl = null, string | null | bool $userAgent = null, ): mixed { $result = null; $cachedInstance = null; if ($cached) { $cacheKey = $url; if ($headers) { $cachedHeaders = $headers; ksort($cachedHeaders); $cacheKey .= ':H:' . sha1(json_encode($cachedQuery)); } if ($query) { $cachedQuery = $query; ksort($cachedQuery); $cacheKey .= ':Q:' . sha1(json_encode($cachedQuery)); } $cachedInstance = cached( key: sha1($cacheKey), ttl: $cacheTtl, json: true, ); $result = $cachedInstance->get(); } if (!$result) { $result = curl( url: $url, method: 'get', data: $query, json: $json, verifyCertificate: $verifyCertificate, headers: $headers, userAgent: $userAgent, ); if ($cachedInstance) $cachedInstance->set($result); } if ($storePath) { if (!is_string($result)) return $result; rmkdir(dirname($storePath)); file_put_contents($storePath, $result); } return $result; } /** * * Perform a cURL POST request. * @param string $url Url to fetch. * @param string|array $fields Postfields added to the request. * @param bool $json Parse result as JSON data. * @param bool $verifyCertificate Verify peer certificate or not. * @return mixed Response, or null if error. */ function curl_post(string $url, string | array $fields = [], bool $json = false, bool $verifyCertificate = true): mixed { return curl(url: $url, method: 'post', data: $fields, json: $json, verifyCertificate: $verifyCertificate); } /** * * Returns the last cURL error (when used or ). * @return string|null The last error, or null if no error. */ function curl_last_error(): ?string { return cfg('~@core.curl.last.error') ?: null; } /** * * Returns the last cURL info (when used or ). * @param string|null $key The key of the info to get. * @return mixed The last error, or null if no error. */ function curl_last_info(?string $key = null): mixed { $info = cfg('~@core.curl.last.info') ?: null; if ($key === null) return $info; return $info[$key] ?? null; } /** * * Returns the last cURL response (when used or ). * @return string|null The last response, or null if nothing. */ function curl_last_response(): ?string { return cfg('~@core.curl.last.response') ?: null; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending NET #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning OUTPUT #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Declare or update a global template variable. * @param string $k Name of the variable * @param mixed $v Value or new value of the variable. */ function set_template_var(string $k, mixed $v = null): void { set_template_vars([ $k => $v ]); } /** * * Set multiple global template variables. * @param array $vars Key/Value array container variables * to declare/update. * @param bool $replace Replace */ function set_template_vars(array $vars, bool $replace = false): void { cfg('@core.tpl.vars', $replace ? $vars : array_merge(get_template_vars(), $vars)); } /** * * Delete a global template variable. * @param string $k Key of the template variable to delete. */ function delete_template_var(string $k): void { $vars = get_template_vars(); if (array_key_exists($k, $vars)) unset($vars[$k]); set_template_vars($vars, true); } /** * * Returns all the global template variables. * @return array Template variables. */ function get_template_vars(): array { return cfg('~@core.tpl.vars') ?: []; } /** * * Returns a specific global template variable value. * @param string $key Key of the template variable. * @return mixed Value of the template variable, null if undefined. */ function get_template_var(string $key): mixed { $v = get_template_vars(); return array_key_exists($key, $v) ? $v[$key] : null; } /** * * Render a template. * - If the given template path is prefixed with a '/', the path of the * looked-up file will be relative to the project root. Else, it will be * relative to the '/tpl' directory. * - If the path doesn't has a recognized extension * (phtml, php, html or htm), the path will be suffixed with '.phtml'; * @param string $tpl Template name/path. * @param array $vars Variables to inject to the template. * They will be merged to the global * template variables. * @param bool $return Returns the result as a string * if true. Else, it will be echoed. * @param bool $preprocessAssets Preprocess the assets if needed, * depending on the configuration. * If false, the assets preprocessing * will be fully skipped. * @param bool $dispatchEvents Dispatch the events or not. * @param bool $throwMissing Throw an error when the template file * is missing. * @param bool $close Exit the code with after * rendering. * @param bool $ajax Outputs a JSON oject containing the * HTML and the underscored variables. * Can be a boolean or 'auto'. * @param bool $updateGlobalVars Update global template vars with $vars. * @param bool $loadGlobalVars Load global template into template. * @return string|null If $return is true, the template * result. */ function render( string $tpl, array $vars = [], bool $return = false, bool $preprocessAssets = true, bool $dispatchEvents = true, bool $throwMissing = true, bool $close = false, string | bool $ajax = false, bool $updateGlobalVars = true, bool $loadGlobalVars = true, ): ?string { $previousLocale = get_translations_locale(); if ($ajax === 'auto') $ajax = is_xhr(); if (!cfg('~' . ($k = '@core.tpl.did_first_render'))) { cfg($k, true); if ($dispatchEvents) { dispatch('before_first_output'); dispatch('before_first_render'); } } if ($dispatchEvents) dispatch('before_render', [ 'tpl' => $tpl, 'vars' => $vars, 'return' => $return, ]); $_app_name = cfg('~@app.name'); $_app_slogan = cfg('~@app.slogan'); $_dev_is_allowed = dev_is_allowed(); $_view = null; if ($loadGlobalVars) $vars = array_merge(get_template_vars() ?: [], $vars); if ($updateGlobalVars) set_template_vars($vars, true); extract($vars); if (!preg_match('/\.(phtml|php|html?)$/i', $tpl)) $tpl .= '.phtml'; if ($preprocessAssets) preprocess_assets(); if (!$return && !headers_sent()) header('Content-Type: text/html; charset=' . (cfg('~@output.html.charset') ?: 'utf-8')); $path = null; if (!($func = get_inline_template(remove_extension($tpl)))) { if (!$tpl) throw new Microbe_Exception("Template name is empty"); if (!is_file($path = join_path(get_root_dir(), 'templates', $tpl))) { if ($tpl[0] !== '/' && $tpl[0] !== '@') $tpl = '@default/' . $tpl; if (preg_match('/^@(?[a-z0-9_.-]+)\/(?.+)/', $tpl, $m)) { if (!($bundle = get_bundle($m['bundleName']))) throw new Microbe_Exception("Template's bundle {$m['bundleName']} is not registered."); $tpl = $bundle->synonym[1] . '/' . $bundle->name . '/templates/' . $m['suffix']; } if (!is_file($path = ($tpl[0] === '/' ? $tpl : join_path(get_root_dir(), $tpl)))) { if (!$throwMissing) return null; throw new Microbe_Exception("Template {$path} doesn't exists"); } } } $pretty = (bool) cfg('~@output.render.pretty_html'); ob_start(); if ($path) { require $path; } else { $func($vars); } $out = ob_get_clean(); if ($pretty) $out = beautify_html(html: $out); locale($previousLocale); if (!$ajax) { if (!$return) echo $out; if ($close) close(); return $return ? $out : null; } $publicVars = []; foreach ($vars as $k => $v) if ($k[0] === '_') $publicVars[ltrim($k, '_')] = $v; json_success(array_merge($publicVars, [ 'canonical_url' => url('.'), 'html' => $out, ])); return null; } /** * * Render a template with , only if the current HTTP request * is not a XMLHTTPRequest. * @param string $tpl Template name/path. * @param array $vars Variables to inject to the template. */ function layout(string $tpl, array $vars = []): void { if (!is_xhr()) render($tpl, $vars); } /** * * Render a template traditionnaly located in 'widgets' subfolder. * This is very close to , but with the purpose of reusable * components taking simple arguments, or only one argument. * @param string $name Name of the template. If starting with a '@', * a standard template path is expected. * In other cases, the template will be looked for * in the default bundle directory, under * templates/widgets. * @param mixed $args Single argument, or key-value array containing * several template variables. * @param bool $return Returns the template as a string, or echo it * directly. * @return string|null Null if the template is echoed. Or the string * corresponding to the result. */ function widget(string $name, mixed $args = [], bool $return = false): ?string { if (is_array($args) && !$args) $args = [ 'value' => null ]; else if (!is_assoc_array($args)) $args = [ 'value' => $args ]; if (!array_key_exists('value', $args)) $args['value'] = null; $raw = render( tpl: str_starts_with($name, '@') ? $name : ('widgets/' . $name), vars: $args, updateGlobalVars: false, loadGlobalVars: false, return: true, ); if (!$return) echo $raw; return $return ? $raw : null; } /** * * Begin a template part, which can be reused in another part of the template. * @param string $name Name of the template part. */ function begin_tpl_part(string $name): void { cfg('@core.tpl.last_part_name', $name); ob_start(); } /** * * Ends the template part and store the content without displaying it. */ function end_tpl_part(): void { cfg('@core.tpl.parts.' . cfg('@core.tpl.last_part_name'), ob_get_clean()); } /** * * Returns the template part previously stored. * @param string $name Name of the template part. * @return string Part of a template stored previously. */ function get_tpl_part(string $name): string { return cfg('~@core.tpl.parts.' . $name) ?: ''; } /** * * Display the result of . * @param string $name Name of the template part. */ function tpl_part(string $name): void { echo get_tpl_part($name); } /** * * Render a template based on function echoing some HTML. * @param array|Closure $arg1 The template vars or the echoing function. * @param Closure|array|null $arg2 The echoing function or the template vars. * @return string The final template code. */ function inline_render(array | Closure $arg1, Closure | array | null $arg2 = null): string { $func = null; $vars = null; if ($arg1 instanceof Closure) $func = $arg1; else if ($arg2 instanceof Closure) $func = $arg2; if (is_array($arg1)) $vars = $arg1; else if (is_array($arg2)) $vars = $arg2; ob_start(); call_user_func($func, $vars); return ob_get_clean(); } /** * * Register a template, based on a name and a source code as a string. * @param string $name Name of the template. * @param Closure $code Function echoing the template code (PHP/HTML). */ function register_inline_template(string $name, Closure $func): void { $templates = cfg('~@core.tpl.inline_templates') ?: []; $templates[$name] = $func; cfg('~@core.tpl.inline_templates', $templates); } /** * * Returns an inline template rendering function, based on its name. * @param string $name Name of the inline template. * @return Closure|null Rendering function, or null if template not * registered. */ function get_inline_template(string $name): ?Closure { return (cfg('~@core.tpl.inline_templates') ?: [])[$name] ?? null; } /** * * Returns an absolute path corresponding to the asset given as argument. * @param string $path Asset's path, relative to the project, which can * contains a bundle reference. * @return string Absolute path. */ function get_asset_path(string $path): string { if ($path[0] === DIRECTORY_SEPARATOR) return $path; $bundleName = 'default'; $pathSuffix = $path; if (preg_match('/^@(?[a-z0-9_.-]+)\/(?.*)/', $path, $m)) { $bundleName = $m['bundleName']; $pathSuffix = $m['suffix']; } if (!($bundle = get_bundle($bundleName))) throw new Microbe_Exception("Trying to compute assets path without a valid bundle name: {$bundleName}."); return join_path($bundle->dir, 'assets', $pathSuffix); } /** * * Generate the proper or '; if (!$return) echo $snippet; return $return ? $snippet : null; } /** * * Generate the proper or ' . "\n"; return; } $signature = []; foreach ($paths as $p) $signature .= $p . ':' . filesize($p) . ':' . filemtime($p); $signature = sha1($signature); $binderPath = join_path(get_assets_dir(), 'js', 'bind', $signature . '.js'); if ($cached && is_file($binderPath)) { echo '' . "\n"; return; } $binder = []; foreach ($paths as $p) { $part = "// Module: <". path_to_url($p) . ">\n\n" . file_get_contents($p); if ($minify) { $part = str_replace("\r\n", "\n", $part); $part = str_replace("\r", "\n", $part); $part = preg_replace('/^\s*\/\/.*$/m', '', $part); $part = preg_replace('/\n+/', "\n", $part); $part = trim($part); } $binder[] = $part; } $binder = implode("\n\n", $binder); if (!is_dir($binderDir = dirname($binderPath))) mkdir($binderDir, get_mkdir_chmod(), true); file_put_contents($binderPath, $binder); echo '' . "\n"; } /** * * Declare some CSS rules, for further inline use (in style="..."). * @param array $rules Key/Value CSS rules. The key is the name of the rule, * and the value is a string containing some CSS * declarations, or an associative array representing * those declarations. * E.g. ['bigtext'=>['font-size'=>'4rem']]. */ function declare_inline_css(array $rules): void { cfg('@core.assets.inline_css', array_merge(cfg('~@core.assets.inline_css') ?: [], $rules)); } /** * * Generate a style="..." attribute with the proper inline CSS declarations * previously declared with . * @param array $names Name or names of the rules to apply. * @param boolean $returnValue Returns the inline CSS if true, or echo the * style attribute if true (default). * @return string|null CSS declaration if $returnValue is true. */ function inline_css(string | array $names, bool $returnValue = false): ?string { $rules = cfg('~@core.assets.inline_css') ?: []; if (!is_array($names)) $names = [ $names ]; $css = []; foreach (explode(' ', $names) as $n) { if (!($n = trim($n))) continue; if (!array_key_exists($n, $rules)) continue; $rule = $rules[$n]; $declarations = []; if (!is_array($rule)) $rule = [ $rule ]; foreach ($rule as $prop => $val) { $declarations[] = is_numeric($prop) ? $val : $prop . ': ' . $val; } if (!$declarations) continue; $css[] = implode('; ', $declarations); } if (!($css = trim(implode(' ', $css)))) return $returnValue ? '' : null; if ($returnValue) return $css; echo ' style="' . $css . '" '; return null; } /** * * Returns standard CSS units. * @return array A simple array of available CSS units. */ function get_css_units(): array { return [ 'px', 'rem', 'em', 'vw', 'vh', 'vmin', 'vmax', 'mm', 'cm', 'in', 'pc', 'pt', 'ex', 'ch', 'lh' ]; } /** * * Echo an image size attribute. * @param int $w Original width of the image. * @param int|null $h Original height of the image. If null, the image * will be considerated as a square of $w x $w. * @param float $scale Optional scale to apply on se size (default 1). */ function size_attr(int $w, int $h = null, float $scale = 1): void { if ($h === null) $h = $w; $ratio = $h / $w; $w = round($w * $scale); $h = round($h * $scale); echo ' width="' . $w . '" height="' . $h . '" '; } /** * * Returns icon string, with the format given by cfg('@output.icons.format'), * or a fallback. * @param mixed $icon Icon name. * @param string|null $format Icon format. * @return string Icon string. */ function icon(mixed $icon, ?string $format = null): string { if (!$icon || !is_string($icon)) return ''; if ($format === null) $format = cfg('~@output.icons.format') ?: ''; return sprintf($format, $icon); } /** * * Echo icon string, generated with . * @param mixed $icon Icon name. * @param string|null $format Icon format. */ function _icon(mixed $icon, ?string $format = null): void { echo icon($icon, $format); } /** * * Display a JSON string. * @param array $data Data to encode. * @param int $code HTTP Code. * @param bool $pretty Prettify JSON string or not. * @param bool $endingLineFeed Echo a \n after the JSON. * Nicer for terminal display. */ function json(array $data, int $code = 200, bool $pretty = false, bool $endingLineFeed = true, bool $dispatchEvents = true): void { http_response_code($code); header('Content-Type: application/json; charset=utf-8'); if ($dispatchEvents) dispatch('before_first_output'); echo $pretty ? json_encode($data, JSON_PRETTY_PRINT) : json_encode($data); if ($endingLineFeed) echo "\n"; close(); } /** * * Display a JSON string, with a property 'success' set to true. * @param array $data Optional data to encode. * @param int $code HTTP Code. * @param bool $pretty Prettify JSON string or not. */ function json_success(array $data = [], int $code = 200, bool $pretty = false): void { json(array_merge($data, [ 'success' => true ]), code: $code, pretty: $pretty); } /** * * Display a JSON string, with a property 'success' set to false, and * an 'error' code/message. * @param string $error Error added in the output JSON object. * @param array $data Optional data to encode. * @param int $code HTTP Code. * @param bool $pretty Prettify JSON string or not. */ function json_error(string | array $error = 'unknown', array $data = [], int $code = 200, bool $pretty = false): void { if (is_array($error)) { $data = $error; $error = 'unknown'; } json(array_merge($data, [ 'success' => false, 'error' => $error ]), code: $code, pretty: $pretty); } /** * * Display a JSON error "unauthorized" with an optional message. * @param string $message Error message. */ function json_403(string $message = null): void { json_error('unauthorized', $message ? [ 'message' => $message ] : []); } /** * * Display a JSON error "not_found" with an optional message. * @param string $message Error message. */ function json_404(string $message = null): void { json_error('not_found', $message ? [ 'message' => $message ] : []); } /** * * Display a JSON error "internal_error" with an optional message. * @param string $message Error message. */ function json_500(string $message = null): void { json_error('internal_error', $message ? [ 'message' => $message ] : []); } /** * * Redirect the user with a HTTP header 'Location'. * The URL will be processed through with the optional $vars. * @param string $url Location URL. * @param array $vars Optional URL query strings. * @param int $code HTTP code (default 302). */ function redirect(string $url, array $vars = [], int $code = 302): void { if (is_int($vars)) { $code = $vars; $vars = []; } header('Location: ' . url($url, $vars), true, $code); close(); } /** * * System message to show. * @param string|null $html HTML string to display. * @param string $type Message type for pre-styling. Can be one of: * 'info', 'error' or 'success'. * @param string|null $title Title, set in a

before the $html. * @param string|null $text Plain text to display. If $html and $text are * provided, $text will be escaped then append * after $html. * @param string|null $before HTML text to display at the beginning of the * message's code. */ function message( string $html = null, string $type = 'info', string $title = null, string $text = null, string $before = null, ): void { $types = [ 'info' => [ 'color' => '0,123,255', 'title' => "Message", 'icon' => 'ℹ️' ], 'error' => [ 'color' => '220,53,69', 'title' => "Error", 'icon' => '🚨' ], 'success' => [ 'color' => '40,167,69', 'title' => "Success", 'icon' => '✅' ], ]; $reset = '"\'>'; foreach ([ 'option', 'select', 'em', 'strong', 'span', 'a', 'fieldset', 'textarea', 'p', 'div' ] as $tag) { for ($i = 0; $i < 5; $i++) $reset .= ''; } $css = [ 'body' => [ 'display: block !important; opacity: 1 !important;' ], ':not(#bz-e-msg):not(#bz-e-msg *):not(title):not(style):not(script)' => [ 'display: block !important; z-index: 1 !important;' ], '#bz-e-msg' => [ 'position: fixed;', 'overflow: auto;', 'left: 0;', 'right: 0;', 'top: 0;', 'max-height: 100vh;', 'background: #111;', 'font-family: monospace;', 'font-size: 16px;', 'cursor: default;', 'z-index: 99999;', ], '#bz-e-msg ::selection' => [ 'color: white;', 'background: rgb(' . $types[$type]['color'] . ');' ], '#bz-e-msg:before' => [ 'position: fixed;', 'left: 0;', 'right: 0;', 'top: 0;', 'bottom: 0;', 'background: #111;', 'content: "";', 'z-index: 1;', ], '#bz-e-msg > div' => [ 'position: relative;', 'margin: 1.5vw auto;', 'max-width: 1500px;', 'background: #222;', 'border: 5px solid rgba(' . $types[$type]['color'] . ', .8);', 'box-shadow: 5px 5px 0 0 rgba(' . $types[$type]['color'] . ', .5);', 'color: #ddd;', 'z-index: 2;', ], '#bz-e-msg > div > h1' => [ 'display: block;', 'position: relative;', 'margin: 0;', 'padding: 2vw;', 'background: #00000066;', 'border-bottom: 5px solid rgb(' . $types[$type]['color'] . ', .8);', 'color: rgb(' . $types[$type]['color'] . ');', 'line-height: 1; font-size: 150%;', 'font-weight: bold;', ], '#bz-e-msg > div > div' => [ 'overflow: auto;', 'padding: 3vw 1.5vw 3vw 3vw;', 'white-space: pre;' ], '#bz-e-msg > div > div a' => [ 'color: rgb(' . $types[$type]['color'] . ');', 'text-decoration: underline;' ], '#bz-e-msg > div > div a:hover' => [ 'color: white;', 'text-decoration: none;' ], '#bz-e-msg > div > div i' => [ 'background: #ffffff11;', 'font-style: normal;', 'user-select: all;' ], '#bz-e-msg > div > div i > u' => [ 'display: inline-block;', 'width: 0;', 'color: transparent;', 'font-size: 0;' ], '#bz-e-msg > div > div i:hover' => [ 'background: #ffffff22;' ], '#bz-e-msg > div > div > pre' => [ 'margin: 0;', 'padding: 0;', 'white-space: break-spaces;' ], '#bz-e-msg > div > div ul' => [ 'margin: 0;', 'padding: 0;', 'list-style: none;', 'opacity: .5;' ], '#bz-e-msg > div > div ul > li' => [ 'position: relative;', 'margin: 0;', 'padding: 0 0 0 25px;', 'list-style: none;' ], '#bz-e-msg > div > div ul > li:before' => [ 'display: block;', 'position: absolute;', 'left: 0;', 'top: 6px;', 'width: 6px;', 'height: 6px;', 'transform: rotate(45deg);', 'border: 2px solid rgb(' . $types[$type]['color'] . ');', 'border-left: none;', 'border-bottom: none;', 'content: "";', ], '#bz-e-msg > div > div ul.bz-e-msg-err-loc > li' => [ 'display: flex;' ], '#bz-e-msg > div > div ul.bz-e-msg-err-loc > li > strong' => [ 'flex: 0 0 8em;' ], '#bz-e-msg > div > div ul.bz-e-msg-err-loc > li > div' => [ 'flex: 1;' ], '#bz-e-msg > div > div ul.bz-e-msg-backtrace' => [ 'opacity: .5;', 'white-space: nowrap;' ], '#bz-e-msg > div > div > :not(:last-child)' => [ 'margin-bottom: 3vw;' ], ]; $style = []; foreach ($css as $selector => $properties) { $style[] = $selector . ' { ' . implode(' ', $properties) . ' }'; } echo ($before ?: '') . $reset . '' . '' . unicode_bold($types[$type]['title']) . '' . '' . '
' . '
' . (($title = trim($title ?: '')) ? '

' . $title . '

' : '') . '
' . trim($html ?: '') . trim($text ? esc($text) : '') . '
' . '
' . '
'; close(); } /** * * Send headers and readfile, to force download to the client. * @param string $path Path to the file. * @param string $contentType Content Type of the file. * @param string|null $name File name passed as header. If null, the * basename of the path will be used. * @param bool $close Close the app immediatly after reading * file? * @param bool $forceDownload Force download, or allows to render * file inline. * @param string|null $data The raw data, in replacement of the path. */ function output_download( ?string $path = null, ?string $contentType = 'application/octet-stream', ?string $name = null, bool $close = true, bool $forceDownload = true, ?string $data = null, ): void { if ($contentType === null) $contentType = mime_content_type($path); if (!$path && !$data) throw new Microbe_Exception("Unable to output a download without a valid path or a raw data."); if ($path && !is_file($path)) throw new Microbe_Exception("Trying to output a download with an invalid file path."); header('Content-Type: ' . $contentType); header('Content-Transfer-Encoding: Binary'); header('Content-Disposition: ' . ($forceDownload ? 'attachment' : 'inline') . '; filename="' . ($name ?: basename($path)) . '"'); header('Content-Length: ' . ($path ? filesize($path) : strlen($data))); header('Pragma: no-cache'); header('Cache-Control: max-age=0'); if ($path) readfile($path); else echo $data ?: ''; if ($close) close(); } /** * * Echo the content of an image file, with the proper headers. * @param string $path Path to the image file. * @param string|null $contentType Content type. If null, the function will * try to get the proper mime type. */ function output_display_image(string $path, ?string $contentType = null): void { if ($contentType === null) $contentType = mime_content_type($path); header('Content-Type: ' . ($contentType ?: 'application/octet-stream')); readfile($path); close(); } /** * * Exit the current code whithout a 404 error. */ function close(): void { cfg('@core.routes.found', true); exit; } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'assets' => [ 'no_cache' => '%env(dev)', 'preprocessing' => [ 'enabled' => '%env(dev)', 'preprocessors' => [ 'stylus' ], ], ], 'output' => [ 'icons' => [ 'format' => '', ], ], ]; }); listen('register_assets_preprocessor', function(array $data): array { return [ 'name' => 'stylus', 'func' => function(string $assetsDir): bool { if (!is_dir($inputDir = join_path($assetsDir, 'styl'))) { if (!is_dir($inputDir = join_path($assetsDir, 'stylus'))) { return false; } } $bin = null; foreach ([ '/usr/bin/stylus', '/usr/local/bin/stylus' ] as $b) { if (is_file($b)) { $bin = $b; break; } } if ($bin === null) return false; if (!is_dir($outputDir = join_path($assetsDir, 'css'))) mkdir($outputDir, get_mkdir_chmod(), true); $io = popen("{$bin} --compress {$inputDir} --out '{$outputDir}' 2>&1", 'r'); $response = ''; while (!feof($io)) $response .= fgets($io, 4096); pclose($io); if (!preg_match('/(Error): \//', $response)) return true; message( type: 'error', title: "Stylus Error", html: "
An error was returned by Stylus while compiling stylesheets:

" . trim($response) . "
", ); return false; }, ]; }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending OUTPUT #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning ROUTES #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Register a callback function which will be called after trying every route, * without success. * @param Closure $func Function called just before throwing a 404. */ function register_fallback_route(Closure $func, bool $overwrite = false): void { if (!$overwrite && cfg('~@core.routes.fallback')) return; cfg('@core.routes.fallback', $func); } /** * Call the optionnaly registered fallback function. If this function returns * a true, the 404 will not be thrown directly. * @return bool Was a fallback function executed or not? */ function call_fallback_route(): bool { if (cfg('~@core.routes.found')) return false; if (!($func = cfg('~@core.routes.fallback'))) return false; $func(get_request_path(trimmed: true)); cfg('@core.routes.found', true); return true; } /** * * Register a callback function which will be called before any route. * This can be usefull, for example, to setup, from a helper or directly * inside the index.php, a function which will be able to fill the * global template variables. * @param Closure $func Function which will be called before executing a route. */ function register_before_any_route(Closure $func): void { $callbacks = cfg('~@core.routes.before_any') ?: []; $callbacks[] = $func; cfg('@core.routes.before_any', $callbacks); } /** * * Register a global modifier for URLs building. * @param Closure $modifier Closure called on each URL building. The unique * and first parameter is the URL which is currently * processed. The function must returns the URL, * modified or not. */ function register_url_modifier(Closure $modifier): void { $modifiers = get_url_modifiers(); $modifiers[] = $modifier; cfg('@core.routes.urls.modifiers', $modifiers); } /** * Returns the registered URLs modifiers. * @return array Route modifiers functions. */ function get_url_modifiers(): array { return cfg('~@core.routes.urls.modifiers') ?: []; } /** * Apply registered URL modifiers on a given path. * @param string $path Path to process. * @return string Path processed. */ function apply_url_modifiers(string $path): string { foreach (get_url_modifiers() as $modifier) $path = $modifier($path); return $path; } /** * * Register a route filter. When a route will match with the current URL, * the registered filters callbacks will be runned. If one of them * returns false, the route will not be reached and the next one will be tried. * The route filters are cleared automatically at the beginning of each * controller files. * The classic purpose of this behaviour is to apply all the routes of a * controller file only on specific domain name, or only if there is a cookie * registered, or only with some IP addresses. * @param Closure|null $callback Filter callback. A function which will take * one argument: the Microbe class instance, in * which are available GET/POST parameters, * route arguments and the route path * (aka the path given as first argument * of ). */ function register_route_filter(Closure $callback = null): void { $filters = get_route_filters(); $filters[] = $callback; cfg('@core.routes.filters', $filters); } /** * * Shortcut to , to register a route filter which * will check if the current domain name corresponds to the given pattern. * If the pattern seems to be a regex (begins and ends with slashes), a regex * comparisition will be done. Else, a strictly equal comparisition * will be used. * @param string $pattern Domain name or regex to validate the current domain. */ function register_domain_route_filter(string $pattern): void { if (($len = strlen($pattern)) < 2) return; if ($pattern[0] !== '/' || $pattern[$len - 1] !== '/') { $pattern = '/^' . preg_quote($pattern, '/') . '$/i'; } register_route_filter(function() use ($pattern): bool { return (bool) preg_match($pattern, get_domain_name()); }); } /** * * Clear the registered route filters. This function is always called * immediately before requiring a controller file. */ function clear_route_filters(): void { cfg('@core.routes.filters', null); } /** * Returns the registered route filters. * @return array Route filters. */ function get_route_filters(): array { return cfg('~@core.routes.filters') ?: []; } /** * * Set route arguments, prepended to route functions. * @param array $args Array of objects with 'name' and 'func' properties. */ function set_route_args(array $args): void { cfg('@core.route.args', $args); } /** * * Returns predefined route arguments. * @return array Array of arguments objects. */ function get_route_args(): array { return cfg('~@core.route.args') ?: []; } /** * * Add a route argument. A route argument is defined by its name (for further * deletion purpose), and its callback function. The function should return * the value which will be given as the route's function argument. * @param string $name Name of predefined argument. * @param Closure $callback Function executed to get the proper value. */ function add_route_arg(string $name, Closure $callback): void { $args = get_route_args(); $args[] = (object) [ 'name' => $name, 'func' => $callback ]; set_route_args($args); } /** * * Delete a specific route argument. * @param string $name Name of the argument */ function delete_route_arg(string $name): void { set_route_args(array_values(array_filter(get_route_args(), function(object $arg) use ($name): bool { return $arg->name !== $name; }))); } /** * Compute predefined route args. * @param string|null $url Optional current URL, passed to args functions. * @param array $urlArgs Optional array containing URL arguments. * @return array Array of named predefined route args. */ function compute_route_args(?string $url = null, array $urlArgs = []): array { $args = []; foreach (get_route_args() as $arg) { $args[$arg->name] = call_user_func($arg->func, $url, $urlArgs); } return $args; } /** * * Add a route rule. * The first argument is the path who have to match. * The second argument is the callback which will be executed if the URL match. * Before executing a route, the route filters registered with * will be executed. * If the $path is an array of paths, the separated routes will be declared * for each item of the array. * The path parts between chevrons will be considered as jokers, and returned * in the Microbe instance. * Note the behaviour of the parts between chevrons: * - '/foo/' will match '/foo/abc' or '/foo/123', but not '/foo/abc/123'; * - '/foo//bar' will match '/foo/abc/bar' or '/foo/abc/123' * but not '/foo/abc/def/bar'; * - '/foo/<*var>' will match '/foo/abc', 'foo/abc/def', * 'foo/bar/abc/def/123', etc. * - '/foo/' will match '/foo/bar' only, and set the route argument * 'var' to 'bar'. It's useful when using a paths array, to differenciate * the different paths. * @param string|array $path Path of the URL which should match. * @param Closure $callback Function to call when the route match. * This function will accept a Microbe instance * as unique parameter. */ function route(string | array $path, Closure $callback): void { cfg('@core.initialized', true); if (is_array($path)) { foreach ($path as $p) route($p, $callback); return; } $path = apply_url_modifiers($path); $routePath = $path; $r = (object) [ 'open' => '___o_O_@', 'close' => '@_O_o___', 'jokerClose' => '@@_j_O_o___', 'substringSeparator' => '___O_o_s_o_O___', 'substringClose' => '@_s_O_o___', ]; if (preg_match_all('/<(?\*?)(?[a-z_]([a-z0-9_-]*[a-z0-9_%]+)?)(\:(?[^>]+))?>/i', $path, $matches, PREG_SET_ORDER)) { foreach ($matches as $m) { $name = $m['name']; if (array_key_exists('substr', $m) && $m['substr']) { $replacement = $r->open . $name . $r->substringSeparator . $m['substr'] . $r->substringClose; } else { $replacement = $r->open . $name . ($m['joker'] === '*' ? $r->jokerClose : $r->close); } $path = str_replace($m[0], $replacement, $path); } } $path = str_replace('/', '\\/', preg_quote($path)); $path = str_replace($r->open, '(?<', $path); $path = str_replace($r->close, '>[^\\/]+)', $path); $path = str_replace($r->jokerClose, '>.+)', $path); $path = str_replace($r->substringSeparator, '>', $path); $path = str_replace($r->substringClose, ')', $path); $path = '/^' . $path . '(?<_tailing_slash>\\/?)$/'; $url = get_relative_url(false); if (!preg_match($path, $url, $matches)) return; if ($url !== '/' && $matches['_tailing_slash'] === '/') { // We got a tailing slash and we prefer without redirect(preg_replace('/^(.*)\/(\?.*)?$/', '$1$2', get_relative_url())); } foreach ($matches as $k => $v) { if (is_numeric($k) || $k === '_tailing_slash') unset($matches[$k]); } $matches = array_map('urldecode', $matches); foreach (get_route_filters() as $filter) { if (!$filter($url, $matches)) return; } $namedArgs = $matches; $indexedArgs = array_values($namedArgs); $predefinedArgs = compute_route_args($url, $namedArgs); $combinedArgs = $predefinedArgs + $namedArgs; cfg('@core.routes.found', true); foreach (cfg('~@core.routes.before_any') ?: [] as $func) { call_user_func_array($func, (object) [ 'args' => $combinedArgs ]); } call_user_func_array($callback, array_values($combinedArgs)); close(); } /** * * Generate a URL. * The $args argument can be skipped and replaced by the $host argument. * Some special paths which can be given as first argument: * - '.': current path, with query strings; * - './': current path, without query strings; * - ':back': HTTP_REFERER if available, or $fallback, or '/'; * @param string $path Path of the URL. * @param array $args Query String arguments. * @param bool|boolean $host Prepend the protocol and the hostname or not. * @param string|null $fallback Back-url fallback. Used with special * path ':back'. * @return string Computed URL. */ function url(string $path = '/', array | bool $args = [], bool $host = false, string $fallback = null): string { if ($path === '.') { // Current path $path = get_relative_url(); } else if (preg_match('/^\.\/(?#.*)?$/', $path, $m)) { // Current path without query strings $path = preg_replace('/^([^\?]+)\?.*$/', '$1', get_relative_url()) . (array_key_exists('h', $m) ? $m['h'] ?: '' : ''); } else if (str_starts_with($path, '@')) { // Action URL $hash = null; if (str_contains($path, '#')) { list($path, $hash) = explode('#', $path); $hash = trim($hash) ?: null; } $args['do'] = ltrim($path, '@'); $path = '/' . ($hash ? '#' . $hash : ''); } else if (str_starts_with($path, '?')) { // Use optional 'after' query-string as URL if provided if ($after = get('after')) { $path = $after; $args = []; $host = false; } else { $path = ltrim($path, '?'); } } else if ($path === ':back') { // Referer if (array_key_exists('HTTP_REFERER', $_SERVER)) { $path = $_SERVER['HTTP_REFERER']; } else { if (gettype($args) === 'string') $path = $args; else if (gettype($host) === 'string') $path = $host; else if ($fallback) $path = $fallback; else $path = '/'; } } $path = apply_url_modifiers($path); if ($args === true || $args === false) { $host = $args; $args = []; } $qs = []; $hash = null; if (str_contains($path, '#')) { list($path, $hash) = explode('#', $path); $hash = trim($hash) ?: null; } if (str_contains($path, '?')) { list($path, $query) = explode('?', $path); parse_str($query, $qs); } $qsp = (object) [ 'before' => '___v_V_', 'after' => '_V_v___', 'vars' => [], ]; $qs = array_map(function(mixed $v) use (&$qsp): mixed { if (is_array($v) || !preg_match('/^\{(.+)\}$/U', (string) $v, $n)) return $v; $qsp->vars[$idx = count($qsp->vars)] = $n[1]; $v = $qsp->before . $idx . $qsp->after; return $v; }, array_filter(array_merge($qs, $args), fn(mixed $v): bool => $v !== null)); $qsSuffix = $qs ? '?' . http_build_query($qs) : ''; $qsSuffix = str_replace($qsp->before, '{', $qsSuffix); $qsSuffix = str_replace($qsp->after, '}', $qsSuffix); foreach ($qsp->vars as $k => $v) $qsSuffix = str_replace('{' . $k . '}', '{' . $v . '}', $qsSuffix); $hashSuffix = $hash ? '#' . $hash : ''; if (strpos($path, '://')) { return $path . $qsSuffix . $hashSuffix; } return ($host ? get_http_scheme() . get_domain_name() : '') . get_base_url() . '/' . ltrim($path, '/') . $qsSuffix . $hashSuffix; } /** * * Generate a URL using , then echo it. * @param string $path Path of the URL. * @param array $args Query String arguments. * @param bool|boolean $host Prepend the protocol and the hostname or not. * @param string|null $fallback Back-url fallback. Used with special * path ':back'. * @return string Computed URL. */ function _url(string $path = '/', array | bool $args = [], bool $host = false, string $fallback = null): string { echo $url = url(path: $path, args: $args, host: $host, fallback: $fallback); return $url; } /** * * Generate a URL using , then echo it, escaped. * @param string $path Path of the URL. * @param array $args Query String arguments. * @param bool|boolean $host Prepend the protocol and the hostname or not. * @param string|null $fallback Back-url fallback. Used with special * path ':back'. * @return string Computed URL. */ function __url(string $path = '/', array | bool $args = [], bool $host = false, string $fallback = null): string { echo $url = esc(url(path: $path, args: $args, host: $host, fallback: $fallback)); return $url; } /** * * Tries to check if the given URL is NOT pointing to the current site. * @param string $url URL to checj. * @return bool Is external or not? */ function is_external_url(string $url): bool { if (!str_contains($url, '://')) return false; if (str_starts_with($url, '://')) return false; if (str_contains($url . '/', '://' . get_domain_name() . '/')) return false; return true; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending ROUTES #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning SECURITY #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Constants }------------------------------------------------------------- define('MB_SECURITY_LEVEL_SUCCESS', 'success'); define('MB_SECURITY_LEVEL_INFO', 'info'); define('MB_SECURITY_LEVEL_DANGER', 'danger'); define('MB_SECURITY_LEVEL_CRITICAL', 'critical'); // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Shortcut to the 'hash' sha256 function call. * @param string $str String to hash. * @return string SHA-256 hashed string. */ function sha256(string $str): string { return hash('sha256', $str); } /** * * Hash some string with specified algorithm, but replace 'cd' with 'xd', * to avoid issues when using part of the hashed string as a path folder * (e.g. abcdef.jpg -> ab/cd/abcdef.jpg). * @param string $algo Algorithm. * @param string $str String to hash. * @return string Hashed and "protected" string. */ function hashed(string $algo, string $str): string { return str_replace('cd', 'xd', hash($algo, $str)); } /** * * Execute with algorithm SHA-256. * @param string $str String to hash. * @return string Hashed and "protected" string. */ function hashed_sha256(string $str): string { return hashed('sha256', $str); } /** * * Execute with algorithm SHA-1. * @param string $str String to hash. * @return string Hashed and "protected" string. */ function hashed_sha1(string $str): string { return hashed('sha1', $str); } /** * * Generate a unique hexadecimal UID string of 64 character maximum. * @param integer $len Length of the UID (maximum: 64 character). * @param bool $password Use the function instead of a * SHA-256 hash. Note: the returned string will be * [a-z0-9] instead of [a-f0-9]. * @return string Generated UID. */ function uid(int $len = 64, bool $password = false): string { if ($password) { return password( len: $len, useSpecials: false, changeCase: false, useLetters: true, useNumbers: true, ); } $uid = sha256(uniqid('', true) . mt_rand()); $uid = str_replace('c', 'abdef'[mt_rand(0, 4)], $uid); return substr($uid, 0, $len); } /** * * Check if some value is formatted as a UID. * @param mixed $value Value to verify. * @param int|array $len Expected length (or array of lengths). * @return boolean Does $value seems to be a valid UID or not? */ function is_uid(mixed $value, int | array $len = 64): bool { if (!is_string($value)) return false; if (!preg_match('/^[a-f0-9]+$/', $value)) return false; return in_array(strlen($value), is_array($len) ? $len : [ $len ]); } /** * * Returns special characters list as a string. * @return string */ function get_special_chars(): string { return '$*#@_-+=%?'; } /** * * Returns random special character. * @return string */ function get_random_special_char(): string { $ch = get_special_chars(); return $ch[mt_rand(0, strlen($ch) - 1)]; } /** * * Generate a pseudo-random password. * @param integer $len Length of the password. * @param bool $useSpecials Insert or not one special character. * @param bool $changeCase Use lowercase and uppercase letters. * @return string Generated password. */ function password(int $len = 16, bool $useSpecials = true, bool $changeCase = true, bool $useLetters = true, bool $useNumbers = true): string { if ($len < 3) $useSpecials = false; $len -= $useSpecials ? 1 : 0; // Removed a few numbers and letters for lisibility, // and "c" (because "cd" is sometimes problematic). $letters = 'abdefghjkmnpqrstuvwxyz'; $numbers = '23456789'; $alphabet = ''; if ($useLetters) $alphabet .= $letters; if ($useNumbers) $alphabet .= $numbers; $specials = get_special_chars(); $specialChar = $specials[mt_rand(0, strlen($specials) - 1)]; $specialLoc = mt_rand(0, $len - 3) + 1; $pw = ''; $alphabetLength = strlen($alphabet); for ($i = 0; $i < $len; $i++) { if ($useSpecials && $specialLoc === $i) $pw .= $specialChar; $char = $alphabet[mt_rand(0, $alphabetLength - 1)]; if ($changeCase && mt_rand(0, 2) === 1) $char = strtoupper($char); $pw .= $char; } return $pw; } /** * * Generate a numeric password with the request length. * Basically, it just runs the function will only numbers in use. * @param integer $len Password length. * @return string Generated password as a string. */ function numeric_password(int $len = 8): string { return password( len: $len, useSpecials: false, changeCase: false, useLetters: false, useNumbers: true, ); } /** * * Create a syllabic password including numbers and special chars. * @param integer $len Length of the password. Should be odd. If not, * it will be forced up. * @return string Created password. */ function readable_password(int $len = 13): string { if ($len % 2 === 0) $len++; $pwd = ''; for ($i = 0; $i < ($len / 2) - 2; $i++) $pwd .= ucfirst(create_word(2, 2, excludeConfusing: true)); $pwd .= get_random_special_char(); $pwd .= mt_rand(10, 99); return $pwd; } /** * * Generate standard conditions for password security. * The conditions are configurable through some @app.secure.passwords... * configuration entries. * @return object The conditions */ function get_password_conditions(): object { $defaults = [ 'length' => [ 'mandatory' => true, 'min' => cfg('~@app.secure.passwords.min_length') ?: 8, 'explaination' => "be {min} characters minimum;", 'error' => "Too short" ], 'lowercase' => [ 'allowed' => true, 'mandatory' => true, 'alphabet' => 'abcdefghijklmnopqrstuvwxyz', 'explaination' => "contains lowercase letters;", 'error' => "Must contains some lowercase letters" ], 'uppercase' => [ 'allowed' => true, 'mandatory' => true, 'alphabet' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'explaination' => "contains UPPERCASE letters;", 'error' => "Must contains some UPPERCASE letters" ], 'numbers' => [ 'allowed' => true, 'mandatory' => true, 'alphabet' => '0123456789', 'explaination' => "contains some numbers;", 'error' => "Must contains some numbers" ], 'symbols' => [ 'allowed' => true, 'mandatory' => true, 'alphabet' => ' !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~', 'explaination' => "contains some special characters: \"{alphabet}\".", 'error' => "Must contains some special characters" ], ]; foreach ($defaults as $k => $o) { foreach ([ 'allowed', 'mandatory', 'alphabet' ] as $prop) { if (!array_key_exists($prop, $o)) continue; if (($v = cfg('~@app.secure.passwords.' . $k . '.' . $prop)) === null) continue; } if (array_key_exists('explaination', $o)) $o['explaination'] = t($o['explaination'], $o); $o['error'] = t($o['error'], $o); $defaults[$k] = (object) $o; } return (object) $defaults; } /** * * Check if a given password validate the conditions returned by * . * @param string $password Password * @param string|null &$reason A readable and translatable string * representing the reason for which the * password is not valid. * @return boolean Is the password valid or not. The reason is * optionaly passed by reference to the second * parameter $reason. */ function is_secure_password(string $password, ?string &$reason = null): bool { foreach (get_password_conditions() as $condName => $cond) { if ($condName === 'length') { if (strlen($password) < $cond->min) { $reason = $cond->error; return false; } continue; } $has = (bool) preg_match('/[' . preg_quote($cond->alphabet, '/') . ']/', $password); if ((!$cond->allowed && $has) || ($cond->mandatory && !$has)) { $reason = $cond->error; return false; } } return true; } /** * * Shortify a UID to a specified length. * @param string|Microbe_Entity|stdClass $uid Full UID, or a Microbe_Entity, * or a stdClass containing a uid * property. * @param integer $len Length to shortify to. * @return string Shortified UID. */ function short_uid(string | Microbe_Entity | stdClass $uid, int $len = 9): string { if ($uid instanceof Microbe_Entity) $uid = $uid->getUid(); else if (($uid instanceof stdClass) && property_exists($uid, 'uid')) $uid = $uid->uid; return substr($uid, 0, $len); } /** * * Hash a password, using the configuration settings in the section @security. * @param string $password Password to hash. * @return string Hashed password. */ function hash_password(string $password): string { if (!($salt = cfg('~@security.salt'))) { throw new Microbe_Exception("Trying to hash a password without a salt defined in the configuration."); } $algo = cfg('~@security.passwords.hash.algorithm') ?: 'sha256'; $str = cfg('~@security.passwords.hash.format') ?: '{salt}:{password}'; $str = replace([ '{salt}' => $salt, '{password}' => $password, ], $str); return hash($algo, $str); } /** * * Hash a password, then check if this value corresponds to an * entry 'password' of an array, an object or directly to the given string. * @param object|array|string $obj Object or array containing a * key 'password', or a hashed * password string. * @param string $password Password to hash and compare. * @return boolean Does the password corresponds? */ function is_valid_password(object | array | string $obj, string $password): bool { if (is_object($obj)) { if (!property_exists($obj, 'password')) { throw new Microbe_Exception("The 'password' property doesn't exists in the given object"); } $obj = $obj->password; } else if (is_array($obj)) { if (!array_key_exists('password', $obj)) { throw new Microbe_Exception("The 'password' key doesn't exists in the given array"); } $obj = $obj['password']; } else if (!is_string($obj)) { throw new Microbe_Exception("Unable to handle the given object for password comparision"); } return hash_password($password) === $obj; } /** * * Compute password strength score. * @param string $password Password to check. * @param int $minLength Minimum length (default 6). * @param int $excellentLength Excellent length (default 20). * @return float Score as a float between 0 (very bad) and * 1 (very good). */ function compute_password_score(string $password, int $minLength = 6, int $excellentLength = 20): float { if (!$password) return 0; $len = strlen($password); $has = [ 'lower' => (bool) preg_match('/[a-z]/', $password), 'upper' => (bool) preg_match('/[A-Z]/', $password), 'digit' => (bool) preg_match('/\d/', $password), 'special' => (bool) preg_match('/[^A-Za-z0-9]/', $password), ]; $nbTypes = count($has); $nbTypesUsed = count(array_filter(array_values($has))); $lengthScore = 0; if ($len < $minLength) return 0; $lengthScore = $len >= $excellentLength ? 1 : (($len - $minLength) / ($excellentLength - $minLength)); $typeScore = $nbTypesUsed / $nbTypes; $finalScore = (0.7 * $lengthScore) + (0.3 * $typeScore); $bonus = ($len >= ($excellentLength * 1.2) && $nbTypesUsed === $nbTypes) ? 0.05 : 0; return max(0, min(1, $finalScore + $bonus)); } /** * * Performs a global security check and returns an array containing the result * of each item of control. * @return array Items of control with their success or error message and * risk level. */ function security_check(): array { $performExternalAccess = function(string $url, string $label, ?string $regex = null, string $maxLevel = MB_SECURITY_LEVEL_CRITICAL): Closure { return function() use ($url, $label, $regex, $maxLevel): array { $raw = curl_get(url($url, host: true)) ?: ''; if (curl_last_info('http_code') === 200) { if (preg_match($regex, $raw)) return [ $maxLevel, "The {$label} is readable from outside." ]; return [ MB_SECURITY_LEVEL_DANGER, "The {$label} seems to be readable (HTTP code 200 returned)." ]; } else return [ MB_SECURITY_LEVEL_SUCCESS, "The {$label} seems to be protected." ]; }; }; $items = []; $items[] = [ 'name' => 'config', 'perform' => $performExternalAccess(url: '/config.json', label: "configuration file", regex: '/\{.*"app"\s*:/ms') ]; foreach (array_merge([ 'user'], get_valid_env()) as $env) { if (!is_file(get_path('/config-' . $env . '.json'))) continue; $items[] = [ 'name' => 'config-' . $env, 'perform' => $performExternalAccess(url: '/config-' . $env . '.json', label: "configuration file", regex: '/\{/ms') ]; } $items[] = [ 'name' => 'env', 'perform' => $performExternalAccess(url: '/ENV', label: "environment file", regex: '/(' . implode('|', get_valid_env()) . ')/', maxLevel: MB_SECURITY_LEVEL_DANGER) ]; $results = []; foreach ($items as $item) { list($level, $msg) = $item['perform'](); $results[] = (object) [ 'name' => $item['name'], 'level' => $level, 'details' => $msg, ]; } return $results; } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('register_cfg_snippets', function(): array { return [ 'security' => [ 'salt' => password(32), 'passwords' => [ 'hash' => [ 'algorithm' => 'sha256', 'format' => '{salt}:{password}', ], ], ], ]; }); listen('init', function(): void { register_cli_action( bundle: 'core', name: 'hash_password', description: "Hash Given Password Using Microbe's Core Hashing Function", opts: [], func: function(object $opts): void { if (!($pwd = cli_prompt("Password: "))) { cli_error("No password: Aborting."); return; } cli_write("Hashed Password: " . hash_password($pwd)); }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending SECURITY #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning SESSION #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Constants }------------------------------------------------------------- def([ 'MB_FLASH_MSG_INFO' => 0x01, 'MB_FLASH_MSG_SUCCESS' => 0x02, 'MB_FLASH_MSG_WARNING' => 0x03, 'MB_FLASH_MSG_ERROR' => 0x04, ]); def('MB_FLASH_MSG_DEFAULT', MB_FLASH_MSG_INFO); // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * Start the session if it was not already done. * @return boolean True if the session was correctly started. Else, false. */ function session_setup() { if (cfg('~@session.enabled') === false) return false; if (cfg('~' . ($k = '@core.session.started'))) return true; cfg($k, true); if (session_status() !== PHP_SESSION_NONE) return true; session_name('MBSID'); if (!($dir = cfg('~@sessions.path'))) $dir = defined('MB_SESSION_DIR') ? MB_SESSION_DIR : get_sessions_dir(); if (!is_dir($dir)) mkdir($dir, get_mkdir_chmod(), true); if (fileowner($dir) === posix_geteuid()) session_save_path($dir); session_start(); return true; } /** * * Get a value from the global $_SESSION array. * @param string $name Name of the session var. * @return mixed The value if exists, null else. */ function get_session_var(string $name): mixed { if (!session_setup()) return null; return $_SESSION[$name] ?? null; } /** * * Set some value for a specific session variable (aka global $_SESSION array). * @param string $name Name of the variable. * @param mixed|null $value Value to set. */ function set_session_var(string $name, mixed $value = null): void { if (!session_setup() || !isset($_SESSION)) return; $_SESSION[$name] = $value; } /** * * Delete a session variable (aka an entry of the global $_SESSION array). * @param string $name Name of the variable. */ function delete_session_var(string $name): void { if (!session_setup()) return; if (array_key_exists($name, $_SESSION ?? [])) unset($_SESSION[$name]); } /** * Returns all the session flash variables. * @return array Key/Value array containing the flash variables. */ function get_flash_vars(): array { return get_session_var('_flash') ?: []; } /** * * Define some flash variables. * @param array|null $vars Array representing the flash variables. * @param boolean $replace Replace all the flash variables. * If false (default), the given $vars will be * merged into the current variables. */ function set_flash_vars(array $vars = null, bool $replace = false): void { if ($replace === false) { foreach ($vars as $k => $v) set_flash_var($k, $v); return; } if (!is_array($vars) || empty($vars)) { delete_session_var('_flash'); return; } set_session_var('_flash', $vars); } /** * * Define a flash variable. This value, represented by a name, will be stored * in the session until a standard call to . * @param string $name Name of the flash variable. * @param mixed|null $value Value of the variable. */ function set_flash_var(string $name, mixed $value = null): void { $all = get_flash_vars(); $all[$name] = $value; set_flash_vars($all, true); } /** * * Delete a flash variable. * @param string $name Name of the flash variable. */ function delete_flash_var(string $name): void { $all = get_flash_vars(); if (array_key_exists($name, $all)) unset($all[$name]); set_flash_vars($all, true); } /** * * Get a flash variable. If the second parameter stays at true, the variable * will be deleted. The standard use case of a flash variable should be to * be set on a request, then get and cleaned on the next request * (e.g. form data/errors, global error message, etc.). * @param string $name Name of the flash variable. * @param boolean $delete Get the value, then delete the variable before * the return. Default is true. * @return mixed Value of the flash variable, or null if undefined. */ function get_flash_var(string $name, bool $delete = true): mixed { $value = get_flash_vars()[$name] ?? null; if ($delete) delete_flash_var($name); return $value; } /** * * Push a flash message. Basically, it will get, push then * set a flash variable. If the value is empty or null, the message will be * @param string $msg Value to push. * @param string $name Name of the messages context. * @param integer $type Type of the message. * Should be one of the MB_FLASH_MSG_* constants. */ function push_flash_message(string $msg = null, string $name = '*', int $type = MB_FLASH_MSG_DEFAULT): void { $name = '_messages.' . $name; if (!$msg) return; if (!($items = get_flash_var($name, false))) $items = []; else if (!is_array($items)) $items = []; $items[] = [ 'type' => $type, 'message' => $msg, ]; set_flash_var($name, $items); } /** * * Returns the flash messages of the given context name. * The result will be an array containing zero or more objects with two * properties: the type (corresponding to one of the MB_FLASH_MSG_* constants) * and the message as a string. * If the second parameter is left as true, the flash messages will be * deleted after the getting. * @param string $name Name of the messages context. * @param boolean $delete Get the value, then delete the messages before * the return. Default is true. * @return array Array containing the flash messages as objects. */ function get_flash_messages(string $name, bool $delete = true): array { $name = '_messages.' . $name; $messages = get_flash_var($name, $delete); if (!$messages || !is_array($messages)) return []; return array_values(array_filter(array_map(function(mixed $m): ?object { if (!$m || !is_array($m)) return null; $m = (object) array_merge([ 'type' => null, 'type_str' => null, 'message' => null, ], $m); if (!$m->message || !is_string($m->message)) return null; if (!$m->type) $m->type = MB_FLASH_MSG_DEFAULT; $m->type_str = match ($m->type) { MB_FLASH_MSG_INFO => 'info', MB_FLASH_MSG_SUCCESS => 'success', MB_FLASH_MSG_WARNING => 'warning', MB_FLASH_MSG_ERROR => 'error', default => null, }; return $m; }, $messages))); } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('before_first_render', function(): void { set_template_vars([ 'global_flash_messages' => get_flash_messages('*'), ]); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending SESSION #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning SETUP #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * Setup the framework's environment, with specific scope(s). * @param string|array $scopes Setup scope(s): web, or config, tree, samples. */ function setup(string | array $scopes): void { if (!is_array($scopes)) $scopes = [ $scopes ]; if (in_array('web', $scopes) || in_array('config', $scopes)) setup_config(); if (in_array('web', $scopes) || in_array('tree', $scopes)) setup_tree(); if (in_array('web', $scopes) || in_array('samples', $scopes)) setup_samples(); } /** * Setup configuration. */ function setup_config(): void { file_put_contents(get_path('config.json'), get_setup_cfg_json()); } /** * Setup tree. */ function setup_tree(): void { foreach (__get_samples_dirs() as $d) { $ad = get_path($d); if (!is_dir($ad)) mkdir($ad, get_mkdir_chmod(), true); } } /** * Setup samples. */ function setup_samples(): void { foreach (__get_samples_files() as $f => $encoded) { $af = get_path($f); if (!is_dir($ad = dirname($af))) mkdir($ad, get_mkdir_chmod(), true); file_put_contents($af, base64_decode($encoded)); } } /** * Fire the event 'register_cfg_snippets' and merge all the results to create * the sample configuration file based on those returned arrays, then returns * this merging as a JSON string. * @return string JSON string representing the sample configuration file. */ function get_setup_cfg_json(): string { $cfg = [ 'app' => [ 'name' => ucwords(create_sentence(2, 4, 3, 9, false)), 'version' => '1.0.0', ], ]; $results = dispatch('register_cfg_snippets'); foreach ($results as $r) $cfg = array_merge($cfg, $r); return json_encode($cfg, JSON_PRETTY_PRINT); } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('init', function(): void { $setupScopes = [ 'web', 'config', 'tree', 'samples' ]; register_cli_action( bundle: 'core', name: 'setup', description: "Setup Microbe's environement (additional arguments: " . implode(', ', $setupScopes) . ").", opts: [], func: function(object $opts, ?string $scope = null) use ($setupScopes): void { if (!in_array($scope, $setupScopes)) cli_error("Invalid setup scope."); setup($scope); }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending SETUP #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning SITEMAP #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Register Sitemap Source. * @param string $name String to encode. * @param Closure $func Function which will be executed to generate the * sitemap. This function should returns an array of * associative arrays containing keys: * - loc (mandatory); * - lastmod; * - changefreq; * - priority. * @param int $priority Priority: lower is the value, higher is the * priority and sooner the links will appear * in the sitemap. */ function register_sitemap_source( string $name, Closure $func, int $priority = 50, ): void { register_thing('sitemap_sources', (object) [ 'name' => $name, 'func' => $func, 'priority' => $priority, ]); } /** * * Returns registered Sitemap Sources. * @return array Sitemap Sources. */ function get_registered_sitemap_sources(): array { $sources = get_registered_things('sitemap_sources'); usort($sources, function(object $a, object $b): int { if ($a->priority < $b->priority) return -1; if ($a->priority > $b->priority) return 1; $aa = strtolower($a->name); $bb = strtolower($b->name); if ($aa < $bb) return -1; if ($aa > $bb) return 1; return 0; }); return $sources; } /** * * Returns registered Sitemap Source. * @param string $sourceName Source name. * @return ?object Sitemap Source. */ function get_registered_sitemap_source(string $sourceName): ?object { foreach (get_registered_things('sitemap_sources') as $source) if ($source->name === $sourceName) return $source; return null; } /** * * Execute Sitemap Sources functions to fetch all links. * @param string | null $sourceName Source name. If null, all sources are * in use. * @return array Sitemap Links. */ function fetch_sitemap_links(?string $sourceName = null): array { $links = []; foreach (get_registered_sitemap_sources() as $src) { if ($sourceName !== null && $sourceName !== $src->name) continue; $links = array_merge($links, array_values(array_filter(array_map(function(array $link): ?array { if (!$link['loc']) return null; $link['loc'] = str_contains($link['loc'], '://') ? $link['loc'] : url($link['loc'], host: true); if (!array_key_exists('lastmod', $link) || !$link['lastmod']) $link['lastmod'] = new DateTime(); if (is_string($link['lastmod'])) $link['lastmod'] = new DateTime($link['lastmod']); return $link; }, call_user_func($src->func))))); } return $links; } /** * * Generate Sitemap based on registered Sitemap Sources. * @param string $path XML Sitemap output path. * @return string | null XML string if path is false. Else, null. */ function generate_sitemap(string | null | false $path = null, ?string $sourceName = null): ?string { $source = null; if ($sourceName && !($source = get_registered_sitemap_source($sourceName))) throw new Microbe_Exception("Invalid Sitemap Source Name: {$sourceName}"); if ($path === null) $path = $source ? 'sitemap-' . preg_replace('/[^\p{L}\p{N}]+/u', '_', $source->name) . '.xml' : 'sitemap.xml'; if ($path) $path = get_path($path); $dom = new DOMDocument('1.0', 'UTF-8'); $dom->formatOutput = true; $urlset = $dom->createElement('urlset'); $urlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); $urlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); $urlset->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $urlset->setAttribute('xmlns:image', 'http://www.google.com/schemas/sitemap-image/1.1'); $urlset->setAttribute('xsi:schemaLocation', 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd'); $dom->appendChild($urlset); foreach (fetch_sitemap_links($sourceName) as $link) { $link = (object) array_merge([ 'loc' => null, 'lastmod' => null, 'changefreq' => null, 'priority' => null, ], $link); if (!$link->loc) continue; $url = $dom->createElement('url'); $url->appendChild($dom->createElement('loc', $link->loc)); $url->appendChild($dom->createElement('lastmod', $link->lastmod->format('Y-m-d\TH:i:sP'))); if ($link->changefreq) $url->appendChild($dom->createElement('changefreq', $link->changefreq)); if ($link->priority) $url->appendChild($dom->createElement('priority', $link->priority)); $urlset->appendChild($url); } if (!$path) return $dom->saveXML(); $dom->save($path); return null; } /** * * Check all existing sitemaps. * @param bool $stats Include number of links. * @param string $format Regular expression used to match expected files. * @param string $dir Directory (based on project root) where the files * are expected. * @return array An array of sitemaps Microbe_File entities. * If $stats is true, objects with corresponding * Microbe_File instance and number of links will be * returned. */ function get_existing_sitemaps( bool $stats = true, string $format = '/^sitemap(-(?.+))?\.xml$/i', string $dir = '/', ): array { $dir = ($dir = trim($dir, '/')) ? get_path($dir) : get_root_dir(); $sitemaps = []; foreach (get_files($dir) as $f) { if (!preg_match($format, $f->getName(), $m)) continue; if (!$stats) { $sitemaps[] = $f; continue; } $doc = new DOMDocument(); $doc->load($f->getPath()); $sitemaps[] = (object) [ 'file' => $f, 'links' => count($doc->getElementsByTagName('url')) ]; unset($doc); } usort($sitemaps, function(Microbe_File | stdClass $a, Microbe_File | stdClass $b): int { $aa = strtolower($a instanceof Microbe_File ? $a->getName() : $a->file->getName()); $bb = strtolower($b instanceof Microbe_File ? $b->getName() : $b->file->getName()); if (!str_contains($aa, '-') && str_contains($bb, '-')) return -1; if (str_contains($aa, '-') && !str_contains($bb, '-')) return 1; if ($aa < $bb) return -1; if ($aa > $bb) return 1; return 0; }); return $sitemaps; } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('init', function(): void { register_task( bundle: 'core', name: 'sitemap_generate', args: [ 'src' => [ 'desc' => "Source Name", 'optional' => true ] ], func: function(string $ctx, object $args): void { generate_sitemap(sourceName: $args->src ?? null); json_success(); }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending SITEMAP #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning STRINGS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Encode HTML entities in a string. * @param mixed $s String to encode. * @return string Encoded string. */ function esc(mixed $s): string { if (!is_scalar($s)) return ''; if ($s === 0) $s = '0'; else $s = (string) $s; return htmlentities((string) $s, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8'); } /** * * Echo the encoded HTML using . * @param mixed $s String to escape. */ function _esc(mixed $s): void { echo esc($s); } /** * * Decode HTML entities from a string. * @param mixed $s String to decode. * @return string Decoded string. */ function unesc(mixed $s): string { if (!is_scalar($s)) return ''; if ($s !== 0 && !($s = (string) $s)) return ''; return trim(html_entity_decode((string) ($s ?: ''), ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8')); } /** * * Echo the decoded HTML using . * @param mixed $s String to decode. */ function _unesc(mixed $s): void { echo unesc($s); } /** * * Remove block tags from HTML string. * @param string $str String to clean. * @return string String cleaned. */ function strip_blocks(string $str): string { $tags = [ 'address', 'article', 'aside', 'blockquote', 'canvas', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'dd', 'div', 'dl', 'dt', 'header', 'hr', 'main', 'nav', 'noscript', 'ol', 'ul', 'li', 'p', 'pre', 'section', 'video', 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', ]; foreach ($tags as $tag) $str = preg_replace('/<\/' . $tag . '>\s*<' . $tag . '>/imsU', '
', $str); foreach ($tags as $tag) { $str = preg_replace('/<' . $tag . '(\s[^>]*)?>/i', '', $str); $str = preg_replace('/<\/' . $tag . '>/i', '', $str); } $str = preg_replace('//i', '
', $str); while(preg_match($re = '/
\s*
/i', $str)) $str = preg_replace($re, '
', $str); return $str; } /** * * Check if the string contains only simple characters, excluding special * quotes, emojis, etc. * - Unicode letters with accents; * - Numbers; * - Everything else should be simple ASCII. * @param mixed $str Probably a string. * @return bool Is string safe or not. */ function is_str_safe(mixed $str): bool { if (!is_string($str)) return false; return (bool) preg_match('/^[\p{L}\p{N}\x20-\x7E]*$/u', $str); } /** * * Returns given string after replacement of key-value $params. * @param string $str String to process. * @param array $params Key-Value array of params to replace. * @param string $keyFormat String defining the format of the keys as * specified in input string. * @return string String processed. */ function replace_params(string $str, array $params, string $keyFormat = '{%s}'): string { foreach ($params as $k => $v) $str = str_replace(sprintf($keyFormat, $k), $v, $str); return $str; } /** * * Check if the string seems to be a valid Base64 encoded string. * @param string $s String to be checked. * @return bool Does it seems to be a Base64 encoded string or not? */ function seems_base64(string $s): bool { return base64_encode(base64_decode($s, true)) === $s; } /** * * Truncate a text word by word. * @param string $str Text to truncate. * @param int|integer $maxLength Maximum length of the returned text. * @param string|bool|null $ellipsis Add an ellipsis if the text was * truncated. If null, nothing is appent. * If true, the three-dots will be used. * Else, the given string will be appent. * @return string The truncated text. */ function truncate_text(?string $str, int $maxLength = 200, null | bool | string $ellipsis = null): string { $parts = preg_split('/([\s\n\r]+)/', $str ?: '', -1, PREG_SPLIT_DELIM_CAPTURE); $length = 0; for ($i = 0, $nbParts = count($parts); $i < $nbParts; ++$i) { $length += strlen($parts[$i]); if ($length > $maxLength) break; } $truncated = trim(implode(array_slice($parts, 0, $i))); if ($truncated !== $str && $ellipsis !== null) $truncated .= $ellipsis === true ? unesc('…') : $ellipsis; return $truncated; } /** * * Truncate a string without taking count of words. * @param string $str Text to truncate. * @param int|integer $maxLength Maximum length of the returned text. * @param string|bool|null $ellipsis Add an ellipsis if the text was * truncated. If null, nothing is appent. * If true, the three-dots will be used. * Else, the given string will be appent. * @return string The truncated text. */ function truncate_str(?string $str, int $maxLength = 200, null | bool | string $ellipsis = null): string { $truncated = substr($str, 0, $maxLength); if ($truncated !== $str && $ellipsis !== null) $truncated .= $ellipsis === true ? unesc('…') : $ellipsis; return $truncated; } /** * * Sanitize a string, removing accents and special character, and trimming it. * @param string $str String to sanitize. * @param string $separator Words separator (replacing all non * alpha-numerical character). * @param bool $keepExtension Keep a file's extension. * @param int|integer $maxLength Shorten the string to a maximum length. * @return string The sanitized string. */ function sanitize_string(string $str, string $separator = '-', bool $keepExtension = false, int $maxLength = 32): string { $str = remove_accents($str); $str = strtolower($str); if (!$keepExtension) $str = str_replace('.', '-', $str); else while (substr_count($str, '.') > 1) $str = preg_replace('/\./', $separator, $str, 1); $str = preg_replace('/[^a-z0-9\.]+/', $separator, $str); $str = preg_replace('/' . preg_quote($separator) . '+\./', '.', $str); if ($keepExtension) { $part = preg_replace('/^(.*)\.[^.\/]+$/', '$1', $str); $ext = str_replace('jpeg', 'jpg', preg_match('/\.([^.\/]+)$/', $str, $m) ? '.' . $m[1] : ''); $str = trim($str, $separator); $str = substr($part, 0, $maxLength); $str = trim($str, $separator); $str .= $ext; } else { $str = trim($str, $separator); $str = substr($str, 0, $maxLength); $str = trim($str, $separator); } return $str; } /** * * Convert some HTML to its pseudo equivalent Plain Text. * @param string $html Probably some HTML code. * @return string Something representing the HTML code in text. */ function html_to_text(string $html): string { $html = preg_replace('/<(script|style)[^>]*>.*?<\/\1>/si', '', $html); $html = preg_replace('/<(br|\/p|\/div|\/li|\/tr|\/h[1-6])>/i', "\n", $html); $html = preg_replace('/<(p|div|li|tr|h[1-6])[^>]*>/i', "\n", $html); $text = strip_tags($html); $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'utf-8'); $text = preg_replace("/[ \t]+/", ' ', $text); $text = preg_replace("/\n{3,}/", "\n\n", $text); return trim($text); } /** * * Clean and cast an unknown value to a float number. Returns null if the value * is empty or totally invalid. * @param mixed $value Input value. * @return float|null Floating value, or null. */ function cast_float(mixed $value): ?float { if (!is_scalar($value)) return null; $value = (string) $value; if (str_contains($value, ',') && str_contains($value, '.')) $value = str_replace(',', '', $value); $value = str_replace(',', '.', $value); if (!($value = preg_replace('/[^0-9.-]/', '', $value))) return null; $value = ($value[0] === '-' ? '-' : '') . str_replace('-', '', $value); if ($value === '-') return null; return (float) implode('.', explode('.', $value, 2)); } /** * * Cast some scalar value to a predefined format. Cast methods availables are: * - number * - int * - percentage * - hours * @param mixed $something Value to cast. * @param string $cast Cast method. * @return string Casted value. */ function format(mixed $something, string $cast): string { if ($cast === 'number' || $cast === 'int') { return number_format($something, $cast === 'int' ? 0 : 2, '.', ','); } else if ($cast === 'percentage') { return format($something, 'number') . '%'; } else if ($cast === 'hours') { return format($something / 3600, 'number') . 'h'; } return $something; } /** * * Format a number. * @param mixed $something Value to cast. * @return string Casted value. */ function format_number(mixed $something): string { return format($something, 'number'); } /** * * Format a number. * @param mixed $something Value to cast. * @return string Casted value. */ function format_int(mixed $something): string { return format($something, 'int'); } /** * * Replace a bucket of strings, based on a Key/Value array. * If the key seems to be a regex (aka starting and ending with a /, * with optional ending modifiers), a preg_replace will be used instead * of a str_replace. * @param array $replacements Pattern/Value replacements array. * @param string $haystack Input string. * @return string Output string. */ function replace(array $replacements, string $haystack): string { foreach ($replacements as $pattern => $replacement) { if (seems_regex($pattern)) { $haystack = preg_replace($pattern, $replacement, $haystack); } else { $haystack = str_replace($pattern, $replacement, $haystack); } } return $haystack; } /** * * Replace the last occurence of a substring. * @param string $from Substring to replace. * @param string $to Substring replacement. * @param string $str Full string. * @return string Transformed string. */ function replace_last_occurence(string $from, string $to, string $str): string { if (($pos = strrpos($str, $from)) === false) return $str; return substr_replace($str, $to, $pos, strlen($from)); } /** * * Check a string and returns true if it seems to contains standard regex * delimiters with optional modifieds. * @param string $str String which could be a regex. * @return bool True if this is a regex. Else, false. */ function seems_regex(string $str): bool { return (bool) preg_match('/^\/.*\/[a-z]*$/i', $str); } /** * * Convert a string with optional joker stars, to a regex. * @param string $str Input string. * @return string Output regex string. */ function joker_to_regex(string $str): string { return '/^' . str_replace('Oo__joker__oO', '.*', preg_quote(str_replace('*', 'Oo__joker__oO', $str), '/')) . '$/'; } /** * * Enforce a string is in UTF8. * @param string $str String to validate. * @return string Converted string. */ function enforce_utf8_str(string $str, ?string $srcEncoding = null): string { if (!$str) return ''; if (mb_check_encoding($str, 'UTF-8')) return $str; return mb_convert_encoding($str, 'UTF-8', $srcEncoding ?: 'auto'); } /** * * Check a string and returns true if it seems to contains some * UTF-8 character. * @param string $str String to verify. * @return bool True if it seems to be a UTF-8 string. Else, false. */ function seems_utf8(string $str): bool { $len = strlen($str); for ($i = 0; $i < $len; $i++) { $c = ord($str[$i]); if ($c < 0x80) $n = 0; // 0bbbbbbb elseif (($c & 0xE0) == 0xC0) $n = 1; // 110bbbbb elseif (($c & 0xF0) == 0xE0) $n = 2; // 1110bbbb elseif (($c & 0xF8) == 0xF0) $n = 3; // 11110bbb elseif (($c & 0xFC) == 0xF8) $n = 4; // 111110bb elseif (($c & 0xFE) == 0xFC) $n = 5; // 1111110b else return false; // Does not match any model for ($j = 0; $j < $n; $j++) { // n bytes matching 10bbbbbb follow ? if ((++$i == $len) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } /** * * Remove accents from a UTF-8 or ISO-8859-1 string. * @param string $str String to process. * @return string String cleaned from accents. */ function remove_accents(string $str): string { if (!preg_match('/[\x80-\xff]/', $str)) return $str; if (seems_utf8($str)) { $chars = [ // Decompositions for Latin-1 Supplement chr(195) . chr(128) => 'A', chr(195) . chr(129) => 'A', chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A', chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A', chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E', chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E', chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I', chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I', chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N', chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O', chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O', chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U', chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U', chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y', chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a', chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a', chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a', chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c', chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e', chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e', chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i', chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i', chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o', chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o', chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o', chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u', chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u', chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y', chr(195) . chr(191) => 'y', // Decompositions for Latin Extended-A chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a', chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a', chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a', chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c', chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c', chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c', chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c', chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd', chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd', chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e', chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e', chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e', chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e', chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e', chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g', chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g', chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g', chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g', chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h', chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h', chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i', chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i', chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i', chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i', chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i', chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij', chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j', chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k', chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L', chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L', chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L', chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L', chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L', chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N', chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N', chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N', chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N', chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N', chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o', chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o', chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o', chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe', chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r', chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r', chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r', chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's', chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's', chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's', chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's', chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't', chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't', chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't', chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u', chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u', chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u', chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u', chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u', chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u', chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w', chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y', chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z', chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z', chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z', chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's', chr(226) . chr(130) . chr(172) => 'E', // Euro Sign chr(194) . chr(163) => '', // GBP (Pound) Sign ]; $str = strtr($str, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158) . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194) . chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202) . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210) . chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218) . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227) . chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235) . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243) . chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251) . chr(252) . chr(253) . chr(255); $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $str = strtr($str, $chars['in'], $chars['out']); $dbl = [ 'in' => [ chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254) ], 'out' => [ 'OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th' ], ]; $str = str_replace($dbl['in'], $dbl['out'], $str); } return $str; } /** * * Returns a bolded unicode string. * @param string $str Input string. * @return string The same string (if all character were available) bolded. */ function unicode_bold(string $str): string { $chars = [ 'A' => 120276, 'a' => 120302, 'B' => 120277, 'b' => 120303, 'C' => 120278, 'c' => 120304, 'D' => 120279, 'd' => 120305, 'E' => 120280, 'e' => 120306, 'F' => 120281, 'f' => 120307, 'G' => 120282, 'g' => 120308, 'H' => 120283, 'h' => 120309, 'I' => 120284, 'i' => 120310, 'J' => 120285, 'j' => 120311, 'K' => 120286, 'k' => 120312, 'L' => 120287, 'l' => 120313, 'M' => 120288, 'm' => 120314, 'N' => 120289, 'n' => 120315, 'O' => 120290, 'o' => 120316, 'P' => 120291, 'p' => 120317, 'Q' => 120292, 'q' => 120318, 'R' => 120293, 'r' => 120319, 'S' => 120294, 's' => 120320, 'T' => 120295, 't' => 120321, 'U' => 120296, 'u' => 120322, 'V' => 120297, 'v' => 120323, 'W' => 120298, 'w' => 120324, 'X' => 120299, 'x' => 120325, 'Y' => 120300, 'y' => 120326, 'Z' => 120301, 'z' => 120327, '0' => 120812, '1' => 120813, '2' => 120814, '3' => 120815, '4' => 120816, '5' => 120817, '6' => 120818, '7' => 120819, '8' => 120820, '9' => 120821, ]; $unconverted = [ ' ', '-', '_', '/' ]; $expr = preg_quote(implode('', array_keys($chars)) . implode('', $unconverted), '/'); $str = preg_replace('/[^' . $expr . ']/', '', $str); $bolded = ''; for ($i = 0, $len = strlen($str); $i < $len; $i++) { $bolded .= in_array($str[$i], $unconverted) ? $str[$i] : mb_chr($chars[$str[$i]]); } return $bolded; } /** * * Create an almost prononciable word, switching between vowels and consonants. * @param int $minSyllables Minimum number of syllables. * @param int $maxSyllables Maximum number of syllables. * @param bool $excludeConfusing Exclude confusing letters or not. * @return string Generated word. */ function create_word(int $minSyllables = 7, int $maxSyllables = 9, bool $excludeConfusing = false): string { $syllables = $minSyllables; if ($minSyllables !== $maxSyllables) $syllables = mt_rand($minSyllables, $maxSyllables); $w = []; $offset = mt_rand(0, 1); for ($i = $offset; $i < $syllables + $offset; $i++) { $s = null; while ($s === null || in_array($s, $w)) $s = get_letter($i % 2 === 0 ? 'vowel' : 'consonant', $excludeConfusing); $w[] = $s; } return implode('', $w); } /** * * Get a random letter, with optional choice between a vowel or a consonant. * @param string|null $type Can be 'vowel', 'consonant' or null * for both. * @param bool $excludeConfusing Exclude confusing letters or not. * @return string The letter. */ function get_letter(string $type = null, bool $excludeConfusing = false): string { $vowels = $excludeConfusing ? 'aeuy' : 'aeiouy'; $consonants = $excludeConfusing ? 'bcdfghjkmnpqrstvwxz' : 'bcdfghjklmnpqrstvwxz'; $alphabet = $vowels . $consonants; if ($type === 'vowel') $alphabet = $vowels; else if ($type === 'consonant') $alphabet = $consonants; return $alphabet[mt_rand(0, strlen($alphabet) - 1)]; } /** * * Create a fake sentence. * @param int $minWords Minimum number of words in the sentence. * @param int $maxWords Maximum number of words in the sentence. * @param int $minSyllables Minimum number of syllables. * @param int $maxSyllables Maximum number of syllables. * @param bool $endDot Put a final dot or not? * @return string Generated sentence. */ function create_sentence(int $minWords = 5, int $maxWords = 35, int $minSyllables = 7, int $maxSyllables = 9, bool $endDot = true): string { $words = []; $len = mt_rand($minWords, $maxWords); for ($i = 0; $i < $len; $i++) { $comma = (($len > 4) && ($i > 0) && (mt_rand(1, 4) === 1)) ? ', ' : ''; $words[] = $comma . create_word(minSyllables: $minSyllables, maxSyllables: $maxSyllables); } return ucfirst(str_replace(' ,', ',', implode(' ', $words))) . ($endDot ? '.' : ''); } /** * * Create a paragraph containing some sentences. * @param int $minSentences Minimum number of sentences. * @param int $maxSentences Maximum number of sentences. * @return string Generated paragraph. */ function create_paragraph(int $minSentences = 3, int $maxSentences = 11): string { $sentences = []; $len = mt_rand($minSentences, $maxSentences); for ($i = 0; $i < $len; $i++) $sentences[] = create_sentence(); return implode(' ', $sentences); } /** * * Create some paragraphes, returned as an array or a HTML string. * @param int $minParagraphes Minimum number of paragraphes. * @param int $maxParagraphes Maximum number of paragraphes. * @param bool $html Return as an HTML string or not. * @return string Generated paragraphes. */ function create_paragraphes(int $minParagraphes = 1, int $maxParagraphes = 5, bool $html = false): array | string { $paragraphes = []; $len = mt_rand($minParagraphes, $maxParagraphes); for ($i = 0; $i < $len; $i++) $paragraphes[] = create_paragraph(); return $html ? '

' . implode('

', $paragraphes) . '

' : $paragraphes; } /** * * Get some random western's actor name. * @param string|null $gender Gender (male, female). Default: null = random. * @return object Object containing the gender, the full name and * the name parts. */ function get_random_name(?string $gender = null): object { $female = [ "Olivia", "Emma", "Charlotte", "Amelia", "Sophia", "Mia", "Isabella", "Ava", "Evelyn", "Luna", "Harper", "Sofia", "Camila", "Eleanor", "Elizabeth", "Violet", "Scarlett", "Emily", "Hazel", "Lily", "Gianna", "Aurora", "Penelope", "Aria", "Nora", "Chloe", "Ellie", "Mila", "Avery", "Layla", "Abigail", "Ella", "Isla", "Eliana", "Nova", "Madison", "Zoe", "Ivy", "Grace", "Lucy", "Willow", "Emilia", "Riley", "Naomi", "Victoria", "Stella", "Elena", "Hannah", "Valentina", "Maya", "Zoey", "Delilah", "Leah", "Lainey", "Lillian", "Paisley", "Genesis", "Madelyn", "Sadie", "Sophie", "Leilani", "Addison", "Natalie", "Josephine", "Alice", "Ruby", "Claire", "Kinsley", "Everly", "Emery", "Adeline", "Kennedy", "Maeve", "Audrey", "Autumn", "Athena", "Eden", "Iris", "Anna", "Eloise", "Jade", "Maria", "Caroline", "Brooklyn", "Quinn", "Aaliyah", "Vivian", "Liliana", "Gabriella", "Hailey", "Sarah", "Savannah", "Cora", "Madeline", "Natalia", "Ariana", "Lydia", "Lyla", "Clara", "Allison" ]; $male = [ "Liam", "Noah", "Oliver", "James", "Elijah", "Mateo", "Theodore", "Henry", "Lucas", "William", "Benjamin", "Levi", "Sebastian", "Jack", "Ezra", "Michael", "Daniel", "Leo", "Owen", "Samuel", "Hudson", "Alexander", "Asher", "Luca", "Ethan", "John", "David", "Jackson", "Joseph", "Mason", "Luke", "Matthew", "Julian", "Dylan", "Elias", "Jacob", "Maverick", "Gabriel", "Logan", "Aiden", "Thomas", "Isaac", "Miles", "Grayson", "Santiago", "Anthony", "Wyatt", "Carter", "Jayden", "Ezekiel", "Caleb", "Cooper", "Josiah", "Charles", "Christopher", "Isaiah", "Nolan", "Cameron", "Nathan", "Joshua", "Kai", "Waylon", "Angel", "Lincoln", "Andrew", "Roman", "Adrian", "Aaron", "Wesley", "Ian", "Thiago", "Axel", "Brooks", "Bennett", "Weston", "Rowan", "Christian", "Theo", "Beau", "Eli", "Silas", "Jonathan", "Ryan", "Leonardo", "Walker", "Jaxon", "Micah", "Everett", "Robert", "Enzo", "Parker", "Jeremiah", "Jose", "Colton", "Luka", "Easton", "Landon", "Jordan", "Amir", "Gael" ]; $lastnames = [ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzales", "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin", "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark", "Ramirez", "Lewis", "Robinson", "Walker", "Young", "Allen", "King", "Wright", "Scott", "Torres", "Nguyen", "Hill", "Flores", "Green", "Adams", "Nelson", "Baker", "Hall", "Rivera", "Campbell", "Mitchell", "Carter", "Roberts", "Gomez", "Phillips", "Evans", "Turner", "Diaz", "Parker", "Cruz", "Edwards", "Collins", "Reyes", "Stewart", "Morris", "Morales", "Murphy", "Cook", "Rogers", "Gutierrez", "Ortiz", "Morgan", "Cooper", "Peterson", "Bailey", "Reed", "Kelly", "Howard", "Ramos", "Kim", "Cox", "Ward", "Richardson", "Watson", "Brooks", "Chavez", "Wood", "James", "Bennet", "Gray", "Mendoza", "Ruiz", "Hughes", "Price", "Alvarez", "Castillo", "Sanders", "Patel", "Myers", "Long", "Ross", "Foster", "Jimenez" ]; if ($gender === null || !in_array($gender, [ 'male', 'female' ])) $gender = mt_rand(0, 1) ? 'female' : 'male'; return (object) [ 'gender' => $gender, 'firstname' => $firstname = $$gender[mt_rand(0, count($$gender) - 1)], 'lastname' => $lastname = $lastnames[mt_rand(0, count($lastnames) - 1)], 'name' => $firstname . ' ' . $lastname, ]; } /** * * Tries to sanitize and normalize a full name (John Doe). * @param string $name Name. * @return string Sanitized name. */ function sanitize_full_name(string $name): string { $name = str_replace([ '_', '+', '.' ], ' ', $name); if (!($name = trim(trim(trim($name), ',;')))) return ''; $name = str_replace([ "’", "`", "´" ], "'", $name); $name = mb_strtolower($name, 'UTF-8'); $lowerParticles = [ 'de', 'du', 'des', 'd', 'la', 'le', 'les', 'van', 'von', 'der', 'den', 'di', 'da', 'del', 'della' ]; $words = preg_split('/\s+/', $name); $result = []; foreach ($words as $index => $word) { $hyphenParts = explode('-', $word); $newHyphenParts = []; foreach ($hyphenParts as $partIndex => $part) { if (strpos($part, "'") !== false) { // Simple quotes (O'Connor, D'Artagnan) [$prefix, $suffix] = explode("'", $part, 2); $prefix = in_array($prefix, $lowerParticles) && $index !== 0 ? $prefix : mb_convert_case($prefix, MB_CASE_TITLE, 'UTF-8'); $suffix = mb_convert_case($suffix, MB_CASE_TITLE, 'UTF-8'); $newHyphenParts[] = $prefix . "'" . $suffix; continue; } if (in_array($part, $lowerParticles) && $index !== 0) { // Simple particle $newHyphenParts[] = $part; continue; } if (preg_match('/^mc(.+)/', $part, $m)) { // McDonald $newHyphenParts[] = 'Mc' . mb_convert_case($m[1], MB_CASE_TITLE, 'UTF-8'); continue; } if (preg_match('/^mac(.{2,})/', $part, $m)) { // MacArthur $newHyphenParts[] = 'Mac' . mb_convert_case($m[1], MB_CASE_TITLE, 'UTF-8'); continue; } if (preg_match('/^(du|de|van|von)([a-z])/', $part, $m) && !str_starts_with($part, 'develop')) { // DuPont $newHyphenParts[] = ucfirst($m[1]) . mb_strtoupper($m[2], 'UTF-8') . mb_substr($part, 3); continue; } $newHyphenParts[] = mb_convert_case($part, MB_CASE_TITLE, 'UTF-8'); } $result[] = implode('-', $newHyphenParts); } return implode(' ', $result); } /** * * Remove useless spaces and comments in some HTML code. * @param string $html Unminified HTML code. * @return string Minified HTML code. */ function minify_html(string $html): string { return preg_replace([ '/\>[^\S ]+/s', // Strip whitespaces after tags, except space '/[^\S ]+\/', // Remove HTML comments ], [ '>', '<', '\\1', '', ], $html); } /** * * Beautify an HTML string, using the third-party Beautify_Html class. * @param string $html Ugly HTML code. * @return string Beautiful HTML code. */ function beautify_html(string $html, array $opts = []): string { $opts = (object) array_merge([ 'indent' => 2, 'char' => ' ', 'unformatted' => [ 'code', 'pre' ], 'preserve_newlines' => false, ], $opts); return (new Microbe_Beautify_Html([ 'indent_inner_html' => true, 'indent_size' => $opts->indent, 'indent_char' => $opts->char, 'indent_scripts' => 'normal', 'wrap_line_length' => 32786, 'unformatted' => $opts->unformatted, 'preserve_newlines' => $opts->preserve_newlines, 'max_preserve_newlines' => 32786, ]))->beautify($html); } /** * * Split a string between values, by default using commas and/or semicolons * as separator, then trim and remove empty values. * @param string $str Some string with optional . * @param string $sep Separator, as a regex or a simple substring. * @return array Array of items found. */ function split_values(string $str, string $sep = '/[,;]/'): array { $str = trim($str); return array_values(array_filter(array_map(function($s) { return trim($s) ?: null; }, seems_regex($sep) ? preg_split($sep, $str) : explode($sep, $str)))); } /** * * Increment a string, using a validation function. * @param string $str Base string. * @param string $prefix Prefix where {idx} is replaced by increment. * @param string $suffix Suffix where {idx} is replaced by increment. * @param Closure|null $validate Validation function, taking two arguments: * the incremented string, and the index * as integer. * @return string Incremented string. */ function increment_str(string $str, string $prefix = '', string $suffix = '', ?Closure $validate = null): string { if ((!$prefix && !$suffix) || (!str_contains($prefix, '{idx}') && !str_contains($suffix, '{idx}'))) $suffix = ' - {idx}'; $regexPrefix = str_replace($k = 'Oo___IdX___oO', '[0-9]+', preg_quote(str_replace('{idx}', 'Oo___IdX___oO', $prefix), '/')); $regexSuffix = str_replace($k = 'Oo___IdX___oO', '[0-9]+', preg_quote(str_replace('{idx}', 'Oo___IdX___oO', $suffix), '/')); $str = preg_replace('/' . $regexSuffix . '$/', '', preg_replace('/^' . $regexPrefix . '/', '', $str)); for ($idx = 1; $idx <= 99; $idx++) { $out = str_replace('{idx}', (string) $idx, $prefix . $str . $suffix); if (!($validate instanceof Closure)) return $out; if ($validate($out, $idx)) return $out; } return $str; } /** * Explode the strings part, based on conventional case separators: * camel-cased, dashes or underscores. * @param string $str Input string. * @param string|null $joint If given, this string will be used for an * implode and a string will be returned instead * of an array. * @return array|string An array with the string parts, or a string with * those parts joined with $joint. */ function explode_case(string $str, string $joint = null): array | string { if (!preg_match('/[a-z]/', $str)) return [ $str ]; $str = preg_replace('/([a-z])([A-Z])/', '$1 $2', $str); $str = preg_replace('/([a-zA-Z])([0-9]+)$/', '$1 $2', $str); $str = str_replace([ '-', '_' ], ' ', $str); $parts = array_values(array_filter(array_map(function($c): ?string { return trim($c) ?: null; }, explode(' ', $str)))); if ($joint === null) return $parts; return implode($joint, $parts); } /** * * Returns a camelCasedString. * @param string $str Input string. * @return string Cased string. */ function camel_case(string $str): string { $str = substr(ucwords('Z' . strtolower(explode_case($str, ' '))), 1); return str_replace(' ', '', $str); } /** * * Returns a PascalCasedString. * @param string $str Input string. * @return string Cased string. */ function pascal_case(string $str): string { return ucfirst(camel_case($str)); } /** * * Returns a snake_cased_string, a SNAKE_CASED_STRING or a Snake_Cased_String. * @param string $str Input string. * @param bool $upper Uppercase all the string. * @param bool $upperWords Uppercase the first letter of each word. * @return string Cased string. */ function snake_case(string $str, bool $upper = false, bool $upperWords = false): string { $str = strtolower(explode_case($str, '_')); if ($upper) return strtoupper($str); if (!$upperWords) return $str; return str_replace(' ', '_', ucwords(str_replace('_', ' ', $str))); } /** * * Returns a kebab-cased-string, or a KEBAB-CASED-STRING. * @param string $str Input string. * @param bool $upper Uppercase all the string. * @return string Cased string. */ function kebab_case(string $str, bool $upper = false): string { $str = strtolower(explode_case($str, '-')); return $upper ? strtoupper($str) : $str; } /** * * Extract quoted substrings from a string, and returns an object with * the original string altered with unquoted $replacement, and the quotes as * an array of objects containing the initial quoted text. * @param string $str Input string * @param string $replacement Replacement string, with a %d somewhere which * will be replaced by the quote index. * @param string $quotes Quotes taken in account (default "'). * @return array Array of two entries: the altered text, and an * array of objects describing the quoted entries. */ function extract_quoted_substr(string $str, string $replacement = '{{{QUOTED_%d}}}', string $quotes = '\'"'): array { $indexes = []; $start = null; $lastQuoteChar = null; for ($i = 0, $len = strlen($str); $i < $len; $i++) { if (!str_contains($quotes, $str[$i])) continue; $lastQuoteChar = $str[$i]; if ($start) { $indexes[] = [ $start, $i ]; $start = null; } else { $start = $i; } } if ($start) { $str .= $lastQuoteChar; $indexes[] = [ $start, strlen($str) - 1 ]; } foreach ($indexes as $idx => list($start, $end)) { $quotedSubstr = $substr = substr($str, $start, $end - $start + 1); if (strlen($substr) >= 2) $substr = substr(substr($substr, 1), 0, -1); $indexes[$idx][] = $quotedSubstr; $indexes[$idx][] = $substr; } $quotes = []; foreach ($indexes as $idx => list($start, $end, $quotedSubstr, $substr)) { $repl = sprintf($replacement, $idx); $str = preg_replace('/' . preg_quote($quotedSubstr, '/') . '/', $repl, $str, 1); $quotes[] = (object) [ 'index' => $idx, 'quoted_substr' => $quotedSubstr, 'substr' => $substr, 'replacement' => $repl, ]; } return [ $str, $quotes ]; } /** * * Parse a query which can have some words, and key/value pairs. * E.g.: foo bar id:123 * @param string $q Query terms. * @return object Object containing the string query, the splitted terms of * the query (as an array) and the params as a key/value * array. */ function parse_search_query(string $q): object { list($str, $quotes) = extract_quoted_substr($q); $str = preg_replace('/([a-z0-9])\s*:\s*([^\s])/i', '$1:$2', $str); $str = ' ' . preg_replace('/\s+/', ' ', $str) . ' '; $params = []; if (preg_match_all('/\s(?\w*[a-z0-9]):(?[^\s]+)\s/i', $str, $matches, PREG_SET_ORDER)) { foreach ($matches as $m) { $str = str_replace($m[0], '', $str); $v = trim($m['v']); foreach ($quotes as $q) { if ($v === $q->replacement) { $v = $q->substr; break; } } $params[$m['k']] = $v; } } $str = trim(preg_replace('/\s+/', ' ', $str)); return (object) [ 'query' => $str, 'terms' => explode(' ', $str), 'params' => $params, ]; } // ==={ Fallback Functions }==================================================== if (!function_exists('mb_ucfirst') && function_exists('mb_strtoupper')) { function mb_ucfirst(string $str, string $encoding = null): string { if ($encoding === null) $encoding = mb_internal_encoding(); return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_substr($str, 1, null, $encoding); } } if (!function_exists('mb_str_pad') && function_exists('mb_strlen')) { function mb_str_pad(string $input, int $length, string $padding = ' ', int $padType = STR_PAD_RIGHT, string $encoding = 'utf-8'): string { $result = $input; if (($paddingRequired = $length - mb_strlen($input, $encoding)) <= 0) return $result; switch ($padType) { case STR_PAD_LEFT: $result = mb_substr(str_repeat($padding, $paddingRequired), 0, $paddingRequired, $encoding) . $input; break; case STR_PAD_RIGHT: $result = $input . mb_substr(str_repeat($padding, $paddingRequired), 0, $paddingRequired, $encoding); break; case STR_PAD_BOTH: $leftPaddingLength = floor($paddingRequired / 2); $rightPaddingLength = $paddingRequired - $leftPaddingLength; $result = mb_substr(str_repeat($padding, $leftPaddingLength), 0, $leftPaddingLength, $encoding) . $input . mb_substr(str_repeat($padding, $rightPaddingLength), 0, $rightPaddingLength, $encoding); break; } return $result; } } if (!function_exists('mb_str_replace') && function_exists('mb_split')) { function mb_str_replace(string | array $search, string $replace, string $subject): string { if (!is_array($search)) return implode($replace, mb_split($search, $subject)); foreach ($search as $s) $subject = mb_str_replace($s, $replace, $subject); return $subject; } } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending STRINGS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning SYSTEM #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Guess the location fo the PHP binary, ideally including the same PHP version. * @param string|null $fallback Fallback PHP binary path. * @return string|null PHP binary path if found. */ function guess_php_binary(?string $fallback = null): ?string { $binary = preg_replace('/\/php-fpm$/', '/php', PHP_BINARY); if (is_file($binary)) return $binary; $binary = null; $locations = array_unique([ dirname(PHP_BINARY), '/usr/sbin', '/usr/bin', '/usr/local/bin' ]); foreach ($locations as $loc) { $bin = $loc . '/php' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION; if (!is_file($bin)) continue; return $bin; } foreach ($locations as $loc) { $bin = $loc . '/php'; if (!is_file($bin)) continue; return $bin; } return $fallback; } /** * * Execute a PHP file using current PHP binary. * @param string $path Path of PHP file to execute. * @param array $vars Variables to pass as environment variables * got in child via ($_SERVER). * @param bool $return Return execution response instead of echoing it. * @param string|null $binary Path of PHP binary. Default is guessed * from PHP_BINARY. * @return int|array Code returned by execution, or array containing * the code and the response. */ function exec_php_file( string $path, array $vars = [], bool $return = false, ?string $binary = null, ): int | array { if ($binary === null) $binary = guess_php_binary(); $env = ''; foreach ($vars as $k => $v) $env .= strtoupper($k) . '=' . escapeshellarg($v) . ' '; $cmd = $env . escapeshellcmd($binary) . ' ' . escapeshellcmd($path); if ($return) { exec($cmd, $output, $code); return [ $code, $output ]; } passthru($cmd, $code); return $code; } /** * * Execute an interactive command through , and wait for some of * the entries of $expect, then answer it. * @param string $cmd Command to execute. * @param array $expect Simple array, containing associative arrays * with the following enties: * - , as a regex tested on each text row * returned by the command. * - , as the string to write in the * , as an input to the command. * @param string|null $ending An optional regex which indicates that we can * consider the program is fully exectuted, so * we don't have to wait the timeout of * . * @param bool $showOutput Echo each result of the stream. * Default false. * @return bool|string False is something goes wrong. Else, the * full output of the execution of the command. */ function exec_in_out(string $cmd, array $expect = [], string $ending = null, bool $showOutput = false): bool | string { $log = []; $descriptorspec = [ [ 'pipe', 'r' ], // stdin [ 'pipe', 'w' ], // stdout [ 'pipe', 'w' ], // stderr ]; $process = proc_open($cmd, $descriptorspec, $pipes); $read = [ $pipes[1] ]; $write = null; $except = null; $readTimeout = 10; if (!is_resource($process)) return false; sleep(2); stream_set_blocking($pipes[1], false); $i = 0; while (true) { $res = stream_select($read, $write, $except, $readTimeout); $rawOutput = fgets($pipes[1]); $output = trim(cli_strip_colors($rawOutput)); if (!preg_match('/[A-Za-z0-9]/', $output)) continue; if ($showOutput) echo rtrim($rawOutput, "\r\n") . "\n"; $log[] = $output; if (preg_match($ending, $output)) { sleep(1); break; } foreach ($expect as $idx => $exp) { if (!preg_match($exp['out'], $output)) continue; fwrite($pipes[0], $exp['in'] . "\n"); fflush($pipes[0]); unset($expect[$idx]); $expect = array_values($expect); break; } } foreach ($pipes as $p) fclose($p); $ret = proc_close($process); return implode("\n", $log); } /** * * Returns the user or group name, from its system ID. * @param int $id System user/group ID * @return string|null Name, if found and if the proper * is available. */ function get_system_user_name_by_id(int $id): ?string { if (!function_exists('posix_getpwuid')) return null; if (!($pw = posix_getpwuid($id))) return null; return $pw['name'] ?? null; } /** * * Returns the current's process user ID. * @return int|null User ID. */ function get_system_user_id(): ?int { return function_exists('posix_geteuid') ? posix_geteuid() : null; } /** * * Returns the current's process user name. * @return string|null User name. */ function get_system_user_name(): ?string { if (!function_exists('posix_getpwuid')) return null; if (($id = get_system_user_id()) === null) return null; return get_system_user_name_by_id($id); } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending SYSTEM #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning TASKS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * @param string $name Name of the task. * @param Closure $func Function executed when the task is called. * This function takes two arguments: * - string $ctx: The context ('web' or 'cli'). * - object $args: An object containing arguments * passed as command line * parameter or query string. * @param array $args Arguments description, taking associative arrays * with the following keys: string 'desc' and * bool 'optional'. * @param bool $webEnabled Task is enabled on web context. * @param bool $cliEnabled Task is enabled on cli context. */ function register_task( string $bundle, string $name, Closure $func, array $args = [], bool $webEnabled = true, bool $cliEnabled = true, ): void { register_thing('tasks', (object) [ 'bundle' => $bundle, 'name' => $name, 'uid' => $uid = str_replace('c', 'z', hash('sha256', 'task:' . $bundle . ':' . $name . ':' . cfg('@security.salt'))), 'func' => $func, 'args' => $args, 'file' => get_data_dir('tasks', 'auto', $uid . '.php'), 'enabled' => (object) [ 'web' => $webEnabled, 'cli' => $cliEnabled, ], ]); } /** * Assert if the standalone files for each task are created, * and delete useless tasks files. * @param array|null $tasks Registered tasks. If null, tasks will * be retrieved. * @param bool $force Force generation of files even if exists. */ function assert_tasks_files(?array $tasks = null, bool $force = false): void { $snippet = '<' . '?php declare(strict_types=1);' . "\n" . 'define(\'MB_HANDLE_ERRORS\', true);' . "\n" . 'define(\'MB_EXEC_TASK\', \'{task_uid}\');' . "\n" . 'require_once __DIR__ . DIRECTORY_SEPARATOR . \'..\' . DIRECTORY_SEPARATOR . \'..\' . DIRECTORY_SEPARATOR . \'..\' . DIRECTORY_SEPARATOR . \'' . get_microbe_file_name() . '\';' . "\n" . 'boot(\'cli\');' . "\n"; $dir = null; $files = []; foreach ($tasks ?: get_registered_tasks(assertFiles: false) as $task) { if (!$force && is_file($task->file)) continue; if ($dir === null) rmkdir($dir = dirname($task->file)); file_put_contents($task->file, str_replace('{task_uid}', $task->uid, $snippet)); $files[$task->file] = true; } if ($dir) { foreach (get_files($dir) as $f) { if (array_key_exists($f->getPath(), $files)) continue; $f->delete(); } } } /** * Returns registered tasks. * @param bool $assertFiles Execute assert_tasks_files() in order to control * existence of standalone PHP files which execute * the task. * @return array Registered tasks. */ function get_registered_tasks(bool $assertFiles = true): array { $tasks = get_registered_things('tasks'); usort($tasks, function(object $a, object $b): int { $ab = strtolower($a->bundle); $bb = strtolower($b->bundle); if ($ab < $bb) return -1; if ($ab > $bb) return 1; $an = strtolower($a->name); $bn = strtolower($b->name); if ($an < $bn) return -1; if ($an > $bn) return 1; return 0; }); if ($assertFiles) assert_tasks_files($tasks); return $tasks; } /** * Returns a specific registered task. * @param string|null $uid UID of the task. * @param string|null $bundle Bundle of the task (associated with $name). * @param string|null $name Name of the task (associated with $bundle). * @return object|null Task object, or null if not found. */ function get_registered_task(?string $uid = null, ?string $bundle = null, ?string $name = null): ?object { foreach (get_registered_tasks() as $task) { if (($uid && ($task->uid === $uid)) || ($bundle && $name && $bundle === $task->bundle && $name === $task->name)) { return $task; } } return null; } /** * Generate the callable URL for a specific task. * @param string $taskUid Task UID. * @return string|null Task URL, or null if task not found. */ function generate_task_url(string $taskUid): ?string { if (!($task = get_registered_task(uid: $taskUid))) return null; return url(get_microbe_file_name(), [ 'task' => $task->uid ], host: true); } /** * Generate the shell command to execute the task through related CLI action. * @param string $taskUid Task UID. * @return string Shell command. */ function generate_task_cli_path(string $taskUid): string { if (!($task = get_registered_task(uid: $taskUid))) return null; return 'php ' . __FILE__ . ' core task ' . $task->bundle . ' ' . $task->name; } /** * * Execute a specific task. * @param string $taskUid Task name or UID. * @param string $ctx Context: 'web' or 'cli'. * @param array $args Arguments passed to the task (usualy CLI arguments * or query-strings). */ function execute_task(string $taskUid, string $ctx, object | array $args = []): void { if (!($task = get_registered_task(uid: $taskUid))) throw new Microbe_Exception("Trying to execute a non-registered task: {$ref}"); if (!property_exists($task->enabled, $ctx)) throw new Microbe_Exception("Trying to execute a task ({$ref}) with an unknown context: {$ctx}"); if (!$task->enabled->$ctx) throw new Microbe_Exception("Trying to execute a task ({$ref}) which is disabled for this context: {$ctx}"); call_user_func_array($task->func, [ $ctx, (object) $args ]); exit; } // ============================================================================= // ---{ Listeners }------------------------------------------------------------- listen('init', function(): void { register_cli_action( bundle: 'core', name: 'task', description: "Execute a task.", opts: [], func: function(object $opts, ?string $bundleName = null, ?string $taskName = null): void { if (!$taskName) { cli_table( heading: "Registered Tasks", rows: array_map(function(object $task): array { $args = []; foreach ($task->args as $argKey => $argInfo) { $args[] = "'" . $argKey . "'" . ($argInfo['optional'] ? ' (opt.)' : '') . ($argInfo['desc'] ? ': ' . $argInfo['desc'] : ''); } return [ "Bundle" => $task->bundle, "Task Name" => $task->name, "Web" => $task->enabled->web ? "Yes" : "No", "Cli" => $task->enabled->cli ? "Yes" : "No", "Arguments" => $args ? implode(' | ', $args) : "None", ]; }, get_registered_tasks()), ); return; } if (!($task = get_registered_task(bundle: $bundleName, name: $taskName))) { cli_error("Invalid bundle name or task name."); return; } execute_task(taskUid: $task->uid, ctx: 'cli', args: $opts); }, ); }); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending TASKS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning TIME #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Returns the in microseconds (and not in seconds). * @return int The microseconds timestamp. */ function microseconds(): int { return (int) (microtime(true) * 1000000); } /** * * Returns the time since the beginning of the script. * @return float Current time in seconds. */ function script_time(): float { return microtime(true) - MB_SCRIPT_START; } /** * * Returns app timezone. * @return DateTimeZone App timezone */ function get_app_timezone(): DateTimeZone { return new DateTimeZone(cfg('~@time.timezone') ?: 'UTC'); } /** * * Returns app timezone name. * @return string App timezone name if it's a valid one. */ function get_app_timezone_name(): ?string { return ($dtz = get_app_timezone()) ? $dtz->getName() : null; } /** * * Returns system timezone. * @return DateTimeZone System timezone */ function get_system_timezone(): DateTimeZone { return new DateTimeZone(MB_DEFAULT_TIMEZONE); } /** * * Returns system timezone name. * @return string System timezone name if it's a valid one. */ function get_system_timezone_name(): ?string { return ($dtz = get_system_timezone()) ? $dtz->getName() : null; } /** * * Returns all timezones supported by system. * @param bool $onlyIdentifiers Returns a simple array of strings names * instead of detailled info. * @return array An array of objects describing the timezone. */ function get_timezones(bool $onlyIdentifiers = false): array { $identifiers = DateTimeZone::listIdentifiers(DateTimeZone::ALL); if ($onlyIdentifiers) return $identifiers; $now = new DateTime('now', new DateTimeZone('UTC')); $timezones = array_map(function(string $tzIdentifier) use ($now): object { return (object) [ 'name' => ($dtz = new DateTimeZone($tzIdentifier))->getName(), 'location' => $dtz->getLocation(), 'offset' => (object) [ 'seconds' => $offset = $dtz->getOffset($now), 'short' => $pretty = ($offset < 0 ? '-' : '+') . gmdate('H:i', abs($offset)), 'long' => 'UTC' . $pretty, ], ]; }, $identifiers); usort($timezones, function(object $a, object $b): int { if ($a->offset->seconds < $b->offset->seconds) return -1; if ($a->offset->seconds > $b->offset->seconds) return 1; if ($a->name < $b->name) return -1; if ($a->name > $b->name) return 1; return 0; }); return $timezones; } /** * * Check if the given identifier is a valid timezone. * @param string $identifier Probably a timezone name. * @return boolean True if the timezone exists. Else, false. */ function is_valid_timezone(string $identifier): bool { return in_array($identifier, get_timezones(onlyIdentifiers: true)); } /** * * Echo the current year. */ function _year(): void { echo (new DateTime())->format('Y'); } /** * * Convert a number of seconds to hh:mm:ss * @param int $seconds Number of seconds. * @param bool $overtimeSentence String returned if $seconds is over a day. * @return string Total time with format "hh:mm:ss". */ function seconds_to_duration(int $seconds, string $overtimeSentence = "An eternity"): string { $seconds = round($seconds); if ($seconds > 24 * 3600) return t($overtimeSentence); return sprintf('%02d:%02d:%02d', $seconds / 3600, floor($seconds / 60) % 60, $seconds % 60); } /** * * Parse a duration string, suffixed with one of those units: * s(econds), m(inutes), h(ours), d(ays), w(eeks), y(ears). * Note that there is no monthes unit for two reasons: first, there can be a * conflict between minutes and monthes, and secondary, the conversion from * month to seconds may vary a lot because of the variability of the * month duration, from 28 to 31 days. * @param int|string $str Some string suffixed with a * time unit. * @param bool $asDateInterval Returns DateInterval instance * instead of an integer of * seconds. * @return integer|DateInterval Duration, in seconds * or DateInterval instance. */ function parse_duration(int | string $str, bool $asDateInterval = false): int { if (is_integer($str)) return $str; $regex = '/^(?[0-9]+(?\.[0-9]+)?)(?[smhdwy])?$/i'; if (!preg_match($regex, trim((string) $str), $matches)) { return 0; } $t = ((float) $matches['int']) + ((float) ('0.' . $matches['dec'])); $s = match (strtolower($matches['unit'])) { 's' => (int) $t, // Seconds 'm' => (int) ($t * 60), // Minutes 'h' => (int) ($t * 3600), // Hours 'd' => (int) ($t * 24 * 3600), // Days 'w' => (int) ($t * 7 * 24 * 3600), // Weeks 'y' => (int) ($t * 365.25 * 24 * 3600), // Years default => (int) $t, // Default: Seconds }; return $asDateInterval ? new DateInterval('PT' . $s . 'S') : $s; } /** * * Parse a duration string, and create the corresponding PHP DateInterval. * @param int|string $str Some string suffixed with a time unit. * @return DateInterval The DateInterval corresponding to the duration. */ function duration_to_date_interval(int | string $str): DateInterval { return new DateInterval('PT' . parse_duration($str) . 'S'); } /** * * Check if a file or a date is expired, based on given time-to-live. * @param string|int|DateTimeInterface $what Some date to check. Could be: * - DateTimeInterface instance; * - UNIX timestamp; * - String date, * as "Y-m-d H:i:s"; * - File path (the modified * time will be checked). * @param string|int|DateInterval $ttl Time-to-live. Could be: * - Seconds as an integer; * - DateInterval instance; * - The DateInterval duration * string (as "P...T..."). * @return boolean Is the date expired or not? */ function is_expired(string | int | DateTimeInterface $what, string | int | DateInterval $ttl): bool { if (is_string($what) && !is_int_val($what)) { if (is_valid_datetime($what)) $what = strtotime($what); else if (is_file($what)) $what = filemtime($what); else throw new Microbe_Exception("Unable to check expiration on unknown subject"); } else if ($what instanceof DateTimeInterface) $what = $what->format('U'); if (!is_int_val($what)) throw new Microbe_Exception("Unable to fetch UNIX time in seconds from the expiration subject"); $what = (int) $what; if (is_int_val($ttl)) $ttl = new DateInterval('PT' . $ttl . 'S'); else if (is_string($ttl)) $ttl = str_starts_with($ttl, 'P') ? new DateInterval($ttl) : duration_to_date_interval($ttl); else if (!($ttl instanceof DateInterval)) throw new Microbe_Exception("Unable to convert the TTL to a DateInterval"); $expires = new DateTime('@' . $what); $expires->add($ttl); return $expires < (new DateTime()); } /** * * Compute the time ago since a specified date and time. * @param DateTimeInterface|string|int $dt Date and time of the event. * Can be a DateTime object, a string * which can be parsed by the DateTime * constructor, or a timestamp as * an integer. * @param DateTime|null $now Now DateTime. Default, now. * @param bool $full Don't filter the fields (YMWDhms), * so returns all the fields, even if * they're zero. * @param int|string $limit Returns null if the delay is above * the given limit, represented as * seconds or a string duration. * @param bool $lower Returns lowercased. * @param bool $translate Returns lowercased. * @param string $textFormat Text format to be returned. * @return string Time ago as a string of elapsed * hours, minutes, etc. */ function get_time_ago( DateTimeInterface | string | int $dt, DateTimeInterface $now = null, bool $full = false, int | string $limit = null, bool $lower = false, bool $translate = true, string $textFormat = '{time} ago', ): ?string { if ($now === null) $now = new DateTime(); if (!($dt instanceof DateTimeInterface)) $dt = new DateTime(is_int($dt) ? '@' . $dt : $dt); if ($limit !== null) { if ($now->format('U') - $dt->format('U') >= parse_duration($limit)) { return null; } } $diff = $now->diff($dt); $t = $translate ? fn(string $s, array $args = []): string => t($s, $args) : fn(string $s, array $args = []): string => t($s, $args, fromLocale: $tl = get_translations_locale(), toLocale: $tl); $str = array( 'y' => [ $t('year'), $t('years') ], 'm' => [ $t('month'), $t('months') ], 'w' => [ $t('week'), $t('weeks') ], 'd' => [ $t('day'), $t('days') ], 'h' => [ $t('hour'), $t('hours') ], 'i' => [ $t('minute'), $t('minutes') ], 's' => [ $t('second'), $t('seconds') ], ); $parts = []; foreach ($str as $k => $v) if (property_exists($diff, $k)) $parts[$k] = $diff->$k; $parts = (object) $parts; $parts->w = floor($parts->d / 7); $parts->d -= $parts->w * 7; foreach ($str as $k => &$v) { if (!$parts->$k) { unset($str[$k]); continue; } $v = $parts->$k . ' ' . ($parts->$k > 1 ? $v[1] : $v[0]); } if (!$full) $str = array_slice($str, 0, 1); if (!$str) $str = $t('Just now'); else $str = $t($textFormat, [ 'time' => implode(', ', $str) ]); if ($lower) $str = mb_strtolower($str); return $str; } /** * * Execute a reversed with labels adapted for the time * remaining between the two dates. * @param DateTimeInterface|string|int $dt Date and time of the event. * Can be a DateTime object, a string * which can be parsed by the DateTime * constructor, or a timestamp as * an integer. * @param DateTime|null $now Now DateTime. Default, now. * @param bool $full Don't filter the fields (YMWDhms), * so returns all the fields, even if * they're zero. * @param int|string $limit Returns null if the delay is above * the given limit, represented as * seconds or a string duration. * @param bool $lower Returns lowercased. * @param bool $translate Returns lowercased. * @return string Time ago as a string of elapsed * hours, minutes, etc. */ function get_time_remaining( DateTimeInterface | string | int $dt, DateTimeInterface $now = null, bool $full = false, int | string $limit = null, bool $lower = false, bool $translate = true, ): ?string { if (!($dt instanceof DateTimeInterface)) $dt = new DateTime(is_int($dt) ? '@' . $dt : $dt); if ($now === null) $now = new DateTime(); $oldNow = $now; $now = $dt; $dt = $oldNow; return get_time_ago( dt: $dt, now: $now, full: $full, limit: $limit, lower: $lower, translate: $translate, textFormat: 'Within {time}', ); } /** * * Returns the month names and numbers as an array containing monthes * as objects, with those information: * - Index: integer number of the month (1 for january, 12 for december). * - $month->num: padded month number. * - $month->name: long name translated (e.g. February). * - $month->short: short name translated (e.g. Feb). * @param string|null $locale Locale name. * @return array Monthes. */ function get_monthes(?string $locale = null): array { if ($locale === null) $locale = get_current_app_locale()->standard_code; $long = new IntlDateFormatter($locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, null, null, 'LLLL'); $short = new IntlDateFormatter($locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, null, null, 'LLL'); $monthes = []; for ($i = 1; $i <= 12; $i++) { $m = (object) [ 'num' => str_pad((string) $i, 2, '0', STR_PAD_LEFT), 'name' => $long->format($t = mktime(12, 12, 12, $i, 12)), 'short' => $short->format($t), ]; $monthes[$i] = $m; } return $monthes; } /** * * Get the month name based on its index. * @param DateTimeInterface|string|int $idx Index of the month ('08' or 8). * @param bool $short Returns the short name if true. * Else, the long. * @param string|null $locale Locale name. * @return string Month name. */ function get_month_name(DateTimeInterface | string | int $idx, bool $short = false, ?string $locale = null): string { if ($idx instanceof DateTimeInterface) $idx = (int) $idx->format('n'); return get_monthes($locale)[(int) $idx]->{$short ? 'short' : 'name'}; } /** * * Returns the days of week names and numbers as an array containing days * as objects, with those information: * - Index: integer number of the day (1 for monday, 7 for sunday). * - $day->num: integer day number. * - $day->name: long name translated (e.g. Wednesday). * - $day->short: short name translated (e.g. Wed). * @param string|null $locale Locale name. * @return array Days. */ function get_days(?string $locale = null): array { if ($locale === null) $locale = get_current_app_locale()->standard_code; $long = new IntlDateFormatter($locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, null, null, 'EEEE'); $short = new IntlDateFormatter($locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, null, null, 'EEE'); $dt = new DateTime(); $dayOfWeek = $dt->format('N'); if ($dayOfWeek > 1) $dt->sub(new DateInterval('P' . ($dayOfWeek - 1) . 'D')); $days = []; for ($i = 1; $i <= 7; $i++) { $d = (object) [ 'num' => $i, 'name' => $long->format($dt), 'short' => $short->format($dt), ]; $d->name = function_exists('mb_ucfirst') ? mb_ucfirst($d->name) : ucfirst($d->name); $d->short = function_exists('mb_ucfirst') ? mb_ucfirst($d->short) : ucfirst($d->short); $days[$i] = $d; $dt->add(new DateInterval('P1D')); } return $days; } /** * * Get the day name based on its index. * @param DateTimeInterface|string|int $idx Index of the day ('5' or 5). * @param bool $short Returns the short name if true. Else, the long. * @param string|null $locale Locale name. * @return string Day name. */ function get_day_name(DateTimeInterface | string | int $idx, bool $short = false, ?string $locale = null): string { if ($idx instanceof DateTimeInterface) $idx = (int) $idx->format('N'); return get_days($locale)[$idx]->{$short ? 'short' : 'name'}; } /** * * Check if a given value is a proper string representing a PHP date/time. * @param mixed $value Value to be checked. * @param string $format The format, with similar notation as PHP DateTime's * format function. * @return boolean Is $value a valid representation of $format, or not? */ function is_valid_datetime(mixed $value, string $format = 'Y-m-d H:i:s'): bool { if (!is_string($value) || !$value) return false; $format = preg_quote($format, '/'); $format = str_replace([ 'Y' ], '#_#{4}', $format); $format = str_replace([ 'y', 'm', 'd', 'H', 'i', 's' ], '#_#{2}', $format); $format = str_replace([ 'j', 'n', 'G' ], '#_#{1,2}', $format); $format = str_replace('#_#', '\\d', $format); return (bool) preg_match('/^' . $format . '$/', $value); } /** * * Build a DateTime from two form inputs: YYYY-MM-DD and hh:mm:ss. * @param mixed $date Form date which should be YYYY-MM-DD. * @param mixed $time Form time which should be hh:mm:ss. * @return DateTime Resulting DateTime object, or null if invalid values. */ function build_datetime_from_form(mixed $date = false, mixed $time = '00:00:00'): ?DateTime { if ($date === false) $date = (new DateTime())->format('Y-m-d'); if (!$date) return null; if (!is_valid_datetime($date, format: 'Y-m-d')) return null; if (!is_valid_datetime($time, format: 'H:i:s') && !is_valid_datetime($time, format: 'H:i')) $time = '00:00:00'; return new DateTime($date . ' ' . $time); } /** * * Format the date based on given locale. * @param string|int|DateTimeInterface $dt Date. * @param string $locale Locale. * @param string $format Custom IntlDateFormatter * pattern, or: * - short * - medium * - long * - full * @param bool|null $removeYear If true, year will be * removed. If null, year * will be removed if it's * different from current * year. * @param string $timezone Timezone. If null, the one * got from $dt's DateTime * instance will be used. * @return string Formatted date. */ function format_date( string | int | DateTimeInterface $dt, string $locale = 'fr_FR', string $format = 'long', ?bool $removeYear = false, ?string $timezone = null, ): string { if (is_int($dt)) $dt = new DateTime('@' . $dt); else if (is_string($dt)) $dt = new DateTime($dt); if (!$timezone) $timezone = $dt->getTimezone()->getName(); $formats = [ 'short' => IntlDateFormatter::SHORT, 'medium' => IntlDateFormatter::MEDIUM, 'long' => IntlDateFormatter::LONG, 'full' => IntlDateFormatter::FULL, ]; if (array_key_exists($format, $formats)) { $formatter = new IntlDateFormatter( $locale, $formats[$format], IntlDateFormatter::NONE, $timezone ); } else { $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, $timezone, null, $format ); } $formatted = $formatter->format($dt); if ($removeYear !== false) { $dtYear = $dt->format('Y'); if ($removeYear === true || ($removeYear === null && $dtYear === (new DateTime())->format('Y'))) { $formatted = str_replace([ ', ' . $dtYear, ',' . $dtYear, $dtYear ], '', $formatted); } } return trim(preg_replace('/\s+/', ' ', $formatted)); } /** * * Echo the formatted date based on given locale. * @param string|int|DateTime $dt Date. * @param string $locale Locale. */ function _format_date( string | int | DateTimeInterface $dt, string $locale = 'fr_FR', string $format = 'long', ?string $timezone = null, ): void { echo format_date( dt: $dt, locale: $locale, format: $format, timezone: $timezone, ); } /** * * Returns an object containing the weeks and days of weeks of a given month, * in order to be used to display a calendar. * @param int|string $year Requested year. * @param int|string $month Requested month. * @param bool $sundayFirst Is sunday first day of the week. If * false (default), then monday is. * @param null|Closure $dataModifier Function executed for each day, to * populate the "data" property. * @param string $url URL for previous/current/next monthes * information. * @return object Object describing the month. */ function get_calendar_month_days( int | string $year, int | string $month, bool $sundayFirst = false, ?Closure $dataModifier = null, string $url = './?year={{year}}&month={{month}}', ): object { $year = (int) $year; $month = (int) $month; $dt = new DateTime($year . '-' . str_pad((string) $month, 2, '0', STR_PAD_LEFT) . '-01 00:00:00'); $startDateTime = clone $dt; $daysInMonth = (int) $dt->format('t'); $firstDayOfMonth = ((int) $dt->format('N')) - 1; if ($sundayFirst) { $firstDayOfMonth--; if ($firstDayOfMonth === -1) $firstDayOfMonth = 6; } if ($firstDayOfMonth > 0) $dt->sub(new DateInterval('P' . $firstDayOfMonth . 'D')); $interval = new DateInterval('P1D'); $processDay = function(DateTime $dt) use ($month, $dataModifier): object { $m = (int) $dt->format('m'); $day = (object) [ 'dt' => $thisDateTime = clone $dt, 'day_name' => $dayName = strtolower($dt->format('D')), 'is_weekend' => in_array($dayName, [ 'sat', 'sun' ]), 'is_previous_month' => $m < $month, 'is_current_month' => $m === $month, 'is_next_month' => $m > $month, 'data' => null, ]; if ($dataModifier) $day->data = $dataModifier($day); return $day; }; $weeks = []; $week = []; for ($d = 1; $d <= $firstDayOfMonth; $d++) { $week[] = $processDay($dt); $dt->add($interval); if (count($week) >= 7) { $weeks[] = $week; $week = []; } } for ($d = 1; $d <= $daysInMonth; $d++) { $week[] = $processDay($dt); $dt->add($interval); if (count($week) >= 7) { $weeks[] = $week; $week = []; } } if ($week) { while (count($week) < 7) { $week[] = $processDay($dt); $dt->add($interval); } $weeks[] = $week; } $out = (object) [ 'weeks' => $weeks, 'monthes' => (object) [], ]; foreach ([ [ -1, 'previous' ], [ 0, 'current' ], [ 1, 'next' ] ] as list($monthOffset, $monthKey)) { $monthDateTime = clone $startDateTime; $monthInterval = new DateInterval('P' . abs($monthOffset) . 'M'); if ($monthOffset < 1) $monthDateTime->sub($monthInterval); else $monthDateTime->add($monthInterval); $out->monthes->{$monthKey} = (object) [ 'dt' => clone $monthDateTime, 'url' => replace([ '{{month}}' => $monthDateTime->format('m'), '{{year}}' => $monthDateTime->format('Y') ], $url), ]; } return $out; } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending TIME #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning UTILS #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Check if a value seems to represent a true or not (e.g, '1', 'yes', etc.). * @param mixed $value Value to be checked. * @return bool Is it a true... or a false... */ function value_seems_true(mixed $value): bool { if (!is_scalar($value)) return false; if ($value === true) return true; return in_array(strtolower((string) ($value ?: '')), [ '1', 'y', 'yes', 't', 'true' ], true); } /** * Returns the dump (aka 'var_dump') of a variable. * @param mixed $something Variable to dump. * @return string Dump string describing the variable. */ function dump(mixed $something): string { ob_start(); var_dump($something); return ob_get_clean(); } /** * * Check if the given object is an object and return its ID property as defined * as key parameter, if exists, or null. * If the given object is a scalar variable, check if this value is numeric and * returns it (assuming it's already the ID). * If nothing works, it will returns null. * @param mixed $obj Object, string or integer thing. * @param string $key ID key. * @return integer Integer ID, or null if not found. */ function object_id(mixed $obj, string $key = 'id'): ?int { if (!$obj) return null; if (is_object($obj)) { if (property_exists($obj, $key)) return $obj->$key ?: null; return null; } $obj = (string) $obj; if (preg_match('/^[0-9]+$/', $obj)) return (int) $obj; return null; } /** * * Merge several array and/or objects together, like array_merge, * but type-tolerant. * @param array|object ...$things Arrays or objects to merge together. * @return object Object corresponding to the merged arguments. */ function object_merge(array | object ... $things): object { $a = []; foreach ($things as $t) $a = array_merge($a, to_array($t)); return to_object($a); } /** * * Delete unwanted keys in array or object. * @param array|object $thing Array or object to process. * @param array $keys Allowed keys. * @return array|object Array or object processed. */ function restrict_keys(array | object $thing, array $keys): array | object { $isObject = is_object($thing); foreach ($thing as $k => $v) { if (!in_array($k, $keys)) { if ($isObject) unset($thing->$k); else unset($thing[$k]); } } return $thing; } /** * * Map an object, exactly like does for arrays. * @param Closure $func Callback function executed for each item. The first * parameter is the item itself. The second is the * property name. * @param object $object Input object. * @return object Output object. */ function object_map(Closure $func, object $object): object { foreach ($object as $k => $v) $object->$k = $func($v, $k); return $object; } /** * * Convert recursively an array or an object to an array. * @param array|object $d Object/array to convert. * @return array Converted array. */ function to_array(array | object $d): array { return json_decode(json_encode($d), true); } /** * * Convert recursively an array or an object to an object. * @param array|object $d Object/array to convert. * @return object|array Converted object. If root is a numerical array, * an array (perhaps containing objects) will * still be returned. */ function to_object(array | object $d): object | array { return json_decode(json_encode($d)); } /** * * Get the constants defined in a specific class, optionaly altered by a * regexp and/or a user function. * @param string $className Name of the class * @param string|null $filter Regular expression used for * @param Closure|null $func Alteration function. * @return array Array of constants. */ function get_class_constants(string $className, ?string $filter = null, ?Closure $func = null): array { if ($filter && !seems_regex($filter)) $filter = joker_to_regex($filter); $constants = []; foreach ((new ReflectionClass($className))->getConstants() as $k => $v) { if ($filter && !preg_match($filter, $k)) continue; $constants[$k] = $func ? $func($k, $v) : $v; } return $constants; } /** * * Create an array containing object pairs with 'from' and 'to' index values, * based on a unidimensional array containing all indexes. * E.g. [ 2, 1, 3, 0, 2, 4, 8, 7 ] => [ { from: 0, to: 4 }, { from: 7, 8 } ] * @param array $indexes Array of indexes. * @return array Array of object containing simplified indexes. */ function create_ranges_from_indexes(array $indexes): array { $indexes = array_unique($indexes); sort($indexes); $ranges = []; foreach ($indexes as $idx) { $last = count($ranges) - 1; if ($last < 0 || ($ranges[$last]->to !== ($idx - 1))) { $ranges[] = (object) [ 'from' => $idx, 'to' => $idx ]; } else { $ranges[$last]->to = $idx; } } return $ranges; } /** * * Shuffle an associative array, preserving keys. * @param array &$array Input key/value array. * @return array The shuffled array. */ function shuffle_assoc(&$array) { $keys = array_keys($array); shuffle($keys); $new = []; foreach ($keys as $k) $new[$k] = $array[$k]; $array = $new; return true; } /** * * Check if the given value is an integer, whatever it's inside a string or not. * @param mixed $value Value to verify. * @return boolean Is the value a valid integer? */ function is_int_val(mixed $v): bool { if (!is_scalar($v) || is_bool($v)) return false; return (bool) preg_match('/^[0-9]+$/', (string) $v); } /** * * Check if the given value is a float, whatever it's inside a string or not. * @param mixed $value Value to verify. * @return boolean Is the value a valid float? */ function is_float_val(mixed $v): bool { if (!is_scalar($v) || is_bool($v) || !$v) return false; return (bool) preg_match('/^[0-9]*(\.[0-9]+)?$/', (string) $v); } /** * * Check if the given argument is an associative array, aka an array with * non-numerical keys and/or some non-consecutive numerical keys. * @param mixed $arr Array to verify. * @return boolean Is the given array an associative array or not. */ function is_assoc_array(mixed $arr): bool { if (!is_array($arr)) return false; if ([] === $arr) return false; return array_keys($arr) !== range(0, count($arr) - 1); } /** * * Check if the given argument is an array with perfect consecutive * numerical keys or not. * @param mixed $arr Array to verify. * @return boolean Is the given array a numeric array or not. */ function is_numeric_array(mixed $arr): bool { return is_array($arr) && !is_assoc_array($arr); } /** * * Filter an array recursively. * @param array $arr Array to filter. * @param Closure|null $callback Function to execute on each leave. * If the function is null, a boolean * comparision will be made. * @param bool $removeEmptyArrays If true, the array without leaves * will be removed. Else, the empty * array will stay in place. * @return array The array filtered. */ function array_filter_recursive(array $arr, Closure $callback = null, bool $removeEmptyArrays = false): array { foreach ($arr as $key => &$value) { if (is_array($value)) { $value = array_filter_recursive($value, $callback, $removeEmptyArrays); if ($removeEmptyArrays && !(bool) $value) { unset($arr[$key]); } } else { if (!is_null($callback) && !$callback($value, $key)) { unset($arr[$key]); } elseif (!(bool) $value) { unset($arr[$key]); } } } unset($value); return $arr; } /** * * Execute a function recursively on items of an array, * looking for the children using a specific key. * @param array $arr Array of items. * @param string $childrenKey Key to look for on each item, to * find its own children. * @param Closure $func Function to execute. This function will * accept three parameters: * - the given child; * - its depth; * - its parents. * @param int $depth Current depth. Default starting depth * is zero. It's used by the function itself * to increment the depth while walking * diving inside the array. */ function recursive(array $arr, string $childrenKey, Closure $func, int $depth = 0, array $parents = []): void { foreach ($arr as $a) { if ($func($a, $depth, $parents) === false) return; $children = null; if (is_object($a) && property_exists($a, $childrenKey)) $children = $a->$childrenKey; else if (is_array($a) && array_key_exists($childrenKey, $a)) $children = $a[$childrenKey]; if (!is_array($children) || !$children) continue; recursive($children, $childrenKey, $func, $depth + 1, array_merge($parents, [ $a ])); } } /** * * Walk through a recursive object and/or array to find the chained key, * in which keys are separated by $separator (default '.'). * E.g. walk_data([ 'a' => [ 'aa' => 'foo' ] ], 'a/aa', '/') => 'foo' * @param mixed $data Recursive object and/or array to walk through. * @param string $key Chained key. * @param string $separator Keys separator. Default '.'. * @return mixed Found value. Else, null. */ function walk_data(mixed $data, string $key, string $separator = '.'): mixed { if (!is_array($data) && !is_object($data)) return null; foreach (explode($separator, $key) as $k) { if (is_object($data)) { if (!property_exists($data, $k)) return null; $data = $data->$k; } else if (is_array($data)) { if (!array_key_exists($k, $data)) return null; $data = $data[$k]; } } return $data; } /** * * Cast a recursive data, using the pattern given as $data. * E.g. $casted = cast_data($inputData, (object) [ * 'name' => '?str', * 'meta' => (object) [ * 'categories' => '?str[]', * 'url' => '?str', * 'timestamp' => '?int', * ], * ]); * @param array $input Input value. * @param mixed $data Pattern of the data we are waiting for. * @param bool $trim Trim string values or not (default true)? * @param string $separator Chained keys separator (when default one may be * found in one of the key names). * @param string $key Current walking key. Internal use only. * @return mixed Casted data. */ function cast_data(object | array $input, mixed $data, bool $trim = true, string $separator = '§', string $key = ''): mixed { foreach ($data as $k => &$v) { $kk = trim($key . $separator . $k, $separator); if (is_assoc_array($v) || is_object($v)) { cast_data($input, $v, $trim, $separator, $kk); continue; } if (!is_string($v)) continue; $value = walk_data($input, $kk, $separator); $nullable = str_starts_with($v, '?'); $array = str_ends_with($v, '[]'); $type = strtolower(str_replace([ '?', '[]' ], '', $v)); if ($type === 'string') $type = 'str'; else if ($type === 'boolean') $type = 'bool'; else if ($type === 'integer') $type = 'int'; else if ($type === 'decimal' || $type === 'dec') $type = 'float'; if (!is_array($value)) $value = [ $value ]; $value = array_values($value); foreach ($value as $i => $v) { if ($type === 'str') { $v = is_scalar($v) ? (string) $v : ''; if ($trim) $v = trim($v); if ($nullable && !$v) $v = null; $value[$i] = $v; } else if ($type === 'bool') { $value[$i] = ($nullable && ($v === null || $v === '')) ? null : value_seems_true($v); } else if ($type === 'int' || $type === 'float') { $v = is_float_val($v) ? (float) $v : null; if (!$nullable && $v === null) $v = 0; if ($type === 'int' && $v !== null) $v = (int) $v; $value[$i] = $v; } else if ($type === 'page') { $value[$i] = get_page_number(page: $v); } } if (!$array) $value = $value ? array_shift($value) : null; if (!$array && !$nullable && $value === null) { if ($type === 'str') $value = ''; else if ($type === 'bool') $value = false; else if ($type === 'int' || $type === 'float') $value = 0; } $v = $value; } return $data; } /** * * Returns the most contrasted color (white or black), based on a * specified color. * @param string $hex Hexadecimal color. Hash is optional. * @param bool $asRgb Returns the result as an RGB triplet instead of * an hexadecimal color. * @return string|array The hexadecimal color (including leading hash), * or RGB triplet. */ function contrast_color(string $hex, bool $asRgb = false): string | array { list($r, $g, $b) = sscanf(str_replace('#', '', $hex), "%02x%02x%02x"); $yiq = (($r * 299) + ($g * 587) + ($b * 114)) / 1000; $contrasted = ($yiq >= 128) ? '#000000' : '#ffffff'; if (!$asRgb) return $contrasted; return sscanf($contrasted, "#%02x%02x%02x"); } /** * * Uncompress a ZIP file into a destination folder. * @param string $zipPath ZIP file path. * @param string $destPath Folder where the zip should be unzip. * @return bool Success or not. */ function unzip(string $zipPath, string $destPath): bool { $zip = new ZipArchive(); if ($zip->open($zipPath) !== true) return false; $zip->extractTo($destPath); $zip->close(); return true; } /** * * Compress a folder into a ZIP file. * @param string $folderPath Folder which should be compressed. * @param string $zipPath ZIP file destination path. * @param Closure|null $filter Filter function. */ function zip_folder(string $folderPath, string $zipPath, ?Closure $filter = null): void { $folderPath = rtrim(realpath($folderPath), '\\/'); $zip = new ZipArchive(); $zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE); $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folderPath), RecursiveIteratorIterator::LEAVES_ONLY); foreach ($files as $f) { if ($f->isDir()) continue; $filePath = $f->getRealPath(); $relativePath = substr($filePath, strlen($folderPath) + 1); if ($filter !== null && !$filter($filePath, $relativePath)) continue; $zip->addFile($filePath, $relativePath); } $zip->close(); } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending UTILS #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning VISITOR #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Try to guess the browser and the version based on user agent. * @param string $userAgent User agent. * @return object|null Object containing the name and the version of * the bowser. */ function guess_browser_by_user_agent(string $userAgent): ?object { $browsers = [ 'Edge' => 'Edg\/([\d\.]+)', 'Chrome' => 'Chrome\/([\d\.]+)', 'Firefox' => 'Firefox\/([\d\.]+)', 'Safari' => 'Version\/([\d\.]+).*Safari', 'Opera' => 'OPR\/([\d\.]+)', 'IE' => 'MSIE ([\d\.]+)|Trident\/.*rv:([\d\.]+)', ]; foreach ($browsers as $name => $pattern) { if (preg_match("/$pattern/i", $userAgent, $m)) { return (object) [ 'name' => $name, 'version' => $m[1] ?? $m[2] ?? null ]; } } return null; } // ----------------------------------------------------------------------------- // -- {# Ending VISITOR #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning CLI #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ Functions }------------------------------------------------------------- function cli_run(): void { $argv = $_SERVER['argv']; array_shift($argv); $bundleName = defined('MB_CLI_BUNDLE') ? MB_CLI_BUNDLE : ($argv ? array_shift($argv) : null); if (!$bundleName) { cli_actions_man(); cli_error("Missing a bundle: 'core' or 'bundle:{bundle_name}'."); } $bundleName = $bundleName === 'core' ? $bundleName : (preg_match('/^bundle:(?[a-z0-9_.-]+)$/', $bundleName, $m) ? $m['bundle'] : null); if (!$bundleName) { cli_actions_man(); cli_error("Invalid bundle: should be 'core' or 'bundle:{bundle_name}'."); } if (!($actionName = ($argv ? array_shift($argv) : null))) { cli_actions_man(bundleName: $bundleName); cli_error("Missing action name."); } if (!($action = get_cli_action(bundle: $bundleName, name: $actionName))) { cli_actions_man(bundleName: $bundleName); cli_error("Unknown action '{$actionName}'."); } $args = $argv; array_unshift($args, cli_opts($action->opts)); call_user_func_array($action->func, $args); } function cli_opts(array $opts, null | string | array $str = null): object { if ($str === null) $str = $_SERVER['argv']; if (is_array($str)) $str = implode(' ', $str); $replacements = []; if (preg_match_all('/="([^"]+)"/', $str, $matches, PREG_SET_ORDER)) { foreach ($matches as $m) { $replacements[$k = '____oO°_' . count($replacements) . '_°Oo____'] = $m[1]; $str = preg_replace($m[0], '=' . $k, $str, 1); } } $str = ' ' . $str . ' '; $values = []; foreach ($opts as $oName => $oKeys) { $value = false; foreach ($oKeys as $k) { if ($k === '.') $k = $oName; if (strlen($k) === 1) { if (str_contains($str, " -{$k} ")) $value = true; } else if (str_contains($str, " --{$k} ")) { $value = true; } else if (preg_match('/ --' . preg_quote($k) . '=([^ ]*) /', $str, $m)) { $value = $replacements[$m[1]] ?? $m[1]; } } $values[$oName] = $value; } return (object) $values; } function cli_size(): object { if ($size = stored('cli.size')) return $size; stored('cli.size', $size = (object) [ 'width' => (int) exec('tput cols'), 'height' => (int) exec('tput lines'), ]); return $size; } function cli_width(): int { return cli_size()->width; } function cli_height(): int { return cli_size()->height; } function cli_write(string | array $str = '', bool | string | null $end = true): void { if ($end === null) $end = false; if ($end === true) $end = "\n"; if (!is_array($str)) $str = [ $str ]; $str = implode("\n", $str); $str = str_replace('|_ ', mb_chr(9492) . ' ', $str); $str = str_replace('|- ', mb_chr(9500) . ' ', $str); echo $str; if ($end) echo $end; } function cli_prompt(?string $str = null): string { if ($str) cli_write($str, end: false); $handle = fopen('php://stdin', 'r'); $value = fgets($handle); fclose($handle); return trim($value); } function cli_error(string | array $str): void { cli_write("[ERROR] " . $str); cli_write(); exit; } function cli_strip_colors(string $str): string { return preg_replace('/\e\[[0-9;]*[a-zA-Z]/', '', $str); } function cli_table(array $rows, ?string $heading = null): void { $cols = null; foreach ($rows as $row) { if ($cols === null) $cols = array_fill_keys(array_keys($row), 0); foreach ($row as $k => $v) $cols[$k] = max($cols[$k], strlen($k), strlen($v)); } $line = []; foreach ($cols as $col => $size) $line[] = str_replace('-', '─', str_pad('', $size, '-', STR_PAD_RIGHT)); $lines = (object) [ 'simple' => implode('---', array_map(function(string $s): string { return str_replace('─', '-', $s); }, $line)), 'head_sup' => '┌─' . implode('───', $line) . '─┐', 'head_sub' => '├─' . implode('─┬─', $line) . '─┤', 'body_sup' => '┌─' . implode('─┬─', $line) . '─┐', 'body_mid' => '├─' . implode('─┼─', $line) . '─┤', 'body_sub' => '└─' . implode('─┴─', $line) . '─┘', ]; $s = []; if ($heading) { $s[] = $lines->head_sup; $s[] = '│ ' . str_pad($heading, strlen($lines->simple), ' ', STR_PAD_BOTH) . ' │'; $s[] = $lines->head_sub; } else { $s[] = $lines->body_sup; } $head = []; foreach ($cols as $col => $size) $head[] = str_pad(ucfirst($col), $size, ' ', STR_PAD_RIGHT); $s[] = '│ ' . implode(' │ ', $head) . ' │'; $s[] = $lines->body_mid; foreach ($rows as $row) { $r = []; foreach ($cols as $col => $size) $r[] = str_pad($row[$col], $size, ' ', STR_PAD_RIGHT); $s[] = '│ ' . implode(' │ ', $r) . ' │'; } $s[] = $lines->body_sub; cli_write(); echo implode("\n", $s) . "\n\n"; } // ---{ Actions }--------------------------------------------------------------- function get_cli_actions(): array { return cfg('~@core.cli.actions') ?: []; } function get_cli_action(string $bundle, string $name): ?object { return get_cli_actions()["{$bundle}.{$name}"] ?? null; } function register_cli_action(string $bundle, string $name, Closure $func, array $opts = [], ?string $description = null): void { $actions = get_cli_actions(); $actions["{$bundle}.{$name}"] = (object) [ 'bundle' => $bundle, 'name' => $name, 'description' => $description, 'func' => $func, 'opts' => $opts, ]; cfg('@core.cli.actions', $actions); } function cli_actions_man(?string $bundleName = null): void { cli_table( heading: "Available CLI Actions", rows: array_values(array_filter(array_map(function(object $a) use ($bundleName): ?array { $cols = []; if ($bundleName !== null) { if ($a->bundle !== $bundleName) return null; } else { $cols['bundle'] = $a->bundle; } $cols['name'] = $a->name; $cols['description'] = $a->description; return $cols; }, get_cli_actions()))), ); } // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending CLI #} -- // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // -- {# Beginning BOOTSTRAP #} -- // ----------------------------------------------------------------------------- // ============================================================================= // ---{ PHP Configuration }----------------------------------------------------- ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); ini_set('html_errors', '0'); error_reporting(E_ALL); // ============================================================================= // ---{ Constants }------------------------------------------------------------- define('MB_ROOT_DIR', __DIR__); define('MB_FILENAME', basename(__FILE__)); define('MB_DIRECT_ACCESS', ltrim(get_relative_url(false), '/') === MB_FILENAME); define('MB_SCRIPT_START', microtime(true)); define('MB_DEFAULT_TIMEZONE', ($tz = (new DateTime())->getTimezone()) ? $tz->getName() : null); define('MB_CLI', strpos(php_sapi_name(), 'cli') !== false); define('MB_CLI_SELF', MB_CLI && (basename($_SERVER['SCRIPT_NAME'] ?? '') === MB_FILENAME)); // ============================================================================= // ---{ Functions }------------------------------------------------------------- /** * * Boot the application, with the given context: * - 'web' should be used from 'index.php'; * - 'cli' will be used automatically when calling the framework's * file from command line; * - 'dev' will be used automatically when openning the framework's file * directly from the web browser. * @param string $ctx Context name */ function boot(string $ctx = 'web'): void { if (!defined('MB_VENDOR_AUTOLOAD')) define('MB_VENDOR_AUTOLOAD', get_path('vendor', 'autoload.php')); if (MB_VENDOR_AUTOLOAD && is_file(MB_VENDOR_AUTOLOAD)) require_once MB_VENDOR_AUTOLOAD; load_config(); date_default_timezone_set(get_app_timezone()->getName()); include_files('helpers'); include_files('library'); include_files('entities'); include_files('queries'); Microbe_Entity::initAll(); include_files('init'); dispatch('init'); if ($ctx === 'dev') { if ($taskUid = get('task')) { dispatch('before_tasks'); $taskArgs = get(); unset($taskArgs['task']); execute_task(taskUid: $taskUid, ctx: 'web', args: $taskArgs); exit; } dispatch('before_dev'); if (!filter('dev_console_override', false)) dev_console(); exit; } if ($ctx === 'cli') { if (defined('MB_EXEC_TASK') && MB_EXEC_TASK) { dispatch('before_tasks'); if (!($task = get_registered_task(uid: MB_EXEC_TASK))) die("Invalid Task UID.\n"); execute_task(taskUid: $task->uid, ctx: 'cli'); exit; } dispatch('before_cli'); include_files('console'); cli_run(); exit; } if ($ctx === 'web') { dispatch('before_api_endpoints'); include_files('api'); dispatch('before_routes'); dispatch('before_api_routes'); declare_api_routes(); dispatch('before_ctrl_routes'); include_root_files('ctrl'); foreach (get_bundles_files('ctrl') as $f) { clear_route_filters(); require_once $f; } if (cfg('~@core.initialized') && !cfg('~@core.routes.found')) { if (!call_fallback_route()) throw_404(); } exit; } } // ============================================================================= // ---{ Boot, when the framework is called directly }--------------------------- if (MB_CLI_SELF) boot('cli'); else if (MB_DIRECT_ACCESS) boot('dev'); // ============================================================================= // ----------------------------------------------------------------------------- // -- {# Ending BOOTSTRAP #} -- // ----------------------------------------------------------------------------- // ============================================================================= function __get_samples_dirs(): array { return [ 'bundles', 'bundles/default', 'bundles/default/assets', 'bundles/default/assets/img', 'bundles/default/assets/js', 'bundles/default/assets/styl', 'bundles/default/entities', 'bundles/default/intl', 'bundles/default/migrations', 'bundles/default/templates', 'bundles/default/templates/emails', 'bundles/default/templates/emails/layout', 'bundles/default/templates/layout', 'bundles/default/templates/system', 'data', ]; } function __get_samples_files(): array { return [ '.gitignore' => 'CkVOVgo=', '.htaccess' => 'PElmTW9kdWxlIHJld3JpdGVfbW9kdWxlPgoKICAgIFJld3JpdGVFbmdpbmUgT24KCiAgICAjIE1haW50ZW5hbmNlIG1vZGU6CiAgICAjIEFuIGVtcHR5ICIvTUFJTlRFTkFOQ0UiIGZpbGUgbG9jYXRlZCBhdCByb290CiAgICAjIHdpbGwgYWxsb3dzIHVzIHRvIGxvYWQgIi90cGwvc3lzdGVtL21haW50ZW5hbmNlLnBocCIuCiAgICBSZXdyaXRlQ29uZCAle0RPQ1VNRU5UX1JPT1R9L01BSU5URU5BTkNFIC1mCiAgICBSZXdyaXRlQ29uZCAle1JFUVVFU1RfVVJJfSAhXi9hc3NldHMoLy4qKT8kCiAgICBSZXdyaXRlQ29uZCAle1JFUVVFU1RfVVJJfSAhXi9taWNyb2JlKFwuW14vLl0rKT8ucGhwKFw/LiopPyQKICAgIFJld3JpdGVSdWxlICJeLiokIiAibWFpbnRlbmFuY2UuaHRtbCIgW0xdCgogICAgIyBGb3JiaWRkZW4gYWNjZXNzCiAgICBSZXdyaXRlQ29uZCAle1NDUklQVF9GSUxFTkFNRX0gLWYKICAgIFJld3JpdGVSdWxlICJeXC5naXQoLy4qKT8kIiAiLSIgW0ZdCiAgICBSZXdyaXRlUnVsZSAiXi4qXC4odHh0fGxvZ3xzcWx8aW5pfGNzdnx0c3Z8anNvbikkIiAiLSIgW0ZdCiAgICBSZXdyaXRlUnVsZSAiXihFTlZ8Y29tcG9zZXJcLi4qfChMSUNFTlNFfFJFQURNRSkoXC4uKik/KSQiICItIiBbRl0KICAgIFJld3JpdGVSdWxlICJeKGN0cmx8aGVscGVyc3xxdWVyaWVzfHRwbCkoLy4qKT8kIiAiLSIgW0ZdCiAgICBSZXdyaXRlUnVsZSAiXnZlbmRvcigvLiopPyQiICItIiBbRl0KCiAgICAjIEV2ZXJ5dGhpbmcgd2hpY2ggZG9lc24ndCBleGlzdHMgZ29lcyB0byB0aGUgaW5kZXgKICAgIFJld3JpdGVDb25kICV7U0NSSVBUX0ZJTEVOQU1FfSAhLWYKICAgIFJld3JpdGVDb25kICV7U0NSSVBUX0ZJTEVOQU1FfSAhLWQKICAgIFJld3JpdGVDb25kICV7U0NSSVBUX0ZJTEVOQU1FfSAhLWwKICAgIFJld3JpdGVSdWxlICJeLiokIiBpbmRleC5waHAgW1FTQV0KCjwvSWZNb2R1bGU+', 'bundles/default/assets/js/app.js' => 'CihmdW5jdGlvbigkKSB7CgogICAgY29uc3QgXyA9IHsKCiAgICAgICAgZGVmYXVsdDogewoKICAgICAgICAgICAgaW5pdCgpIHt9LAoKICAgICAgICB9LAoKICAgIH07CgogICAgZm9yIChsZXQgZiBpbiBfKSBpZiAoKF9bZl0gaW5zdGFuY2VvZiBPYmplY3QpICYmIF9bZl0uaGFzT3duUHJvcGVydHkoImluaXQiKSkgX1tmXS5pbml0KCk7Cgp9KShqUXVlcnkpOwo=', 'bundles/default/assets/styl/styles.styl' => 'CmMgPSAjMDBmZjk5Cgo6cm9vdAogIGZvbnQtc2l6ZSAxNHB4Cgpib2R5CiAgbWFyZ2luIDAKICBwYWRkaW5nIDFyZW0KICBiYWNrZ3JvdW5kICMxMTEKICBjb2xvciAjZWVlCiAgZm9udC1mYW1pbHkgbW9ub3NwYWNlCgpib2R5LCB0ZCwgdGgKICBmb250LXNpemUgMXJlbQoKaDEKICBtYXJnaW4gMCAwIDFyZW0gMAogIHRleHQtdHJhbnNmb3JtIHVwcGVyY2FzZQogIGZvbnQtd2VpZ2h0IGJvbGQKICBmb250LXNpemUgMS41cmVtCiAgc21hbGwKICAgIHRleHQtdHJhbnNmb3JtIG5vbmUKICAgIGZvbnQtd2VpZ2h0IG5vcm1hbAogICAgZm9udC1zaXplIDFyZW0KCmEKICBjb2xvciBjCiAgdGV4dC1kZWNvcmF0aW9uIHVuZGVybGluZQogICY6aG92ZXIKICAgIGNvbG9yIHdoaXRlCgp0YWJsZQogIGJvcmRlci1jb2xsYXBzZSBjb2xsYXBzZQogIGJvcmRlciAzcHggc29saWQgYwogIHRoLCB0ZAogICAgcGFkZGluZyA1cHgKICAgIGJvcmRlciAxcHggc29saWQgIzMzMwo=', 'bundles/default/ctrl.php' => 'PD9waHAKCnJvdXRlKCcvJywgZnVuY3Rpb24oKTogdm9pZAp7CiAgICBpZiAoJGxvY2FsZUNvZGUgPSBnZXQoJ2xhbmcnKSkgewogICAgICAgIHNldF9jdXJyZW50X2FwcF9sb2NhbGUoJGxvY2FsZUNvZGUpOwogICAgICAgIHJlZGlyZWN0KCc/LycpOwogICAgfQoKICAgIHJlbmRlcignaG9tZScsIFsgJ192aWV3JyA9PiAnaG9tZScgXSk7Cn0pOwoKcm91dGUoJy9yb2NrcycsIGZ1bmN0aW9uKCk6IHZvaWQKewogICAgcmVuZGVyKCdyb2NrcycsIFsKICAgICAgICAnX3ZpZXcnID0+ICdyb2NrcycsCiAgICAgICAgJ3JvY2tzJyA9PiBnZXRfcm9ja3MoKSwKICAgIF0pOwp9KTsKCnJvdXRlKCcvcm9ja3MvYWRkJywgZnVuY3Rpb24oKTogdm9pZAp7CiAgICBhZGRfcm9jaygKICAgICAgICBnZXRfcmFuZG9tX3JvY2tfbmlja19uYW1lKCksCiAgICAgICAgZ2V0X3JhbmRvbV9yb2NrX3NpemUoKSwKICAgICAgICBnZXRfcmFuZG9tX3JvY2tfY29sb3IoKSwKICAgICk7CgogICAgcmVkaXJlY3QoJy9yb2NrcycpOwp9KTsKCnJvdXRlKCcvcm9ja3MvZW1wdHknLCBmdW5jdGlvbigpOiB2b2lkCnsKICAgIGRlbGV0ZV9hbGxfcm9ja3MoKTsKICAgIHJlZGlyZWN0KCcvcm9ja3MnKTsKfSk7Cgpyb3V0ZSgnL3JvY2tzLzxpZD4vZGVsZXRlJywgZnVuY3Rpb24oaW50ICRpZCk6IHZvaWQKewogICAgaWYgKCEoJHJvY2sgPSBnZXRfcm9jaygkaWQpKSkgdGhyb3dfNDA0KCk7CiAgICAkcm9jay0+ZGVsZXRlKCk7CiAgICByZWRpcmVjdCgnL3JvY2tzJyk7Cn0pOwo=', 'bundles/default/entities/rock.php' => 'PD9waHAKCmNsYXNzIFJvY2sgZXh0ZW5kcyBNaWNyb2JlX0VudGl0eQp7CgogICAgLy8gLS0teyBEZWZpbml0aW9uIH0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHB1YmxpYyBjb25zdCBDUlVEX01FVEhPRCA9ICdkYic7CiAgICBwdWJsaWMgY29uc3QgVEFCTEVfTkFNRSAgPSAncm9ja3MnOwoKICAgIHByb3RlY3RlZCBhcnJheSAkZmllbGRzID0gWwogICAgICAgIFsgJ25hbWUnID0+ICdpZCcsICAgICAgICAgJ3R5cGUnID0+IE1pY3JvYmVfRW50aXR5OjpUX0lOVCAgICAgIF0sCiAgICAgICAgWyAnbmFtZScgPT4gJ3VpZCcsICAgICAgICAndHlwZScgPT4gTWljcm9iZV9FbnRpdHk6OlRfU1RSSU5HICAgXSwKICAgICAgICBbICduYW1lJyA9PiAnY3JlYXRlZF9hdCcsICd0eXBlJyA9PiBNaWNyb2JlX0VudGl0eTo6VF9EQVRFVElNRSBdLAogICAgICAgIFsgJ25hbWUnID0+ICd1cGRhdGVkX2F0JywgJ3R5cGUnID0+IE1pY3JvYmVfRW50aXR5OjpUX0RBVEVUSU1FIF0sCiAgICAgICAgWyAnbmFtZScgPT4gJ25pY2tfbmFtZScsICAndHlwZScgPT4gTWljcm9iZV9FbnRpdHk6OlRfU1RSSU5HICAgXSwKICAgICAgICBbICduYW1lJyA9PiAnc2l6ZScsICAgICAgICd0eXBlJyA9PiBNaWNyb2JlX0VudGl0eTo6VF9TVFJJTkcgICBdLAogICAgICAgIFsgJ25hbWUnID0+ICdjb2xvcicsICAgICAgJ3R5cGUnID0+IE1pY3JvYmVfRW50aXR5OjpUX1NUUklORyAgIF0sCiAgICBdOwoKICAgIC8vIC0tLXsgRW50aXR5IE1ldGhvZHMgfS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHQoJ1RoZSB7aWRlbnRpdHl9IFJvY2snLCBbICdpZGVudGl0eScgPT4gaW1wbG9kZSgnICcsIGFycmF5X2ZpbHRlcihbCiAgICAgICAgICAgIGltcGxvZGUoJyAnIC4gdCgnYW5kJykgLiAnICcsIGFycmF5X2ZpbHRlcihbIHVjZmlyc3QoJHRoaXMtPmdldFNpemUoKSA/OiAnJyksIHVjd29yZHMoc3RyX3JlcGxhY2UoJ18nLCAnICcsICR0aGlzLT5nZXRDb2xvcigpID86ICcnKSkgXSkpLAogICAgICAgICAgICAkdGhpcy0+Z2V0Tmlja05hbWUoKSwKICAgICAgICBdKSkgXSk7CiAgICB9Cgp9Cg==', 'bundles/default/helpers.php' => 'PD9waHAKCmZ1bmN0aW9uIGdldF9yYW5kb21fcm9ja19uaWNrX25hbWUoKTogc3RyaW5nCnsKICAgICRuYW1lcyA9IFsgJ0phbWVzJywgJ01pY2hhZWwnLCAnUm9iZXJ0JywgJ0pvaG4nLCAnRGF2aWQnLCAnV2lsbGlhbScsICdSaWNoYXJkJywgJ0pvc2VwaCcsICdUaG9tYXMnIF07CiAgICByZXR1cm4gJG5hbWVzW210X3JhbmQoMCwgY291bnQoJG5hbWVzKSAtIDEpXTsKfQoKZnVuY3Rpb24gZ2V0X3JvY2tzX3NpemVzKCk6IGFycmF5IHsgcmV0dXJuIFsgJ2h1Z2UnLCAnYmlnJywgJ21lZGl1bScsICdzbWFsbCcsICd0aW55JyBdOyB9CmZ1bmN0aW9uIGlzX2FsbG93ZWRfcm9ja19zaXplKHN0cmluZyAkc2l6ZSk6IGJvb2wgeyByZXR1cm4gaW5fYXJyYXkoJHNpemUsIGdldF9yb2Nrc19zaXplcygpKTsgfQpmdW5jdGlvbiBnZXRfcmFuZG9tX3JvY2tfc2l6ZSgpOiBzdHJpbmcgeyByZXR1cm4gKCRzaXplcyA9IGdldF9yb2Nrc19zaXplcygpKVttdF9yYW5kKDAsIGNvdW50KCRzaXplcykgLSAxKV07IH0KCmZ1bmN0aW9uIGdldF9yb2Nrc19jb2xvcnMoKTogYXJyYXkgeyByZXR1cm4gWyAnZGFya19ncmV5JywgJ2dyZXknLCAnbGlnaHRfZ3JleScgXTsgfQpmdW5jdGlvbiBpc19hbGxvd2VkX3JvY2tfY29sb3Ioc3RyaW5nICRjb2xvcik6IGJvb2wgeyByZXR1cm4gaW5fYXJyYXkoJGNvbG9yLCBnZXRfcm9ja3NfY29sb3JzKCkpOyB9CmZ1bmN0aW9uIGdldF9yYW5kb21fcm9ja19jb2xvcigpOiBzdHJpbmcgeyByZXR1cm4gKCRjb2xvcnMgPSBnZXRfcm9ja3NfY29sb3JzKCkpW210X3JhbmQoMCwgY291bnQoJGNvbG9ycykgLSAxKV07IH0K', 'bundles/default/init.php' => 'PD9waHAKCnJlZ2lzdGVyX2N1c3RvbV9lcnJvcl9oYW5kbGVyKDQwNCwgZnVuY3Rpb24oP3N0cmluZyAkbXNnKTogdm9pZAp7CiAgICByZW5kZXIoJ3N5c3RlbS80MDQnLCBbICdtc2cnID0+ICRtc2cgXSk7Cn0pOwoKcmVnaXN0ZXJfY3VzdG9tX2Vycm9yX2hhbmRsZXIoNTAwLCBmdW5jdGlvbig/b2JqZWN0ICRlcnJvcik6IHZvaWQKewogICAgcmVuZGVyKCdzeXN0ZW0vNTAwJywgWyAnZXJyb3InID0+ICRlcnJvciBdKTsKfSwgZW52aXJvbm1lbnRzOiBbICdzdGFnaW5nJywgJ3Byb2QnIF0pOwoKbGlzdGVuKCdiZWZvcmVfZmlyc3RfcmVuZGVyJywgZnVuY3Rpb24oKTogdm9pZAp7CiAgICBzZXRfdGVtcGxhdGVfdmFycyhbCiAgICAgICAgJ192aWV3JyA9PiBudWxsLAogICAgXSk7Cn0pOwo=', 'bundles/default/intl/fre-FRA.xml' => 'PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdHJpbmdzPgogIDxzdHI+PG8+RW5nbGlzaCB0ZXh0PC9vPjx0PkNoYcOubmUgZW4gZnJhbsOnYWlzPC90Pjwvc3RyPgo8L3N0cmluZ3M+Cg==', 'bundles/default/migrations/000-down.sql' => 'CkRST1AgVEFCTEUgSUYgRVhJU1RTIHJvY2tzOwo=', 'bundles/default/migrations/000-up.sql' => 'CkNSRUFURSBUQUJMRSByb2NrcyAoCiAgICBpZCBJTlRFR0VSIFVOU0lHTkVEIFBSSU1BUlkgS0VZIEFVVE9fSU5DUkVNRU5ULAogICAgdWlkIFZBUkNIQVIoNjQpIE5PVCBOVUxMLAogICAgY3JlYXRlZF9hdCBEQVRFVElNRSBOT1QgTlVMTCwKICAgIHVwZGF0ZWRfYXQgREFURVRJTUUgTk9UIE5VTEwsCiAgICBuaWNrX25hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgc2l6ZSBWQVJDSEFSKDMyKSwKICAgIGNvbG9yIFZBUkNIQVIoMzIpLAoKICAgIElOREVYIHJvY2tzX3VpZF9pZHggKHVpZCksCiAgICBJTkRFWCByb2Nrc19uaWNrX25hbWVfaWR4IChuaWNrX25hbWUpLAogICAgSU5ERVggcm9ja3Nfc2l6ZV9pZHggKHNpemUpLAogICAgSU5ERVggcm9ja3NfY29sb3JfaWR4IChjb2xvciksCiAgICBJTkRFWCByb2Nrc19zaXplX2NvbG9yX2lkeCAoc2l6ZSwgY29sb3IpCik7Cg==', 'bundles/default/queries.php' => 'PD9waHAKCmZ1bmN0aW9uIGFkZF9yb2NrKHN0cmluZyAkbmlja05hbWUsID9zdHJpbmcgJHNpemUgPSBudWxsLCA/c3RyaW5nICRjb2xvciA9IG51bGwpOiBSb2NrCnsKICAgICRyb2NrID0gKG5ldyBSb2NrKCkpCiAgICAgICAgLT5zZXROaWNrTmFtZSgkbmlja05hbWUpCiAgICAgICAgLT5zZXRTaXplKCRzaXplKQogICAgICAgIC0+c2V0Q29sb3IoJGNvbG9yKQogICAgICAgIC0+c2F2ZSgpOwogICAgcmV0dXJuICRyb2NrOwp9CgpmdW5jdGlvbiBnZXRfcm9jayhvYmplY3QgfCBpbnQgfCBzdHJpbmcgJHJvY2spOiA/Um9jayB7IHJldHVybiBSb2NrOjpmZXRjaE9uZU1peGVkKCRyb2NrKTsgfQpmdW5jdGlvbiBnZXRfcm9ja19ieV9uaWNrX25hbWUoc3RyaW5nICRuaWNrTmFtZSk6ID9Sb2NrIHsgcmV0dXJuIFJvY2s6OmZldGNoT25lQnlOaWNrTmFtZSgkbmlja05hbWUpOyB9CmZ1bmN0aW9uIGdldF9yb2Nrc19ieV9zaXplKHN0cmluZyAkc2l6ZSk6IGFycmF5IHsgcmV0dXJuIFJvY2s6OmZldGNoQWxsQnlTaXplKCRzaXplKTsgfQoKZnVuY3Rpb24gZ2V0X3JvY2tzKGludCAkb2Zmc2V0ID0gMCwgP2ludCAkbGltaXQgPSBudWxsKTogYXJyYXkKewogICAgcmV0dXJuIFJvY2s6OmZldGNoQWxsKGZ1bmN0aW9uKE1pY3JvYmVfUXVlcnlfQnVpbGRlciAkcWIpIHVzZSAoJG9mZnNldCwgJGxpbWl0KTogdm9pZAogICAgewogICAgICAgIGlmICgkbGltaXQpICRxYi0+b2Zmc2V0KCRvZmZzZXQpLT5saW1pdCgkbGltaXQpOwogICAgICAgICRxYgogICAgICAgICAgICAtPmNsZWFyT3JkZXIoKQogICAgICAgICAgICAtPm9yZGVyKCdzaXplJywgJ0RFU0MnKQogICAgICAgICAgICAtPm9yZGVyKCdpZCcsICdBU0MnKTsKICAgIH0pOwp9CgpmdW5jdGlvbiBjb3VudF9yb2NrcygpOiBpbnQgeyByZXR1cm4gUm9jazo6Y291bnRBbGwoKTsgfQoKZnVuY3Rpb24gZGVsZXRlX2FsbF9yb2NrcygpOiB2b2lkIHsgZGIoJ3JvY2tzJyktPnRydW5jYXRlKCk7IH0K', 'bundles/default/templates/emails/layout/foot.phtml' => 'CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICA8YSBocmVmPSI8P3BocCBfdXJsKCcvJywgaG9zdDogdHJ1ZSk7ID8+IiB0YXJnZXQ9Il9ibGFuayI+R28gVG8gU2l0ZSBXaXRob3V0IE5hbWU8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', 'bundles/default/templates/emails/layout/head.phtml' => 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCiAgPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogICAgPHRpdGxlPiA8P3BocCBlY2hvICRzdWJqZWN0OyA/PiA8L3RpdGxlPgogIDwvaGVhZD4KCiAgPGhlYWQ+CiAgICA8c3R5bGU+CiAgICAgIC5nbG9iYWwgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDMwcHggMDsgYmFja2dyb3VuZDogIzE5MTkxOTsgfQogICAgICAud3JhcCB7IG1hcmdpbjogMCBhdXRvOyBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDMwcHgpOyB3aWR0aDogNjUwcHg7IGJhY2tncm91bmQ6ICMyNzI3Mjc7IGNvbG9yOiAjZWVlOyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogLjk1cmVtOyB9CiAgICAgIC5oZWFkIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMGZmNzI7IH0KICAgICAgLmJyYW5kIHsgZGlzcGxheTogYmxvY2s7IHBhZGRpbmc6IDIwcHggMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAgICAgLmJyYW5kID4gc3Ryb25nIHsgZGlzcGxheTogYmxvY2s7IGNvbG9yOiAjMDBmZjcyOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogLjEyNXJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMS43NXJlbTsgdHJhbnNpdGlvbjogbGV0dGVyLXNwYWNpbmcgLjI1czsgfQogICAgICAuYnJhbmQgPiBzcGFuIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogNXB4IDAgMCAwOyBjb2xvcjogIzc3NzsgZm9udC1zaXplOiAuOXJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAgICAgLmJyYW5kID4gaW1nIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOyB3aWR0aDogMTAwcHg7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMjVzOyB9CiAgICAgIC5icmFuZDpob3ZlciA+IHN0cm9uZyB7IGxldHRlci1zcGFjaW5nOiAuMjVyZW07IH0KICAgICAgLmJyYW5kOmhvdmVyID4gaW1nIHsgdHJhbnNmb3JtOiBzY2FsZVgoLTEwMCUpOyB9CiAgICAgIC5mb290IHsgcGFkZGluZzogMjBweDsgYmFja2dyb3VuZDogIzAwZmY3MjExOyBib3JkZXItdG9wOiAxcHggc29saWQgIzAwZmY3MjsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IC45cmVtOyB9CiAgICAgIC5mb290ID4gYSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogNHB4IDZweDsgYmFja2dyb3VuZDogIzAwZmY3MjsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogIzE5MTkxOTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDsgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMjVzOyB9CiAgICAgIC5mb290ID4gYTpob3ZlciB7IGJhY2tncm91bmQ6IHdoaXRlOyB9CiAgICAgIC5jb250ZW50IHsgcGFkZGluZzogMzVweDsgfQogICAgICAuY3RhIHsgbWFyZ2luOiAyNXB4IDA7IHBhZGRpbmc6IDMwcHg7IGJhY2tncm91bmQ6ICMwMGZmNzIxMTsgYm9yZGVyLXJhZGl1czogNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAgICAgLmN0YSA+IGEgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDE1cHggMjBweDsgYmFja2dyb3VuZDogIzAwZmY3MjsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogIzE5MTkxOTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxLjI1cmVtOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4yNXM7IH0KICAgICAgLmN0YSA+IGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiB3aGl0ZTsgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iZ2xvYmFsIj4KICAgICAgPGRpdiBjbGFzcz0id3JhcCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgICA8YSBocmVmPSI8P3BocCBfdXJsKCcvJywgaG9zdDogdHJ1ZSk7ID8+IiBjbGFzcz0iYnJhbmQiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgPCEtLSA8aW1nIHNyYz0iPD9waHAgX3VybCgnL2Fzc2V0cy9pbWcvbG9nby5wbmcnLCBob3N0OiB0cnVlKTsgPz4iIGFsdD0iIiByZWw9Im5vdHJhY2siPiAtLT4KICAgICAgICAgICAgPHN0cm9uZz5TaXRlIFdpdGhvdXQgTmFtZTwvc3Ryb25nPgogICAgICAgICAgICA8c3Bhbj48P3BocCBfdCgiU2VudGVuY2UgRGVzY3JpYmluZyBUaGlzIFNpdGUiKTsgPz48L3NwYW4+CiAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+Cg==', 'bundles/default/templates/home.phtml' => 'PD9waHAgbGF5b3V0KCdsYXlvdXQvaGVhZCcpOyA/PgoKPGgxPkhpIFRoZXJlLjwvaDE+CjxwPllvdSBjYW4gbWFuYWdlIHNvbWUgdGhpbmdzIGFib3V0IHlvdXIgYXBwLCBhY2Nlc3NpbmcgPGEgaHJlZj0iPD9waHAgX3VybCgnLycgLiAoJG4gPSBnZXRfbWljcm9iZV9maWxlX25hbWUoKSkpOyA/PiI+PD9waHAgZWNobyAkbjsgPz48L2E+LjwvcD4KPHA+SWYgdGhlIGRhdGFiYXNlIGlzIHJlYWR5LCB5b3UgY2FuIHRyeSB0byBwbGF5IHdpdGggc29tZSA8YSBocmVmPSI8P3BocCBfdXJsKCcvcm9ja3MnKTsgPz4iPnJvY2tzPC9hPi4uLjwvcD4KCjw/cGhwIGxheW91dCgnbGF5b3V0L2Zvb3QnKTsgPz4=', 'bundles/default/templates/layout/foot.phtml' => 'CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTMuNy4xLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEyNTYtL0pxVDNTUWZhd1Jjdi9CSUhQVGhrQnZzME9FdnRGRm1xUEYvbFlJL0N4bz0iIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogICAgPD9waHAgaW5jbHVkZV9hc3NldCgnQGRlZmF1bHQvanMvYXBwLmpzJyk7ID8+CgogIDwvYm9keT4KPC9odG1sPgo=', 'bundles/default/templates/layout/head.phtml' => 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCiAgPGhlYWQ+CgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCiAgICA8IS0tIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iPD9waHAgX3VybCgnL2Fzc2V0cy9kZWZhdWx0L2ltZy9mYXZpY29uLnBuZycpOyA/PiI+IC0tPgoKICAgIDw/cGhwIGluY2x1ZGVfYXNzZXQoJ0BkZWZhdWx0L2Nzcy9zdHlsZXMuY3NzJyk7ID8+CgogICAgPHRpdGxlPiA8P3BocCBlY2hvIGNmZygnbmFtZScpIC4gJyB8ICcgLiBlc2MoJHBhZ2VfdGl0bGUgPz8gdCgiU2VudGVuY2UgRGVzY3JpYmluZyBUaGlzIFNpdGUiKSk7ID8+IDwvdGl0bGU+CgogIDwvaGVhZD4KCiAgPGJvZHk+Cg==', 'bundles/default/templates/rocks.phtml' => 'PD9waHAgbGF5b3V0KCdsYXlvdXQvaGVhZCcpOyA/PgoKPGgxPgogIExldCdzIFJvY2suCiAgPHNtYWxsPm9yIDxhIGhyZWY9Ijw/cGhwIF91cmwoJy8nKTsgPz4iPmdvIGJhY2sgdG8gaG9tZTwvYT48L3NtYWxsPgo8L2gxPgoKPHVsPgogIDxsaT48YSBocmVmPSI8P3BocCBfdXJsKCcvcm9ja3MvYWRkJyk7ID8+Ij5BZGQgYSByb2NrPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9Ijw/cGhwIF91cmwoJy9yb2Nrcy9lbXB0eScpOyA/PiI+RGVsZXRlIGFsbCByb2NrczwvYT48L2xpPgo8L3VsPgoKPD9waHAgaWYgKCRyb2Nrcyk6ID8+CiAgPHRhYmxlPgogICAgPHRoZWFkPiA8dHI+IDx0aD4jPC90aD4gPHRoPkRpc3BsYXkgTmFtZTwvdGg+IDx0aD5OaWNrIE5hbWU8L3RoPiA8dGg+U2l6ZTwvdGg+IDx0aD5Db2xvcjwvdGg+IDx0aD48L3RoPiA8L3RyPiA8L3RoZWFkPgogICAgPHRib2R5PgogICAgICA8P3BocCBmb3JlYWNoICgkcm9ja3MgYXMgJHJvY2spOiA/PgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRyb2NrLT5nZXRJZCgpOyA/PjwvdGQ+CiAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2MoJHJvY2stPmdldERpc3BsYXlOYW1lKCkpOyA/PjwvdGQ+CiAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2MoJHJvY2stPmdldE5pY2tOYW1lKCkpOyA/PjwvdGQ+CiAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2MoJHJvY2stPmdldFNpemUoKSA/OiAnTi9BJyk7ID8+PC90ZD4KICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzYygkcm9jay0+Z2V0Q29sb3IoKSA/OiAnTi9BJyk7ID8+PC90ZD4KICAgICAgICAgIDx0ZD48YSBocmVmPSI8P3BocCBfdXJsKCcvcm9ja3MvJyAuICRyb2NrLT5nZXRJZCgpIC4gJy9kZWxldGUnKTsgPz4iPkRlbGV0ZTwvYT4KICAgICAgICA8L3RyPgogICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8P3BocCBlbHNlOiA/PgogIDxwPk5vIHJvY2sgY3JlYXRlZCB5ZXQuPC9wPgo8P3BocCBlbmRpZjsgPz4KCjw/cGhwIGxheW91dCgnbGF5b3V0L2Zvb3QnKTsgPz4=', 'bundles/default/templates/system/404.phtml' => 'PD9waHAgbGF5b3V0KCdsYXlvdXQvaGVhZCcpOyA/PgoKNDA0IE5vdCBGb3VuZAoKPD9waHAgbGF5b3V0KCdsYXlvdXQvZm9vdCcpOyA/Pg==', 'bundles/default/templates/system/500.phtml' => 'PD9waHAgbGF5b3V0KCdsYXlvdXQvaGVhZCcpOyA/PgoKNTAwIEludGVybmFsIEVycm9yCgo8P3BocCBsYXlvdXQoJ2xheW91dC9mb290Jyk7ID8+', 'index.php' => 'PD9waHAKCmRlZmluZSgnTUJfSEFORExFX0VSUk9SUycsIHRydWUpOwoKcmVxdWlyZV9vbmNlIF9fRElSX18gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ21pY3JvYmUucGhwJzsKYm9vdCgpOwo=', ]; } // =============================================================================