Add initial documentation #255

Merged
cmo merged 8 commits from improve-doc into master 2026-07-16 07:44:00 +00:00
20 changed files with 3898 additions and 941 deletions

View file

@ -44,16 +44,6 @@
tags that are defined in the server-configuration (the default is False). tags that are defined in the server-configuration (the default is False).
# 6.3.0 (2026-06-29)
## Changes
- Automated annotation adding in write-record-endpoints has been removed.
The new query parameter `add_submission_tag` is added to write-record-endpoints.
If set to True, the server will add an automated annotation with the annotation
tags that are defined in the server-configuration (the default is False).
# 6.2.2 (2026-06-26) # 6.2.2 (2026-06-26)
## Bugfixes ## Bugfixes

944
README.md
View file

@ -2,7 +2,25 @@
[![PyPI version fury.io](https://badge.fury.io/py/dump-things-service.svg)](https://pypi.python.org/pypi/dump-things-service/) [![PyPI version fury.io](https://badge.fury.io/py/dump-things-service.svg)](https://pypi.python.org/pypi/dump-things-service/)
This is an implementation of a service that allows to store and retrieve data that is structured according to given schemata. This is an implementation of a *Dump Things Service* (DTS). The Dump Things Service
is a central component of a self-hostable research information infrastructure, which
contains tools to collect, organize, validate, visualize, and serve structured research (meta)data.
It provides a REST API for storing and retrieving records that are structured
according to a schema (defined in LinkML). The service supports multiple storage
backends, flexible authentication sources, and a curation workflow for distributed
data acquisition.
It is complemented by a client library and command line tool, which provide convenient
access to the service from Python code and the shell
[dump-things-pyclient](https://pypi.org/project/dump-things-pyclient/).
Dump Things Service serves as backend for [shacl-vue](https://www.psychoinformatics.de/instruments/shacl-vue),
a generic graphical metadata acquisition tool.
For more information on the service, see the [documentation](https://dump-things-service.readthedocs.io/).
### Overview of the service architecture
Data is stored in **collections**. Data is stored in **collections**.
Each collection has a name and an associated schema. Each collection has a name and an associated schema.
@ -13,932 +31,10 @@ The service supports schemas that are based on Datalad's *Thing* schema, i.e. on
It assumes that the classes of stored records are subclasses of `Thing`, and inherit the properties `pid` and `schema_type` from the `Thing`-baseclass. It assumes that the classes of stored records are subclasses of `Thing`, and inherit the properties `pid` and `schema_type` from the `Thing`-baseclass.
The general workflow in the service is as follows. The general workflow in the service is as follows.
We distinguish between two areas of a collection, an **incoming** area and a **curated** area. We distinguish between two areas of a collection, an **incoming** area (aka inbox) and a **curated** area.
Data written to a collection is stored in a collection-specific **incoming** area. Data written to a collection is stored in a collection-specific **incoming** area.
A curation process, which is outside the scope of the service, moves data from the incoming area of a collection to the **curated** area of the collection. A curation process, which is outside the scope of the service, moves data from the incoming area of a collection to the **curated** area of the collection.
To submit a record to a collection, a token is required.
The token defines read- and write- permissions for the incoming areas of collections and read-permissions for the curated area of a collection.
A token can carry permissions for multiple collections.
In addition, the token carries a submitter ID.
It also defines a token specific **zone** in the incoming area.
So any read- and write-operations on an incoming area are actually restricted to the token-specific zone in the incoming area.
Multiple tokens can share the same zone.
That allows multiple submitters to work together when storing records in the service.
The service provides an HTTP-based API to store and retrieve data objects, and to verify token capabilities.
### Installing the service
The service is available via `pypi`, and can be installed by `pip`.
Execute the command `pip install dump-things-service` to install the service.
### Running the service
After installation the service can be started via the command `dump-things-service`.
The basic service configuration is done via command line parameters and configuration files.
The following command line parameters are supported:
- `<storage root>`: (mandatory) the path of a directory that serves as anchor for all relative paths given in the configuration files. Unless `-c/--config` is provided, the service will search the configuration file in `<storage root>/.dumpthings.yaml`.
- `--host <IP-address>`: The IP-address on which the service should accept connections (default: `0.0.0.0`).
- `--port <port>`: The port on which the service should accept connections (default: `8000`).
- `-c/--config <config-file>`: provide a path to a configuration file (configuration file version 1).
If no dynamically managed configuration is found in the data store, the dynamically managed configuration and the service state will be initialized with the content of the configuration file.
This allows an easy transition from dump-things-servers of version 5 and lower to version 6.
- `--origins <origin>`: add a CORS origin hosts (repeat to add multiple CORS origin URLs).`
- `--root-path <path>`: Set the ASGI 'root_path' for applications submounted below a given URL path.
- `--log-level`: set the log level for the service, allowed values are `ERROR`, `WARNING`, `INFO`, `DEBUG`. The default-level is `WARNING`.
- `--admin-token-hash <shs256 hash as 64-digit hexnumber>`: set an administrator token hash.
The plaintext token can be used to create and delete collections, tokens, and admin tokens.
This is useful to configure the service if no admin token was yet created.
**NOTE**: an admin token in plaintext is read from the environment variable `DTS_ADMIN_TOKEN` if it is set and this option is not provided.
```bash
dump-things-service /data-storage/store --host 127.0.0.1 --port 8000
```
The above command runs the service on the network location `127.0.0.1:8000` and provides access to the store under `/data-storage/store`.
### Configuration file
The service provides the tool `dump-things-upload-config` which can load configurations from a file and manifest those configurations on a running service via the administration endpoints.
A configuration defines collections, paths for incoming and curated data for each collection, as well as token properties.
Token properties include a submitter identification and for each collection an incoming zone specifier, permissions for reading and writing of the incoming zone and permission for reading the curated data of the collection.
A "formal" definition of the configuration file is provided by the class `Configuration` in the file `dumpthings-server/abstract_config.py`.
Configurations are read in YAML format. The following is an example configuration file (version 6 and higher) that illustrates all options:
```yaml
type: collections # has to be "collections"
version: 2 # has to be 2
# All collections are listed in "collections"
collections:
# The following entry defines the collection "personal_records"
personal_records:
# The token, as defined below, that is used if no token is provided by a client.
# All tokens that are provided by the client will be OR-ed with the default token.
# That means all permissions in the default token will be added to the client provided
# token. In this way the default token will always be less or equally powerful as the
# client provided token.
default_token: no_access
# The schema that is used by the collection
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
# The path to the curated data of the collection. This path should contain the
# ".dumpthings.yaml"-configuration for collections that is described
# here: <https://concepts.datalad.org/dump-things-storage-v0/>.
# A relative path is interpreted relative to the storage root, which is provided on
# service start. An absolute path is interpreted as an absolute path.
curated: curated/personal_records
# The path to the incoming data of the collection.
# Different collections should have different curated- and incoming-paths
incoming: /tmp/personal_records/incoming
# Optionally a list of classes that should receive store- or validate-endpoints,
# if this list is present, all other classes defined in the schema will be ignored,
# i.e., they will not receive store- and validation-endpoints. The classes listed
# here must be in the schema.
use_classes:
- Organization
- Person
- Project
- Agent
# Optionally a list of classes that will be ignored when store- or validate-endpoints
# are created. If `use_classes` is present, the entries of this list will further reduce
# the classes that will receive endpoints. If `use_classes` is not present, the entries
# of this list will reduce the classes from the schema that will receive endpoints.
# The classes listed here must be listed in `use_classes` if that is defined. If
# `use_classes` is not defined, they must be listed in the schema.
ignore_classes:
- Person
- Project
# The following entry defines the collection "rooms_and_buildings"
rooms_and_buildings:
default_token: basic_access
curated: curated/rooms_and_buildings
incoming: incoming/rooms_and_buildings
# The following entry defines the collection "fixed_data", which does not
# support data uploading, because there is no token that allows uploads to
# "fixed_data".
fixed_data:
default_token: basic_access
# If not upload is supported, the "incoming"-entry is not necessary.
curated: curated/fixed_data_curated
# All tokens are listed in "tokens"
tokens:
# The following entry defines the token "basic_access".
basic_access:
# The representation of the token, this is the value that the user has to
# provide in the `x-dumpthings-token`-header to authenticate with this token.
representation: anonymous
# If hashed is `True`, the representation must be a 40-hexdigit number,
# representing the hash of the plain token. Setting `hashed` to `True` ensures
# that the plain-text token is not stored in the configuration store of the
# running server.
#
# The tool `dump-things-hash-token` can be used to calculate the correct hash.
hashed: False
# The value of "user_id" will be added as an annotation to each record that is
# uploaded with this token.
user_id: anonymous_user
# The collections for which the token holds rights are defined in "collections"
collections:
# The rights that "basic_access" carries for the collection "rooms_and_buildings"
# are defined here.
rooms_and_buildings:
# Access modes are defined here:
# <https://github.com/christian-monch/dump-things-server/issues/67#issuecomment-2834900042>
mode: READ_CURATED
# A token and collection-specific label, that defines "zones" in which incoming
# records are stored. Multiple tokens can share the same zone, for example if
# many clients with individual tokens work together to build a collection.
# (Since this token does not allow write access, "incoming_label" is ignored. It
# is set to an empty string here in order to document it, but it could as well
# be omitted)
incoming_label: ''
# The rights that "basic_access" carries for the collection "fixed_data"
# are defined here.
fixed_data:
mode: READ_CURATED
incoming_label: ''
# The following entry defines the token "no_access". This token does not allow
# any access and is used as a default token for the collection "personal_records".
no_access:
representation: no_access
user_id: nobody
collections:
personal_records:
mode: NOTHING
incoming_label: ''
# The following entry defines a token with the name "admin_token" and the plain
# representation: "admin". It gives full access rights to the collection "personal_records".
admin_token:
representation: admin
user_id: Admin
collections:
personal_records:
mode: WRITE_COLLECTION
incoming_label: 'admin_posted_records'
# The following entry defines the token "contributor_bob". It gives full access
# to "rooms_and_buildings" for a user with the id "Bob".
contributor_bob:
representation: bob
user_id: Bob
collections:
rooms_and_buildings:
mode: WRITE_COLLECTION
incoming_label: new_rooms_and_buildings
# The following entry defines the token "contributor_alice". It gives full access
# to "rooms_and_buildings" for a user with the id "Alice". Bob and Alice share the
# same incoming-zone, i.e. "new_rooms_and_buildings". That means they can read
# incoming records that the other one posted.
contributor_alice:
representation: alice
user_id: Alice
collections:
rooms_and_buildings:
mode: WRITE_COLLECTION
incoming_label: new_rooms_and_buildings
# The following entry defines a hashed token because the key `hashed` is set
# to `True`. A hashed token representation is the hex-digit representation of
# the sha-256 checksum of the plain token.
# In this example, if the client presents the token `hello`, he will be
# granted access because `dump-things-hash-token 'hello'` yields
# `90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b`, i.e.
# sha256('hello') == 90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b
# is true.
hashed_token_1:
representation: 90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b
hashed: True
user_id: Walter
collections:
rooms_and_buildings:
mode: WRITE_COLLECTION
incoming_label: bob
#
```
#### Backends
The service currently supports the following backends for storing records:
- `record_dir`: this backend stores records as YAML-files in a directory structure that is defined [here](https://concepts.datalad.org/dump-things-storage-v0/). It reads the backend configuration from a "record collection configuration file" as described [here](https://concepts.datalad.org/dump-things-storage-v0/).
- `sqlite`: this backend stores records in a SQLite database. There is an individual database file, named `__sqlite-records.db`, for each curated area and incoming area.
- `record_dir+stl`: here `stl` stands for "schema-type-layer".
This backend stores records in the same format as `record_dir`, but adds special treatment for the `schema_type` attribute in records.
It removes `schema_type`-attributes from the top-level mapping of a record before storing it as YAML-file. When records are read from this backend, a `schema_type` attribute is added back into the record, using a schema to determine the correct class-URI.
In other words, all records stored with this backend will have no `schema_type`-attribute in the top-level, and all records read with this backend will have a `schema_type` attribute in the top-level.
- `sqlite+stl`: This backend stores records in the same format as `sqlite`, but adds the same special treatment for the `schema_type` attribute as `record_dir+stl`.
Backends can be defined per collection in the configuration file.
The backend will be used for the curated area and for the incoming areas of the collection.
If no backend is defined for a collection, the `record_dir+stl`-backend is used by default.
The `+stl`-backends can be useful if an endpoint returns records of multiple classes, because it allows clients to determine the class of each result record.
The service guarantees that backends of all types can co-exist independently in the same directory, i.e., there are no name collisions in files that are used for different backends (as long as no class name starts with `.` or `_`).
The following configuration snippet shows how to define a backend for a collection:
```yaml
...
collections:
collection_with_default_record_dir+stl_backend:
# This is a collection with the default backend, i.e. `record_dir+stl` and
# the default authentication, i.e. config-based authentication.
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
default_token: anon_read
curated: collection_1/curated
collection_with_forgejo_authentication_source:
# This is a collection with the default backend, i.e. `record_dir+stl` and
# a forgejo-based authentication source. That means it will use a forgejo
# instance to determine the permissions of a token for this collection.
# The instance is also used to determine the user-id and the incoming label.
# In the case of forgejo, the user-id and the incoming label are the
# forgejo login associated with the token.
# We still need the name of a default token. If the token is defined in this
# config file, its properties will be determined by the
# config file. If the token is not defined in the config file, its
# properties will be determined by the authentication sources. In this
# example by the forgejo-instance at `https://forgejo.example.com`.
# If there is more than one authentication source, they will be tried
# in the order they are defined in the config file.
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
default_token: anon_read # We still need a default token
curated: collection_2/curated
# Token permissions, user-ids (for record annotations), and incoming
# label can be determined by multiple authentication sources.
# If no source is defined, `config` will be used, which reads token
# information from the config file.
# This example explicitly defines `config` and a second authentication
# source, a `forgejo` authentication source.
auth_sources:
- type: forgejo # requires `user`-read and `organization`-read permissions on token
# The API-URL of the forgejo instance that should be used
url: https://forgejo.example.com/api/v1
# An organization
organization: data_handling
# A team in the organization. The authorization of the team
# determines the permissions of the token
team: data_entry_personal
# `label_type` determines how an incoming label is created for
# a Forgejo token. If `label_type` is `team`, the incoming label
# will be `forgejo-team-<organization>-<team>`. If `label_type`
# is `user`, the incoming label will be
# `forgejo-user-<user-login>`
label_type: team
# An optional instance id. This is used to disambiguate identical
# user IDs on different Forgejo instances. If not set, a hash of
# `url` will be used instead.
instance_id: forgejo-server-1
# An optional repository. The token will only be authorized
# if the team has access to the repository. Note: if `repository`
# is set, the token must have at least repository read
# permissions.
repository: reference-repository
# Fallback to the config file.
- type: config # check tokens from the configuration file
# Multiple authorization sources are allowed. They will be tried in the
# order defined in the config file. If an authorization source returns
# permissions for a token, those permissions will be used and no other
# authorization sources will be queried.
# The default authorization source is `config`, which reads the token
# permissions, user-id, and incoming from the config file.
collection_with_explicit_record_dir+stl_backend:
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
default_token: anon_read
curated: collection_3/curated
backend:
# The record_dir+stl backend is identified by the
# type: "record_dir+stl". No more attributes are
# defined for this backend.
type: record_dir+stl
collection_with_sqlite_backend:
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
default_token: anon_read
curated: collection_4/curated
backend:
# The sqlite-backend is identified by the
# type: "sqlite". It requires a schema attribute
# that holds the URL of the schema that should
# be used in this backend.
type: sqlite
```
#### Reserved names
The following collection names are reserved and must not be used:
- collections
- tokens
- admin_tokens
- __dump_things__
#### Authentication and authorization
To authenticate and authorize a user based on tokens, dumpthing-service uses
authentication sources. There are currently two authentication sources: the
configuration file and a Forgejo-based authentication source. Authentication
sources can be configured per collection. If no authentication source is
configured, the collection uses the configuration file.
If authentication sources are configured, they will be tried in order until
a token is authenticated. If an authentication source is listed twice, the
second instance will be ignored.
Authentication sources can be defined individually for each collection.
The collection-level key `auth_sources` should contain a list of authentication source configurations.
Authentication sources are tried in order until a token is successfully authenticated.
If no authentication source authenticates the token, the token will be rejected.
If no authentication source is defined, the configuration file will be used to authenticate tokens.
If an identical authentication source is defined multiple times, the first instance will be queried, all other instances will be ignored.
Authentication sources are identical if the content of their keys match.
If an identical authentication source is listed multiple time in the configuration, the service will issue a warning about `Ignoring duplicate authentication provider...`.
These authentication sources are available:
- config: use the configuration file to authenticate tokens
- forgejo: use a Forgejo-instance to authenticate tokens
All authentication source configurations contain the key `type`.
Additional keys are authentication source type-specific.
The following configuration snippet contains an example for authentication
source configuration:
```yaml
collections:
collection_with_config_and_forgejo_auth_sources:
# Token permissions, user-ids (for record annotations), and incoming
# label can be determined by multiple authentication sources.
# If no source is defined, `config` will be used, which reads token
# information from the config file.
# This example explicitly defines `config` and a second authentication
# source, a `forgejo` authentication source.
auth_sources:
- type: forgejo # requires `user`-read and `organization`-read permissions on token
# The API-URL of the forgejo instance that should be used
url: https://forgejo.example.com/api/v1
# An organization
organization: data_handling
# A team in the organization. The authorization of the team
# determines the permissions of the token
team: data_entry_personal
# `label_type` determines how an incoming label is created for
# a Forgejo token. If `label_type` is `team`, the incoming label
# will be `forgejo-team-<organization>-<team>`. If `label_type`
# is `user`, the incoming label will be
# `forgejo-user-<user-login>`
label_type: team
# An optional repository. The token will only be authorized
# if the team has access to the repository. Note: if `repository`
# is set, the token must have at least repository read
# permissions.
repository: reference-repository
# Fallback to the config file.
- type: config # check tokens from the configuration file
# Multiple authorization sources are allowed. They will be tried in the
# order defined in `auth_sources`. If an authorization source returns
# permissions for a token, those permissions will be used and no other
# authorization sources will be queried.
# The default authorization source is `config`, which reads the token
# permissions, user-id, and incoming from the config file.
...
```
##### Config-based authentication
```yaml
collections:
collection_with_config_authentication:
default_token: anon_read
curated: collection_5/curated
auth_sources:
- type: <must be 'config'> # check tokens from the configuration file
...
```
The configuration file will be used to authenticate tokens
##### Forgejo-based authentication
```yaml
collections:
collection_with_forgejo_authentication:
default_token: anon_read
curated: collection_5/curated
auth_sources:
- type: <must be 'forgejo'>
url: <Forgejo API-URL>
organization: <organization name>
team: <team_name>
label_type: <'team' or 'user'>
repository: <repository name> # Optional
...
```
The defined Forgejo-instance will be used to authenticate a token
The user ID is the email of the user.
If `label_type` is set to `team`, the incoming label is `forgejo-team-<organization-name>-<team-name>`.
If `label_type` is set to `user`, the incoming label is `forgejo-user-<user-login>`
The permissions will be fetched from the units `repo.code` and `repo.actions` of the team definition.
The following mapping is used:
| `repo.code` | curated_read | incoming_read | incoming_write | curated_right | zones_access |
|-------------|--------------|---------------|----------------|---------------|--------------|
| `none` | `False` | `False` | `False` | `False` | `False` |
| `read` | `True` | `True` | `False` | `False` | `False` |
| `write` | `True` | `True` | `True` | `False` | `False` |
| `repo.actions` | curated_read | incoming_read | incoming_write | curated_right | zones_access |
|----------------|--------------|---------------|----------------|---------------|--------------|
| `none` | `False` | `False` | `False` | `False` | `False` |
| `read` | `False` | `False` | `False` | `False` | `False` |
| `write` | `True` | `True` | `True` | `True` | `True` |
A Forgejo authentication source can authenticate Forgejo-tokens that have at least the following `Read`-permissions:
- User: this is required to determine user-related information, i.e. user-email and user login name.
- Organization: this is required to determine the membership of a user to a team in an organization.
- (Only if `repository` is set in the configuration) Repository : required to determine a team's access to the repository.
#### Submission annotation tag
The service annotates submitted records with a submitter id and a timestamp.
Annotations consist of an annotation tag, defining the class of the annotation, and an annotation value.
By default the service will use the class `http://purl.obolibrary.org/obo/NCIT_C54269` for the submitter id and the class `http://semanticscience.org/resource/SIO_001083` for submission time.
(Both tags will be converted into CURIEs if the schema of the collection defines an appropriate prefix.)
The default annotation tag classes can be overridden in the configuration on a per collection basis.
To override the defaults tags, add a `submission_tags`-attribute to a collection definition.
The `submission_tags`-attribute should contain a mapping that maps either `submitter_id_tag`, or `submitter_time_tag` or both to an IRI or a CURIE.
If the schema defines a matching prefix, IRIs are automatically converted to CURIEs before storing the record.
If a tag is given as a CURIE, the service validates that the prefix of the CURIE is defined in the schema of the collection.
```yaml
type: collections
version: 1
collections:
collection_1:
default_token: basic_access
curated: curated
incoming: contributions
submission_tags:
submitter_id_tag: schema:user_id
submission_time_tag: schema:time
...
```
#### Audit Backends
The service supports audit-logs of changes that are made via the curation interface.
Audit logs are configured per collection via the key `audit-backends`.
The key expects a list of audit-backend configurations.
Currently the only supported audit-backend type is `gitaudit`:
```yaml
type: collections
version: 1
collections:
collection_1:
...
audit_backends:
- type: gitaudit
path: <path to directory>
auto_flush_timeout: <seconds>
...
```
Here `<path to directory>` must be a path to a directory.
If the directory does not exist, it will be created.
If the directory exists, it should contain a bare git repository.
If `auto_flush_timeout` seconds have passed without adding new audit log entries, the current changeset is persisted, resulting in a commit.
The default value for `auto_flush_timeout` is 60 seconds. The value must not be lower than `1`.
The command `dump-things-gitaudit-report <path to directory> <PID-pattern>` can be used to show the audit-log for all PIDs that match the given `PID`-pattern (pattern are in python `re`-module syntax, i.e. use `'.*'` to report changes for all PIDs).
Each log entry contains the timestamp of the change, the ID of the curator that posted the change, a diff of the change, and the resulting record.
The command `dump-things-gitaudit-rebuild-index <path to directory>` can be used to rebuild an index for a git-audit backend.
Executing this command should not be necessary in normal operations because the backend will rebuild an index if it is instantiated on a directory that has no index.
The command mainly exists for maintenance purposes.
Note: currently the user ID of the curator will be stored as author in the audit-log entries.
The "original" author of a change is usually identified in the `annotations`-field of the record.
### Endpoints
Most endpoints require a *collection*. These correspond to the names of the "data record collection"-directories (for example `myschema-v3-fmta` in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/)) in the stores.
The service provides the following user endpoints (In addition to user endpoints, there exist endpoints for curators. To view them, check the `/docs`-path in an installed service):
- `POST /maintenance`: this endpoint allows to set a collection into maintenance mode.
In maintenance mode, only tokens with curator-privileges can access the collection.
The posted data is a JSON that contains the name of the collection and whether the maintenance state should be active or not, for example:
```json
{
"collection": "collection_1",
"active": true
}
```
- `POST /<collection>/record/<class>`: an object of type `<class>` (defined by the schema associated with `<collection>`) can be posted to this endpoint.
It will be stored in the incoming area for this collection and the user defined by the provided token.
In order to `POST` an object to the service, you MUST provide a valid token in the HTTP-header `X-DumpThings-Token` with write permissions.
The endpoint supports the query parameter `format`, to select the format of the posted data.
It can be set to `json` (the default) or to `ttl` (Terse RDF Triple Language, a.k.a. Turtle).
If the `json`-format is selected, the content-type should be `application/json`.
If the `ttl`-format is selected, the content-type should be `text/turtle`.
The service supports extraction of inlined records as described in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/).
On success, the endpoint will return a list of all stored records.
The list may contain more than one record if the posted object contains inlined records.
- `POST /<collection>/validate/record/<class>`: an object of type `<class>` (defined by the schema associated with `<collection>`) can be posted to this endpoint.
It will validate the posted data.
In order to `POST` an object to the service, you MUST provide a valid token in the HTTP-header `X-DumpThings-Token` with write permissions.
The endpoint supports the query parameter `format`, to select the format of the posted data.
It can be set to `json` (the default) or to `ttl` (Terse RDF Triple Language, a.k.a. Turtle).
If the `json`-format is selected, the content-type should be `application/json`.
If the `ttl`-format is selected, the content-type should be `text/turtle`.
The service supports extraction of inlined records as described in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/).
On success, the endpoint will return a list of all stored records.
The list may contain more than one record if the posted object contains inlined records.
- `GET /<collection>/records/<class>`: retrieve all readable objects from collection `<collection>` that are of type `<class>` or any of its subclasses.
Objects are readable if the default token or the token provided has the permission to read the objects in the collection.
Objects from incoming spaces will take precedence over objects from curated spaces, i.e. if there are two objects with identical `pid` in the curated space and in the incoming space, the object from the incoming space will be returned.
The endpoint supports the query parameter `format`, which determines the format of the query result.
It can be set to `json` (the default) or to `ttl`,
The endpoint supports the query parameter `matching`, which is interpreted by `sqlite`-backends and ignored by `record_dir`-backends.
If given, the endpoint will only return records for which the JSON-string representation matches the `matching` parameter.
Matching supports the wildcard character `%` which matches any characters.
For example, to search for `Alice` anywhere in the JSON-string representation of the record the matching parameter should be set to `%Alice%` or `%alice%` (matching is not case-sentitive).
The result is a list of JSON-records or ttl-strings, depending on the selected format.
- `GET /<collection>/records/p/<class>`: this endpoint (ending on `.../p/<class>`) provides the same functionality as the endpoint `GET /<collection>/records/<class>` (without `.../p/...`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
The `page`-parameter defines the page number to retrieve, starting with 1.
The `size`-parameter defines how many records should be returned per page.
If no `size`-parameter is given, the default value of 50 is used.
Each response will also contain the total number of records and the total number of pages in the result.
The response is a JSON object with the following structure:
```json
{
"items": [ <JSON-record or ttl-string> ],
"total": <total number of records in the result>,
"page": <current page number>,
"size": <number of records per page>,
"pages": <number of pages in the result>
}
```
- `GET /<collection>/record?pid=<pid>`: retrieve an object with the pid `<pid>` from the collection `<collection>` if the provided token allows reading. If the provided token allows reading of incoming and curated spaces, objects from incoming spaces will take precedence.
The endpoint supports the query parameter `format`, which determines the format of the query result.
It can be set to `json` (the default) or to `ttl`,
- `GET /server`: this endpoint provides information about the server.
The response is a JSON object with the following structure:
```json
{
"version": "<version of the server>",
"collections": [
{
"name": "collection_1",
"schema": "https://example.org/schema_1.yaml",
"classes": [
"Thing",
"Agent",
"InstantaneousEvent",
"Person"
]
},
{
"name": "collection_2",
"schema": "https://example.org/schema_2.yaml"
"classes": [
"Thing",
"AnnotationTag",
"Organization",
"Person"
]
}
]
}
```
- `GET /<collection>/records/`: retrieve all readable objects from collection `<collection>`.
Objects are readable if the default token or the token provided has the permission to read the objects in the collection.
Objects from incoming spaces will take precedence over objects from curated spaces, i.e. if there are two objects with identical `pid` in the curated space and in the incoming space, the object from the incoming space will be returned.
The endpoint supports the query parameter `format`, which determines the format of the query result.
It can be set to `json` (the default) or to `ttl`,
The endpoint supports the query parameter `matching`, which is interpreted by `sqlite`-backends and ignored by `record_dir`-backends.
If given, the endpoint will only return records for which the JSON-string representation matches the `matching` parameter.
The result is a list of JSON-records or ttl-strings, depending on the selected format.
- `GET /<collection>/records/p/`: this endpoint (ending on `.../p/`) provides the same functionality as the endpoint `GET /<collection>/records/` (without `.../p/`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
The `page`-parameter defines the page number to retrieve, starting with 1.
The `size`-parameter defines how many records should be returned per page.
If no `size`-parameter is given, the default value of 50 is used.
Each response will also contain the total number of records and the total number of pages in the result.
The response is a JSON object with the following structure:
```json
{
"items": [ <JSON-record or ttl-string> ],
"total": <total number of records in the result>,
"page": <current page number>,
"size": <number of records per page>,
"pages": <number of pages in the result>
}
```
- `DELETE /<collection>/record?pid=<pid>`: delete an object with the pid `<pid>` from the incoming area of the collection `<collection>` if the provided token allows writing to the incoming area.
The result is either `True` if the object was deleted or `False` if the object did not exists or was not deleted.
- `GET /docs`: provides information about the service's API, i.e. about all endpoints.
#### Curation endpoints
The service supports a set of curation endpoints that allows direct access to the curated area as well as the incoming areas.
A `CURATOR`-token required to access these endpoints.
Details about the curation endpoints can be found in [this issue](https://codeberg.org/datalink/dump-things-server/issues/118).
#### Administration endpoints
Operations on the endpoints described in this section require an administrator token.
If desired, use `dump-things-upload-config` to read the configuration from a file and
generate respective POST-requests. `dump-things-upload-config` can also be used to
generate a configuration from an old, i.e. dump-things version < 6, configuration file.
##### Collections
- `POST /collections`: create a new collection from the posted configuration object.
For a specification of the configuration object see the object `CollectionRequest` in the file `dump_things_service/collection_endpoints.py`
(Use `dump-things-upload-config` to read the configuration from a file and generate respective POST-requests)
- `GET /collections`: get information about the currently existing collections.
- `GET /collections/<collection-name>`: get information about the collection with name `<collection-name>`.
- `DELETE /collections/<collection-name>`: delete the collection with the given name.
Note: deleting a collection does not delete any records or any storage dir, it just removes the
collection from the internal state of the service. Recreating it (via `POST /collections`) will make
all data reachable again through the Web-API.
##### Tokens
- `POST /tokens`: create a new token from the posted configuration object.
For a specification of the configuration object see the object `TokenRequest` in the file `dump_things_service/token_endpoints.py`
NOTE: Before a token for configuration can be generated, the collection must exist.
- `GET /tokens`: get information about the currently existing tokens.
- `GET /tokens/<token-name>`: get information about the token with name `<token-name>`.
- `DELETE /tokens/<token-name>`: delete the token with the given name.
- this endpoint (ending on `.../p/`) provides the same functionality as the endpoint `GET /<collection>/records/` (without `.../p/`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
##### Admin Tokens
- `POST /admin_tokens`: create a new admin token from the posted configuration object.
For a specification of the configuration object see the object `AdminTokenRequest` in the file `dump_things_service/token_endpoints.py`
Note that admin token are always stored as hashed values.
Therefore the representation in the request should be `sha256(<plain-admin-token>)`
- `GET /admin_tokens`: get information about the currently existing admin tokens.
- `GET /admin_tokens/<token-name>`: get information about the admin token with name `<token-name>`.
- `DELETE /admin_tokens/<token-name>`: delete the admin token with the given name.
### Tips & Tricks
#### Using the same backend for incoming and curated areas
The service can be configured in such a way that incoming records are immediately available in the curated area.
To achieve this, the final path of the incoming zone must be the same as the curated area, for example:
```yaml
type: collections
version: 1
collections:
datamgt:
default_token: anon_read
curated: datamgt/curated
incoming: datamgt
tokens:
anon_read: # The name of the token (serves also as representation if no representation is defines)
user_id: anonymous
collections:
datamgt: # per collection token configuration; contains:
mode: READ_CURATED # - token mode
incoming_label: "" # - the label for the incoming area for this token and this collection, i.e., collection: "datamgt".
trusted-submitter-token:
user_id: trusted_submitter
representation: 00112233445566778899aabbccdd # The representation that the client has to send in an `x-dumpthings-token`-header (if not given, the token name will be the representation)
collections:
datamgt:
mode: WRITE_COLLECTION
incoming_label: "curated"
```
In this example the curated area is `datamgt/curated` and the incoming area for the token `trusted-submitter-token` is `datamgt` plus the incoming zone `curated`, i.e., `datamgt/curated` which is exactly the curated area defined for `collection_1`.
#### Migrating from `record_dir` (or `record_dir+stl`) to `sqlite`
The command `dump-things-copy-store` can be used to copy a collection from a `record_dir` (or `record_dir+stl`) store to a `sqlite` store.
The command expects a source and a destination store. Both are given in the format `<backend>:<directory-path>`, where `<backend>` is one of `record_dir`, `record_dir+stl`, `sqlite`, or `sqlite+stl`, and `<path>` is the path to the directory of the store.
For example, to migrate a collection from a `record_dir`-backend at the directory `<path-to-data>/penguis/curated` to a `sqlite` backend in the same directory, the following command can be used:
```bash
> dump-things-copy-store \
record_dir:<path-to-data>/penguis/curated \
sqlite:<path-to-data>/penguis/curated
```
For example, to migrate from a `record_dir+stl` backend, the command is similar, but a schema has to be supplied via the `-s/--schema` command line parameter. For example:
```bash
> dump-things-copy-store \
--schema https://concepts.inm7.de/s/flat-data/unreleased.yaml \
record_dir+stl:<path-to-data>/penguis/curated \
sqlite:<path-to-data>/penguis/curated
```
(Note: a `record_dir:<path>` can be used to copy without the schema type layer from a `record_dir+stl` backend. But in this case the copied records will not have a `schema_type` attribute, because the `record_dir` backend does not "put it back in", unlike a `record_dir+stl` backend.)
If the source backend is a `record_dir` or `record_dir+stl` backend, and the store was manually modified outside the service (for example, by adding or removing files), it is recommended to run the command `dump-things-rebuild-index` on the source store before copying. This ensures that the index is up to date and all records will be copied.
If any backend is a `record_dir+stl` backend, a schema has to be supplied via the `-s/--schema` command line parameter. The schema is used to determine the `schema_type` attribute of the records that are copied.
### Maintenance commands
- `dump-things-rebuild-index`: this command rebuilds the persistent index of a `record_dir`store. This should be done after the `record_dir` store was modified outside the service, for example, by manually adding or removing files in the directory structure of the store.
- `dump-things-copy-store`: this command copies a collection that is stored in a source store to a destination store. For example, to copy a collection from a `record_dir` store at the directory `<path-to-data>/penguis/curated` to a `sqlite` store in the same directory, the following command can be used:
```bash
> dump-things-copy-store \
record_dir:<path-to-data>/penguis/curated \
sqlite:<path-to-data>/penguis/curated
```
The copy command will add the copied records to any existing records in the destination store.
Note: when records are copied from a `record-dir` store, the index is used to locate the records in the source store. If the index is not up-to-date, some records may not be copied. To ensure all records are copied, it is recommended to run `dump-things-rebuild-index` on the source store before copying.
- `dump-things-pid-check`: this command checks the pids in all collections of a store to verify that they can be resolved (if they are in CURIE form).
This is useful to validate the proper definition of prefixes after schema-changes.
- `dump-things-create-merged-schema`: this command creates a new schema that statically contains all schemas that the original schema imports.
The new schema is fully self-contained and does not reference any other schemas.
- `dump-things-hash-token`: this command will generate a hash from a plain-text token that can be used with the `--admin-token-hash` option.
(one could also use the shell command `sha256sum` to generate the hash, but using `dump-things-hash-token` will ensure that the right hash algorithm is used)
### Migrate to version 6
Migration to version 6 is simple. It involves the following steps:
1. Stop the old server
2. Upgrade the server to version 6
3. Set an admin token. This can be done in one of two ways:
- provide an administrator token in hashed format on the command line
with the additional option `--admin-token-hash`. `dump-things-hash-token` can
be used to generate the hash from a plain-text token.
- Set the environment variable `DTS_ADMIN_TOKEN` to a plain-text token.
**Note**: if the command line option is provided, it takes precedence over
the environment variable.
4. Start the new server with the same path to the store as before.
At this point the service should be running and be configured exactly as
before. The configuration is persisted in the configuration database and will
be established next time the service starts. If desired, the `--config`-option
can be removed from the command line, because the configuration is now
persisted in the configuration database and will be loaded from there on startup.
NOTE: if the server should not be initialized from an existing default
configuration file, i.e., the file `<store-root>/.dumpthings.yaml`, use the
option `--ignore-default-config-file`. If this option is provided and no
`-c/--config`-option is provided the server will start with an "empty"
configuration, i.e., without any collections or non-admin tokens.
### If things go wrong
#### Delete a record manually
If a schema is changed, for example a prefix-definition changed, the service may not be able to delete a record anymore.
In this case, the record can be deleted manually if you have access to the storage root.
To delete the record, open a shell and navigate (`cd`) to the directory where the store is located.
The location can be determined from the configuration file.
Depending on the storage backend, the subsequent steps are different.
##### `record-dir` backend
Delete the record from disk by removing it, e.g. `rm -f <path-to-record>`
Run the command `dump-things-rebuild-index`
##### `sqlite` backend
Run the command:
```bash
> sqlite3 __sqlite-records.db
```
If you know the pid of the record you want to delete, enter the following on the prompt to delete the record with pid `some-pid`:
```sql
> delete from thing where json_extract(thing.object, '$.pid') = 'some-pid';
```
If you know the IRI of the record you want to delete, enter the following on the prompt to delete the record with IRI `some-iri`:
```sql
> delete from thing where iri = 'some-iri';
```
### Requirements
The service requires sqlite3.
## Acknowledgements ## Acknowledgements

View file

@ -3,8 +3,8 @@
# You can set these variables from the command line, and also # You can set these variables from the command line, and also
# from the environment for the first two. # from the environment for the first two.
SPHINXOPTS ?= --fail-on-warning SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build SPHINXBUILD ?= /home/cristian/Develop/dump-things-service/.venv/bin/sphinx-build
SOURCEDIR = . SOURCEDIR = .
BUILDDIR = _build BUILDDIR = _build

165
docs/authentication.rst Normal file
View file

@ -0,0 +1,165 @@
Authentication & Authorization
================================
The service uses *authentication sources* to authenticate and authorize clients.
Each collection can have its own list of authentication sources.
Authentication Sources
-----------------------
Authentication sources are tried in the order they are listed for a collection.
If an authentication source authenticates the token successfully, no further
sources are queried. If no source is defined for a collection, the
``config``-source is used, i.e., tokens are read directly from the configuration.
If the same authentication source is listed more than once, the duplicate entries
are ignored and a warning ``Ignoring duplicate authentication provider...`` is
logged.
Available Sources
^^^^^^^^^^^^^^^^^
The following authentication source types are available:
``config``
Reads token information directly from the persisted configuration.
This is the default source.
``forgejo``
Uses a `Forgejo <https://forgejo.org/>`_ instance to authenticate tokens
and to determine the user ID and the incoming label.
Configuring Authentication Sources
------------------------------------
Authentication sources are configured per collection via the ``auth_sources``
key:
.. code-block:: yaml
collections:
my_collection:
default_token: anon_read
curated: my_collection/curated
auth_sources:
- type: forgejo
url: https://forgejo.example.com/api/v1
organization: data_handling
team: data_entry_personal
label_type: team
repository: reference-repository # optional
- type: config
Config-based Authentication
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No extra keys are required beyond ``type: config``.
.. code-block:: yaml
auth_sources:
- type: config
Forgejo-based Authentication
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Forgejo source uses the Forgejo REST API to validate tokens and determine
permissions. This allows clients to use Forgejo personal access tokens to
authenticate with the service.
This is an example configuration for a Forgejo source:
.. code-block:: yaml
collections:
my_collection:
auth_sources:
- type: forgejo
url: https://forgejo.example.com/api/v1
organization: data_handling
team: data_entry_personal
label_type: team
repository: reference-repository # optional
instance_id: example_com
The keys are:
``type``
Must be ``forgejo``.
``url``
The API URL of the Forgejo instance, e.g. ``https://forge.example.com/api/v1``.
``organization``
The name of the Forgejo organization that is used to determine the permissions of the token.
``team``
The name of the team inside the organization that is used to determine the permissions of the token.
``label_type``
Either ``team`` or ``user``. Determines the incoming label format.
If `label_type` is set to `team`, the incoming label is `forgejo-team-<organization-name>-<team-name>`.
If `label_type` is set to `user`, the incoming label is `forgejo-user-<user-login>`
``repository`` (optional)
If set, the token is only authorized if the team has access to this
repository.
``instance_id`` (optional)
Optional identifier to disambiguate users on different Forgejo instances.
Defaults to a hash of ``url``.
When a Forgejo source authenticates a token, the user ID is set to the email of the Forgejo user.
The permissions will be fetched from the units `repo.code` and `repo.actions` of the team definition.
The following mapping is used:
============ ============ ============= ============== ============= ============
`repo.code`: curated_read incoming_read incoming_write curated_write zones_access
============ ============ ============= ============== ============= ============
`none` `False` `False` `False` `False` `False`
`read` `True` `True` `False` `False` `False`
`write` `True` `True` `True` `False` `False`
============ ============ ============= ============== ============= ============
=============== ============ ============= ============== ============= ============
`repo.actions`: curated_read incoming_read incoming_write curated_write zones_access
=============== ============ ============= ============== ============= ============
`none` `False` `False` `False` `False` `False`
`read` `False` `False` `False` `False` `False`
`write` `True` `True` `True` `True` `True`
=============== ============ ============= ============== ============= ============
A Forgejo authentication source can authenticate Forgejo-tokens that have at
least the following `Read`-permissions:
- **User**: this is required to determine user-related information, i.e. user-email and user login name.
- **Organization**: this is required to determine the membership of a user to a team in an organization.
- **Repository** (Only if `repository` is set in the configuration): required to determine a team's access to the repository.
Incoming Label Generation
''''''''''''''''''''''''''
The ``label_type`` key controls how the incoming label is derived:
- ``team````forgejo-<instance_id or URL-hash>-team-<organization>-<team>``
- ``user````forgejo-<instance_id or URL-hash>-user-<user-login>``
Administrator Tokens
---------------------
Administrator tokens are always authenticated using the persisted configuration.

71
docs/backends.rst Normal file
View file

@ -0,0 +1,71 @@
Storage Backends
================
The service supports multiple storage backends. A backend can be configured
per collection in the configuration file. If no backend is defined for a
collection, ``record_dir+stl`` is used by default.
Available Backends
------------------
``record_dir``
Stores records as YAML files in a directory structure defined by
`Dump Things Storage v0 <https://concepts.datalad.org/dump-things-storage-v0/>`_.
Reads the backend configuration from a *record collection configuration file*
as described in the same specification.
``record_dir+stl`` *(default)*
Same as ``record_dir``, but adds a **schema-type layer** (STL):
- ``schema_type`` attributes are stripped from the top-level mapping of a
record before it is stored.
- When a record is read back, a ``schema_type`` attribute is re-inserted
using the schema to determine the correct class URI.
This is useful when endpoints return records of multiple classes, because
clients can determine the class of each record from the ``schema_type``
attribute.
``sqlite``
Stores records in a SQLite database. One database file named
``__sqlite-records.db`` is created per curated/incoming area.
``sqlite``-backends have the advantage that they support search patterns
to limit the size of a result on the server.
``sqlite+stl``
Same as ``sqlite``, but with the same schema-type layer as
``record_dir+stl``.
.. note::
``record_dir`` and ``sqlite`` backends can co-exist independently in the same
directory. There are no file-name collisions between backends, as long as no
class name starts with ``.`` or ``__``.
Configuring a Backend
---------------------
Specify the backend in the collection configuration with the ``backend`` key:
.. code-block:: yaml
collections:
my_collection:
schema: https://example.org/schema.yaml
default_token: anon_read
curated: my_collection/curated
backend:
type: record_dir+stl # explicit default
.. code-block:: yaml
collections:
another_collection:
schema: https://example.org/schema.yaml
default_token: anon_read
curated: another_collection/curated
backend:
type: sqlite

5
docs/changelog.rst Normal file
View file

@ -0,0 +1,5 @@
Changelog
=========
.. include:: ../CHANGELOG.md
:parser: myst_parser.sphinx_

198
docs/commands.rst Normal file
View file

@ -0,0 +1,198 @@
Command-Line Tools
==================
The package installs the following command-line tools.
Service Commands
----------------
dump-things-service
^^^^^^^^^^^^^^^^^^^
Start the Dump Things Service.
.. code-block:: text
dump-things-service [OPTIONS] <storage-root>
**Arguments**
``<storage-root>``
(Mandatory) Path to the directory used as anchor for all relative paths in
the configuration.
**Options**
.. option:: --host <IP-address>
IP address on which the service should accept connections.
Default: ``0.0.0.0``.
.. option:: --port <port>
Port on which the service should accept connections. Default: ``8000``.
.. option:: -c, --config <config-file>
Path to a configuration file. If no persisted configuration is found in the
data store, the service is initialized with the content of this file.
Useful for migrating from service version <= 5 to version 6.
.. option:: --origins <origin>
Add a CORS origin host. Repeat to add multiple CORS origin URLs.
.. option:: --root-path <path>
Set the ASGI ``root_path`` for applications mounted below a given URL path.
.. option:: --log-level <LEVEL>
Log level. Allowed values: ``ERROR``, ``WARNING``, ``INFO``, ``DEBUG``.
Default: ``WARNING``.
.. option:: --admin-token-hash <sha256-hex>
Set an administrator token hash (64-digit hexadecimal SHA-256 hash of the
plain-text token). If not provided, a plain-text token is read from the
environment variable ``DTS_ADMIN_TOKEN``, if it is set.
.. option:: --ignore-default-config-file
If set, the service will not try to initialize itself from the default
configuration file ``<storage-root>/.dumpthings.yaml``. Otherwise, if no
persisted configuration is found in the data store (and ``-c/--config`` is
not provided), the service will read its initial configuration from
``<storage-root>/.dumpthings.yaml`` if it exists.
**Example**
.. code-block:: bash
dump-things-service /data/store --host 127.0.0.1 --port 8000
Configuration Tools
-------------------
dump-things-upload-config
^^^^^^^^^^^^^^^^^^^^^^^^^^
Read a configuration from a dump-things configuration-file and
instantiate its elements on a running server via the administration
endpoints. Objects that already exist on the server are left unchanged.
An admin token has to be provided in the environment variable
``DTS_ADMIN_TOKEN``.
.. code-block:: text
dump-things-upload-config [OPTIONS] <config-file (json or YAML)>
**Options**
.. option:: --server <URL>
Base URL of the running service (e.g. ``http://127.0.0.1:8000``).
.. option:: --format [{json,yaml}], -f [{json,yaml}]
Specify the format of the input file. Possible values are `json` and `yaml`. If this option is given, the suffix of the configuration file is ignored.
.. option:: --send-to SEND_TO
The base URL of the server API. If this option is provided, the configuration will be sent to the server API, otherwise it will just be written to stdout.
.. option:: --old-format
If provided, assume that the configuration is in version 1 format and convert it to the new format internally (in version 1: tokens had no `hashed`-attribute and no `representation`-attribute, the token representation was the key of the token configuration, collections had no `schema`-attribute, and `sqlite`-backends had a `schema`-attribute).
.. option:: --store STORE
If --old-format is provided, this option can be used to specify a store directory. The store directory will be used to load `RecordDir` configurations, if a collection defines are `RecordDir`-backend. (This option has no effect if no collection in the old configuration uses a `RecordDir`-backend.)
dump-things-download-config
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Read the current configuration from a running service and write it to a file.
An admin token has to be provided in the environment variable
``DTS_ADMIN_TOKEN``.
.. code-block:: text
dump-things-download-config [OPTIONS] <server API URL>
**Options**
.. option:: --entities {admin_tokens,collections,tokens}, -e {admin_tokens,collections,tokens}
Specify for which entities the configuration should be downloaded. Possible values are `admin_tokens`, `collections`, or `tokens` (repeat to download configuration for more than one entity). If this option is not provided, configurations for all entities will be downloaded.
.. option:: --format [{json,yaml}], -f [{json,yaml}]
Specify the format of the output. Possible values are `json` and `yaml` (the default is `yaml`).
dump-things-hash-token
^^^^^^^^^^^^^^^^^^^^^^^^
Compute the SHA-256 hash of a plain-text token for use with ``--admin-token-hash`` or as ``representation``-value in a configuration object (file)
.. code-block:: bash
dump-things-hash-token <plain-text-token>
Maintenance Tools
-----------------
dump-things-pid-check
^^^^^^^^^^^^^^^^^^^^^^
Check all PIDs in a store to verify they can be resolved (useful after
schema changes that affect prefix definitions).
.. code-block:: bash
dump-things-pid-check <path-to-store>
Audit Tools
-----------
dump-things-gitaudit-report
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Report the audit information that was stored for all PIDs matching a pattern.
For every change to a record the tool will report: time stamp, user ID, diff, and the resulting record.
.. code-block:: bash
dump-things-gitaudit-report <path-to-audit-dir> <pid-pattern>
``<pid-pattern>`` is a Python ``re``-module pattern that identifies PIDs of the record for
which audit information should be reported. Use ``'.*'`` to report changes for all PIDs.
Each log entry contains:
- Timestamp of the change.
- Curator ID.
- Diff of the change.
- The resulting record.
dump-things-gitaudit-rebuild-index
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Rebuild the index for a ``gitaudit`` backend. Normally not required in
regular operations; useful for maintenance.
.. code-block:: bash
dump-things-gitaudit-rebuild-index <path-to-audit-dir>

View file

@ -3,14 +3,22 @@
# For the full list of built-in configuration values, see the documentation: # For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html # https://www.sphinx-doc.org/en/master/usage/configuration.html
from __future__ import annotations
import os
import sys
sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('..'))
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
import dump_things_service import dump_things_service
project = 'dump-things-server' project = 'dump-things-service'
copyright = '2025-2026, Christian Mönch' copyright = '2025-2026, Christian Mönch'
author = 'Christian Mönch' author = 'Christian Mönch and'
release = dump_things_service.__version__ release = dump_things_service.__version__
# -- General configuration --------------------------------------------------- # -- General configuration ---------------------------------------------------
@ -21,6 +29,9 @@ extensions = [
'sphinx.ext.autodoc', 'sphinx.ext.autodoc',
'sphinx_autodoc_typehints', 'sphinx_autodoc_typehints',
'sphinx.ext.viewcode', 'sphinx.ext.viewcode',
'sphinx.ext.intersphinx',
'sphinx.ext.napoleon',
'myst_parser',
] ]
templates_path = ['_templates'] templates_path = ['_templates']
@ -29,9 +40,30 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
primary_domain = 'py' primary_domain = 'py'
autoclass_content = "both" autoclass_content = "both"
# autodoc settings
autodoc_default_options = {
'members': True,
'undoc-members': True,
'show-inheritance': True,
}
autosummary_generate = True
typehints_use_signature = True typehints_use_signature = True
typehints_use_signature_return = True typehints_use_signature_return = True
# Napoleon settings (Google/NumPy style docstrings)
napoleon_google_docstring = True
napoleon_numpy_docstring = True
# MyST settings (Markdown support)
myst_enable_extensions = ['colon_fence']
# Intersphinx mapping
intersphinx_mapping = {
'python': ('https://docs.python.org/3', None),
'pydantic': ('https://docs.pydantic.dev/latest/', None),
}
# we build some docstrings from loguru. define some no-op substitutions # we build some docstrings from loguru. define some no-op substitutions
# to avoid errors # to avoid errors
rst_prolog = """ rst_prolog = """
@ -46,3 +78,9 @@ rst_prolog = """
html_theme = 'sphinx_rtd_theme' html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static'] html_static_path = ['_static']
# RTD theme options
html_theme_options = {
'navigation_depth': 4,
'titles_only': False,
}

399
docs/configuration.rst Normal file
View file

@ -0,0 +1,399 @@
Configuration
=============
General Concepts
----------------
Each Dump Things Service instance maintains a persistent configuration. The
configuration is stored in a private area of the *storage root* and will be
loaded when a Dump Things Service instance is started.
Providing an initial configuration
..................................
If the persistent configuration is empty, for example, because the service is
started on an empty ``<storage root>``, an initial configuration can be
provided by configuration files:
1. via a configuration file in ``<storage root>/.dumpthings.yaml``, or
2. a configuration file can be passed to the command line with the ``-c/--config``
option.
Performing dynamic configuration changes
........................................
Every Dump Things Service instance (since version 6) supports dynamic
reconfiguration via administration API endpoints. That means, a server can be
started with an empty configuration and the configuration can be modified at
runtime.
If a Dump Things Service instance is started with an empty configuration,
the command line option ``--admin-token-hash`` has to be provided.
This option will establish a "bootstrap" administrator token in the
Dump Things Server instance that can be used to access the
administration endpoints.
Note: the bootstrap administrator token does not become part of the persisted
configuration. That means, it will not be represented in a configuration dump,
i.e., in the result of ``GET /admin_tokens``.
Elements of the configuration
-----------------------------
Dump Things Service instances have three main configuration elements:
- Collections
- Tokens
- Administrator Tokens
A Dump Things Service instance has administration endpoints for all three
configuration elements, which allow to create, modify, and delete
these elements. Any change to the configuration is persisted immediately and
will be effective for all subsequent requests to the service.
All configuration changes are audited (see :doc:`audit` for details). The
audit log is stored in the storage root at the path
``<storage root>/__dumpthings__/config_audit``.
Configuration modification model
--------------------------------
A Dump Things Service instance maintains an internal representation of the
current configuration. The persistent configuration is kept up-to-date with
the internal configuration.
If, for example, a collection is added via the administration
interface, the service will add the collection to its internal configuration
representation. It will then persist the new configuration and updated its
internal state to "activate" the new configuration.
In other words if the administrator interface is used to add a collection, a
token, or an administrator-token, the element will be added to the already
existing configuration elements. If an element is removed via the administration
interface, this element will be removed from the internal configuration, while
all other configuration elements remain unchanged.
To determine the current configuration of the service, the administrator API
provides endpoints to read collection configurations, token configurations, and
admin token configurations.
To modify an existing configuration element, the administrator can fetch its
current state, modify it, and ``PUT`` it back to the service.
The tool ``dump-things-download-config`` (see :doc:`commands`) can be used to
fetch the current configuration of a running Dump Things Service instance and
write it to a configuration file (see :ref:`config_file:`). This file can be
used, for example, to create a Dump Things Service with an identical
configuration at another location.
For a detailed description of the configuration endpoints see :doc:`endpoints`.
.. _config_file:
Configuration File Structure
-----------------------------
A configuration file (version 2) has the following top-level structure:
.. code-block:: yaml
type: collections # must be "collections"
version: 2 # must be 2
collections:
<collection-name>:
...
tokens:
<token-name>:
...
admin_tokens:
<admin-token-name>:
...
Collections
-----------
Each entry under ``<collection-name>`` defines a collection. The following keys
are supported:
``schema`` (required)
URL of the `LinkML <https://linkml.io>`_ schema for this collection.
``default_token`` (required)
Name of the token to use when no token is provided by a client. All
permissions in the default token are OR-ed with any client-provided token.
Note: a token of the given name must be defined in the ``tokens`` section
of the configuration file. At least the default token must be created before
a collection can be created. Although tokens reference collections, tokens
can always be created because their creation does check whether referenced
collections exist yet.
``curated`` (required)
Path to the curated area of the collection. This should be a relative path,
which will be interpreted relative to the storage root.
``incoming`` (required if tokens with write access exist for the collection)
Path to the incoming area. Required if the collection has any tokens with
write access associated to it.
This should be a relative path, which will be interpreted relative to the
storage root.
``backend`` (optional)
Storage backend configuration. If omitted, ``record_dir+stl`` is used.
See :doc:`backends` for details.
``use_classes`` (optional)
List of LinkML class names that should receive store/validate endpoints
(the classes must be subclasses of ``Thing``). All other classes defined
in the schema are ignored.
``ignore_classes`` (optional)
List of LinkML class names to exclude from store/validate endpoints
(the classes must be subclasses of ``Thing``).
``auth_sources`` (optional)
List of authentication source configurations. See :doc:`authentication`.
``submission_tags`` (optional)
Tags for an optional automated annotation of submitted records (see
`Submission Annotation Tags`_ below).
``audit_backends`` (optional)
List of audit-backend configurations. See `Audit Backends`_ below.
Example
^^^^^^^
.. code-block:: yaml
collections:
personal_records:
default_token: no_access
schema: https://concepts.datalad.org/s/demo-research-information/unreleased.yaml
curated: curated
incoming: incoming
use_classes:
- Organization
- Person
- Project
Authentication Sources
^^^^^^^^^^^^^^^^^^^^^^
Authentication configuration is described in :doc:`authentication`. If no
authentication sources are defined for a collection, a ``config`` source is
used by default, that means, the service will use the tokens that are
configured in the configuration file.
Submission Annotation Tags
^^^^^^^^^^^^^^^^^^^^^^^^^^
The service might annotate uploaded records with a submitter ID and a
submission time (version below 6 will always annotate submitted records,
version 6 and higher will only annotate submitted records, if the query
parameter ``add_submission_tag`` is set to ``true``.
By default, the following tags are used for submission annotation:
- Submitter ID: ``http://purl.obolibrary.org/obo/NCIT_C54269``
- Submission time: ``http://semanticscience.org/resource/SIO_001083``
Override these defaults per collection with ``submission_tags``:
.. code-block:: yaml
collections:
collection_1:
...
submission_tags:
submitter_id_tag: schema:user_id
submission_time_tag: schema:time
Audit Backends
^^^^^^^^^^^^^^
The service supports audit logs of changes made via the curation interface.
Configure them per collection with ``audit_backends``:
.. code-block:: yaml
collections:
collection_1:
...
audit_backends:
- type: gitaudit
path: /path/to/audit-log-dir
auto_flush_timeout: 60 # seconds (default: 60, minimum: 1)
Currently the only supported audit backend type is ``gitaudit``. A ``gitaudit``
backend stores changes in a bare Git repository at ``path``.
After ``auto_flush_timeout`` seconds without new entries the current changeset
is committed.
Use ``dump-things-gitaudit-report`` to display the audit log and
``dump-things-gitaudit-rebuild-index`` to rebuild its index (see :doc:`commands`).
Collection-and-Token: a Chicken-and-Egg Problem
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In configuration files, collections reference tokens and tokens reference collections.
This can create a chicken-and-egg problem when creating new collection and
new tokens dynamically. This is resolved by allowing tokens to refer to
collections that are not created. In other words:
Create tokens first, then create collections.
Reserved Collection Names
^^^^^^^^^^^^^^^^^^^^^^^^^
The following collection names are reserved and must **not** be used:
- ``api``
- ``collections``
- ``tokens``
- ``admin_tokens``
- ``__dump_things__``
Tokens
------
Each entry under ``tokens`` defines a token. The following keys are supported:
``representation`` (required)
The plain-text value the client must supply in the ``X-DumpThings-Token``
HTTP header. If ``hashed`` is ``True`` this must be the SHA-256 hex digest
of the plain-text token.
``hashed`` (optional, default: ``False``)
If ``True``, the representation is treated as a SHA-256 hash.
Use the command ``dump-things-hash-token`` (see :doc:commands) to compute the correct hash.
``user_id`` (required)
An identifier that is added as an annotation to each uploaded record.
``collections`` (required)
Mapping from collection name to per-collection rights.
Per-collection rights
^^^^^^^^^^^^^^^^^^^^^
Each collection entry inside a token has:
``mode``
Access mode. Available modes (in the following list "own incoming area"
refers to the incoming area that is associated with the token and the
collection):
- ``NOTHING`` no access.
- ``READ_CURATED`` read the curated area only.
- ``READ_COLLECTION`` read curated data and own incoming area.
- ``WRITE_COLLECTION`` read curated data, read own incoming area, write to own incoming area.
- ``READ_SUBMISSIONS`` - read own incoming area.
- ``WRITE_SUBMISSIONS`` read and write own incoming area.
- ``SUBMIT`` - read curated area only, write to own incoming area.
- ``SUBMIT_ONLY`` - write to own incoming area.
- ``CURATOR`` - curator-level access: read & write to curated area, read & write to all incoming areas.
``incoming_label``
Label that defines the subdirectory (aka zone) in the incoming area for this token and collection.
Multiple tokens can share the same label, which means they share a zone.
Example
^^^^^^^
.. code-block:: yaml
tokens:
basic_access:
representation: anonymous
hashed: False
user_id: anonymous_user
collections:
rooms_and_buildings:
mode: READ_CURATED
incoming_label: ''
contributor_bob:
representation: bob
user_id: Bob
collections:
rooms_and_buildings:
mode: WRITE_COLLECTION
incoming_label: new_rooms_and_buildings
Tips & Tricks
-------------
Same Backend for Incoming and Curated Areas
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can configure the service so that incoming records are immediately visible
in the curated area by setting the final incoming path to equal the curated
path:
.. code-block:: yaml
collections:
datamgt:
default_token: anon_read
curated: datamgt/curated
incoming: datamgt
tokens:
trusted-submitter-token:
user_id: trusted_submitter
collections:
datamgt:
mode: WRITE_COLLECTION
incoming_label: curated # datamgt/curated == curated path
Migrating to Version 6 from Version <=5
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Start the version 6 server on the same storage root as the version 5 server.
The version 6 server will automatically migrate the configuration from
``<storage root>/.dumpthings.yaml`` from the version 5 format to the new
format and persist it. Use the ``-c/--config`` option on first start to
initialise the persisted configuration from a different file than
``<storage root>/.dumpthings.yaml``.
Once started, the configuration is stored in the internal database and the
file ``<storage_root>/.dumpthings.yaml`` or the ``-c`` option can be omitted
on subsequent starts:
.. code-block:: bash
dump-things-service /path/to/storage -c /path/to/old-config.yaml

317
docs/endpoints.rst Normal file
View file

@ -0,0 +1,317 @@
HTTP Endpoints
==============
All endpoints are accessible via the interactive Swagger UI at ``/docs`` after
starting the service.
Most endpoints that operate on records require a *collection name* and a valid
token supplied in the ``X-DumpThings-Token`` HTTP header.
.. contents:: Endpoint overview
:local:
:depth: 1
Note: The package `dump-things-pyclient`_ provides client support for
the service. A Python API makes the endpoints available to Python code. The
command line tool ``dtc`` makes the endpoints available in the shell.
.. _dump-things-pyclient: https://pypi.org/project/dump-things-pyclient/
User Endpoints
--------------
Store a Record
^^^^^^^^^^^^^^
``POST /<collection>/record/<class>``
Stores an object of type ``<class>`` (defined in the collection schema) in the
incoming area for the authenticated token's zone.
- **Requires**: write permission (``WRITE_INCOMING`` or higher).
- **Query parameters**:
- ``format``: ``json`` (default) or ``ttl`` (Turtle RDF).
- ``add_submission_tag``: if ``true`` the server adds automated submitter-ID
and submission-time annotations. Default: ``false``.
- **Content-Type**: ``application/json`` for JSON; ``text/turtle`` for Turtle.
- **Returns**: list of all stored records (may contain more than one entry when
the posted object contains inlined records).
Validate a Record
^^^^^^^^^^^^^^^^^
``POST /<collection>/validate/record/<class>``
Validates a record without storing it. Supports the same parameters as
``POST /<collection>/record/<class>``.
Retrieve All Records of a Class
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``GET /<collection>/records/<class>``
Returns all readable records of type ``<class>`` (and its subclasses).
Records from the incoming zone take precedence over identical PIDs in the
curated area.
- **Requires**: read permission.
- **Query parameters**:
- ``format``: ``json`` (default) or ``ttl``.
- ``matching``: wildcard pattern for ``sqlite`` backends; ``%`` matches any
characters (case-insensitive). Ignored by ``record_dir`` backends.
Retrieve All Records of a Class (Paginated)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``GET /<collection>/records/p/<class>``
Same as above but with pagination support.
- **Additional query parameters**:
- ``page``: page number (starting at 1).
- ``size``: records per page (default: 50).
- **Response structure**:
.. code-block:: json
{
"items": ["<record or ttl-string>"],
"total": 123,
"page": 1,
"size": 50,
"pages": 3
}
Retrieve All Records
^^^^^^^^^^^^^^^^^^^^^
``GET /<collection>/records/``
Returns all readable records of a collection regardless of class.
Supports the same ``format`` and ``matching`` parameters.
Retrieve All Records (Paginated)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``GET /<collection>/records/p/``
Paginated version of the endpoint above; supports the same ``page`` and
``size`` parameters.
Retrieve a Single Record by PID
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``GET /<collection>/record?pid=<pid>``
Retrieves the record with the given PID. If both the incoming zone and the
curated area contain a record with the same PID, the incoming record is
returned.
- **Query parameters**:
- ``format``: ``json`` (default) or ``ttl``.
Delete a Record
^^^^^^^^^^^^^^^
``DELETE /<collection>/record?pid=<pid>``
Deletes the record with PID ``<pid>`` from the **incoming** area.
- **Requires**: write permission.
- **Returns**: ``true`` if the record was deleted, ``false`` otherwise.
Server Information
^^^^^^^^^^^^^^^^^^
``GET /server``
Returns information about the running service:
.. code-block:: json
{
"version": "<service version>",
"collections": [
{
"name": "collection_1",
"schema": "https://example.org/schema.yaml",
"classes": ["Thing", "Agent", "Person"]
}
]
}
Maintenance Mode
^^^^^^^^^^^^^^^^
``POST /maintenance``
Puts a collection into maintenance mode. In maintenance mode only tokens with
curator privileges can access the collection.
Request body:
.. code-block:: json
{
"collection": "collection_1",
"active": true
}
Curation Endpoints
-------------------
Curation endpoints allow direct read/write access to the curated area and all
incoming zones (aka: inboxes). A ``CURATOR`` token is required.
Refer to the interactive API documentation at ``/docs`` on a running service
for the full list of curation endpoints.
Administration Endpoints
--------------------------
A Dump Things Service instance can be reconfigured at runtime via the
administration endpoints. These endpoints allow to create, update, and delete
collections, tokens, and admin tokens.
The service keeps an internal model of the configuration which can be modified
by adding or removing elements via the administration endpoints (see
:doc:`configuration` for a more detailed description of the configuration model).
Note: all administration endpoints require an **administrator token**.
Currently the smallest units for updates are also *collections*, *tokens*, and
*admin tokens*. That means, to update, for example, the authentication sources
of an existing collection, a complete collection configuration with updated
authentication sources has to be sent. The current collection configuration
can be read via the ``GET /collections/<name>`` endpoint. Modifying an
existing collection can therefore be implemented by reading the current
collection configuration, modifying it, and sending it to the server via the
``PUT /collections/<name>`` endpoint. The same holds for tokens and admin tokens.
The commands ``dump-things-download-config`` and ``dump-things-upload-config``
support this workflow. ``dump-things-download-config`` downloads the
current configuration from a server and stores it as configuration file.
``dump-things-upload-config`` reads a configuration file and
invokes the API requests that are necessary to create the elements from
the configuration file on a server (see :doc:`commands`).
Collections
^^^^^^^^^^^
.. list-table::
:header-rows: 1
:widths: 10 30 60
* - Method
- Path
- Description
* - POST
- ``/collections``
- Create a new collection ( .
* - GET
- ``/collections``
- List all collections.
* - GET
- ``/collections/<name>``
- Get information about a specific collection.
* - PUT
- ``/collections/<name>``
- Update an existing collection.
* - DELETE
- ``/collections/<name>``
- Remove a collection from the service state (data is not deleted).
The payload for ``POST /collections`` and ``PUT /collections``
is a JSON objects that corresponds to the collection configuration object
(see :ref:`config_file`), but has an additional ``name`` attribute that
specifies the name of the collection that should be created or updated.
Tokens
^^^^^^
.. list-table::
:header-rows: 1
:widths: 10 30 60
* - Method
- Path
- Description
* - POST
- ``/tokens``
- Create a new token.
* - GET
- ``/tokens``
- List all tokens (including representations).
* - GET
- ``/tokens/<name>``
- Get information about a specific token.
* - PUT
- ``/tokens``
- Update an existing token.
* - DELETE
- ``/tokens/<name>``
- Delete a token.
The payload for ``POST /tokens`` and ``PUT /tokens`` is a JSON objects that
corresponds to the token configuration object
(see :ref:`config_file`), but has an additional ``name`` attribute that
specifies the name of the token that should be created or updated.
If no representation is provided in the payload, the server generates a random
token representation and returns it in the ``representation`` attribute of
the response. If a representation is
provided and ``hashed`` is ``True``, the representation must be a valid
token-hash, i.e, a sha256 hash of the plaintext-token in hexdigit format.
The command ``dump-things-hash-token`` can be used to generate a
valid token hash
Admin Tokens
^^^^^^^^^^^^
.. list-table::
:header-rows: 1
:widths: 10 30 60
* - Method
- Path
- Description
* - POST
- ``/admin_tokens``
- Create a new admin token (representation must be a SHA-256 hash).
* - GET
- ``/admin_tokens``
- List all admin tokens.
* - GET
- ``/admin_tokens/<name>``
- Get information about a specific admin token.
* - PUT
- ``/admin_tokens``
- Update an existing admin token.
* - DELETE
- ``/admin_tokens/<name>``
- Delete an admin token.
The payload for ``POST /admin_tokens`` and ``PUT /admin_tokens`` is a JSON
objects that corresponds to the *admin token* configuration object
(see :ref:`config_file`), but has an additional ``name`` attribute that
specifies the name of the admin token that should be created or updated.
The ``representation`` attribute must be a valid token-hash, i.e, a sha256 hash
of the plaintext-token in hexdigit format.
The command ``dump-things-hash-token`` can be used to generate a valid token hash

View file

@ -0,0 +1,484 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1339.000000pt" height="1232.000000pt" viewBox="0 0 1339.000000 1232.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,1232.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M11905 12308 c-22 -5 -64 -7 -93 -4 -43 5 -54 3 -59 -10 -11 -29 19
-35 139 -29 90 4 132 2 179 -10 64 -17 135 -13 165 10 31 22 7 35 -54 29 -38
-4 -78 -1 -118 10 -69 18 -100 19 -159 4z"/>
<path d="M9948 12290 c-87 -14 -248 -80 -248 -102 0 -26 21 -23 124 19 78 31
103 36 175 37 47 1 86 5 87 11 12 35 -45 49 -138 35z"/>
<path d="M11593 12243 l-38 -58 -95 -5 c-75 -4 -95 -8 -95 -20 0 -27 151 -41
200 -18 27 12 105 120 105 144 0 8 -9 14 -19 14 -13 0 -33 -21 -58 -57z"/>
<path d="M10343 12273 c-23 -9 -14 -33 18 -52 44 -27 137 -41 262 -39 93 2
107 4 107 19 0 23 -29 29 -156 29 -110 0 -164 10 -195 36 -17 15 -17 15 -36 7z"/>
<path d="M12565 12219 c-4 -6 2 -20 13 -32 32 -35 44 -131 41 -342 -3 -170 -1
-190 14 -193 26 -5 32 37 32 238 0 199 -13 288 -46 321 -21 21 -44 25 -54 8z"/>
<path d="M12364 12172 c-22 -20 -50 -51 -62 -68 -20 -29 -20 -33 -6 -45 13
-11 23 -4 69 48 46 51 58 60 80 55 24 -4 26 -2 23 19 -5 41 -55 36 -104 -9z"/>
<path d="M8309 12114 c-15 -18 -18 -15 61 -58 132 -73 171 -89 241 -94 86 -6
119 2 119 29 0 19 -4 20 -52 14 -75 -9 -140 8 -238 64 -106 60 -116 63 -131
45z"/>
<path d="M9105 12070 c-10 -17 3 -27 43 -34 22 -3 45 -13 52 -21 16 -19 36
-19 44 0 6 17 -17 43 -51 56 -32 12 -80 12 -88 -1z"/>
<path d="M7280 12040 c-26 -16 -1 -35 68 -53 38 -10 108 -40 156 -68 84 -48
106 -53 106 -25 0 25 -163 115 -245 135 -27 7 -55 14 -61 16 -6 2 -17 0 -24
-5z"/>
<path d="M6267 11983 c-23 -23 -1 -30 110 -36 124 -7 156 1 119 29 -14 10 -49
14 -121 14 -56 0 -105 -3 -108 -7z"/>
<path d="M6855 11969 c-4 -5 5 -21 19 -34 14 -13 39 -46 56 -73 33 -53 57 -71
66 -47 6 15 -21 66 -69 128 -28 36 -59 48 -72 26z"/>
<path d="M7964 11948 c-7 -10 37 -55 77 -78 22 -13 59 15 59 44 0 31 -30 44
-37 16 -5 -19 -6 -19 -35 5 -32 27 -53 31 -64 13z"/>
<path d="M5810 11895 c-7 -8 -42 -24 -79 -35 -74 -22 -141 -63 -141 -86 0 -26
29 -27 60 0 17 14 50 31 73 37 78 20 137 50 137 69 0 10 -7 21 -16 24 -21 8
-20 8 -34 -9z"/>
<path d="M5603 11552 c-5 -4 -10 -42 -12 -85 -1 -63 1 -78 14 -83 9 -4 18 -5
20 -2 2 2 7 40 11 84 5 66 4 82 -8 87 -8 3 -19 2 -25 -1z"/>
<path d="M12595 11503 c-4 -32 -16 -94 -27 -138 -45 -177 -49 -199 -46 -249 2
-37 7 -51 18 -51 11 0 17 22 26 86 6 47 21 114 32 150 23 68 42 172 42 227 0
25 -4 32 -19 32 -16 0 -21 -10 -26 -57z"/>
<path d="M9076 11388 c-20 -76 7 -317 60 -536 51 -211 59 -270 38 -293 -39
-43 27 -175 112 -225 113 -66 271 -27 290 71 9 52 -21 175 -58 230 -59 89
-170 133 -260 104 l-45 -15 -37 155 c-44 190 -58 293 -55 414 1 52 -1 99 -5
105 -12 19 -33 14 -40 -10z m317 -701 c43 -19 103 -87 117 -134 6 -21 14 -64
17 -96 5 -46 2 -61 -11 -76 -22 -24 -100 -44 -140 -35 -38 8 -107 45 -101 54
2 4 -1 35 -7 69 -11 56 -10 62 7 75 22 16 14 46 -14 46 -31 0 -42 67 -15 94
19 20 102 21 147 3z"/>
<path d="M8377 11223 c-18 -18 -6 -277 23 -478 16 -115 32 -245 35 -290 11
-155 16 -185 30 -185 39 0 37 47 -16 445 -29 210 -46 404 -33 378 7 -15 30
-17 39 -3 3 5 -5 39 -17 75 -22 61 -40 79 -61 58z"/>
<path d="M5715 11041 c-3 -6 -3 -17 2 -23 4 -7 7 -26 8 -43 0 -20 6 -31 17
-33 22 -4 35 40 22 77 -10 27 -38 40 -49 22z"/>
<path d="M11070 10940 c-59 -11 -150 -45 -192 -73 -40 -27 -51 -82 -21 -109
27 -24 235 -159 292 -190 28 -16 51 -35 51 -43 0 -26 -59 -82 -111 -105 -50
-21 -54 -21 -140 -6 -95 16 -129 12 -201 -25 -40 -21 -45 -28 -27 -46 8 -8 26
-4 66 14 41 19 64 24 96 19 143 -19 172 -19 225 4 29 13 69 41 92 67 35 37 41
49 38 81 -3 40 1 36 -175 145 -43 27 -91 59 -108 70 -16 12 -41 30 -54 39
l-25 18 24 25 c34 36 169 77 240 73 53 -3 55 -2 55 22 0 22 -4 25 -40 27 -22
0 -60 -3 -85 -7z"/>
<path d="M12496 10852 c-3 -6 1 -29 10 -53 9 -24 17 -74 17 -111 1 -55 -3 -73
-21 -97 -24 -34 -27 -47 -11 -56 14 -9 49 24 65 62 19 44 17 136 -4 203 -17
52 -42 75 -56 52z"/>
<path d="M10402 10828 c-7 -7 -12 -19 -12 -28 0 -19 -67 -120 -92 -138 -10 -7
-18 -20 -18 -28 0 -16 -47 -114 -55 -114 -15 0 -155 103 -155 114 0 28 -36 46
-92 46 -46 0 -64 -6 -104 -32 -64 -44 -89 -88 -88 -158 0 -95 43 -148 110
-136 50 10 89 48 130 131 21 41 41 75 46 75 9 0 70 -39 105 -67 l23 -18 -40
-65 c-45 -73 -53 -120 -20 -120 12 0 20 7 20 18 0 9 16 43 36 74 l36 57 32
-24 c17 -13 40 -38 51 -55 11 -16 28 -30 38 -30 33 0 18 41 -37 98 l-54 57 25
48 c20 41 28 48 46 43 12 -3 50 -6 84 -6 49 0 61 -3 57 -14 -9 -24 15 -91 42
-117 38 -36 105 -33 169 6 56 35 75 59 58 76 -8 8 -25 1 -63 -25 -91 -63 -160
-43 -160 45 0 36 3 39 54 62 69 32 200 120 220 149 14 19 14 24 2 36 -34 34
-230 -59 -278 -132 -19 -28 -30 -35 -68 -40 -26 -3 -61 -3 -79 0 l-33 7 32 13
c27 12 31 18 26 39 -4 17 3 41 25 80 30 54 33 85 6 85 -7 0 -18 -5 -25 -12z
m269 -117 c-35 -27 -81 -53 -81 -46 0 6 90 65 99 65 4 0 -5 -9 -18 -19z m-681
-140 c0 -52 -20 -83 -58 -93 -40 -11 -42 -44 -2 -42 l23 1 -22 -19 c-34 -27
-75 -24 -89 7 -18 40 -14 104 8 140 25 41 48 52 43 22 -5 -29 11 -51 31 -44
10 4 16 18 16 35 0 35 6 41 31 35 14 -4 19 -14 19 -42z"/>
<path d="M8595 10694 c-8 -20 -18 -54 -21 -76 -6 -34 -4 -38 14 -38 16 0 23 8
28 38 l7 37 14 -34 c8 -19 35 -111 59 -204 25 -93 49 -178 55 -188 9 -19 38
-27 40 -11 0 4 2 18 5 32 2 14 16 95 30 180 14 85 29 160 33 168 5 10 31 -30
80 -126 39 -77 80 -147 90 -156 21 -19 48 -12 56 15 8 24 -1 39 -25 39 -15 0
-36 32 -86 130 -112 222 -151 212 -190 -47 -10 -62 -19 -112 -20 -110 -1 1
-18 61 -38 132 -59 218 -71 250 -94 253 -16 3 -25 -5 -37 -34z"/>
<path d="M5746 10631 c-20 -22 -14 -41 14 -41 21 0 40 28 33 48 -7 18 -27 15
-47 -7z"/>
<path d="M5783 10314 c-3 -9 -2 -19 4 -23 5 -3 9 -21 9 -40 -1 -41 20 -52 33
-18 5 13 17 27 25 30 25 10 19 35 -14 52 -37 19 -49 19 -57 -1z"/>
<path d="M12600 10065 c0 -8 -13 -36 -29 -62 -29 -46 -31 -73 -6 -73 7 0 28
25 48 56 29 45 35 60 27 75 -13 23 -40 25 -40 4z"/>
<path d="M5758 9902 c-24 -5 -23 -29 2 -42 18 -10 20 -23 22 -183 l3 -172 24
-3 23 -4 -7 184 c-3 100 -9 190 -11 199 -5 18 -29 27 -56 21z"/>
<path d="M12536 9522 c-2 -4 8 -52 24 -107 44 -158 46 -193 16 -235 -43 -59
-51 -79 -37 -93 9 -9 19 -3 47 28 43 50 54 75 54 126 0 38 -38 207 -60 263 -9
25 -33 35 -44 18z"/>
<path d="M4475 9496 c-41 -19 -101 -83 -121 -131 -9 -22 -19 -78 -21 -125 -5
-76 -3 -88 17 -112 12 -16 30 -28 40 -28 28 0 45 -26 28 -43 -8 -8 -26 -43
-41 -78 -31 -72 -76 -113 -115 -103 -20 6 -22 13 -22 68 0 64 -11 86 -41 86
-22 0 -33 -29 -14 -36 11 -5 15 -22 15 -61 l0 -54 -42 3 c-39 3 -42 5 -52 43
-9 29 -17 40 -31 40 -17 0 -20 -6 -18 -44 2 -35 -2 -48 -17 -58 -27 -19 -25
-48 5 -70 22 -15 30 -37 50 -135 52 -251 82 -333 120 -333 21 0 23 6 56 150
l23 100 8 -85 c5 -47 10 -116 12 -155 1 -38 6 -78 10 -87 11 -25 1 -35 -45
-42 -52 -8 -112 -64 -129 -121 -6 -22 -14 -89 -17 -150 -4 -89 -1 -130 16
-214 20 -94 20 -104 6 -115 -21 -15 -10 -45 21 -56 19 -8 30 -30 59 -122 19
-62 44 -165 54 -229 11 -63 25 -128 31 -143 8 -21 5 -54 -12 -142 -17 -91 -18
-117 -9 -127 19 -19 39 17 47 84 10 92 20 69 19 -45 0 -88 3 -107 18 -123 10
-10 27 -33 38 -51 11 -19 25 -32 32 -29 7 2 15 28 19 58 3 30 10 67 14 83 4
16 1 73 -6 127 -12 89 -12 99 4 114 16 16 15 45 -4 70 -4 6 -10 44 -14 85 -6
69 -4 83 27 171 39 110 63 209 72 293 3 37 11 64 22 71 12 9 14 21 9 51 -19
124 -19 125 -4 119 30 -12 36 17 23 108 -9 67 -17 93 -35 112 l-23 25 17 137
c21 164 39 247 67 313 19 45 27 52 90 81 65 30 86 50 73 70 -3 5 -14 9 -24 9
-19 0 -19 2 2 45 31 64 19 80 -55 79 -52 -1 -56 0 -54 20 2 17 -4 22 -31 24
-22 2 -34 -2 -38 -12 -3 -9 -15 -16 -25 -16 -14 0 -19 7 -19 30 0 19 -7 34
-20 42 -11 7 -20 20 -20 29 0 9 -6 34 -14 56 -13 38 -13 40 18 69 33 32 63
110 73 193 5 43 3 51 -16 63 -11 7 -21 22 -21 34 0 12 -7 27 -15 34 -13 11
-23 8 -58 -16 -59 -42 -98 -117 -99 -192 0 -49 -2 -53 -9 -27 -22 74 14 197
72 249 49 45 94 48 129 11 20 -21 22 -28 12 -49 -9 -20 -8 -27 5 -37 13 -11
18 -10 35 10 10 14 16 31 13 38 -3 8 -5 21 -5 28 0 8 -16 30 -35 50 -39 39
-77 45 -130 21z m60 -293 c-9 -32 -24 -66 -32 -76 -15 -16 -17 -16 -29 1 -18
26 21 129 51 134 11 2 22 3 23 2 2 -2 -4 -29 -13 -61z m-90 17 c-4 -12 -9 -19
-12 -17 -3 3 -2 15 2 27 4 12 9 19 12 17 3 -3 2 -15 -2 -27z m75 -325 c0 -17
-16 -35 -31 -35 -13 0 -19 7 -19 24 0 19 4 22 25 18 14 -2 25 -6 25 -7z m-320
-70 c0 -10 -11 -15 -35 -15 -24 0 -35 5 -35 15 0 10 11 15 35 15 24 0 35 -5
35 -15z m60 -4 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16 6 0 10
-4 10 -9z m484 -36 c-4 -8 -7 -15 -9 -15 -2 0 -5 7 -9 15 -3 9 0 15 9 15 9 0
12 -6 9 -15z m-114 -15 c0 -6 -7 -27 -16 -48 -13 -32 -16 -35 -25 -19 -16 27
-1 77 22 77 10 0 19 -5 19 -10z m-430 -23 c0 -8 -11 -19 -25 -25 -28 -13 -24
-42 5 -42 12 0 20 -10 24 -31 10 -51 7 -134 -6 -147 -9 -9 -9 -18 0 -37 12
-26 17 -73 7 -63 -7 7 -31 101 -59 230 -16 75 -20 110 -13 117 16 16 67 14 67
-2z m55 3 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
-10z m438 -3 c2 -7 -8 -27 -23 -46 l-28 -33 16 46 c17 47 26 56 35 33z m-181
-101 c-7 -36 -21 -84 -31 -108 l-18 -43 -12 75 c-7 41 -18 94 -26 117 l-13 41
36 9 c30 7 41 5 56 -9 18 -16 19 -23 8 -82z m-241 -8 l-19 -43 -1 47 c-1 37 3
47 17 50 25 5 26 -6 3 -54z m308 -118 c-11 -35 -26 -106 -35 -159 -14 -85 -24
-125 -24 -93 0 7 -9 12 -20 12 -11 0 -20 -4 -20 -10 0 -5 -4 -10 -10 -10 -5 0
-10 9 -10 21 0 14 5 19 14 16 27 -11 34 16 20 72 -13 47 -13 59 0 85 8 17 22
50 31 73 10 25 22 40 29 37 7 -3 19 2 26 11 21 25 21 13 -1 -55z m-198 -93
c-8 -8 -11 5 -10 54 l2 64 10 -53 c7 -39 7 -56 -2 -65z m19 -112 c0 -25 -4
-45 -10 -45 -11 0 -13 33 -4 68 10 34 14 27 14 -23z m-80 -200 c0 -31 -4 -45
-12 -44 -30 4 -36 -4 -42 -55 -5 -33 -13 -57 -22 -60 -10 -4 -14 -23 -14 -68
0 -55 -1 -60 -14 -43 -12 16 -16 17 -30 6 -14 -12 -16 -8 -16 41 0 61 15 159
32 201 14 37 54 67 89 67 28 0 29 -2 29 -45z m-34 -477 c-3 -13 -6 -59 -7
-103 l-1 -80 -14 45 c-11 34 -12 54 -4 81 5 20 10 46 10 58 0 11 5 21 11 21 7
0 9 -9 5 -22z m213 -108 c5 -3 2 -23 -4 -45 -13 -39 -13 -38 -12 40 0 44 2 64
4 45 3 -19 8 -37 12 -40z m-123 3 c-3 -16 -8 -70 -12 -122 -7 -96 -16 -103
-27 -18 -4 31 -3 47 4 47 7 0 9 19 4 60 -7 57 -6 60 15 60 18 0 21 -4 16 -27z
m-29 -380 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m73 -105 c0
-25 -3 -29 -10 -18 -13 20 -13 50 0 50 6 0 10 -15 10 -32z"/>
<path d="M10904 9366 c-11 -7 -30 -16 -44 -19 -14 -3 -56 -12 -94 -21 -38 -8
-83 -24 -102 -35 -72 -43 -278 -53 -424 -20 -118 26 -262 22 -515 -16 -269
-39 -472 -34 -807 21 -123 20 -161 23 -178 14 -35 -19 -17 -35 46 -41 32 -4
137 -19 231 -33 256 -39 503 -39 748 -2 217 34 380 38 471 13 43 -12 100 -17
189 -17 134 0 198 10 256 40 19 11 60 23 90 28 30 5 62 13 73 17 17 7 18 5 12
-31 -16 -103 -17 -296 -2 -454 8 -91 20 -248 26 -350 11 -180 18 -253 40 -433
7 -48 9 -124 5 -170 -4 -45 -7 -121 -7 -169 0 -49 -1 -88 -1 -88 -1 0 -83 -7
-182 -15 -99 -8 -313 -17 -475 -20 -162 -3 -349 -10 -415 -15 -66 -5 -172 -12
-235 -16 -102 -5 -250 -27 -269 -38 -16 -10 -212 -46 -248 -46 -22 0 -73 11
-113 25 -87 29 -185 33 -231 9 -17 -8 -32 -14 -33 -12 -1 2 1 44 5 93 10 129
10 309 -2 390 -16 111 -29 876 -19 1098 5 109 7 204 3 212 -6 18 -29 19 -40 3
-4 -7 -8 -53 -8 -103 0 -49 -1 -233 -3 -407 l-2 -318 -26 10 c-17 7 -47 6 -97
-4 -137 -27 -153 -28 -219 -10 -35 10 -82 26 -105 35 l-43 18 0 56 c0 63 -17
80 -50 50 -19 -18 -21 -17 -57 8 -43 31 -53 27 -53 -17 0 -36 12 -54 53 -79
23 -15 27 -24 27 -65 0 -26 -4 -53 -8 -60 -6 -9 -60 -13 -198 -17 -104 -2
-236 -11 -294 -20 -89 -14 -153 -16 -420 -10 -173 4 -342 10 -375 14 -72 9
-173 1 -360 -28 -94 -15 -204 -24 -338 -27 -210 -5 -269 -16 -332 -66 -23 -18
-39 -20 -118 -19 -51 1 -116 9 -145 17 -39 12 -74 14 -135 9 -70 -6 -85 -4
-96 9 -8 9 -29 16 -48 16 -30 0 -34 -3 -31 -22 5 -38 83 -59 189 -51 64 4 98
2 135 -10 30 -10 78 -15 124 -14 79 2 134 -8 126 -22 -3 -5 1 -14 8 -20 11
-10 19 -7 35 10 18 19 27 21 76 16 44 -4 57 -2 62 9 10 26 -17 44 -64 44 -30
0 -43 4 -41 12 9 27 75 36 262 37 182 1 240 7 472 47 81 14 121 15 385 2 350
-16 521 -16 647 0 258 33 322 37 419 26 l51 -7 -5 -36 c-4 -20 -14 -42 -24
-49 -24 -17 -13 -42 17 -42 64 0 421 147 449 184 6 8 37 19 70 25 32 6 63 17
67 24 5 6 7 -113 5 -268 -4 -282 -13 -355 -42 -355 -22 0 -29 -20 -12 -37 22
-22 53 -8 71 35 16 35 16 30 12 -143 -2 -99 -7 -188 -11 -197 -4 -10 -15 -18
-25 -18 -23 0 -44 -26 -36 -45 7 -19 43 -19 76 0 128 74 165 79 293 35 49 -16
99 -30 111 -30 26 0 185 32 301 60 49 12 147 24 253 30 96 5 178 12 183 15 5
4 188 10 406 15 219 5 465 14 547 21 104 9 151 10 153 2 2 -5 10 -19 18 -29
11 -15 18 -17 32 -8 26 16 28 49 5 87 -29 48 -38 139 -16 172 15 22 16 42 10
143 -4 64 -13 158 -21 207 -8 50 -19 176 -25 280 -6 105 -20 294 -31 420 -21
231 -21 312 3 442 8 46 16 63 30 66 21 6 24 42 4 50 -7 3 -22 0 -32 -7z
m-2700 -945 l50 -19 -53 -11 c-28 -6 -53 -11 -55 -11 -1 0 -1 14 2 30 2 17 5
30 6 30 0 0 23 -8 50 -19z m56 -84 c-36 -18 -82 -43 -102 -56 -39 -24 -44 -23
-29 7 5 9 12 24 15 33 3 11 21 19 53 24 27 3 55 10 63 16 8 5 26 9 40 8 19 0
9 -8 -40 -32z"/>
<path d="M5750 9340 c0 -13 12 -26 35 -37 40 -19 40 -18 21 -69 -18 -52 -27
-215 -18 -339 6 -90 9 -100 26 -100 19 0 20 10 20 200 1 185 3 203 23 244 12
24 19 49 16 57 -6 15 -89 64 -109 64 -8 0 -14 -9 -14 -20z"/>
<path d="M9767 8913 c-15 -14 -7 -55 12 -60 11 -3 23 -21 31 -46 7 -23 34 -98
62 -166 27 -68 48 -133 46 -145 -3 -19 -14 -22 -116 -35 -61 -8 -115 -12 -118
-8 -9 9 17 161 30 169 6 4 11 22 12 41 1 18 4 49 8 68 8 46 -11 74 -43 64 -21
-6 -23 -11 -17 -54 4 -32 1 -55 -9 -75 -9 -16 -14 -34 -12 -40 3 -6 -2 -47 -9
-91 -7 -44 -13 -85 -13 -92 -1 -6 -33 -22 -72 -34 -95 -30 -208 -88 -231 -119
-25 -35 -28 -73 -6 -78 12 -2 21 5 27 21 15 38 64 73 148 105 134 51 127 51
119 1 -11 -74 -40 -154 -55 -154 -19 0 -33 -51 -26 -92 7 -38 22 -50 40 -32
15 16 70 184 80 244 16 102 7 92 98 104 45 6 106 13 134 17 60 7 50 21 109
-141 20 -55 47 -122 59 -150 13 -27 25 -59 27 -70 5 -27 34 -31 48 -5 9 16 8
28 -5 53 -9 18 -41 97 -70 177 -37 101 -52 154 -48 173 4 22 1 29 -14 33 -15
4 -34 40 -73 142 -30 75 -62 164 -72 196 -10 33 -24 66 -30 73 -11 14 -40 17
-51 6z"/>
<path d="M5780 8535 c0 -9 7 -23 15 -31 18 -19 19 -51 2 -124 -18 -79 -16
-105 8 -105 17 0 22 13 37 104 17 100 17 106 0 135 -20 34 -62 48 -62 21z"/>
<path d="M12568 8318 c-39 -63 -43 -98 -13 -98 16 0 68 97 59 111 -9 16 -31
10 -46 -13z"/>
<path d="M2506 8308 c-2 -7 -7 -53 -10 -103 -3 -49 -15 -166 -26 -260 -11 -93
-23 -224 -26 -290 l-7 -120 -50 -50 -49 -50 6 216 c6 227 17 339 43 454 27
124 28 135 5 135 -20 0 -28 -13 -37 -62 -3 -13 -12 -57 -20 -98 -23 -113 -35
-284 -35 -491 l0 -186 -57 -26 c-68 -29 -105 -61 -97 -82 8 -20 17 -19 55 4
41 25 60 16 88 -42 16 -34 21 -64 22 -133 1 -109 16 -169 44 -169 26 0 30 47
15 163 -6 48 -16 127 -20 175 l-9 88 41 37 c22 20 44 39 49 40 5 2 9 -52 9
-121 0 -143 15 -311 33 -365 16 -50 43 -54 62 -10 16 41 69 256 85 348 22 130
32 172 40 164 4 -5 25 -52 45 -104 66 -168 118 -246 140 -210 4 7 13 6 27 -1
53 -28 142 20 182 99 62 122 88 307 50 360 -32 46 -122 19 -207 -62 -48 -45
-88 -144 -90 -225 -1 -38 -5 -67 -9 -63 -4 4 -28 58 -53 121 -50 126 -59 141
-85 141 -40 0 -54 -34 -80 -190 -12 -71 -58 -276 -67 -300 -11 -25 -21 76 -29
274 l-7 189 39 73 c32 60 37 75 26 86 -11 11 -17 9 -33 -11 l-19 -23 0 48 c0
50 42 436 59 533 4 30 5 66 2 80 -8 28 -38 41 -45 19z m568 -724 c16 -40 -7
-124 -33 -124 -24 0 -42 -22 -32 -38 5 -9 17 -11 34 -7 l27 7 -19 -54 c-10
-30 -28 -73 -40 -96 -34 -67 -114 -95 -145 -50 -19 26 -21 123 -6 180 16 58
71 130 125 165 55 36 80 41 89 17z m-774 -244 c0 -5 -2 -10 -4 -10 -3 0 -8 5
-11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z"/>
<path d="M1347 8143 c-9 -18 13 -290 33 -408 26 -157 94 -369 151 -472 34 -61
38 -75 23 -69 -95 37 -283 53 -388 32 l-38 -7 6 48 c11 77 54 258 93 390 34
114 38 122 59 117 12 -3 25 -1 28 5 7 10 -41 111 -53 111 -17 -1 -31 -19 -29
-41 0 -13 -15 -76 -35 -139 -39 -124 -91 -335 -103 -415 -10 -71 -16 -79 -90
-114 -68 -32 -79 -53 -31 -59 14 -2 40 4 57 13 18 9 33 15 35 13 3 -3 -20
-142 -48 -300 -11 -58 -11 -80 -3 -87 29 -24 39 10 83 292 14 89 20 110 37
120 13 7 73 12 161 12 173 0 260 -22 322 -83 34 -32 41 -46 52 -110 14 -80 45
-130 74 -119 24 9 57 66 190 330 l122 240 12 -114 c14 -128 48 -298 62 -312
17 -17 44 1 37 26 -31 118 -48 224 -54 344 -11 209 -29 215 -117 36 -141 -287
-259 -504 -267 -489 -4 8 -12 42 -16 75 -7 48 -6 66 6 82 13 19 13 25 -3 51
-15 26 -17 52 -14 201 4 156 2 172 -13 175 -12 2 -24 -12 -42 -49 -26 -53 -26
-69 0 -69 15 0 17 -66 5 -190 l-6 -65 -48 90 c-125 232 -181 445 -197 745 -5
91 -9 166 -9 168 -2 6 -40 1 -44 -5z"/>
<path d="M5706 8058 c-23 -73 -36 -240 -36 -478 -1 -374 -3 -340 20 -340 23 0
21 -25 24 395 1 136 7 257 15 296 7 36 11 81 9 99 -3 34 -25 53 -32 28z"/>
<path d="M3133 7863 c-14 -34 -7 -247 11 -338 9 -49 44 -172 77 -273 55 -167
62 -183 82 -180 20 3 23 11 30 86 21 234 79 356 199 416 67 34 84 33 83 -1 0
-14 6 -28 12 -30 18 -6 37 41 29 71 -6 23 -11 26 -54 26 -86 0 -192 -81 -247
-187 -14 -28 -35 -93 -45 -143 -10 -51 -21 -94 -23 -96 -9 -9 -88 255 -102
340 -18 107 -19 219 -3 246 9 13 9 27 2 47 -11 33 -41 42 -51 16z"/>
<path d="M12581 7704 c-44 -56 -11 -75 40 -24 17 16 28 34 24 40 -11 18 -43
10 -64 -16z"/>
<path d="M12644 7186 c-3 -9 2 -47 11 -86 11 -43 16 -96 14 -137 -3 -55 -1
-68 11 -68 18 0 39 57 39 105 -1 49 -41 193 -56 198 -7 2 -16 -3 -19 -12z"/>
<path d="M5676 6982 c-3 -6 1 -29 10 -53 9 -25 16 -81 17 -129 2 -68 5 -85 17
-85 11 0 17 19 23 80 7 66 5 90 -10 135 -17 52 -43 75 -57 52z"/>
<path d="M2224 6596 c-4 -9 -2 -22 4 -29 5 -6 28 -75 51 -152 23 -77 60 -180
82 -230 22 -49 43 -95 46 -102 3 -7 -11 -16 -34 -23 -44 -12 -253 -43 -259
-38 -1 2 15 57 37 122 55 162 85 295 80 354 -2 20 -32 13 -57 -14 -27 -28 -31
-54 -9 -54 22 0 19 -25 -20 -157 -46 -159 -81 -245 -107 -265 -17 -12 -20 -19
-11 -30 9 -11 3 -38 -27 -120 -22 -59 -37 -114 -34 -123 14 -34 38 -8 64 70
43 125 52 149 61 161 5 6 48 14 96 18 47 3 122 16 166 27 43 11 80 19 82 17 1
-2 35 -61 76 -131 89 -155 119 -193 143 -184 14 6 16 14 10 39 -11 54 -36 98
-56 98 -11 0 -36 32 -74 96 -31 52 -54 97 -52 98 1 1 22 12 45 24 l42 21 6
-32 c4 -18 5 -50 3 -72 -2 -30 1 -40 14 -43 25 -5 40 59 27 116 -19 85 -37 99
-88 63 -15 -11 -39 -23 -52 -26 -24 -6 -28 -1 -67 84 -39 86 -96 255 -125 371
-11 43 -19 56 -36 58 -12 2 -24 -3 -27 -12z"/>
<path d="M12765 6340 c-3 -6 -3 -20 0 -31 5 -14 0 -28 -15 -44 -22 -23 -22
-55 -1 -55 14 0 70 61 77 84 4 13 -1 25 -17 37 -28 21 -35 23 -44 9z"/>
<path d="M5740 6322 c0 -9 9 -23 20 -30 19 -11 19 -14 5 -41 -8 -16 -17 -47
-21 -68 -5 -32 -3 -41 10 -46 17 -7 18 -5 46 73 24 68 24 80 0 106 -27 28 -60
32 -60 6z"/>
<path d="M5757 5693 c-3 -4 2 -53 9 -108 8 -55 13 -120 12 -145 -3 -39 0 -45
17 -45 18 0 20 8 23 75 3 101 -18 224 -40 228 -9 2 -18 -1 -21 -5z"/>
<path d="M12796 5488 c5 -24 7 -102 5 -175 -3 -149 3 -193 27 -193 15 0 17 19
19 168 3 187 -6 242 -38 242 -19 0 -20 -4 -13 -42z"/>
<path d="M5800 5261 c0 -10 11 -49 25 -85 31 -83 33 -142 5 -151 -25 -8 -27
-45 -2 -45 31 0 61 29 68 66 10 52 -50 234 -77 234 -12 0 -19 -7 -19 -19z"/>
<path d="M12870 4760 c0 -12 9 -38 20 -60 24 -47 25 -97 5 -164 -20 -67 -19
-86 5 -86 13 0 22 9 26 28 3 15 12 49 20 76 20 71 18 93 -16 164 -29 62 -60
83 -60 42z"/>
<path d="M5798 4748 c-3 -7 -1 -58 4 -113 4 -55 4 -128 0 -163 -7 -49 -6 -65
5 -74 28 -23 38 9 41 130 4 143 -7 226 -29 230 -9 2 -19 -3 -21 -10z"/>
<path d="M5834 4165 c-4 -9 -4 -41 0 -71 5 -44 3 -54 -9 -54 -19 0 -20 -36 -1
-43 7 -3 23 1 35 9 17 12 21 25 20 67 -1 63 -10 99 -27 105 -6 2 -15 -4 -18
-13z"/>
<path d="M12906 4022 c-3 -4 -4 -32 -4 -60 1 -38 -6 -66 -25 -104 -34 -70 -39
-113 -12 -113 12 0 21 8 23 20 2 11 17 48 33 82 25 51 29 72 27 120 -2 44 -7
59 -20 61 -9 2 -19 -1 -22 -6z"/>
<path d="M4515 3916 c-42 -19 -101 -83 -121 -131 -9 -22 -19 -74 -22 -117 -6
-95 8 -136 49 -145 41 -8 56 -29 36 -51 -8 -9 -27 -44 -41 -77 -30 -68 -76
-108 -114 -99 -20 6 -22 13 -22 68 0 64 -11 86 -41 86 -26 0 -35 -21 -16 -35
12 -9 17 -27 17 -64 l0 -52 -42 3 c-39 3 -42 5 -52 43 -9 29 -17 40 -31 40
-17 0 -20 -6 -18 -44 2 -35 -2 -48 -17 -58 -27 -19 -25 -48 5 -70 22 -15 30
-37 50 -135 52 -251 82 -333 120 -333 21 0 23 6 56 150 l23 100 8 -85 c5 -47
10 -116 12 -155 1 -38 6 -78 10 -87 11 -25 1 -35 -45 -42 -52 -8 -112 -64
-129 -121 -6 -22 -14 -92 -17 -155 -4 -94 -1 -132 16 -210 19 -87 20 -96 5
-107 -21 -16 -9 -51 21 -63 20 -8 30 -29 60 -122 19 -62 44 -165 54 -229 11
-63 25 -128 31 -143 8 -21 5 -54 -11 -143 -17 -89 -19 -117 -10 -126 19 -18
39 16 47 79 11 89 20 70 19 -41 0 -93 2 -106 21 -123 11 -11 26 -34 34 -51 20
-50 44 -37 52 29 3 30 10 68 14 84 4 16 1 73 -6 127 -12 88 -11 99 3 114 21
20 20 17 2 61 -8 20 -16 73 -17 118 -2 68 2 92 25 151 35 91 63 204 72 287 4
46 11 68 22 72 13 5 14 16 9 54 -19 121 -19 122 -5 117 34 -12 39 8 24 104
-10 70 -20 100 -36 117 l-22 24 17 137 c21 164 39 247 67 313 19 44 27 52 95
85 53 27 74 42 72 54 -2 9 -13 17 -25 19 l-22 3 22 45 c30 63 18 79 -56 78
-52 -1 -56 0 -54 20 2 17 -4 22 -31 24 -22 2 -34 -2 -38 -12 -3 -9 -15 -16
-25 -16 -14 0 -19 7 -19 30 0 19 -7 34 -20 42 -11 7 -20 22 -21 33 0 11 -6 36
-13 55 -12 32 -11 36 18 65 33 33 63 113 73 194 5 43 3 51 -16 63 -11 7 -21
22 -21 34 0 35 -24 48 -57 31 -66 -35 -114 -121 -115 -206 -1 -49 -2 -52 -8
-23 -10 44 3 150 24 189 8 17 32 45 53 62 47 39 90 41 123 6 20 -21 22 -28 12
-49 -9 -20 -8 -27 5 -37 13 -11 18 -10 33 8 39 49 -14 141 -85 149 -23 2 -53
-2 -70 -10z m60 -293 c-9 -32 -24 -66 -32 -76 -15 -16 -17 -16 -29 1 -18 26
21 129 51 134 11 2 22 3 23 2 2 -2 -4 -29 -13 -61z m-90 17 c-4 -12 -9 -19
-12 -17 -3 3 -2 15 2 27 4 12 9 19 12 17 3 -3 2 -15 -2 -27z m73 -339 c-2 -9
-13 -17 -26 -19 -18 -3 -22 1 -22 21 0 21 4 23 25 19 17 -3 25 -10 23 -21z
m-318 -56 c0 -10 -11 -15 -35 -15 -24 0 -35 5 -35 15 0 10 11 15 35 15 24 0
35 -5 35 -15z m60 -4 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16
6 0 10 -4 10 -9z m484 -36 c-4 -8 -7 -15 -9 -15 -2 0 -5 7 -9 15 -3 9 0 15 9
15 9 0 12 -6 9 -15z m-118 -21 c-3 -9 -9 -27 -12 -40 -12 -47 -37 -24 -28 25
5 22 12 31 26 31 14 0 18 -5 14 -16z m-426 -18 c0 -8 -9 -18 -20 -21 -26 -8
-27 -45 -1 -45 13 0 20 -10 25 -31 10 -51 7 -134 -6 -147 -9 -9 -9 -18 0 -37
12 -26 17 -73 6 -63 -3 3 -22 79 -44 169 -27 116 -35 168 -28 176 15 18 68 17
68 -1z m55 4 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
-10z m438 -3 c2 -7 -8 -27 -23 -46 l-28 -33 16 46 c17 47 26 56 35 33z m-183
-22 c16 -19 1 -118 -29 -187 l-18 -43 -12 75 c-7 41 -18 94 -26 117 -12 38
-12 42 3 46 37 10 70 6 82 -8z m-239 -87 l-19 -43 -1 47 c-1 37 3 47 17 50 25
5 26 -6 3 -54z m308 -118 c-11 -35 -26 -106 -35 -159 -14 -85 -24 -125 -24
-93 0 7 -9 12 -20 12 -11 0 -20 -4 -20 -10 0 -5 -4 -10 -10 -10 -5 0 -10 9
-10 21 0 14 5 19 14 16 27 -11 34 16 20 72 -13 47 -13 59 0 85 8 17 21 48 30
69 8 20 21 37 29 37 8 0 20 7 27 15 21 25 20 13 -1 -55z m-198 -93 c-8 -8 -11
5 -10 54 l2 64 10 -53 c7 -39 7 -56 -2 -65z m10 -150 c-13 -13 -15 24 -3 63 6
22 7 21 10 -14 2 -21 -1 -43 -7 -49z m-71 -163 c0 -34 -3 -45 -13 -41 -24 9
-36 -8 -41 -57 -2 -31 -9 -52 -20 -58 -12 -7 -16 -24 -16 -71 0 -40 -3 -57 -9
-48 -5 8 -18 12 -30 8 -19 -5 -21 -1 -21 47 0 60 16 158 32 199 14 37 54 67
89 67 28 0 29 -2 29 -46z m-34 -476 c-3 -13 -6 -59 -7 -103 l0 -80 -15 49
c-12 36 -13 55 -5 79 6 16 11 41 11 53 0 13 5 24 11 24 7 0 9 -9 5 -22z m213
-108 c5 -3 2 -23 -4 -45 -13 -39 -13 -37 -12 45 0 47 2 67 4 45 3 -22 8 -42
12 -45z m-122 -2 c-3 -18 -9 -73 -13 -122 -7 -91 -18 -97 -26 -13 -4 28 -2 47
5 47 6 0 7 19 3 50 -7 55 -3 70 21 70 12 0 14 -7 10 -32z m-30 -375 c-3 -10
-5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m73 -105 c0 -25 -3 -29 -10
-18 -13 20 -13 50 0 50 6 0 10 -15 10 -32z"/>
<path d="M2029 3878 c-23 -43 -10 -225 27 -372 15 -57 15 -59 -7 -82 -18 -19
-25 -21 -30 -11 -8 13 -61 268 -74 355 -7 43 -28 63 -46 45 -8 -8 51 -335 77
-431 6 -19 -1 -25 -55 -50 -37 -16 -60 -33 -61 -43 0 -17 100 -118 138 -138
39 -21 52 -8 52 51 -1 29 -5 73 -10 98 -7 39 -6 48 13 68 11 12 24 22 28 22 4
0 19 -49 33 -108 15 -59 31 -114 36 -121 14 -23 39 -4 45 36 20 112 54 201 74
189 4 -3 20 -36 35 -74 32 -83 58 -111 81 -92 9 7 14 19 11 25 -2 7 11 19 29
28 19 9 42 29 52 44 9 15 28 38 40 50 40 38 26 143 -19 143 -44 0 -141 -85
-154 -135 -6 -25 -7 -24 -26 15 -22 45 -58 61 -85 39 -20 -17 -63 -107 -63
-133 0 -33 -11 -11 -29 62 -18 67 -18 70 0 93 10 13 19 32 19 43 0 15 -5 17
-29 13 -28 -6 -28 -5 -45 70 -20 93 -32 234 -18 214 14 -19 42 -6 42 19 0 11
-7 36 -14 55 -17 41 -49 47 -67 13z m471 -439 c0 -26 -85 -129 -106 -129 -36
0 -4 83 48 124 40 31 58 33 58 5z m-506 -146 c3 -10 8 -35 12 -57 6 -35 5 -37
-12 -28 -11 6 -32 24 -48 40 l-28 30 28 16 c37 20 42 20 48 -1z"/>
<path d="M5786 3891 c-3 -5 8 -38 24 -75 32 -69 37 -100 19 -111 -17 -11 -28
-49 -17 -62 11 -13 38 -6 38 10 0 6 7 19 17 29 23 26 18 77 -16 153 -27 60
-51 80 -65 56z"/>
<path d="M10718 3754 c-8 -17 -27 -32 -48 -39 -37 -12 -52 -42 -29 -56 28 -17
-5 -22 -129 -20 -109 2 -136 -1 -181 -18 -64 -26 -148 -27 -222 -4 -44 14 -85
16 -224 13 -199 -4 -404 -3 -675 1 -229 4 -268 -4 -283 -61 -6 -24 -5 -35 5
-41 22 -14 42 -5 48 21 12 50 137 61 390 34 131 -14 177 -15 305 -5 222 17
346 14 435 -9 99 -26 146 -25 224 4 61 23 74 24 191 19 122 -6 126 -5 150 17
14 13 25 35 25 49 l0 25 21 -23 c19 -21 21 -33 20 -139 -1 -64 3 -180 8 -257
6 -77 16 -227 21 -334 11 -202 25 -325 60 -525 12 -69 17 -123 11 -130 -4 -6
-11 -42 -14 -79 -4 -37 -9 -72 -11 -76 -3 -5 -45 -11 -93 -15 -105 -8 -274
-38 -398 -71 -160 -42 -246 -54 -450 -64 -140 -7 -221 -16 -270 -29 -249 -68
-259 -70 -405 -76 l-145 -5 3 114 c2 72 -4 182 -18 300 -17 150 -18 195 -9
223 14 42 7 206 -16 372 -9 66 -18 219 -21 360 -2 135 -6 251 -9 258 -2 6 -14
12 -25 12 -18 0 -20 -7 -21 -62 -1 -35 -4 -74 -8 -88 -5 -15 -3 -35 5 -51 7
-15 13 -66 13 -125 1 -54 5 -146 11 -204 13 -144 12 -160 -4 -160 -8 0 -16 6
-19 14 -4 11 -14 12 -44 5 -57 -13 -83 -11 -83 6 0 21 -27 19 -65 -5 -29 -18
-39 -19 -86 -9 -98 19 -144 38 -154 62 -12 26 -77 45 -170 49 -55 3 -60 1 -63
-19 -3 -23 24 -36 108 -48 71 -11 80 -19 80 -73 0 -26 -9 -65 -19 -87 -16 -35
-24 -42 -67 -53 -27 -7 -75 -23 -107 -37 l-58 -23 -102 24 c-155 38 -225 42
-288 14 -49 -20 -57 -21 -132 -10 -84 12 -133 6 -225 -27 -47 -17 -146 -12
-436 23 -107 13 -148 14 -242 4 -87 -9 -132 -9 -195 1 -54 8 -150 10 -274 7
-151 -4 -206 -2 -270 11 -77 15 -80 17 -83 46 -3 35 -22 85 -31 85 -19 0 -28
-25 -24 -64 l5 -43 -78 -6 c-44 -3 -102 -15 -130 -26 -36 -14 -88 -22 -180
-27 -143 -7 -176 0 -167 36 8 30 -23 37 -47 10 -24 -28 -17 -45 34 -75 41 -24
43 -24 181 -14 90 6 160 16 195 29 30 10 86 22 123 26 l68 7 -7 -40 c-4 -28
-2 -43 6 -48 16 -10 40 21 40 52 0 27 -4 27 90 7 59 -12 106 -14 223 -8 98 4
195 2 285 -6 99 -9 167 -10 247 -3 81 7 134 6 200 -3 127 -18 340 -36 404 -34
30 1 71 8 90 17 28 13 69 17 181 17 97 1 152 5 167 14 35 20 144 14 249 -13
117 -30 129 -31 189 -4 40 18 51 19 71 9 12 -7 30 -10 39 -6 15 5 16 1 9 -31
-4 -21 -8 -50 -9 -65 -1 -16 -9 -36 -17 -45 -39 -45 -42 -83 -7 -83 32 0 177
57 237 94 31 19 120 87 197 150 77 64 141 113 142 109 2 -5 16 -107 33 -228
30 -217 50 -468 47 -595 l-2 -65 80 4 c44 2 123 4 175 6 73 2 124 11 220 38
191 55 201 57 415 67 150 7 231 16 319 35 65 14 122 27 126 30 19 12 259 55
361 66 99 9 113 9 129 -6 17 -15 19 -15 34 7 18 25 22 68 6 68 -16 0 -12 70 5
86 8 9 13 25 11 37 -3 12 -8 49 -11 82 -3 33 -12 94 -20 135 -41 219 -66 569
-71 1030 l-4 275 -29 3 c-24 3 -32 -2 -43 -24z m-2073 -993 c-12 -12 -16 -11
-30 3 -18 17 -22 16 -73 -21 l-33 -25 7 29 c14 64 7 61 79 43 55 -13 62 -17
50 -29z m138 -16 c-23 -32 -36 -32 -21 0 6 14 17 25 25 25 11 0 10 -6 -4 -25z
m-81 -17 c-7 -7 -12 -8 -12 -2 0 14 12 26 19 19 2 -3 -1 -11 -7 -17z m285 -20
c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m-177 -41 c-8 -7 -44
-38 -80 -67 -43 -36 -55 -43 -35 -21 17 19 50 49 75 67 46 34 66 45 40 21z
m-115 -15 c-16 -11 -208 -137 -223 -146 -21 -13 -3 43 30 91 22 33 36 44 66
48 20 4 42 8 47 10 20 7 90 4 80 -3z m-35 -106 c0 -2 -8 -10 -17 -17 -16 -13
-17 -12 -4 4 13 16 21 21 21 13z m-150 -89 c0 -11 -29 -26 -90 -44 -8 -3 5 9
30 26 50 34 60 37 60 18z"/>
<path d="M1307 3764 c-3 -4 -4 -26 0 -50 3 -23 2 -51 -2 -61 -4 -10 -9 -27
-11 -38 -2 -11 -19 -74 -39 -140 -20 -66 -38 -132 -40 -146 -5 -38 -43 -147
-72 -207 -26 -55 -25 -86 3 -80 16 3 70 124 99 223 l15 54 58 6 c31 3 67 8 79
10 19 4 25 -5 52 -76 17 -45 34 -92 37 -105 7 -28 29 -48 44 -39 13 8 11 126
-3 190 -10 43 -17 53 -48 68 -32 15 -40 27 -67 100 -41 110 -43 120 -57 212
-8 57 -15 81 -26 83 -8 1 -18 0 -22 -4z m59 -297 l31 -82 -36 -7 c-62 -12 -81
-10 -81 10 0 24 42 162 49 162 3 0 20 -37 37 -83z"/>
<path d="M2574 3645 c-4 -9 5 -68 19 -133 15 -64 29 -137 33 -162 4 -25 11
-51 17 -58 17 -21 37 7 37 52 0 66 42 140 94 165 50 25 85 27 100 5 14 -19 46
-9 46 15 0 29 -22 41 -75 41 -69 -1 -128 -29 -161 -80 -33 -49 -34 -47 -54 70
-13 74 -24 100 -42 100 -5 0 -11 -7 -14 -15z"/>
<path d="M1568 3513 c-33 -38 11 -300 60 -355 31 -36 51 -22 87 57 19 42 38
87 41 100 3 14 9 25 13 25 3 0 19 -34 35 -75 29 -77 47 -102 66 -90 18 11 11
69 -10 87 -10 9 -31 56 -46 103 -14 47 -31 88 -36 91 -16 10 -34 -18 -51 -81
-18 -68 -65 -180 -73 -173 -2 3 -14 32 -26 64 -16 44 -21 84 -22 158 -1 103
-9 122 -38 89z"/>
<path d="M9870 3293 c-93 -17 -287 -149 -355 -241 -43 -58 -77 -145 -73 -186
5 -50 29 -37 45 24 26 101 83 175 207 267 32 23 61 43 65 43 3 0 6 -102 7
-228 1 -185 5 -253 23 -367 30 -184 36 -254 23 -267 -7 -7 -35 7 -92 48 -45
33 -88 63 -96 69 -9 6 -17 6 -25 -2 -10 -10 -8 -17 6 -33 39 -43 192 -144 247
-163 56 -19 57 -19 90 0 33 19 94 119 188 307 39 77 39 79 23 107 -9 16 -52
63 -94 105 l-76 76 29 77 c16 42 33 108 37 147 21 180 -32 244 -179 217z m127
-74 c28 -53 11 -182 -38 -302 -15 -38 -25 -75 -23 -82 3 -6 32 -36 65 -65 32
-29 73 -70 90 -91 l31 -39 -83 -153 c-90 -167 -112 -197 -143 -197 -38 0 -47
13 -34 47 9 24 7 56 -11 164 -31 189 -40 275 -48 424 -5 111 -3 135 11 163 17
34 14 70 -10 109 -13 21 -11 22 34 37 92 29 139 25 159 -15z"/>
<path d="M5883 3273 c-4 -9 -2 -18 5 -21 8 -2 9 -38 5 -121 -7 -142 1 -211 25
-211 15 0 17 17 17 173 0 94 -4 178 -8 185 -12 17 -37 15 -44 -5z"/>
<path d="M12924 3148 c-6 -7 -10 -49 -9 -93 1 -61 5 -80 15 -80 26 0 41 46 34
105 -7 61 -24 90 -40 68z"/>
<path d="M1894 2590 c-97 -20 -167 -70 -199 -140 -21 -46 -13 -75 21 -75 14 0
18 6 16 24 -3 31 32 85 71 110 102 62 342 56 377 -10 25 -46 -1 -138 -49 -177
-23 -18 -108 -62 -121 -62 -5 0 -10 15 -10 34 0 37 -15 49 -42 35 -14 -7 -15
-15 -6 -45 8 -32 7 -38 -12 -51 -11 -8 -19 -20 -17 -26 2 -7 -3 -17 -11 -23
-9 -7 -13 -18 -9 -28 5 -13 14 -16 41 -11 30 6 34 4 41 -22 5 -15 9 -73 10
-128 2 -90 4 -100 21 -100 15 0 20 10 26 50 7 48 -4 162 -18 200 -7 17 -2 18
77 12 100 -7 171 -31 216 -73 55 -52 41 -124 -42 -213 -61 -65 -113 -85 -200
-79 -82 7 -145 37 -270 130 -60 44 -101 68 -111 64 -26 -10 -11 -28 82 -98
104 -79 191 -124 266 -139 139 -28 285 59 339 202 23 61 24 79 2 124 -34 71
-132 115 -278 124 l-100 6 60 28 c85 40 119 70 149 129 32 64 33 114 4 158
-36 53 -86 72 -191 76 -51 2 -110 -1 -133 -6z"/>
<path d="M13047 2308 c15 -78 10 -125 -17 -153 -17 -18 -21 -28 -13 -36 18
-18 45 -6 65 31 16 28 18 48 14 100 -6 81 -13 100 -38 100 -18 0 -19 -4 -11
-42z"/>
<path d="M5932 1898 c-14 -17 7 -108 26 -115 24 -10 31 10 21 59 -12 53 -30
75 -47 56z"/>
<path d="M13006 1742 c-3 -5 6 -43 20 -83 21 -61 25 -88 22 -153 -3 -87 8
-106 38 -61 14 21 16 40 11 99 -11 124 -64 241 -91 198z"/>
<path d="M5995 1360 c-10 -16 14 -118 33 -136 14 -15 17 -15 28 1 10 13 10 23
3 37 -6 10 -13 38 -17 61 -7 41 -32 61 -47 37z"/>
<path d="M13062 1237 c-12 -17 1 -62 18 -62 21 0 26 61 6 68 -8 3 -19 0 -24
-6z"/>
<path d="M5842 797 c-8 -10 -1 -54 29 -178 23 -90 45 -207 50 -259 4 -52 8
-96 9 -97 0 -2 10 -3 21 -3 21 0 22 3 16 86 -3 47 -23 156 -43 242 -20 86 -40
170 -43 186 -7 34 -23 43 -39 23z"/>
<path d="M12818 743 c-9 -19 -39 -42 -98 -73 -47 -25 -107 -60 -133 -78 -27
-18 -66 -41 -88 -52 -37 -20 -50 -42 -29 -55 11 -7 66 20 146 73 32 21 96 58
142 82 85 44 106 65 100 102 -5 32 -25 33 -40 1z"/>
<path d="M11192 453 c3 -19 51 -31 125 -32 46 -1 61 12 43 34 -9 11 -35 15
-92 15 -70 0 -79 -2 -76 -17z"/>
<path d="M10620 431 c0 -21 40 -31 132 -31 60 0 78 11 58 35 -9 11 -36 15
-101 15 -80 0 -89 -2 -89 -19z"/>
<path d="M11781 420 c-25 -16 -43 -20 -65 -15 -90 18 -98 18 -94 0 4 -24 94
-58 134 -50 18 3 37 12 44 20 21 25 125 19 195 -11 146 -64 160 -66 227 -48
60 17 80 36 60 56 -7 7 -24 5 -56 -7 -55 -21 -82 -17 -196 32 -109 47 -198 55
-249 23z"/>
<path d="M9637 423 c-27 -27 39 -69 125 -79 42 -5 56 -3 67 9 20 25 5 36 -48
35 -30 0 -64 8 -89 21 -46 24 -46 24 -55 14z"/>
<path d="M8340 391 c0 -20 -115 -53 -195 -56 -70 -3 -80 -5 -80 -22 0 -40 198
-22 280 25 37 22 47 62 16 62 -12 0 -21 -4 -21 -9z"/>
<path d="M9123 384 c-4 -11 1 -22 13 -30 30 -21 42 -33 52 -50 11 -19 42 -13
42 9 0 19 -52 75 -78 82 -16 5 -24 1 -29 -11z"/>
<path d="M7300 333 c-62 -16 -90 -37 -73 -54 7 -7 29 -5 74 7 87 24 226 24
309 1 74 -21 125 -20 125 3 0 8 -11 16 -25 18 -14 2 -58 12 -99 23 -90 23
-230 24 -311 2z"/>
<path d="M8728 333 c-68 -3 -78 -6 -78 -23 0 -14 10 -20 40 -25 52 -9 136 3
150 20 15 18 4 36 -18 33 -9 -1 -52 -4 -94 -5z"/>
<path d="M10150 324 c0 -8 14 -27 30 -41 18 -15 30 -34 30 -49 0 -29 25 -32
40 -4 19 36 -36 110 -82 110 -10 0 -18 -7 -18 -16z"/>
<path d="M6194 265 c-20 -52 121 -88 219 -56 44 15 49 48 7 43 -135 -15 -141
-15 -170 7 -34 25 -49 26 -56 6z"/>
<path d="M6120 251 c0 -26 17 -36 35 -21 18 15 8 40 -16 40 -12 0 -19 -7 -19
-19z"/>
<path d="M7073 263 c-54 -3 -63 -7 -63 -23 0 -35 121 -40 150 -5 13 16 5 36
-13 33 -7 -1 -40 -3 -74 -5z"/>
<path d="M6705 189 c-12 -19 12 -32 69 -37 46 -4 57 -1 62 12 4 9 4 19 1 22
-11 11 -126 14 -132 3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1,625 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="2106.000000pt" height="1066.000000pt" viewBox="0 0 2106.000000 1066.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,1066.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M18774 10618 c-26 -51 -92 -107 -171 -145 -51 -23 -73 -39 -73 -52 0
-14 -17 -23 -72 -39 -148 -42 -296 -71 -401 -78 -91 -6 -107 -9 -105 -23 3
-14 20 -16 118 -14 181 2 475 79 592 155 67 42 158 162 158 207 0 32 -27 25
-46 -11z"/>
<path d="M17828 10595 c-14 -13 -49 -57 -77 -97 -27 -40 -65 -82 -83 -92 -26
-16 -30 -16 -20 -4 26 32 -15 53 -144 78 -66 12 -180 40 -254 61 -135 39 -233
49 -300 30 -31 -9 -36 -48 -5 -43 86 14 185 5 280 -25 55 -18 159 -44 230 -58
126 -25 175 -41 175 -55 0 -4 -18 -14 -41 -23 -30 -12 -40 -21 -37 -34 5 -24
28 -20 108 20 43 21 74 46 95 73 16 23 46 63 65 89 19 27 44 53 55 59 40 22
41 46 2 46 -12 0 -34 -11 -49 -25z"/>
<path d="M16109 10519 c-14 -21 -15 -21 -122 -5 -189 28 -219 22 -320 -69 -37
-33 -84 -64 -117 -76 -63 -24 -117 -23 -470 7 -271 22 -331 18 -665 -55 -104
-23 -120 -29 -120 -46 0 -25 -8 -25 205 18 320 66 305 65 775 22 230 -22 313
-4 414 89 47 43 91 76 102 76 3 0 5 -10 5 -22 -1 -22 2 -23 129 -29 101 -5
140 -4 174 8 32 11 80 14 180 12 117 -3 136 -1 139 13 4 23 -20 29 -150 35
-106 5 -118 8 -118 25 0 24 -24 23 -41 -3z"/>
<path d="M19094 10485 c-8 -20 5 -38 23 -31 16 6 15 5 -29 -61 -44 -64 -60
-109 -45 -121 16 -14 29 -4 45 31 7 16 33 60 58 98 25 39 43 77 40 85 -7 19
-85 19 -92 -1z"/>
<path d="M6973 10454 c-24 -6 -38 -30 -21 -40 5 -4 52 -6 104 -5 101 2 116 -1
389 -88 233 -75 310 -87 469 -72 72 7 138 13 146 14 24 3 17 31 -10 37 -13 3
-58 2 -100 -3 -41 -5 -120 -6 -175 -4 -103 5 -136 14 -470 118 -127 39 -267
57 -332 43z"/>
<path d="M10220 10413 c-87 -39 -204 -63 -305 -63 -101 0 -129 -8 -118 -36 10
-26 195 -18 299 11 134 39 194 65 194 87 0 22 -23 23 -70 1z"/>
<path d="M8753 10390 c-41 -18 -55 -42 -33 -55 5 -3 23 1 39 9 43 23 158 31
221 16 33 -8 85 -35 141 -73 79 -53 97 -61 147 -65 64 -5 110 10 167 54 46 35
59 58 41 73 -11 9 -24 3 -60 -28 -54 -46 -109 -66 -159 -57 -19 4 -68 30 -108
58 -103 72 -150 88 -262 88 -69 0 -103 -5 -134 -20z"/>
<path d="M10614 10379 c-11 -19 13 -32 134 -75 64 -23 137 -49 162 -59 67 -25
162 -17 224 19 66 38 48 52 -35 26 -76 -24 -120 -25 -174 -4 -67 26 -290 104
-297 104 -4 0 -10 -5 -14 -11z"/>
<path d="M6700 10334 c-88 -29 -219 -53 -311 -60 -79 -5 -109 -3 -189 17 -84
21 -118 24 -305 24 -222 0 -280 -9 -273 -44 4 -17 9 -17 108 -1 83 15 332 6
425 -15 148 -33 165 -35 260 -25 94 10 285 50 338 72 17 6 27 17 25 27 -4 21
-24 22 -78 5z"/>
<path d="M2349 10324 c-48 -14 -119 -80 -119 -109 0 -21 -57 -101 -112 -155
-49 -49 -50 -50 -26 -127 9 -32 31 -43 43 -23 3 5 1 26 -4 47 -10 34 -8 39 24
70 19 19 42 47 50 64 15 28 16 29 40 13 44 -29 51 -9 30 77 -5 20 0 33 27 61
64 68 215 73 345 12 70 -33 196 -128 251 -188 42 -46 72 -55 72 -22 0 23 -117
131 -208 192 -108 74 -194 104 -292 103 -41 0 -96 -7 -121 -15z"/>
<path d="M3196 10299 c-47 -37 -20 -70 28 -34 33 25 100 17 326 -34 212 -49
393 -81 462 -81 53 0 198 28 213 42 6 5 3 14 -7 24 -13 14 -22 14 -50 5 -117
-39 -221 -32 -520 35 -270 60 -290 63 -359 64 -52 0 -72 -4 -93 -21z"/>
<path d="M3970 10307 c0 -9 4 -19 10 -22 5 -3 90 -10 187 -15 179 -9 275 -28
272 -54 -4 -34 1 -36 94 -36 52 0 144 -9 205 -20 193 -35 493 -63 508 -47 4 3
4 12 1 19 -3 10 -58 19 -189 31 -101 10 -234 27 -294 38 -60 11 -150 22 -201
26 -51 3 -90 10 -87 14 7 12 -34 35 -96 54 -37 11 -112 18 -232 22 -159 5
-178 4 -178 -10z"/>
<path d="M13515 10304 c-16 -3 -91 -13 -165 -24 -74 -11 -162 -21 -195 -23
-54 -2 -60 -4 -63 -24 -3 -22 0 -23 57 -23 33 0 129 11 213 25 84 13 188 27
231 31 65 5 78 9 75 22 -3 13 -16 17 -63 18 -33 1 -73 0 -90 -2z"/>
<path d="M12355 10273 c-49 -9 -157 -15 -280 -17 -171 -2 -200 -5 -203 -18 -4
-23 27 -28 200 -28 108 0 200 6 295 21 88 13 172 19 233 17 89 -3 95 -2 95 17
0 19 -7 20 -130 22 -79 1 -161 -5 -210 -14z"/>
<path d="M6770 10261 c0 -17 11 -20 108 -26 59 -3 139 -13 179 -21 40 -8 102
-14 138 -14 57 0 65 2 65 19 0 16 -11 19 -81 26 -45 3 -111 13 -148 21 -36 7
-110 14 -163 14 -90 0 -98 -2 -98 -19z"/>
<path d="M5905 10170 c-11 -5 -41 -9 -66 -9 -32 -1 -49 -6 -52 -16 -7 -16 -3
-20 36 -29 17 -4 51 0 83 9 42 12 54 20 54 35 0 21 -20 25 -55 10z"/>
<path d="M3115 9750 c-120 -13 -319 -83 -357 -127 -10 -10 -19 -34 -20 -53 -3
-31 0 -35 22 -35 21 0 25 5 25 30 0 26 7 33 55 57 30 15 93 40 140 55 85 28
85 28 416 31 l331 3 17 -45 c13 -33 23 -46 37 -46 24 0 24 23 -1 78 -12 26
-29 46 -45 52 -30 11 -513 11 -620 0z"/>
<path d="M9821 9653 c-33 -72 -40 -434 -15 -719 11 -136 12 -184 4 -205 -15
-36 9 -123 45 -161 20 -22 35 -28 68 -28 54 1 122 31 169 77 l36 35 16 -30 c8
-16 32 -41 53 -54 51 -31 150 -32 209 -1 45 24 134 116 134 139 0 8 4 14 9 14
5 0 15 16 22 35 7 19 18 35 24 35 23 0 116 -31 113 -38 -65 -126 -79 -163 -68
-176 14 -18 40 -10 40 11 0 8 16 46 36 84 43 81 47 82 147 39 87 -37 155 -91
159 -128 4 -35 41 -39 46 -4 8 52 -80 129 -199 177 l-80 32 94 104 c52 57 99
114 106 127 13 24 8 42 -13 42 -13 0 -76 -61 -76 -74 0 -4 -35 -47 -77 -94
-85 -95 -84 -95 -179 -67 -52 15 -54 17 -54 50 0 48 -19 84 -47 92 -14 3 -57
3 -96 1 -80 -5 -151 -32 -209 -78 l-36 -29 -7 62 c-19 159 -71 188 -224 121
-31 -14 -70 -39 -87 -56 l-32 -30 -7 34 c-10 43 -10 475 0 557 4 37 10 58 15
51 13 -22 40 -3 40 28 0 56 -57 73 -79 25z m319 -671 c25 -92 5 -219 -46 -293
-32 -47 -104 -96 -152 -105 -31 -6 -39 -3 -59 20 -27 32 -29 51 -8 73 13 13
15 33 9 124 -8 123 -2 140 61 179 53 33 146 60 167 49 9 -5 22 -26 28 -47z
m374 -62 c19 -7 26 -17 26 -35 0 -30 -4 -30 -66 -6 -27 11 -58 23 -69 26 -19
7 -18 8 5 15 36 11 75 11 104 0z m-184 -54 c0 -32 20 -44 36 -21 14 19 27 18
112 -12 48 -16 52 -20 46 -43 -3 -14 -14 -33 -25 -43 -11 -10 -17 -22 -14 -28
10 -15 -35 -69 -83 -100 -37 -24 -57 -29 -105 -29 -54 0 -62 3 -94 35 -33 33
-35 39 -30 80 6 56 44 116 99 155 50 36 58 37 58 6z"/>
<path d="M9135 9552 c-15 -11 -13 -850 3 -1062 20 -269 23 -284 49 -288 19 -3
23 3 28 42 5 29 3 51 -4 60 -25 29 -42 389 -40 816 2 229 -1 421 -5 428 -8 14
-17 15 -31 4z"/>
<path d="M2184 9515 c-9 -14 -25 -58 -35 -97 -14 -52 -26 -79 -45 -94 -22 -18
-25 -26 -19 -55 4 -19 13 -43 20 -55 7 -11 20 -44 29 -73 8 -29 26 -65 40 -81
25 -30 48 -87 62 -155 6 -25 15 -40 24 -40 38 0 16 114 -39 206 -21 35 -44 81
-51 102 -7 22 -18 51 -26 65 -18 36 -18 44 5 64 11 9 25 36 31 60 6 24 20 68
30 99 24 67 24 65 5 73 -9 3 -21 -4 -31 -19z"/>
<path d="M19169 9258 c-1 -7 0 -27 1 -45 1 -26 -7 -41 -44 -78 -51 -52 -87
-120 -90 -168 -2 -52 26 -40 48 21 11 31 40 76 72 112 59 66 71 95 57 137 -10
29 -42 45 -44 21z"/>
<path d="M11840 9102 c-107 -40 -273 -156 -316 -222 -24 -36 -26 -43 -14 -65
20 -37 55 -45 205 -48 123 -2 146 -5 187 -25 93 -46 173 -162 199 -290 18 -87
1 -139 -56 -166 -37 -19 -43 -19 -116 -4 -83 17 -295 101 -453 180 -92 45
-126 53 -126 29 0 -18 99 -71 270 -144 214 -91 295 -117 370 -117 128 0 186
100 149 260 -26 114 -126 247 -219 292 -38 19 -68 23 -197 28 -106 4 -157 10
-165 19 -26 26 184 192 290 229 38 13 39 9 11 -37 -22 -36 -14 -59 16 -47 20
7 67 110 59 131 -8 19 -37 18 -94 -3z"/>
<path d="M11222 9048 c-102 -38 -172 -135 -160 -219 4 -24 1 -26 -20 -23 -35
7 -62 -5 -62 -26 0 -14 11 -19 54 -24 48 -6 56 -11 66 -37 20 -48 111 -118
181 -140 63 -20 174 -25 198 -10 8 5 11 16 8 24 -4 11 -29 16 -99 19 -62 3
-106 10 -131 22 -46 23 -130 102 -122 116 3 6 22 10 40 10 19 0 78 14 131 31
125 40 162 72 179 155 14 68 8 87 -35 109 -43 22 -162 19 -228 -7z m197 -29
c17 -6 31 -18 31 -26 0 -38 -26 -96 -50 -113 -38 -27 -167 -70 -232 -77 l-58
-6 0 49 c0 30 7 61 19 80 46 76 198 125 290 93z"/>
<path d="M9333 8964 c-11 -30 6 -279 26 -369 11 -49 27 -124 36 -165 19 -89
37 -120 63 -113 27 7 33 31 87 333 18 100 53 197 66 183 4 -4 16 -51 28 -103
42 -196 87 -340 114 -368 12 -11 16 -11 25 1 9 10 7 26 -9 68 -29 75 -63 195
-90 318 -37 168 -79 192 -131 74 -26 -58 -42 -125 -75 -320 -17 -103 -27 -119
-36 -61 -3 18 -17 87 -31 153 -20 95 -26 148 -26 253 0 126 -1 132 -20 132
-11 0 -23 -7 -27 -16z"/>
<path d="M2229 8738 c-1 -2 -4 -43 -6 -93 -2 -49 -5 -103 -6 -120 -1 -21 3
-30 13 -30 24 0 41 71 38 159 -3 68 -6 81 -20 84 -10 2 -19 2 -19 0z"/>
<path d="M19064 8380 c-7 -7 0 -32 22 -78 46 -96 84 -257 84 -356 0 -89 -9
-125 -71 -299 -32 -90 -39 -121 -30 -130 17 -17 35 8 64 93 14 41 37 108 51
148 46 132 44 246 -9 428 -25 89 -74 196 -90 201 -6 2 -15 -1 -21 -7z"/>
<path d="M2305 8279 c-4 -5 -1 -23 5 -40 17 -40 -1 -80 -51 -113 -42 -28 -46
-35 -28 -53 9 -9 23 -5 55 18 49 34 74 73 74 118 0 57 -36 103 -55 70z"/>
<path d="M16740 8250 c-36 -4 -128 -22 -205 -39 -275 -60 -408 -77 -719 -91
-131 -6 -332 -24 -464 -40 -128 -17 -248 -30 -268 -30 -35 0 -56 -22 -38 -40
10 -9 205 9 389 35 61 8 198 20 305 25 401 21 554 40 820 102 122 29 150 32
300 32 133 0 185 -4 270 -22 157 -33 340 -61 443 -67 150 -10 141 -4 133 -88
-4 -40 -12 -92 -19 -117 -6 -27 -12 -152 -12 -310 -2 -195 -7 -294 -19 -375
-47 -301 -49 -386 -10 -570 15 -67 18 -148 19 -511 1 -237 5 -436 9 -442 16
-27 8 -319 -14 -467 -20 -133 -22 -174 -16 -360 3 -115 10 -235 15 -265 53
-313 54 -324 58 -608 4 -225 1 -313 -12 -435 -16 -138 -16 -179 -5 -439 13
-286 11 -389 -11 -512 l-11 -64 -26 13 c-30 15 -95 32 -162 45 -25 4 -70 15
-100 25 -117 37 -269 67 -366 72 -131 7 -309 -23 -488 -82 -181 -59 -205 -63
-511 -75 -148 -6 -317 -17 -375 -26 -58 -8 -161 -17 -230 -21 -135 -6 -191 4
-376 63 -213 69 -304 64 -481 -22 -107 -51 -113 -56 -113 -84 0 -23 4 -30 20
-30 11 0 20 7 20 15 0 9 37 33 95 61 73 35 115 49 176 57 93 12 116 8 314 -53
165 -51 279 -65 417 -50 57 6 110 13 118 15 39 11 250 26 476 34 263 10 318
20 515 90 100 36 335 74 420 68 75 -5 248 -42 364 -77 33 -10 83 -23 110 -29
136 -30 149 -36 156 -71 13 -61 53 -62 63 -2 37 218 39 243 31 547 -10 360 -9
424 7 535 7 50 12 204 12 370 1 286 -1 315 -44 580 -45 273 -50 481 -19 681
24 149 24 177 16 884 -5 401 -7 463 -27 570 -35 199 -36 276 -5 465 23 141 29
210 35 470 4 168 13 323 18 345 6 22 12 78 14 125 l3 85 -107 7 c-126 7 -277
29 -483 68 -166 31 -326 43 -425 30z"/>
<path d="M10470 8105 c-16 -20 -4 -35 28 -35 15 0 41 -9 57 -20 l30 -20 -40 0
c-59 0 -288 28 -383 46 -84 17 -122 16 -262 -6 -41 -7 -105 -9 -141 -6 -56 5
-71 3 -90 -12 -31 -26 -16 -42 38 -42 l46 0 -7 -32 c-29 -145 -32 -365 -8
-662 6 -76 14 -208 17 -294 3 -86 10 -161 15 -166 5 -5 31 14 67 51 32 33 73
65 92 72 54 18 319 14 372 -5 29 -11 73 -16 130 -15 l87 2 7 -33 c3 -18 9
-173 12 -345 4 -275 3 -315 -11 -335 -9 -12 -16 -30 -16 -39 0 -15 -5 -16 -36
-6 -19 6 -40 19 -45 29 -19 36 -44 21 -40 -24 1 -9 -5 -27 -13 -40 -17 -26
-11 -42 21 -52 15 -5 33 -29 52 -69 44 -94 47 -107 22 -114 -12 -3 -21 -13
-21 -24 0 -29 -16 -31 -34 -4 -9 14 -25 25 -36 25 -25 0 -25 -7 -1 -47 l20
-32 -227 0 c-249 1 -221 5 -448 -75 -159 -57 -370 -71 -704 -49 -150 9 -172
13 -235 41 -94 41 -136 51 -228 53 -43 1 -101 6 -130 11 -29 5 -142 10 -252
13 -110 2 -218 8 -240 14 -22 6 -102 11 -178 11 -119 0 -158 4 -270 31 -149
34 -153 35 -297 43 -58 4 -118 9 -134 12 l-28 6 6 60 c5 39 3 64 -4 73 -14 17
-5 69 16 86 18 15 18 48 0 55 -11 4 -13 21 -9 77 5 60 3 75 -11 86 -24 20 -34
7 -65 -86 l-26 -78 -94 -2 c-51 0 -98 -6 -103 -11 -22 -22 5 -32 88 -32 46 0
84 -2 84 -5 0 -3 -11 -27 -24 -53 -21 -40 -88 -102 -111 -102 -3 0 -5 24 -3
53 3 46 1 52 -17 52 -16 0 -21 -9 -26 -42 -3 -24 -7 -44 -10 -46 -2 -2 -38 -1
-79 3 -60 6 -77 12 -88 29 -22 32 -52 28 -52 -9 0 -35 30 -54 112 -71 29 -6
59 -15 67 -19 22 -12 -38 -39 -133 -61 -45 -11 -90 -24 -101 -29 -11 -5 -32
-14 -47 -20 -27 -9 -37 -33 -19 -44 5 -3 56 -1 114 6 100 11 107 10 146 -10
22 -12 87 -33 143 -48 57 -14 147 -38 201 -54 55 -17 136 -32 188 -36 l91 -7
-4 24 c-2 19 -11 25 -47 31 -35 6 -67 23 -120 65 -2 1 4 12 14 23 18 20 18 21
-14 52 -17 17 -29 33 -27 36 12 12 292 -23 401 -51 103 -26 142 -30 275 -33
85 -1 184 -7 220 -13 36 -6 133 -11 215 -11 83 0 177 -5 210 -10 33 -6 99 -10
146 -11 92 0 129 -9 253 -59 74 -30 89 -32 269 -41 104 -5 197 -11 206 -14 23
-7 281 20 376 40 80 17 103 24 205 65 70 28 299 50 380 37 30 -5 87 -6 127 -2
68 5 73 5 96 -21 28 -30 47 -25 47 12 0 33 16 30 35 -6 9 -16 19 -30 24 -30 5
0 12 -27 16 -61 6 -48 10 -59 24 -57 12 3 16 15 16 53 0 28 -3 65 -8 84 -6 28
-5 32 7 21 8 -6 16 -28 18 -48 4 -52 35 -51 53 1 7 21 15 40 17 41 6 5 191
-13 253 -24 33 -6 253 -12 495 -15 320 -3 456 -8 515 -18 115 -21 262 -44 395
-62 118 -16 539 -36 573 -27 17 4 18 1 13 -24 -6 -27 -21 -113 -32 -179 -2
-16 -12 -154 -20 -305 -9 -151 -20 -327 -24 -390 -14 -194 -11 -476 5 -565 8
-44 24 -138 35 -210 12 -71 32 -161 45 -200 59 -176 100 -447 85 -557 -11 -72
-18 -98 -30 -98 -15 0 -22 -46 -29 -197 -4 -84 -10 -156 -14 -160 -8 -7 -72 1
-242 32 -107 19 -288 22 -330 5 -33 -13 -299 -33 -440 -33 -49 0 -113 5 -141
12 -28 7 -181 19 -340 27 -354 18 -494 32 -494 51 0 9 -17 13 -64 13 -35 0
-79 3 -97 6 -33 6 -33 6 -14 -10 19 -16 15 -16 -60 -10 -44 3 -83 8 -87 11 -4
2 2 22 14 44 16 32 19 50 14 89 -4 28 -2 51 3 54 5 4 15 31 22 61 9 42 26 73
76 135 37 46 63 88 61 98 -4 23 -75 28 -100 5 -10 -8 -29 -17 -42 -18 -14 -2
-29 -6 -35 -9 -19 -12 -24 48 -11 119 20 108 23 196 11 286 -8 61 -8 92 1 120
l11 38 78 -1 c64 0 85 3 116 22 23 14 67 26 112 32 85 10 114 22 109 46 -3 14
-16 16 -92 15 -64 -2 -91 -6 -100 -17 -34 -44 -124 -66 -205 -50 -28 6 -31 10
-31 41 0 27 -4 34 -17 31 -12 -2 -19 -14 -21 -33 l-3 -30 -72 -2 c-40 -1 -105
-5 -145 -8 -51 -5 -102 -1 -168 10 -94 17 -280 17 -373 -1 -30 -6 -33 -4 -28
10 4 10 0 27 -8 39 -12 18 -15 69 -15 303 0 155 -5 340 -11 412 -12 144 -9
185 9 140 6 -16 15 -28 20 -28 14 0 32 23 32 40 0 15 6 15 66 3 36 -7 102 -28
147 -45 75 -29 84 -30 128 -19 26 7 108 16 181 21 73 5 171 16 218 25 69 14
120 15 270 10 120 -4 212 -2 259 6 40 6 77 7 82 2 4 -4 4 -37 -1 -73 -39 -261
-82 -764 -69 -798 6 -15 16 -22 27 -20 15 3 17 16 17 98 1 95 17 299 35 440 5
41 17 135 26 208 15 117 19 135 40 151 43 34 31 48 -45 56 -56 6 -74 4 -93 -9
-19 -14 -59 -16 -264 -16 -175 0 -264 -4 -321 -15 -43 -8 -118 -18 -168 -21
-49 -2 -125 -10 -168 -16 -75 -10 -80 -9 -160 20 -45 17 -109 36 -142 42 -33
5 -87 24 -120 40 -33 17 -68 30 -78 30 -29 0 -19 -33 20 -67 27 -23 33 -32 21
-33 -11 0 -20 -10 -23 -27 -3 -16 -9 -46 -14 -68 -8 -33 -7 -43 9 -57 15 -14
19 -41 25 -165 4 -81 5 -231 2 -334 -4 -135 -2 -200 8 -242 8 -33 9 -59 4 -63
-12 -7 -11 -17 5 -39 10 -14 17 -17 27 -9 38 29 270 51 359 35 164 -31 208
-34 272 -21 66 13 154 17 164 7 3 -3 -2 -41 -12 -84 -19 -81 -22 -223 -9 -353
9 -82 -9 -170 -33 -170 -25 1 -53 19 -112 73 -50 46 -70 52 -70 21 0 -22 54
-125 93 -176 19 -25 40 -60 45 -79 33 -101 33 -95 3 -161 -16 -35 -31 -70 -34
-79 -6 -18 -39 -17 -197 6 -96 14 -315 28 -445 29 -63 0 -147 -8 -436 -45
-142 -17 -1031 -19 -1174 -2 -66 8 -121 16 -123 18 -2 2 -6 71 -9 154 -3 84
-10 154 -15 157 -16 10 -28 -10 -30 -47 -1 -32 -6 -38 -57 -65 -30 -16 -60
-29 -66 -29 -5 0 -20 -6 -33 -13 -12 -7 -26 -11 -31 -8 -5 3 -21 -1 -37 -8
-16 -8 -58 -17 -94 -21 -161 -17 -260 -51 -260 -88 0 -16 5 -18 39 -12 42 7
98 -12 123 -43 11 -13 10 -15 -7 -9 -70 21 -67 21 -63 -3 4 -30 74 -77 122
-83 25 -3 51 -17 75 -38 100 -92 141 -134 141 -146 0 -13 12 -17 37 -14 7 1
26 -5 42 -14 45 -23 51 -19 51 33 1 32 7 55 21 71 19 23 20 23 39 6 19 -17 50
-15 50 3 0 5 -14 23 -30 41 -27 28 -30 36 -24 74 4 23 8 44 10 46 2 2 57 -2
121 -9 65 -8 136 -13 158 -12 22 0 247 3 500 6 398 3 487 7 660 27 270 32 580
29 779 -7 43 -8 92 -14 110 -14 30 0 31 -1 31 -42 0 -37 3 -43 23 -46 16 -3
27 5 40 27 9 17 20 31 25 31 4 0 7 -25 7 -55 0 -48 2 -55 20 -55 11 0 20 7 20
15 0 8 9 15 19 15 33 0 54 29 48 67 -6 37 -9 37 82 23 40 -5 68 -15 73 -24 11
-20 32 -20 48 -1 18 21 41 19 47 -5 7 -26 43 -26 50 0 5 17 12 19 72 14 36 -3
107 -11 156 -19 50 -8 185 -16 301 -19 121 -3 257 -13 319 -22 96 -15 132 -16
318 -5 116 6 242 19 281 28 85 19 213 13 366 -17 87 -16 205 -34 234 -35 5 0
9 77 10 170 1 145 4 175 20 205 29 55 46 129 46 203 0 122 -43 356 -92 502
-20 61 -67 315 -88 485 -15 111 -8 389 15 635 8 88 19 246 24 350 8 171 28
332 45 376 9 22 253 33 664 30 273 -2 311 -4 369 -22 92 -29 270 -29 368 -2
75 22 86 34 59 64 -20 22 -18 23 24 8 17 -6 33 -17 36 -25 7 -19 35 -18 42 1
4 8 12 15 19 15 20 0 30 -173 29 -505 0 -314 1 -305 -69 -565 -35 -130 -43
-270 -22 -386 45 -242 58 -374 64 -616 6 -241 -12 -718 -27 -718 -12 0 -62
-120 -56 -135 11 -29 34 -15 52 31 9 25 25 55 34 67 11 14 20 51 24 97 13 141
22 625 15 782 -7 143 -37 382 -59 483 -5 22 -10 92 -10 155 0 105 4 131 47
295 l47 180 4 320 c3 263 1 348 -14 475 -26 221 -25 499 1 605 37 151 21 471
-35 725 -32 144 -60 386 -60 517 0 123 -8 163 -34 163 -10 0 -12 -33 -9 -157
4 -182 24 -355 58 -531 60 -300 71 -541 34 -718 -18 -87 -20 -126 -17 -315 l3
-215 -44 8 c-24 4 -49 12 -56 18 -6 5 -24 6 -41 1 -22 -5 -30 -15 -34 -37 -8
-45 -46 -58 -180 -62 -98 -3 -124 0 -175 18 -53 19 -89 22 -300 27 -141 4
-341 1 -484 -7 -259 -13 -277 -11 -247 31 15 22 7 49 -15 49 -18 0 -39 -33
-39 -61 l0 -30 -246 6 c-150 3 -276 11 -323 20 -42 8 -95 15 -118 15 -23 0
-75 7 -115 16 -240 51 -294 55 -723 56 -309 0 -427 4 -478 14 -38 8 -98 14
-135 15 -93 1 -117 9 -116 40 3 83 60 336 93 413 29 70 31 96 5 96 -13 0 -50
-59 -66 -105 -6 -16 -7 -14 -6 10 1 50 -1 55 -20 55 -19 0 -45 -43 -68 -110
l-12 -35 -1 35 c-1 24 -8 39 -23 49 -21 13 -21 15 -14 230 4 134 2 257 -5 324
-6 60 -9 109 -7 110 8 4 729 -12 781 -17 47 -5 59 -4 63 9 4 9 -1 21 -11 29
-16 12 -17 27 -6 237 7 123 16 242 21 264 5 22 14 94 20 160 6 66 15 147 20
180 16 103 23 262 12 269 -5 3 -71 -3 -146 -14 -169 -25 -245 -25 -266 1 -13
16 -20 17 -54 8 -21 -6 -113 -11 -205 -12 l-166 -2 -56 33 c-61 35 -90 40
-109 17z m-355 -65 c156 -38 333 -50 760 -52 93 0 444 22 485 31 78 17 83 16
76 -21 -4 -18 -11 -73 -16 -123 -5 -49 -14 -144 -20 -210 -6 -66 -17 -147 -25
-180 -7 -33 -16 -162 -20 -289 l-8 -228 -36 8 c-20 4 -180 8 -357 9 -176 1
-336 5 -356 9 -37 7 -57 34 -73 99 -9 34 -23 43 -41 26 -11 -12 -11 -20 1 -54
8 -22 14 -45 15 -50 0 -17 -133 -18 -173 -2 -22 10 -90 18 -183 22 -128 6
-160 4 -229 -13 -62 -15 -81 -23 -83 -38 -8 -40 -20 -34 -26 13 -4 26 -11 134
-16 238 -5 105 -14 208 -19 229 -12 49 -6 357 9 451 17 110 13 105 83 106 34
0 82 6 107 13 57 17 94 18 145 6z m-3145 -1865 c-7 -9 -15 -13 -17 -11 -7 7 7
26 19 26 6 0 6 -6 -2 -15z m3576 -46 c3 -5 10 -7 15 -4 5 4 9 -18 9 -51 0 -32
-2 -55 -4 -53 -1 2 -19 29 -39 60 l-35 57 24 0 c13 0 27 -5 30 -9z m99 -76
c-13 -114 -20 -122 -55 -73 -15 22 -17 28 -6 24 18 -7 56 49 56 84 0 12 3 22
6 22 4 0 3 -26 -1 -57z m-3687 -68 c-2 -1 -22 0 -45 3 l-42 4 19 38 c11 21 30
46 42 55 l23 16 3 -57 c2 -31 2 -57 0 -59z m3586 -20 l17 -30 -20 24 c-12 13
-21 28 -21 34 0 12 0 11 24 -28z m-3774 -36 c0 -5 -13 -9 -30 -9 -34 0 -38 7
-13 26 18 12 43 3 43 -17z m170 5 l25 -15 -25 7 c-14 3 -29 10 -34 15 -16 14
6 10 34 -7z m-10 -75 c0 -15 65 -69 78 -64 8 3 30 -8 48 -25 19 -16 29 -30 23
-30 -7 0 -55 13 -108 30 -53 16 -137 39 -188 50 -50 12 -97 28 -104 36 -10 12
8 13 120 11 72 -1 131 -5 131 -8z m3687 -2266 c-2 -21 -4 -4 -4 37 0 41 2 58
4 38 2 -21 2 -55 0 -75z m126 -316 c-20 -23 -29 -29 -32 -18 -2 8 7 22 20 32
38 29 44 22 12 -14z m-196 -79 l3 -43 -14 30 c-7 17 -23 39 -35 49 -31 28 -26
37 12 21 28 -12 32 -18 34 -57z m52 -52 c-9 -8 -10 -7 -5 7 3 10 7 31 8 45 1
22 2 21 5 -7 3 -19 -1 -38 -8 -45z m-2549 -166 c0 -47 -4 -80 -10 -80 -6 0
-10 33 -10 80 0 47 4 80 10 80 6 0 10 -33 10 -80z m2575 -48 c-13 -31 -23 20
-11 53 l11 30 3 -33 c2 -19 0 -41 -3 -50z m-2845 -67 c0 -31 -7 -31 -45 0
l-30 24 38 1 c33 0 37 -3 37 -25z m96 -7 c-3 -13 -6 -31 -6 -40 0 -10 -7 -18
-15 -18 -17 0 -18 4 -9 49 4 18 13 31 21 31 11 0 14 -7 9 -22z m174 -29 c0
-11 -4 -17 -10 -14 -5 3 -10 13 -10 21 0 8 5 14 10 14 6 0 10 -9 10 -21z m-84
-87 c-23 -24 -26 -12 -7 33 16 40 16 40 19 11 2 -17 -3 -35 -12 -44z m24 -115
c0 -16 -2 -16 -30 -2 -33 17 -41 51 -12 57 18 4 41 -25 42 -55z"/>
<path d="M10417 7823 c-4 -3 -7 -19 -7 -34 0 -17 -20 -59 -49 -104 -49 -75
-80 -145 -104 -232 -9 -36 -17 -45 -39 -50 -15 -3 -33 -11 -39 -19 -16 -20 -1
-37 28 -29 19 4 24 2 21 -7 -48 -130 -58 -193 -29 -193 10 0 26 36 48 106 l33
107 87 11 c49 7 98 14 110 17 20 4 25 -3 43 -65 25 -82 41 -107 64 -98 12 5
16 19 16 58 0 42 -3 52 -20 56 -31 8 -36 43 -9 64 27 20 19 35 -20 41 -19 2
-27 15 -47 78 -14 41 -31 103 -40 138 -14 61 -14 64 6 80 20 16 20 18 5 50
-15 30 -42 42 -58 25z m39 -292 c14 -45 24 -84 22 -85 -4 -3 -188 -33 -188
-31 0 1 11 33 24 71 26 77 48 124 79 168 l21 30 8 -35 c5 -19 20 -72 34 -118z"/>
<path d="M15790 8029 c-106 -26 -452 -59 -625 -59 -158 0 -352 -26 -405 -54
-175 -92 -169 -90 -248 -91 -60 0 -77 -3 -86 -18 -17 -27 3 -33 97 -27 70 5
96 12 148 39 35 18 84 44 109 57 55 28 174 41 479 54 262 11 396 24 520 52
111 24 151 21 301 -22 123 -35 170 -39 170 -12 0 13 -14 20 -57 29 -32 7 -98
24 -148 38 -93 26 -187 31 -255 14z"/>
<path d="M5964 7930 c-4 -32 -16 -63 -30 -80 -43 -51 -59 -131 -30 -154 12 -9
11 -26 -10 -116 -13 -58 -24 -113 -24 -124 0 -17 -5 -18 -51 -12 -29 4 -70 13
-92 21 -29 10 -45 11 -53 4 -31 -25 13 -48 126 -67 42 -7 45 -10 44 -37 -1
-48 -42 -268 -58 -316 -26 -73 -16 -153 15 -122 9 9 50 185 68 298 6 39 16 91
22 116 l10 46 52 -4 c29 -2 76 -6 104 -9 l53 -5 39 -127 c22 -70 46 -147 53
-172 10 -34 18 -46 36 -48 27 -4 30 24 6 89 -12 35 -14 67 -8 154 7 125 3 133
-63 144 -35 6 -38 9 -65 84 -41 114 -76 259 -90 377 -11 84 -17 105 -30 108
-14 3 -19 -7 -24 -48z m95 -434 c12 -33 21 -64 21 -69 0 -9 -157 -3 -167 6 -3
4 16 98 57 286 l12 54 28 -109 c16 -60 38 -136 49 -168z m129 -138 c14 -14 16
-64 3 -72 -7 -4 -31 56 -31 78 0 10 15 7 28 -6z"/>
<path d="M16912 7527 c-6 -7 -22 -77 -37 -157 -21 -110 -28 -180 -30 -290 -3
-266 -3 -260 -24 -260 -51 0 -103 -78 -121 -181 -14 -81 3 -139 43 -153 58
-21 107 42 130 170 l12 67 39 -156 c27 -110 36 -166 32 -191 -7 -37 2 -50 28
-40 32 12 29 54 -17 243 -75 303 -79 344 -57 561 6 63 15 160 20 215 5 55 12
116 16 136 5 27 2 37 -9 42 -9 3 -20 0 -25 -6z m-79 -809 c-6 -79 -22 -138
-45 -171 -20 -28 -22 -29 -35 -11 -28 39 -10 152 33 204 39 46 52 39 47 -22z"/>
<path d="M2447 7504 c-4 -4 -7 -31 -7 -60 0 -57 -14 -80 -56 -90 -15 -4 -24
-13 -24 -25 0 -15 7 -19 31 -19 40 0 85 45 95 94 10 58 -15 124 -39 100z"/>
<path d="M5283 7496 c-4 -8 -62 -28 -128 -45 -130 -34 -268 -97 -273 -126 -6
-28 14 -38 90 -44 l73 -6 2 -40 c5 -65 24 -238 30 -262 4 -20 1 -23 -23 -23
-43 0 -175 -47 -209 -74 -24 -19 -27 -27 -18 -37 10 -10 21 -10 54 0 22 7 43
10 46 8 8 -8 -33 -93 -56 -116 -21 -21 -27 -51 -13 -65 4 -4 6 -49 4 -99 -4
-102 7 -147 37 -147 21 0 30 17 32 58 1 21 3 19 10 -13 5 -22 11 -55 12 -74 3
-39 24 -52 42 -27 10 13 13 -27 18 -192 6 -236 25 -461 40 -480 6 -7 16 -11
24 -8 10 4 13 -17 15 -102 2 -142 1 -157 -22 -227 -29 -87 -80 -367 -80 -435
0 -41 5 -64 16 -75 39 -39 81 38 104 192 7 45 18 82 27 88 12 9 15 46 14 221
0 138 4 228 13 264 7 30 15 48 18 40 3 -8 11 -99 17 -202 11 -190 21 -243 44
-235 16 5 15 114 -2 312 -13 151 -9 301 8 318 6 6 6 19 -1 36 -19 48 6 432 42
654 34 206 60 305 82 311 27 7 19 39 -12 48 -14 3 -45 12 -70 19 l-45 12 33
13 c34 15 42 41 16 51 -9 3 -24 1 -34 -5 -26 -16 -126 -26 -135 -13 -3 6 -9
36 -12 67 l-6 55 28 -3 c24 -3 29 2 37 27 4 17 9 69 11 117 1 48 5 88 10 88 4
0 7 -7 7 -15 0 -8 9 -15 19 -15 14 0 21 8 23 27 2 14 9 29 17 31 17 6 16 4
-34 -133 -58 -158 -62 -175 -45 -185 8 -5 17 -7 21 -4 25 15 122 254 113 278
-3 7 4 34 16 59 12 25 19 51 15 57 -7 12 -35 14 -35 1 0 -4 -28 -18 -62 -29
-35 -12 -90 -31 -122 -42 -56 -19 -60 -19 -72 -2 -7 9 -10 20 -6 24 10 10 241
70 277 72 21 1 31 8 34 21 6 35 -59 62 -76 31z m-289 -161 c4 -11 -2 -15 -21
-15 -26 0 -26 1 -7 15 10 8 20 15 20 15 1 0 4 -7 8 -15z m137 -142 c-10 -17
-10 -17 -11 2 0 11 4 31 8 45 l7 25 3 -27 c2 -15 -1 -35 -7 -45z m-81 -400 c0
-60 3 -138 6 -175 6 -63 6 -67 -13 -62 -18 5 -21 17 -27 107 -3 56 -12 130
-19 164 l-13 62 25 4 c14 2 29 5 34 6 4 0 7 -47 7 -106z m131 97 c29 -6 62
-19 74 -30 12 -11 27 -20 33 -20 16 0 16 -6 -17 -169 -17 -79 -37 -214 -46
-300 -23 -223 -32 -261 -34 -141 -1 52 -8 158 -17 235 -9 77 -17 181 -18 231
-2 77 -6 98 -29 139 -41 72 -40 73 54 55z m-206 -265 c3 -64 1 -89 -4 -70 -5
17 -9 44 -10 61 -1 34 -21 50 -40 31 -21 -21 -12 46 11 90 l23 43 7 -28 c5
-15 10 -72 13 -127z m159 -220 l5 -90 -14 110 c-8 61 -16 144 -19 185 -5 74
-5 74 9 -20 7 -52 16 -135 19 -185z m-48 -45 c10 -89 12 -136 5 -148 -8 -13
-10 -9 -11 22 0 22 -7 47 -16 57 -14 16 -15 33 -9 114 4 53 9 94 12 91 3 -2
12 -64 19 -136z m61 -127 c-2 -16 -4 -5 -4 22 0 28 2 40 4 28 2 -13 2 -35 0
-50z m24 -286 c2 -38 -1 -51 -14 -58 -15 -9 -17 -3 -17 54 0 98 25 101 31 4z
m-75 7 c-3 -9 -6 -41 -6 -71 0 -74 -13 -59 -20 23 -5 58 -4 64 13 64 13 0 17
-5 13 -16z m-25 -865 c-12 -99 -39 -213 -40 -170 -1 31 41 273 46 267 2 -2 -1
-46 -6 -97z"/>
<path d="M16220 7475 c-11 -13 -11 -20 0 -39 6 -13 9 -33 6 -44 -9 -28 -10
-398 -1 -444 6 -31 4 -38 -8 -38 -27 0 -30 -20 -9 -68 11 -26 35 -121 53 -211
33 -158 46 -188 70 -164 7 7 2 54 -15 142 -31 157 -31 159 -8 138 24 -22 100
-49 135 -49 25 1 27 -3 27 -36 1 -55 32 -116 73 -141 72 -44 137 -49 137 -10
0 15 -7 19 -34 19 -43 0 -96 36 -119 80 -24 46 -17 104 16 139 36 38 67 93 67
118 0 57 -51 25 -102 -64 -16 -29 -38 -55 -49 -58 -31 -10 -112 22 -147 58
-30 31 -32 38 -42 147 -11 132 -12 325 -2 421 4 36 5 76 2 90 -7 29 -32 36
-50 14z"/>
<path d="M15233 7035 c-47 -67 -66 -86 -76 -76 -19 19 -84 12 -122 -11 -147
-92 -179 -131 -197 -242 -31 -185 76 -302 217 -237 44 20 83 54 110 94 14 22
15 30 5 42 -10 12 -20 6 -64 -39 -65 -69 -118 -88 -167 -60 -39 23 -57 68 -58
144 -1 77 15 125 57 171 53 60 123 93 199 94 48 1 66 5 76 19 11 15 12 4 4
-71 -13 -129 -4 -339 16 -385 20 -46 47 -50 75 -10 10 15 43 99 72 187 l54
160 21 -105 c24 -120 43 -182 58 -192 29 -18 132 21 143 54 7 23 -24 68 -47
68 -21 0 -26 -29 -8 -47 8 -8 8 -13 -1 -18 -20 -12 -23 2 -24 93 -2 146 33
181 185 190 l89 5 0 -26 c0 -15 -9 -44 -21 -66 -63 -122 -64 -286 -1 -320 29
-16 37 -14 71 15 24 20 37 47 61 127 17 56 33 109 36 117 3 9 13 -6 24 -37 23
-65 28 -73 45 -73 25 0 27 20 6 65 -12 25 -21 50 -21 55 0 26 -32 70 -50 70
-25 0 -32 -14 -70 -145 -34 -117 -52 -155 -75 -155 -19 0 -27 31 -26 98 1 113
53 215 131 260 41 23 43 24 23 3 -26 -25 -29 -39 -9 -47 19 -7 76 35 87 63 22
57 -25 69 -109 27 -47 -23 -53 -24 -68 -10 -23 23 -58 29 -128 23 -87 -9 -132
-24 -170 -57 -40 -35 -56 -85 -57 -176 -1 -101 -15 -51 -55 194 -3 23 -10 32
-24 32 -27 0 -57 -62 -114 -235 -54 -162 -61 -177 -69 -143 -16 66 -18 148 -6
288 16 200 17 242 2 247 -6 2 -20 -8 -30 -22z"/>
<path d="M19036 6892 c-3 -5 1 -40 9 -78 34 -156 56 -382 61 -624 3 -135 7
-251 9 -257 3 -7 11 -10 21 -6 15 5 16 32 11 282 -5 274 -17 412 -55 601 -13
62 -21 86 -34 88 -9 2 -19 -1 -22 -6z"/>
<path d="M20453 6295 c-38 -16 -48 -46 -40 -115 13 -105 78 -179 167 -188 32
-3 55 0 65 8 24 20 2 35 -50 38 -60 2 -99 30 -121 87 -43 115 -18 150 101 141
75 -6 226 -42 235 -56 3 -5 23 -10 45 -12 34 -2 40 0 40 16 0 22 -32 35 -174
72 -106 27 -218 31 -268 9z"/>
<path d="M20895 6021 c-6 -5 -70 -16 -144 -25 -74 -9 -168 -24 -210 -32 -42
-9 -102 -16 -134 -16 -62 0 -81 -13 -52 -35 26 -18 90 -16 193 6 105 24 261
41 397 44 91 2 100 4 100 21 0 15 -12 22 -55 32 -67 16 -83 17 -95 5z"/>
<path d="M1397 6003 c-26 -30 -38 -70 -23 -82 7 -6 15 -9 18 -6 3 3 8 -90 11
-207 l6 -213 -117 -111 c-78 -74 -119 -107 -124 -99 -13 22 -28 264 -28 447 0
155 -2 179 -16 185 -9 3 -20 0 -25 -8 -15 -25 -22 -90 -10 -102 7 -7 11 -72
11 -186 0 -97 7 -225 15 -286 l15 -110 -37 -37 c-35 -36 -62 -51 -115 -62 -19
-4 -28 -13 -28 -26 0 -15 7 -20 28 -20 63 0 187 -102 227 -187 17 -34 42 -43
51 -19 3 8 1 23 -5 34 -6 11 -24 83 -40 159 l-30 138 117 117 c64 65 119 114
122 110 4 -4 12 -43 19 -87 24 -150 90 -468 100 -478 15 -15 38 9 44 46 9 61
52 237 57 237 8 0 33 -72 65 -183 41 -142 79 -203 110 -177 9 7 14 15 11 17
-2 3 0 18 5 35 12 43 -6 66 -32 42 -17 -15 -19 -12 -39 57 -61 209 -102 309
-125 309 -23 0 -31 -23 -56 -144 -27 -139 -24 -145 -73 124 -51 271 -58 333
-65 569 -4 138 -10 216 -17 218 -6 2 -18 -5 -27 -14z m-234 -926 l15 -68 -38
35 c-21 19 -48 40 -60 46 -21 11 -21 12 17 40 21 16 41 26 44 22 4 -4 14 -38
22 -75z"/>
<path d="M10273 5924 c-7 -19 2 -28 22 -21 19 8 19 23 0 31 -9 3 -18 -1 -22
-10z"/>
<path d="M363 5733 c-29 -93 -73 -251 -98 -353 -25 -102 -49 -192 -55 -200
-40 -61 -50 -90 -38 -110 10 -16 9 -33 -6 -91 -36 -140 -98 -334 -111 -349
-15 -18 -45 -113 -45 -146 0 -29 18 -41 35 -23 17 19 97 260 146 442 22 84 44
163 48 177 17 59 186 106 223 63 9 -11 25 -79 38 -163 13 -80 30 -152 37 -160
23 -26 36 5 41 104 5 107 -8 172 -43 215 -15 17 -28 56 -39 116 -24 137 -46
340 -46 435 0 84 0 85 31 103 36 20 33 43 -5 40 -23 -2 -26 1 -23 30 1 25 -2
33 -18 35 -18 2 -26 -18 -72 -165z m72 -378 c9 -60 18 -119 21 -131 5 -19 1
-20 -58 -20 -40 0 -75 -7 -96 -18 -19 -10 -35 -16 -37 -14 -5 5 71 318 108
442 l32 109 7 -129 c3 -71 14 -178 23 -239z"/>
<path d="M20654 5788 c-4 -6 6 -22 23 -37 50 -42 47 -53 -23 -76 -71 -24 -127
-63 -155 -109 -23 -38 -26 -140 -5 -210 32 -107 127 -178 200 -150 51 20 90
173 84 334 -2 64 1 110 6 110 26 0 95 -53 110 -84 28 -60 19 -92 -29 -98 -18
-2 -30 -9 -30 -18 0 -23 72 -26 96 -4 25 22 25 96 1 144 -20 42 -103 100 -142
100 -23 0 -29 6 -39 40 -16 56 -76 92 -97 58z m80 -216 c10 -119 -15 -275 -50
-313 -22 -25 -32 -24 -75 5 -46 31 -78 99 -85 179 -7 76 4 107 51 143 30 23
121 62 146 64 3 0 9 -35 13 -78z"/>
<path d="M16837 5577 c-51 -77 -102 -243 -113 -364 -8 -82 -17 -104 -36 -85
-19 19 -58 14 -118 -16 -45 -23 -65 -42 -117 -116 -34 -49 -75 -120 -90 -158
-26 -69 -27 -69 -40 -44 -8 14 -20 26 -28 26 -7 0 -20 7 -29 15 -48 49 -152
58 -231 22 -84 -40 -128 -148 -90 -221 9 -16 13 -31 10 -35 -3 -3 -34 -7 -68
-9 -78 -4 -124 18 -150 69 -15 32 -16 41 -5 75 12 35 22 43 88 76 41 21 96 41
123 44 36 5 47 11 47 25 0 27 -13 30 -70 17 -73 -17 -191 -78 -215 -111 -28
-40 -28 -125 1 -164 33 -44 81 -71 141 -79 91 -11 115 0 280 131 41 33 91 71
111 84 34 23 36 23 49 5 7 -10 18 -36 24 -57 9 -35 32 -57 45 -44 3 3 11 31
19 64 7 32 24 81 36 108 l22 50 7 -37 c9 -50 26 -68 66 -68 45 0 94 44 144
131 22 37 45 71 50 74 6 3 11 18 11 33 1 15 5 -13 10 -63 10 -113 29 -169 57
-173 29 -5 43 45 18 64 -20 14 -35 108 -36 219 0 54 6 82 25 122 70 152 123
413 83 413 -9 0 -22 -10 -31 -23z m-30 -199 c-3 -8 -6 -5 -6 6 -1 11 2 17 5
13 3 -3 4 -12 1 -19z m-147 -317 c0 -16 -18 -66 -41 -110 -53 -105 -116 -160
-133 -115 -28 74 36 212 114 243 46 18 60 14 60 -18z m-457 -240 c11 -11 -29
-53 -122 -128 -60 -48 -95 -55 -105 -21 -8 32 13 93 40 118 46 44 156 62 187
31z"/>
<path d="M2224 5535 c-18 -15 -18 -16 9 -36 44 -33 65 -87 98 -250 27 -135 30
-164 23 -251 -8 -114 4 -161 40 -156 20 3 21 8 21 143 0 135 1 142 28 188 49
84 173 167 315 211 100 31 106 32 92 7 -40 -75 41 -162 195 -211 99 -31 176
-99 195 -171 13 -48 8 -76 -20 -111 -40 -52 -140 -76 -174 -43 -8 9 -23 41
-32 73 -21 67 -33 85 -53 73 -11 -7 -10 -18 4 -67 25 -86 42 -114 82 -130 84
-36 197 20 237 117 13 32 14 44 2 88 -26 100 -90 161 -219 209 -85 32 -129 56
-160 90 -27 28 -28 32 -15 58 18 37 56 63 103 71 41 6 75 32 75 56 0 15 -55
31 -71 21 -5 -3 -23 3 -39 13 -27 16 -32 16 -40 3 -14 -21 -12 -30 5 -36 27
-11 16 -21 -27 -28 -210 -33 -457 -171 -496 -277 -7 -17 -14 3 -32 96 -25 125
-68 228 -106 252 -17 11 -23 11 -40 -2z"/>
<path d="M621 5443 c-33 -40 -41 -83 -16 -83 7 0 19 8 25 18 9 13 10 6 5 -33
-14 -129 -17 -310 -6 -375 16 -88 65 -174 102 -178 23 -3 28 3 43 43 10 25 31
92 46 148 16 56 29 95 29 87 1 -9 16 -47 35 -85 52 -109 153 -190 164 -132 2
11 -5 20 -21 26 -57 22 -121 134 -138 243 -28 177 -40 169 -98 -64 -26 -103
-52 -193 -58 -199 -18 -18 -51 58 -65 145 -9 61 -8 109 6 265 10 104 15 194
11 200 -12 20 -33 11 -64 -26z"/>
<path d="M14981 5263 c-13 -3 -47 -28 -75 -56 -44 -44 -55 -64 -74 -127 -28
-97 -49 -287 -34 -302 24 -24 39 10 46 105 3 51 15 126 27 167 34 122 84 170
181 172 45 1 54 -2 79 -29 74 -84 57 -277 -37 -400 -21 -27 -29 -31 -54 -27
-48 10 -80 -3 -80 -31 0 -36 42 -62 76 -46 24 10 29 7 78 -44 28 -30 61 -55
71 -55 11 0 35 -9 53 -20 43 -27 82 -27 82 0 0 12 -7 20 -17 20 -10 0 -27 7
-38 16 -11 8 -36 19 -56 24 -25 7 -49 25 -74 55 l-37 45 27 32 c40 47 68 58
156 58 l78 0 -6 -48 c-13 -114 85 -175 232 -143 21 4 30 12 30 26 0 15 -6 19
-25 17 -14 -2 -51 -4 -82 -5 -48 -1 -61 2 -82 22 -34 32 -40 54 -26 95 9 29
16 34 53 40 116 18 227 75 227 117 0 62 -146 37 -251 -43 -44 -34 -48 -35
-144 -37 -88 -2 -97 -1 -91 15 20 52 28 114 24 184 -10 167 -85 231 -237 203z
m639 -337 c0 -5 -86 -38 -130 -51 l-25 -7 24 17 c33 25 131 55 131 41z"/>
<path d="M1982 5245 c-98 -23 -146 -94 -146 -220 -1 -97 19 -138 84 -172 110
-58 214 -8 309 150 23 38 23 67 -1 67 -7 0 -26 -23 -42 -51 -61 -109 -147
-163 -220 -139 -66 22 -99 90 -86 177 18 112 58 148 163 148 60 0 71 -3 88
-24 24 -29 24 -43 0 -72 -17 -21 -28 -24 -87 -24 -45 0 -69 -4 -71 -12 -7 -20
47 -35 106 -30 46 3 59 9 83 36 38 42 38 90 1 131 -35 39 -104 52 -181 35z"/>
<path d="M20116 5139 c-7 -35 -1 -49 20 -49 21 0 38 49 23 66 -19 23 -36 16
-43 -17z"/>
<path d="M6322 5128 c-7 -7 -12 -17 -12 -24 0 -6 -7 -15 -16 -18 -12 -4 -14
-13 -10 -31 6 -23 2 -28 -31 -41 -73 -28 -93 -51 -54 -61 24 -6 24 -4 11 -39
l-11 -27 -38 37 c-49 48 -58 37 -63 -74 -3 -75 -1 -85 15 -88 10 -2 36 8 57
22 22 14 41 26 42 26 2 0 1 -29 0 -65 -3 -53 -1 -65 12 -65 8 0 20 8 26 18 8
13 9 11 4 -13 -9 -42 -12 -45 -42 -45 -31 0 -46 -9 -54 -30 -9 -24 -162 -84
-185 -72 -23 12 -83 -10 -100 -37 -9 -15 -9 -23 2 -37 11 -16 18 -17 54 -8 39
11 40 10 43 -15 2 -20 9 -26 28 -27 58 -3 60 -4 60 -30 0 -14 -10 -34 -22 -43
-27 -22 -16 -41 24 -41 31 0 31 0 25 -44 -4 -25 -9 -107 -12 -183 -3 -76 -8
-191 -10 -255 -5 -112 -5 -118 14 -118 25 0 28 25 35 265 7 224 23 386 40 403
11 11 12 -7 9 -105 -4 -87 0 -143 13 -213 10 -53 19 -160 21 -244 4 -128 2
-154 -14 -185 -15 -31 -18 -63 -18 -213 0 -106 -3 -170 -9 -160 -46 89 -78
103 -103 45 -13 -32 -13 -54 -3 -168 6 -71 16 -134 20 -139 18 -19 40 3 41 41
1 35 2 34 15 -20 18 -74 30 -97 52 -97 14 0 22 -19 40 -97 24 -103 39 -144 59
-150 24 -8 34 40 43 204 6 93 17 224 24 293 15 127 28 302 46 650 6 107 15
238 20 290 5 52 10 127 10 165 0 82 8 115 25 115 12 0 47 -163 80 -374 18
-111 16 -147 -5 -103 -14 29 -37 36 -46 13 -9 -23 24 -75 51 -82 55 -14 66 32
45 181 -10 71 -57 316 -66 346 -4 14 8 18 78 23 159 13 219 33 198 65 -6 11
-31 13 -109 9 -56 -3 -101 -1 -101 3 0 16 -41 32 -53 20 -20 -20 -27 -12 -27
29 0 28 -5 43 -16 47 -23 8 -45 -24 -38 -54 5 -19 2 -23 -15 -23 -25 0 -26 11
-10 130 10 69 16 87 37 105 20 17 24 26 15 36 -6 8 -13 35 -17 60 -5 35 -3 49
9 59 25 21 19 58 -14 74 -25 13 -30 24 -40 81 -7 36 -16 77 -21 90 -10 27 -38
33 -58 13z m47 -269 c-19 -12 -21 -5 -7 27 11 29 12 29 16 5 2 -13 -2 -27 -9
-32z m-205 -5 c8 -21 8 -21 -9 -28 -11 -4 -15 1 -15 19 0 28 15 33 24 9z m239
-54 c3 -11 1 -20 -4 -20 -5 0 -9 2 -9 4 0 2 -3 11 -6 20 -3 9 -2 16 4 16 5 0
12 -9 15 -20z m-94 -23 c8 -10 7 -17 -1 -25 -15 -15 -39 3 -31 24 7 18 17 18
32 1z m51 -68 c-41 -26 -44 -24 -19 11 18 23 25 27 36 18 11 -9 8 -14 -17 -29z
m5 -120 c-8 -66 -11 -65 -41 6 -14 34 -13 35 13 49 16 8 30 13 32 11 2 -2 0
-32 -4 -66z m-156 -51 c0 -31 -3 -37 -8 -24 -7 18 -3 66 5 66 2 0 4 -19 3 -42z
m96 -4 c20 -47 19 -54 -5 -54 -17 0 -20 7 -20 45 0 25 2 45 5 45 3 0 12 -16
20 -36z m-225 -29 c-7 -8 -22 -15 -34 -14 -18 0 -16 3 9 14 39 18 40 18 25 0z
m33 -45 c-5 -19 -23 -29 -23 -12 0 7 20 32 26 32 1 0 0 -9 -3 -20z m66 -2 c12
-15 11 -18 -3 -18 -10 0 -16 8 -16 22 0 12 1 19 3 17 1 -2 9 -12 16 -21z m197
-110 c-12 -69 -26 -273 -36 -538 -11 -300 -16 -360 -31 -360 -11 0 -12 52 -1
65 4 6 5 57 2 115 -3 58 -1 211 3 340 4 129 7 274 5 323 l-3 87 34 0 c32 0 33
-1 27 -32z m-119 -205 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z
m36 -850 c-3 -21 -11 -47 -16 -58 -10 -18 -12 -15 -20 23 -7 37 -6 46 10 58
28 21 32 17 26 -23z m-30 -135 c24 4 22 -38 -3 -85 -11 -21 -20 -45 -21 -53
-3 -43 -17 45 -18 110 -1 67 1 72 12 50 8 -15 20 -24 30 -22z m-116 -10 c-3
-8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m23 -102 c-7 -7 -10 -4 -10
10 0 10 -3 30 -6 44 -4 18 0 15 11 -9 10 -24 12 -38 5 -45z"/>
<path d="M16929 5076 c-34 -32 -48 -54 -52 -83 -13 -82 22 -142 107 -185 34
-17 64 -35 68 -41 16 -25 -21 -73 -77 -98 -76 -35 -149 -18 -210 48 -19 21
-35 41 -35 46 0 4 -9 7 -20 7 -13 0 -20 -7 -20 -18 0 -27 66 -100 111 -122 86
-44 232 -11 277 63 42 67 24 109 -61 150 -69 32 -97 67 -97 119 0 39 17 62 84
116 21 17 16 36 -10 40 -11 1 -37 -15 -65 -42z"/>
<path d="M20314 5066 c-72 -32 -51 -65 24 -41 45 15 66 16 174 5 68 -6 147
-20 176 -29 42 -15 54 -16 63 -5 16 19 4 31 -49 48 -108 35 -330 47 -388 22z"/>
<path d="M20107 4933 c-26 -37 -41 -91 -52 -186 l-6 -48 -102 6 c-162 10 -307
24 -524 51 -231 29 -268 29 -268 -1 0 -17 7 -20 50 -21 28 -1 142 -13 255 -28
222 -28 429 -46 521 -46 l58 0 3 -57 c2 -43 7 -58 18 -58 10 0 17 16 23 53 l9
52 51 0 c91 -1 252 -18 359 -39 133 -26 166 -38 164 -59 -1 -21 39 -27 78 -12
46 17 29 41 -49 68 -102 34 -299 71 -417 77 -57 3 -121 8 -144 11 l-40 5 8 70
c8 68 24 115 49 150 13 17 6 49 -9 49 -5 0 -21 -17 -35 -37z"/>
<path d="M14864 4925 c-4 -9 3 -87 14 -173 12 -86 24 -196 28 -245 6 -76 4
-90 -11 -107 -13 -15 -15 -24 -8 -31 16 -16 51 -2 59 24 11 33 5 168 -13 287
-8 58 -18 139 -22 180 -5 60 -9 75 -24 78 -9 2 -20 -4 -23 -13z"/>
<path d="M19066 4802 c-15 -25 68 -609 124 -867 38 -175 61 -332 67 -462 l6
-133 -32 -11 c-20 -7 -31 -18 -31 -30 0 -24 32 -25 71 -2 22 13 30 27 35 60
10 65 -21 334 -60 528 -62 309 -95 508 -116 700 -12 105 -23 198 -26 208 -5
17 -29 23 -38 9z"/>
<path d="M10349 4671 c-82 -25 -139 -110 -105 -157 12 -16 16 -16 31 -4 10 8
14 22 11 36 -13 51 92 101 187 88 73 -9 81 -13 121 -49 l39 -35 -49 -48 c-63
-62 -96 -82 -133 -82 l-30 0 -3 88 c-3 79 -5 87 -23 87 -19 0 -20 -6 -17 -87
l4 -88 -47 0 c-42 0 -46 -2 -43 -22 2 -19 10 -24 46 -26 29 -2 42 -8 42 -18 0
-36 -33 -156 -47 -169 -10 -11 -14 -29 -11 -55 2 -22 0 -40 -4 -40 -5 0 -38
14 -75 30 -77 35 -89 36 -103 11 -15 -28 -13 -88 4 -94 18 -7 36 12 36 39 0
22 0 22 69 -7 66 -28 73 -29 138 -19 37 6 113 15 168 21 56 6 115 18 135 28
83 42 108 185 44 252 -38 40 -95 69 -136 69 l-33 0 52 51 c29 27 57 57 61 66
11 19 4 53 -10 53 -5 0 -28 16 -51 35 -22 19 -57 40 -76 45 -42 11 -154 12
-192 1z m311 -316 c58 -30 82 -101 54 -161 -24 -52 -39 -62 -104 -69 -67 -7
-184 -24 -226 -31 l-31 -6 29 87 c16 47 32 108 35 135 6 48 7 50 47 59 51 12
160 5 196 -14z"/>
<path d="M20596 4271 c-21 -23 -12 -45 15 -38 18 5 19 -2 19 -115 0 -77 -6
-142 -16 -182 -16 -62 -38 -106 -53 -106 -23 0 -98 94 -134 168 -35 72 -40 93
-43 165 -2 45 -3 85 -4 90 0 11 -48 8 -56 -4 -3 -6 -1 -16 5 -22 6 -6 11 -34
11 -61 1 -105 50 -228 124 -310 57 -63 91 -79 127 -61 54 29 96 204 86 362 -9
125 -36 164 -81 114z"/>
<path d="M2594 4095 c-10 -24 3 -123 27 -215 23 -91 20 -133 -12 -174 -12 -15
-18 -34 -15 -42 19 -50 86 47 86 126 0 25 -7 71 -16 101 -9 30 -19 90 -23 134
-5 65 -9 80 -24 83 -9 2 -20 -4 -23 -13z"/>
<path d="M20440 3714 c-55 -31 -110 -97 -152 -182 -29 -58 -32 -73 -32 -160
-1 -118 16 -177 55 -198 36 -18 83 -18 124 2 37 17 124 112 180 196 20 32 45
60 55 63 22 7 45 58 36 81 -12 32 -43 6 -109 -91 -74 -110 -167 -210 -203
-219 -70 -18 -98 38 -92 178 3 77 8 99 33 145 30 56 124 161 144 161 6 0 9
-12 6 -27 -37 -218 -45 -281 -40 -301 8 -31 39 -25 43 8 2 14 11 29 19 34 12
7 14 20 9 67 -4 33 -2 94 5 137 14 89 7 132 -19 132 -9 0 -37 -12 -62 -26z"/>
<path d="M2567 3322 c-3 -4 -7 -68 -8 -142 -3 -119 -1 -135 13 -138 32 -6 50
140 32 251 -6 33 -25 49 -37 29z"/>
<path d="M6789 3070 c-107 -17 -229 -91 -229 -139 0 -18 6 -21 39 -21 22 0 62
5 90 12 40 9 51 16 51 31 0 18 -5 19 -50 14 -27 -3 -50 -4 -50 -1 0 17 122 55
203 64 120 12 193 -5 272 -66 75 -57 98 -149 61 -239 -31 -73 -47 -83 -129
-77 -46 3 -75 10 -80 18 -4 8 -15 14 -22 14 -8 0 -16 1 -16 3 -1 1 -6 63 -13
137 -10 128 -12 135 -33 138 -22 3 -29 -7 -23 -33 1 -5 8 -76 15 -158 12 -138
12 -150 -6 -183 l-18 -36 25 -34 c21 -28 27 -48 31 -116 l5 -83 -87 93 c-86
91 -110 106 -122 77 -3 -11 8 -28 35 -51 22 -19 69 -69 104 -112 60 -72 64
-79 56 -112 -4 -19 -5 -41 -3 -47 8 -23 36 -14 47 15 l11 28 46 -22 c87 -41
214 -48 278 -15 88 44 143 135 143 236 0 100 -45 149 -180 196 -36 12 -66 23
-68 25 -2 1 8 18 22 39 71 104 61 224 -26 308 -93 91 -218 122 -379 97z m228
-497 c18 -3 52 0 76 6 38 11 50 10 117 -14 41 -15 90 -36 108 -47 65 -40 79
-116 38 -203 -41 -89 -115 -132 -211 -122 -76 8 -130 26 -164 56 l-29 26 -6
159 -5 158 22 -6 c12 -4 37 -9 54 -13z"/>
<path d="M19975 3039 c-164 -13 -259 -32 -263 -51 -5 -25 27 -29 108 -12 102
20 537 31 640 15 121 -19 150 -29 160 -57 10 -26 29 -31 48 -12 36 36 -16 75
-135 102 -89 20 -403 28 -558 15z"/>
<path d="M19125 2850 c-4 -6 3 -38 14 -73 28 -86 58 -228 67 -315 5 -60 3 -80
-12 -113 -15 -34 -15 -42 -4 -49 20 -12 30 -3 51 44 16 38 17 49 4 151 -28
230 -88 407 -120 355z"/>
<path d="M19794 2795 c-9 -22 5 -36 29 -30 12 3 110 -19 217 -49 261 -73 351
-90 492 -90 121 -1 157 9 130 36 -9 9 -45 12 -120 9 -127 -3 -270 23 -511 94
-162 47 -228 56 -237 30z"/>
<path d="M2602 2707 c-7 -8 -10 -16 -7 -19 3 -2 10 -85 16 -182 8 -133 8 -190
-1 -224 -14 -59 1 -79 32 -42 20 24 20 33 14 215 -7 197 -14 256 -32 262 -6 2
-16 -3 -22 -10z"/>
<path d="M20377 2346 c-93 -34 -133 -127 -101 -235 20 -67 51 -93 119 -99 53
-4 57 -3 90 32 38 41 59 102 52 155 -2 20 2 45 9 56 39 63 -77 125 -169 91z
m114 -47 c20 -10 20 -10 1 -37 -18 -24 -18 -28 -5 -49 13 -20 14 -30 3 -68
-40 -144 -180 -117 -180 35 0 51 22 95 58 114 32 18 95 20 123 5z"/>
<path d="M19972 1833 c6 -139 31 -238 105 -408 102 -234 257 -404 347 -381 76
19 129 228 156 616 7 91 15 183 19 205 9 50 5 65 -19 65 -22 0 -23 -5 -45
-280 -30 -377 -74 -560 -133 -560 -24 0 -87 46 -133 97 -100 111 -222 391
-248 570 -15 98 -14 133 3 133 19 0 36 23 28 37 -8 12 -55 33 -74 33 -7 0 -9
-41 -6 -127z"/>
<path d="M19074 1616 c-3 -8 14 -117 37 -242 29 -163 57 -278 96 -398 36 -114
54 -187 54 -223 1 -49 3 -54 23 -51 37 5 26 97 -32 278 -54 167 -67 225 -107
455 -14 83 -30 160 -35 173 -11 25 -28 29 -36 8z"/>
<path d="M2585 1600 c-3 -5 -1 -44 4 -86 6 -41 11 -102 11 -135 0 -56 -1 -59
-25 -59 -18 0 -25 -5 -25 -20 0 -16 7 -20 34 -20 55 0 60 14 53 163 -3 73 -8
140 -12 150 -8 19 -30 23 -40 7z"/>
<path d="M2728 738 c-3 -7 4 -39 14 -72 10 -33 21 -92 25 -132 5 -69 5 -73
-20 -95 -21 -17 -24 -25 -16 -36 16 -18 36 -16 59 7 17 17 20 33 19 103 0 98
-34 230 -60 235 -10 2 -19 -3 -21 -10z"/>
<path d="M11020 411 c0 -16 11 -19 73 -25 39 -4 158 -21 262 -37 227 -35 315
-38 315 -11 0 15 -19 20 -147 35 -82 9 -206 26 -278 37 -170 26 -225 26 -225
1z"/>
<path d="M12360 415 c-69 -8 -126 -14 -127 -14 -2 -1 -3 -10 -3 -21 0 -20 4
-20 93 -14 178 12 202 17 202 39 0 25 -10 26 -165 10z"/>
<path d="M15882 383 c-18 -7 -86 -22 -150 -33 -64 -11 -156 -29 -203 -40 -47
-11 -151 -23 -232 -28 -147 -8 -174 -15 -158 -41 7 -11 36 -12 177 -2 93 6
194 18 224 26 30 8 96 22 145 30 197 33 245 48 245 76 0 25 -10 28 -48 12z"/>
<path d="M13950 327 c-125 -55 -150 -69 -150 -82 0 -28 23 -25 111 16 91 41
92 42 181 37 72 -5 91 -3 95 9 10 25 -10 32 -97 38 -75 5 -91 3 -140 -18z"/>
<path d="M8870 319 c-14 -6 -95 -29 -180 -51 l-155 -40 -315 -8 c-331 -7 -337
-8 -465 -61 -38 -16 -55 -28 -55 -41 0 -24 18 -23 92 7 122 48 176 55 383 49
242 -8 342 3 563 61 174 46 211 62 198 84 -9 13 -32 13 -66 0z"/>
<path d="M9773 310 c-6 -7 -9 -19 -6 -26 4 -11 28 -14 95 -14 49 0 142 -5 206
-11 138 -13 217 -4 217 25 0 16 -12 18 -135 21 -74 1 -187 5 -250 10 -86 5
-118 4 -127 -5z"/>
<path d="M6644 279 c-5 -9 -61 -11 -231 -6 -198 6 -224 5 -230 -9 -3 -8 -2
-19 3 -24 5 -5 102 -12 215 -16 229 -8 283 0 277 39 -4 24 -23 33 -34 16z"/>
<path d="M18537 266 c-3 -8 -40 -22 -83 -32 -75 -18 -164 -63 -164 -84 0 -21
30 -22 62 -2 18 11 70 30 115 42 83 22 120 47 110 75 -8 19 -33 20 -40 1z"/>
<path d="M17633 250 c-44 -20 -54 -36 -28 -46 20 -8 120 31 120 47 0 21 -46
21 -92 -1z"/>
<path d="M4423 235 c-24 -8 -100 -21 -170 -29 -129 -16 -157 -26 -135 -48 9
-9 42 -8 150 5 159 19 217 36 217 62 0 24 -11 26 -62 10z"/>
<path d="M3185 220 c-4 -7 -3 -16 3 -22 14 -14 45 -2 40 15 -6 16 -34 21 -43
7z"/>
<path d="M5353 223 c-31 -4 -51 -27 -33 -38 5 -3 54 -7 110 -8 74 -2 104 1
112 11 7 8 7 16 2 22 -11 10 -146 20 -191 13z"/>
<path d="M19166 201 c-4 -5 9 -38 28 -73 25 -45 33 -71 29 -90 -5 -25 -2 -28
20 -28 42 0 42 35 0 120 -35 70 -63 95 -77 71z"/>
<path d="M3363 184 c-10 -26 42 -66 81 -62 43 4 44 40 1 48 -16 4 -40 12 -53
19 -19 10 -23 9 -29 -5z"/>
<path d="M16986 171 c-12 -18 1 -28 46 -35 24 -4 72 -16 106 -27 47 -16 67
-18 75 -10 8 8 7 15 -3 25 -36 34 -210 71 -224 47z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 42 KiB

658
docs/images/dts-curate.svg Normal file
View file

@ -0,0 +1,658 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1696.000000pt" height="1382.000000pt" viewBox="0 0 1696.000000 1382.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,1382.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M5560 13432 c0 -21 30 -38 87 -48 21 -3 55 -16 76 -27 30 -17 40 -18
50 -8 9 10 6 17 -16 37 -15 13 -40 27 -55 30 -15 3 -47 12 -71 20 -59 18 -71
18 -71 -4z"/>
<path d="M8923 13380 c-23 -9 -75 -89 -67 -102 12 -19 41 -5 58 27 11 19 25
35 33 35 22 0 135 -48 175 -75 45 -30 58 -31 58 -5 0 24 -52 60 -135 93 -83
34 -97 37 -122 27z"/>
<path d="M3745 13369 c-16 -5 -50 -19 -75 -33 -25 -13 -58 -26 -73 -30 -20 -5
-27 -12 -25 -24 6 -29 37 -25 115 13 94 46 154 51 198 17 25 -20 30 -21 43 -8
12 12 13 18 3 30 -33 40 -117 56 -186 35z"/>
<path d="M4903 13363 c-7 -18 33 -57 48 -47 14 8 11 31 -7 48 -20 20 -33 20
-41 -1z"/>
<path d="M6125 13320 c-22 -11 -44 -20 -50 -20 -18 0 -34 -21 -28 -36 8 -21
50 -17 83 7 23 18 37 21 74 16 54 -8 70 8 36 35 -29 23 -66 23 -115 -2z"/>
<path d="M4318 13312 c-23 -10 -61 -60 -53 -72 10 -16 25 -12 57 15 16 14 38
25 49 25 12 0 19 7 19 20 0 15 -6 20 -27 19 -16 0 -36 -3 -45 -7z"/>
<path d="M8770 13304 c-25 -8 -51 -12 -58 -9 -18 7 -52 -12 -52 -29 0 -21 68
-25 120 -8 52 17 75 35 66 51 -9 14 -19 13 -76 -5z"/>
<path d="M7283 13295 c-28 -20 -45 -50 -53 -95 -5 -35 -6 -35 -55 -35 -43 0
-50 -3 -50 -20 0 -16 10 -22 54 -29 50 -9 56 -8 73 13 10 13 18 31 18 41 0 38
23 81 52 96 16 8 28 21 25 27 -6 18 -40 19 -64 2z"/>
<path d="M8285 13295 c-226 -59 -267 -79 -244 -116 7 -11 12 -12 29 -1 33 20
179 65 268 82 50 10 62 16 62 31 0 23 -39 24 -115 4z"/>
<path d="M2915 13290 c-22 -5 -82 -9 -132 -9 -84 -1 -93 -3 -93 -20 0 -26 87
-34 223 -19 l108 12 23 -29 c13 -16 28 -25 34 -21 18 11 14 32 -10 61 -26 29
-88 39 -153 25z"/>
<path d="M6408 13279 c-37 -21 -48 -42 -28 -54 15 -9 122 44 117 58 -6 20 -49
17 -89 -4z"/>
<path d="M6856 13241 c-36 -37 -41 -39 -60 -25 -28 19 -56 18 -56 -4 0 -10 18
-27 44 -42 l45 -24 43 49 c42 48 53 75 33 82 -6 2 -28 -15 -49 -36z"/>
<path d="M2195 13245 c-95 -24 -129 -45 -107 -67 6 -6 33 -2 78 12 73 23 236
30 242 10 2 -6 12 -10 23 -10 27 0 25 35 -3 54 -28 20 -159 20 -233 1z"/>
<path d="M7497 13213 c-20 -3 -27 -9 -25 -21 3 -14 14 -17 62 -15 60 2 84 13
72 32 -7 11 -53 12 -109 4z"/>
<path d="M1311 13111 c-8 -5 -11 -15 -8 -23 4 -11 35 -16 129 -21 139 -7 168
-3 168 24 0 18 -9 19 -124 19 -68 0 -130 2 -138 5 -7 3 -19 1 -27 -4z"/>
<path d="M9472 13104 c2 -15 16 -21 58 -26 56 -7 80 -25 80 -60 0 -11 7 -18
20 -18 29 0 27 51 -4 86 -20 24 -32 28 -91 32 -61 4 -67 3 -63 -14z"/>
<path d="M850 13090 c-12 -12 -18 -25 -15 -30 8 -13 42 -13 50 1 5 7 25 8 56
4 44 -6 49 -5 49 13 0 37 -106 46 -140 12z"/>
<path d="M3846 12813 c-28 -140 -32 -294 -10 -483 8 -74 17 -174 21 -222 6
-86 9 -93 41 -89 8 1 21 -4 30 -12 33 -29 82 -47 126 -47 36 0 52 6 78 29 31
28 33 33 33 98 0 60 -4 74 -27 105 -50 66 -157 97 -220 64 -27 -14 -27 -14
-35 22 -4 20 -8 137 -8 260 0 175 3 225 13 231 22 13 11 65 -15 69 -16 2 -22
-3 -27 -25z m189 -597 c60 -26 85 -61 85 -122 0 -59 -22 -94 -60 -94 -30 0
-84 25 -125 57 -35 27 -36 30 -30 77 8 65 19 84 52 89 16 2 32 5 36 6 4 0 23
-6 42 -13z"/>
<path d="M540 12767 c0 -8 -9 -22 -20 -32 -12 -10 -30 -34 -42 -53 -18 -30
-19 -35 -6 -49 14 -13 18 -12 34 12 11 15 34 45 53 66 28 32 31 42 21 54 -15
19 -40 20 -40 2z"/>
<path d="M3110 12681 c0 -11 5 -21 10 -23 7 -2 5 -75 -6 -213 -18 -232 -15
-557 6 -612 17 -48 44 -43 80 13 16 26 27 51 24 55 -9 16 -32 10 -47 -12 l-15
-21 -8 24 c-12 37 -6 449 9 618 13 138 13 157 -1 173 -21 23 -52 22 -52 -2z"/>
<path d="M9706 12668 c-10 -30 -15 -178 -6 -183 4 -3 16 2 25 11 12 13 15 33
13 97 -2 53 -7 82 -15 85 -7 2 -15 -2 -17 -10z"/>
<path d="M5755 12416 c-106 -34 -184 -88 -172 -120 3 -7 45 -32 94 -56 93 -44
225 -136 243 -170 9 -16 6 -22 -22 -37 -27 -14 -63 -18 -185 -21 -139 -3 -153
-5 -153 -22 0 -24 27 -30 145 -30 134 0 253 33 269 75 17 45 -97 153 -236 224
-45 23 -86 45 -91 48 -19 12 103 68 181 83 30 5 51 4 64 -3 14 -9 21 -8 34 5
14 14 15 20 4 32 -18 23 -92 19 -175 -8z"/>
<path d="M474 12393 c15 -67 16 -143 3 -210 -14 -74 -10 -100 16 -90 18 7 48
165 42 216 -10 76 -25 111 -47 111 -17 0 -19 -4 -14 -27z"/>
<path d="M5176 12397 c-52 -16 -78 -53 -80 -112 l-1 -47 -73 4 c-58 4 -75 2
-79 -9 -10 -25 14 -35 90 -38 73 -3 77 -4 108 -40 42 -48 122 -87 245 -120 54
-15 106 -29 115 -32 22 -6 34 14 20 31 -7 8 -58 26 -114 41 -116 32 -196 67
-228 101 -17 18 -19 24 -8 28 8 2 46 14 86 25 130 38 196 129 115 159 -44 17
-154 21 -196 9z m181 -50 c15 -16 -46 -56 -116 -77 -94 -28 -101 -27 -101 13
0 35 15 61 40 71 22 8 167 2 177 -7z"/>
<path d="M4902 12369 c-27 -10 -26 -45 1 -43 15 2 15 -1 -3 -26 -28 -39 -111
-130 -118 -130 -4 0 -31 14 -60 31 -44 25 -51 33 -42 44 15 18 6 45 -14 45 -9
0 -20 -9 -26 -20 -15 -28 -32 -25 -51 8 -30 54 -191 70 -241 25 -72 -64 -79
-256 -12 -314 38 -33 57 -31 129 17 91 59 102 70 124 118 30 69 44 75 104 41
29 -15 54 -29 56 -31 2 -2 -21 -34 -52 -72 -61 -74 -87 -117 -87 -144 0 -29
37 -22 48 10 13 37 133 184 146 178 94 -42 142 -57 179 -54 34 2 42 7 42 22 0
16 -8 20 -47 22 -42 3 -148 39 -148 51 0 3 24 32 54 65 83 91 112 169 64 167
-13 0 -33 -4 -46 -10z m-391 -91 c42 -14 49 -23 49 -70 0 -29 -9 -47 -43 -87
-38 -44 -112 -111 -124 -111 -56 0 -80 139 -40 227 21 46 91 64 158 41z"/>
<path d="M9741 12371 c-11 -7 -7 -25 20 -97 18 -49 33 -107 33 -128 1 -42 17
-56 42 -36 18 16 12 49 -26 161 -31 90 -47 113 -69 100z"/>
<path d="M3384 12235 c-4 -9 -5 -76 -2 -149 4 -109 9 -139 27 -174 26 -51 63
-70 95 -48 29 18 82 119 100 187 14 54 14 54 25 26 6 -16 11 -34 11 -41 0 -28
71 -202 86 -213 21 -15 50 -1 59 28 9 28 -9 46 -29 30 -12 -10 -18 -1 -36 51
-12 35 -34 108 -49 163 -25 90 -30 100 -51 100 -21 0 -27 -10 -52 -100 -31
-106 -73 -195 -94 -195 -28 0 -47 86 -48 218 -1 112 -3 127 -19 130 -9 2 -20
-4 -23 -13z"/>
<path d="M545 11771 c-3 -6 -2 -37 3 -68 6 -32 9 -74 8 -93 -1 -29 3 -35 19
-35 17 0 20 8 23 60 4 87 -29 173 -53 136z"/>
<path d="M9826 11628 c3 -67 10 -127 15 -132 4 -5 15 -6 23 -3 19 8 20 56 3
172 -10 64 -16 81 -30 83 -17 4 -18 -4 -11 -120z"/>
<path d="M8430 11424 c-30 -8 -103 -28 -161 -44 -88 -25 -125 -30 -220 -30
-130 -1 -236 -20 -259 -47 -21 -26 -70 -47 -102 -44 -16 1 -28 -2 -28 -8 0 -6
-20 -11 -47 -11 -27 0 -91 -7 -143 -16 -52 -8 -113 -16 -135 -17 -33 -2 -41
-6 -43 -24 -3 -18 2 -23 17 -23 20 0 21 -5 21 -133 0 -146 15 -371 31 -457 16
-89 38 -272 54 -459 8 -95 18 -177 21 -182 12 -19 32 -7 38 22 9 47 7 139 -3
139 -5 0 -12 35 -16 78 -11 120 -34 308 -50 407 -8 50 -17 169 -20 265 -3 96
-7 209 -9 251 l-4 76 87 11 c47 6 140 16 206 22 166 15 230 30 230 55 0 12 -9
21 -25 25 -22 6 -20 7 15 13 22 4 90 7 150 7 75 1 132 7 180 20 327 89 350 92
456 42 69 -32 65 -11 48 -262 -9 -121 -9 -212 -1 -340 11 -187 60 -523 91
-630 30 -102 33 -126 19 -137 -19 -16 -190 -33 -320 -33 -192 0 -522 -31 -643
-60 -22 -5 -56 -10 -76 -10 -19 0 -75 -16 -124 -36 -48 -19 -97 -33 -107 -31
-20 6 -51 -19 -45 -37 8 -23 58 -16 158 23 60 24 120 41 143 41 23 0 68 7 101
14 33 8 92 17 130 21 39 3 85 8 103 11 29 4 32 2 32 -19 0 -46 -28 -91 -72
-119 -60 -37 -83 -64 -106 -123 -12 -31 -27 -51 -38 -54 -45 -8 -53 -47 -11
-53 13 -2 23 -13 27 -28 7 -30 34 -37 56 -16 16 16 79 21 120 10 21 -5 22 -13
26 -157 3 -84 2 -156 -1 -162 -8 -14 -2 -220 10 -325 12 -111 11 -180 -1 -180
-18 0 -11 -39 9 -50 14 -7 23 -6 33 3 7 8 63 22 124 31 61 9 150 31 200 47 89
30 143 38 399 59 72 5 186 17 255 26 95 12 173 14 325 10 198 -6 368 6 465 34
58 17 67 14 62 -19 -5 -35 14 -49 36 -27 14 14 14 20 4 36 -15 25 -16 25 102
45 49 8 139 15 201 15 106 0 113 -1 108 -19 -8 -31 16 -34 55 -8 42 28 107 41
158 31 33 -6 34 -8 28 -40 -4 -21 -2 -34 4 -34 6 0 12 -21 14 -47 4 -64 26
-68 76 -15 51 55 122 89 358 171 131 46 150 62 97 82 -15 5 -46 28 -70 50 -24
22 -55 45 -71 51 -15 6 -100 13 -190 16 -161 4 -164 5 -172 28 -6 15 -18 24
-30 24 -20 0 -21 -4 -18 -105 l3 -104 -55 -7 c-30 -4 -72 -13 -94 -20 -26 -10
-90 -14 -203 -14 -164 0 -240 -10 -453 -57 -60 -14 -135 -17 -370 -19 -234 -1
-329 -6 -460 -22 -91 -12 -232 -26 -315 -31 -126 -8 -165 -15 -245 -42 -52
-17 -143 -39 -202 -48 l-106 -17 -6 29 c-11 54 -7 104 10 118 14 11 16 30 11
119 -3 65 -10 116 -20 135 -12 23 -16 75 -19 224 l-3 194 56 21 c31 12 63 27
72 34 16 14 18 12 80 -77 28 -41 67 -56 67 -27 0 8 -13 34 -29 58 -16 24 -62
108 -102 187 -40 79 -86 156 -102 172 l-28 28 23 6 c13 2 131 9 263 15 132 6
257 13 277 16 34 6 37 4 40 -22 2 -21 8 -29 23 -29 17 0 21 8 23 45 4 48 -11
140 -33 205 -8 22 -25 112 -39 200 -15 88 -32 187 -39 220 -17 84 -17 650 1
724 11 48 11 56 -5 74 -10 11 -34 26 -53 34 -19 8 -43 22 -52 30 -24 22 -168
26 -238 7z m-140 -1667 c47 -85 51 -103 18 -86 -13 6 -35 23 -50 37 -24 22
-28 34 -28 79 0 34 4 52 10 48 5 -3 28 -39 50 -78z m-110 -61 c0 -8 -14 -29
-31 -47 l-31 -33 23 47 c23 46 39 60 39 33z m-94 -40 c-20 -43 -51 -60 -34
-18 14 32 39 64 46 57 3 -2 -3 -20 -12 -39z m214 -38 c16 -10 24 -10 43 1 20
12 21 12 7 -3 -12 -13 -26 -15 -64 -10 -31 5 -43 10 -34 15 18 12 25 11 48 -3z
m2849 -560 c13 -5 22 -10 20 -13 -3 -2 -68 1 -146 7 -113 9 -145 9 -158 -2
-23 -19 -18 -36 18 -64 l32 -26 -56 0 c-55 0 -57 1 -63 31 -3 17 -6 45 -6 61
l0 29 168 -7 c92 -4 178 -11 191 -16z m-159 -63 c-18 -10 -28 -10 -42 -1 -28
17 -22 22 24 18 40 -4 41 -5 18 -17z m156 -43 c-3 -3 -23 -13 -45 -23 -42 -18
-40 -19 -50 26 -3 15 41 23 72 12 15 -5 26 -12 23 -15z m-238 -46 c-22 -16
-23 -32 -3 -43 12 -7 5 -14 -30 -31 -25 -12 -45 -26 -45 -32 0 -5 -3 -10 -8
-10 -4 0 -8 27 -10 59 l-3 60 38 4 c80 8 80 8 61 -7z m71 -20 c-2 -2 -15 -9
-29 -15 -24 -11 -24 -11 -6 3 16 13 49 24 35 12z"/>
<path d="M5510 11253 c-8 -3 -112 -43 -230 -88 -344 -133 -352 -134 -720 -155
-102 -6 -200 -13 -217 -16 l-33 -6 0 45 c0 25 -5 49 -10 52 -21 13 -40 -17
-40 -61 l0 -44 -39 0 c-43 0 -64 -18 -59 -51 4 -29 21 -34 42 -14 9 9 25 15
37 13 20 -3 22 -10 26 -133 2 -71 10 -212 19 -312 8 -107 14 -290 14 -440 l-1
-258 22 0 c12 0 28 10 36 21 12 19 12 24 -3 39 -15 15 -16 36 -11 213 5 142 3
243 -8 362 -8 91 -18 244 -22 341 l-6 177 29 6 c86 17 170 26 259 26 251 1
374 25 615 121 220 87 349 131 364 126 8 -3 16 -21 20 -41 7 -39 50 -96 71
-96 22 0 24 23 4 45 -10 11 -26 45 -36 75 l-18 55 -45 2 c-25 1 -52 -1 -60 -4z"/>
<path d="M5745 11238 c-2 -7 -6 -33 -8 -58 -3 -25 -13 -97 -22 -160 -21 -142
-15 -375 14 -560 19 -123 75 -361 125 -531 14 -48 24 -99 23 -115 -2 -23 2
-29 18 -29 17 0 20 8 23 47 2 26 -2 56 -7 67 -6 11 -36 118 -66 238 -54 214
-88 405 -100 573 -7 95 8 297 30 415 21 106 20 125 -5 125 -11 0 -22 -6 -25
-12z"/>
<path d="M585 11160 c-4 -6 1 -23 10 -37 10 -14 20 -49 24 -77 5 -42 9 -51 26
-51 17 0 20 6 19 46 0 74 -56 157 -79 119z"/>
<path d="M9926 11048 c-3 -7 -6 -54 -8 -105 -3 -67 -1 -94 8 -97 33 -13 55 87
37 168 -9 40 -29 59 -37 34z"/>
<path d="M3253 10956 c-4 -8 -48 -26 -98 -41 -197 -58 -277 -98 -379 -187 -28
-24 -38 -39 -33 -51 9 -25 17 -22 82 34 33 27 92 66 130 84 86 42 297 107 309
95 5 -5 12 -86 17 -182 10 -217 12 -232 59 -523 42 -266 66 -439 75 -560 l7
-80 -174 -2 c-235 -3 -381 -17 -658 -64 -157 -27 -281 -42 -372 -46 -153 -7
-147 -10 -127 61 9 33 8 42 -5 51 -11 9 -21 68 -41 251 -34 306 -42 537 -25
706 9 96 10 132 1 141 -58 58 -73 -364 -28 -793 14 -135 28 -284 32 -332 7
-85 6 -86 -17 -90 -31 -4 -36 -34 -6 -43 13 -4 26 -13 30 -18 5 -8 14 -7 30 1
13 7 93 16 178 22 85 5 218 21 295 35 191 34 316 52 468 64 147 13 416 15 418
4 7 -33 5 -263 -2 -263 -5 0 -9 -9 -9 -21 0 -16 5 -20 28 -17 l27 3 3 146 3
147 35 -8 c36 -8 57 -20 36 -20 -14 0 -16 -26 -3 -34 5 -3 32 0 60 7 92 21 58
62 -75 89 -62 12 -60 7 -69 143 -7 117 -28 266 -77 555 -36 209 -41 259 -45
450 -4 166 -8 219 -19 231 -8 9 -12 24 -8 34 11 29 -37 49 -53 21z"/>
<path d="M2983 10936 c-10 -17 -84 -40 -188 -59 -110 -21 -183 -27 -371 -32
-182 -5 -316 -29 -401 -71 -28 -15 -58 -24 -66 -21 -18 7 -37 -11 -30 -29 8
-21 80 -18 111 5 60 41 221 71 388 71 320 0 707 88 623 141 -21 13 -57 11 -66
-5z"/>
<path d="M8217 10903 c-17 -17 -5 -54 26 -77 56 -42 132 -83 198 -107 35 -12
65 -24 67 -25 9 -7 -29 -55 -115 -147 -98 -106 -130 -154 -120 -181 10 -25 25
-19 42 15 9 17 48 65 87 107 40 43 91 102 115 132 29 37 50 55 65 55 37 0 36
40 -2 58 -17 9 -37 14 -44 11 -40 -15 -270 100 -287 144 -9 22 -20 28 -32 15z"/>
<path d="M5070 10803 c-19 -2 -44 -8 -55 -13 -11 -5 -38 -14 -60 -21 -151 -44
-332 -196 -350 -293 -12 -61 29 -115 91 -119 44 -3 39 32 -6 47 -37 12 -47 35
-36 82 19 75 226 227 341 249 l30 6 2 -118 c1 -83 11 -167 32 -283 48 -257 42
-288 -47 -255 -26 10 -74 33 -108 52 -66 36 -89 41 -97 19 -11 -27 193 -125
300 -146 82 -16 218 -9 261 14 114 59 87 346 -40 424 -18 11 -45 24 -60 27
-16 4 -26 11 -23 15 16 26 23 115 14 167 -24 140 -51 161 -189 146z m124 -72
c18 -33 31 -148 22 -184 -6 -27 -56 -61 -103 -71 -29 -7 -31 -5 -37 31 -3 21
-6 86 -6 146 l0 107 55 0 c50 0 56 -2 69 -29z m109 -322 c56 -36 80 -95 85
-205 4 -84 2 -92 -19 -118 -26 -30 -78 -45 -149 -46 -79 0 -91 7 -84 49 3 20
-3 91 -15 158 -12 67 -21 130 -21 140 0 55 130 69 203 22z"/>
<path d="M7702 10771 c-10 -6 -12 -21 -7 -50 6 -39 1 -52 -51 -143 -31 -55
-65 -109 -76 -120 -29 -29 -19 -53 22 -54 19 0 61 -13 94 -28 110 -51 253 -73
283 -44 26 27 6 38 -66 38 -75 0 -125 12 -217 54 l-62 28 45 76 c65 108 103
192 103 225 0 23 -4 27 -27 27 -16 0 -34 -4 -41 -9z"/>
<path d="M7864 10767 c-5 -15 20 -86 83 -232 30 -69 44 -90 58 -90 17 0 21 12
31 85 12 89 36 160 53 160 18 0 59 -72 72 -125 6 -27 13 -56 15 -63 2 -8 12
-12 21 -10 57 12 -41 248 -102 248 -13 0 -33 -10 -44 -21 -21 -23 -51 -100
-51 -130 0 -47 -22 -19 -61 81 -40 103 -62 130 -75 97z"/>
<path d="M684 10569 c-3 -6 2 -26 12 -45 l18 -33 -33 -69 c-33 -67 -34 -96 -5
-90 8 2 31 38 51 81 l37 78 -22 44 c-21 43 -44 57 -58 34z"/>
<path d="M6840 10510 c-56 -56 15 -132 111 -118 29 4 47 60 29 94 -25 45 -105
59 -140 24z m85 -34 c25 -18 14 -46 -17 -39 -37 9 -50 23 -37 39 14 18 30 18
54 0z"/>
<path d="M9926 10502 c-3 -5 -8 -28 -12 -50 -5 -34 -4 -42 8 -42 23 0 37 22
40 60 2 25 -1 35 -14 38 -9 2 -19 -1 -22 -6z"/>
<path d="M6215 10455 c-48 -48 -26 -145 33 -145 33 0 52 27 52 75 0 92 -35
121 -85 70z m45 -64 c0 -17 -4 -33 -10 -36 -11 -7 -25 39 -15 54 12 21 25 11
25 -18z"/>
<path d="M6583 10464 c-17 -9 -34 -23 -38 -31 -7 -19 20 -63 40 -63 18 0 45
27 45 46 0 8 6 14 14 14 22 0 38 24 24 38 -16 16 -47 15 -85 -4z"/>
<path d="M2834 10426 c-3 -8 -3 -19 0 -24 3 -5 -6 -20 -21 -33 -17 -16 -27
-20 -30 -12 -3 7 -13 23 -22 35 -23 28 -56 18 -47 -15 22 -73 20 -86 -21 -145
-88 -127 -233 -394 -233 -430 0 -35 62 -8 65 28 1 11 18 56 39 98 l38 78 71
-3 c93 -4 214 -21 250 -35 18 -7 37 -28 53 -60 27 -54 50 -59 48 -11 -2 33 -9
48 -68 144 -21 35 -63 109 -93 163 l-54 99 46 47 c53 54 57 83 12 88 -17 2
-29 -2 -33 -12z m10 -280 c37 -66 66 -120 66 -121 0 -1 -24 1 -52 6 -29 4 -92
10 -140 14 l-86 7 31 53 c34 57 110 165 114 162 1 -2 31 -56 67 -121z"/>
<path d="M9965 10159 c-4 -5 1 -27 11 -47 21 -44 33 -202 15 -202 -6 0 -11 -9
-11 -21 0 -31 42 -21 58 14 18 37 1 193 -25 237 -18 31 -37 38 -48 19z"/>
<path d="M656 9931 c-4 -6 1 -22 10 -37 17 -25 17 -28 -1 -60 -14 -26 -16 -37
-7 -46 14 -14 37 3 58 44 14 26 13 33 -3 66 -18 37 -45 52 -57 33z"/>
<path d="M4371 9781 c-107 -40 -199 -123 -161 -146 12 -7 116 51 133 74 46 65
299 65 616 -1 125 -26 151 -34 137 -43 -9 -7 -16 -22 -16 -35 0 -12 -22 -62
-49 -110 -63 -110 -101 -237 -108 -355 -5 -76 -3 -93 11 -104 11 -9 20 -10 29
-3 9 8 158 34 163 28 1 0 -5 -41 -12 -91 -8 -49 -11 -101 -7 -115 4 -14 7
-151 8 -305 1 -155 7 -309 13 -345 6 -36 16 -119 22 -185 14 -159 19 -195 26
-206 8 -14 156 -11 231 6 37 8 95 24 128 36 57 20 73 21 315 16 180 -4 274
-10 320 -21 66 -15 187 -28 450 -45 110 -8 166 -17 230 -37 112 -36 282 -38
440 -6 89 17 152 21 405 25 430 7 686 38 1090 133 39 9 120 20 180 24 121 9
535 77 660 109 109 28 352 70 452 78 88 6 82 9 98 -42 4 -13 9 -14 25 -5 15 8
19 17 15 31 -6 18 0 19 146 19 115 0 165 4 206 17 51 16 54 16 67 -2 11 -15
21 -17 66 -11 l53 7 -7 -109 c-5 -91 -4 -111 9 -122 12 -10 22 -6 55 28 22 22
51 43 63 46 13 3 68 31 123 62 146 83 251 134 274 134 27 0 38 29 17 45 -9 6
-42 17 -74 24 -32 7 -85 21 -118 32 -33 11 -113 25 -177 31 l-117 12 -6 61
c-8 73 -16 88 -41 83 -15 -2 -20 -13 -22 -50 -2 -36 -7 -47 -23 -51 -25 -7
-24 -29 1 -52 12 -11 20 -31 20 -51 0 -32 -2 -33 -57 -44 -32 -6 -87 -20 -123
-31 -54 -17 -88 -20 -207 -17 -162 3 -142 -8 -178 106 -10 31 -22 52 -31 52
-24 0 -25 -21 -5 -85 10 -33 18 -61 17 -62 -1 -1 -43 -7 -93 -13 -120 -13
-417 -68 -472 -86 -24 -8 -78 -19 -120 -25 -42 -6 -164 -26 -271 -45 -107 -19
-221 -34 -253 -34 -51 0 -348 -53 -522 -94 -33 -8 -141 -21 -240 -30 -99 -9
-221 -21 -272 -26 -50 -6 -195 -10 -320 -10 -195 0 -243 -3 -323 -21 -129 -28
-307 -22 -425 14 -94 29 -136 34 -385 47 -102 6 -203 15 -225 20 -22 5 -96 17
-165 26 -168 21 -480 11 -553 -17 -83 -33 -279 -59 -292 -40 -2 4 -8 63 -15
131 -6 69 -17 166 -25 215 -9 60 -15 200 -16 425 -3 355 3 448 29 458 9 3 57
30 106 59 96 57 134 65 185 38 25 -13 31 -13 41 0 14 17 -17 63 -116 165 -66
69 -103 132 -128 218 -14 50 -14 53 2 48 59 -18 270 -49 337 -50 155 -1 292
55 283 116 -4 29 -41 32 -47 3 -5 -29 -28 -42 -103 -60 -108 -24 -235 -16
-440 31 -61 14 -67 18 -70 42 -4 33 -40 42 -69 16 -22 -20 -32 -19 -239 26
-124 27 -171 32 -325 36 -162 4 -185 3 -234 -15z m830 -133 c9 -7 23 -40 33
-73 29 -95 70 -166 131 -225 62 -60 86 -94 60 -84 -8 3 -29 1 -47 -5 -26 -9
-34 -9 -40 4 -5 8 -17 15 -27 15 -9 0 -41 12 -70 26 l-53 27 7 82 c6 79 6 83
-15 90 -12 4 -27 1 -36 -6 -13 -10 -17 -10 -25 2 -12 19 -11 39 3 80 24 72 48
92 79 67z m-142 -315 c-7 -32 -12 -73 -12 -91 0 -28 -5 -34 -29 -39 -36 -7
-45 -21 -26 -40 13 -13 20 -13 52 1 21 9 50 25 67 36 16 12 29 17 29 12 0 -9
-149 -92 -164 -92 -3 0 -6 22 -6 49 0 37 11 71 45 143 25 53 46 102 46 109 1
8 4 4 6 -8 2 -12 -1 -48 -8 -80z m63 -58 c-17 -37 -33 -32 -21 7 5 18 9 35 9
37 0 3 5 0 12 -7 9 -9 9 -18 0 -37z m93 -7 c24 -11 34 -28 16 -28 -5 0 -16 -3
-24 -6 -10 -3 -16 3 -19 20 -6 30 -7 30 27 14z m35 -72 c0 -2 -16 -13 -35 -25
-19 -11 -35 -16 -35 -11 0 5 12 16 28 24 27 15 42 19 42 12z m5570 -900 c0 -3
-4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m90 -26 c0
-5 -4 -10 -9 -10 -6 0 -13 5 -16 10 -3 6 1 10 9 10 9 0 16 -4 16 -10z m159
-50 c12 0 21 -4 21 -10 0 -5 8 -10 18 -10 14 0 15 -2 2 -10 -23 -15 -32 -12
-70 22 -20 17 -25 25 -13 19 12 -6 31 -11 42 -11z m-130 -20 c-12 -16 -26 -27
-31 -24 -15 9 -8 42 10 47 39 10 42 7 21 -23z m-62 -67 c21 -46 46 -42 78 13
l27 46 24 -23 24 -22 -76 -44 c-42 -23 -82 -43 -89 -43 -7 0 -24 -9 -38 -20
-33 -26 -37 -25 -37 9 0 19 6 30 18 33 11 3 23 24 32 58 8 29 16 46 18 39 3
-8 11 -29 19 -46z"/>
<path d="M12214 9656 c-3 -7 -4 -17 -3 -22 1 -5 1 -21 0 -36 -1 -25 -5 -28
-38 -28 -40 0 -103 -40 -103 -66 0 -18 58 -44 99 -44 24 0 28 -3 24 -20 -3
-10 -11 -25 -19 -31 -8 -6 -14 -20 -14 -30 0 -18 -2 -18 -36 -4 -19 8 -90 31
-157 51 -102 31 -138 37 -217 38 -83 1 -95 -1 -95 -16 0 -9 -4 -20 -8 -24 -15
-15 -7 -63 12 -74 18 -9 37 -61 33 -87 -4 -18 68 -133 82 -133 17 0 27 25 19
46 -10 28 35 54 95 54 28 0 52 -2 52 -4 0 -2 -7 -23 -15 -46 -29 -83 1 -170
60 -170 22 0 19 37 -5 50 -25 13 -27 72 -4 130 24 59 37 50 28 -17 -8 -67 -9
-57 4 -151 6 -39 8 -81 5 -93 -4 -15 0 -22 16 -26 14 -3 21 -13 21 -28 0 -39
24 -55 65 -44 22 6 58 7 94 2 70 -11 105 -2 141 34 37 38 42 59 32 131 l-9 62
26 -17 c84 -55 121 -74 130 -68 18 11 12 34 -11 46 -23 11 -244 164 -262 180
-18 16 109 -23 135 -42 15 -10 38 -18 51 -17 12 1 71 -19 130 -45 59 -26 113
-47 120 -47 8 0 24 -7 36 -16 33 -23 52 -11 52 31 0 30 -5 37 -32 49 -134 57
-182 76 -194 76 -8 0 -14 9 -14 20 0 14 -10 22 -32 28 -32 8 -33 10 -30 58 4
69 -29 125 -82 138 -44 12 -68 1 -76 -35 -6 -22 -7 -21 -13 10 -12 59 -8 89
12 96 10 3 26 14 35 24 24 27 8 54 -44 75 -25 10 -44 25 -50 41 -10 27 -37 34
-46 11z m96 -100 c0 -2 -7 -9 -15 -16 -12 -10 -15 -10 -15 4 0 9 7 16 15 16 8
0 15 -2 15 -4z m-100 -35 c0 -11 -40 -22 -54 -14 -5 4 -1 10 10 14 27 11 44
11 44 0z m53 -117 c8 -40 -19 -69 -52 -56 l-22 8 20 25 c11 14 23 38 27 54 8
31 17 20 27 -31z m-328 -15 c73 -24 63 -40 -11 -20 -30 8 -41 7 -54 -4 -22
-20 -33 -19 -72 5 -18 11 -47 20 -64 20 -20 0 -34 6 -38 16 -6 15 3 16 81 11
49 -3 120 -16 158 -28z m495 -75 c0 -23 -5 -34 -14 -34 -10 0 -15 16 -18 56
-3 54 -3 55 15 33 9 -11 17 -36 17 -55z m-172 -34 c13 -8 11 -9 -13 -4 -100
20 -182 47 -192 63 -9 15 5 12 88 -15 55 -18 107 -38 117 -44z m-498 48 c0
-16 31 -48 47 -48 7 0 13 7 13 16 0 8 5 12 11 8 15 -9 -8 -31 -42 -39 -23 -6
-27 -2 -41 34 -14 35 -14 41 -2 41 8 0 14 -5 14 -12z m205 -38 c4 -6 -9 -10
-32 -10 -28 0 -34 3 -23 10 20 13 47 13 55 0z m170 -73 c12 -10 14 -16 7 -21
-31 -19 -1 -105 32 -93 16 6 18 2 20 -48 1 -13 8 -20 21 -20 18 0 20 6 19 52
-2 46 0 51 15 44 43 -24 91 -101 91 -148 0 -39 -44 -57 -137 -55 -58 1 -74 -2
-82 -15 -7 -14 -12 -8 -22 28 -7 24 -21 53 -32 63 -17 17 -19 28 -13 94 11
117 15 132 40 132 12 0 30 -6 41 -13z m108 -344 c-7 -2 -19 -2 -25 0 -7 3 -2
5 12 5 14 0 19 -2 13 -5z"/>
<path d="M9945 9650 c-4 -6 -1 -26 5 -45 6 -19 10 -49 8 -67 -2 -27 0 -33 17
-33 16 0 21 8 23 40 6 74 -29 144 -53 105z"/>
<path d="M15212 9537 c-13 -18 -41 -211 -48 -329 -3 -56 -2 -147 3 -200 l9
-98 -33 0 c-44 0 -83 -19 -83 -42 0 -20 11 -22 58 -9 51 15 59 6 72 -72 7 -40
27 -137 45 -217 18 -80 36 -164 40 -188 8 -52 31 -78 51 -61 22 18 16 354 -6
354 -12 0 -16 -18 -18 -90 l-4 -90 -28 125 c-16 69 -32 149 -36 177 l-6 53 46
-17 c30 -11 46 -23 46 -34 0 -21 19 -29 43 -17 21 11 22 41 2 58 -8 7 -43 23
-78 35 l-62 23 -8 53 c-13 82 -1 403 17 474 8 33 15 72 16 86 0 29 -23 45 -38
26z"/>
<path d="M2477 9352 c-13 -26 -43 -108 -66 -180 -48 -147 -41 -141 -130 -106
-37 16 -51 11 -51 -15 0 -19 65 -84 91 -93 11 -4 11 -8 -3 -22 -36 -35 6 -61
50 -31 17 13 29 14 61 5 21 -5 42 -17 45 -26 20 -52 48 -205 71 -388 9 -71 25
-142 45 -196 l32 -85 6 -305 c9 -418 8 -805 -2 -990 l-9 -155 27 -24 26 -24
107 31 c60 17 142 36 183 42 41 7 118 25 170 42 l95 30 195 -6 c182 -5 199 -4
260 16 58 20 89 22 294 25 250 3 277 7 422 68 138 58 209 65 615 55 195 -5
426 -14 514 -20 154 -12 166 -11 325 14 91 15 226 33 300 41 74 8 163 19 197
25 148 25 210 29 279 18 38 -5 184 -10 324 -9 254 1 330 8 490 46 63 14 190
35 335 55 39 5 93 14 120 20 28 7 140 15 250 19 191 8 204 9 285 40 199 75
356 115 488 125 40 3 90 10 110 15 23 6 217 9 497 7 400 -2 466 -5 504 -19 24
-10 67 -17 96 -17 61 0 65 -5 65 -84 0 -72 26 -276 51 -398 12 -57 24 -157 28
-223 5 -94 9 -120 20 -120 35 0 36 152 2 317 -25 120 -48 289 -56 404 l-6 91
138 6 c90 4 164 13 212 27 94 25 159 26 177 3 20 -27 17 -49 -12 -67 -26 -18
-31 -64 -6 -58 6 1 12 -2 12 -8 0 -5 8 -10 19 -10 14 0 20 -10 25 -40 5 -31
11 -40 26 -40 18 0 20 7 20 66 0 61 2 67 32 92 17 15 50 39 74 53 23 15 43 31
45 36 2 5 26 23 53 41 33 21 56 30 72 26 16 -4 24 -1 29 15 7 24 35 29 35 7 0
-23 20 -30 38 -13 14 14 13 18 -2 41 -16 26 -16 27 19 57 34 31 45 62 25 74
-6 4 -34 -1 -63 -11 -59 -20 -219 -23 -242 -4 -7 6 -25 8 -39 4 -16 -4 -41 1
-68 14 -57 26 -85 32 -119 25 -22 -4 -29 -11 -29 -29 0 -13 4 -24 10 -24 15 0
40 -55 40 -88 0 -16 -3 -43 -6 -60 -6 -29 -9 -31 -63 -37 -31 -3 -80 -13 -110
-21 -69 -20 -206 -33 -287 -26 l-63 5 -3 51 c-3 43 -6 51 -23 51 -18 0 -20 -6
-17 -54 l4 -53 -54 7 c-29 3 -78 13 -108 22 -47 13 -125 15 -520 14 -256 -1
-478 -5 -495 -10 -16 -5 -68 -12 -115 -16 -47 -4 -121 -15 -165 -26 -73 -17
-116 -30 -335 -106 -66 -22 -99 -26 -275 -33 -110 -4 -234 -15 -275 -23 -41
-8 -118 -20 -170 -27 -52 -6 -156 -24 -230 -40 -74 -16 -164 -33 -200 -39 -90
-14 -484 -14 -603 1 -87 11 -112 10 -245 -10 -81 -11 -178 -24 -217 -27 -38
-4 -142 -18 -230 -33 -190 -31 -273 -32 -875 -14 -496 16 -548 12 -696 -54
-125 -55 -134 -57 -379 -59 -205 -1 -238 -4 -302 -23 -65 -20 -96 -22 -287
-22 -210 0 -216 -1 -300 -29 -46 -16 -113 -32 -148 -36 -35 -4 -110 -20 -168
-36 -58 -16 -111 -27 -119 -24 -15 6 -14 20 10 315 9 112 9 237 0 550 -7 223
-9 434 -6 470 6 60 3 75 -34 180 -28 77 -45 143 -51 200 -10 99 -36 266 -49
319 -21 84 -22 91 -8 91 7 0 23 -23 35 -51 16 -38 26 -50 39 -47 14 2 19 14
21 50 3 45 4 46 35 44 27 -1 33 3 35 23 2 13 19 39 38 56 22 21 34 42 34 59 0
31 -14 33 -68 11 -34 -15 -38 -15 -49 1 -29 40 -95 231 -98 282 -3 59 -2 57
-32 66 -19 6 -26 0 -46 -42z m58 -142 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0
6 2 10 4 10 3 0 8 -4 11 -10z m-20 -203 c8 -47 -18 -26 -30 24 -8 31 -8 54 -1
79 l11 35 7 -55 c4 -30 10 -68 13 -83z m65 -9 c0 -5 -4 -8 -10 -8 -5 0 -10 10
-10 23 0 18 2 19 10 7 5 -8 10 -18 10 -22z m-135 -46 c-3 -3 -11 0 -18 7 -9
10 -8 11 6 5 10 -3 15 -9 12 -12z m8388 -1318 c18 -9 33 -18 35 -19 5 -5 -52
-84 -60 -85 -5 0 -8 10 -8 23 -1 12 -7 39 -14 60 -16 43 -6 48 47 21z m210
-50 c-3 -9 -21 -14 -49 -14 -35 0 -44 3 -44 18 0 14 8 16 49 14 38 -3 48 -7
44 -18z m-128 -80 c6 -7 19 -14 30 -16 17 -3 15 -7 -14 -22 -31 -16 -35 -17
-43 -2 -5 9 -18 16 -29 16 -16 0 -18 3 -9 19 11 22 49 24 65 5z m-72 -96 c-10
-12 -19 -15 -21 -8 -7 20 7 40 23 34 14 -6 14 -9 -2 -26z"/>
<path d="M664 9166 c-3 -8 -1 -23 5 -34 6 -11 8 -34 5 -51 -6 -26 -3 -31 13
-31 19 0 53 28 53 43 0 15 -51 87 -60 87 -6 0 -13 -6 -16 -14z"/>
<path d="M15980 9140 c-11 -7 -10 -30 8 -137 12 -70 31 -184 42 -253 11 -69
30 -174 43 -235 20 -94 26 -110 43 -110 18 0 19 7 16 155 -4 145 -3 157 17
182 28 35 102 62 242 88 63 11 134 25 159 30 25 5 58 12 74 14 35 6 40 11 32
32 -7 19 -6 19 -236 -24 -225 -44 -295 -74 -324 -142 -13 -32 -13 -31 -29 61
-9 52 -21 132 -28 179 -14 101 -27 157 -37 164 -4 3 -14 1 -22 -4z"/>
<path d="M15645 8942 c-141 -67 -211 -218 -203 -437 2 -64 6 -80 19 -83 17 -3
122 100 184 181 33 43 36 51 23 63 -13 13 -25 2 -98 -82 -46 -54 -86 -92 -88
-85 -10 31 20 208 45 264 56 125 220 198 294 131 24 -22 26 -118 4 -171 -20
-47 -19 -63 4 -63 27 0 61 93 61 166 0 48 -4 59 -34 91 -32 35 -38 37 -102 40
-52 3 -79 -1 -109 -15z"/>
<path d="M13735 8834 c-38 -8 -89 -12 -140 -8 -84 5 -112 -3 -102 -30 5 -13
15 -16 44 -11 37 7 37 6 -25 -34 -141 -92 -195 -179 -226 -365 -22 -127 0
-245 53 -284 84 -62 222 -53 376 24 87 44 104 59 87 76 -10 10 -28 5 -85 -25
-108 -54 -152 -67 -231 -67 -117 0 -153 33 -163 146 -7 85 16 211 54 290 32
69 123 153 207 194 58 27 69 29 108 20 78 -18 154 -12 208 15 27 14 57 25 65
25 11 0 15 7 13 23 -3 21 -8 22 -93 24 -49 1 -117 -5 -150 -13z m110 -34 c-11
-5 -33 -8 -50 -8 -29 1 -29 1 5 8 49 10 69 10 45 0z"/>
<path d="M11910 8749 c-19 -5 -46 -11 -59 -13 -13 -3 -27 -9 -30 -14 -11 -17
-70 -42 -85 -36 -26 10 -63 -21 -69 -58 -7 -50 29 -173 77 -263 24 -44 50 -93
59 -110 9 -16 26 -64 39 -105 21 -67 26 -75 48 -75 17 0 26 6 28 20 3 11 10
24 18 28 15 9 19 47 5 47 -5 0 -14 14 -20 30 -5 17 -21 34 -34 39 -22 9 -56
71 -39 71 9 0 133 -108 149 -129 8 -12 8 -22 -3 -43 -8 -15 -14 -40 -14 -56 0
-25 -5 -30 -30 -35 -19 -4 -40 -21 -60 -48 -25 -34 -30 -52 -30 -96 0 -30 5
-64 12 -76 8 -15 11 -65 9 -157 -3 -139 6 -190 34 -190 22 0 35 40 21 65 -12
22 -11 228 2 285 6 24 10 -22 14 -150 9 -270 52 -551 126 -830 55 -207 58
-234 31 -261 l-23 -23 -14 22 c-22 33 -42 28 -42 -12 0 -40 21 -60 52 -53 21
6 23 3 23 -31 0 -34 2 -37 27 -35 19 1 29 -4 33 -18 7 -22 60 -53 75 -44 17
11 11 32 -15 49 -23 15 -25 21 -19 66 6 46 5 49 -18 55 -23 6 -25 10 -20 54 3
35 -7 95 -36 212 -28 116 -40 190 -42 254 -4 121 -4 117 3 220 5 70 3 97 -8
119 -21 40 -21 271 -1 283 8 5 19 19 24 33 11 29 9 -77 -3 -129 -6 -27 -4 -33
12 -37 18 -5 20 -22 32 -202 6 -108 14 -253 17 -322 6 -146 7 -150 34 -150 23
0 23 14 -1 360 -5 74 -9 218 -9 319 l0 183 23 -6 c12 -3 31 -6 42 -6 15 0 20
-7 21 -27 0 -16 2 -46 4 -68 2 -22 -5 -73 -14 -114 -9 -40 -21 -141 -28 -224
-10 -132 -10 -151 4 -161 8 -6 18 -21 22 -34 4 -12 13 -22 20 -22 17 0 24 -73
32 -361 6 -201 5 -229 -10 -250 -22 -32 -23 -147 0 -156 53 -20 65 94 51 470
-8 213 -8 283 1 298 7 10 12 53 12 95 0 78 -37 518 -45 543 -4 9 1 12 15 8 30
-8 48 27 52 103 3 59 1 65 -18 68 -14 2 -24 -5 -32 -23 -6 -14 -16 -25 -22
-25 -17 0 -11 36 8 53 22 20 43 22 60 5 9 -10 15 -9 27 3 15 15 11 49 -5 49
-10 0 7 92 19 99 5 4 9 31 9 61 1 50 36 248 47 258 2 2 8 -11 13 -29 12 -49
37 -45 37 6 0 22 4 45 8 51 4 7 0 17 -8 24 -8 7 -17 28 -21 48 -5 24 -23 52
-61 89 -72 72 -170 118 -283 133 -47 7 -88 17 -92 24 -8 14 -118 18 -168 5z
m303 -79 c74 -15 154 -59 203 -114 42 -46 55 -76 34 -76 -15 0 -56 -80 -74
-142 -13 -45 -34 -197 -36 -260 0 -5 7 -8 16 -8 14 0 15 -7 11 -37 -8 -44 -19
-53 -74 -53 -23 0 -53 -4 -67 -10 -26 -10 -88 8 -101 30 -4 7 -19 8 -36 5 -22
-5 -29 -3 -29 9 0 9 -9 21 -20 28 -25 16 -25 38 0 89 l21 39 -25 33 c-18 24
-194 178 -207 182 -1 0 -4 44 -8 98 -5 87 -4 97 11 97 24 0 31 16 16 39 -17
27 -4 39 53 50 61 12 251 12 312 1z m-437 -46 c-3 -9 -6 -50 -7 -92 0 -66 -2
-74 -12 -52 -6 14 -15 27 -19 30 -10 8 -28 58 -28 81 0 10 6 19 14 19 7 0 19
7 26 15 16 20 34 19 26 -1z m339 -700 c9 -14 21 -24 28 -22 26 5 107 -14 107
-25 0 -7 8 -17 19 -24 10 -6 20 -23 23 -36 4 -21 2 -23 -16 -19 -12 3 -31 12
-44 20 -15 10 -26 11 -35 4 -6 -5 -33 -11 -59 -13 -44 -4 -48 -2 -48 19 0 12
-6 25 -14 28 -20 8 -28 48 -16 78 11 30 31 26 55 -10z m152 -6 c-3 -8 -6 -5
-6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-238 -179 c-4 -41 -9 -130 -10 -199
-2 -113 -2 -119 -9 -60 -7 58 -14 344 -10 395 1 14 7 8 20 -21 15 -35 17 -53
9 -115z m268 -321 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z"/>
<path d="M14284 8695 c-20 -50 21 -271 79 -435 27 -75 38 -95 53 -95 18 0 19
8 15 141 l-4 142 29 18 c21 14 48 19 108 20 56 1 81 5 84 14 14 40 -104 54
-180 21 -63 -27 -86 -57 -90 -116 l-3 -50 -19 75 c-10 41 -22 120 -25 175 -5
84 -9 100 -24 103 -9 2 -20 -4 -23 -13z"/>
<path d="M14903 8670 c-59 -12 -94 -33 -135 -78 -48 -53 -62 -100 -62 -202 0
-68 5 -94 23 -133 26 -52 64 -79 96 -67 51 19 124 126 146 214 6 25 16 46 21
46 16 0 51 -21 98 -60 62 -51 78 -55 107 -29 12 13 23 29 23 36 0 22 -30 27
-44 8 -12 -17 -17 -15 -71 28 -31 26 -61 47 -67 47 -7 0 -6 5 1 14 16 19 19
152 4 167 -15 15 -88 20 -140 9z m105 -107 c-3 -68 -3 -68 -32 -68 -28 0 -30
-4 -46 -65 -19 -77 -36 -111 -83 -165 -34 -39 -35 -40 -55 -22 -30 27 -45 97
-40 183 4 62 10 82 34 117 38 55 102 87 172 87 l53 0 -3 -67z"/>
<path d="M13887 8623 c-3 -4 -8 -58 -12 -118 -11 -165 25 -284 97 -321 27 -14
31 -14 46 0 10 8 37 63 62 120 25 58 48 106 51 106 3 0 11 -19 18 -42 18 -59
62 -100 103 -96 43 4 43 29 1 40 -42 11 -69 68 -85 177 -7 54 -16 85 -26 88
-17 7 -32 -14 -32 -45 0 -51 -100 -302 -120 -302 -13 0 -38 34 -55 75 -16 37
-20 130 -12 285 2 25 -3 35 -15 38 -9 2 -18 -1 -21 -5z"/>
<path d="M627 8473 c-3 -21 -8 -46 -12 -55 -5 -12 -1 -20 10 -25 26 -9 45 23
45 74 0 35 -3 43 -19 43 -14 0 -20 -9 -24 -37z"/>
<path d="M615 7658 c0 -164 4 -188 31 -188 8 0 14 6 14 13 0 6 2 73 5 147 5
139 -3 182 -35 188 -13 2 -15 -22 -15 -160z"/>
<path d="M650 7408 c0 -7 7 -31 15 -53 27 -76 14 -296 -23 -357 -12 -21 -13
-31 -5 -39 9 -9 16 -9 29 2 29 24 43 73 54 194 11 118 3 204 -24 247 -12 20
-46 24 -46 6z"/>
<path d="M10870 6865 c-6 -7 -20 -11 -31 -8 -27 8 -40 -14 -26 -44 8 -18 8
-33 -1 -57 -24 -65 -10 -123 22 -97 16 14 26 -5 26 -49 0 -27 -5 -31 -62 -48
-35 -11 -130 -33 -213 -50 -122 -25 -183 -31 -325 -35 -175 -5 -175 -5 -300
-48 l-125 -43 -257 -2 c-314 -2 -359 -6 -475 -49 -100 -38 -209 -50 -284 -34
-57 13 -72 -2 -37 -38 32 -34 52 -79 89 -203 44 -147 76 -273 105 -420 15 -74
42 -196 61 -270 61 -238 64 -260 72 -640 7 -317 10 -365 30 -450 49 -203 70
-308 76 -370 4 -36 15 -99 25 -140 9 -41 23 -106 30 -145 7 -38 15 -75 17 -81
3 -8 -53 -14 -194 -19 -163 -6 -210 -4 -265 9 -140 33 -267 21 -528 -48 -74
-20 -163 -39 -198 -42 -55 -6 -62 -5 -56 9 3 9 14 19 24 22 46 15 92 85 56 85
-9 0 -12 7 -9 20 3 11 -4 32 -16 49 -21 29 -21 31 -5 56 16 24 16 27 1 43 -16
15 -20 15 -64 -1 -27 -9 -69 -17 -94 -17 -48 0 -124 -33 -166 -73 -13 -11 -26
-17 -30 -14 -10 10 -53 -33 -53 -53 0 -10 -20 -28 -47 -43 -27 -14 -58 -35
-70 -47 -27 -24 -30 -58 -7 -67 14 -5 12 -8 -7 -19 -13 -7 -27 -13 -30 -14 -3
0 -4 53 -1 118 4 113 3 121 -29 212 l-33 95 -8 330 c-6 236 -13 344 -23 380
-16 55 -26 117 -50 305 -9 69 -26 181 -37 250 -15 94 -18 146 -13 210 8 96 36
243 59 309 17 47 32 149 47 331 9 116 5 185 -13 208 -17 20 -44 14 -56 -12 -6
-15 -26 -29 -49 -36 -21 -7 -83 -36 -138 -65 -112 -59 -292 -119 -405 -135
-41 -6 -201 -11 -355 -11 -155 0 -354 -4 -443 -8 -178 -8 -268 0 -352 31 -158
58 -267 91 -380 114 -139 29 -182 28 -300 -6 -51 -14 -129 -24 -245 -32 -98
-6 -197 -18 -235 -28 -36 -10 -108 -30 -160 -45 -143 -40 -241 -55 -365 -54
-66 0 -137 -6 -171 -14 -149 -37 -220 -49 -369 -61 -139 -11 -168 -16 -225
-42 -59 -26 -75 -29 -175 -29 -60 0 -184 6 -275 14 -91 7 -212 10 -270 7 -103
-5 -104 -5 -70 11 27 13 84 18 255 24 247 8 258 10 481 93 45 17 65 36 62 59
-4 26 -22 32 -40 14 -23 -24 -87 -53 -176 -81 -93 -29 -245 -46 -419 -46 -103
0 -121 -3 -219 -36 l-106 -37 -54 17 c-30 9 -59 14 -64 11 -15 -9 -12 -35 5
-41 8 -4 15 -14 15 -24 0 -24 17 -29 60 -19 66 16 548 10 682 -7 158 -21 224
-15 317 26 66 29 90 33 240 45 91 7 186 18 211 24 25 6 74 18 110 27 36 9 142
20 235 25 94 5 188 12 210 17 76 17 170 43 244 68 57 19 103 25 205 30 136 5
266 24 350 49 92 28 195 17 406 -41 52 -15 126 -40 163 -56 114 -49 208 -62
387 -52 85 4 274 6 420 5 286 -3 427 8 536 40 38 11 92 27 119 34 28 8 104 41
170 73 178 88 196 96 206 80 5 -7 6 -26 4 -43 -3 -16 -10 -79 -16 -140 -15
-160 -26 -235 -43 -283 -51 -144 -68 -366 -41 -522 17 -94 31 -200 45 -331 5
-48 19 -125 30 -173 21 -92 32 -268 29 -502 -1 -152 13 -262 47 -355 21 -59
24 -84 24 -212 0 -80 -4 -148 -8 -151 -5 -3 -8 -94 -8 -203 1 -192 2 -201 29
-278 26 -70 30 -100 38 -260 10 -201 32 -372 60 -485 11 -41 28 -140 39 -218
13 -99 27 -161 44 -198 l25 -54 -157 0 c-86 0 -186 5 -222 10 -36 5 -119 13
-185 16 -105 6 -130 4 -196 -15 -92 -26 -189 -27 -342 -5 -97 15 -128 15 -232
5 -174 -18 -288 -37 -390 -66 -49 -14 -140 -32 -201 -40 -61 -8 -131 -22 -155
-30 -38 -14 -76 -14 -323 -3 -321 15 -481 14 -675 -1 -75 -6 -266 -16 -425
-21 -160 -6 -391 -20 -515 -31 -192 -18 -249 -27 -381 -62 l-155 -41 -345 -1
c-334 0 -347 -1 -410 -23 -36 -13 -82 -35 -104 -49 l-39 -25 7 28 c4 16 11
110 16 209 8 190 12 218 37 329 14 59 15 115 9 390 -12 585 -23 789 -49 951
-30 180 -52 533 -52 815 0 182 3 216 24 305 22 87 25 130 29 335 2 158 -1 303
-12 440 -11 143 -14 258 -9 380 5 156 4 177 -11 189 -14 12 -19 11 -38 -5 -24
-22 -51 -81 -43 -94 11 -18 35 -10 44 13 5 13 8 -67 8 -193 -1 -118 3 -352 8
-520 11 -332 6 -436 -27 -574 -19 -85 -20 -109 -15 -366 7 -310 29 -635 52
-755 9 -46 20 -185 25 -330 5 -137 11 -297 14 -355 3 -58 7 -208 8 -335 3
-195 0 -242 -16 -310 -12 -52 -21 -147 -26 -270 -6 -142 -13 -210 -29 -269
-26 -100 -27 -116 -1 -116 11 0 20 7 20 15 0 20 95 89 156 113 78 31 127 35
474 37 261 1 336 5 380 17 158 45 213 58 295 67 174 21 462 40 685 45 124 4
281 11 350 16 358 28 389 29 476 20 49 -6 187 -14 307 -19 201 -9 223 -8 285
10 37 10 108 24 157 30 50 6 128 21 174 35 172 49 463 87 566 74 271 -36 300
-36 431 1 77 21 67 21 449 -12 72 -6 162 -9 200 -6 62 4 76 2 125 -23 30 -15
61 -25 68 -23 19 7 14 31 -12 48 -12 8 -39 50 -59 93 -29 63 -39 100 -52 205
-9 70 -25 162 -36 204 -30 118 -49 262 -60 453 -11 195 -22 271 -50 342 -16
41 -19 75 -19 207 l0 158 58 6 c31 3 62 6 67 7 6 1 65 2 133 1 96 -1 122 -4
122 -15 0 -39 55 -40 94 -1 15 16 20 15 78 -4 34 -12 67 -21 74 -21 22 0 25
32 4 52 -11 10 -20 28 -20 38 0 17 -7 20 -50 20 -48 0 -67 14 -35 26 8 4 15
12 15 20 0 10 14 14 48 14 26 0 110 16 187 36 296 76 395 87 508 58 48 -12
105 -15 284 -12 l223 3 23 -29 c25 -31 47 -29 47 3 0 10 -11 43 -24 72 -14 30
-30 83 -36 119 -6 36 -18 92 -26 124 -8 33 -18 89 -21 125 -2 36 -18 125 -34
196 -71 311 -67 279 -74 625 -7 368 -11 409 -71 645 -24 94 -57 240 -74 325
-30 158 -92 385 -134 496 l-23 61 86 6 c68 4 106 13 181 42 l95 37 320 8 320
7 107 36 c115 39 244 57 412 57 91 0 308 39 433 78 l62 20 5 -27 c3 -14 8 -45
11 -69 4 -23 13 -48 20 -56 8 -7 15 -31 17 -52 2 -26 8 -39 18 -39 14 0 24 27
35 97 8 49 79 144 105 140 14 -2 21 4 26 22 4 18 13 26 29 26 33 0 52 26 37
51 -10 16 -9 23 5 38 10 10 27 20 38 23 26 4 34 55 9 65 -9 3 -25 1 -35 -5
-26 -17 -101 -15 -125 3 -10 8 -27 15 -36 15 -10 0 -40 12 -68 28 -35 19 -50
33 -50 48 0 26 -24 38 -40 19z m120 -153 c0 -15 -2 -15 -10 -2 -13 20 -13 33
0 25 6 -3 10 -14 10 -23z m-143 -14 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4
-12 1 -19z m112 -45 c7 -24 6 -33 -5 -37 -9 -4 -14 2 -14 17 0 12 -3 33 -6 47
-10 37 14 12 25 -27z m160 38 c7 -5 9 -11 4 -14 -5 -3 -15 -2 -23 3 -7 4 -19
6 -27 3 -7 -3 -13 0 -13 6 0 13 39 14 59 2z m-127 -143 c-3 -18 -13 -44 -23
-57 l-19 -24 0 51 c0 48 7 59 36 61 6 1 9 -12 6 -31z m-2975 -2965 c-3 -10 -5
-4 -5 12 0 17 2 24 5 18 2 -7 2 -21 0 -30z m-97 -51 c0 -5 -23 -15 -51 -24
-44 -15 -49 -15 -37 -1 21 26 88 45 88 25z m-150 -36 c0 -3 -4 -8 -10 -11 -5
-3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m5 -82 c-17 -17 -16 -19 3
-35 20 -16 20 -16 -16 -27 -68 -20 -119 -25 -127 -12 -10 16 15 31 37 24 22
-7 55 11 62 34 5 15 45 42 55 35 2 -1 -4 -10 -14 -19z m175 -74 c0 -5 -5 -10
-11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z"/>
<path d="M597 6813 c-3 -5 2 -33 10 -63 8 -30 18 -108 20 -172 5 -105 7 -118
24 -118 26 0 32 32 24 134 -9 119 -35 220 -57 224 -9 2 -18 -1 -21 -5z"/>
<path d="M647 6177 c-8 -20 28 -61 47 -54 21 8 21 53 0 61 -25 10 -41 7 -47
-7z"/>
<path d="M10295 5908 c-2 -7 -6 -67 -9 -133 -3 -66 -9 -132 -12 -147 -5 -21
-3 -28 9 -28 31 0 41 31 47 163 7 126 3 157 -22 157 -5 0 -10 -6 -13 -12z"/>
<path d="M752 5565 c-7 -14 -12 -34 -12 -44 0 -23 25 -35 37 -18 21 29 35 66
29 76 -13 20 -43 12 -54 -14z"/>
<path d="M6265 5191 c-3 -5 -5 -115 -4 -243 l1 -234 -37 -135 -37 -134 -51 4
c-146 10 -231 -73 -265 -262 -17 -89 -19 -93 -52 -109 -43 -22 -118 -23 -148
-2 -20 14 -22 24 -22 102 l0 86 100 96 c124 117 133 161 25 111 -59 -27 -103
-68 -130 -122 -16 -30 -41 -59 -70 -79 -51 -35 -112 -63 -127 -58 -6 2 -21 40
-34 83 -18 62 -23 105 -24 192 l0 112 48 3 c39 3 47 6 47 23 0 17 -8 20 -49
23 l-48 3 7 92 c14 196 28 304 47 361 21 63 18 89 -8 84 -33 -6 -68 -188 -80
-409 -4 -71 -10 -129 -13 -129 -3 0 -69 -7 -146 -15 -77 -8 -159 -15 -183 -15
-29 0 -44 -5 -49 -16 -13 -35 11 -38 186 -19 93 10 175 15 183 13 11 -5 14
-42 15 -185 1 -129 5 -192 16 -224 8 -24 22 -96 32 -159 10 -63 22 -119 26
-124 5 -5 14 -4 23 3 16 13 16 51 1 214 -4 44 -2 47 19 47 30 0 83 22 116 48
l25 20 -3 -70 c-5 -90 20 -131 87 -148 53 -13 137 1 174 31 23 17 28 18 61 4
90 -38 170 2 225 112 17 35 78 238 98 331 11 49 20 16 27 -100 10 -192 55
-424 83 -435 22 -9 41 17 49 64 5 35 3 44 -11 49 -9 4 -20 2 -24 -5 -11 -17
-41 165 -53 319 -6 81 -7 203 -2 305 13 283 11 469 -5 488 -15 19 -37 22 -46
8z m-110 -798 c-4 -10 -8 -43 -9 -73 -1 -66 -55 -183 -99 -214 -30 -22 -89
-25 -111 -7 -21 17 -26 60 -14 116 27 128 94 190 212 194 23 1 27 -2 21 -16z"/>
<path d="M10339 5138 c-1 -1 -2 -85 -3 -185 -2 -167 -1 -183 15 -183 9 0 20 7
23 16 8 21 6 293 -3 323 -5 21 -28 41 -32 29z"/>
<path d="M818 4913 c-1 -5 -2 -44 -3 -88 -1 -44 -7 -97 -14 -118 -15 -43 -9
-69 14 -61 32 13 61 202 39 258 -6 16 -33 22 -36 9z"/>
<path d="M4060 4442 c-143 -12 -277 -114 -403 -304 -95 -144 -167 -313 -167
-393 0 -103 99 -139 260 -94 84 23 266 108 311 146 54 46 26 74 -32 32 -105
-75 -295 -149 -384 -151 -68 -2 -92 8 -104 42 -34 100 165 464 323 590 63 51
117 74 198 85 74 10 72 54 -2 47z"/>
<path d="M10366 4428 c-3 -7 -6 -71 -9 -141 -3 -106 -1 -130 11 -134 26 -10
32 21 30 151 -2 93 -7 131 -15 134 -7 2 -15 -2 -17 -10z"/>
<path d="M4496 4375 c-3 -9 -6 -27 -6 -39 0 -64 -132 -394 -190 -476 -18 -25
-24 -28 -42 -19 -44 24 -62 147 -39 280 6 30 11 83 13 119 3 59 1 65 -17 65
-22 0 -23 -7 -45 -223 -15 -151 -3 -212 52 -264 21 -21 43 -38 48 -38 40 0
132 153 204 341 l25 64 1 -45 c1 -100 40 -200 77 -200 21 0 27 30 9 43 -26 19
-38 87 -45 252 -5 127 -8 150 -22 153 -9 2 -19 -4 -23 -13z"/>
<path d="M4655 4373 c-4 -10 -9 -88 -12 -173 -6 -163 6 -283 33 -317 13 -17
15 -17 28 -1 7 10 16 51 19 90 7 86 48 230 75 267 25 34 55 38 80 11 11 -12
26 -19 32 -15 6 4 2 -11 -8 -32 -52 -100 -68 -255 -32 -288 18 -16 23 -17 47
-4 45 24 80 65 155 185 39 62 75 114 78 114 4 0 10 -32 13 -71 9 -105 59 -169
133 -169 27 0 74 40 74 64 0 28 -22 29 -46 2 -31 -33 -37 -32 -74 2 -26 22
-33 39 -42 97 -6 39 -8 104 -5 147 5 77 -3 101 -29 91 -8 -3 -14 -11 -14 -19
0 -10 -10 -12 -43 -8 -54 8 -125 -21 -168 -67 -19 -21 -29 -26 -29 -16 0 22
-39 47 -73 47 -71 0 -103 -43 -147 -200 l-20 -75 5 145 c3 80 8 160 11 178 5
27 3 32 -14 32 -11 0 -23 -8 -27 -17z m462 -115 c-79 -139 -137 -227 -177
-267 l-44 -46 -4 30 c-5 39 25 159 54 216 13 26 40 61 61 78 31 25 47 31 86
31 l49 0 -25 -42z"/>
<path d="M827 4353 c-2 -5 -3 -35 -2 -68 2 -52 5 -60 21 -60 16 0 20 9 22 47
2 26 -2 56 -8 68 -11 20 -25 26 -33 13z"/>
<path d="M806 4001 c-3 -5 4 -35 16 -66 19 -50 20 -61 9 -92 -10 -27 -10 -38
-1 -46 19 -20 50 28 49 77 -1 76 -51 163 -73 127z"/>
<path d="M5695 3587 c-21 -52 -35 -144 -37 -263 l-2 -111 -53 0 c-63 0 -119
-32 -147 -85 -19 -34 -19 -35 -62 -25 -91 21 -168 -36 -215 -160 -13 -35 -27
-63 -30 -63 -3 0 -15 24 -27 53 -13 30 -38 70 -56 90 -28 31 -40 37 -74 37
-99 0 -167 -62 -192 -175 -12 -55 1 -109 30 -125 22 -12 90 -13 106 -2 18 12
64 83 64 100 0 9 7 23 15 32 8 9 18 34 23 56 l9 39 27 -56 c15 -32 34 -92 43
-135 17 -81 33 -112 52 -100 6 4 11 28 11 54 0 106 67 270 122 298 16 9 48 14
71 12 l42 -3 3 -45 c4 -79 12 -109 38 -140 26 -30 61 -38 99 -24 24 10 70 82
95 152 l23 64 29 -103 c31 -110 60 -169 84 -169 22 0 28 27 11 45 -17 16 -62
154 -72 220 -5 31 -3 44 9 54 21 17 21 57 -1 69 -15 9 -15 14 1 78 20 80 46
242 46 291 0 35 -29 73 -56 73 -8 0 -21 -15 -29 -33z m24 -176 c-7 -48 -15
-75 -17 -61 -2 14 2 63 9 110 7 47 15 74 17 61 2 -13 -2 -62 -9 -110z m-70
-250 c13 -9 12 -17 -8 -51 -4 -8 -19 -47 -31 -87 -23 -73 -70 -143 -95 -143
-23 0 -46 44 -48 91 l-2 44 33 -3 c28 -3 33 -1 30 15 -2 10 -13 22 -26 28 -26
12 -27 18 -5 56 28 47 112 75 152 50z m-689 -223 c0 -108 -40 -165 -96 -140
-19 9 -24 19 -24 49 1 49 30 114 65 141 47 37 55 30 55 -50z"/>
<path d="M10293 3564 c-8 -20 9 -49 28 -49 18 0 24 32 9 50 -16 20 -29 19 -37
-1z"/>
<path d="M895 3267 c-10 -30 -9 -90 2 -94 19 -7 45 41 38 70 -7 28 -33 44 -40
24z"/>
<path d="M5931 3242 c-47 -23 -57 -43 -42 -79 22 -53 105 -91 199 -92 35 -1
72 -6 83 -11 43 -24 10 -103 -94 -223 -56 -66 -53 -67 -93 36 -19 50 -30 67
-45 67 -25 0 -24 -12 9 -98 28 -72 53 -112 72 -112 16 0 77 59 130 125 65 82
94 146 86 191 -9 47 -39 64 -111 64 -97 0 -195 38 -195 75 0 26 131 48 145 25
10 -16 35 -12 42 6 10 27 -25 44 -91 44 -38 0 -74 -7 -95 -18z"/>
<path d="M10435 3060 c-7 -12 14 -108 28 -127 4 -6 15 -9 24 -6 18 7 14 48
-11 106 -15 37 -29 46 -41 27z"/>
<path d="M4104 3022 c-37 -24 -65 -68 -89 -141 l-17 -53 -37 6 c-20 3 -41 6
-48 6 -8 0 -8 9 0 35 12 41 9 45 -35 54 -27 6 -34 13 -44 46 -10 38 -13 40
-54 42 -39 3 -47 -1 -83 -39 -44 -46 -91 -137 -82 -159 8 -19 77 -51 88 -40
14 14 3 45 -21 57 l-22 11 40 61 c22 35 47 62 56 62 15 0 16 -10 10 -92 -24
-342 -19 -418 24 -418 33 0 45 55 45 215 l0 150 35 -17 c19 -10 56 -18 82 -18
l48 0 0 -42 c1 -68 27 -101 120 -148 37 -19 71 -25 193 -34 112 -7 150 -7 159
2 26 26 -11 37 -145 43 -107 5 -142 10 -185 29 -65 28 -102 70 -102 115 0 38
-13 33 140 55 105 16 150 29 151 43 3 33 -5 65 -23 95 -48 78 -142 112 -204
74z m95 -36 c33 -17 91 -81 91 -100 0 -8 -34 -18 -102 -29 -140 -23 -140 -23
-132 11 11 45 47 103 74 118 32 17 35 17 69 0z"/>
<path d="M4629 3000 c-126 -21 -249 -137 -249 -235 0 -42 27 -93 57 -108 62
-32 160 -30 271 4 31 10 42 32 22 44 -5 3 -36 -1 -69 -10 -101 -26 -199 -18
-223 19 -13 18 -9 85 6 114 39 74 132 126 231 128 97 2 95 2 95 23 0 14 -10
20 -37 25 -42 7 -41 7 -104 -4z"/>
<path d="M930 2552 c0 -10 6 -24 13 -31 10 -10 8 -14 -6 -23 -34 -19 -57 -87
-57 -169 0 -42 -5 -100 -10 -130 -11 -57 -2 -81 23 -61 19 16 39 142 31 192
-7 45 19 131 39 129 41 -5 47 17 23 76 -16 38 -56 50 -56 17z"/>
<path d="M10527 2443 c-3 -5 14 -58 38 -118 55 -135 64 -181 39 -199 -20 -15
-11 -36 16 -36 33 0 48 34 39 90 -11 72 -91 264 -111 268 -9 2 -18 -1 -21 -5z"/>
<path d="M944 1675 c-8 -20 2 -30 36 -38 36 -9 58 7 44 30 -15 24 -72 30 -80
8z"/>
<path d="M10649 1383 c-1 -4 0 -38 1 -74 2 -92 -24 -184 -62 -212 -47 -35 -29
-67 23 -41 32 16 54 61 75 152 19 85 10 175 -19 180 -9 2 -17 0 -18 -5z"/>
<path d="M1047 1074 c-14 -14 -7 -25 28 -41 28 -13 38 -14 47 -5 19 19 -3 46
-38 50 -17 2 -33 0 -37 -4z"/>
<path d="M8390 992 c0 -26 62 -54 135 -62 33 -4 102 -13 152 -20 75 -10 96
-10 108 0 26 22 0 37 -78 44 -183 17 -224 23 -254 39 -41 22 -63 22 -63 -1z"/>
<path d="M9089 971 c-12 -16 -34 -32 -50 -35 -21 -4 -29 -11 -29 -26 0 -23 33
-27 73 -9 29 13 61 64 53 85 -8 22 -23 17 -47 -15z"/>
<path d="M10409 971 c-13 -10 -40 -21 -60 -25 -31 -5 -38 -11 -43 -38 l-6 -31
-113 8 c-195 13 -252 12 -252 -5 0 -17 43 -24 235 -38 126 -10 155 -5 171 32
7 13 23 27 38 31 39 10 91 53 85 70 -8 20 -26 19 -55 -4z"/>
<path d="M7983 948 c-34 -7 -43 -14 -43 -30 0 -19 4 -20 52 -15 57 7 74 18 65
41 -7 18 -13 18 -74 4z"/>
<path d="M9504 946 c-9 -24 5 -36 39 -36 18 0 65 -14 106 -30 76 -31 101 -32
101 -6 0 16 -131 69 -198 80 -33 5 -44 3 -48 -8z"/>
<path d="M7636 894 c-72 -16 -114 -33 -155 -65 -12 -10 -39 -21 -58 -25 -35
-7 -53 -28 -37 -44 14 -14 80 5 131 39 48 32 96 49 173 60 36 5 45 10 45 26 0
25 -15 27 -99 9z"/>
<path d="M6995 854 c-5 -2 -50 -10 -100 -17 -79 -11 -90 -15 -90 -32 0 -17 6
-20 45 -17 25 2 69 7 99 13 30 5 76 9 103 9 40 0 48 3 48 19 0 25 -67 41 -105
25z"/>
<path d="M1134 795 c-3 -8 -2 -20 3 -27 4 -7 8 -22 8 -33 0 -14 8 -21 28 -23
23 -3 27 0 27 21 0 25 -34 77 -51 77 -5 0 -12 -7 -15 -15z"/>
<path d="M6311 787 c-6 -6 -11 -17 -11 -24 0 -19 -14 -16 -35 7 -23 25 -45 26
-45 2 0 -25 51 -72 79 -72 16 0 26 10 37 35 7 19 14 39 14 44 0 15 -27 20 -39
8z"/>
<path d="M3700 737 c-24 -8 -35 -18 -35 -32 0 -22 2 -22 82 -3 48 11 58 10
130 -16 395 -142 373 -136 373 -108 0 21 -16 28 -210 97 -41 14 -104 37 -140
50 -71 27 -144 31 -200 12z"/>
<path d="M3428 613 c-59 -4 -83 -19 -69 -42 7 -11 23 -12 77 -5 58 8 69 12 69
28 0 23 -2 23 -77 19z"/>
<path d="M1234 569 c-8 -14 53 -68 116 -102 61 -33 101 -41 124 -24 24 17 13
37 -20 37 -35 0 -84 22 -138 64 -50 38 -70 44 -82 25z"/>
<path d="M2681 524 c-52 -34 -57 -36 -129 -32 -52 2 -76 -1 -79 -9 -7 -20 40
-37 107 -37 60 -1 70 2 125 39 58 39 76 67 45 72 -8 1 -39 -14 -69 -33z"/>
<path d="M5607 543 c-14 -14 -35 -18 -92 -18 -48 0 -76 -4 -79 -12 -9 -21 24
-36 82 -37 70 -1 135 27 140 62 4 27 -25 30 -51 5z"/>
<path d="M4647 533 c-24 -23 7 -49 70 -58 21 -3 55 -13 76 -22 30 -13 40 -14
50 -4 23 24 -63 71 -130 71 -12 0 -25 5 -28 10 -7 11 -28 13 -38 3z"/>
<path d="M1981 452 c-5 -9 -17 -43 -26 -75 -15 -52 -19 -57 -38 -51 -30 9 -67
34 -67 45 0 5 -9 9 -20 9 -32 0 -24 -36 14 -65 49 -37 95 -49 117 -29 16 15
59 131 59 160 0 20 -29 25 -39 6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 45 KiB

411
docs/images/dts-reader.svg Normal file
View file

@ -0,0 +1,411 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1875.000000pt" height="748.000000pt" viewBox="0 0 1875.000000 748.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,748.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M18115 7470 c-178 -20 -255 -44 -228 -71 9 -9 30 -8 95 6 109 23 431
33 453 15 9 -7 28 -35 43 -61 27 -48 62 -67 62 -33 0 22 -67 131 -84 137 -27
11 -264 15 -341 7z"/>
<path d="M9863 7449 c-6 -6 -9 -18 -6 -25 4 -11 38 -14 164 -14 136 0 159 2
159 15 0 9 -12 20 -26 25 -36 14 -277 13 -291 -1z"/>
<path d="M17282 7289 c-69 -38 -85 -60 -49 -67 26 -5 149 68 145 86 -5 26 -20
23 -96 -19z"/>
<path d="M2575 7293 c-61 -13 -215 -102 -215 -124 0 -24 35 -19 84 14 126 84
186 88 363 28 145 -49 427 -101 445 -83 22 22 -7 33 -143 57 -174 30 -204 37
-327 80 -96 32 -152 40 -207 28z"/>
<path d="M8460 7229 c-82 -22 -127 -28 -207 -29 -96 0 -103 -1 -103 -20 0 -19
7 -20 113 -20 92 0 131 5 220 29 60 16 111 32 114 35 9 9 -6 36 -19 35 -7 -1
-60 -14 -118 -30z"/>
<path d="M1990 7150 c-217 -47 -273 -86 -340 -234 -22 -50 -26 -67 -16 -75 18
-15 30 -2 65 71 60 127 135 169 369 205 94 15 112 21 112 35 0 15 -9 18 -52
17 -29 0 -91 -9 -138 -19z"/>
<path d="M6515 7151 c-23 -10 -62 -21 -88 -25 -37 -6 -47 -11 -47 -27 0 -16 7
-19 41 -19 22 0 62 10 89 21 49 21 60 21 148 3 28 -5 32 -4 32 14 0 15 -12 24
-47 36 -59 20 -79 20 -128 -3z"/>
<path d="M5720 7142 c-40 -17 -133 -73 -168 -103 -16 -13 -7 -29 17 -29 10 0
50 21 91 47 90 57 142 65 240 34 64 -20 88 -17 77 12 -6 15 -97 44 -167 52
-31 4 -59 -1 -90 -13z"/>
<path d="M13773 7135 c-3 -9 -2 -20 3 -25 18 -16 172 -42 287 -47 112 -6 117
-5 117 14 0 18 -9 21 -103 26 -89 6 -173 19 -275 42 -15 4 -24 0 -29 -10z"/>
<path d="M14800 7131 c0 -22 28 -32 318 -107 17 -5 22 -2 22 13 0 25 -49 48
-145 67 -38 8 -90 22 -114 30 -59 21 -81 20 -81 -3z"/>
<path d="M11637 7086 c-11 -28 17 -36 128 -36 61 0 208 -9 325 -20 143 -13
217 -17 224 -10 28 28 -31 40 -332 65 -235 19 -338 20 -345 1z"/>
<path d="M18587 7093 c-15 -14 -5 -29 39 -57 25 -16 50 -39 55 -52 11 -31 27
-30 39 2 6 14 10 27 10 29 0 7 -118 85 -128 85 -5 0 -12 -3 -15 -7z"/>
<path d="M4108 6992 c-78 -21 -98 -29 -98 -44 0 -24 14 -23 152 9 95 23 118
31 118 46 0 24 -52 21 -172 -11z"/>
<path d="M16153 6993 c-7 -3 -13 -13 -13 -24 0 -14 7 -19 28 -19 15 0 72 -5
127 -10 115 -12 158 -6 153 18 -3 14 -22 18 -113 24 -61 4 -123 9 -140 11 -16
2 -36 2 -42 0z"/>
<path d="M1499 6878 c0 -2 -2 -79 -4 -171 -2 -149 -1 -168 13 -165 24 5 33 67
30 207 -3 111 -5 126 -20 129 -10 2 -18 2 -19 0z"/>
<path d="M6859 6868 c-1 -8 -8 -97 -14 -198 -4 -78 -2 -166 9 -275 9 -88 16
-206 16 -263 0 -92 2 -103 17 -100 32 6 35 71 17 298 -12 154 -15 261 -10 378
6 158 6 162 -14 162 -11 0 -20 -1 -21 -2z"/>
<path d="M7828 6848 c-31 -25 -53 -117 -53 -228 0 -58 4 -126 8 -152 l8 -48
-29 0 c-58 0 -92 -12 -92 -31 0 -17 8 -19 68 -19 l67 0 35 -112 c56 -182 104
-265 123 -214 3 8 -12 80 -34 161 -21 80 -39 154 -39 164 0 10 13 22 34 29 72
26 87 82 22 82 -25 0 -45 -9 -70 -30 -40 -36 -40 -35 -56 80 -13 97 -1 203 31
264 17 33 18 41 7 53 -11 11 -17 11 -30 1z"/>
<path d="M6963 6793 c-4 -9 -7 -150 -7 -313 0 -224 4 -322 17 -409 9 -63 21
-119 26 -124 14 -14 43 12 36 32 -10 24 -34 238 -35 298 0 52 0 52 26 43 14
-6 37 -10 51 -10 20 0 24 -3 18 -17 -40 -91 -25 -175 40 -240 36 -37 48 -43
84 -43 25 0 62 10 91 25 56 28 62 35 50 55 -8 12 -18 10 -63 -13 -65 -33 -86
-34 -122 -5 -52 40 -72 137 -40 197 12 24 22 29 70 35 99 11 175 56 175 102 0
13 -10 35 -23 49 -46 54 -123 29 -199 -65 -25 -32 -38 -40 -65 -40 -27 0 -33
4 -33 21 0 19 -4 20 -36 14 l-36 -6 8 148 c14 232 12 277 -9 281 -9 2 -20 -4
-24 -15z m366 -372 c12 -22 2 -33 -52 -56 -41 -17 -87 -20 -87 -6 0 18 84 81
106 81 13 0 28 -9 33 -19z"/>
<path d="M6458 6735 c-51 -19 -117 -66 -209 -147 -124 -109 -147 -187 -86
-288 58 -97 153 -151 224 -127 42 14 63 41 46 58 -8 8 -17 7 -34 -5 -13 -9
-35 -16 -50 -16 -55 0 -158 96 -174 162 -4 15 -2 42 4 61 19 57 197 219 278
253 18 8 54 14 82 14 41 0 50 -3 54 -21 5 -18 11 -20 34 -15 36 9 45 19 38 38
-15 38 -141 59 -207 33z"/>
<path d="M18703 6718 c-6 -7 -19 -56 -29 -108 -30 -150 -24 -417 14 -670 5
-31 12 -46 25 -48 22 -4 22 28 2 209 -8 74 -16 169 -17 211 -3 70 -2 77 16 80
28 4 32 28 6 35 -22 6 -22 9 -16 76 3 38 14 98 22 133 16 62 14 94 -4 94 -5 0
-14 -6 -19 -12z"/>
<path d="M7944 6699 c-4 -7 2 -19 13 -28 11 -9 23 -24 27 -34 10 -30 41 -16
44 21 3 27 -1 34 -23 42 -34 13 -52 13 -61 -1z"/>
<path d="M8690 6630 c-10 -6 -13 -29 -12 -77 2 -104 19 -197 58 -320 34 -105
55 -136 76 -115 4 4 23 62 42 129 18 67 44 142 57 167 29 59 110 142 120 123
5 -7 12 -66 18 -131 8 -96 16 -130 39 -180 38 -79 62 -109 81 -97 12 8 8 22
-23 84 -30 58 -40 93 -47 158 -24 207 -35 238 -80 224 -35 -11 -120 -104 -149
-161 -13 -27 -36 -91 -50 -143 l-26 -93 -28 88 c-23 72 -30 113 -34 216 -4
128 -11 147 -42 128z"/>
<path d="M8330 6567 c-94 -50 -135 -149 -91 -220 29 -47 114 -125 156 -143
110 -46 234 19 211 110 -8 32 -41 32 -42 1 -2 -75 -66 -105 -150 -70 -45 19
-139 113 -148 148 -9 39 17 90 65 123 68 47 119 32 159 -46 42 -84 33 -134
-29 -160 -32 -13 -41 -37 -17 -46 22 -8 91 32 104 61 30 64 -4 173 -72 233
-45 39 -85 42 -146 9z"/>
<path d="M1481 6511 c-10 -7 -7 -22 18 -74 17 -36 31 -73 31 -83 0 -40 13 -64
33 -64 18 0 19 5 14 48 -6 53 -45 150 -68 169 -9 7 -20 8 -28 4z"/>
<path d="M8092 6478 c-17 -17 -15 -27 7 -46 22 -19 93 -263 89 -302 -2 -19 2
-25 17 -25 27 0 32 57 10 133 -58 202 -76 252 -93 252 -10 0 -23 -5 -30 -12z"/>
<path d="M7572 6471 c-7 -4 -21 -22 -30 -39 -9 -17 -30 -52 -46 -77 -42 -68
-58 -122 -51 -167 9 -49 60 -118 105 -140 66 -33 190 -18 242 29 22 19 23 56
3 73 -19 16 -38 3 -32 -22 4 -15 -3 -24 -36 -39 -82 -37 -167 -18 -211 47 -48
70 -27 151 69 268 25 31 45 60 45 66 0 12 -40 13 -58 1z"/>
<path d="M6597 6429 c-41 -22 -90 -83 -107 -134 -16 -47 2 -103 45 -148 49
-50 91 -51 134 -2 50 58 99 169 80 181 -6 3 -3 11 7 18 41 31 -24 106 -91 106
-16 -1 -47 -10 -68 -21z m101 -35 c22 -15 22 -17 5 -29 -15 -12 -16 -17 -5
-35 11 -17 9 -28 -8 -67 -26 -58 -67 -113 -84 -113 -25 0 -76 69 -76 101 0 45
36 102 83 132 48 31 55 32 85 11z"/>
<path d="M1536 6062 c-3 -5 4 -37 15 -73 11 -35 23 -100 27 -144 6 -71 9 -80
27 -80 18 0 20 6 18 70 -3 88 -41 228 -65 233 -9 2 -19 -1 -22 -6z"/>
<path d="M18590 5781 c0 -11 5 -23 11 -27 20 -12 79 -148 79 -181 0 -25 -9
-39 -45 -69 -41 -33 -60 -74 -35 -74 20 0 99 65 113 93 10 20 12 42 6 76 -7
45 -52 145 -82 184 -19 23 -47 22 -47 -2z"/>
<path d="M1625 5551 c-3 -6 10 -50 29 -99 60 -150 84 -300 55 -354 -8 -16 -8
-24 4 -35 13 -14 17 -12 34 13 39 60 13 240 -60 419 -24 57 -47 79 -62 56z"/>
<path d="M10924 5445 c-8 -19 5 -38 21 -31 7 2 52 -5 101 -16 82 -18 111 -20
352 -14 210 5 277 3 335 -9 70 -14 346 -59 417 -68 19 -2 78 2 131 9 347 49
445 52 839 28 319 -19 702 -15 889 11 115 16 132 16 230 1 58 -9 117 -17 131
-18 18 -2 24 -8 23 -23 -16 -153 -28 -234 -38 -250 -7 -11 -15 -51 -18 -90 -4
-38 -11 -120 -18 -182 -14 -142 -3 -278 56 -708 122 -881 131 -973 116 -1125
-6 -63 -13 -128 -14 -145 -8 -89 -20 -166 -27 -170 -10 -6 -21 136 -13 190 5
41 4 45 -16 45 -12 0 -24 -8 -27 -17 -3 -10 -12 -32 -19 -50 -12 -27 -12 -34
-1 -40 8 -5 16 -36 20 -78 4 -50 3 -63 -4 -47 -6 15 -17 22 -27 20 -14 -3 -17
-12 -15 -38 2 -19 8 -42 12 -51 6 -10 0 -44 -16 -93 -13 -42 -24 -97 -24 -122
0 -95 44 -530 67 -654 6 -32 5 -34 -11 -21 -22 18 -41 1 -31 -28 9 -30 54 -39
72 -16 16 22 16 59 3 140 -6 33 -14 107 -20 165 -5 58 -15 155 -21 215 -6 61
-11 143 -10 184 0 78 27 179 42 164 22 -22 41 -286 42 -607 2 -268 5 -330 16
-334 25 -8 31 22 32 158 l1 135 15 -70 c8 -38 27 -131 43 -206 17 -75 33 -181
36 -236 l7 -99 -269 -17 c-148 -10 -354 -22 -459 -27 -104 -5 -217 -16 -250
-25 -78 -19 -519 -44 -750 -43 -155 2 -201 -2 -330 -25 -82 -15 -212 -31 -288
-37 -75 -6 -161 -15 -190 -22 -36 -7 -91 -8 -177 -2 -69 4 -258 8 -420 9 -162
0 -308 3 -325 7 -35 9 -60 -3 -52 -25 9 -23 107 -30 392 -28 143 1 312 -3 375
-8 75 -7 136 -7 175 -1 33 5 137 16 230 25 94 9 220 25 280 37 86 17 154 22
315 24 358 4 666 22 765 44 64 14 157 23 320 30 127 5 293 14 370 20 77 5 173
10 213 10 l73 0 -3 -57 c-2 -46 0 -58 13 -61 19 -4 27 12 44 93 11 51 11 62
-1 76 -9 10 -14 41 -14 95 0 46 -11 129 -26 199 -71 339 -109 599 -121 836 -6
110 -5 119 20 170 14 30 30 87 36 129 13 103 14 1005 0 1160 -5 69 -30 258
-55 420 -60 391 -73 499 -80 660 l-6 135 48 36 c27 20 57 39 68 43 29 10 18
103 -17 150 -15 19 -27 38 -27 43 0 4 -5 24 -10 45 -12 41 -35 55 -59 35 -27
-23 -56 -26 -138 -11 -99 17 -157 17 -318 -1 -175 -20 -600 -19 -936 1 -283
17 -398 12 -724 -32 -142 -19 -174 -16 -497 46 -95 19 -142 21 -400 20 -240
-2 -304 1 -353 14 -74 20 -114 20 -121 1z m3553 -236 c5 -40 2 -46 -27 -68
l-32 -23 7 73 c4 41 10 78 12 82 11 18 35 -22 40 -64z m-89 -516 c6 -65 32
-248 57 -408 54 -346 63 -436 70 -705 l5 -205 -30 215 c-17 118 -48 341 -70
495 -21 154 -44 324 -50 377 -12 115 -13 348 -2 348 4 0 13 -53 20 -117z"/>
<path d="M11058 5323 c-9 -2 -23 -19 -29 -38 -10 -27 -16 -32 -29 -25 -24 13
-99 -26 -112 -59 -6 -14 -12 -39 -13 -56 -2 -16 -12 -61 -23 -98 -36 -118 -45
-249 -44 -632 1 -332 13 -594 42 -895 5 -52 10 -102 10 -110 0 -12 -18 -19
-70 -28 -93 -16 -100 -15 -100 8 0 21 -34 45 -50 35 -15 -9 -12 -31 7 -46 18
-16 3 -19 -182 -39 -204 -22 -282 -31 -350 -42 -42 -7 -161 -10 -300 -8 -474
7 -689 5 -790 -10 -67 -9 -171 -13 -315 -11 -528 6 -938 3 -1095 -9 -93 -7
-223 -12 -287 -11 -90 1 -126 -2 -155 -15 -28 -12 -63 -16 -135 -15 -53 1
-150 -3 -215 -8 -71 -6 -166 -7 -238 -3 -121 8 -151 7 -465 -28 -96 -10 -238
-21 -315 -25 -238 -10 -399 -23 -428 -34 -16 -6 -50 -11 -76 -11 l-47 0 -21
147 -21 146 31 46 c52 75 72 128 57 146 -18 22 -34 19 -71 -12 -18 -16 -30
-22 -25 -15 10 16 -11 42 -29 36 -7 -3 -16 -21 -19 -40 -6 -30 -11 -34 -36
-34 -23 0 -30 -5 -30 -19 0 -11 -5 -23 -12 -27 -8 -5 -9 11 -4 65 3 39 7 77 9
84 1 7 -7 12 -18 12 -25 0 -49 -68 -60 -166 l-7 -66 -109 -104 c-123 -116
-247 -209 -314 -235 -42 -16 -57 -36 -36 -48 5 -3 34 -1 65 6 43 8 60 8 69 -1
6 -6 21 -11 33 -11 13 0 60 -29 107 -64 110 -85 237 -152 314 -166 58 -12 61
-14 66 -44 2 -17 3 -32 2 -34 -1 -1 -24 11 -51 27 -66 41 -148 61 -276 68 -91
5 -106 8 -96 20 8 10 8 17 -1 26 -9 9 -18 8 -39 -5 -37 -23 -49 -43 -34 -61 8
-10 46 -16 129 -21 147 -8 230 -28 310 -75 67 -39 69 -42 96 -181 11 -53 16
-65 32 -65 29 0 30 34 6 129 -33 131 -37 166 -17 166 9 0 19 6 22 14 7 19 -13
56 -31 56 -15 0 -32 26 -45 69 -4 14 -11 33 -15 42 -4 11 0 18 15 22 28 7 23
41 -7 45 -15 2 -22 12 -25 33 -4 26 -2 29 23 29 24 0 27 -4 34 -47 8 -58 21
-83 40 -83 16 0 19 47 6 105 l-6 30 65 13 c87 17 244 30 480 42 107 5 224 14
260 19 139 22 350 33 700 36 316 3 370 6 405 21 33 14 82 17 289 20 173 3 268
9 313 19 82 19 560 20 744 1 137 -14 382 -7 544 15 92 13 587 13 790 0 104 -6
304 9 365 28 19 6 66 11 105 11 38 0 115 7 170 15 55 9 136 20 180 25 44 5
104 15 133 21 30 6 55 9 57 7 6 -6 54 -423 61 -528 l6 -105 -71 -236 c-39
-129 -71 -241 -71 -247 0 -7 9 -12 19 -12 20 0 37 44 102 268 18 61 33 111 35
110 1 -2 9 -79 18 -173 9 -93 21 -200 26 -236 20 -137 41 -400 47 -589 6 -208
-4 -322 -34 -384 -13 -29 -14 -39 -4 -49 9 -9 19 -3 48 31 l36 43 -2 242 c-2
240 -18 484 -46 707 -8 63 -24 208 -35 322 l-20 207 21 86 c65 277 84 860 53
1647 -15 371 -14 687 2 776 4 17 12 32 20 32 15 0 29 43 19 59 -6 11 -9 12
-37 4z m-104 -170 c-12 -71 -9 -318 6 -583 8 -157 11 -338 7 -545 -7 -319 -11
-373 -43 -510 l-18 -80 -7 50 c-27 187 -44 544 -44 940 0 443 6 525 46 633 12
31 22 73 24 92 3 49 3 50 21 50 13 0 14 -8 8 -47z m43 -295 c-1 -51 -3 -12 -3
87 0 99 2 141 3 93 2 -48 2 -129 0 -180z m22 -1308 c-7 -297 -30 -635 -44
-649 -8 -7 -13 21 -34 209 -25 219 -25 236 -6 243 8 4 14 18 13 34 -1 15 10
82 25 148 15 70 29 173 33 248 4 70 10 124 14 120 5 -4 4 -163 -1 -353z
m-5796 -50 c-18 -32 -33 -39 -33 -16 0 7 10 21 23 29 30 22 31 21 10 -13z
m-118 -138 c-15 -16 -16 -15 -4 12 7 15 15 23 17 16 3 -7 -3 -19 -13 -28z
m-120 -100 c-4 -12 -8 -13 -17 -4 -21 21 -37 13 -56 -30 -23 -51 -116 -143
-154 -152 -14 -3 -36 -2 -48 2 -20 7 -16 12 37 49 32 23 99 79 148 126 90 84
90 84 93 55 2 -17 1 -37 -3 -46z m220 -139 c4 -19 1 -23 -20 -23 -24 0 -25 2
-25 68 0 37 3 78 7 92 5 20 9 10 20 -45 7 -38 15 -80 18 -92z m-139 87 l-14
-55 -1 46 c-1 25 4 50 11 57 18 18 18 12 4 -48z m-76 -50 l0 -40 -40 0 c-22 0
-40 2 -40 5 0 9 62 75 71 75 5 0 9 -18 9 -40z m107 -42 c-3 -8 -6 -5 -6 6 -1
11 2 17 5 13 3 -3 4 -12 1 -19z m-114 -48 c2 -3 7 -20 11 -39 l6 -33 -48 7
c-45 6 -122 25 -131 32 -2 1 4 12 15 24 16 18 28 20 81 17 34 -2 64 -6 66 -8z
m110 -42 c-7 -40 -8 -41 -25 -36 -20 4 -3 68 17 68 11 0 13 -8 8 -32z m-110
-74 c15 -3 35 -18 45 -32 9 -15 21 -30 27 -34 16 -12 60 -9 73 4 15 15 20 9
32 -31 l9 -33 -42 7 c-42 7 -190 80 -237 117 l-25 20 45 -6 c25 -4 58 -9 73
-12z m119 -26 c-6 -6 -16 -7 -22 -3 -9 6 -9 9 1 16 17 10 34 0 21 -13z"/>
<path d="M12734 4948 c-4 -6 -11 -70 -15 -142 -4 -72 -8 -134 -8 -137 -2 -20
-153 -61 -415 -112 -56 -11 -82 -31 -57 -47 14 -8 20 -7 241 40 85 17 170 38
189 46 18 8 35 14 36 14 5 0 20 -232 18 -265 -1 -16 5 -61 13 -100 8 -38 21
-113 30 -164 8 -52 17 -105 20 -118 8 -30 26 -44 43 -33 12 7 11 25 -7 114
-12 58 -22 112 -22 120 0 9 16 15 48 18 27 3 62 12 79 20 l31 16 7 -47 c17
-119 70 -171 173 -173 32 0 69 5 82 12 17 9 25 10 28 2 18 -54 91 -74 133 -36
38 34 138 261 155 351 6 33 8 35 15 15 5 -12 13 -22 18 -22 5 0 13 -15 16 -32
13 -61 77 -187 97 -194 35 -11 41 10 15 49 -33 49 -62 124 -92 241 -27 105
-30 148 -15 211 14 59 42 334 35 345 -14 23 -34 6 -59 -49 -33 -74 -50 -193
-41 -293 4 -42 4 -94 0 -115 -5 -35 -10 -40 -53 -55 -82 -30 -155 -80 -189
-130 -30 -45 -37 -77 -48 -202 -4 -51 -105 -75 -165 -39 -38 22 -51 54 -58
135 l-5 67 57 63 c61 66 126 159 126 178 0 6 -6 13 -14 16 -21 8 -158 -131
-189 -191 -28 -54 -52 -75 -106 -93 -69 -24 -77 -19 -89 56 -6 37 -16 90 -22
119 -6 29 -9 92 -8 140 l3 88 40 10 c47 11 65 26 65 54 0 26 -15 26 -65 1
l-40 -20 -3 53 c-2 30 4 87 12 127 12 54 13 77 5 87 -14 16 -35 17 -45 1z
m756 -620 c-24 -84 -74 -212 -108 -273 -19 -35 -34 -51 -51 -53 -35 -5 -41 12
-41 117 0 142 24 183 146 245 71 37 74 35 54 -36z"/>
<path d="M11775 4739 c-27 -10 -72 -18 -98 -19 -44 0 -48 -2 -45 -22 2 -18
-13 -33 -85 -81 -115 -77 -222 -184 -256 -256 -34 -74 -37 -197 -6 -251 46
-79 184 -97 358 -46 107 32 111 32 125 2 20 -44 93 -43 130 3 22 28 83 164 94
213 6 26 14 45 18 43 4 -3 11 -29 15 -60 9 -72 62 -179 92 -183 15 -2 26 5 36
24 l14 27 7 -27 c7 -28 33 -35 43 -11 3 9 -2 42 -11 74 -19 69 -10 171 21 224
25 43 111 74 155 56 56 -23 55 -43 -6 -111 -80 -88 -100 -145 -93 -273 5 -109
17 -146 52 -165 78 -42 142 15 186 165 10 33 18 51 18 40 1 -28 58 -95 95
-110 60 -25 79 13 21 41 -44 21 -66 52 -89 129 -10 33 -21 66 -23 73 -4 8 5
12 25 12 16 0 35 7 42 15 19 22 17 108 -2 138 -18 26 -65 41 -105 31 -18 -5
-31 0 -51 19 -36 33 -65 47 -100 47 -48 0 -120 -30 -147 -61 -32 -39 -55 -118
-55 -191 0 -32 -4 -58 -9 -58 -5 0 -13 -12 -18 -27 -9 -26 -9 -25 -30 23 -11
27 -29 110 -40 184 -17 120 -21 135 -38 135 -17 0 -23 -17 -46 -125 -42 -194
-117 -336 -156 -297 -20 19 -27 195 -14 302 18 132 18 129 -1 133 -32 6 -41
-37 -46 -214 l-5 -172 -31 -5 c-17 -2 -67 -14 -110 -26 -86 -23 -170 -27 -228
-10 -51 13 -68 49 -68 136 0 96 28 150 122 239 134 127 272 206 436 250 8 2
12 12 10 21 -4 24 -42 25 -103 2z m799 -365 c3 -9 6 -31 6 -49 0 -33 -2 -34
-42 -37 l-43 -3 -2 -74 c-3 -137 -49 -265 -99 -277 -38 -10 -54 13 -65 92 -10
74 -5 139 17 192 18 44 80 119 123 148 41 28 96 32 105 8z"/>
<path d="M18484 4747 c-2 -7 7 -67 21 -133 15 -65 34 -175 43 -244 13 -97 20
-125 32 -125 22 0 17 167 -8 270 -11 44 -25 112 -32 150 -7 39 -14 76 -16 83
-5 16 -33 16 -40 -1z"/>
<path d="M1827 4693 c-3 -5 -2 -27 3 -49 13 -55 13 -58 -12 -69 -36 -16 -29
-40 13 -43 55 -5 63 13 47 95 -9 48 -18 69 -30 71 -9 2 -19 -1 -21 -5z"/>
<path d="M1652 4141 c-8 -5 -20 -74 -32 -185 -11 -98 -33 -235 -50 -306 -16
-70 -30 -130 -30 -134 0 -3 -19 -15 -42 -27 -68 -34 -127 -87 -152 -137 l-23
-46 -16 25 c-9 13 -22 43 -29 67 -9 29 -18 42 -31 42 -10 0 -16 4 -12 9 8 14
-24 41 -48 41 -31 -1 -102 -34 -146 -69 -82 -65 -122 -205 -75 -267 57 -78
173 -26 250 112 l36 65 24 -35 c23 -33 24 -40 14 -99 -14 -92 9 -161 51 -150
37 10 109 92 143 162 18 39 44 111 57 160 14 56 29 91 37 91 17 0 27 27 15 43
-6 7 -5 31 2 62 l12 50 6 -85 c4 -47 9 -128 13 -181 l6 -97 37 -16 c20 -9 46
-22 59 -30 26 -15 83 -4 115 22 15 13 19 13 35 -1 38 -35 91 -48 161 -41 55 5
69 3 80 -10 18 -21 48 -20 55 2 3 9 12 58 20 107 19 109 43 205 56 221 6 6 22
9 36 6 22 -4 25 -2 22 19 -4 34 -58 39 -87 8 -25 -27 -34 -57 -62 -204 l-21
-110 -98 5 c-81 4 -104 9 -127 27 -15 11 -27 25 -25 30 1 4 13 40 27 78 26 74
32 162 15 196 -13 23 -48 25 -79 3 -54 -38 -79 -171 -46 -250 18 -44 12 -60
-27 -68 -22 -4 -37 0 -55 14 -14 11 -31 20 -38 20 -30 0 -39 427 -11 543 20
86 23 299 3 315 -7 6 -18 7 -25 3z m244 -665 c-7 -60 -34 -146 -46 -146 -14 0
-22 59 -16 104 8 50 42 110 57 100 7 -4 9 -25 5 -58z m-403 -112 c-13 -48 -36
-110 -50 -138 -24 -49 -88 -126 -105 -126 -11 0 -10 78 3 123 5 20 14 37 19
37 6 0 10 12 10 28 0 32 46 92 103 133 22 16 41 29 42 29 2 0 -8 -39 -22 -86z
m-339 61 c-9 -22 23 -30 50 -12 l24 16 -9 -41 c-32 -141 -179 -282 -219 -209
-37 70 26 192 125 244 37 20 35 20 29 2z"/>
<path d="M3767 4114 c-4 -4 -7 -34 -7 -66 0 -55 -2 -59 -32 -79 -26 -15 -43
-18 -77 -14 -56 8 -72 15 -70 29 3 28 -3 36 -26 36 -22 0 -24 3 -18 31 5 28 4
30 -18 27 -22 -3 -24 -8 -27 -70 -2 -52 2 -79 19 -118 18 -43 21 -63 16 -129
-5 -76 -4 -80 22 -104 14 -14 45 -30 69 -37 l43 -11 -38 -26 c-67 -46 -219
-171 -299 -248 -72 -68 -78 -76 -63 -91 15 -14 21 -13 79 16 35 17 66 28 71
23 5 -5 16 -45 24 -90 20 -104 38 -155 70 -197 14 -18 25 -40 25 -49 0 -27 40
-124 56 -138 29 -24 35 4 17 73 l-17 65 47 45 47 45 0 -98 c0 -74 3 -100 14
-106 8 -4 17 -33 21 -65 7 -53 6 -56 -13 -51 -14 3 -22 -1 -27 -15 -3 -12 -21
-26 -43 -33 -117 -38 -181 -121 -81 -105 l39 6 0 -207 c0 -214 11 -297 44
-347 13 -20 16 -52 16 -155 0 -76 -4 -132 -10 -136 -13 -8 -13 -132 0 -140 15
-10 12 -28 -4 -22 -28 11 -32 -19 -25 -168 7 -146 18 -205 38 -205 23 0 33 50
41 213 6 115 14 185 25 209 12 30 15 85 15 296 0 212 3 262 14 271 27 22 39
143 31 311 -7 154 -7 157 14 163 18 4 21 13 22 59 0 29 9 71 19 93 l18 40 8
-30 c12 -41 9 -317 -4 -445 -7 -58 -16 -180 -22 -271 -12 -196 -33 -329 -55
-345 -16 -12 -20 -49 -6 -58 51 -32 91 123 107 419 7 111 9 123 15 80 4 -27 8
-113 8 -189 1 -120 -1 -140 -16 -151 -15 -11 -15 -15 -4 -29 10 -12 12 -33 8
-72 -6 -62 -1 -84 19 -84 10 0 12 -12 8 -47 -8 -76 -19 -308 -16 -327 2 -10
11 -16 20 -14 14 3 18 22 25 113 13 193 17 215 34 215 12 0 14 8 9 43 -9 64
-24 384 -25 539 -1 115 -4 138 -17 146 -24 14 -17 248 8 266 24 17 46 159 58
375 15 261 -7 409 -63 427 -12 4 -32 17 -44 30 -15 16 -33 24 -56 24 -31 0
-37 5 -72 65 -21 36 -43 69 -49 73 -6 4 7 9 29 12 34 4 40 9 39 28 0 12 5 22
13 22 26 0 35 52 30 160 l-5 105 39 60 c38 58 47 100 21 100 -7 0 -26 -22 -42
-50 -32 -55 -38 -51 -42 30 -2 36 -7 51 -18 53 -9 1 -19 0 -23 -4z m-27 -212
c0 -7 -19 -22 -42 -32 -71 -32 -118 -25 -118 19 l0 27 80 -1 c59 0 80 -3 80
-13z m-5 -93 c-6 -33 -15 -36 -15 -6 0 15 4 27 9 27 6 0 8 -10 6 -21z m-65
-23 c0 -23 -45 -56 -74 -56 -12 0 -16 10 -16 40 l0 40 45 -2 c39 -1 45 -4 45
-22z m93 -90 c9 1 17 -5 17 -13 0 -10 -6 -13 -16 -9 -9 3 -22 6 -30 6 -9 0
-14 11 -14 28 0 40 14 50 20 15 4 -19 11 -28 23 -27z m-83 4 c0 -5 -10 -10
-22 -10 -19 0 -20 2 -8 10 19 13 30 13 30 0z m-2 -222 c-3 -82 -3 -83 -28 -80
-50 5 -100 1 -145 -12 -28 -9 -47 -10 -51 -4 -3 5 -4 10 -3 12 2 1 36 27 74
57 112 88 139 109 148 109 4 0 7 -37 5 -82z m82 -19 c0 -4 -7 -9 -15 -13 -11
-4 -15 2 -15 27 1 30 1 31 15 13 8 -11 15 -23 15 -27z m-220 -119 c-34 -11
-60 -11 -35 0 11 5 29 8 40 8 16 0 15 -2 -5 -8z m426 -309 c-3 -112 -6 -205
-8 -206 -2 -1 -15 -5 -29 -8 -24 -6 -27 -3 -45 49 -10 31 -25 59 -31 61 -10 4
-13 49 -13 179 l0 174 23 0 c12 0 38 8 57 19 l35 19 8 -42 c5 -22 6 -133 3
-245z m-179 202 c-2 -16 -4 -5 -4 22 0 28 2 40 4 28 2 -13 2 -35 0 -50z m-102
-15 c-6 -69 -26 -123 -67 -180 -11 -16 -23 -28 -27 -28 -12 0 -18 106 -11 185
5 52 9 64 15 47 11 -34 39 -24 43 16 3 27 7 32 29 32 l26 0 -8 -72z m-150 4
l-8 -27 -9 34 c-7 25 -6 36 4 42 16 11 22 -13 13 -49z m243 -279 c-4 -62 -28
-71 -28 -10 0 24 3 47 7 50 16 17 24 3 21 -40z m-11 -150 c-3 -10 -5 -2 -5 17
0 19 2 27 5 18 2 -10 2 -26 0 -35z m-107 -167 c0 -2 -7 -7 -16 -10 -8 -3 -12
-2 -9 4 6 10 25 14 25 6z m-13 -263 c-2 -38 -3 -7 -3 67 0 74 1 105 3 68 2
-38 2 -98 0 -135z"/>
<path d="M185 3990 c-48 -24 -105 -95 -133 -165 -41 -104 -56 -310 -22 -310
11 0 17 25 26 110 22 202 87 319 191 340 49 10 77 -24 98 -120 28 -124 12
-290 -40 -409 -9 -21 -18 -36 -21 -33 -7 7 15 127 27 149 14 26 -6 58 -36 58
-24 0 -35 -23 -16 -34 4 -3 2 -29 -5 -58 -8 -29 -14 -69 -14 -90 0 -21 -2 -38
-5 -38 -2 0 -22 19 -43 42 -28 30 -44 39 -57 34 -14 -5 -17 -14 -12 -47 7 -52
23 -71 41 -48 10 15 14 12 33 -21 15 -28 17 -42 10 -49 -17 -17 -35 -13 -42 9
-7 23 -33 27 -41 6 -3 -8 2 -28 11 -45 12 -24 22 -31 45 -31 16 0 32 5 35 10
15 24 23 5 29 -73 4 -46 18 -130 32 -188 14 -57 28 -121 31 -141 6 -43 28 -56
44 -27 8 15 6 36 -10 87 -30 100 -53 226 -49 272 l3 40 48 -34 c55 -39 130
-73 172 -78 24 -2 30 1 30 16 0 13 -12 22 -40 31 -65 19 -125 54 -176 102
l-49 46 21 31 c99 150 131 401 73 578 -30 91 -103 121 -189 78z"/>
<path d="M815 3526 c-42 -18 -90 -61 -115 -100 -11 -19 -28 -36 -38 -38 -9 -3
-82 -1 -161 4 -161 10 -181 5 -141 -37 23 -25 75 -35 82 -15 2 6 41 7 103 3
l100 -6 0 -56 c1 -102 64 -181 145 -181 67 0 120 64 120 145 0 55 -30 43 -46
-18 -20 -78 -48 -98 -107 -74 -44 19 -69 71 -65 134 l3 46 84 17 c93 18 114
34 126 96 5 29 2 43 -13 63 -23 31 -38 35 -77 17z m45 -63 c0 -16 -4 -33 -8
-39 -7 -12 -75 -34 -105 -34 -17 0 -17 2 2 27 26 32 80 73 98 73 8 0 13 -11
13 -27z"/>
<path d="M18496 3531 c-4 -6 0 -83 9 -173 8 -90 16 -212 18 -273 2 -103 3
-110 22 -110 18 0 20 7 22 85 2 47 -5 173 -15 280 -15 164 -20 195 -34 198 -9
2 -19 -1 -22 -7z"/>
<path d="M13355 3088 c-2 -7 -6 -85 -9 -173 -5 -159 -17 -235 -38 -235 -6 0
-36 12 -68 26 -69 31 -92 24 -111 -33 -27 -82 11 -295 63 -350 36 -38 56 -30
64 25 7 49 61 192 72 192 12 0 31 54 30 85 0 17 4 41 9 54 8 19 12 -5 22 -105
19 -212 47 -314 87 -314 22 0 29 28 11 48 -9 10 -21 40 -27 67 -22 105 -53
406 -57 550 -3 83 -9 155 -15 162 -13 16 -28 17 -33 1z m-107 -433 c28 -11 52
-26 52 -33 0 -8 -18 -59 -40 -113 -22 -55 -40 -106 -40 -114 0 -36 -19 -10
-35 47 -27 96 -25 249 3 236 4 -2 31 -12 60 -23z"/>
<path d="M11535 2970 c-3 -6 -4 -19 0 -29 4 -15 -1 -20 -30 -25 -79 -15 -168
-147 -169 -251 -1 -55 16 -88 40 -78 11 4 12 17 8 59 -6 48 -3 62 25 119 18
35 43 73 57 84 28 22 105 41 169 41 36 0 48 -5 69 -30 31 -38 40 -81 34 -173
-6 -80 -38 -170 -79 -219 l-26 -32 -49 38 -49 38 0 66 c0 60 -2 67 -20 70 -17
2 -24 -7 -38 -45 -27 -77 -36 -174 -38 -413 -1 -213 0 -225 17 -225 18 0 19
14 24 232 3 127 8 235 13 239 4 4 7 2 7 -4 0 -7 9 -12 20 -12 11 0 20 -5 20
-11 0 -5 8 -9 18 -8 9 1 22 1 29 0 7 0 44 -47 82 -103 75 -109 173 -218 197
-218 10 0 14 13 14 49 0 54 -12 70 -37 50 -13 -12 -20 -8 -49 25 -43 50 -134
181 -134 194 0 18 33 24 42 7 11 -19 37 -20 44 0 13 32 19 12 16 -50 -3 -61
-2 -67 26 -95 26 -25 38 -30 81 -30 29 0 91 13 146 30 77 25 95 35 95 50 0 26
-18 25 -99 -4 -163 -58 -227 -37 -207 68 6 33 7 33 69 38 78 7 145 35 192 83
55 54 85 145 53 158 -22 8 -111 -4 -148 -19 -69 -29 -129 -76 -160 -125 -24
-36 -38 -49 -55 -49 -13 0 -26 4 -29 9 -3 5 8 40 25 77 28 60 32 81 33 164 1
81 -2 102 -22 142 -30 61 -63 82 -129 82 -32 0 -49 4 -44 9 5 5 7 16 4 23 -6
16 -49 19 -58 4z m545 -375 c0 -24 -72 -97 -115 -116 -22 -10 -62 -19 -89 -19
l-49 0 25 33 c29 38 108 93 152 106 49 14 76 13 76 -4z"/>
<path d="M13685 2696 c-60 -19 -93 -44 -120 -91 -33 -55 -32 -73 9 -153 39
-77 57 -96 135 -137 79 -42 81 -67 9 -100 -63 -29 -278 -60 -346 -51 -33 4
-44 2 -49 -10 -9 -25 16 -34 92 -34 163 1 327 40 382 92 42 40 23 95 -46 130
-83 41 -101 59 -137 129 -32 65 -34 71 -20 98 19 37 72 81 96 81 32 0 71 23
68 39 -4 21 -24 23 -73 7z"/>
<path d="M12362 2629 c-104 -40 -201 -164 -231 -296 -16 -68 2 -107 57 -122
52 -15 78 -13 152 12 l65 23 22 -26 c19 -22 29 -25 80 -24 82 2 165 37 224 93
51 49 68 98 31 89 -15 -4 -17 0 -14 29 4 28 -2 39 -35 73 l-40 39 21 20 c54
48 135 71 172 46 37 -24 46 -57 54 -195 9 -137 28 -204 58 -198 14 3 17 15 17
63 -1 77 -26 265 -36 265 -4 0 -10 14 -14 30 -4 17 -20 44 -37 60 -24 25 -38
30 -76 30 -57 0 -125 -30 -172 -74 -26 -25 -47 -35 -84 -40 -105 -13 -177 -85
-186 -185 l-5 -54 -50 -18 c-86 -30 -165 -23 -165 15 0 43 32 131 67 183 38
58 113 120 123 102 12 -18 63 -40 72 -31 5 5 10 31 11 58 2 58 -6 62 -81 33z
m306 -165 c51 -35 50 -81 -1 -86 -40 -4 -42 -29 -4 -42 20 -8 34 -7 50 3 20
13 20 12 -2 -13 -14 -14 -49 -38 -77 -52 -61 -30 -167 -44 -179 -24 -5 8 -1
16 9 22 23 13 20 49 -4 55 -32 9 -26 60 11 100 l32 32 28 -30 c26 -28 59 -32
59 -6 0 11 39 57 50 57 3 0 16 -7 28 -16z"/>
<path d="M1726 2451 c-4 -5 -6 -56 -5 -113 1 -57 -2 -128 -6 -159 -4 -32 -3
-59 2 -62 22 -14 36 15 46 95 16 131 -8 286 -37 239z"/>
<path d="M18546 2211 c-3 -5 1 -25 9 -45 l15 -36 -39 6 c-26 4 -41 2 -46 -6
-13 -22 25 -40 82 -40 62 0 66 9 33 84 -18 43 -41 58 -54 37z"/>
<path d="M1704 1970 c-10 -10 5 -205 25 -315 6 -33 12 -78 14 -100 2 -33 6
-40 22 -40 18 0 20 6 18 50 -1 28 -9 97 -17 155 -9 58 -19 138 -23 179 -8 72
-18 92 -39 71z"/>
<path d="M18475 1718 c-3 -8 3 -34 14 -59 25 -53 26 -79 6 -105 -35 -46 8 -64
44 -18 28 35 26 68 -7 134 -28 56 -48 72 -57 48z"/>
<path d="M18373 1474 c4 -22 -2 -30 -41 -55 -25 -16 -65 -36 -89 -45 -29 -12
-43 -23 -43 -35 0 -26 25 -24 96 10 70 33 134 86 134 110 0 23 -19 41 -43 41
-15 0 -18 -5 -14 -26z"/>
<path d="M17155 1225 c-16 -8 -55 -17 -85 -20 -30 -4 -91 -13 -135 -21 -119
-22 -321 -44 -397 -44 -68 0 -91 -12 -67 -34 27 -25 390 11 656 65 57 11 100
39 89 57 -9 15 -23 14 -61 -3z"/>
<path d="M1818 968 c-3 -7 6 -87 19 -178 13 -91 25 -219 26 -285 2 -113 3
-120 22 -120 19 0 20 6 18 145 -3 184 -40 443 -64 448 -9 2 -19 -3 -21 -10z"/>
<path d="M15957 958 c-2 -7 7 -26 21 -41 l26 -28 -49 6 c-117 12 -380 25 -414
20 -78 -13 -211 -48 -228 -60 -13 -10 -15 -17 -7 -25 9 -9 39 -5 120 16 103
25 117 26 259 20 83 -3 204 -10 270 -15 88 -7 123 -6 132 2 15 15 10 22 -54
75 -54 44 -68 50 -76 30z"/>
<path d="M14225 636 c-50 -16 -105 -44 -105 -54 0 -5 5 -13 11 -19 8 -8 26 -4
66 14 42 19 63 24 96 19 81 -12 92 -12 92 4 0 18 -60 49 -95 49 -14 0 -43 -6
-65 -13z"/>
<path d="M12913 550 c-25 -10 -31 -36 -10 -43 6 -2 27 0 45 4 50 11 137 -5
227 -41 90 -37 190 -47 190 -20 0 10 -18 18 -55 26 -31 6 -94 26 -140 44 -91
34 -214 49 -257 30z"/>
<path d="M13688 477 c-32 -18 -58 -38 -58 -45 0 -25 30 -24 74 2 54 31 65 32
117 6 41 -21 59 -20 59 5 0 16 -89 65 -117 65 -10 -1 -44 -15 -75 -33z"/>
<path d="M4455 444 c-173 -59 -243 -69 -489 -68 -120 1 -326 7 -459 15 -276
15 -325 8 -418 -56 -68 -47 -115 -58 -205 -50 -65 6 -74 5 -74 -9 0 -23 41
-36 113 -36 80 0 124 13 184 53 94 65 131 69 433 50 302 -19 671 -13 770 11
36 9 116 33 178 54 83 27 112 40 110 52 -5 24 -37 21 -143 -16z"/>
<path d="M4884 466 c-8 -21 3 -36 26 -36 26 0 187 -57 327 -115 187 -77 305
-72 439 20 59 40 143 75 181 75 7 0 13 9 13 20 0 16 -7 20 -32 20 -44 -1 -135
-39 -195 -82 -62 -46 -112 -61 -198 -62 -61 0 -84 6 -185 48 -130 54 -289 111
-338 121 -24 5 -33 3 -38 -9z"/>
<path d="M1985 460 c-11 -18 5 -30 40 -30 29 0 39 -6 59 -37 14 -21 34 -67 46
-103 25 -75 35 -89 52 -72 15 15 0 78 -39 160 -36 77 -54 92 -107 92 -25 0
-48 -4 -51 -10z"/>
<path d="M12580 459 c-30 -5 -89 -11 -130 -15 -86 -6 -106 -14 -96 -39 5 -13
14 -16 39 -11 17 3 83 10 146 16 63 5 119 14 124 19 13 13 1 41 -15 40 -7 -1
-38 -6 -68 -10z"/>
<path d="M9438 362 c-23 -27 -22 -27 352 -63 120 -12 180 -4 180 22 0 17 -8
19 -80 19 -45 0 -140 7 -213 15 -195 21 -227 22 -239 7z"/>
<path d="M11600 348 c-70 -15 -117 -18 -270 -16 -179 3 -185 2 -185 -17 0 -19
9 -20 155 -28 136 -7 171 -6 285 13 126 21 165 36 151 59 -9 14 -33 12 -136
-11z"/>
<path d="M10525 333 c-172 -3 -187 -7 -183 -36 3 -20 7 -22 63 -18 33 2 112 6
175 10 109 6 115 7 118 29 3 16 -1 21 -15 20 -10 -1 -81 -4 -158 -5z"/>
<path d="M6771 294 c-30 -8 -81 -26 -112 -40 -59 -27 -114 -29 -217 -8 -30 6
-34 4 -30 -12 2 -12 21 -25 53 -37 64 -22 142 -16 216 17 95 44 182 59 297 52
141 -8 328 -32 507 -64 135 -24 174 -27 385 -27 194 0 246 4 300 18 120 33
130 37 130 58 0 24 -9 24 -92 0 -179 -51 -416 -52 -723 -2 -369 61 -602 75
-714 45z"/>
<path d="M2563 280 c-12 -5 -24 -17 -27 -28 -8 -25 -44 -32 -163 -32 -77 0
-95 -3 -100 -16 -3 -9 0 -20 8 -25 18 -11 104 -11 194 1 57 7 74 13 90 34 12
14 29 26 38 26 23 0 34 29 16 41 -17 11 -27 10 -56 -1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -1,10 +1,37 @@
The `dump-thing-server` documentation Dump Things Service Documentation
===================================== ===================================
HERE BE CONTENT... .. image:: https://badge.fury.io/py/dump-things-service.svg
:target: https://pypi.python.org/pypi/dump-things-service/
:alt: PyPI version
*Dump Things Service* is a FastAPI-based HTTP service for storing and retrieving
schema-conform linked-data records. It supports multiple storage backends,
flexible authentication sources, and a curation workflow for distributed data
acquisition.
.. toctree::
:maxdepth: 2
:caption: User Guide
introduction
installation
quickstart
configuration
backends
authentication
endpoints
commands
.. toctree::
:maxdepth: 1
:caption: Developer Reference
changelog
Indices and tables Indices and tables
================== ==================
* :ref:`genindex` * :ref:`genindex`
* :ref:`modindex`
* :ref:`search` * :ref:`search`

49
docs/installation.rst Normal file
View file

@ -0,0 +1,49 @@
Installation
============
Requirements
------------
- Python 3.11 or later
- ``sqlite3`` (if sqlite-backends are used)
Installing from PyPI
---------------------
The service is available on PyPI and can be installed with ``pip``:
.. code-block:: bash
pip install dump-things-service
Installing for Development
---------------------------
Clone the repository and install the package with all development dependencies
using `hatch <https://hatch.pypa.io/>`_:
.. code-block:: bash
git clone https://codeberg.org/datalink/dump-things-server.git
cd dump-things-server
pip install hatch
hatch env create
Building the Documentation
---------------------------
The documentation dependencies are declared in the ``docs`` optional-dependency
group. To install them and build the HTML documentation:
.. code-block:: bash
pip install "dump-things-service[docs]"
make -C docs html
Alternatively, if you are using ``hatch`` execute the following command from the project root:
.. code-block:: bash
hatch run docs:build
The generated HTML will be placed in ``docs/_build/html/``.

277
docs/introduction.rst Normal file
View file

@ -0,0 +1,277 @@
Introduction
============
What is Dump Things Service?
-----------------------------
*Dump Things Service* is a central component of a system that allows cooperative
authoring of linked data (*linked data* refers to data that
is structured according to a schema which is defined in
`LinkML <https://linkml.io>`_). It supports a workflow where authors submit records
into inboxes and curators move records from inboxes to a curated area.
The curated area holds the "official", high-quality, content.
A curation workflow moves proposed changes from the inboxes into the
curated area. Curators inspect proposed changes, accept, modify, or reject them.
Curation can be performed manually or by automated agents. The service provides
tools and APIs to support both (all functionality is exposed via an HTTP API).
The main elements
-----------------
A Dump Things Service instance (usually a process that runs on a server)
supports multiple *Collections*. Each collection has a name and an associated
schema. All records that are stored in the collection must conform to a
schema that is associated with the collection. Every records has at least a
persistent identifier (PID) that is a globally unique identifier (more about
schemas below).
Clients that work with records on a Dump Things Service usually have one or
more of the following roles:
- Readers: users that read data from the curated area of a collection.
- Authors: users that can submit new records for inclusion into the curated
area of a collection. Their submissions are stored in author-specific inboxes.
Authors can usually also read data from the collection.
- Curators: users that can curate the collection. Curators have read and write
access to the curated area of a collection. They also have read and write
access to all inboxes. Curators usually move records from inboxes to the
curated area, probably with editorial changes.
Besides an API that allows access to records, there is another API that
allows access to the configuration of a Dump Things Service and permits
dynamic configuration of an Dump Things Service instance at runtime.
Entities with an *Admin* role can use this API to change the configuration
of a Dump Things Service at runtime.
Interaction with Dump Things Service
------------------------------------
Depending on the role of a user, there are different interaction patterns with
a Dump Things Service. Those are: *Reading*, *Writing*, and *Curating*.
Reading
.......
The most elementary interaction is to read records from
a collection. Depending on the role of a user, reading will either return only
records from the curated area or records from the curated area and from the
user's inbox.
A user with read-access for a collection will be able to retrieve any record
that is stored in the curated area of a collection.
.. image:: images/dts-reader.svg
:alt: Reader access to curated area
:align: center
A user with read- and write-access for a collection, i.e., an author, will be
able to retrieve any record that is stored in the curated area of a collection
or in the inbox of the user. If records from the curated area and the inbox
have identical PIDs, the record from the inbox will be returned.
.. image:: images/dts-authors-reading.svg
:alt: Reading access of authors to curated area and inbox
:align: center
Writing
.......
A user with write-access for a collection, i.e., an author, can submit new
records to the collection. If the records confirm the schema of the collection,
they will be stored in the inbox of the user. Note: write-access does not allow
to move records from the inbox to the curated area.
.. image:: images/dts-author-write.svg
:alt: Authors write to their "personal" inboxes
:align: center
Curating
.........
The purpose of curating is to moves proposed changes from the inboxes of a
collection to the curated area of the collection.
Curator-rights allow a user to read, write,
and delete records from the curated area directly. The user can also read,
write, and delete records from any inbox of the collection.
.. image:: images/dts-curate.svg
:alt: Curator access to curated area and inboxes
:align: center
Curators use the API to inspect proposed changes, accept, modify, or reject
them. The client library `dump-things-pyclient` (see :ref:`dump-things-pyclient`)
provides tools that support curation processes.
Administration
..............
Administrators do not operate on records. Administrators can inspect and modify
the configuration of a Dump Things Service instance at runtime. An administrator
can modify three configuration elements:
1. Collections: add, remove, or modify collections.
2. Tokens: add, remove, or modify tokens.
3. Administrator token: add. remove, or modify administrator tokens.
Records and Schemas
-------------------
Records that are stored in a collection are instances of the classes that are
defined in the schema of the collection. The schema can be freely defined,
but all record-classes, i.e., classes whose instances are can be stored in a
collection, must be a subclass of the class ``Thing``, which is
defined in the schema `things-schema`_. The crucial property of the class
``Thing`` is the persistent identifier (PID). The PID is an **IRI**
(Internationalized Resource Identifier), a globally unique
identifier that identifies the record.
.. _things-schema: https://concepts.datalad.org/s/things/v2
.. _dump-things-pyclient:
The dump-things ecosystem
-------------------------
Dump Things Service is part of a larger ecosystem of tools and services that
support the shared authoring and curation of linked data. Currently there are
two other components that are built to work with it:
- shacl-vue: a web application that allows users to view and edit linked data
records stored in a Dump Things Service instance.
- dump-things-pyclient: a Python client library that simplifies authoring of
Dump Things clients in Python. It also provides a CLI-command to interact
with a Dump Things Service from a shell.
Dump Things Structure
---------------------
Workflow
........
Dump Things Service was built to support cooperative authoring of linked data.
It supports a workflow where authors submit records into inboxes and curators
move records from inboxes to a curated area.
Dump Things Service supports distributed data acquisition while still
controlling the quality of collection data. This is done by distinguishing
between two areas for records:
- **Curated area**: represents the "official", high-quality, collection content.
- **Incoming area** (user-specific inboxes): where users propose new records or
changes to existing records.
A curation workflow moves proposed changes from the incoming area into the
curated area. Curators — entities with specific privileges — can inspect
proposed changes, accept, modify, or reject them. Curation can be performed by
persons or by automated agents. The service provides tools and APIs to support
both options.
Collections
...........
Dump Things Service supports on the highest level multiple *collections*. Each
collection has a name and an associated schema. Collections have inboxes for
all authors and a curated area.
User groups
...........
We distinguish he following user groups:
- Readers: user that read data from a collection.
- Authors: users that can submit new records to a collection. Authors can
usually also read data from the collection.
- Curators: users that can curate the collection. Curators have read and write
access to the curated area of a collection. They also have read and write
access to all inboxes. Curators usually move records from inboxes to the
curated area, probably with editorial changes.
*Dump Things Service* is an implementation of a service that allows storing
and retrieving linked data. It builds the backend for linked-data applications.
Linked-data applications can retrieve data as JSON records or as
`TTL <https://www.w3.org/TR/turtle/>`_ (Turtle) documents from a Dump Things
Service instance. Multiple *Dump Things Service* instances currently serve as
backends for `shacl-vue <https://shacl-vue.psychoinformatics.de/>`_.
All data items stored on a *Dump Things Service* must be structured according to
a defined schema. Schemata are defined in `LinkML <https://linkml.io>`_.
The service supports multiple *collections*. Each data item is stored in a
collection. Each collection has a name and an associated schema. The service
dynamically reads the respective schemata and creates validation code for data
items. This ensures that only items that adhere to the schema can be stored in
the respective collection.
Curated Area and Incoming Area
--------------------------------
The *Dump Things Service* supports distributed data acquisition while still
controlling the quality of collection data. This is done by distinguishing
between two areas:
- **Curated area**: represents the "official", high-quality, collection content.
- **Incoming area** (user-specific inboxes): where users propose new records or
changes to existing records.
A curation workflow moves proposed changes from the incoming area into the
curated area. Curators — entities with specific privileges — can inspect
proposed changes, accept, modify, or reject them. Curation can be performed by
persons or by automated agents. The service provides tools and APIs to support
both options.
Tokens and Permissions
-----------------------
To submit a record to a collection, a **token** is required. Tokens carry:
- Read and write permissions for the incoming areas of collections.
- Read permissions for the curated area of a collection.
- A submitter ID that is annotated to each submitted record.
- A token-specific **zone** in the incoming area.
Multiple tokens can share the same zone, allowing multiple submitters to work
together on the same incoming area.
Key Features
-------------
- **Multiple storage backends**: ``record_dir``, ``record_dir+stl``,
``sqlite``, and ``sqlite+stl``.
- **Flexible authentication**: config-file-based tokens and
`Forgejo <https://forgejo.org/>`_-based authentication.
- **Audit logs**: track time, content, author, and curator for every change.
- **LinkML-based validation**: ensure data conforms to a defined schema.

99
docs/quickstart.rst Normal file
View file

@ -0,0 +1,99 @@
Quick Start
===========
This guide walks you through starting the service with or without an initial
configuration.
The service is started with the command ``dump-things-service <storage root>``.
``<storage root>`` is a directory that will be used to store records for all
collections as well as the persisted configuration of the service.
1. Start the Service
---------------------
On an empty storage root
........................
If the directory ``<storage root>`` does not contain a persisted configuration,
for example, because it is empty, the service will start with an empty configuration.
In this case a *bootstrap* administrator token has to be provided via the option
``--admin-token-hash`` (otherwise it
would not be possible to modify the configuration are runtime because no
administrator token has been configured).
The following command starts the server on ``https://127.0.0.1:8000/`` with the
bootstrap administrator token ``mysecret``:
.. code-block:: bash
dump-things-service /path/to/storage --host 127.0.0.1 --port 8000 --admin-token-hash 652c7dc687d98c9889304ed2e408c74b611e86a40caa51c4b43f1dd5913c5cd0
**Note**: an administrator token hash can be created via the command
``dump-things-hash-token <plain-text token>``.
**Note**: do not use the administrator token hash from the example above in your
installations, as it is publicly visible.
Alternatively to setting ``--admin-token-hash``, set the environment variable
``DTS_ADMIN_TOKEN`` to the plain-text bootstrap administrator token, before starting the service:
.. code-block:: bash
export DTS_ADMIN_TOKEN=mysecret
dump-things-service /path/to/storage
**Note**: do not use ``mysecret`` in your installations as it is publicly visible.
Use a strong secret instead.
On an empty storage root, initially configured via config-file
..............................................................
If the storage root does not contain a persisted configuration, the service will
look for a configuration file at ``<storage root>/.dumpthings.yaml``, unless
``--ignore-default-config-file`` or
``-c/--config <config file>`` is provided.
If ``--ignore-default-config`` is
provided, the server will ignore a configuration file at
``<storage root>/.dumpthings.yaml``.
If ``-c/--config <config file>`` is passed
on the command line, the server will
try to read the configuration from ``<config file>``. Once the configuration is
read, it will be persisted in the storage root.
See :doc:`configuration` for details on the configuration file format.
**Note**: on subsequent restarts, the service will ignore the configuration files
and use the persisted configuration.
2. Explore the API
------------------
Once the service is running, open your browser at
``http://127.0.0.1:8000/docs`` to explore the interactive Swagger UI for all
available endpoints.
For a full description of all endpoints see :doc:`endpoints`.
3. Configure the service
------------------------
The service configuration can be modified at runtime via the administration
endpoints. See :doc:`endpoints` for details.
An easy way to configure a running service is to use the command
``dump-things-upload-configuration`` to upload the content of a
configuration file via the administration endpoints (see :doc:`configuration`).
In combination with the command ``dump-things-download-config`` this command
can be used to "clone" an identically configured service instance (the cloned
service instance will have no records initially, but those can be cloned
from the original service instance as well).

46
docs/roman_numerals.py Normal file
View file

@ -0,0 +1,46 @@
"""Compatibility shim for Sphinx's LaTeX writer.
Some environments provide a broken or incomplete ``roman-numerals`` package
that does not expose the ``roman_numerals`` module expected by Sphinx. The
LaTeX writer only needs a small subset of the functionality: a ``RomanNumeral``
class with ``to_lowercase()``.
"""
from __future__ import annotations
class RomanNumeral:
def __init__(self, value: int) -> None:
if not isinstance(value, int):
raise TypeError('RomanNumeral expects an integer')
if value < 1:
raise ValueError('RomanNumeral expects a positive integer')
self.value = value
def to_lowercase(self) -> str:
return _to_roman(self.value).lower()
def _to_roman(value: int) -> str:
numerals = [
(1000, 'M'),
(900, 'CM'),
(500, 'D'),
(400, 'CD'),
(100, 'C'),
(90, 'XC'),
(50, 'L'),
(40, 'XL'),
(10, 'X'),
(9, 'IX'),
(5, 'V'),
(4, 'IV'),
(1, 'I'),
]
result = []
remaining = value
for arabic, roman in numerals:
while remaining >= arabic:
result.append(roman)
remaining -= arabic
return ''.join(result)

View file

@ -56,6 +56,7 @@ docs = [
"sphinx", "sphinx",
"sphinx_rtd_theme", "sphinx_rtd_theme",
"sphinx_autodoc_typehints", "sphinx_autodoc_typehints",
"myst-parser",
] ]
[project.scripts] [project.scripts]
@ -108,6 +109,7 @@ extra-dependencies = [
"sphinx", "sphinx",
"sphinx_rtd_theme", "sphinx_rtd_theme",
"sphinx-autodoc-typehints", "sphinx-autodoc-typehints",
"myst-parser",
] ]
[tool.hatch.envs.docs.scripts] [tool.hatch.envs.docs.scripts]
build = [ build = [