Merge V0.14.0

This commit is contained in:
Knah Tsaeb 2024-12-10 16:31:21 +01:00
parent 0363f92cc0
commit e225d3ebbe
36 changed files with 3946 additions and 3743 deletions

32
AUTHORS
View file

@ -1,9 +1,9 @@
1216 ArthurHoaro <arthur@hoa.ro> 1221 ArthurHoaro <arthur@hoa.ro>
456 nodiscc <nodiscc@gmail.com> 518 nodiscc <nodiscc@gmail.com>
405 VirtualTam <virtualtam@flibidi.net> 405 VirtualTam <virtualtam@flibidi.net>
56 Sébastien Sauvage <sebsauvage@sebsauvage.net> 56 Sébastien Sauvage <sebsauvage@sebsauvage.net>
27 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 31 Keith Carangelo <mail@kcaran.com>
19 Keith Carangelo <mail@kcaran.com> 28 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
16 Luce Carević <lcarevic@access42.net> 16 Luce Carević <lcarevic@access42.net>
15 Florian Eula <eula.florian@gmail.com> 15 Florian Eula <eula.florian@gmail.com>
14 Emilien Klein <emilien@klein.st> 14 Emilien Klein <emilien@klein.st>
@ -11,21 +11,18 @@
9 Lucas Cimon <lucas.cimon@gmail.com> 9 Lucas Cimon <lucas.cimon@gmail.com>
9 Willi Eggeling <thewilli@gmail.com> 9 Willi Eggeling <thewilli@gmail.com>
8 Christophe HENRY <christophe.henry@sbgodin.fr> 8 Christophe HENRY <christophe.henry@sbgodin.fr>
6 Immánuel Fodor <immanuelfactor+github@gmail.com> 7 kalvn <kalvnthereal@gmail.com>
6 YFdyh000 <yfdyh000@gmail.com>
6 kalvn <kalvnthereal@gmail.com>
6 B. van Berkum <dev@dotmpe.com> 6 B. van Berkum <dev@dotmpe.com>
6 Immánuel Fodor <immanuelfactor+github@gmail.com> 6 Immánuel Fodor <immanuelfactor+github@gmail.com>
6 YFdyh000 <yfdyh000@gmail.com> 6 YFdyh000 <yfdyh000@gmail.com>
6 kalvn <kalvnthereal@gmail.com>
6 llune <llune@users.noreply.github.com> 6 llune <llune@users.noreply.github.com>
5 Mark Schmitz <kramred@gmail.com> 5 Mark Schmitz <kramred@gmail.com>
5 Sébastien NOBILI <code@pipoprods.org> 5 Sébastien NOBILI <code@pipoprods.org>
4 Alexandre Alapetite <alexandre@alapetite.fr> 4 Alexandre Alapetite <alexandre@alapetite.fr>
4 yude <yudesleepy@gmail.com>
4 David Sferruzza <david.sferruzza@gmail.com> 4 David Sferruzza <david.sferruzza@gmail.com>
4 yude <yudesleepy@gmail.com> 4 yude <yudesleepy@gmail.com>
3 Agurato <mail.vmonot@gmail.com> 3 Agurato <mail.vmonot@gmail.com>
3 Andreas Waschinski <25221082+waschinski@users.noreply.github.com>
3 Christoph Stoettner <christoph.stoettner@stoeps.de> 3 Christoph Stoettner <christoph.stoettner@stoeps.de>
3 Olivier <bourreauolivier@gmail.com> 3 Olivier <bourreauolivier@gmail.com>
3 Teromene <teromene@teromene.fr> 3 Teromene <teromene@teromene.fr>
@ -43,24 +40,18 @@
2 Miloš Jovanović <mjovanovic@gmail.com> 2 Miloš Jovanović <mjovanovic@gmail.com>
2 Neros <contact@neros.fr> 2 Neros <contact@neros.fr>
2 Qwerty <champlywood@free.fr> 2 Qwerty <champlywood@free.fr>
2 Robert Riebisch <15858666+bttrx@users.noreply.github.com>
2 Sebastien Wains <sebw@users.noreply.github.com> 2 Sebastien Wains <sebw@users.noreply.github.com>
2 Stephen Muth <smuth4@gmail.com> 2 Stephen Muth <smuth4@gmail.com>
2 Timo Van Neerden <fire@lehollandaisvolant.net> 2 Timo Van Neerden <fire@lehollandaisvolant.net>
2 flow.gunso <flow.gunso@gmail.com> 2 flow.gunso <flow.gunso@gmail.com>
2 julienCXX <software@chmodplusx.eu> 2 julienCXX <software@chmodplusx.eu>
2 Knah Tsaeb <Knah-Tsaeb@knah-tsaeb.org>
2 philipp-r <philipp-r@users.noreply.github.com> 2 philipp-r <philipp-r@users.noreply.github.com>
2 pips <pips@e5150.fr> 2 pips <pips@e5150.fr>
2 prog-it <pash.vld@gmail.com> 2 prog-it <pash.vld@gmail.com>
2 trailjeep <trailjeep@gmail.com> 2 trailjeep <trailjeep@gmail.com>
1 leyrer <gitlab@leyrer.priv.at> 1 7Ds7 <7Ds7@users.noreply.github.com>
1 locness3 <37651007+locness3@users.noreply.github.com> 1 Adrien Oliva <adrien.oliva@yapbreak.fr>
1 owen bell <66233223+xfnw@users.noreply.github.com>
1 philipp <philipp@philipp.PC.Ubuntu>
1 rfolo9li <50079896+rfolo9li@users.noreply.github.com>
1 sprak3000 <sprak3000+github@gmail.com>
1 yudejp <i@yude.jp>
1 Rajat Hans <rajathans9@gmail.com>
1 Adrien le Maire <adrien@alemaire.be> 1 Adrien le Maire <adrien@alemaire.be>
1 Ajabep <ajabep@users.noreply.github.com> 1 Ajabep <ajabep@users.noreply.github.com>
1 Alexis J <alexis@effingo.be> 1 Alexis J <alexis@effingo.be>
@ -85,6 +76,7 @@
1 Franck Kerbiriou <FranckKe@users.noreply.github.com> 1 Franck Kerbiriou <FranckKe@users.noreply.github.com>
1 Gary Marigliano <gmarigliano93@gmail.com> 1 Gary Marigliano <gmarigliano93@gmail.com>
1 Hazhar Galeh <78073762+hazhargaleh@users.noreply.github.com> 1 Hazhar Galeh <78073762+hazhargaleh@users.noreply.github.com>
1 Henschi <to@h6l.de>
1 Hg <dev@indigo.re> 1 Hg <dev@indigo.re>
1 Jens Kubieziel <github@kubieziel.de> 1 Jens Kubieziel <github@kubieziel.de>
1 Jonathan Amiez <jonathan.amiez@gmail.com> 1 Jonathan Amiez <jonathan.amiez@gmail.com>
@ -97,11 +89,14 @@
1 Loïc Carr <zizou.xena@gmail.com> 1 Loïc Carr <zizou.xena@gmail.com>
1 Mark Gerarts <mark.gerarts@gmail.com> 1 Mark Gerarts <mark.gerarts@gmail.com>
1 Marsup <marsup@gmail.com> 1 Marsup <marsup@gmail.com>
1 Martin Puppe <dev@mpuppe.de>
1 Mickaël Schoentgen <contact@tiger-222.fr>
1 Nicolas Friedli <nicolas@theologique.ch> 1 Nicolas Friedli <nicolas@theologique.ch>
1 Nicolas Le Gaillart <nicolas@legaillart.fr> 1 Nicolas Le Gaillart <nicolas@legaillart.fr>
1 Paul van den Burg <github@paulvandenburg.nl> 1 Paul van den Burg <github@paulvandenburg.nl>
1 Rajat Hans <rajathans9@gmail.com> 1 Rajat Hans <rajathans9@gmail.com>
1 Sbgodin <Sbgodin@users.noreply.github.com> 1 Sbgodin <Sbgodin@users.noreply.github.com>
1 Thibaud CANALE <thican@thican.net>
1 ToM <tom@leloop.org> 1 ToM <tom@leloop.org>
1 TsT <tst2005@gmail.com> 1 TsT <tst2005@gmail.com>
1 agentcobra <agentcobra@free.fr> 1 agentcobra <agentcobra@free.fr>
@ -119,5 +114,6 @@
1 owen bell <66233223+xfnw@users.noreply.github.com> 1 owen bell <66233223+xfnw@users.noreply.github.com>
1 philipp <philipp@philipp.PC.Ubuntu> 1 philipp <philipp@philipp.PC.Ubuntu>
1 rfolo9li <50079896+rfolo9li@users.noreply.github.com> 1 rfolo9li <50079896+rfolo9li@users.noreply.github.com>
1 sokai <sokai@users.noreply.github.com>
1 sprak3000 <sprak3000+github@gmail.com> 1 sprak3000 <sprak3000+github@gmail.com>
1 yudejp <i@yude.jp> 1 yudejp <i@yude.jp>

File diff suppressed because it is too large Load diff

View file

@ -13,8 +13,8 @@ Check the [milestones](https://github.com/shaarli/Shaarli/milestones) to see wha
* The issues list should preferably contain **only tasks that can be actioned immediately**. Anyone should be able to open the issues list, pick one and start working on it immediately. * The issues list should preferably contain **only tasks that can be actioned immediately**. Anyone should be able to open the issues list, pick one and start working on it immediately.
* If you have a clear idea of a **feature you expect, or have a specific bug/defect to report**, [search the issues list, both open and closed](https://github.com/shaarli/Shaarli/issues?q=is%3Aissue) to check if it has been discussed, and comment on the appropriate issue. If you can't find one, please open a [new issue](https://github.com/shaarli/Shaarli/issues/new) * If you have a clear idea of a **feature you expect, or have a specific bug/defect to report**, [search the issues list, both open and closed](https://github.com/shaarli/Shaarli/issues?q=is%3Aissue) to check if it has been discussed, and comment on the appropriate issue. If you can't find one, please open a [new issue](https://github.com/shaarli/Shaarli/issues/new)
* **General discussions** fit in #44 so that we don't follow a slope where users and contributors have to track 90 "maybe" items in the bug tracker. Separate issues about clear, separate steps can be opened after discussion. * The **[general discussion](https://github.com/shaarli/Shaarli/issues/308)** issue can be used for general announcements or project-related discussion.
* You can also join instant discussion at https://gitter.im/shaarli/Shaarli, or via IRC as described [here](https://github.com/shaarli/Shaarli/issues/44#issuecomment-77745105) * You can also join instant discussion at https://gitter.im/shaarli/Shaarli.
### Documentation ### Documentation

View file

@ -6,10 +6,10 @@ _Do you want to share the links you discover?_
_Shaarli is a minimalist link sharing service that you can install on your own server._ _Shaarli is a minimalist link sharing service that you can install on your own server._
_It is designed to be personal (single-user), fast and handy._ _It is designed to be personal (single-user), fast and handy._
[![](https://img.shields.io/badge/stable-v0.12.2-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.11.1) [![](https://img.shields.io/badge/release-v0.13.0-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.13.0)
[![](https://img.shields.io/badge/latest-v0.13.0-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.12.2)
[![](https://img.shields.io/badge/master-v0.13.x-blue.svg)](https://github.com/shaarli/Shaarli) [![](https://img.shields.io/badge/master-v0.13.x-blue.svg)](https://github.com/shaarli/Shaarli)
[![](https://github.com/shaarli/Shaarli/actions/workflows/ci.yml/badge.svg)](https://github.com/shaarli/Shaarli/actions) [![](https://github.com/shaarli/Shaarli/actions/workflows/ci.yml/badge.svg)](https://github.com/shaarli/Shaarli/actions)
[![](https://github.com/shaarli/Shaarli/actions/workflows/trivy-release.yml/badge.svg)](https://github.com/shaarli/Shaarli/actions)
[![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli) [![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli)
[![Docker repository](https://img.shields.io/docker/pulls/shaarli/shaarli.svg)](https://github.com/shaarli/Shaarli/pkgs/container/shaarli) [![Docker repository](https://img.shields.io/docker/pulls/shaarli/shaarli.svg)](https://github.com/shaarli/Shaarli/pkgs/container/shaarli)

View file

@ -322,7 +322,7 @@ function format_date($date, $time = true, $intl = true)
return $date->format($format); return $date->format($format);
} }
$formatter = new IntlDateFormatter( $formatter = new IntlDateFormatter(
setlocale(LC_TIME, 0), get_locale(LC_TIME),
IntlDateFormatter::LONG, IntlDateFormatter::LONG,
$time ? IntlDateFormatter::LONG : IntlDateFormatter::NONE $time ? IntlDateFormatter::LONG : IntlDateFormatter::NONE
); );
@ -503,3 +503,23 @@ function exception2text(Throwable $e): string
{ {
return $e->getMessage() . PHP_EOL . $e->getFile() . $e->getLine() . PHP_EOL . $e->getTraceAsString(); return $e->getMessage() . PHP_EOL . $e->getFile() . $e->getLine() . PHP_EOL . $e->getTraceAsString();
} }
/**
* Get the current locale, overrides 'C' locale which is no longer compatible with PHP-intl
*
* @param int $category Category of the locale (LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_ALL)
*
* @return string|false The locale, or false if not found.
*
* @see https://github.com/php/php-src/issues/12561
*/
function get_locale(int $category = LC_CTYPE)
{
$locale = setlocale($category, 0);
if ($locale === 'C' || startsWith($locale, 'C.')) {
$locale = 'en_US.utf8'; // failback
}
return $locale;
}

View file

@ -35,6 +35,7 @@ class Info extends ApiController
'timezone' => $this->conf->get('general.timezone', 'UTC'), 'timezone' => $this->conf->get('general.timezone', 'UTC'),
'enabled_plugins' => $this->conf->get('general.enabled_plugins', []), 'enabled_plugins' => $this->conf->get('general.enabled_plugins', []),
'default_private_links' => $this->conf->get('privacy.default_private_links', false), 'default_private_links' => $this->conf->get('privacy.default_private_links', false),
'tags_separator' => $this->conf->get('general.tags_separator', ' '),
], ],
]; ];

View file

@ -505,7 +505,7 @@ class Bookmark
} }
/** /**
* Rename a tag in tags list. * Rename a tag in tags list. If the new tag already exists, merge them
* *
* @param string $fromTag * @param string $fromTag
* @param string $toTag * @param string $toTag
@ -513,9 +513,13 @@ class Bookmark
public function renameTag(string $fromTag, string $toTag): void public function renameTag(string $fromTag, string $toTag): void
{ {
if (($pos = array_search($fromTag, $this->tags ?? [])) !== false) { if (($pos = array_search($fromTag, $this->tags ?? [])) !== false) {
if (in_array($toTag, $this->tags ?? []) !== false) {
$this->deleteTag($fromTag);
} else {
$this->tags[$pos] = trim($toTag); $this->tags[$pos] = trim($toTag);
} }
} }
}
/** /**
* Add a tag in tags list. * Add a tag in tags list.

View file

@ -372,7 +372,6 @@ class ConfigManager
$this->setEmpty('general.tags_separator', ' '); $this->setEmpty('general.tags_separator', ' ');
$this->setEmpty('updates.check_updates', true); $this->setEmpty('updates.check_updates', true);
$this->setEmpty('updates.check_updates_branch', 'latest');
$this->setEmpty('updates.check_updates_interval', 86400); $this->setEmpty('updates.check_updates_interval', 86400);
$this->setEmpty('feed.rss_permalinks', true); $this->setEmpty('feed.rss_permalinks', true);

View file

@ -36,7 +36,7 @@ class ServerController extends ShaarliAdminController
} }
$currentVersion = ApplicationUtils::getVersion('./shaarli_version.php'); $currentVersion = ApplicationUtils::getVersion('./shaarli_version.php');
$currentVersion = $currentVersion === 'dev' ? $currentVersion : 'v' . $currentVersion; $currentVersion = ApplicationUtils::isDevVersion($currentVersion) ? $currentVersion : 'v' . $currentVersion;
$phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION));
$permissions = array_merge( $permissions = array_merge(

View file

@ -38,7 +38,7 @@ class FeedController extends ShaarliVisitorController
} }
// Generate data. // Generate data.
$this->container->feedBuilder->setLocale(strtolower(setlocale(LC_COLLATE, 0))); $this->container->feedBuilder->setLocale(strtolower(get_locale(LC_COLLATE)));
$this->container->feedBuilder->setHideDates($this->container->conf->get('privacy.hide_timestamps', false)); $this->container->feedBuilder->setHideDates($this->container->conf->get('privacy.hide_timestamps', false));
$this->container->feedBuilder->setUsePermalinks( $this->container->feedBuilder->setUsePermalinks(
null !== $request->getParam('permalinks') || !$this->container->conf->get('feed.rss_permalinks') null !== $request->getParam('permalinks') || !$this->container->conf->get('feed.rss_permalinks')

View file

@ -19,7 +19,7 @@ class ApplicationUtils
public static $GITHUB_URL = 'https://github.com/shaarli/Shaarli'; public static $GITHUB_URL = 'https://github.com/shaarli/Shaarli';
public static $GIT_RAW_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli'; public static $GIT_RAW_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli';
public static $GIT_BRANCHES = ['latest', 'stable']; public static $RELEASE_BRANCH = 'release';
private static $VERSION_START_TAG = '<?php /* '; private static $VERSION_START_TAG = '<?php /* ';
private static $VERSION_END_TAG = ' */ ?>'; private static $VERSION_END_TAG = ' */ ?>';
@ -89,7 +89,6 @@ class ApplicationUtils
* @param int $checkInterval the minimum interval between update checks (in seconds * @param int $checkInterval the minimum interval between update checks (in seconds
* @param bool $enableCheck whether to check for new versions * @param bool $enableCheck whether to check for new versions
* @param bool $isLoggedIn whether the user is logged in * @param bool $isLoggedIn whether the user is logged in
* @param string $branch check update for the given branch
* *
* @throws Exception an invalid branch has been set for update checks * @throws Exception an invalid branch has been set for update checks
* *
@ -100,13 +99,12 @@ class ApplicationUtils
$updateFile, $updateFile,
$checkInterval, $checkInterval,
$enableCheck, $enableCheck,
$isLoggedIn, $isLoggedIn
$branch = 'stable'
) { ) {
// Do not check versions for visitors // Do not check versions for visitors
// Do not check if the user doesn't want to // Do not check if the user doesn't want to
// Do not check with dev version // Do not check with dev version
if (!$isLoggedIn || empty($enableCheck) || $currentVersion === 'dev') { if (!$isLoggedIn || empty($enableCheck) || self::isDevVersion($currentVersion)) {
return false; return false;
} }
@ -120,16 +118,10 @@ class ApplicationUtils
return false; return false;
} }
if (!in_array($branch, self::$GIT_BRANCHES)) {
throw new Exception(
'Invalid branch selected for updates: "' . $branch . '"'
);
}
// Late Static Binding allows overriding within tests // Late Static Binding allows overriding within tests
// See http://php.net/manual/en/language.oop5.late-static-bindings.php // See http://php.net/manual/en/language.oop5.late-static-bindings.php
$latestVersion = static::getVersion( $latestVersion = static::getVersion(
self::$GIT_RAW_URL . '/' . $branch . '/' . self::$VERSION_FILE self::$GIT_RAW_URL . '/' . self::$RELEASE_BRANCH . '/' . self::$VERSION_FILE
); );
if (!$latestVersion) { if (!$latestVersion) {
@ -334,4 +326,11 @@ class ApplicationUtils
'8.2' => '2025-12-08', '8.2' => '2025-12-08',
][$matches[1]] ?? (new \DateTime('+2 year'))->format('Y-m-d'); ][$matches[1]] ?? (new \DateTime('+2 year'))->format('Y-m-d');
} }
public static function isDevVersion(string $version): bool
{
return strpos($version, 'dev') !== false
|| preg_match('/[a-f0-9]{7}/', $version) === 1
;
}
} }

View file

@ -52,10 +52,10 @@ function get_http_response(
} }
$userAgent = $userAgent =
'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0)' 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:115.0)'
. ' Gecko/20100101 Firefox/45.0'; . ' Gecko/20100101 Firefox/115.0';
$acceptLanguage = $acceptLanguage =
substr(setlocale(LC_COLLATE, 0), 0, 2) . ',en-US;q=0.7,en;q=0.3'; substr(get_locale(LC_COLLATE), 0, 2) . ',en-US;q=0.7,en;q=0.3';
$maxRedirs = 3; $maxRedirs = 3;
if (!function_exists('curl_init')) { if (!function_exists('curl_init')) {

View file

@ -59,6 +59,12 @@ class MetadataRetriever
if (!empty($title) && strtolower($charset) !== 'utf-8') { if (!empty($title) && strtolower($charset) !== 'utf-8') {
$title = mb_convert_encoding($title, 'utf-8', $charset); $title = mb_convert_encoding($title, 'utf-8', $charset);
} }
if (!empty($description) && strtolower($charset) !== 'utf-8') {
$description = mb_convert_encoding($description, 'utf-8', $charset);
}
if (!empty($tags) && strtolower($charset) !== 'utf-8') {
$tags = mb_convert_encoding($tags, 'utf-8', $charset);
}
return array_map([$this, 'cleanMetadata'], [ return array_map([$this, 'cleanMetadata'], [
'title' => $title, 'title' => $title,

View file

@ -1,591 +1,3 @@
<<<<<<< HEAD
<?php
namespace Shaarli\Legacy;
use ArrayAccess;
use Countable;
use DateTime;
use Iterator;
use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
use Shaarli\Exceptions\IOException;
use Shaarli\Helper\FileUtils;
use Shaarli\Render\PageCacheManager;
/**
* Data storage for bookmarks.
*
* This object behaves like an associative array.
*
* Example:
* $myLinks = new LinkDB();
* echo $myLinks[350]['title'];
* foreach ($myLinks as $link)
* echo $link['title'].' at url '.$link['url'].'; description:'.$link['description'];
*
* Available keys:
* - id: primary key, incremental integer identifier (persistent)
* - description: description of the entry
* - created: creation date of this entry, DateTime object.
* - updated: last modification date of this entry, DateTime object.
* - private: Is this link private? 0=no, other value=yes
* - tags: tags attached to this entry (separated by spaces)
* - title Title of the link
* - url URL of the link. Used for displayable bookmarks.
* Can be absolute or relative in the database but the relative bookmarks
* will be converted to absolute ones in templates.
* - real_url Raw URL in stored in the DB (absolute or relative).
* - shorturl Permalink smallhash
*
* Implements 3 interfaces:
* - ArrayAccess: behaves like an associative array;
* - Countable: there is a count() method;
* - Iterator: usable in foreach () loops.
*
* ID mechanism:
* ArrayAccess is implemented in a way that will allow to access a link
* with the unique identifier ID directly with $link[ID].
* Note that it's not the real key of the link array attribute.
* This mechanism is in place to have persistent link IDs,
* even though the internal array is reordered by date.
* Example:
* - DB: link #1 (2010-01-01) link #2 (2016-01-01)
* - Order: #2 #1
* - Import bookmarks containing: link #3 (2013-01-01)
* - New DB: link #1 (2010-01-01) link #2 (2016-01-01) link #3 (2013-01-01)
* - Real order: #2 #3 #1
*
* @deprecated
*/
class LegacyLinkDB implements Iterator, Countable, ArrayAccess
{
// Links are stored as a PHP serialized string
private $datastore;
// Link date storage format
public const LINK_DATE_FORMAT = 'Ymd_His';
// List of bookmarks (associative array)
// - key: link date (e.g. "20110823_124546"),
// - value: associative array (keys: title, description...)
private $links;
// List of all recorded URLs (key=url, value=link offset)
// for fast reserve search (url-->link offset)
private $urls;
/**
* @var array List of all bookmarks IDS mapped with their array offset.
* Map: id->offset.
*/
protected $ids;
// List of offset keys (for the Iterator interface implementation)
private $keys;
// Position in the $this->keys array (for the Iterator interface)
private $position;
// Is the user logged in? (used to filter private bookmarks)
private $loggedIn;
// Hide public bookmarks
private $hidePublicLinks;
/**
* Creates a new LinkDB
*
* Checks if the datastore exists; else, attempts to create a dummy one.
*
* @param string $datastore datastore file path.
* @param boolean $isLoggedIn is the user logged in?
* @param boolean $hidePublicLinks if true all bookmarks are private.
*/
public function __construct(
$datastore,
$isLoggedIn,
$hidePublicLinks
) {
$this->datastore = $datastore;
$this->loggedIn = $isLoggedIn;
$this->hidePublicLinks = $hidePublicLinks;
$this->check();
$this->read();
}
/**
* Countable - Counts elements of an object
*/
public function count(): int
{
return count($this->links);
}
/**
* ArrayAccess - Assigns a value to the specified offset
*/
public function offsetSet($offset, $value): void
{
// TODO: use exceptions instead of "die"
if (!$this->loggedIn) {
die(t('You are not authorized to add a link.'));
}
if (!isset($value['id']) || empty($value['url'])) {
die(t('Internal Error: A link should always have an id and URL.'));
}
if (($offset !== null && !is_int($offset)) || !is_int($value['id'])) {
die(t('You must specify an integer as a key.'));
}
if ($offset !== null && $offset !== $value['id']) {
die(t('Array offset and link ID must be equal.'));
}
// If the link exists, we reuse the real offset, otherwise new entry
$existing = $this->getLinkOffset($offset);
if ($existing !== null) {
$offset = $existing;
} else {
$offset = count($this->links);
}
$this->links[$offset] = $value;
$this->urls[$value['url']] = $offset;
$this->ids[$value['id']] = $offset;
}
/**
* ArrayAccess - Whether or not an offset exists
*/
public function offsetExists($offset): bool
{
return array_key_exists($this->getLinkOffset($offset), $this->links);
}
/**
* ArrayAccess - Unsets an offset
*/
public function offsetUnset($offset): void
{
if (!$this->loggedIn) {
// TODO: raise an exception
die('You are not authorized to delete a link.');
}
$realOffset = $this->getLinkOffset($offset);
$url = $this->links[$realOffset]['url'];
unset($this->urls[$url]);
unset($this->ids[$realOffset]);
unset($this->links[$realOffset]);
}
/**
* ArrayAccess - Returns the value at specified offset
*/
public function offsetGet($offset): ?array
{
$realOffset = $this->getLinkOffset($offset);
return isset($this->links[$realOffset]) ? $this->links[$realOffset] : null;
}
/**
* Iterator - Returns the current element
*/
public function current(): array
{
return $this[$this->keys[$this->position]];
}
/**
* Iterator - Returns the key of the current element
*
* @return int|string
*/
#[\ReturnTypeWillChange]
public function key()
{
return $this->keys[$this->position];
}
/**
* Iterator - Moves forward to next element
*/
public function next(): void
{
++$this->position;
}
/**
* Iterator - Rewinds the Iterator to the first element
*
* Entries are sorted by date (latest first)
*/
public function rewind(): void
{
$this->keys = array_keys($this->ids);
$this->position = 0;
}
/**
* Iterator - Checks if current position is valid
*/
public function valid(): bool
{
return isset($this->keys[$this->position]);
}
/**
* Checks if the DB directory and file exist
*
* If no DB file is found, creates a dummy DB.
*/
private function check()
{
if (file_exists($this->datastore)) {
return;
}
// Create a dummy database for example
$this->links = [];
$link = [
'id' => 1,
'title' => t('The personal, minimalist, super-fast, database free, bookmarking service'),
'url' => 'https://shaarli.readthedocs.io',
'description' => t(
'Welcome to Shaarli! This is your first public bookmark. '
. 'To edit or delete me, you must first login.
To learn how to use Shaarli, consult the link "Documentation" at the bottom of this page.
You use the community supported version of the original Shaarli project, by Sebastien Sauvage.'
),
'private' => 0,
'created' => new DateTime(),
'tags' => 'opensource software',
'sticky' => false,
];
$link['shorturl'] = link_small_hash($link['created'], $link['id']);
$this->links[1] = $link;
$link = [
'id' => 0,
'title' => t('My secret stuff... - Pastebin.com'),
'url' => 'http://sebsauvage.net/paste/?8434b27936c09649#bR7XsXhoTiLcqCpQbmOpBi3rq2zzQUC5hBI7ZT1O3x8=',
'description' => t('Shhhh! I\'m a private link only YOU can see. You can delete me too.'),
'private' => 1,
'created' => new DateTime('1 minute ago'),
'tags' => 'secretstuff',
'sticky' => false,
];
$link['shorturl'] = link_small_hash($link['created'], $link['id']);
$this->links[0] = $link;
// Write database to disk
$this->write();
}
/**
* Reads database from disk to memory
*/
private function read()
{
// Public bookmarks are hidden and user not logged in => nothing to show
if ($this->hidePublicLinks && !$this->loggedIn) {
$this->links = [];
return;
}
$this->urls = [];
$this->ids = [];
$this->links = FileUtils::readFlatDB($this->datastore, []);
$toremove = [];
foreach ($this->links as $key => &$link) {
if (!$this->loggedIn && $link['private'] != 0) {
// Transition for not upgraded databases.
unset($this->links[$key]);
continue;
}
// Sanitize data fields.
sanitizeLink($link);
// Remove private tags if the user is not logged in.
if (!$this->loggedIn) {
$link['tags'] = preg_replace('/(^|\s+)\.[^($|\s)]+\s*/', ' ', $link['tags']);
}
$link['real_url'] = $link['url'];
$link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false;
// To be able to load bookmarks before running the update, and prepare the update
if (!isset($link['created'])) {
$link['id'] = $link['linkdate'];
$link['created'] = DateTime::createFromFormat(self::LINK_DATE_FORMAT, $link['linkdate']);
if (!empty($link['updated'])) {
$link['updated'] = DateTime::createFromFormat(self::LINK_DATE_FORMAT, $link['updated']);
}
$link['shorturl'] = smallHash($link['linkdate']);
}
$this->urls[$link['url']] = $key;
$this->ids[$link['id']] = $key;
}
}
/**
* Saves the database from memory to disk
*
* @throws IOException the datastore is not writable
*/
private function write()
{
$this->reorder();
FileUtils::writeFlatDB($this->datastore, $this->links);
}
/**
* Saves the database from memory to disk
*
* @param string $pageCacheDir page cache directory
*/
public function save($pageCacheDir)
{
if (!$this->loggedIn) {
// TODO: raise an Exception instead
die('You are not authorized to change the database.');
}
$this->write();
$pageCacheManager = new PageCacheManager($pageCacheDir, $this->loggedIn);
$pageCacheManager->invalidateCaches();
}
/**
* Returns the link for a given URL, or False if it does not exist.
*
* @param string $url URL to search for
*
* @return mixed the existing link if it exists, else 'false'
*/
public function getLinkFromUrl($url)
{
if (isset($this->urls[$url])) {
return $this->links[$this->urls[$url]];
}
return false;
}
/**
* Returns the shaare corresponding to a smallHash.
*
* @param string $request QUERY_STRING server parameter.
*
* @return array $filtered array containing permalink data.
*
* @throws BookmarkNotFoundException if the smallhash is malformed or doesn't match any link.
*/
public function filterHash($request)
{
$request = substr($request, 0, 6);
$linkFilter = new LegacyLinkFilter($this->links);
return $linkFilter->filter(LegacyLinkFilter::$FILTER_HASH, $request);
}
/**
* Returns the list of articles for a given day.
*
* @param string $request day to filter. Format: YYYYMMDD.
*
* @return array list of shaare found.
*/
public function filterDay($request)
{
$linkFilter = new LegacyLinkFilter($this->links);
return $linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, $request);
}
/**
* Filter bookmarks according to search parameters.
*
* @param array $filterRequest Search request content. Supported keys:
* - searchtags: list of tags
* - searchterm: term search
* @param bool $casesensitive Optional: Perform case sensitive filter
* @param string $visibility return only all/private/public bookmarks
* @param bool $untaggedonly return only untagged bookmarks
*
* @return array filtered bookmarks, all bookmarks if no suitable filter was provided.
*/
public function filterSearch(
$filterRequest = [],
$casesensitive = false,
$visibility = 'all',
$untaggedonly = false
) {
// Filter link database according to parameters.
$searchtags = isset($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : '';
$searchterm = isset($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : '';
// Search tags + fullsearch - blank string parameter will return all bookmarks.
$type = LegacyLinkFilter::$FILTER_TAG | LegacyLinkFilter::$FILTER_TEXT; // == "vuotext"
$request = [$searchtags, $searchterm];
$linkFilter = new LegacyLinkFilter($this);
return $linkFilter->filter($type, $request, $casesensitive, $visibility, $untaggedonly);
}
/**
* Returns the list tags appearing in the bookmarks with the given tags
*
* @param array $filteringTags tags selecting the bookmarks to consider
* @param string $visibility process only all/private/public bookmarks
*
* @return array tag => linksCount
*/
public function linksCountPerTag($filteringTags = [], $visibility = 'all')
{
$links = $this->filterSearch(['searchtags' => $filteringTags], false, $visibility);
$tags = [];
$caseMapping = [];
foreach ($links as $link) {
foreach (preg_split('/\s+/', $link['tags'], 0, PREG_SPLIT_NO_EMPTY) as $tag) {
if (empty($tag)) {
continue;
}
// The first case found will be displayed.
if (!isset($caseMapping[strtolower($tag)])) {
$caseMapping[strtolower($tag)] = $tag;
$tags[$caseMapping[strtolower($tag)]] = 0;
}
$tags[$caseMapping[strtolower($tag)]]++;
}
}
/*
* Formerly used arsort(), which doesn't define the sort behaviour for equal values.
* Also, this function doesn't produce the same result between PHP 5.6 and 7.
*
* So we now use array_multisort() to sort tags by DESC occurrences,
* then ASC alphabetically for equal values.
*
* @see https://github.com/shaarli/Shaarli/issues/1142
*/
$keys = array_keys($tags);
$tmpTags = array_combine($keys, $keys);
array_multisort($tags, SORT_DESC, $tmpTags, SORT_ASC, $tags);
return $tags;
}
/**
* Rename or delete a tag across all bookmarks.
*
* @param string $from Tag to rename
* @param string $to New tag. If none is provided, the from tag will be deleted
*
* @return array|bool List of altered bookmarks or false on error
*/
public function renameTag($from, $to)
{
if (empty($from)) {
return false;
}
$delete = empty($to);
// True for case-sensitive tag search.
$linksToAlter = $this->filterSearch(['searchtags' => $from], true);
foreach ($linksToAlter as $key => &$value) {
$tags = preg_split('/\s+/', trim($value['tags']));
if (($pos = array_search($from, $tags)) !== false) {
if ($delete) {
unset($tags[$pos]); // Remove tag.
} else {
$tags[$pos] = trim($to);
}
$value['tags'] = trim(implode(' ', array_unique($tags)));
$this[$value['id']] = $value;
}
}
return $linksToAlter;
}
/**
* Returns the list of days containing articles (oldest first)
* Output: An array containing days (in format YYYYMMDD).
*/
public function days()
{
$linkDays = [];
foreach ($this->links as $link) {
$linkDays[$link['created']->format('Ymd')] = 0;
}
$linkDays = array_keys($linkDays);
sort($linkDays);
return $linkDays;
}
/**
* Reorder bookmarks by creation date (newest first).
*
* Also update the urls and ids mapping arrays.
*
* @param string $order ASC|DESC
*/
public function reorder($order = 'DESC')
{
$order = $order === 'ASC' ? -1 : 1;
// Reorder array by dates.
usort($this->links, function ($a, $b) use ($order) {
if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) {
return $a['sticky'] ? -1 : 1;
}
if ($a['created'] == $b['created']) {
return $a['id'] < $b['id'] ? 1 * $order : -1 * $order;
}
return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
});
$this->urls = [];
$this->ids = [];
foreach ($this->links as $key => $link) {
$this->urls[$link['url']] = $key;
$this->ids[$link['id']] = $key;
}
}
/**
* Return the next key for link creation.
* E.g. If the last ID is 597, the next will be 598.
*
* @return int next ID.
*/
public function getNextId()
{
if (!empty($this->ids)) {
return max(array_keys($this->ids)) + 1;
}
return 0;
}
/**
* Returns a link offset in bookmarks array from its unique ID.
*
* @param int $id Persistent ID of a link.
*
* @return int Real offset in local array, or null if doesn't exist.
*/
protected function getLinkOffset($id)
{
if (isset($this->ids[$id])) {
return $this->ids[$id];
}
return null;
}
}
||||||| d7dead56
=======
<?php <?php
namespace Shaarli\Legacy; namespace Shaarli\Legacy;
@ -904,15 +316,7 @@ You use the community supported version of the original Shaarli project, by Seba
$link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false; $link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false;
<<<<<<<< HEAD:application/bookmark/LinkDB.php
$link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false;
// To be able to load links before running the update, and prepare the update
|||||||| d7dead56:application/bookmark/LinkDB.php
// To be able to load links before running the update, and prepare the update
========
// To be able to load bookmarks before running the update, and prepare the update // To be able to load bookmarks before running the update, and prepare the update
>>>>>>>> github/v0.13:application/legacy/LegacyLinkDB.php
if (!isset($link['created'])) { if (!isset($link['created'])) {
$link['id'] = $link['linkdate']; $link['id'] = $link['linkdate'];
$link['created'] = DateTime::createFromFormat(self::LINK_DATE_FORMAT, $link['linkdate']); $link['created'] = DateTime::createFromFormat(self::LINK_DATE_FORMAT, $link['linkdate']);
@ -1179,4 +583,3 @@ You use the community supported version of the original Shaarli project, by Seba
return null; return null;
} }
} }
>>>>>>> github/v0.13

View file

@ -103,8 +103,7 @@ class PageBuilder
$this->conf->get('resource.update_check'), $this->conf->get('resource.update_check'),
$this->conf->get('updates.check_updates_interval'), $this->conf->get('updates.check_updates_interval'),
$this->conf->get('updates.check_updates'), $this->conf->get('updates.check_updates'),
$this->isLoggedIn, $this->isLoggedIn
$this->conf->get('updates.check_updates_branch')
); );
$this->tpl->assign('newVersion', escape($version)); $this->tpl->assign('newVersion', escape($version));
$this->tpl->assign('versionError', ''); $this->tpl->assign('versionError', '');

View file

@ -172,6 +172,15 @@ class Updater
return true; return true;
} }
public function updateMethodRemoveSettingRemoteBranch(): bool
{
if ($this->conf->exists('updates.check_updates_branch')) {
$this->conf->remove('updates.check_updates_branch', true, true);
}
return true;
}
public function setBasePath(string $basePath): self public function setBasePath(string $basePath): self
{ {
$this->basePath = $basePath; $this->basePath = $basePath;

View file

@ -19,8 +19,8 @@ $orange: #f89406;
$blue: #0b5ea6; $blue: #0b5ea6;
$background-color: #d0d0d0; $background-color: #d0d0d0;
$background-linklist-info: #ddd; $background-linklist-info: #ddd;
$light-shadow: rgba(255, 255, 255, .078); $light-shadow: rgba(255, 255, 255, 7.8%);
$dark-shadow: rgba(0, 0, 0, .298); $dark-shadow: rgba(0, 0, 0, 29.8%);
$warning-text: #97600d; $warning-text: #97600d;
$form-input-border: #d8d8d8; $form-input-border: #d8d8d8;
$form-input-background: #eee; $form-input-background: #eee;
@ -66,7 +66,7 @@ pre {
} }
@font-face { @font-face {
font-family: 'Roboto'; font-family: Roboto;
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
src: src:
@ -76,7 +76,7 @@ pre {
} }
@font-face { @font-face {
font-family: 'Roboto'; font-family: Roboto;
font-weight: 700; font-weight: 700;
font-style: normal; font-style: normal;
src: src:
@ -187,6 +187,7 @@ body,
z-index: 999; z-index: 999;
background: var(--main-color); background: var(--main-color);
width: 100%; width: 100%;
// Hack to transition with auto height: http://stackoverflow.com/a/8331169/1484919 // Hack to transition with auto height: http://stackoverflow.com/a/8331169/1484919
max-height: 45px; max-height: 45px;
overflow: hidden; overflow: hidden;
@ -320,7 +321,7 @@ body,
input { input {
&[type='text'] { &[type='text'] {
border: medium none currentColor; border: medium none currentcolor;
border-radius: 2px; border-radius: 2px;
box-shadow: 0 1px 0 $light-shadow, 0 1px 1px $dark-shadow inset; box-shadow: 0 1px 0 $light-shadow, 0 1px 1px $dark-shadow inset;
background: $almost-white; background: $almost-white;
@ -329,7 +330,7 @@ body,
height: 30px; height: 30px;
color: $dark-grey; color: $dark-grey;
&::-webkit-input-placeholder { &::placeholder {
color: $light-grey; color: $light-grey;
} }
} }
@ -392,7 +393,7 @@ body,
} }
%subheader-form-input { %subheader-form-input {
border: medium none currentColor; border: medium none currentcolor;
border-radius: 2px; border-radius: 2px;
box-shadow: 0 1px 0 $light-shadow, 0 1px 4px $dark-shadow inset; box-shadow: 0 1px 0 $light-shadow, 0 1px 4px $dark-shadow inset;
background: $almost-white; background: $almost-white;
@ -416,7 +417,7 @@ body,
&[type='password'] { &[type='password'] {
@extend %subheader-form-input; @extend %subheader-form-input;
&::-webkit-input-placeholder { &::placeholder {
color: $dark-grey; color: $dark-grey;
} }
} }
@ -472,7 +473,7 @@ body,
width: 200px; width: 200px;
// because chrome // because chrome
&::-webkit-input-placeholder { &::placeholder {
color: $light-grey; color: $light-grey;
} }
} }
@ -518,7 +519,7 @@ body,
input { input {
&[type='text'] { &[type='text'] {
border: medium none currentColor; border: medium none currentcolor;
border-radius: 2px; border-radius: 2px;
box-shadow: 0 1px 0 $light-shadow, 0 1px 1px $dark-shadow inset; box-shadow: 0 1px 0 $light-shadow, 0 1px 1px $dark-shadow inset;
background: $almost-white; background: $almost-white;
@ -527,13 +528,13 @@ body,
height: 30px; height: 30px;
color: $dark-grey; color: $dark-grey;
&::-webkit-input-placeholder { &::placeholder {
color: $light-grey; color: $light-grey;
} }
} }
&[type='submit'] { &[type='submit'] {
border: medium none currentColor; border: medium none currentcolor;
border-radius: 2px; border-radius: 2px;
background: $almost-white; background: $almost-white;
padding: 0 10px; padding: 0 10px;
@ -637,7 +638,7 @@ body,
@extend %linksperpage-button; @extend %linksperpage-button;
margin: 0; margin: 0;
border: medium none currentColor; border: medium none currentcolor;
background: $almost-white; background: $almost-white;
padding: 4px 5px 3px 8px; padding: 4px 5px 3px 8px;
height: 20px; height: 20px;
@ -995,7 +996,7 @@ body,
&[type='text'] { &[type='text'] {
@extend %page-form-input; @extend %page-form-input;
&::-webkit-input-placeholder { &::placeholder {
color: $light-grey; color: $light-grey;
} }
} }
@ -1003,7 +1004,7 @@ body,
&[type='password'] { &[type='password'] {
@extend %page-form-input; @extend %page-form-input;
&::-webkit-input-placeholder { &::placeholder {
color: $light-grey; color: $light-grey;
} }
} }
@ -1530,9 +1531,6 @@ form {
.b-lazy { .b-lazy {
transition: opacity 500ms ease-in-out; transition: opacity 500ms ease-in-out;
opacity: 0; opacity: 0;
-webkit-transition: opacity 500ms ease-in-out;
-moz-transition: opacity 500ms ease-in-out;
-o-transition: opacity 500ms ease-in-out;
min-width: 1px; min-width: 1px;
min-height: 1px; min-height: 1px;
@ -1624,11 +1622,6 @@ form {
} }
} }
// Fix empty bookmarklet name in Firefox
.pure-button {
-moz-user-select: auto;
}
.tag-sort { .tag-sort {
margin-top: 30px; margin-top: 30px;
text-align: center; text-align: center;
@ -1790,7 +1783,7 @@ input[name='save_edit_batch'] {
&::after { &::after {
content: ""; content: "";
flex-grow: 1; flex-grow: 1;
background: rgba(0, 0, 0, 0.35); background: rgba(0, 0, 0, 35%);
height: 1px; height: 1px;
font-size: 0; font-size: 0;
line-height: 0; line-height: 0;
@ -1811,7 +1804,7 @@ input[name='save_edit_batch'] {
height: 100%; height: 100%;
width: 100%; width: 100%;
z-index: 998; z-index: 998;
background-color: rgba(0, 0, 0, .75); background-color: rgba(0, 0, 0, 75%);
color: #fff; color: #fff;
.screen-center { .screen-center {

857
composer.lock generated

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
doc/md/images/doc-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

522
doc/md/images/doc-logo.svg Normal file
View file

@ -0,0 +1,522 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="600"
height="240"
id="svg2"
version="1.1">
<title
id="title6384">Shaarli Logo</title>
<defs
id="defs4">
<linearGradient
id="linearGradient4405">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4407" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop4409" />
</linearGradient>
<linearGradient
id="linearGradient3780">
<stop
style="stop-color:#8aea00;stop-opacity:1;"
offset="0"
id="stop3782" />
<stop
style="stop-color:#ebff36;stop-opacity:1;"
offset="1"
id="stop3784" />
</linearGradient>
<linearGradient
id="linearGradient4333-6-7">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4335-0-4" />
<stop
style="stop-color:#e1e1e1;stop-opacity:1;"
offset="1"
id="stop4337-49-0" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4435"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-606.51586,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient3780"
id="linearGradient4437"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-1434.0326,365.55395)"
x1="1984.2427"
y1="-348.63434"
x2="1984.2427"
y2="-293.69879" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4439"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-699.19746,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4441"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-699.87915,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4443"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-703.2869,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4445"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-701.24225,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4447"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-699.1976,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4449"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-701.24225,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4451"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-701.24225,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
xlink:href="#linearGradient4333-6-7"
id="linearGradient4453"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-701.24225,-487.01655)"
x1="845.7998"
y1="637.30005"
x2="845.7998"
y2="509.84348" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-701.24225,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6071"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-701.24225,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6073"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-701.24225,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6075"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-699.1976,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6077"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-701.24225,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6079"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-703.2869,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6081"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-699.87915,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6083"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-699.19746,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6085"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="-293.69879"
x2="1984.2427"
y1="-348.63434"
x1="1984.2427"
gradientTransform="translate(-1434.0326,365.55395)"
gradientUnits="userSpaceOnUse"
id="linearGradient6087"
xlink:href="#linearGradient3780" />
<linearGradient
y2="509.84348"
x2="845.7998"
y1="637.30005"
x1="845.7998"
gradientTransform="translate(-606.51586,-487.01655)"
gradientUnits="userSpaceOnUse"
id="linearGradient6089"
xlink:href="#linearGradient4333-6-7" />
<linearGradient
y2="-5.3252554"
x2="1795.8763"
y1="-116.8399"
x1="1795.8763"
gradientTransform="translate(-1431.3064,219.11539)"
gradientUnits="userSpaceOnUse"
id="linearGradient6095"
xlink:href="#linearGradient4405" />
<mask
id="mask6091"
maskUnits="userSpaceOnUse">
<rect
y="11.978719"
x="8.1208458"
height="153.34807"
width="582.72266"
id="rect6093"
style="color:#000000;fill:url(#linearGradient6095);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0" />
</mask>
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Shaarli Logo</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>http://blog.idleman.fr/</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2012-08-29 22:36:01+02:00</dc:date>
<dc:publisher>
<cc:Agent>
<dc:title>http://sebsauvage.net/</dc:title>
</cc:Agent>
</dc:publisher>
<dc:subject>
<rdf:Bag>
<rdf:li>Shaarli</rdf:li>
<rdf:li>Logo</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:contributor>
<cc:Agent>
<dc:title>http://thatguynamedandy.com/,
http://mro.name/me</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://www.opensource.org/licenses/zlib-license.php" />
<dc:source>http://sebsauvage.net/files/shaarli_logo.zip</dc:source>
<dc:relation>http://sebsauvage.net/wiki/doku.php?id=php:shaarli:discussion#comment_09a1e91bc0abc7db6d186a6abf429877</dc:relation>
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:inline"
id="layer9">
<g
id="g6232">
<g
style="display:inline"
id="g5987"
transform="matrix(1,0,0,-1,0,323.7441)"
mask="url(#mask6091)">
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 549.36434,78.11349 c -9.4946,1.99352 -9.7027,14.03504 -9.8352,21.77668 0.1121,11.0831 -0.2095,22.9628 4.1417,33.27264 2.0054,4.85047 9.7812,4.74809 10.3195,-1.06753 4.7624,-15.20498 4.7481,-32.01281 1.4946,-47.50541 -0.983,-2.75668 -3.069,-6.35036 -6.1206,-6.47638 z"
id="path5989" />
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 499.48944,47.6175 c -6.4927,-0.34021 -9.3439,6.60543 -8.1121,12.16941 -0.5858,24.07597 -0.3292,48.31194 0.034,72.30837 1.7508,6.96484 14.895,8.48808 15.0166,-0.0712 1.2169,-13.27189 -0.274,-26.75029 0.6639,-40.10232 0.7817,-11.41478 -0.5568,-23.24296 -0.6994,-34.37618 1.5849,-5.10643 -0.4706,-11.12871 -6.9034,-9.92811 z"
id="path5991" />
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 132.42293,35.23407 c -7.6945,2.17125 -5.9206,12.79289 -6.2273,19.00216 1.6106,23.24538 0.8475,46.57408 2.1706,69.81693 0.068,7.09423 3.2021,16.90233 11.8853,16.22657 7.5709,-1.76417 5.7778,-11.8325 5.6557,-17.71589 -0.047,-7.84014 -4.5559,-19.23884 3.9165,-24.30949 7.6405,-5.37547 19.848,0.64078 18.6463,10.39069 -0.3251,8.83089 -2.0837,22.16882 7.8287,26.47493 6.4024,2.92649 10.6176,-5.21693 9.3943,-10.71096 -0.3749,-13.55442 1.2727,-30.22607 -10.711,-39.6768 -7.9735,-4.05845 -18.9828,-5.54515 -26.8307,-0.21351 -1.0372,2.42576 -6.9951,6.95054 -6.4053,1.24546 -1.6949,-15.3749 2.056,-31.45755 -2.3485,-46.40228 -1.2024,-2.63946 -4.0324,-4.45898 -6.9746,-4.12781 z"
id="path5993" />
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 442.14024,64.05759 c -10.165,-0.2579 -20.6562,1.86137 -28.1474,9.18081 -2.8958,2.05591 -1.2663,-4.94966 -4.8395,-5.01742 -5.4074,-2.93338 -11.5829,2.98762 -9.5367,8.75381 0.099,20.06919 -1.977,40.97889 3.8787,60.387 3.1796,4.95849 13.7562,4.09337 12.7037,-2.9891 1.546,-15.53942 -2.968,-32.10549 3.167,-46.86488 4.3319,-8.66318 18.41,-14.13659 25.3718,-5.90704 3.521,6.12624 -0.9752,16.78774 6.8323,20.31879 7.6504,1.3481 9.6041,-9.08157 8.825,-14.7676 -1.6539,-6.72434 -2.1565,-14.5353 -6.6544,-19.99852 -3.1376,-2.78799 -7.564,-3.22067 -11.6005,-3.09585 z"
id="path5995" />
<path
style="color:#000000;fill:url(#linearGradient6071);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 442.38294,54.04595 c -0.1827,-0.005 -0.3789,0.0345 -0.5625,0.0312 -8.6942,-0.15632 -18.301,1.16995 -26.7813,5.96876 -0.368,-0.21564 -0.7676,-0.37654 -1.1562,-0.5625 l 0.031,-0.0625 c -0.2019,-0.10958 -0.4204,-0.1194 -0.625,-0.21875 -0.5569,-0.23563 -1.1103,-0.37966 -1.6874,-0.53125 -6.0741,-2.10894 -12.7994,-0.4336 -16.8438,3.34375 -3.8577,3.60298 -6.0063,9.29062 -5.1562,15.125 0.085,19.31578 -2.292,41.23535 4.3124,63.12499 l 0.4063,1.3125 0.75,1.1875 c 4.4521,6.94297 11.5862,8.53059 18,7.46875 3.2069,-0.53092 6.701,-1.89897 9.5,-5.03125 2.2725,-2.54317 3.5121,-6.27514 3.5937,-9.84375 0,-0.0435 0,-0.0816 0,-0.125 1.7478,-17.81793 -1.8544,-32.72457 2.2813,-43.375 0.6976,-1.23208 3.1856,-3.39065 5.4063,-4.03125 1.1119,-0.32077 1.7363,-0.44325 2.1874,-0.40625 0.051,0.8996 0.2789,2.71568 0.5313,6.0625 0.1821,2.41445 0.4732,5.42185 2.0313,8.8125 1.558,3.39065 4.8419,6.94014 8.8437,8.75 l 1.1563,0.5 1.2187,0.21875 c 4.1545,0.73208 8.9361,-0.28467 12.2187,-2.59375 3.2827,-2.30908 5.1358,-5.31163 6.3126,-8.0625 2.3534,-5.50175 2.5912,-10.54096 1.9374,-15.3125 l -0.062,-0.53125 -0.125,-0.5 c -1.3372,-5.43656 -1.418,-15.17693 -8.6563,-23.96874 l -0.4687,-0.59375 -0.5938,-0.53125 c -6.0316,-5.35952 -13.0425,-5.71213 -18,-5.59376 l 0,-0.0312 z m -20.9688,14.62501 c 0.3103,0.61975 0.1924,0.76755 0.063,0.28125 -0.016,-0.0599 -0.046,-0.21107 -0.063,-0.28125 z m -11.8437,14.15624 c 0.271,0.10418 0.5347,0.22752 0.8125,0.3125 l -0.125,0.21875 -0.125,0.3125 c -0.2313,0.55649 -0.3535,1.10135 -0.5625,1.65625 0.01,-0.84699 -0.01,-1.64903 0,-2.5 z"
id="path5997" />
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:38"
d="m 334.93614,43.42895 -1.125,0.0625 c -11.4541,0.68757 -31.1299,2.13948 -42.5313,20.5 l -0.6875,1.15625 -0.5312,1.21875 c -4.0155,9.09454 -1.1737,19.34928 5,25.5 -7.1006,9.03999 -10.5361,20.69833 -9.25,32.65625 -0.7932,13.71238 8.5163,26.58972 21.5624,30.34375 l -0.031,0.0625 c 14.5936,5.02387 28.3345,3.89176 40,1.875 1.1383,0.61027 2.377,1.24208 3.8438,1.84375 3.1932,1.30991 7.6804,2.60895 13.1874,1.96875 5.5071,-0.6402 11.3463,-3.71585 15.0626,-7.53125 l 0.6562,-0.6875 0.5938,-0.75 c 7.375,-9.27994 7.6766,-20.19393 7.1874,-26.8125 -0.4891,-6.61857 -1.0653,-10.99648 -1.0312,-11.375 l 0.125,-1.46875 -0.094,-1.5 c -0.9045,-13.69999 -0.4438,-31.50909 -8.6874,-49.71875 -0.8869,-3.14352 -2.6183,-4.60975 -5,-6.625 -14.193,-12.04738 -29.8012,-10.22761 -37.125,-10.65625 z m -5,69.25 c -0.6975,0.25422 -0.096,-0.059 3.5937,0.375 3.1757,0.3735 8.4922,1.29071 15.3437,0.34375 -0.042,1.60674 -0.047,3.10046 0.031,4.46875 l -1.2187,0.25 c -9.4296,1.92946 -17.7526,2.70557 -24.0626,1.71875 0.3089,-2.61777 2.5558,-6.11412 4.2813,-6.53125 l 1.0313,-0.25 1,-0.375 z"
id="path5999" />
<path
id="path6001"
d="m 242.86794,62.94328 c -9.8451,0.59098 -21.9234,2.57343 -27.5069,11.56498 -1.5225,3.44827 2.5155,7.16458 5.8003,4.55483 11.6876,-3.18405 25.8772,-8.64334 36.9368,-1.03196 3.4255,4.6575 3.2712,13.73214 -2.1351,16.8315 -8.1137,1.83399 -16.456,-2.50178 -24.589,0.4626 -12.7407,3.08001 -20.924,16.83116 -18.6463,29.53519 -1.221,6.03853 2.7535,11.58045 8.7182,12.59694 12.2603,4.22059 25.7141,2.25842 37.9688,-0.24909 3.9671,2.72001 9.7011,7.85911 14.3406,3.09585 6.2596,-7.87653 1.273,-19.02318 2.088,-28.06851 -0.9577,-14.50429 -1.0481,-29.91302 -7.0343,-43.1362 -7.0905,-6.01862 -17.2216,-5.6458 -25.9411,-6.15613 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="color:#000000;fill:url(#linearGradient6073);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 132.71733,24.19589 c -0.5004,0.0152 -1.0205,0.0363 -1.5312,0.0937 l -0.9063,0.0937 -0.8437,0.25 c -4.2861,1.20943 -8.1936,4.24904 -10.375,7.56249 -2.1816,3.31346 -2.9841,6.56659 -3.4063,9.375 -0.8444,5.61682 -0.3823,10.37282 -0.4687,12.125 l -0.031,0.65625 0.062,0.625 c 1.548,22.34205 0.8033,45.46456 2.125,69.1875 5e-4,0.0505 0.031,0.10568 0.031,0.15625 0.01,0.1151 -0.01,0.22862 0,0.34375 l 0.031,0 c 0.099,4.98929 0.9665,10.43113 4.125,15.90625 3.2605,5.65198 11.0145,11.32149 19.5625,10.65625 l 0.8438,-0.0625 0.8124,-0.1875 c 4.2384,-0.98762 8.3269,-3.79564 10.625,-7.09375 2.1728,-3.63384 4.3342,-6.89183 5.1872,-10.22818 3.8402,7.13335 5.9507,8.04619 13.1566,11.44693 l 0,0.0312 c 0.059,0.0269 0.1281,0.0362 0.1875,0.0625 3.7423,1.65403 8.4312,1.97661 12.2813,0.65625 3.91101,-1.34132 6.71761,-3.90092 8.59371,-6.5 3.336,-4.62154 4.6441,-9.64143 3.9063,-15.25 -0.1718,-6.20746 0.2238,-14.23226 -1.1563,-22.8125 -1.3801,-8.58024 -5.0962,-18.36284 -13.75001,-25.1875 l -0.8437,-0.6875 -0.9688,-0.5 c -7.7653,-3.95251 -17.7087,-6.355 -27.4062,-4.09375 0.4086,-10.28331 1.089,-21.96033 -2.625,-34.5625 l -0.2188,-0.75 -0.3125,-0.71875 c -2.9167,-6.40275 -9.181,-10.82231 -16.6875,-10.59374 z m 6.0625,53.99999 c 0,0.0101 0.05,0.0315 0.062,0.0625 l -0.6245,1.46875 c 0.3311,-0.86163 0.5542,-1.56647 0.5625,-1.53125 z m 36.0625,48.28125 c 0.012,-0.004 0.019,0.005 0.031,0 l 0.063,0.3125 c -0.043,-0.19086 -0.061,-0.25465 -0.094,-0.3125 z"
id="path6003" />
<path
style="fill:#484848;fill-opacity:1;stroke:none"
id="path6005"
d="m 133.3461,36.09636 c -1.692,0.49428 -2.8155,1.39846 -3.625,2.625 -0.8214,1.24442 -1.3243,2.85069 -1.5938,4.625 -0.5342,3.51732 -0.1953,7.61208 -0.3438,10.8125 0,0.0285 0,0.0654 0,0.0937 1.6063,23.27388 0.8692,46.5905 2.1876,69.75 a 0.88388823,0.88388823 0 0 1 0,0.0625 c 0.033,3.4213 0.83,7.53419 2.5937,10.59375 1.7438,3.02495 4.2922,5.00636 8.2187,4.75 0.011,-7.3e-4 0.02,7.7e-4 0.031,0 1.6857,-0.39978 2.7542,-1.19719 3.5313,-2.3125 0.7819,-1.12237 1.2391,-2.59827 1.4687,-4.25 0.4593,-3.30346 2e-4,-7.22907 -0.062,-10.25 a 0.88388823,0.88388823 0 0 1 0,-0.0312 c -0.023,-3.75401 -1.179,-8.58343 -1.25,-13.1875 -0.071,-4.59014 1.0512,-9.12033 5.5625,-11.84375 0.012,-0.008 0.019,-0.023 0.031,-0.0312 8.2411,-5.75335 21.2001,0.72746 19.9687,11.1875 0,0.011 0,0.0202 0,0.0312 -4e-4,0.01 4e-4,0.0216 0,0.0312 -0.1662,4.44678 -0.6416,9.92071 0.094,14.71875 0.7386,4.81878 2.5857,8.83105 7.2188,10.84375 a 0.88388823,0.88388823 0 0 1 0.031,0 c 1.4264,0.65196 2.625,0.67804 3.6876,0.3125 1.0625,-0.36554 2.0152,-1.15367 2.7812,-2.21875 1.532,-2.13016 2.2012,-5.36524 1.6562,-7.8125 a 0.88388823,0.88388823 0 0 1 0,-0.15625 c -0.1887,-6.82351 0.1073,-14.35845 -1,-21.28125 -1.1026,-6.89383 -3.5864,-13.13587 -9.3124,-17.6875 -7.7294,-3.90433 -18.3437,-5.25802 -25.7813,-0.25 -0.7734,1.48479 -2.3237,3.00623 -4,3.78125 -0.9043,0.41808 -1.982,0.65336 -2.875,0.0312 -0.8519,-0.59346 -1.0866,-1.72753 -0.9687,-3.1875 0.01,-0.0705 -0.01,-0.11538 0,-0.1875 -1.6634,-15.48034 1.9617,-31.38045 -2.2813,-45.9375 -1.0363,-2.2749 -3.4784,-3.85945 -5.9687,-3.625 z" />
<path
style="color:#000000;fill:url(#linearGradient6075);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 500.00794,37.6397 c -0.47,-0.0246 -0.9099,0.13839 -1.375,0.15625 -0.3182,0.036 -0.6564,-0.0583 -0.9688,0 l 0,0.0937 c -5.9486,0.59666 -11.3199,4.27914 -13.8124,8.625 -2.5191,4.39212 -3.1643,9.07388 -2.4688,13.75001 -0.5691,24.07161 -0.3288,48.17845 0.031,71.96874 l 0.031,1.1875 0.2813,1.125 c 2.2758,9.05358 10.1204,12.94327 17.2812,13.3125 3.5804,0.18461 7.6057,-0.50128 11.25,-3.21875 3.4431,-2.56742 5.753,-7.21537 6.0625,-11.6875 l 0.062,0 c 0.024,-0.26477 0.01,-0.51719 0.031,-0.78125 1.2169,-14.32127 -0.1813,-27.63851 0.6563,-39.5625 0.8412,-12.28307 -0.4559,-23.97948 -0.6563,-34.18749 0.9168,-4.19732 0.7514,-8.64033 -1.75,-13.09376 -2.5398,-4.52202 -8.6787,-7.57722 -14.4374,-7.5625 -0.073,1.9e-4 -0.1457,-0.001 -0.2188,0 l 0,-0.125 z m -0.4375,10.46875 1.5625,8.375 c -0.089,0.0884 -0.5399,0.26586 -0.9688,0.50001 -0.4433,-0.17558 -0.588,-0.31717 -1.125,-0.59376 l 0.5313,-8.28125 z m 1.625,8.6875 0.125,0.65626 c 0,-5.2e-4 -0.146,-0.0578 -0.1563,-0.0625 0.013,-0.26164 0.01,-0.41632 0.031,-0.59376 z"
id="path6007" />
<path
style="fill:#484848;fill-opacity:1;stroke:none"
d="m 499.48944,47.6175 c -6.4927,-0.34021 -9.3439,6.60543 -8.1121,12.16941 -0.5858,24.07597 -0.3292,48.31194 0.034,72.30837 1.7508,6.96484 14.895,8.48808 15.0166,-0.0712 1.2169,-13.27189 -0.274,-26.75029 0.6639,-40.10232 0.7817,-11.41478 -0.5568,-23.24296 -0.6994,-34.37618 1.5849,-5.10643 -0.4706,-11.12871 -6.9034,-9.92811 z"
id="path6009" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 544.51954,53.6313 c -7.5784,-0.46784 -10.6755,10.08558 -4.626,14.19825 6.4831,5.13984 16.9776,-2.57743 12.9884,-10.24836 -1.4384,-3.20261 -5.1136,-4.25984 -8.3624,-3.94989 z"
id="path6011" />
<path
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:38;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 66.312222,57.93009 c -17.370703,0.62829 -30.0641,20.09681 -26.023403,36.39781 2.1928,10.05075 13.8541,12.09708 22.635103,11.4922 7.1377,-0.5151 17.6041,2.45346 16.7319,11.49222 -1.8676,6.29718 -10.9897,4.97438 -16.0667,5.21679 -7.019003,0.3042 -14.551803,-2.83467 -21.309203,-1.0251 -5.546297,3.71601 -0.7698,11.63178 4.4362,13.09902 11.6204,3.85396 24.776703,2.98561 36.677203,0.52396 8.494404,-1.78465 13.976704,-9.66183 14.007304,-18.12905 0.5362,-8.45978 -0.1252,-18.85777 -9.082,-22.63511 -7.833304,-4.5437 -17.524404,-2.59996 -25.744004,-4.64578 -6.504303,-3.75215 -4.590203,-15.08325 3.2137,-15.54417 8.376,-2.645 16.5844,3.54335 24.730904,1.74653 6.8027,-2.75685 5.6777,-13.26551 -1.2924,-15.19486 C 82.177322,57.19274 73.972122,57.9802 66.312222,57.93009 Z"
id="path6013" />
<path
style="color:#000000;fill:url(#linearGradient6077);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 66.146122,46.92095 -0.2187,0.0312 c -25.268203,0.91394 -41.9786,26.29641 -36.375,49.71875 0,0.01 0,0.0214 0,0.0312 0.023,0.0937 0.039,0.18758 0.062,0.28125 l 0.062,0 c 1.4158,6.03031 5.2241,10.72981 9.5937,13.9375 l -1.5937,0.4375 -1.5313,1 c -3.4934,2.34058 -6.2461,6.40677 -7.0312,10.4375 -0.7852,4.03073 0.016,7.64447 1.2812,10.53125 2.4625,5.61698 6.4364,9.72109 12.843797,11.6875 l 0,0.0312 c 0.1235,0.0409 0.2514,0.0537 0.375,0.0937 0.044,0.0142 0.081,0.0484 0.125,0.0625 14.2876,4.59699 29.052403,3.33987 41.875007,0.6875 l 0.031,0 c 13.703,-2.87897 22.354804,-15.23519 22.687504,-28.1875 l 0.031,0 c 0.01,-0.1043 -0.01,-0.23849 0,-0.34375 0,-0.10511 0.031,-0.20733 0.031,-0.3125 l -0.031,0 c 0.275,-4.68022 0.3633,-10.21921 -1.4063,-16.21875 -1.6128,-5.46789 -5.6186,-11.40935 -11.718704,-15.03125 C 110.28983,79.05558 108.57813,56.15757 93.550926,50.6395 83.076822,45.62854 73.121622,46.96476 66.394622,46.92075 l -0.25,0 z M 49.927419,124.0772 c 0.4736,0.11312 0.7429,0.17483 0.6875,0.1875 -0.1379,-0.0437 -0.3009,-0.0484 -0.4375,-0.0937 l -0.25,-0.0937 z"
id="path6015" />
<path
style="fill:#484848;fill-opacity:1;stroke:none"
id="path6017"
d="M 67.047,59.37761 C 50.7565,60.01346 38.6203,78.63489 42.422,93.97136 a 1.4420115,1.4420115 0 0 1 0,0.0312 c 0.9874,4.52574 3.9833,7.14275 7.9688,8.71875 3.9854,1.576 8.921,1.948 13.1562,1.65625 3.8182,-0.27555 8.4163,0.35581 12.1562,2.34375 3.74,1.98794 6.6157,5.6345 6.125,10.71875 a 1.4420115,1.4420115 0 0 1 -0.062,0.28125 c -0.5618,1.89409 -1.746,3.32797 -3.1876,4.25 -1.4415,0.92203 -3.0867,1.39395 -4.7812,1.65625 -3.3889,0.5246 -7.0334,0.23046 -9.4062,0.34375 -7.4077,0.32104 -14.726,-2.60314 -20.7813,-1.09375 -0.9228,0.69289 -1.3969,1.4625 -1.5625,2.3125 -0.1806,0.92739 -0.017,2.01851 0.4688,3.125 0.9708,2.21298 3.281,4.32492 5.3437,4.90625 a 1.4420115,1.4420115 0 0 1 0.062,0 c 11.2515,3.73156 24.1465,2.93253 35.9062,0.5 7.7821,-1.63499 12.8466,-8.87337 12.875,-16.71875 a 1.4420115,1.4420115 0 0 1 0,-0.0937 c 0.2634,-4.15469 0.2008,-8.71518 -0.9374,-12.5625 -1.1383,-3.84732 -3.227,-6.9152 -7.2813,-8.625 a 1.4420115,1.4420115 0 0 1 -0.1563,-0.0937 c -7.233,-4.1955 -16.6908,-2.33856 -25.375,-4.5 a 1.4420115,1.4420115 0 0 1 -0.375,-0.15625 c -7.593,-4.38022 -5.364,-17.27483 3.5,-18.15625 l 0,-0.0312 c 0.1153,-0.0364 0.2288,-0.0291 0.3438,-0.0625 4.5012,-1.3064 8.8395,-0.37995 12.875,0.59375 4.0804,0.98454 7.88,1.92841 11.4688,1.1875 5.4755,-2.31046 4.4951,-10.8333 -1.1876,-12.40625 a 1.4420115,1.4420115 0 0 1 -0.2812,-0.0937 c -6.5535,-3.28332 -14.4405,-2.57842 -22.1875,-2.625 -0.021,-1.3e-4 -0.042,1.4e-4 -0.062,0 z" />
<path
style="color:#000000;fill:url(#linearGradient6079);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 334.91414,52.45217 -0.5624,0.0312 c -10.692,0.64182 -26.7608,2.35866 -35.4063,16.28126 l -0.375,0.59375 -0.2813,0.625 c -2.6168,5.92672 -0.4865,12.63582 3.8126,16.24999 2.47,2.0766 6.1544,2.97511 9.8124,2.75 -12.1731,7.16212 -18.9579,21.29295 -17.0937,35.5 -0.9321,10.0329 5.7963,19.42583 15.4375,21.90625 l 0,0.0312 c 13.5839,4.67628 27.0449,3.11875 38.7812,0.90625 1.4491,0.98507 3.2876,2.06677 5.5626,3 2.2748,0.93323 5.2583,1.74964 8.75,1.34375 3.4915,-0.40589 7.1195,-2.30283 9.625,-4.875 l 0.375,-0.34375 0.3124,-0.40625 c 5.3642,-6.74967 5.6479,-14.75709 5.2188,-20.5625 -0.4291,-5.80541 -1.211,-10.50221 -1,-12.84375 l 0.062,-0.78125 -0.062,-0.75 c -0.9297,-14.08097 -0.732,-30.77734 -7.9062,-46.62499 -0.4593,-1.65783 -1.3753,-2.43205 -2.625,-3.4999 -10.8288,-9.19166 -23.8588,-8.03267 -31.8438,-8.50001 l -0.5938,-0.0312 z m 22.0626,47.46875 c 0.2983,4.01025 0.663,7.89337 0.9374,12.09375 -0.3619,6.15055 0.7536,11.18085 1.0313,14.9375 0.091,1.23358 -3e-4,1.89681 -0.031,2.71875 -0.7261,-0.49389 -0.8804,-0.56988 -1.7812,-1.1875 l -3.5,-2.40625 -4.1562,0.84375 c -11.8502,2.42474 -23.4896,3.77093 -32.7188,0.59375 l -0.75,-0.25 -0.8125,-0.15625 c -0.7563,-0.12889 -0.7437,-0.008 -0.5937,-0.75 l 0.375,-1.875 -0.3438,-1.875 c -1.3223,-7.37497 4.0726,-16.31882 11.1562,-18.03125 l 0.5626,-0.15625 0.5312,-0.1875 c 1.5591,-0.56829 3.7957,-0.58273 7.6875,-0.125 3.8918,0.45773 9.2275,1.48444 15.6563,0.0312 l 1.4687,-0.34375 1.3125,-0.75 c 1.5458,-0.8862 2.8481,-1.95265 3.9688,-3.125 z"
id="path6019" />
<path
style="fill:#484848;fill-opacity:1;stroke:none"
id="path6021"
d="m 442.8461,65.50261 c -9.9417,-0.25223 -20.0112,1.83054 -27.125,8.78125 a 1.4249747,1.4249747 0 0 1 -0.1876,0.125 c -0.4923,0.34955 -1.0141,0.64308 -1.6874,0.65625 -0.6734,0.0132 -1.3402,-0.39879 -1.6876,-0.8125 -0.6947,-0.82743 -0.7686,-1.5945 -0.9687,-2.34375 -0.2001,-0.74925 -0.4246,-1.47139 -0.6563,-1.84375 -0.2316,-0.37236 -0.2624,-0.39819 -0.6874,-0.40625 a 1.4249747,1.4249747 0 0 1 -0.6563,-0.1875 c -2.1511,-1.16691 -4.3134,-0.58174 -5.9063,0.90625 -1.5928,1.48799 -2.4145,3.81205 -1.5937,6.125 a 1.4249747,1.4249747 0 0 1 0.094,0.46875 c 0.099,20.08519 -1.9054,40.73856 3.75,59.71875 1.2377,1.74956 4.0539,2.66609 6.4063,2.28125 1.2075,-0.19755 2.2216,-0.71247 2.8437,-1.40625 0.6222,-0.69378 0.9615,-1.54589 0.75,-2.96875 a 1.4249747,1.4249747 0 0 1 0,-0.375 c 1.5091,-15.16756 -3.1254,-31.94343 3.25,-47.28125 a 1.4249747,1.4249747 0 0 1 0.031,-0.0625 c 2.3884,-4.77662 7.2847,-8.50018 12.5937,-10.03125 5.3091,-1.53107 11.2689,-0.75156 15.1563,3.84375 a 1.4249747,1.4249747 0 0 1 0.1563,0.1875 c 2.0694,3.60071 1.6918,8.0153 1.9687,11.75 0.1385,1.86735 0.4194,3.54061 1.0313,4.875 0.5916,1.2904 1.4751,2.25734 3.0312,3 1.4606,0.20734 2.5297,-0.051 3.4375,-0.6875 0.9587,-0.67214 1.771,-1.81376 2.375,-3.21875 1.2079,-2.80999 1.508,-6.6831 1.1563,-9.25 -1.6601,-6.82503 -2.269,-14.23556 -6.2813,-19.1875 -2.6943,-2.32961 -6.6692,-2.77567 -10.5313,-2.65625 a 1.4249747,1.4249747 0 0 1 -0.062,0 z" />
<path
style="color:#000000;fill:url(#linearGradient6081);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 548.52594,68.07721 -1.2187,0.25 c -8.6956,1.82574 -14.1425,9.53796 -15.9688,15.68749 -1.8263,6.14954 -1.7462,11.84707 -1.8125,15.71875 l 0,0.125 0,0.125 c 0.1092,10.79916 -0.5536,24.0134 4.9063,37 0.01,0.0225 0.022,0.0401 0.031,0.0625 2.7726,6.62078 9.3817,9.9621 15.5625,9.5625 5.6001,-0.36206 11.8353,-5.2195 13.5,-11.53125 5.3924,-17.21633 5.3013,-35.62075 1.75,-52.53125 l -0.1563,-0.6875 -0.2187,-0.62499 c -0.7814,-2.19128 -1.853,-4.62969 -3.9375,-7.1875 -2.0845,-2.55781 -5.8401,-5.71667 -11.1875,-5.9375 l -1.25,-0.0312 z"
id="path6023" />
<path
style="fill:#484848;fill-opacity:1;stroke:none"
id="path6025"
d="m 550.1139,78.59636 c -4.5226,0.97522 -6.7823,4.26272 -8,8.375 -1.2232,4.13111 -1.3087,9.03503 -1.375,12.90625 0.1123,11.09592 -0.2043,22.90976 4.0938,33.09375 0.9213,2.22841 3.1731,3.32073 5.25,3.1875 2.0769,-0.13323 3.906,-1.39 4.1562,-4.09375 a 0.46475483,0.46475483 0 0 1 0.031,-0.0937 c 4.7332,-15.11164 4.7084,-31.85462 1.4687,-47.28125 -0.4788,-1.32581 -1.2248,-2.85305 -2.1874,-4.03125 -0.9629,-1.17844 -2.1146,-1.98485 -3.4376,-2.0625 z" />
<path
style="color:#000000;fill:url(#linearGradient6083);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
d="m 242.87094,52.92092 -0.5938,0.0312 c -10.6919,0.64192 -26.7607,2.35873 -35.4062,16.28131 l -0.375,0.59375 -0.2813,0.65625 c -2.6168,5.92671 -0.4864,12.60456 3.8125,16.21874 2.4771,2.0825 6.1757,2.98309 9.8438,2.75 -12.176,7.14722 -18.9659,21.26849 -17.125,35.46875 -0.9665,10.0609 5.7999,19.48906 15.4687,21.96875 l -0.031,0.0312 c 13.5891,4.67806 27.073,3.12012 38.8125,0.90625 1.4445,0.97996 3.2715,2.07302 5.5313,3 2.2749,0.93323 5.2585,1.71839 8.75,1.3125 3.4915,-0.40589 7.1509,-2.27156 9.6562,-4.84375 l 0.3438,-0.375 0.3125,-0.40625 c 5.3641,-6.74969 5.6478,-14.72585 5.2187,-20.53125 -0.4291,-5.8054 -1.2109,-10.50221 -1,-12.84375 l 0.062,-0.78125 -0.062,-0.78125 c -0.9297,-14.081 -0.7006,-30.74608 -7.875,-46.59374 l -0.9375,-2.0625 -1.7187,-1.4375 c -10.8287,-9.19167 -23.8276,-8.06392 -31.8125,-8.53126 l -0.5938,-0.0312 z m 22.0312,47.5 c 0.2974,4.00059 0.6637,7.87292 0.9375,12.0625 -0.3619,6.15055 0.7536,11.2121 1.0313,14.96875 0.091,1.22812 0,1.86766 -0.031,2.6875 -0.7261,-0.49388 -0.8805,-0.56989 -1.7813,-1.1875 l -3.5,-2.40625 -4.1562,0.875 c -11.8502,2.42475 -23.4582,3.77094 -32.6875,0.59375 l -0.7813,-0.28125 -0.8125,-0.125 c -0.7563,-0.12888 -0.7437,-0.0396 -0.5938,-0.78125 l 0.375,-1.84375 -0.3437,-1.875 c -1.3223,-7.37494 4.0726,-16.35008 11.1562,-18.0625 l 0.5625,-0.125 0.5313,-0.1875 c 1.5591,-0.56828 3.7957,-0.58273 7.6875,-0.125 3.8918,0.45773 9.2275,1.45313 15.6562,0 l 1.4688,-0.3125 1.3125,-0.75 c 1.5458,-0.8862 2.8482,-1.95265 3.9687,-3.125 z"
id="path6027" />
<path
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6029"
d="m 243.6361,64.63031 c -9.6363,0.58398 -20.9336,2.59484 -26.0312,10.625 -0.4035,0.99026 -0.045,1.9107 0.6562,2.5 0.717,0.60234 1.4896,0.85243 2.5626,0 a 1.684398,1.684398 0 0 1 0.625,-0.3125 c 5.775,-1.5733 12.3167,-3.78461 18.9374,-4.625 6.6208,-0.84039 13.4444,-0.25925 19.4063,3.84375 a 1.684398,1.684398 0 0 1 0.375,0.375 c 2.0281,2.75755 2.9112,6.50666 2.5937,10.125 -0.3174,3.61834 -1.9072,7.25777 -5.2187,9.15625 a 1.684398,1.684398 0 0 1 -0.4687,0.1875 c -4.4561,1.00721 -8.7953,0.29068 -12.875,-0.1875 -4.0798,-0.47818 -7.8868,-0.73461 -11.5313,0.59375 a 1.684398,1.684398 0 0 1 -0.1563,0.0312 c -11.7884,2.8498 -19.5228,15.78804 -17.4062,27.59375 a 1.684398,1.684398 0 0 1 0,0.65625 c -1.0407,5.14641 2.2557,9.72666 7.3438,10.59375 a 1.684398,1.684398 0 0 1 0.2812,0.0625 c 11.7498,4.04484 24.8758,2.18109 37.0625,-0.3125 a 1.684398,1.684398 0 0 1 1.2813,0.28125 c 2.0816,1.42722 4.4575,3.29235 6.625,4.1875 1.0837,0.44757 2.0633,0.63094 2.9374,0.53125 0.8627,-0.0984 1.6764,-0.44585 2.5938,-1.375 0.01,-0.0118 0.022,-0.0195 0.031,-0.0312 2.6608,-3.43997 2.9705,-7.61463 2.625,-12.3125 -0.3431,-4.66636 -1.3766,-9.66321 -1,-14.46875 -0.9524,-14.4251 -1.1073,-29.45823 -6.7187,-42.15625 -6.4124,-5.22259 -15.7954,-5.06556 -24.4687,-5.5625 -0.021,-10e-4 -0.042,0.001 -0.063,0 z" />
<path
style="color:#000000;fill:url(#linearGradient6085);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
id="path6031"
d="m 252.9376,106.30395 c -3.4993,0.0307 -6.9607,-0.0581 -10.375,0.0312 -4.1004,0.36044 -9.0376,1.69024 -12.625,4.09375 -3.614,2.42133 -5.8704,5.68864 -5.2813,10.4375 0.4935,4.61527 3.5645,7.56447 7.6876,9.21875 4.123,1.65428 9.2633,1.8209 13.1562,0.65625 a 1.3611835,1.3611835 0 0 1 0.1562,-0.0312 c 2.8688,-0.49834 6.5939,-1.2529 9.2813,-2.71875 1.3437,-0.73292 2.3836,-1.63683 3.0313,-2.6875 0.6476,-1.05067 0.9604,-2.26047 0.6874,-3.96875 a 1.3611835,1.3611835 0 0 1 0,-0.28125 c 0.1564,-2.76724 0.3451,-6.68524 -0.375,-9.71875 -0.36,-1.51676 -0.9264,-2.77474 -1.75,-3.625 -0.8176,-0.8442 -1.8698,-1.36151 -3.5624,-1.40625 -0.012,-3.2e-4 -0.019,2.7e-4 -0.031,0 z" />
<path
style="color:#000000;fill:#305f00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10"
d="m 550.24144,11.97714 c -4.7431,8e-5 -9.3884,1.94508 -12.1562,5.65625 -2.3938,3.20927 -3.2655,7.28209 -3.5,11.84374 -5.2417,0.10768 -9.658,0.71067 -13.2813,2.53125 -3.7519,1.88519 -6.5576,5.75636 -6.9063,9.9375 l -0.062,0 c -0.013,0.1027 0.011,0.20947 0,0.3125 0,0.043 -0.03,0.0819 -0.031,0.125 l 0.031,0 c -0.383,3.94189 0.8037,8.08581 3.625,10.84375 1.7434,1.70445 3.9242,2.79035 6.3124,3.59375 l -0.875,2.4375 -0.062,0.125 -0.031,0.125 c -1.0239,3.32791 -0.9882,7.09444 0.8437,10.15625 1.8322,3.06181 4.9132,4.85334 8.3438,5.90625 l 0.7188,0.21875 0.75,0 2.2812,0 c 4.1038,5e-5 8.0184,-1.11288 11.1562,-3.5 1.388,-1.05587 2.5677,-2.38102 3.5938,-3.8125 2.738,2.5559 6.0541,4.80834 10,6.78125 l 0.5,0.25 0.5312,0.15625 c 3.235,0.79227 6.3972,0.95306 9.4063,-0.1875 2.9956,-1.13542 5.3523,-3.78973 6.4375,-6.71875 l 0.031,0 0,-0.0312 c 1.3188,-3.58119 1.0754,-7.65809 -0.4687,-11.1875 -0.3593,-0.82136 -0.9637,-1.56048 -1.4375,-2.34375 0.7988,-0.35352 1.5774,-0.75006 2.3125,-1.28125 3.1456,-2.2731 4.4669,-6.43958 4.1563,-10.25 l 0.031,0 c 0,-0.12851 -0.061,-0.24691 -0.062,-0.375 -0.017,-0.15367 0.023,-0.31671 0,-0.46875 l -0.062,0 c -0.2506,-3.85862 -2.6242,-7.47641 -5.875,-9.5625 -3.1968,-2.05143 -7.2278,-3.19745 -12.0625,-4.03124 -0.5947,-4.02941 -1.4462,-7.64148 -3.125,-10.53125 -2.2702,-3.9078 -6.5646,-6.71865 -11.0625,-6.71875 z m 18.3125,50.62499 c 0.2654,0.97712 0.2969,1.7705 -0.031,2.65625 l 0,0.0312 c -0.3181,0.86918 -0.3036,0.72198 -0.625,0.84375 -0.2585,0.098 -1.2073,0.14918 -2.5624,-0.0625 0.3313,-0.1475 0.7366,-0.14338 1.0312,-0.34375 l 0.4375,-0.28125 0.375,-0.40625 c 0.5814,-0.62017 0.9776,-1.55372 1.375,-2.4375 z"
id="path6033" />
<g
id="text6035"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:165.01513672px;line-height:125%;font-family:'comic andy';-inkscape-font-specification:'comic andy';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4437);fill-opacity:1;stroke:none">
<path
id="path98"
style="fill:url(#linearGradient6087);fill-opacity:1"
d="m 550.24549,16.984496 q 8.54083,0 9.83001,16.920498 l 2.33664,0 q 15.22844,2.33664 15.0673,9.668855 1.28918,8.621397 -11.03861,7.976806 9.42713,8.299101 6.7682,15.470169 -2.09492,5.72074 -9.99116,3.786969 -8.70197,-4.350985 -12.32779,-9.991151 l -1.5309,0 q -3.3841,9.991151 -13.13353,9.991151 l -2.25606,0 q -8.13796,-2.497788 -5.88189,-9.830003 l 2.82008,-7.815659 -0.80574,0 q -11.92492,-1.692049 -10.79688,-10.555167 0.32229,-8.137954 16.35648,-8.218527 4.43155,-0.483443 3.70639,-2.820083 0,-14.583858 10.87746,-14.583858 z m -4.5927,16.034186 -0.16115,4.512133 q -0.24172,3.384099 -2.17549,3.384099 l -12.73066,0.725164 q -2.98123,0.08057 -2.98123,2.417214 0,2.256067 3.22295,2.417214 11.19976,-0.564016 10.47459,1.530902 l -2.25606,4.834428 q -5.72074,8.621396 -2.82009,10.152299 3.86754,2.33664 10.95804,-12.08607 1.69205,-1.530902 2.82008,0 4.99558,5.317871 8.21853,8.70197 3.30353,3.3841 5.31787,2.014345 2.41721,-2.578361 -1.28918,-5.559592 -3.62582,-3.061804 -8.2991,-8.379675 -0.48344,-1.772623 0.24172,-1.772623 15.79246,1.047459 15.14787,-2.014345 0.48345,-3.3841 -13.69754,-3.3841 -2.17549,0.402869 -3.54525,-1.047459 l 0,-7.896232 q 0,-6.607052 -3.14238,-6.526478 -3.3841,-0.805738 -3.30352,7.976806 z" />
</g>
<path
d="m 335.7911,64.63031 c -9.6363,0.58398 -20.9336,2.59484 -26.0312,10.625 -0.4035,0.99026 -0.045,1.9107 0.6562,2.5 0.717,0.60234 1.4896,0.85243 2.5626,0 a 1.684398,1.684398 0 0 1 0.625,-0.3125 c 5.775,-1.5733 12.3167,-3.78461 18.9374,-4.625 6.6208,-0.84039 13.4444,-0.25925 19.4063,3.84375 a 1.684398,1.684398 0 0 1 0.375,0.375 c 2.0281,2.75755 2.9112,6.50666 2.5937,10.125 -0.3174,3.61834 -1.9072,7.25777 -5.2187,9.15625 a 1.684398,1.684398 0 0 1 -0.4687,0.1875 c -4.4561,1.00721 -8.7953,0.29068 -12.875,-0.1875 -4.0798,-0.47818 -7.8868,-0.73461 -11.5313,0.59375 a 1.684398,1.684398 0 0 1 -0.1563,0.0312 c -11.7884,2.8498 -19.5228,15.78804 -17.4062,27.59375 a 1.684398,1.684398 0 0 1 0,0.65625 c -1.0407,5.14641 2.2557,9.72666 7.3438,10.59375 a 1.684398,1.684398 0 0 1 0.2812,0.0625 c 11.7498,4.04484 24.8758,2.18109 37.0625,-0.3125 a 1.684398,1.684398 0 0 1 1.2813,0.28125 c 2.0816,1.42722 4.4575,3.29235 6.625,4.1875 1.0837,0.44757 2.0633,0.63094 2.9374,0.53125 0.8627,-0.0984 1.6764,-0.44585 2.5938,-1.375 0.01,-0.0118 0.022,-0.0195 0.031,-0.0312 2.6608,-3.43997 2.9705,-7.61463 2.625,-12.3125 -0.3431,-4.66636 -1.3766,-9.66321 -1,-14.46875 -0.9524,-14.4251 -1.1073,-29.45823 -6.7187,-42.15625 -6.4124,-5.22259 -15.7954,-5.06556 -24.4687,-5.5625 -0.021,-10e-4 -0.042,0.001 -0.063,0 z"
id="path6039"
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
d="m 345.6192,106.30395 c -3.4993,0.0307 -6.9607,-0.0581 -10.375,0.0312 -4.1004,0.36044 -9.0376,1.69024 -12.625,4.09375 -3.614,2.42133 -5.8704,5.68864 -5.2813,10.4375 0.4935,4.61527 3.5645,7.56447 7.6876,9.21875 4.123,1.65428 9.2633,1.8209 13.1562,0.65625 a 1.3611835,1.3611835 0 0 1 0.1562,-0.0312 c 2.8688,-0.49834 6.5939,-1.2529 9.2813,-2.71875 1.3437,-0.73292 2.3836,-1.63683 3.0313,-2.6875 0.6476,-1.05067 0.9604,-2.26047 0.6874,-3.96875 a 1.3611835,1.3611835 0 0 1 0,-0.28125 c 0.1564,-2.76724 0.3451,-6.68524 -0.375,-9.71875 -0.36,-1.51676 -0.9264,-2.77474 -1.75,-3.625 -0.8176,-0.8442 -1.8698,-1.36151 -3.5624,-1.40625 -0.012,-3.2e-4 -0.019,2.7e-4 -0.031,0 z"
id="path6041"
style="color:#000000;fill:url(#linearGradient6089);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
</g>
<g
id="g5958">
<path
id="path4188"
d="m 549.36434,78.11349 c -9.4946,1.99352 -9.7027,14.03504 -9.8352,21.77668 0.1121,11.0831 -0.2095,22.9628 4.1417,33.27264 2.0054,4.85047 9.7812,4.74809 10.3195,-1.06753 4.7624,-15.20498 4.7481,-32.01281 1.4946,-47.50541 -0.983,-2.75668 -3.069,-6.35036 -6.1206,-6.47638 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path4190"
d="m 499.48944,47.6175 c -6.4927,-0.34021 -9.3439,6.60543 -8.1121,12.16941 -0.5858,24.07597 -0.3292,48.31194 0.034,72.30837 1.7508,6.96484 14.895,8.48808 15.0166,-0.0712 1.2169,-13.27189 -0.274,-26.75029 0.6639,-40.10232 0.7817,-11.41478 -0.5568,-23.24296 -0.6994,-34.37618 1.5849,-5.10643 -0.4706,-11.12871 -6.9034,-9.92811 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path4192"
d="m 132.42293,35.23407 c -7.6945,2.17125 -5.9206,12.79289 -6.2273,19.00216 1.6106,23.24538 0.8475,46.57408 2.1706,69.81693 0.068,7.09423 3.2021,16.90233 11.8853,16.22657 7.5709,-1.76417 5.7778,-11.8325 5.6557,-17.71589 -0.047,-7.84014 -4.5559,-19.23884 3.9165,-24.30949 7.6405,-5.37547 19.848,0.64078 18.6463,10.39069 -0.3251,8.83089 -2.0837,22.16882 7.8287,26.47493 6.4024,2.92649 10.6176,-5.21693 9.3943,-10.71096 -0.3749,-13.55442 1.2727,-30.22607 -10.711,-39.6768 -7.9735,-4.05845 -18.9828,-5.54515 -26.8307,-0.21351 -1.0372,2.42576 -6.9951,6.95054 -6.4053,1.24546 -1.6949,-15.3749 2.056,-31.45755 -2.3485,-46.40228 -1.2024,-2.63946 -4.0324,-4.45898 -6.9746,-4.12781 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path4194"
d="m 442.14024,64.05759 c -10.165,-0.2579 -20.6562,1.86137 -28.1474,9.18081 -2.8958,2.05591 -1.2663,-4.94966 -4.8395,-5.01742 -5.4074,-2.93338 -11.5829,2.98762 -9.5367,8.75381 0.099,20.06919 -1.977,40.97889 3.8787,60.387 3.1796,4.95849 13.7562,4.09337 12.7037,-2.9891 1.546,-15.53942 -2.968,-32.10549 3.167,-46.86488 4.3319,-8.66318 18.41,-14.13659 25.3718,-5.90704 3.521,6.12624 -0.9752,16.78774 6.8323,20.31879 7.6504,1.3481 9.6041,-9.08157 8.825,-14.7676 -1.6539,-6.72434 -2.1565,-14.5353 -6.6544,-19.99852 -3.1376,-2.78799 -7.564,-3.22067 -11.6005,-3.09585 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path4196"
d="m 442.38294,54.04595 c -0.1827,-0.005 -0.3789,0.0345 -0.5625,0.0312 -8.6942,-0.15632 -18.301,1.16995 -26.7813,5.96876 -0.368,-0.21564 -0.7676,-0.37654 -1.1562,-0.5625 l 0.031,-0.0625 c -0.2019,-0.10958 -0.4204,-0.1194 -0.625,-0.21875 -0.5569,-0.23563 -1.1103,-0.37966 -1.6874,-0.53125 -6.0741,-2.10894 -12.7994,-0.4336 -16.8438,3.34375 -3.8577,3.60298 -6.0063,9.29062 -5.1562,15.125 0.085,19.31578 -2.292,41.23535 4.3124,63.12499 l 0.4063,1.3125 0.75,1.1875 c 4.4521,6.94297 11.5862,8.53059 18,7.46875 3.2069,-0.53092 6.701,-1.89897 9.5,-5.03125 2.2725,-2.54317 3.5121,-6.27514 3.5937,-9.84375 0,-0.0435 0,-0.0816 0,-0.125 1.7478,-17.81793 -1.8544,-32.72457 2.2813,-43.375 0.6976,-1.23208 3.1856,-3.39065 5.4063,-4.03125 1.1119,-0.32077 1.7363,-0.44325 2.1874,-0.40625 0.051,0.8996 0.2789,2.71568 0.5313,6.0625 0.1821,2.41445 0.4732,5.42185 2.0313,8.8125 1.558,3.39065 4.8419,6.94014 8.8437,8.75 l 1.1563,0.5 1.2187,0.21875 c 4.1545,0.73208 8.9361,-0.28467 12.2187,-2.59375 3.2827,-2.30908 5.1358,-5.31163 6.3126,-8.0625 2.3534,-5.50175 2.5912,-10.54096 1.9374,-15.3125 l -0.062,-0.53125 -0.125,-0.5 c -1.3372,-5.43656 -1.418,-15.17693 -8.6563,-23.96874 l -0.4687,-0.59375 -0.5938,-0.53125 c -6.0316,-5.35952 -13.0425,-5.71213 -18,-5.59376 l 0,-0.0312 z m -20.9688,14.62501 c 0.3103,0.61975 0.1924,0.76755 0.063,0.28125 -0.016,-0.0599 -0.046,-0.21107 -0.063,-0.28125 z m -11.8437,14.15624 c 0.271,0.10418 0.5347,0.22752 0.8125,0.3125 l -0.125,0.21875 -0.125,0.3125 c -0.2313,0.55649 -0.3535,1.10135 -0.5625,1.65625 0.01,-0.84699 -0.01,-1.64903 0,-2.5 z"
style="color:#000000;fill:url(#linearGradient4453);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
id="path4198"
d="m 334.93614,43.42895 -1.125,0.0625 c -11.4541,0.68757 -31.1299,2.13948 -42.5313,20.5 l -0.6875,1.15625 -0.5312,1.21875 c -4.0155,9.09454 -1.1737,19.34928 5,25.5 -7.1006,9.03999 -10.5361,20.69833 -9.25,32.65625 -0.7932,13.71238 8.5163,26.58972 21.5624,30.34375 l -0.031,0.0625 c 14.5936,5.02387 28.3345,3.89176 40,1.875 1.1383,0.61027 2.377,1.24208 3.8438,1.84375 3.1932,1.30991 7.6804,2.60895 13.1874,1.96875 5.5071,-0.6402 11.3463,-3.71585 15.0626,-7.53125 l 0.6562,-0.6875 0.5938,-0.75 c 7.375,-9.27994 7.6766,-20.19393 7.1874,-26.8125 -0.4891,-6.61857 -1.0653,-10.99648 -1.0312,-11.375 l 0.125,-1.46875 -0.094,-1.5 c -0.9045,-13.69999 -0.4438,-31.50909 -8.6874,-49.71875 -0.8869,-3.14352 -2.6183,-4.60975 -5,-6.625 -14.193,-12.04738 -29.8012,-10.22761 -37.125,-10.65625 z m -5,69.25 c -0.6975,0.25422 -0.096,-0.059 3.5937,0.375 3.1757,0.3735 8.4922,1.29071 15.3437,0.34375 -0.042,1.60674 -0.047,3.10046 0.031,4.46875 l -1.2187,0.25 c -9.4296,1.92946 -17.7526,2.70557 -24.0626,1.71875 0.3089,-2.61777 2.5558,-6.11412 4.2813,-6.53125 l 1.0313,-0.25 1,-0.375 z"
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:38" />
<path
style="color:#000000;fill:#484848;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:38;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 242.86794,62.94328 c -9.8451,0.59098 -21.9234,2.57343 -27.5069,11.56498 -1.5225,3.44827 2.5155,7.16458 5.8003,4.55483 11.6876,-3.18405 25.8772,-8.64334 36.9368,-1.03196 3.4255,4.6575 3.2712,13.73214 -2.1351,16.8315 -8.1137,1.83399 -16.456,-2.50178 -24.589,0.4626 -12.7407,3.08001 -20.924,16.83116 -18.6463,29.53519 -1.221,6.03853 2.7535,11.58045 8.7182,12.59694 12.2603,4.22059 25.7141,2.25842 37.9688,-0.24909 3.9671,2.72001 9.7011,7.85911 14.3406,3.09585 6.2596,-7.87653 1.273,-19.02318 2.088,-28.06851 -0.9577,-14.50429 -1.0481,-29.91302 -7.0343,-43.1362 -7.0905,-6.01862 -17.2216,-5.6458 -25.9411,-6.15613 z"
id="path4200" />
<path
id="path4202"
d="m 132.71733,24.19589 c -0.5004,0.0152 -1.0205,0.0363 -1.5312,0.0937 l -0.9063,0.0937 -0.8437,0.25 c -4.2861,1.20943 -8.1936,4.24904 -10.375,7.56249 -2.1816,3.31346 -2.9841,6.56659 -3.4063,9.375 -0.8444,5.61682 -0.3823,10.37282 -0.4687,12.125 l -0.031,0.65625 0.062,0.625 c 1.548,22.34205 0.8033,45.46456 2.125,69.1875 5e-4,0.0505 0.031,0.10568 0.031,0.15625 0.01,0.1151 -0.01,0.22862 0,0.34375 l 0.031,0 c 0.099,4.98929 0.9665,10.43113 4.125,15.90625 3.2605,5.65198 11.0145,11.32149 19.5625,10.65625 l 0.8438,-0.0625 0.8124,-0.1875 c 4.2384,-0.98762 8.3269,-3.79564 10.625,-7.09375 2.1728,-3.63384 4.3342,-6.89183 5.1872,-10.22818 3.8402,7.13335 5.9507,8.04619 13.1566,11.44693 l 0,0.0312 c 0.059,0.0269 0.1281,0.0362 0.1875,0.0625 3.7423,1.65403 8.4312,1.97661 12.2813,0.65625 3.91101,-1.34132 6.71761,-3.90092 8.59371,-6.5 3.336,-4.62154 4.6441,-9.64143 3.9063,-15.25 -0.1718,-6.20746 0.2238,-14.23226 -1.1563,-22.8125 -1.3801,-8.58024 -5.0962,-18.36284 -13.75001,-25.1875 l -0.8437,-0.6875 -0.9688,-0.5 c -7.7653,-3.95251 -17.7087,-6.355 -27.4062,-4.09375 0.4086,-10.28331 1.089,-21.96033 -2.625,-34.5625 l -0.2188,-0.75 -0.3125,-0.71875 c -2.9167,-6.40275 -9.181,-10.82231 -16.6875,-10.59374 z m 6.0625,53.99999 c 0,0.0101 0.05,0.0315 0.062,0.0625 l -0.6245,1.46875 c 0.3311,-0.86163 0.5542,-1.56647 0.5625,-1.53125 z m 36.0625,48.28125 c 0.012,-0.004 0.019,0.005 0.031,0 l 0.063,0.3125 c -0.043,-0.19086 -0.061,-0.25465 -0.094,-0.3125 z"
style="color:#000000;fill:url(#linearGradient4451);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
d="m 133.3461,36.09636 c -1.692,0.49428 -2.8155,1.39846 -3.625,2.625 -0.8214,1.24442 -1.3243,2.85069 -1.5938,4.625 -0.5342,3.51732 -0.1953,7.61208 -0.3438,10.8125 0,0.0285 0,0.0654 0,0.0937 1.6063,23.27388 0.8692,46.5905 2.1876,69.75 a 0.88388823,0.88388823 0 0 1 0,0.0625 c 0.033,3.4213 0.83,7.53419 2.5937,10.59375 1.7438,3.02495 4.2922,5.00636 8.2187,4.75 0.011,-7.3e-4 0.02,7.7e-4 0.031,0 1.6857,-0.39978 2.7542,-1.19719 3.5313,-2.3125 0.7819,-1.12237 1.2391,-2.59827 1.4687,-4.25 0.4593,-3.30346 2e-4,-7.22907 -0.062,-10.25 a 0.88388823,0.88388823 0 0 1 0,-0.0312 c -0.023,-3.75401 -1.179,-8.58343 -1.25,-13.1875 -0.071,-4.59014 1.0512,-9.12033 5.5625,-11.84375 0.012,-0.008 0.019,-0.023 0.031,-0.0312 8.2411,-5.75335 21.2001,0.72746 19.9687,11.1875 0,0.011 0,0.0202 0,0.0312 -4e-4,0.01 4e-4,0.0216 0,0.0312 -0.1662,4.44678 -0.6416,9.92071 0.094,14.71875 0.7386,4.81878 2.5857,8.83105 7.2188,10.84375 a 0.88388823,0.88388823 0 0 1 0.031,0 c 1.4264,0.65196 2.625,0.67804 3.6876,0.3125 1.0625,-0.36554 2.0152,-1.15367 2.7812,-2.21875 1.532,-2.13016 2.2012,-5.36524 1.6562,-7.8125 a 0.88388823,0.88388823 0 0 1 0,-0.15625 c -0.1887,-6.82351 0.1073,-14.35845 -1,-21.28125 -1.1026,-6.89383 -3.5864,-13.13587 -9.3124,-17.6875 -7.7294,-3.90433 -18.3437,-5.25802 -25.7813,-0.25 -0.7734,1.48479 -2.3237,3.00623 -4,3.78125 -0.9043,0.41808 -1.982,0.65336 -2.875,0.0312 -0.8519,-0.59346 -1.0866,-1.72753 -0.9687,-3.1875 0.01,-0.0705 -0.01,-0.11538 0,-0.1875 -1.6634,-15.48034 1.9617,-31.38045 -2.2813,-45.9375 -1.0363,-2.2749 -3.4784,-3.85945 -5.9687,-3.625 z"
id="path4440"
style="fill:#484848;fill-opacity:1;stroke:none" />
<path
id="path4206"
d="m 500.00794,37.6397 c -0.47,-0.0246 -0.9099,0.13839 -1.375,0.15625 -0.3182,0.036 -0.6564,-0.0583 -0.9688,0 l 0,0.0937 c -5.9486,0.59666 -11.3199,4.27914 -13.8124,8.625 -2.5191,4.39212 -3.1643,9.07388 -2.4688,13.75001 -0.5691,24.07161 -0.3288,48.17845 0.031,71.96874 l 0.031,1.1875 0.2813,1.125 c 2.2758,9.05358 10.1204,12.94327 17.2812,13.3125 3.5804,0.18461 7.6057,-0.50128 11.25,-3.21875 3.4431,-2.56742 5.753,-7.21537 6.0625,-11.6875 l 0.062,0 c 0.024,-0.26477 0.01,-0.51719 0.031,-0.78125 1.2169,-14.32127 -0.1813,-27.63851 0.6563,-39.5625 0.8412,-12.28307 -0.4559,-23.97948 -0.6563,-34.18749 0.9168,-4.19732 0.7514,-8.64033 -1.75,-13.09376 -2.5398,-4.52202 -8.6787,-7.57722 -14.4374,-7.5625 -0.073,1.9e-4 -0.1457,-0.001 -0.2188,0 l 0,-0.125 z m -0.4375,10.46875 1.5625,8.375 c -0.089,0.0884 -0.5399,0.26586 -0.9688,0.50001 -0.4433,-0.17558 -0.588,-0.31717 -1.125,-0.59376 l 0.5313,-8.28125 z m 1.625,8.6875 0.125,0.65626 c 0,-5.2e-4 -0.146,-0.0578 -0.1563,-0.0625 0.013,-0.26164 0.01,-0.41632 0.031,-0.59376 z"
style="color:#000000;fill:url(#linearGradient4449);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
id="path4208"
d="m 499.48944,47.6175 c -6.4927,-0.34021 -9.3439,6.60543 -8.1121,12.16941 -0.5858,24.07597 -0.3292,48.31194 0.034,72.30837 1.7508,6.96484 14.895,8.48808 15.0166,-0.0712 1.2169,-13.27189 -0.274,-26.75029 0.6639,-40.10232 0.7817,-11.41478 -0.5568,-23.24296 -0.6994,-34.37618 1.5849,-5.10643 -0.4706,-11.12871 -6.9034,-9.92811 z"
style="fill:#484848;fill-opacity:1;stroke:none" />
<path
id="path4210"
d="m 544.51954,53.6313 c -7.5784,-0.46784 -10.6755,10.08558 -4.626,14.19825 6.4831,5.13984 16.9776,-2.57743 12.9884,-10.24836 -1.4384,-3.20261 -5.1136,-4.25984 -8.3624,-3.94989 z"
style="fill:#000000;fill-opacity:1;stroke:none" />
<path
id="path4212"
d="m 66.312222,57.93009 c -17.370703,0.62829 -30.0641,20.09681 -26.023403,36.39781 2.1928,10.05075 13.8541,12.09708 22.635103,11.4922 7.1377,-0.5151 17.6041,2.45346 16.7319,11.49222 -1.8676,6.29718 -10.9897,4.97438 -16.0667,5.21679 -7.019003,0.3042 -14.551803,-2.83467 -21.309203,-1.0251 -5.546297,3.71601 -0.7698,11.63178 4.4362,13.09902 11.6204,3.85396 24.776703,2.98561 36.677203,0.52396 8.494404,-1.78465 13.976704,-9.66183 14.007304,-18.12905 0.5362,-8.45978 -0.1252,-18.85777 -9.082,-22.63511 -7.833304,-4.5437 -17.524404,-2.59996 -25.744004,-4.64578 -6.504303,-3.75215 -4.590203,-15.08325 3.2137,-15.54417 8.376,-2.645 16.5844,3.54335 24.730904,1.74653 6.8027,-2.75685 5.6777,-13.26551 -1.2924,-15.19486 C 82.177322,57.19274 73.972122,57.9802 66.312222,57.93009 Z"
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:38;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4214"
d="m 66.146122,46.92095 -0.2187,0.0312 c -25.268203,0.91394 -41.9786,26.29641 -36.375,49.71875 0,0.01 0,0.0214 0,0.0312 0.023,0.0937 0.039,0.18758 0.062,0.28125 l 0.062,0 c 1.4158,6.03031 5.2241,10.72981 9.5937,13.9375 l -1.5937,0.4375 -1.5313,1 c -3.4934,2.34058 -6.2461,6.40677 -7.0312,10.4375 -0.7852,4.03073 0.016,7.64447 1.2812,10.53125 2.4625,5.61698 6.4364,9.72109 12.843797,11.6875 l 0,0.0312 c 0.1235,0.0409 0.2514,0.0537 0.375,0.0937 0.044,0.0142 0.081,0.0484 0.125,0.0625 14.2876,4.59699 29.052403,3.33987 41.875007,0.6875 l 0.031,0 c 13.703,-2.87897 22.354804,-15.23519 22.687504,-28.1875 l 0.031,0 c 0.01,-0.1043 -0.01,-0.23849 0,-0.34375 0,-0.10511 0.031,-0.20733 0.031,-0.3125 l -0.031,0 c 0.275,-4.68022 0.3633,-10.21921 -1.4063,-16.21875 -1.6128,-5.46789 -5.6186,-11.40935 -11.718704,-15.03125 C 110.28983,79.05558 108.57813,56.15757 93.550926,50.6395 83.076822,45.62854 73.121622,46.96476 66.394622,46.92075 l -0.25,0 z M 49.927419,124.0772 c 0.4736,0.11312 0.7429,0.17483 0.6875,0.1875 -0.1379,-0.0437 -0.3009,-0.0484 -0.4375,-0.0937 l -0.25,-0.0937 z"
style="color:#000000;fill:url(#linearGradient4447);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
d="M 67.047,59.37761 C 50.7565,60.01346 38.6203,78.63489 42.422,93.97136 a 1.4420115,1.4420115 0 0 1 0,0.0312 c 0.9874,4.52574 3.9833,7.14275 7.9688,8.71875 3.9854,1.576 8.921,1.948 13.1562,1.65625 3.8182,-0.27555 8.4163,0.35581 12.1562,2.34375 3.74,1.98794 6.6157,5.6345 6.125,10.71875 a 1.4420115,1.4420115 0 0 1 -0.062,0.28125 c -0.5618,1.89409 -1.746,3.32797 -3.1876,4.25 -1.4415,0.92203 -3.0867,1.39395 -4.7812,1.65625 -3.3889,0.5246 -7.0334,0.23046 -9.4062,0.34375 -7.4077,0.32104 -14.726,-2.60314 -20.7813,-1.09375 -0.9228,0.69289 -1.3969,1.4625 -1.5625,2.3125 -0.1806,0.92739 -0.017,2.01851 0.4688,3.125 0.9708,2.21298 3.281,4.32492 5.3437,4.90625 a 1.4420115,1.4420115 0 0 1 0.062,0 c 11.2515,3.73156 24.1465,2.93253 35.9062,0.5 7.7821,-1.63499 12.8466,-8.87337 12.875,-16.71875 a 1.4420115,1.4420115 0 0 1 0,-0.0937 c 0.2634,-4.15469 0.2008,-8.71518 -0.9374,-12.5625 -1.1383,-3.84732 -3.227,-6.9152 -7.2813,-8.625 a 1.4420115,1.4420115 0 0 1 -0.1563,-0.0937 c -7.233,-4.1955 -16.6908,-2.33856 -25.375,-4.5 a 1.4420115,1.4420115 0 0 1 -0.375,-0.15625 c -7.593,-4.38022 -5.364,-17.27483 3.5,-18.15625 l 0,-0.0312 c 0.1153,-0.0364 0.2288,-0.0291 0.3438,-0.0625 4.5012,-1.3064 8.8395,-0.37995 12.875,0.59375 4.0804,0.98454 7.88,1.92841 11.4688,1.1875 5.4755,-2.31046 4.4951,-10.8333 -1.1876,-12.40625 a 1.4420115,1.4420115 0 0 1 -0.2812,-0.0937 c -6.5535,-3.28332 -14.4405,-2.57842 -22.1875,-2.625 -0.021,-1.3e-4 -0.042,1.4e-4 -0.062,0 z"
id="path4442"
style="fill:#484848;fill-opacity:1;stroke:none" />
<path
id="path4218"
d="m 334.91414,52.45217 -0.5624,0.0312 c -10.692,0.64182 -26.7608,2.35866 -35.4063,16.28126 l -0.375,0.59375 -0.2813,0.625 c -2.6168,5.92672 -0.4865,12.63582 3.8126,16.24999 2.47,2.0766 6.1544,2.97511 9.8124,2.75 -12.1731,7.16212 -18.9579,21.29295 -17.0937,35.5 -0.9321,10.0329 5.7963,19.42583 15.4375,21.90625 l 0,0.0312 c 13.5839,4.67628 27.0449,3.11875 38.7812,0.90625 1.4491,0.98507 3.2876,2.06677 5.5626,3 2.2748,0.93323 5.2583,1.74964 8.75,1.34375 3.4915,-0.40589 7.1195,-2.30283 9.625,-4.875 l 0.375,-0.34375 0.3124,-0.40625 c 5.3642,-6.74967 5.6479,-14.75709 5.2188,-20.5625 -0.4291,-5.80541 -1.211,-10.50221 -1,-12.84375 l 0.062,-0.78125 -0.062,-0.75 c -0.9297,-14.08097 -0.732,-30.77734 -7.9062,-46.62499 -0.4593,-1.65783 -1.3753,-2.43205 -2.625,-3.4999 -10.8288,-9.19166 -23.8588,-8.03267 -31.8438,-8.50001 l -0.5938,-0.0312 z m 22.0626,47.46875 c 0.2983,4.01025 0.663,7.89337 0.9374,12.09375 -0.3619,6.15055 0.7536,11.18085 1.0313,14.9375 0.091,1.23358 -3e-4,1.89681 -0.031,2.71875 -0.7261,-0.49389 -0.8804,-0.56988 -1.7812,-1.1875 l -3.5,-2.40625 -4.1562,0.84375 c -11.8502,2.42474 -23.4896,3.77093 -32.7188,0.59375 l -0.75,-0.25 -0.8125,-0.15625 c -0.7563,-0.12889 -0.7437,-0.008 -0.5937,-0.75 l 0.375,-1.875 -0.3438,-1.875 c -1.3223,-7.37497 4.0726,-16.31882 11.1562,-18.03125 l 0.5626,-0.15625 0.5312,-0.1875 c 1.5591,-0.56829 3.7957,-0.58273 7.6875,-0.125 3.8918,0.45773 9.2275,1.48444 15.6563,0.0312 l 1.4687,-0.34375 1.3125,-0.75 c 1.5458,-0.8862 2.8481,-1.95265 3.9688,-3.125 z"
style="color:#000000;fill:url(#linearGradient4445);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
d="m 442.8461,65.50261 c -9.9417,-0.25223 -20.0112,1.83054 -27.125,8.78125 a 1.4249747,1.4249747 0 0 1 -0.1876,0.125 c -0.4923,0.34955 -1.0141,0.64308 -1.6874,0.65625 -0.6734,0.0132 -1.3402,-0.39879 -1.6876,-0.8125 -0.6947,-0.82743 -0.7686,-1.5945 -0.9687,-2.34375 -0.2001,-0.74925 -0.4246,-1.47139 -0.6563,-1.84375 -0.2316,-0.37236 -0.2624,-0.39819 -0.6874,-0.40625 a 1.4249747,1.4249747 0 0 1 -0.6563,-0.1875 c -2.1511,-1.16691 -4.3134,-0.58174 -5.9063,0.90625 -1.5928,1.48799 -2.4145,3.81205 -1.5937,6.125 a 1.4249747,1.4249747 0 0 1 0.094,0.46875 c 0.099,20.08519 -1.9054,40.73856 3.75,59.71875 1.2377,1.74956 4.0539,2.66609 6.4063,2.28125 1.2075,-0.19755 2.2216,-0.71247 2.8437,-1.40625 0.6222,-0.69378 0.9615,-1.54589 0.75,-2.96875 a 1.4249747,1.4249747 0 0 1 0,-0.375 c 1.5091,-15.16756 -3.1254,-31.94343 3.25,-47.28125 a 1.4249747,1.4249747 0 0 1 0.031,-0.0625 c 2.3884,-4.77662 7.2847,-8.50018 12.5937,-10.03125 5.3091,-1.53107 11.2689,-0.75156 15.1563,3.84375 a 1.4249747,1.4249747 0 0 1 0.1563,0.1875 c 2.0694,3.60071 1.6918,8.0153 1.9687,11.75 0.1385,1.86735 0.4194,3.54061 1.0313,4.875 0.5916,1.2904 1.4751,2.25734 3.0312,3 1.4606,0.20734 2.5297,-0.051 3.4375,-0.6875 0.9587,-0.67214 1.771,-1.81376 2.375,-3.21875 1.2079,-2.80999 1.508,-6.6831 1.1563,-9.25 -1.6601,-6.82503 -2.269,-14.23556 -6.2813,-19.1875 -2.6943,-2.32961 -6.6692,-2.77567 -10.5313,-2.65625 a 1.4249747,1.4249747 0 0 1 -0.062,0 z"
id="path4436"
style="fill:#484848;fill-opacity:1;stroke:none" />
<path
id="path4224"
d="m 548.52594,68.07721 -1.2187,0.25 c -8.6956,1.82574 -14.1425,9.53796 -15.9688,15.68749 -1.8263,6.14954 -1.7462,11.84707 -1.8125,15.71875 l 0,0.125 0,0.125 c 0.1092,10.79916 -0.5536,24.0134 4.9063,37 0.01,0.0225 0.022,0.0401 0.031,0.0625 2.7726,6.62078 9.3817,9.9621 15.5625,9.5625 5.6001,-0.36206 11.8353,-5.2195 13.5,-11.53125 5.3924,-17.21633 5.3013,-35.62075 1.75,-52.53125 l -0.1563,-0.6875 -0.2187,-0.62499 c -0.7814,-2.19128 -1.853,-4.62969 -3.9375,-7.1875 -2.0845,-2.55781 -5.8401,-5.71667 -11.1875,-5.9375 l -1.25,-0.0312 z"
style="color:#000000;fill:url(#linearGradient4443);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
d="m 550.1139,78.59636 c -4.5226,0.97522 -6.7823,4.26272 -8,8.375 -1.2232,4.13111 -1.3087,9.03503 -1.375,12.90625 0.1123,11.09592 -0.2043,22.90976 4.0938,33.09375 0.9213,2.22841 3.1731,3.32073 5.25,3.1875 2.0769,-0.13323 3.906,-1.39 4.1562,-4.09375 a 0.46475483,0.46475483 0 0 1 0.031,-0.0937 c 4.7332,-15.11164 4.7084,-31.85462 1.4687,-47.28125 -0.4788,-1.32581 -1.2248,-2.85305 -2.1874,-4.03125 -0.9629,-1.17844 -2.1146,-1.98485 -3.4376,-2.0625 z"
id="path4438"
style="fill:#484848;fill-opacity:1;stroke:none" />
<path
id="path4229"
d="m 242.87094,52.92092 -0.5938,0.0312 c -10.6919,0.64192 -26.7607,2.35873 -35.4062,16.28131 l -0.375,0.59375 -0.2813,0.65625 c -2.6168,5.92671 -0.4864,12.60456 3.8125,16.21874 2.4771,2.0825 6.1757,2.98309 9.8438,2.75 -12.176,7.14722 -18.9659,21.26849 -17.125,35.46875 -0.9665,10.0609 5.7999,19.48906 15.4687,21.96875 l -0.031,0.0312 c 13.5891,4.67806 27.073,3.12012 38.8125,0.90625 1.4445,0.97996 3.2715,2.07302 5.5313,3 2.2749,0.93323 5.2585,1.71839 8.75,1.3125 3.4915,-0.40589 7.1509,-2.27156 9.6562,-4.84375 l 0.3438,-0.375 0.3125,-0.40625 c 5.3641,-6.74969 5.6478,-14.72585 5.2187,-20.53125 -0.4291,-5.8054 -1.2109,-10.50221 -1,-12.84375 l 0.062,-0.78125 -0.062,-0.78125 c -0.9297,-14.081 -0.7006,-30.74608 -7.875,-46.59374 l -0.9375,-2.0625 -1.7187,-1.4375 c -10.8287,-9.19167 -23.8276,-8.06392 -31.8125,-8.53126 l -0.5938,-0.0312 z m 22.0312,47.5 c 0.2974,4.00059 0.6637,7.87292 0.9375,12.0625 -0.3619,6.15055 0.7536,11.2121 1.0313,14.96875 0.091,1.22812 0,1.86766 -0.031,2.6875 -0.7261,-0.49388 -0.8805,-0.56989 -1.7813,-1.1875 l -3.5,-2.40625 -4.1562,0.875 c -11.8502,2.42475 -23.4582,3.77094 -32.6875,0.59375 l -0.7813,-0.28125 -0.8125,-0.125 c -0.7563,-0.12888 -0.7437,-0.0396 -0.5938,-0.78125 l 0.375,-1.84375 -0.3437,-1.875 c -1.3223,-7.37494 4.0726,-16.35008 11.1562,-18.0625 l 0.5625,-0.125 0.5313,-0.1875 c 1.5591,-0.56828 3.7957,-0.58273 7.6875,-0.125 3.8918,0.45773 9.2275,1.45313 15.6562,0 l 1.4688,-0.3125 1.3125,-0.75 c 1.5458,-0.8862 2.8482,-1.95265 3.9687,-3.125 z"
style="color:#000000;fill:url(#linearGradient4441);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
d="m 243.6361,64.63031 c -9.6363,0.58398 -20.9336,2.59484 -26.0312,10.625 -0.4035,0.99026 -0.045,1.9107 0.6562,2.5 0.717,0.60234 1.4896,0.85243 2.5626,0 a 1.684398,1.684398 0 0 1 0.625,-0.3125 c 5.775,-1.5733 12.3167,-3.78461 18.9374,-4.625 6.6208,-0.84039 13.4444,-0.25925 19.4063,3.84375 a 1.684398,1.684398 0 0 1 0.375,0.375 c 2.0281,2.75755 2.9112,6.50666 2.5937,10.125 -0.3174,3.61834 -1.9072,7.25777 -5.2187,9.15625 a 1.684398,1.684398 0 0 1 -0.4687,0.1875 c -4.4561,1.00721 -8.7953,0.29068 -12.875,-0.1875 -4.0798,-0.47818 -7.8868,-0.73461 -11.5313,0.59375 a 1.684398,1.684398 0 0 1 -0.1563,0.0312 c -11.7884,2.8498 -19.5228,15.78804 -17.4062,27.59375 a 1.684398,1.684398 0 0 1 0,0.65625 c -1.0407,5.14641 2.2557,9.72666 7.3438,10.59375 a 1.684398,1.684398 0 0 1 0.2812,0.0625 c 11.7498,4.04484 24.8758,2.18109 37.0625,-0.3125 a 1.684398,1.684398 0 0 1 1.2813,0.28125 c 2.0816,1.42722 4.4575,3.29235 6.625,4.1875 1.0837,0.44757 2.0633,0.63094 2.9374,0.53125 0.8627,-0.0984 1.6764,-0.44585 2.5938,-1.375 0.01,-0.0118 0.022,-0.0195 0.031,-0.0312 2.6608,-3.43997 2.9705,-7.61463 2.625,-12.3125 -0.3431,-4.66636 -1.3766,-9.66321 -1,-14.46875 -0.9524,-14.4251 -1.1073,-29.45823 -6.7187,-42.15625 -6.4124,-5.22259 -15.7954,-5.06556 -24.4687,-5.5625 -0.021,-10e-4 -0.042,0.001 -0.063,0 z"
id="path4426"
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
d="m 252.9376,106.30395 c -3.4993,0.0307 -6.9607,-0.0581 -10.375,0.0312 -4.1004,0.36044 -9.0376,1.69024 -12.625,4.09375 -3.614,2.42133 -5.8704,5.68864 -5.2813,10.4375 0.4935,4.61527 3.5645,7.56447 7.6876,9.21875 4.123,1.65428 9.2633,1.8209 13.1562,0.65625 a 1.3611835,1.3611835 0 0 1 0.1562,-0.0312 c 2.8688,-0.49834 6.5939,-1.2529 9.2813,-2.71875 1.3437,-0.73292 2.3836,-1.63683 3.0313,-2.6875 0.6476,-1.05067 0.9604,-2.26047 0.6874,-3.96875 a 1.3611835,1.3611835 0 0 1 0,-0.28125 c 0.1564,-2.76724 0.3451,-6.68524 -0.375,-9.71875 -0.36,-1.51676 -0.9264,-2.77474 -1.75,-3.625 -0.8176,-0.8442 -1.8698,-1.36151 -3.5624,-1.40625 -0.012,-3.2e-4 -0.019,2.7e-4 -0.031,0 z"
id="path5306"
style="color:#000000;fill:url(#linearGradient4439);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22" />
<path
id="text4338"
d="m 550.24144,11.97714 c -4.7431,8e-5 -9.3884,1.94508 -12.1562,5.65625 -2.3938,3.20927 -3.2655,7.28209 -3.5,11.84374 -5.2417,0.10768 -9.658,0.71067 -13.2813,2.53125 -3.7519,1.88519 -6.5576,5.75636 -6.9063,9.9375 l -0.062,0 c -0.013,0.1027 0.011,0.20947 0,0.3125 0,0.043 -0.03,0.0819 -0.031,0.125 l 0.031,0 c -0.383,3.94189 0.8037,8.08581 3.625,10.84375 1.7434,1.70445 3.9242,2.79035 6.3124,3.59375 l -0.875,2.4375 -0.062,0.125 -0.031,0.125 c -1.0239,3.32791 -0.9882,7.09444 0.8437,10.15625 1.8322,3.06181 4.9132,4.85334 8.3438,5.90625 l 0.7188,0.21875 0.75,0 2.2812,0 c 4.1038,5e-5 8.0184,-1.11288 11.1562,-3.5 1.388,-1.05587 2.5677,-2.38102 3.5938,-3.8125 2.738,2.5559 6.0541,4.80834 10,6.78125 l 0.5,0.25 0.5312,0.15625 c 3.235,0.79227 6.3972,0.95306 9.4063,-0.1875 2.9956,-1.13542 5.3523,-3.78973 6.4375,-6.71875 l 0.031,0 0,-0.0312 c 1.3188,-3.58119 1.0754,-7.65809 -0.4687,-11.1875 -0.3593,-0.82136 -0.9637,-1.56048 -1.4375,-2.34375 0.7988,-0.35352 1.5774,-0.75006 2.3125,-1.28125 3.1456,-2.2731 4.4669,-6.43958 4.1563,-10.25 l 0.031,0 c 0,-0.12851 -0.061,-0.24691 -0.062,-0.375 -0.017,-0.15367 0.023,-0.31671 0,-0.46875 l -0.062,0 c -0.2506,-3.85862 -2.6242,-7.47641 -5.875,-9.5625 -3.1968,-2.05143 -7.2278,-3.19745 -12.0625,-4.03124 -0.5947,-4.02941 -1.4462,-7.64148 -3.125,-10.53125 -2.2702,-3.9078 -6.5646,-6.71865 -11.0625,-6.71875 z m 18.3125,50.62499 c 0.2654,0.97712 0.2969,1.7705 -0.031,2.65625 l 0,0.0312 c -0.3181,0.86918 -0.3036,0.72198 -0.625,0.84375 -0.2585,0.098 -1.2073,0.14918 -2.5624,-0.0625 0.3313,-0.1475 0.7366,-0.14338 1.0312,-0.34375 l 0.4375,-0.28125 0.375,-0.40625 c 0.5814,-0.62017 0.9776,-1.55372 1.375,-2.4375 z"
style="color:#000000;fill:#305f00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10" />
<g
id="text4342"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:165.01513672px;line-height:125%;font-family:'comic andy';-inkscape-font-specification:'comic andy';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4437);fill-opacity:1;stroke:none">
<path
id="path101"
style="fill:url(#linearGradient4437);fill-opacity:1"
d="m 550.24549,16.984496 q 8.54083,0 9.83001,16.920498 l 2.33664,0 q 15.22844,2.33664 15.0673,9.668855 1.28918,8.621397 -11.03861,7.976806 9.42713,8.299101 6.7682,15.470169 -2.09492,5.72074 -9.99116,3.786969 -8.70197,-4.350985 -12.32779,-9.991151 l -1.5309,0 q -3.3841,9.991151 -13.13353,9.991151 l -2.25606,0 q -8.13796,-2.497788 -5.88189,-9.830003 l 2.82008,-7.815659 -0.80574,0 q -11.92492,-1.692049 -10.79688,-10.555167 0.32229,-8.137954 16.35648,-8.218527 4.43155,-0.483443 3.70639,-2.820083 0,-14.583858 10.87746,-14.583858 z m -4.5927,16.034186 -0.16115,4.512133 q -0.24172,3.384099 -2.17549,3.384099 l -12.73066,0.725164 q -2.98123,0.08057 -2.98123,2.417214 0,2.256067 3.22295,2.417214 11.19976,-0.564016 10.47459,1.530902 l -2.25606,4.834428 q -5.72074,8.621396 -2.82009,10.152299 3.86754,2.33664 10.95804,-12.08607 1.69205,-1.530902 2.82008,0 4.99558,5.317871 8.21853,8.70197 3.30353,3.3841 5.31787,2.014345 2.41721,-2.578361 -1.28918,-5.559592 -3.62582,-3.061804 -8.2991,-8.379675 -0.48344,-1.772623 0.24172,-1.772623 15.79246,1.047459 15.14787,-2.014345 0.48345,-3.3841 -13.69754,-3.3841 -2.17549,0.402869 -3.54525,-1.047459 l 0,-7.896232 q 0,-6.607052 -3.14238,-6.526478 -3.3841,-0.805738 -3.30352,7.976806 z" />
</g>
<path
style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4714"
d="m 335.7911,64.63031 c -9.6363,0.58398 -20.9336,2.59484 -26.0312,10.625 -0.4035,0.99026 -0.045,1.9107 0.6562,2.5 0.717,0.60234 1.4896,0.85243 2.5626,0 a 1.684398,1.684398 0 0 1 0.625,-0.3125 c 5.775,-1.5733 12.3167,-3.78461 18.9374,-4.625 6.6208,-0.84039 13.4444,-0.25925 19.4063,3.84375 a 1.684398,1.684398 0 0 1 0.375,0.375 c 2.0281,2.75755 2.9112,6.50666 2.5937,10.125 -0.3174,3.61834 -1.9072,7.25777 -5.2187,9.15625 a 1.684398,1.684398 0 0 1 -0.4687,0.1875 c -4.4561,1.00721 -8.7953,0.29068 -12.875,-0.1875 -4.0798,-0.47818 -7.8868,-0.73461 -11.5313,0.59375 a 1.684398,1.684398 0 0 1 -0.1563,0.0312 c -11.7884,2.8498 -19.5228,15.78804 -17.4062,27.59375 a 1.684398,1.684398 0 0 1 0,0.65625 c -1.0407,5.14641 2.2557,9.72666 7.3438,10.59375 a 1.684398,1.684398 0 0 1 0.2812,0.0625 c 11.7498,4.04484 24.8758,2.18109 37.0625,-0.3125 a 1.684398,1.684398 0 0 1 1.2813,0.28125 c 2.0816,1.42722 4.4575,3.29235 6.625,4.1875 1.0837,0.44757 2.0633,0.63094 2.9374,0.53125 0.8627,-0.0984 1.6764,-0.44585 2.5938,-1.375 0.01,-0.0118 0.022,-0.0195 0.031,-0.0312 2.6608,-3.43997 2.9705,-7.61463 2.625,-12.3125 -0.3431,-4.66636 -1.3766,-9.66321 -1,-14.46875 -0.9524,-14.4251 -1.1073,-29.45823 -6.7187,-42.15625 -6.4124,-5.22259 -15.7954,-5.06556 -24.4687,-5.5625 -0.021,-10e-4 -0.042,0.001 -0.063,0 z" />
<path
style="color:#000000;fill:url(#linearGradient4435);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:22"
id="path5310"
d="m 345.6192,106.30395 c -3.4993,0.0307 -6.9607,-0.0581 -10.375,0.0312 -4.1004,0.36044 -9.0376,1.69024 -12.625,4.09375 -3.614,2.42133 -5.8704,5.68864 -5.2813,10.4375 0.4935,4.61527 3.5645,7.56447 7.6876,9.21875 4.123,1.65428 9.2633,1.8209 13.1562,0.65625 a 1.3611835,1.3611835 0 0 1 0.1562,-0.0312 c 2.8688,-0.49834 6.5939,-1.2529 9.2813,-2.71875 1.3437,-0.73292 2.3836,-1.63683 3.0313,-2.6875 0.6476,-1.05067 0.9604,-2.26047 0.6874,-3.96875 a 1.3611835,1.3611835 0 0 1 0,-0.28125 c 0.1564,-2.76724 0.3451,-6.68524 -0.375,-9.71875 -0.36,-1.51676 -0.9264,-2.77474 -1.75,-3.625 -0.8176,-0.8442 -1.8698,-1.36151 -3.5624,-1.40625 -0.012,-3.2e-4 -0.019,2.7e-4 -0.031,0 z" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 68 KiB

BIN
doc/md/images/edit_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
doc/md/images/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
doc/md/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -81,7 +81,7 @@ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
autoLocale($_SERVER['HTTP_ACCEPT_LANGUAGE']); autoLocale($_SERVER['HTTP_ACCEPT_LANGUAGE']);
} }
new Languages(setlocale(LC_MESSAGES, 0), $conf); new Languages(get_locale(LC_MESSAGES), $conf);
$conf->setEmpty('general.timezone', date_default_timezone_get()); $conf->setEmpty('general.timezone', date_default_timezone_get());
$conf->setEmpty('general.title', t('Shared bookmarks on ') . escape(index_url($_SERVER))); $conf->setEmpty('general.title', t('Shared bookmarks on ') . escape(index_url($_SERVER)));

View file

@ -4,32 +4,37 @@
"author": "The Shaarli Community", "author": "The Shaarli Community",
"license": "SEE LICENSE IN COPYING", "license": "SEE LICENSE IN COPYING",
"dependencies": { "dependencies": {
"awesomplete": "^1.1.2", "awesomplete": "^1.1.5",
"blazy": "^1.8.2", "blazy": "^1.8.2",
"fork-awesome": "^1.1.7", "fork-awesome": "^1.2.0",
"he": "^1.2.0", "he": "^1.2.0",
"pure-extras": "^1.0.0", "pure-extras": "^1.0.0",
"purecss": "^1.0.0" "purecss": "^3.0.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.11.6", "@babel/core": "^7.24.5",
"@babel/preset-env": "^7.11.5", "@babel/preset-env": "^7.24.5",
"babel-loader": "^8.1.0", "babel-loader": "^9.1.3",
"css-loader": "^7.1.2", "css-loader": "^7.1.1",
"eslint": "^7.9.0", "eslint": "^8.57.0",
"eslint-config-airbnb-base": "^14.2.0", "eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.22.0", "eslint-plugin-import": "^2.29.1",
"file-loader": "^1.1.6", "file-loader": "^6.2.0",
"mini-css-extract-plugin": "^0.11.2", "glob": "^10.3.15",
"sass": "^1.26.11", "micromatch": "^4.0.8",
"sass-loader": "^10.0.2", "mini-css-extract-plugin": "^2.9.0",
"stylelint": "^16.6.1", "sass": "^1.77.2",
"stylelint-config-standard": "^20.0.0", "sass-loader": "^14.2.1",
"stylelint-scss": "^6.3.2", "stylelint": "^16.5.0",
"terser-webpack-plugin": "^4.2.2", "stylelint-config-standard": "^36.0.0",
"webpack": "^5.92.1", "stylelint-config-standard-scss": "^13.1.0",
"terser-webpack-plugin": "^5.3.10",
"webpack": "^5.94.0",
"webpack-cli": "^5.1.4" "webpack-cli": "^5.1.4"
}, },
"resolutions": {
"string-width": "4.2.3"
},
"scripts": { "scripts": {
"build": "webpack", "build": "webpack",
"watch": "webpack --watch" "watch": "webpack --watch"

View file

@ -1,5 +1,3 @@
<div class="linkqrcode"> <div class="linkqrcode">
<a href="#" onclick="showQrCode(this); return false;" class="qrcode" data-permalink="%s"> <img data-permalink="%s" src="%s/qrcode/qrcode.png" class="linklist-plugin-icon qrcode" title="QR-Code" alt="QRCode">
<img src="%s/qrcode/qrcode.png" class="linklist-plugin-icon" title="QR-Code" alt="QRCode">
</a>
</div> </div>

View file

@ -51,7 +51,11 @@ function showQrCode(caller,loading)
element.id = 'permalinkQrcode'; element.id = 'permalinkQrcode';
// Make QR-Code div commit sepuku when clicked: // Make QR-Code div commit sepuku when clicked:
if ( element.attachEvent ){ if (element.addEventListener) {
element.addEventListener('click', function() {
this.parentNode.removeChild(this);
});
} else if (element.attachEvent) {
element.attachEvent('onclick', 'this.parentNode.removeChild(this);' ); element.attachEvent('onclick', 'this.parentNode.removeChild(this);' );
} else { } else {
@ -89,3 +93,18 @@ function removeQrcode()
} }
return false; return false;
} }
// Create "click" event listeners for QR-Code display action
function setQrCodeClickEvent()
{
const qrcode_collec = document.getElementsByClassName("qrcode");
Array.from(qrcode_collec).forEach(function(element) {
element.addEventListener('click', function() {
showQrCode(this);
return false;
});
});
}
setQrCodeClickEvent();

View file

@ -1 +1 @@
<?php /* 0.13.0 */ ?> <?php /* 0.14.0 */ ?>

View file

@ -117,24 +117,63 @@
<button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button> <button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button>
</form> </form>
</div> </div>
{if="$is_logged_in && $template === 'linklist'"}
<div id="actions" class="subheader-form"> <div id="actions" class="subheader-form">
<div class="pure-g"> <div class="pure-g">
<div class="pure-u-1"> <div class="pure-u-1">
<a href="" id="actions-delete" class="button"> <a href="" id="actions-delete" class="button">
<i class="fa fa-trash"></i> <i class="fa fa-trash" aria-hidden="true"></i>
{'Delete'|t} {'Delete'|t}
</a>&nbsp; </a>&nbsp;
<a href="" class="actions-change-visibility button" data-visibility="public"> <a href="" class="actions-change-visibility button" data-visibility="public">
<i class="fa fa-globe"></i> <i class="fa fa-globe" aria-hidden="true"></i>
{'Set public'|t} {'Set public'|t}
</a>&nbsp; </a>&nbsp;
<a href="" class="actions-change-visibility button" data-visibility="private"> <a href="" class="actions-change-visibility button" data-visibility="private">
<i class="fa fa-user-secret"></i> <i class="fa fa-user-secret" aria-hidden="true"></i>
{'Set private'|t} {'Set private'|t}
</a>&nbsp;
<a href="" class="subheader-opener button" data-open-id="bulk-tag-action-add">
<i class="fa fa-tag" aria-hidden="true"></i>
{'Add tags'|t}
</a>&nbsp;
<a href="" class="subheader-opener button" data-open-id="bulk-tag-action-delete">
<i class="fa fa-window-close" aria-hidden="true"></i>
{'Delete tags'|t}
</a> </a>
</div> </div>
</div> </div>
</div> </div>
{$addDelete=['add', 'delete']}
{loop="$addDelete"}
<div id="bulk-tag-action-{$value}" class="subheader-form">
<form class="pure-g" action="{$base_path}/admin/shaare/update-tags" method="post">
<div class="pure-u-1">
<span>
<input
type="text" name="tag" class="autofocus"
aria-label="{$value === 'add' ? t('Tag to add') : t('Tag to delete')}"
placeholder="{$value === 'add' ? t('Tag to add') : t('Tag to delete')}"
autocomplete="off" data-multiple data-autofirst data-minChars="1"
data-list="{loop="$tags"}{$key}, {/loop}"
>
<input type="hidden" name="action" value="{$value}" />
<input type="hidden" name="id" value="" />
<input type="hidden" name="token" value="{$token}" />
</span>&nbsp;
<a href="" class="button action">
<i class="fa fa-tag" aria-hidden="true"></i>
{$value === 'add' ? t('Add tag') : t('Delete tag')}
</a>&nbsp;
<a href="" class="subheader-opener button cancel" data-open-id="actions">{'Cancel'|t}</a>
</div>
</form>
</div>
{/loop}
{/if}
{if="!$is_logged_in"} {if="!$is_logged_in"}
<form method="post" name="loginform"> <form method="post" name="loginform">
<div class="subheader-form header-login-form" id="header-login-form"> <div class="subheader-form header-login-form" id="header-login-form">

View file

@ -123,7 +123,7 @@
<div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light"> <div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light">
<h2 class="window-title">{'Third-party resources'|t}</h2> <h2 class="window-title">{'Third-party resources'|t}</h2>
<div class="tools-item"> <div class="tools-item">
<a href="https://shaarli.readthedocs.io/en/master/Community-and-related-software/"> <a href="https://shaarli.readthedocs.io/en/master/Community-and-related-software.html">
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Community and related software'|t}</span> <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Community and related software'|t}</span>
</a> </a>
</div> </div>

View file

@ -11,7 +11,7 @@ const TerserPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const extractCss = new MiniCssExtractPlugin({ const extractCss = new MiniCssExtractPlugin({
filename: "../css/[name].min.css", filename: "css/[name].min.css",
}); });
module.exports = [ module.exports = [
@ -26,12 +26,12 @@ module.exports = [
shaarli: [ shaarli: [
'./assets/default/js/base.js', './assets/default/js/base.js',
'./assets/default/scss/shaarli.scss', './assets/default/scss/shaarli.scss',
].concat(glob.sync('./assets/default/img/*')), ].concat(glob.sync('./assets/default/img/*', { dotRelative: true })),
markdown: './assets/common/css/markdown.css', markdown: './assets/common/css/markdown.css',
}, },
output: { output: {
filename: '[name].min.js', filename: 'js/[name].min.js',
path: path.resolve(__dirname, 'tpl/default/js/') path: path.resolve(__dirname, 'tpl/default/')
}, },
module: { module: {
rules: [ rules: [
@ -52,9 +52,6 @@ module.exports = [
use: [ use: [
{ {
loader: MiniCssExtractPlugin.loader, loader: MiniCssExtractPlugin.loader,
options: {
publicPath: 'tpl/default/css/',
},
}, },
'css-loader', 'css-loader',
'sass-loader', 'sass-loader',
@ -62,23 +59,23 @@ module.exports = [
}, },
{ {
test: /\.(gif|png|jpe?g|svg|ico)$/i, test: /\.(gif|png|jpe?g|svg|ico)$/i,
use: [ type: 'asset/resource',
generator: {
filename: 'img/[name][ext]'
}
},
{ {
loader: 'file-loader', test: /webfont\.svg$/,
options: { type: 'asset/resource',
name: '../img/[name].[ext]', generator: {
publicPath: 'tpl/default/img/', filename: 'fonts/[name][ext]'
} }
}
],
}, },
{ {
test: /\.(eot|ttf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, test: /\.(eot|ttf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: 'file-loader', type: 'asset/resource',
options: { generator: {
name: '../fonts/[name].[ext]', filename: 'fonts/[name][ext]'
// do not add a publicPath here because it's already handled by CSS's publicPath
publicPath: '../default/',
} }
}, },
], ],
@ -98,15 +95,15 @@ module.exports = [
'./assets/vintage/js/base.js', './assets/vintage/js/base.js',
'./assets/vintage/css/reset.css', './assets/vintage/css/reset.css',
'./assets/vintage/css/shaarli.css', './assets/vintage/css/shaarli.css',
].concat(glob.sync('./assets/vintage/img/*')), ].concat(glob.sync('./assets/vintage/img/*', { dotRelative: true })),
markdown: './assets/common/css/markdown.css', markdown: './assets/common/css/markdown.css',
thumbnails: './assets/common/js/thumbnails.js', thumbnails: './assets/common/js/thumbnails.js',
metadata: './assets/common/js/metadata.js', metadata: './assets/common/js/metadata.js',
thumbnails_update: './assets/common/js/thumbnails-update.js', thumbnails_update: './assets/common/js/thumbnails-update.js',
}, },
output: { output: {
filename: '[name].min.js', filename: 'js/[name].min.js',
path: path.resolve(__dirname, 'tpl/vintage/js/') path: path.resolve(__dirname, 'tpl/vintage/')
}, },
module: { module: {
rules: [ rules: [
@ -127,9 +124,6 @@ module.exports = [
use: [ use: [
{ {
loader: MiniCssExtractPlugin.loader, loader: MiniCssExtractPlugin.loader,
options: {
publicPath: 'tpl/vintage/css/',
},
}, },
'css-loader', 'css-loader',
'sass-loader', 'sass-loader',
@ -137,16 +131,10 @@ module.exports = [
}, },
{ {
test: /\.(gif|png|jpe?g|svg|ico)$/i, test: /\.(gif|png|jpe?g|svg|ico)$/i,
use: [ type: 'asset/resource',
{ generator: {
loader: 'file-loader', filename: 'img/[name][ext]'
options: {
name: '../img/[name].[ext]',
// do not add a publicPath here because it's already handled by CSS's publicPath
publicPath: '../vintage',
} }
}
],
}, },
], ],
}, },

4903
yarn.lock

File diff suppressed because it is too large Load diff