Commit e3baf254 authored by Edwin Carlinet's avatar Edwin Carlinet
Browse files

Merge branch 'development/maxtrees-integration' into 'development/ranges'

Port Maxtree and ToS Algorithm

See merge request !86
parents e21324e4 2d509995
Pipeline #15968 failed with stages
in 102 minutes and 2 seconds
......@@ -14,7 +14,6 @@ find_package(Boost 1.58 COMPONENTS program_options REQUIRED)
find_package(FreeImage REQUIRED)
find_package(TBB)
find_package(Qt4)
find_package(range-v3 REQUIRED)
# CONFIGURE COMPILER LAUNCHERS
......
......@@ -357,16 +357,17 @@ int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima)
return mln::accumulate(ima, mln::accu::features::sum<int>());
}
using point_t = mln::image_point_t<mln::experimental::image2d<uint8_t>>;
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<uint8_t>& ima)
std::vector<point_t> sort_points(const mln::experimental::image2d<uint8_t>& ima)
{
return mln::experimental::sort_points(ima);
}
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<int>& ima)
std::vector<point_t> sort_points(const mln::experimental::image2d<int>& ima)
{
return mln::experimental::sort_points(ima);
}
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<mln::rgb8>& ima)
std::vector<point_t> sort_points(const mln::experimental::image2d<mln::rgb8>& ima)
{
return mln::experimental::sort_points(ima, mln::lexicographicalorder_less<mln::rgb8>());
}
......@@ -54,9 +54,11 @@ int accumulate_baseline(const mln::experimental::image2d<uint8_t>& ima);
int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima);
int accumulate(const mln::experimental::image2d<uint8_t>& ima);
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<uint8_t>& ima);
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<int>& ima);
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<mln::rgb8>& ima);
using point_t = mln::image_point_t<mln::experimental::image2d<uint8_t>>;
std::vector<point_t> sort_points(const mln::experimental::image2d<uint8_t>& ima);
std::vector<point_t> sort_points(const mln::experimental::image2d<int>& ima);
std::vector<point_t> sort_points(const mln::experimental::image2d<mln::rgb8>& ima);
class BMAlgorithms : public benchmark::Fixture
{
......
#include <mln/core/algorithm/transform.hpp>
#include <mln/core/colors.hpp>
#include <mln/core/image/experimental/ndimage.hpp>
#include <mln/core/neighborhood/c4.hpp>
#include <mln/core/neighb2d.hpp>
#include <mln/io/experimental/imread.hpp>
#include <mln/morpho/experimental/maxtree.hpp>
#include <mln/morpho/maxtree/maxtree.hpp>
#include <benchmark/benchmark.h>
#include <fixtures/ImagePath/image_path.hpp>
class BMMorpho : public benchmark::Fixture
{
public:
using image_t = mln::experimental::image2d<uint8_t>;
using image_ref_t = mln::image2d<uint8_t>;
BMMorpho()
{
if (!g_loaded)
{
const char* filename = "Aerial_view_of_Olbia.jpg";
mln::experimental::image2d<mln::rgb8> input;
mln::io::experimental::imread(filename, input);
g_input = mln::transform(input, [](mln::rgb8 x) -> uint8_t { return x[0]; });
g_loaded = true;
}
m_input = g_input;
int nr = m_input.width();
int nc = m_input.height();
mln::resize(m_output, m_input);
m_size = nr * nc;
m_input.to(m_input_, false);
m_output.to(m_output_, false);
}
void run(benchmark::State& st, std::function<void(const image_t& input)> callback)
{
for (auto _ : st)
callback(m_input);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
void run2(benchmark::State& st, std::function<void(const image_ref_t& input)> callback)
{
for (auto _ : st)
callback(m_input_);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
protected:
static bool g_loaded;
static mln::experimental::image2d<uint8_t> g_input;
mln::experimental::image2d<uint8_t> m_input;
mln::experimental::image2d<uint8_t> m_output;
std::size_t m_size;
mln::image2d<uint8_t> m_input_;
mln::image2d<uint8_t> m_output_;
};
bool BMMorpho::g_loaded = false;
mln::experimental::image2d<uint8_t> BMMorpho::g_input;
BENCHMARK_F(BMMorpho, MaxtreeNew)(benchmark::State& st)
{
auto f = [](const image_t& input) { mln::morpho::experimental::maxtree(input, mln::experimental::c4); };
this->run(st, f);
}
BENCHMARK_F(BMMorpho, MaxtreeRef)(benchmark::State& st)
{
auto f = [](const image_ref_t& input) { mln::morpho::maxtree_indexes(input, mln::c4); };
this->run2(st, f);
}
BENCHMARK_MAIN();
#include <mln/core/algorithm/transform.hpp>
#include <mln/core/colors.hpp>
#include <mln/core/image/experimental/ndimage.hpp>
#include <mln/core/neighborhood/c4.hpp>
#include <mln/core/neighb2d.hpp>
#include <mln/io/experimental/imread.hpp>
#include <mln/morpho/experimental/tos.hpp>
#include <mln/morpho/tos/tos.hpp>
#include <benchmark/benchmark.h>
#include <fixtures/ImagePath/image_path.hpp>
class BMMorpho : public benchmark::Fixture
{
public:
using image_t = mln::experimental::image2d<uint8_t>;
using image_ref_t = mln::image2d<uint8_t>;
BMMorpho()
{
if (!g_loaded)
{
const char* filename = "Aerial_view_of_Olbia.jpg";
mln::experimental::image2d<mln::rgb8> input;
mln::io::experimental::imread(filename, input);
g_input = mln::transform(input, [](mln::rgb8 x) -> uint8_t { return x[0]; });
g_loaded = true;
}
m_input = g_input;
int nr = m_input.width();
int nc = m_input.height();
mln::resize(m_output, m_input);
m_size = nr * nc;
m_input.to(m_input_, false);
m_output.to(m_output_, false);
}
void run(benchmark::State& st, std::function<void(const image_t& input)> callback)
{
for (auto _ : st)
callback(m_input);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
void run2(benchmark::State& st, std::function<void(const image_ref_t& input)> callback)
{
for (auto _ : st)
callback(m_input_);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
protected:
static bool g_loaded;
static mln::experimental::image2d<uint8_t> g_input;
mln::experimental::image2d<uint8_t> m_input;
mln::experimental::image2d<uint8_t> m_output;
std::size_t m_size;
mln::image2d<uint8_t> m_input_;
mln::image2d<uint8_t> m_output_;
};
bool BMMorpho::g_loaded = false;
mln::experimental::image2d<uint8_t> BMMorpho::g_input;
BENCHMARK_F(BMMorpho, ToSNew)(benchmark::State& st)
{
auto f = [](const image_t& input) { mln::morpho::experimental::tos(input, input.domain().tl()); };
this->run(st, f);
}
BENCHMARK_F(BMMorpho, ToSRef)(benchmark::State& st)
{
auto f = [](const image_ref_t& input) { mln::morpho::tos(input); };
this->run2(st, f);
}
BENCHMARK_MAIN();
......@@ -66,6 +66,8 @@ set_source_files_properties(${src_standalone} PROPERTIES COMPILE_FLAGS ${STANDAL
add_benchmark(BMAlgorithms BMAlgorithms.cpp BMAlgorithms_main.cpp)
add_benchmark(BMNeighborhood BMNeighborhood.cpp BMNeighborhood_main.cpp)
add_benchmark(BMRotation BMRotation.cpp)
add_benchmark(BMMorphoMaxtree BMMorphoMaxtree.cpp)
add_benchmark(BMMorphoTos BMMorphoTos.cpp)
add_benchmark(BMMorphoBase BMMorphoBase.cpp)
add_benchmark(BMMorphoBaseRef BMMorphoBaseRef.cpp)
add_benchmark(BMMorphers BMMorphers.cpp BMMorphers_main.cpp)
......
......@@ -15,7 +15,7 @@ class Pylene(ConanFile):
default_options = ("gtest=False", "benchmark=False", "freeimage=False", "boost=False",
# TO REMOVE once docker image is fixed with the buildfarm profile updated
"boost_program_options=False")
generators = "cmake_paths"
generators = [ "cmake_paths", "cmake_find_package" ]
exports_sources = ["pylene/*", "cmake/*", "CMakeLists.txt", "LICENSE"]
def get_cmake_config(self):
......@@ -41,7 +41,7 @@ class Pylene(ConanFile):
def requirements(self):
self.requires("range-v3/0.5.0@lrde/patched")
self.requires("cmcstl2/head@lrde/testing")
self.requires("fmt/5.3.0@bincrafters/stable")
self.requires("fmt/[>=6.0 <6.1]")
if self.options.freeimage:
self.requires("freeimage/3.18.0@dutiona/stable")
......
......@@ -6,26 +6,24 @@ Include :file:`<mln/core/algorithm/sort.hpp>`
.. cpp:namespace:: mln
#. .. cpp:function:: void sort_points(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: void sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
void sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: void sort_indexes(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: void sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> \
sort_indexes(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> \
sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
void sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_indexes(InputImage ima, OutputRange&& rng)
std::vector<image_point_t<InputImage>> sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
Sort the points (versions 1-4) or the indexes (versions 5-8) of an image w.r.t their values.
Sort the points (versions 1-2) or the indexes (versions 3-4) of an image w.r.t their values.
:param ima: The source image
:param rng: (versions 1,2,5,6) The destination range where points or indexes are going to be stored.
:param cmp: (versions 2,4,6,8) The comparison function between values
:param rng: (versions 1,3) The destination range where points or indexes are going to be stored.
:param cmp: (optional) The comparison function between values
:tparam InputImage: A model of :cpp:concept:`InputImage`
:tparam OutputRange: A model of :cpp:concept:`OutputRange`
:tparam Compare: A model of :cpp:concept:`Compare`
:return: (versions 3,4,7,8) A `std::vector` with the points or the indexes sorted.
:return: (versions 2-4) A `std::vector` with the points or the indexes sorted.
......
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="313.039pt" height="151.048pt" viewBox="0 0 313.039 151.048" version="1.1">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="313.039pt" height="136.605pt" viewBox="0 0 313.039 136.605" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
......@@ -54,84 +54,124 @@
<path style="stroke:none;" d="M 5.109375 -0.3125 C 5.109375 -0.609375 4.84375 -0.609375 4.703125 -0.609375 L 4.25 -0.609375 L 4.25 -5.6875 C 4.25 -5.984375 4.203125 -6.09375 3.859375 -6.09375 L 3.125 -6.09375 C 2.96875 -6.09375 2.71875 -6.09375 2.71875 -5.78125 C 2.71875 -5.484375 2.984375 -5.484375 3.125 -5.484375 L 3.5625 -5.484375 L 3.5625 -3.90625 C 3.234375 -4.203125 2.828125 -4.359375 2.40625 -4.359375 C 1.3125 -4.359375 0.359375 -3.40625 0.359375 -2.140625 C 0.359375 -0.90625 1.25 0.0625 2.3125 0.0625 C 2.875 0.0625 3.296875 -0.203125 3.5625 -0.5 C 3.5625 -0.140625 3.5625 0 3.96875 0 L 4.6875 0 C 4.859375 0 5.109375 0 5.109375 -0.3125 Z M 3.5625 -1.9375 C 3.5625 -1.375 3.125 -0.546875 2.359375 -0.546875 C 1.640625 -0.546875 1.046875 -1.25 1.046875 -2.140625 C 1.046875 -3.09375 1.75 -3.75 2.4375 -3.75 C 3.078125 -3.75 3.5625 -3.1875 3.5625 -2.640625 Z M 3.5625 -1.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-17">
<path style="stroke:none;" d="M 4.53125 -0.296875 C 4.53125 -0.609375 4.28125 -0.609375 4.125 -0.609375 L 3.078125 -0.609375 L 3.078125 -3.890625 C 3.078125 -4.203125 3.015625 -4.296875 2.6875 -4.296875 L 1.265625 -4.296875 C 1.109375 -4.296875 0.859375 -4.296875 0.859375 -4 C 0.859375 -3.6875 1.109375 -3.6875 1.265625 -3.6875 L 2.390625 -3.6875 L 2.390625 -0.609375 L 1.1875 -0.609375 C 1.03125 -0.609375 0.78125 -0.609375 0.78125 -0.296875 C 0.78125 0 1.03125 0 1.1875 0 L 4.125 0 C 4.28125 0 4.53125 0 4.53125 -0.296875 Z M 3.125 -5.53125 C 3.125 -5.8125 2.90625 -6.03125 2.625 -6.03125 C 2.34375 -6.03125 2.125 -5.8125 2.125 -5.53125 C 2.125 -5.25 2.34375 -5.03125 2.625 -5.03125 C 2.90625 -5.03125 3.125 -5.25 3.125 -5.53125 Z M 3.125 -5.53125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-18">
<path style="stroke:none;" d="M 5.140625 -0.296875 C 5.140625 -0.609375 4.9375 -0.609375 4.578125 -0.609375 L 4.578125 -3.015625 C 4.578125 -3.21875 4.578125 -4.359375 3.6875 -4.359375 C 3.390625 -4.359375 2.984375 -4.234375 2.703125 -3.84375 C 2.546875 -4.171875 2.265625 -4.359375 1.9375 -4.359375 C 1.625 -4.359375 1.328125 -4.21875 1.09375 -4 C 1.0625 -4.296875 0.875 -4.296875 0.6875 -4.296875 L 0.375 -4.296875 C 0.21875 -4.296875 -0.046875 -4.296875 -0.046875 -4 C -0.046875 -3.6875 0.171875 -3.6875 0.53125 -3.6875 L 0.53125 -0.609375 C 0.171875 -0.609375 -0.046875 -0.609375 -0.046875 -0.296875 C -0.046875 0 0.234375 0 0.375 0 L 1.25 0 C 1.390625 0 1.65625 0 1.65625 -0.296875 C 1.65625 -0.609375 1.453125 -0.609375 1.09375 -0.609375 L 1.09375 -2.390625 C 1.09375 -3.28125 1.5 -3.75 1.90625 -3.75 C 2.140625 -3.75 2.265625 -3.578125 2.265625 -2.9375 L 2.265625 -0.609375 C 2.078125 -0.609375 1.828125 -0.609375 1.828125 -0.296875 C 1.828125 0 2.109375 0 2.25 0 L 2.984375 0 C 3.140625 0 3.40625 0 3.40625 -0.296875 C 3.40625 -0.609375 3.1875 -0.609375 2.828125 -0.609375 L 2.828125 -2.390625 C 2.828125 -3.28125 3.234375 -3.75 3.65625 -3.75 C 3.875 -3.75 4.015625 -3.578125 4.015625 -2.9375 L 4.015625 -0.609375 C 3.828125 -0.609375 3.578125 -0.609375 3.578125 -0.296875 C 3.578125 0 3.84375 0 3.984375 0 L 4.734375 0 C 4.890625 0 5.140625 0 5.140625 -0.296875 Z M 5.140625 -0.296875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-19">
<path style="stroke:none;" d="M 4.828125 -1.671875 C 4.828125 -2 4.578125 -2 4.46875 -2 C 4.390625 -2 4.15625 -2 4.140625 -1.71875 C 4.0625 -0.734375 3.265625 -0.5 2.84375 -0.5 C 1.9375 -0.5 1.09375 -1.5625 1.09375 -3.046875 C 1.09375 -4.53125 1.953125 -5.59375 2.84375 -5.59375 C 3.4375 -5.59375 3.984375 -5.140625 4.125 -4.328125 C 4.15625 -4.15625 4.171875 -4 4.46875 -4 C 4.828125 -4 4.828125 -4.203125 4.828125 -4.40625 L 4.828125 -5.796875 C 4.828125 -5.953125 4.828125 -6.203125 4.53125 -6.203125 C 4.34375 -6.203125 4.296875 -6.09375 4.25 -6.03125 C 4.234375 -5.984375 4.234375 -5.96875 4.09375 -5.71875 C 3.765625 -6 3.3125 -6.203125 2.796875 -6.203125 C 1.515625 -6.203125 0.40625 -4.859375 0.40625 -3.046875 C 0.40625 -1.21875 1.515625 0.109375 2.8125 0.109375 C 3.96875 0.109375 4.828125 -0.78125 4.828125 -1.671875 Z M 4.828125 -1.671875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-20">
<symbol overflow="visible" id="glyph0-18">
<path style="stroke:none;" d="M 4.578125 -1.25 C 4.578125 -2.28125 3.296875 -2.5 2.96875 -2.546875 L 2.296875 -2.65625 C 2 -2.703125 1.328125 -2.828125 1.328125 -3.203125 C 1.328125 -3.46875 1.640625 -3.78125 2.59375 -3.78125 C 3.421875 -3.78125 3.5625 -3.484375 3.59375 -3.21875 C 3.59375 -3.046875 3.625 -2.875 3.921875 -2.875 C 4.28125 -2.875 4.28125 -3.09375 4.28125 -3.296875 L 4.28125 -3.984375 C 4.28125 -4.140625 4.28125 -4.390625 3.984375 -4.390625 C 3.734375 -4.390625 3.703125 -4.25 3.671875 -4.171875 C 3.234375 -4.390625 2.796875 -4.390625 2.609375 -4.390625 C 0.953125 -4.390625 0.71875 -3.5625 0.71875 -3.203125 C 0.71875 -2.296875 1.765625 -2.125 2.6875 -1.984375 C 3.171875 -1.90625 3.96875 -1.78125 3.96875 -1.25 C 3.96875 -0.875 3.59375 -0.546875 2.6875 -0.546875 C 2.21875 -0.546875 1.671875 -0.65625 1.421875 -1.4375 C 1.359375 -1.609375 1.328125 -1.71875 1.0625 -1.71875 C 0.71875 -1.71875 0.71875 -1.515625 0.71875 -1.3125 L 0.71875 -0.34375 C 0.71875 -0.1875 0.71875 0.0625 1.015625 0.0625 C 1.109375 0.0625 1.265625 0.046875 1.390625 -0.3125 C 1.875 0.046875 2.40625 0.0625 2.6875 0.0625 C 4.25 0.0625 4.578125 -0.765625 4.578125 -1.25 Z M 4.578125 -1.25 "/>
</symbol>
<symbol overflow="visible" id="glyph0-21">
<symbol overflow="visible" id="glyph0-19">
<path style="stroke:none;" d="M 5.203125 -0.921875 C 5.203125 -1.25 4.96875 -1.25 4.859375 -1.25 C 4.75 -1.25 4.53125 -1.25 4.515625 -0.953125 C 4.515625 -0.875 4.5 -0.5 4.328125 -0.5 C 4.046875 -0.5 4.046875 -0.953125 4.046875 -1.484375 C 4.046875 -2.109375 4.046875 -2.1875 3.953125 -2.421875 C 3.84375 -2.71875 3.609375 -2.921875 3.46875 -3.03125 C 4.125 -3.40625 4.3125 -4 4.3125 -4.421875 C 4.3125 -5.28125 3.5625 -6.09375 2.375 -6.09375 L 0.625 -6.09375 C 0.453125 -6.09375 0.21875 -6.09375 0.21875 -5.78125 C 0.21875 -5.484375 0.46875 -5.484375 0.625 -5.484375 L 0.875 -5.484375 L 0.875 -0.609375 L 0.625 -0.609375 C 0.453125 -0.609375 0.21875 -0.609375 0.21875 -0.296875 C 0.21875 0 0.46875 0 0.625 0 L 1.796875 0 C 1.953125 0 2.203125 0 2.203125 -0.296875 C 2.203125 -0.609375 1.96875 -0.609375 1.796875 -0.609375 L 1.5625 -0.609375 L 1.5625 -2.734375 L 2.328125 -2.734375 C 2.515625 -2.734375 2.828125 -2.734375 3.140625 -2.46875 C 3.359375 -2.25 3.359375 -2.03125 3.359375 -1.609375 C 3.359375 -0.96875 3.359375 -0.671875 3.546875 -0.34375 C 3.71875 -0.046875 4 0.109375 4.34375 0.109375 C 4.96875 0.109375 5.203125 -0.546875 5.203125 -0.921875 Z M 3.625 -4.421875 C 3.625 -3.921875 3.1875 -3.34375 2.265625 -3.34375 L 1.5625 -3.34375 L 1.5625 -5.484375 L 2.265625 -5.484375 C 3.1875 -5.484375 3.625 -4.890625 3.625 -4.421875 Z M 3.625 -4.421875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-22">
<symbol overflow="visible" id="glyph0-20">
<path style="stroke:none;" d="M 4.9375 -5.78125 C 4.9375 -6.09375 4.703125 -6.09375 4.546875 -6.09375 L 3.484375 -6.09375 C 3.328125 -6.09375 3.09375 -6.09375 3.09375 -5.78125 C 3.09375 -5.484375 3.34375 -5.484375 3.484375 -5.484375 L 3.734375 -5.484375 L 3.734375 -0.75 L 1.890625 -5.734375 C 1.78125 -6.0625 1.625 -6.09375 1.359375 -6.09375 L 0.671875 -6.09375 C 0.53125 -6.09375 0.28125 -6.09375 0.28125 -5.796875 C 0.28125 -5.484375 0.515625 -5.484375 0.671875 -5.484375 L 0.921875 -5.484375 L 0.921875 -0.609375 L 0.671875 -0.609375 C 0.53125 -0.609375 0.28125 -0.609375 0.28125 -0.3125 C 0.28125 0 0.515625 0 0.671875 0 L 1.734375 0 C 1.890625 0 2.140625 0 2.140625 -0.296875 C 2.140625 -0.609375 1.890625 -0.609375 1.734375 -0.609375 L 1.484375 -0.609375 L 1.484375 -5.34375 L 1.5 -5.34375 L 3.328125 -0.359375 C 3.453125 -0.015625 3.625 0 3.875 0 C 4.171875 0 4.296875 -0.03125 4.296875 -0.40625 L 4.296875 -5.484375 L 4.546875 -5.484375 C 4.6875 -5.484375 4.9375 -5.484375 4.9375 -5.78125 Z M 4.9375 -5.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 6.40625 -5.8125 C 6.40625 -6.09375 6.140625 -6.09375 6.015625 -6.09375 L 4.953125 -6.09375 C 4.8125 -6.09375 4.53125 -6.09375 4.53125 -5.765625 C 4.53125 -5.484375 4.78125 -5.484375 5.109375 -5.484375 L 3.9375 -0.765625 L 3.921875 -0.765625 L 3.328125 -5.71875 C 3.296875 -6.09375 3.203125 -6.09375 2.53125 -6.09375 L 2.140625 -6.09375 C 1.984375 -6.09375 1.71875 -6.09375 1.71875 -5.765625 C 1.71875 -5.484375 2 -5.484375 2.125 -5.484375 L 2.296875 -5.484375 L 1.078125 -0.609375 L 0.75 -0.609375 C 0.609375 -0.609375 0.34375 -0.609375 0.34375 -0.28125 C 0.34375 0 0.625 0 0.75 0 L 1.796875 0 C 1.9375 0 2.21875 0 2.21875 -0.328125 C 2.21875 -0.609375 1.9375 -0.609375 1.8125 -0.609375 L 1.640625 -0.609375 L 2.828125 -5.328125 L 3.421875 -0.375 C 3.453125 -0.15625 3.46875 0 3.875 0 L 3.984375 0 C 4.203125 0 4.3125 0 4.390625 -0.3125 L 5.6875 -5.484375 L 5.984375 -5.484375 C 6.140625 -5.484375 6.40625 -5.484375 6.40625 -5.8125 Z M 6.40625 -5.8125 "/>
<path style="stroke:none;" d="M 4.625 -0.28125 C 4.625 -0.578125 4.390625 -0.578125 4.25 -0.578125 L 3.859375 -0.578125 L 3.859375 -2.625 C 3.859375 -3.5 3.421875 -3.90625 2.6875 -3.90625 C 2.265625 -3.90625 1.84375 -3.765625 1.5 -3.46875 C 1.5 -3.71875 1.5 -3.859375 1.125 -3.859375 L 0.453125 -3.859375 C 0.328125 -3.859375 0.078125 -3.859375 0.078125 -3.578125 C 0.078125 -3.28125 0.3125 -3.28125 0.453125 -3.28125 L 0.84375 -3.28125 L 0.84375 -0.578125 L 0.453125 -0.578125 C 0.328125 -0.578125 0.078125 -0.578125 0.078125 -0.296875 C 0.078125 0 0.3125 0 0.453125 0 L 1.90625 0 C 2.03125 0 2.28125 0 2.28125 -0.28125 C 2.28125 -0.578125 2.03125 -0.578125 1.90625 -0.578125 L 1.5 -0.578125 L 1.5 -2.140625 C 1.5 -3.015625 2.1875 -3.328125 2.625 -3.328125 C 3.0625 -3.328125 3.1875 -3.109375 3.1875 -2.578125 L 3.1875 -0.578125 L 2.90625 -0.578125 C 2.78125 -0.578125 2.515625 -0.578125 2.515625 -0.296875 C 2.515625 0 2.765625 0 2.90625 0 L 4.25 0 C 4.375 0 4.625 0 4.625 -0.28125 Z M 4.625 -0.28125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-2">
<path style="stroke:none;" d="M 4.625 -0.28125 C 4.625 -0.578125 4.390625 -0.578125 4.25 -0.578125 L 3.859375 -0.578125 L 3.859375 -5.109375 C 3.859375 -5.40625 3.78125 -5.484375 3.484375 -5.484375 L 2.796875 -5.484375 C 2.671875 -5.484375 2.421875 -5.484375 2.421875 -5.1875 C 2.421875 -4.890625 2.65625 -4.890625 2.796875 -4.890625 L 3.1875 -4.890625 L 3.1875 -3.53125 C 3 -3.703125 2.640625 -3.90625 2.15625 -3.90625 C 1.171875 -3.90625 0.3125 -3.046875 0.3125 -1.921875 C 0.3125 -0.828125 1.109375 0.046875 2.078125 0.046875 C 2.484375 0.046875 2.875 -0.109375 3.1875 -0.4375 C 3.1875 -0.15625 3.1875 0 3.5625 0 L 4.25 0 C 4.375 0 4.625 0 4.625 -0.28125 Z M 3.1875 -1.75 C 3.1875 -1.265625 2.796875 -0.53125 2.109375 -0.53125 C 1.5 -0.53125 0.96875 -1.140625 0.96875 -1.921875 C 0.96875 -2.71875 1.546875 -3.328125 2.203125 -3.328125 C 2.75 -3.328125 3.1875 -2.859375 3.1875 -2.375 Z M 3.1875 -1.75 "/>
</symbol>
<symbol overflow="visible" id="glyph1-3">
<path style="stroke:none;" d="M 4.125 -0.28125 C 4.125 -0.578125 3.875 -0.578125 3.734375 -0.578125 L 2.796875 -0.578125 L 2.796875 -3.484375 C 2.796875 -3.78125 2.71875 -3.859375 2.421875 -3.859375 L 1.125 -3.859375 C 0.984375 -3.859375 0.734375 -3.859375 0.734375 -3.578125 C 0.734375 -3.28125 0.984375 -3.28125 1.125 -3.28125 L 2.140625 -3.28125 L 2.140625 -0.578125 L 1.046875 -0.578125 C 0.921875 -0.578125 0.65625 -0.578125 0.65625 -0.296875 C 0.65625 0 0.90625 0 1.046875 0 L 3.734375 0 C 3.859375 0 4.125 0 4.125 -0.28125 Z M 2.8125 -4.984375 C 2.8125 -5.234375 2.609375 -5.4375 2.359375 -5.4375 C 2.109375 -5.4375 1.90625 -5.234375 1.90625 -4.984375 C 1.90625 -4.734375 2.109375 -4.53125 2.359375 -4.53125 C 2.609375 -4.53125 2.8125 -4.734375 2.8125 -4.984375 Z M 2.8125 -4.984375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-4">
<path style="stroke:none;" d="M 4.625 -0.28125 C 4.625 -0.578125 4.4375 -0.578125 4.109375 -0.578125 L 4.109375 -2.703125 C 4.109375 -2.90625 4.109375 -3.90625 3.3125 -3.90625 C 3.234375 -3.90625 2.796875 -3.90625 2.4375 -3.46875 C 2.40625 -3.5 2.25 -3.90625 1.765625 -3.90625 C 1.546875 -3.90625 1.25 -3.84375 1 -3.609375 C 0.953125 -3.859375 0.78125 -3.859375 0.625 -3.859375 L 0.328125 -3.859375 C 0.1875 -3.859375 -0.046875 -3.859375 -0.046875 -3.578125 C -0.046875 -3.28125 0.140625 -3.28125 0.453125 -3.28125 L 0.453125 -0.578125 C 0.140625 -0.578125 -0.046875 -0.578125 -0.046875 -0.28125 C -0.046875 0 0.1875 0 0.328125 0 L 1.125 0 C 1.265625 0 1.5 0 1.5 -0.28125 C 1.5 -0.578125 1.3125 -0.578125 1 -0.578125 L 1 -2.15625 C 1 -2.921875 1.359375 -3.328125 1.71875 -3.328125 C 1.90625 -3.328125 2.015625 -3.203125 2.015625 -2.640625 L 2.015625 -0.578125 C 1.9375 -0.578125 1.671875 -0.578125 1.671875 -0.296875 C 1.671875 0 1.921875 0 2.046875 0 L 2.6875 0 C 2.828125 0 3.0625 0 3.0625 -0.28125 C 3.0625 -0.578125 2.875 -0.578125 2.5625 -0.578125 L 2.5625 -2.15625 C 2.5625 -2.921875 2.921875 -3.328125 3.28125 -3.328125 C 3.46875 -3.328125 3.578125 -3.203125 3.578125 -2.640625 L 3.578125 -0.578125 C 3.5 -0.578125 3.234375 -0.578125 3.234375 -0.296875 C 3.234375 0 3.484375 0 3.609375 0 L 4.25 0 C 4.390625 0 4.625 0 4.625 -0.28125 Z M 4.625 -0.28125 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke:none;" d="M 6.40625 -5.8125 C 6.40625 -6.09375 6.140625 -6.09375 6.015625 -6.09375 L 4.953125 -6.09375 C 4.8125 -6.09375 4.53125 -6.09375 4.53125 -5.765625 C 4.53125 -5.484375 4.78125 -5.484375 5.109375 -5.484375 L 3.9375 -0.765625 L 3.921875 -0.765625 L 3.328125 -5.71875 C 3.296875 -6.09375 3.203125 -6.09375 2.53125 -6.09375 L 2.140625 -6.09375 C 1.984375 -6.09375 1.71875 -6.09375 1.71875 -5.765625 C 1.71875 -5.484375 2 -5.484375 2.125 -5.484375 L 2.296875 -5.484375 L 1.078125 -0.609375 L 0.75 -0.609375 C 0.609375 -0.609375 0.34375 -0.609375 0.34375 -0.28125 C 0.34375 0 0.625 0 0.75 0 L 1.796875 0 C 1.9375 0 2.21875 0 2.21875 -0.328125 C 2.21875 -0.609375 1.9375 -0.609375 1.8125 -0.609375 L 1.640625 -0.609375 L 2.828125 -5.328125 L 3.421875 -0.375 C 3.453125 -0.15625 3.46875 0 3.875 0 L 3.984375 0 C 4.203125 0 4.3125 0 4.390625 -0.3125 L 5.6875 -5.484375 L 5.984375 -5.484375 C 6.140625 -5.484375 6.40625 -5.484375 6.40625 -5.8125 Z M 6.40625 -5.8125 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<path style="stroke:none;" d="M 2.5625 -0.09375 L 2.5625 -0.125 C 2.390625 -0.84375 2.09375 -1.53125 1.703125 -2.171875 C 2.09375 -2.796875 2.390625 -3.484375 2.5625 -4.21875 C 2.5625 -4.21875 2.5625 -4.21875 2.5625 -4.234375 C 2.5625 -4.28125 2.515625 -4.328125 2.46875 -4.328125 L 2.4375 -4.328125 C 2.390625 -4.328125 2.359375 -4.3125 2.34375 -4.265625 C 2.078125 -3.5 1.625 -2.8125 1.046875 -2.25 C 1.03125 -2.21875 1.015625 -2.203125 1.015625 -2.171875 C 1.015625 -2.140625 1.03125 -2.109375 1.046875 -2.09375 C 1.625 -1.53125 2.078125 -0.828125 2.34375 -0.0625 C 2.359375 -0.03125 2.390625 0 2.4375 0 L 2.46875 0 C 2.515625 0 2.5625 -0.046875 2.5625 -0.09375 Z M 4.09375 -0.09375 L 4.09375 -0.125 C 3.921875 -0.84375 3.625 -1.53125 3.234375 -2.171875 C 3.625 -2.796875 3.921875 -3.484375 4.09375 -4.21875 C 4.09375 -4.21875 4.09375 -4.21875 4.09375 -4.234375 C 4.09375 -4.28125 4.046875 -4.328125 4 -4.328125 L 3.96875 -4.328125 C 3.921875 -4.328125 3.890625 -4.3125 3.890625 -4.265625 C 3.609375 -3.5 3.171875 -2.8125 2.578125 -2.25 C 2.5625 -2.21875 2.5625 -2.203125 2.5625 -2.171875 C 2.5625 -2.140625 2.5625 -2.109375 2.578125 -2.09375 C 3.171875 -1.53125 3.609375 -0.828125 3.890625 -0.0625 C 3.890625 -0.03125 3.921875 0 3.96875 0 L 4 0 C 4.046875 0 4.09375 -0.046875 4.09375 -0.09375 Z M 4.09375 -0.09375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-2">
<symbol overflow="visible" id="glyph3-2">
<path style="stroke:none;" d="M 4.90625 0 L 4.90625 -0.28125 C 4.453125 -0.28125 4.21875 -0.28125 4.21875 -0.5625 L 4.21875 -2.28125 C 4.21875 -3.015625 4.21875 -3.28125 3.96875 -3.59375 C 3.765625 -3.84375 3.421875 -3.96875 2.96875 -3.96875 C 2.140625 -3.96875 1.75 -3.34375 1.625 -3.09375 L 1.609375 -3.09375 L 1.609375 -3.96875 L 0.3125 -3.859375 L 0.3125 -3.59375 C 0.921875 -3.59375 1 -3.53125 1 -3.078125 L 1 -0.6875 C 1 -0.28125 0.90625 -0.28125 0.3125 -0.28125 L 0.3125 0 C 0.734375 -0.015625 0.90625 -0.03125 1.34375 -0.03125 C 1.765625 -0.03125 1.890625 -0.015625 2.359375 0 L 2.359375 -0.28125 C 1.765625 -0.28125 1.671875 -0.28125 1.671875 -0.6875 L 1.671875 -2.328125 C 1.671875 -3.28125 2.34375 -3.734375 2.90625 -3.734375 C 3.4375 -3.734375 3.546875 -3.296875 3.546875 -2.765625 L 3.546875 -0.6875 C 3.546875 -0.28125 3.453125 -0.28125 2.859375 -0.28125 L 2.859375 0 C 3.28125 -0.015625 3.453125 -0.03125 3.890625 -0.03125 C 4.3125 -0.03125 4.4375 -0.015625 4.90625 0 Z M 4.90625 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-3">
<symbol overflow="visible" id="glyph3-3">
<path style="stroke:none;" d="M 4.84375 0 L 4.84375 -0.28125 C 4.234375 -0.28125 4.15625 -0.34375 4.15625 -0.78125 L 4.15625 -6.21875 L 2.828125 -6.125 L 2.828125 -5.84375 C 3.4375 -5.84375 3.515625 -5.78125 3.515625 -5.34375 L 3.515625 -3.4375 C 3.46875 -3.484375 3.0625 -3.96875 2.375 -3.96875 C 1.265625 -3.96875 0.3125 -3.078125 0.3125 -1.921875 C 0.3125 -0.8125 1.203125 0.09375 2.265625 0.09375 C 2.921875 0.09375 3.328125 -0.28125 3.484375 -0.46875 L 3.484375 0.09375 Z M 3.484375 -1.078125 C 3.484375 -0.921875 3.484375 -0.890625 3.359375 -0.703125 C 3.078125 -0.296875 2.65625 -0.125 2.3125 -0.125 C 1.921875 -0.125 1.5625 -0.34375 1.328125 -0.71875 C 1.09375 -1.109375 1.078125 -1.625 1.078125 -1.921875 C 1.078125 -2.34375 1.125 -2.8125 1.359375 -3.171875 C 1.5625 -3.46875 1.921875 -3.734375 2.40625 -3.734375 C 2.78125 -3.734375 3.140625 -3.546875 3.375 -3.203125 C 3.484375 -3.0625 3.484375 -3.0625 3.484375 -2.890625 Z M 3.484375 -1.078125 "/>
</symbol>
<symbol overflow="visible" id="glyph2-4">
<symbol overflow="visible" id="glyph3-4">
<path style="stroke:none;" d="M 2.265625 0 L 2.265625 -0.28125 C 1.6875 -0.28125 1.65625 -0.328125 1.65625 -0.671875 L 1.65625 -3.96875 L 0.359375 -3.859375 L 0.359375 -3.59375 C 0.9375 -3.59375 1.015625 -3.53125 1.015625 -3.09375 L 1.015625 -0.6875 C 1.015625 -0.28125 0.921875 -0.28125 0.328125 -0.28125 L 0.328125 0 C 0.71875 -0.015625 0.921875 -0.03125 1.3125 -0.03125 C 1.453125 -0.03125 1.828125 -0.03125 2.265625 0 Z M 1.765625 -5.40625 C 1.765625 -5.671875 1.546875 -5.890625 1.28125 -5.890625 C 1.015625 -5.890625 0.796875 -5.671875 0.796875 -5.40625 C 0.796875 -5.140625 1.015625 -4.921875 1.28125 -4.921875 C 1.546875 -4.921875 1.765625 -5.140625 1.765625 -5.40625 Z M 1.765625 -5.40625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-5">
<symbol overflow="visible" id="glyph3-5">
<path style="stroke:none;" d="M 7.46875 0 L 7.46875 -0.28125 C 7.015625 -0.28125 6.796875 -0.28125 6.78125 -0.5625 L 6.78125 -2.28125 C 6.78125 -3.0625 6.78125 -3.3125 6.484375 -3.640625 C 6.296875 -3.859375 5.9375 -3.96875 5.53125 -3.96875 C 4.875 -3.96875 4.4375 -3.59375 4.1875 -3.109375 C 4.078125 -3.640625 3.71875 -3.96875 2.96875 -3.96875 C 2.25 -3.96875 1.8125 -3.5 1.625 -3.078125 L 1.609375 -3.078125 L 1.609375 -3.96875 L 0.3125 -3.859375 L 0.3125 -3.59375 C 0.921875 -3.59375 1 -3.53125 1 -3.078125 L 1 -0.6875 C 1 -0.28125 0.90625 -0.28125 0.3125 -0.28125 L 0.3125 0 C 0.734375 -0.015625 0.90625 -0.03125 1.34375 -0.03125 C 1.765625 -0.03125 1.890625 -0.015625 2.359375 0 L 2.359375 -0.28125 C 1.765625 -0.28125 1.671875 -0.28125 1.671875 -0.6875 L 1.671875 -2.328125 C 1.671875 -3.296875 2.375 -3.734375 2.90625 -3.734375 C 3.40625 -3.734375 3.5625 -3.390625 3.5625 -2.765625 L 3.5625 -0.6875 C 3.5625 -0.28125 3.46875 -0.28125 2.875 -0.28125 L 2.875 0 C 3.296875 -0.015625 3.46875 -0.03125 3.890625 -0.03125 C 4.328125 -0.03125 4.4375 -0.015625 4.921875 0 L 4.921875 -0.28125 C 4.328125 -0.28125 4.21875 -0.28125 4.21875 -0.6875 L 4.21875 -2.328125 C 4.21875 -3.296875 4.921875 -3.734375 5.46875 -3.734375 C 5.953125 -3.734375 6.109375 -3.390625 6.109375 -2.765625 L 6.109375 -0.6875 C 6.109375 -0.28125 6.015625 -0.28125 5.421875 -0.28125 L 5.421875 0 C 5.84375 -0.015625 6.015625 -0.03125 6.453125 -0.03125 C 6.875 -0.03125 7 -0.015625 7.46875 0 Z M 7.46875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-6">
<symbol overflow="visible" id="glyph3-6">
<path style="stroke:none;" d="M 6.640625 -3.15625 C 6.640625 -3.359375 6.453125 -3.359375 6.3125 -3.359375 L 0.84375 -3.359375 C 0.703125 -3.359375 0.515625 -3.359375 0.515625 -3.15625 C 0.515625 -2.96875 0.6875 -2.96875 0.8125 -2.96875 L 6.34375 -2.96875 C 6.46875 -2.96875 6.640625 -2.96875 6.640625 -3.15625 Z M 6.640625 -1.34375 C 6.640625 -1.53125 6.46875 -1.53125 6.34375 -1.53125 L 0.8125 -1.53125 C 0.6875 -1.53125 0.515625 -1.53125 0.515625 -1.34375 C 0.515625 -1.140625 0.703125 -1.140625 0.84375 -1.140625 L 6.3125 -1.140625 C 6.453125 -1.140625 6.640625 -1.140625 6.640625 -1.34375 Z M 6.640625 -1.34375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-7">
<symbol overflow="visible" id="glyph3-7">
<path style="stroke:none;" d="M 3.875 0 L 3.875 -0.28125 L 3.59375 -0.28125 C 2.75 -0.28125 2.71875 -0.390625 2.71875 -0.71875 L 2.71875 -5.734375 C 2.71875 -5.953125 2.71875 -5.96875 2.5 -5.96875 C 1.9375 -5.40625 1.109375 -5.40625 0.828125 -5.40625 L 0.828125 -5.125 C 1 -5.125 1.546875 -5.125 2.03125 -5.359375 L 2.03125 -0.71875 C 2.03125 -0.390625 2.015625 -0.28125 1.171875 -0.28125 L 0.890625 -0.28125 L 0.890625 0 C 1.203125 -0.03125 2.015625 -0.03125 2.375 -0.03125 C 2.75 -0.03125 3.546875 -0.03125 3.875 0 Z M 3.875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-8">
<symbol overflow="visible" id="glyph3-8">
<path style="stroke:none;" d="M 4.09375 -2.171875 C 4.09375 -2.203125 4.09375 -2.21875 4.078125 -2.25 C 3.484375 -2.8125 3.046875 -3.5 2.765625 -4.265625 C 2.765625 -4.3125 2.71875 -4.328125 2.6875 -4.328125 L 2.65625 -4.328125 C 2.59375 -4.328125 2.5625 -4.28125 2.5625 -4.234375 C 2.5625 -4.21875 2.5625 -4.21875 2.5625 -4.21875 C 2.71875 -3.484375 3.015625 -2.796875 3.421875 -2.171875 C 3.015625 -1.53125 2.71875 -0.84375 2.5625 -0.125 L 2.5625 -0.09375 C 2.5625 -0.046875 2.59375 0 2.65625 0 L 2.6875 0 C 2.71875 0 2.765625 -0.03125 2.765625 -0.0625 C 3.046875 -0.828125 3.484375 -1.53125 4.078125 -2.09375 C 4.09375 -2.109375 4.09375 -2.140625 4.09375 -2.171875 Z M 2.5625 -2.171875 C 2.5625 -2.203125 2.5625 -2.21875 2.53125 -2.25 C 1.953125 -2.8125 1.515625 -3.5 1.234375 -4.265625 C 1.234375 -4.3125 1.1875 -4.328125 1.140625 -4.328125 L 1.125 -4.328125 C 1.0625 -4.328125 1.015625 -4.28125 1.015625 -4.234375 C 1.015625 -4.21875 1.015625 -4.21875 1.015625 -4.21875 C 1.1875 -3.484375 1.484375 -2.796875 1.890625 -2.171875 C 1.484375 -1.53125 1.1875 -0.84375 1.015625 -0.125 L 1.015625 -0.09375 C 1.015625 -0.046875 1.0625 0 1.125 0 L 1.140625 0 C 1.1875 0 1.234375 -0.03125 1.234375 -0.0625 C 1.515625 -0.828125 1.953125 -1.53125 2.53125 -2.09375 C 2.5625 -2.109375 2.5625 -2.140625 2.5625 -2.171875 Z M 2.5625 -2.171875 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<symbol overflow="visible" id="glyph4-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<symbol overflow="visible" id="glyph4-1">
<path style="stroke:none;" d="M 6.390625 -2.25 C 6.390625 -2.4375 6.21875 -2.4375 6.078125 -2.4375 L 1.078125 -2.4375 C 0.953125 -2.4375 0.765625 -2.4375 0.765625 -2.25 C 0.765625 -2.046875 0.9375 -2.046875 1.078125 -2.046875 L 6.078125 -2.046875 C 6.203125 -2.046875 6.390625 -2.046875 6.390625 -2.25 Z M 6.390625 -2.25 "/>
</symbol>
<symbol overflow="visible" id="glyph4-0">
<symbol overflow="visible" id="glyph5-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph4-1">
<symbol overflow="visible" id="glyph5-1">
<path style="stroke:none;" d="M 8.046875 -6.015625 C 8.046875 -6.078125 7.984375 -6.125 7.921875 -6.125 C 7.71875 -6.125 7.21875 -6.09375 7.015625 -6.09375 L 6.5625 -6.109375 C 6.421875 -6.109375 6.234375 -6.125 6.09375 -6.125 C 6.0625 -6.125 5.9375 -6.125 5.9375 -5.96875 C 5.9375 -5.84375 6.046875 -5.84375 6.09375 -5.84375 C 6.4375 -5.84375 6.703125 -5.765625 6.703125 -5.46875 C 6.703125 -5.421875 6.671875 -5.28125 6.671875 -5.28125 L 5.671875 -1.296875 L 3.609375 -5.953125 C 3.53125 -6.109375 3.53125 -6.125 3.3125 -6.125 L 2.125 -6.125 C 1.953125 -6.125 1.859375 -6.125 1.859375 -5.96875 C 1.859375 -5.84375 1.953125 -5.84375 2.125 -5.84375 C 2.171875 -5.84375 2.5 -5.84375 2.71875 -5.796875 L 1.5 -0.953125 C 1.40625 -0.515625 1.171875 -0.3125 0.546875 -0.28125 C 0.515625 -0.28125 0.390625 -0.265625 0.390625 -0.109375 C 0.390625 -0.109375 0.390625 0 0.515625 0 C 0.625 0 0.859375 -0.015625 0.96875 -0.015625 C 1.109375 -0.03125 1.125 -0.03125 1.421875 -0.03125 L 1.875 -0.015625 C 2.015625 -0.015625 2.203125 0 2.34375 0 C 2.390625 0 2.5 0 2.5 -0.15625 C 2.5 -0.265625 2.40625 -0.28125 2.328125 -0.28125 C 1.90625 -0.28125 1.734375 -0.421875 1.734375 -0.65625 C 1.734375 -0.71875 1.75 -0.734375 1.78125 -0.859375 L 2.953125 -5.59375 L 5.359375 -0.15625 C 5.421875 -0.015625 5.421875 0 5.515625 0 C 5.625 0 5.640625 -0.03125 5.671875 -0.1875 L 6.921875 -5.15625 C 7.015625 -5.53125 7.1875 -5.828125 7.890625 -5.84375 C 7.9375 -5.84375 8.046875 -5.859375 8.046875 -6.015625 Z M 8.046875 -6.015625 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 3 0 L 313.039062 0 L 313.039062 151.046875 L 3 151.046875 Z M 3 0 "/>
<path d="M 3 0 L 313 0 L 313 136.605469 L 3 136.605469 Z M 3 0 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 3 24 L 118 24 L 118 151.046875 L 3 151.046875 Z M 3 24 "/>
<path d="M 3 0 L 313.039062 0 L 313.039062 136.605469 L 3 136.605469 Z M 3 0 "/>
</clipPath>
<clipPath id="clip3">
<path d="M 3 25 L 118 25 L 118 136.605469 L 3 136.605469 Z M 3 25 "/>
</clipPath>
<clipPath id="clip4">
<path d="M 3 24 L 118 24 L 118 136.605469 L 3 136.605469 Z M 3 24 "/>
</clipPath>
<clipPath id="clip5">
<path d="M 11 123 L 54 123 L 54 136.605469 L 11 136.605469 Z M 11 123 "/>
</clipPath>
<clipPath id="clip6">
<path d="M 10 123 L 54 123 L 54 136.605469 L 10 136.605469 Z M 10 123 "/>
</clipPath>
<clipPath id="clip7">
<path d="M 68 123 L 111 123 L 111 136.605469 L 68 136.605469 Z M 68 123 "/>
</clipPath>
<clipPath id="clip8">
<path d="M 67 123 L 111 123 L 111 136.605469 L 67 136.605469 Z M 67 123 "/>
</clipPath>
<clipPath id="clip9">
<path d="M 151 123 L 216 123 L 216 136.605469 L 151 136.605469 Z M 151 123 "/>
</clipPath>
<clipPath id="clip10">
<path d="M 151 123 L 217 123 L 217 136.605469 L 151 136.605469 Z M 151 123 "/>
</clipPath>
<clipPath id="clip11">
<path d="M 230 123 L 313 123 L 313 136.605469 L 230 136.605469 Z M 230 123 "/>
</clipPath>
</defs>
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(56.498718%,93.199158%,56.498718%);fill-opacity:1;" d="M 3.835938 0.199219 L 3.835938 150.851562 L 312.839844 150.851562 L 312.839844 0.199219 Z M 3.835938 0.199219 "/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -138.163062 -0.00021875 L -138.163062 -150.652562 L 170.840844 -150.652562 L 170.840844 -0.00021875 Z M -138.163062 -0.00021875 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(56.498718%,93.199158%,56.498718%);fill-opacity:1;" d="M 3.835938 0.199219 L 3.835938 136.21875 L 312.839844 136.21875 L 312.839844 0.199219 Z M 3.835938 0.199219 "/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(67.999268%,84.799194%,89.99939%);fill-opacity:1;" d="M 3.835938 25.164062 L 3.835938 150.851562 L 117.785156 150.851562 L 117.785156 25.164062 Z M 3.835938 25.164062 "/>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -138.163062 -24.965062 L -138.163062 -150.652562 L -24.213844 -150.652562 L -24.213844 -24.965062 Z M -138.163062 -24.965062 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -138.163062 -0.00021875 L -138.163062 -136.01975 L 170.840844 -136.01975 L 170.840844 -0.00021875 Z M -138.163062 -0.00021875 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
</g>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(67.999268%,84.799194%,89.99939%);fill-opacity:1;" d="M 3.835938 25.164062 L 3.835938 136.40625 L 117.785156 136.40625 L 117.785156 25.164062 Z M 3.835938 25.164062 "/>
</g>
<g clip-path="url(#clip4)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -138.163062 -24.965063 L -138.163062 -136.20725 L -24.213844 -136.20725 L -24.213844 -24.965063 Z M -138.163062 -24.965063 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
</g>
<path style="fill:none;stroke-width:0.398;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00146875 -0.00028125 L 3.138188 -0.00028125 " transform="matrix(1,0,0,-1,107.479,9.488)"/>
<path style="fill:none;stroke-width:0.398;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00109375 -0.00028125 L 3.137812 -0.00028125 " transform="matrix(1,0,0,-1,111.245,9.488)"/>
......@@ -172,166 +212,183 @@
<use xlink:href="#glyph0-11" x="103.805205" y="34.65"/>
<use xlink:href="#glyph0-7" x="109.03557" y="34.65"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -97.584937 -73.433812 L -64.791969 -73.433812 L -64.791969 -53.508031 L -97.584937 -53.508031 Z M -97.584937 -73.433812 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -97.584937 -66.117406 L -64.791969 -66.117406 L -64.791969 -53.508031 L -97.584937 -53.508031 Z M -97.584937 -66.117406 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="47.736" y="66.654"/>
<use xlink:href="#glyph0-16" x="52.966365" y="66.654"/>
<use xlink:href="#glyph0-14" x="58.19673" y="66.654"/>
<use xlink:href="#glyph0-2" x="63.427095" y="66.654"/>
<use xlink:href="#glyph0-3" x="68.65746" y="66.654"/>
<use xlink:href="#glyph0-5" x="47.736" y="62.996"/>
<use xlink:href="#glyph0-16" x="52.966365" y="62.996"/>
<use xlink:href="#glyph0-14" x="58.19673" y="62.996"/>
<use xlink:href="#glyph0-2" x="63.427095" y="62.996"/>
<use xlink:href="#glyph0-3" x="68.65746" y="62.996"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -78.374 -59.6135 L -50.8115 -59.6135 L -50.8115 -47.004125 L -78.374 -47.004125 Z M -78.374 -59.6135 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -75.999 -57.992406 L -53.1865 -57.992406 L -53.1865 -48.629125 L -75.999 -48.629125 Z M -75.999 -57.992406 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="66.947" y="56.492"/>
<use xlink:href="#glyph0-16" x="72.177365" y="56.492"/>
<use xlink:href="#glyph0-17" x="77.40773" y="56.492"/>
<use xlink:href="#glyph0-18" x="82.638095" y="56.492"/>
<use xlink:href="#glyph1-1" x="67.993" y="56.198"/>
<use xlink:href="#glyph1-2" x="72.70036" y="56.198"/>
<use xlink:href="#glyph1-3" x="77.40772" y="56.198"/>
<use xlink:href="#glyph1-4" x="82.11508" y="56.198"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 56.946313 -73.433812 L 105.430688 -73.433812 L 105.430688 -53.508031 L 56.946313 -53.508031 Z M 56.946313 -73.433812 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 56.946313 -66.117406 L 105.430688 -66.117406 L 105.430688 -53.508031 L 56.946313 -53.508031 Z M 56.946313 -66.117406 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="202.265" y="66.654"/>
<use xlink:href="#glyph0-16" x="207.495365" y="66.654"/>
<use xlink:href="#glyph0-14" x="212.72573" y="66.654"/>
<use xlink:href="#glyph0-2" x="217.956095" y="66.654"/>
<use xlink:href="#glyph0-3" x="223.18646" y="66.654"/>
<use xlink:href="#glyph0-8" x="228.416825" y="66.654"/>
<use xlink:href="#glyph0-7" x="233.64719" y="66.654"/>
<use xlink:href="#glyph0-9" x="238.877555" y="66.654"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 91.848656 -59.6135 L 119.411156 -59.6135 L 119.411156 -47.004125 L 91.848656 -47.004125 Z M 91.848656 -59.6135 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<use xlink:href="#glyph0-5" x="202.265" y="62.996"/>
<use xlink:href="#glyph0-16" x="207.495365" y="62.996"/>
<use xlink:href="#glyph0-14" x="212.72573" y="62.996"/>
<use xlink:href="#glyph0-2" x="217.956095" y="62.996"/>
<use xlink:href="#glyph0-3" x="223.18646" y="62.996"/>
<use xlink:href="#glyph0-8" x="228.416825" y="62.996"/>
<use xlink:href="#glyph0-7" x="233.64719" y="62.996"/>
<use xlink:href="#glyph0-9" x="238.877555" y="62.996"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 94.223656 -57.992406 L 117.036156 -57.992406 L 117.036156 -48.629125 L 94.223656 -48.629125 Z M 94.223656 -57.992406 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="237.167" y="56.492"/>
<use xlink:href="#glyph0-16" x="242.397365" y="56.492"/>
<use xlink:href="#glyph0-17" x="247.62773" y="56.492"/>
<use xlink:href="#glyph0-18" x="252.858095" y="56.492"/>
<use xlink:href="#glyph1-1" x="238.213" y="56.198"/>
<use xlink:href="#glyph1-2" x="242.92036" y="56.198"/>
<use xlink:href="#glyph1-3" x="247.62772" y="56.198"/>
<use xlink:href="#glyph1-4" x="252.33508" y="56.198"/>
</g>
<g clip-path="url(#clip5)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;" d="M 11.003906 136.019531 L 53.523438 136.019531 L 53.523438 123.410156 L 11.003906 123.410156 Z M 11.003906 136.019531 "/>
</g>
<g clip-path="url(#clip6)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -130.995094 -135.820531 L -88.475562 -135.820531 L -88.475562 -123.211156 L -130.995094 -123.211156 Z M -130.995094 -135.820531 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -130.995094 -150.453344 L -88.475562 -150.453344 L -88.475562 -130.527562 L -130.995094 -130.527562 Z M -130.995094 -150.453344 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="24.421" y="143.671"/>
<use xlink:href="#glyph0-2" x="29.651365" y="143.671"/>
<use xlink:href="#glyph0-3" x="34.88173" y="143.671"/>
<use xlink:href="#glyph0-1" x="24.421" y="132.697"/>
<use xlink:href="#glyph0-2" x="29.651365" y="132.697"/>
<use xlink:href="#glyph0-3" x="34.88173" y="132.697"/>
</g>
<g clip-path="url(#clip7)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;" d="M 68.097656 136.207031 L 110.617188 136.207031 L 110.617188 123.410156 L 68.097656 123.410156 Z M 68.097656 136.207031 "/>
</g>
<g clip-path="url(#clip8)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -73.901344 -136.008031 L -31.381812 -136.008031 L -31.381812 -123.211156 L -73.901344 -123.211156 Z M -73.901344 -136.008031 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,87.998962%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -73.901344 -150.453344 L -31.381812 -150.453344 L -31.381812 -130.527562 L -73.901344 -130.527562 Z M -73.901344 -150.453344 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-14" x="75.417" y="143.766"/>
<use xlink:href="#glyph0-2" x="80.647365" y="143.766"/>
<use xlink:href="#glyph0-3" x="85.87773" y="143.766"/>
<use xlink:href="#glyph0-14" x="75.417" y="132.886"/>
<use xlink:href="#glyph0-2" x="80.647365" y="132.886"/>
<use xlink:href="#glyph0-3" x="85.87773" y="132.886"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="91.108" y="143.766"/>
<use xlink:href="#glyph2-1" x="91.108" y="132.886"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-16" x="98.068" y="143.766"/>
<use xlink:href="#glyph0-16" x="98.068" y="132.886"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -105.971656 -130.328344 L -86.545875 -77.933812 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.763072 0.000705187 C 3.300924 0.112593 1.269299 0.750519 -0.000612815 1.445926 L 0.0018036 -1.447869 C 1.268694 -0.753279 3.300996 -0.112292 3.763072 0.000705187 Z M 3.763072 0.000705187 " transform="matrix(0.3477,-0.93787,-0.93787,-0.3477,55.45396,78.13108)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -56.40525 -130.328344 L -75.831031 -77.933812 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.762977 -0.000961801 C 3.300901 0.112035 1.268599 0.753022 0.00170847 1.447612 L -0.000707951 -1.446183 C 1.269204 -0.750775 3.300829 -0.11285 3.762977 -0.000961801 Z M 3.762977 -0.000961801 " transform="matrix(-0.3477,-0.93787,-0.93787,0.3477,66.16686,78.13108)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -107.069312 -123.011938 L -85.59275 -70.574438 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.75947 -0.000092812 C 3.30015 0.114698 1.268374 0.750839 -0.001139 1.446753 L 0.00170365 -1.44663 C 1.269163 -0.750805 3.300572 -0.112318 3.75947 -0.000092812 Z M 3.75947 -0.000092812 " transform="matrix(0.38028,-0.92847,-0.92847,-0.38028,56.4062,70.77177)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.338844 -123.011938 L -76.788062 -70.574438 " transform="matrix(1,0,0,-1,141.999,0.199)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.759633 0.000491639 C 3.300597 0.112526 1.26851 0.750197 0.000490294 1.445568 L -0.00101807 -1.448362 C 1.268414 -0.751731 3.300279 -0.114533 3.759633 0.000491639 Z M 3.759633 0.000491639 " transform="matrix(-0.37978,-0.92847,-0.92847,0.37978,65.20954,70.77177)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="3.32" y="119.088"/>
<use xlink:href="#glyph2-2" x="8.439814" y="119.088"/>
<use xlink:href="#glyph2-3" x="13.559629" y="119.088"/>
<use xlink:href="#glyph2-4" x="18.679443" y="119.088"/>
<use xlink:href="#glyph2-5" x="21.23935" y="119.088"/>