Base64 в PHP
Base64
превращает бинарные данные (картинки, файлы, видео) в текст, используя 64
символа, чтобы их можно было отправлять по интернету без повреждений. Base64
решает проблему передачи бинарных данных через каналы, предназначенные только для текста. Это делает возможным безопасную отправку файлов, изображений и другого контента через интернет. Это упрощает написание программ, позволяя интегрировать медиа прямо в код или электронные письма, без необходимости
прибегать к сложным методам обработки и передачи файлов.
Что такое Base64 и как это работает
Представьте, что вы хотите отправить своему другу в электронном письме очень важное фото вашего питомца. Но вот незадача: почтовая система не позволяет вставлять изображения напрямую, или вы беспокоитесь, что изображение может повредиться при отправке. Вот тут на помощь приходит Base64
.
- Вы берете фотографию и с помощью специальной программы или веб-сервиса преобразуете ее в текст, используя алгоритм Base64. Этот алгоритм берет бинарные данные вашего изображения и превращает их в текст, состоящий из латинских букв, цифр и нескольких специальных символов. Теперь у вас есть длинная строка текста, которая представляет собой ваше изображение
- Вы копируете получившийся текст и вставляете его в тело электронного письма. Теперь вы можете отправить его своему другу без боязни, что изображение повредится или не отобразится
- Ваш друг получает письмо, копирует текст из него и с помощью той же программы или сервиса преобразует текст обратно в изображение. Вуаля! Теперь у вашего друга есть точная копия фотографии вашего питомца, без каких-либо повреждений
Base64
это техника кодирования, которая превращает бинарные данные в текстовый формат, используя 64
различных символа кодировки ASCII
. Эти символы включают в себя 26
прописных и 26
строчных латинских букв, 10
цифр, а также два дополнительных символа +
и /
. В результате, любой файл, будь то изображение, аудио, видео или просто бинарный файл, может быть преобразован в строку текста, которая
затем может быть передана или сохранена там, где допускается только текст.
Процесс кодирования в Base64
довольно прост: он делит бинарные данные на блоки по 6
бит и заменяет каждый блок соответствующим символом из своего алфавита из 64
символов. Если количество бит в данных не делится нацело на 6
, используется специальный символ =
для заполнения, чтобы длина результата была кратна 4
.
Плюсы и минусы
Несмотря на свою универсальность и удобство, использование Base64
не лишено недостатков. Основной минус — увеличение размера данных примерно на 33%
. Это может быть критичным для больших файлов или в условиях ограниченной пропускной способности. Также, кодирование и декодирование требует дополнительных вычислительных ресурсов, что может замедлить загрузку веб-страниц или обработку данных.
Преобразование изображения в Base64
Преобразование файла в Base64
изображение для вставки в тег <img>
производится по следующему формату:
Для теста возьмем изображение, получим MIME
, прочитаем файл и закодируем полученные данные функцией base64_encode()
.
<?
$file = __DIR__ . '/test.jpg';
$path = pathinfo($file);
$ext = mb_strtolower($path['extension']);
if (in_array($ext, array('jpeg', 'jpg', 'gif', 'png', 'webp', 'svg'))) {
if ($ext == 'svg') {
$img = 'data:image/svg+xml;base64,' . base64_encode(file_get_contents($file));
} else {
// функция не актуальна для SVG файлов, для них придется сделать исключение
$size = getimagesize($file);
$img = 'data:' . $size['mime'] . ';base64,' . base64_encode(file_get_contents($file));
}
}
?>
<img src="<?php echo $img; ?>">
Результат:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4TIraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTNSAxMS4wLjAuNDg0IFdpbmRvd3M8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTktMTAtMjVUMTI6MTc6MzhaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTktMTAtMjVUMTQ6NTk6MDdaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/bAEMABwQEBAUEBwUFBwoHBQcKDAkHBwkMDQsLDAsLDRENDQ0NDQ0RDQ8QERAPDRQUFhYUFB4dHR0eIiIiIiIiIiIiIv/bAEMBCAcHDQwNGBAQGBoVERUaICAgICAgICAgICAgICEgICAgICAhISEgICAhISEhISEhISIiIiIiIiIiIiIiIiIiIv/CABEIAGQAZAMBEQACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAADBAUGAAECB//EABoBAAIDAQEAAAAAAAAAAAAAAAADAgQFAQb/2gAMAwEAAhADEAAAAfSAwMAEoRj66zF6A8JySXtrbgYGBgKqZFXqVauUyQgeRvoEjuD7PQvOJe1OOACMvOs/Y3ey2kQY4lP0mJsAnRRs2DOvP59yZas7oxaX0rN2DQg2lUfqVONDOHq5PBMfHP17F885fGrr+ymoZ2pCotlhFhaxWYLbuMlforkxRlrnfTfI6LC5Pb1eg5u0opxIxHOC2pjx+xn4dDCQYysFdl38vcTtkzfXRamusp3RHiUYjdwQvS9UbG2lgjKdyrHoPnbEY/to36lORowVe8WB3GPfOa7FGzWidTNj3Q9B8voTOdJfRla93NhV2PPqewyvpYcA1UDp5yVqpvnZrOt3DDtrNn3qVb1aoYHnVbWiU2mF9JA75EDFMrkyroZdVsQvl7KlWJwEed84r66yrBoBYd74dc5roJyrtbyp1idhgCCICpruRSrvEG9xC9g06rZW0bDKDAYGBgaAILAsHIMA0Bw6DAwP/8QAJBAAAQQCAgIDAAMAAAAAAAAAAgABAwQFEhETEBQVICEGJDL/2gAIAQEAAQUC8yzx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">