Compare commits
106 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5cba8d3179 | ||
|
74148a8464 | ||
|
b1216158dd | ||
|
992e72f207 | ||
|
1e66cd9057 | ||
|
d1a98596ff | ||
|
f3ab6daa29 | ||
|
9611afd1af | ||
|
6cd9d01bba | ||
|
34e60e2e10 | ||
|
45401b8050 | ||
|
2d829a8602 | ||
|
e3f2805841 | ||
|
d10c28c81c | ||
|
ad8a51dbea | ||
|
f584d0ea0b | ||
|
9dc1559ba0 | ||
|
cc909fb8ad | ||
|
68c2b7bb32 | ||
|
d8479d1b38 | ||
|
3f071ad439 | ||
|
7bc056786b | ||
|
7698887017 | ||
|
c96df27852 | ||
|
8e51a64cf0 | ||
|
838d4b931c | ||
|
15a96691ff | ||
|
4458b79433 | ||
|
74bb239d25 | ||
|
2894d541ea | ||
|
ade7ae77e0 | ||
|
9538ecb8de | ||
|
498c638be5 | ||
|
aa2c0dc3f9 | ||
|
106b87b24a | ||
|
92ecb316a5 | ||
|
2280cb3a09 | ||
|
800c3b2bac | ||
|
ea5d3f01f6 | ||
|
c63346fa6e | ||
|
75c8e00f83 | ||
|
0986ec7e9b | ||
|
eb46e5a9f1 | ||
|
04f6d0a261 | ||
|
c98580946d | ||
|
3ae816d38d | ||
|
5cb69254cc | ||
|
bc55bb1db1 | ||
|
b7bca40423 | ||
|
4ddde78b86 | ||
|
be967d8f04 | ||
|
d43dbdca09 | ||
|
d3033163a1 | ||
|
c49e04745d | ||
|
d69426da42 | ||
|
df142f7508 | ||
|
c50423993d | ||
|
d039502ff9 | ||
|
cba3f090b1 | ||
|
bae72d9a66 | ||
|
93be7ad5e4 | ||
|
2dc2dca73e | ||
|
371bdf3e28 | ||
|
0924074a34 | ||
|
eed810aac1 | ||
|
6229c5997a | ||
|
96a821e0dd | ||
|
5161a62a23 | ||
|
015b0d681a | ||
|
c283f20dd7 | ||
|
de82e58cf2 | ||
|
d6cab552df | ||
|
66f30e98a3 | ||
|
0a0da76bda | ||
|
c5c973b176 | ||
|
8890777d95 | ||
|
ca69e9e391 | ||
|
d8aa17c9e5 | ||
|
278108dd8e | ||
|
f63f97aa11 | ||
|
aa4cc3ea68 | ||
|
2398dcb8a6 | ||
|
f8b15a6f2e | ||
|
2f0d32ee97 | ||
|
ed3d890b1f | ||
|
39948de22e | ||
|
49dff9cee9 | ||
|
b515248125 | ||
|
9d8045f0f2 | ||
|
30f9665d6e | ||
|
bb6338af36 | ||
|
c58f780e48 | ||
|
fcb08eaa83 | ||
|
1ae362f851 | ||
|
f845cd982e | ||
|
35b34e2d8e | ||
|
114b8b21cd | ||
|
657e2e4711 | ||
|
dc7ec5740b | ||
|
17d22a5661 | ||
|
e019d8bd67 | ||
|
4b236263ea | ||
|
b4a37a44db | ||
|
a152a6e09d | ||
|
aa9d69f2cc | ||
|
6a8848a021 |
@ -1,67 +0,0 @@
|
||||
# Top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = tab
|
||||
charset = utf-8
|
||||
|
||||
[Dockerfile]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[/patches/**]
|
||||
indent_style = unset
|
||||
indent_size = unset
|
||||
|
||||
[*.c]
|
||||
|
||||
[*.css]
|
||||
|
||||
[*.dia]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.h]
|
||||
|
||||
[*.html]
|
||||
|
||||
[*.js]
|
||||
|
||||
[*{.json,.ecrc}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.lua]
|
||||
|
||||
[{Makefile,*.mk}]
|
||||
indent_style = unset
|
||||
|
||||
[*.md]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.pl]
|
||||
|
||||
[*.py]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.rst]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.sh]
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[CMakeLists.txt]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[{docs,contrib/ci}/*site*/**/*.conf]
|
||||
indent_style = space
|
||||
indent_size = 2
|
71
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,71 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report a bug in a recent version of Gluon
|
||||
label: bug
|
||||
---
|
||||
|
||||
<!--
|
||||
|
||||
Please carefully fill out the questionnaire below to help improve the
|
||||
timely triaging of issues. Walk through the questions below and use
|
||||
them as an inspiration for what information you can provide.
|
||||
|
||||
Make use of codeblocks (three backticks before and after) where
|
||||
appropriate (configuration excerpts, log output, etc.). Example:
|
||||
|
||||
```
|
||||
your code goes here
|
||||
```
|
||||
|
||||
You can use the "Preview" tab to check how your issue is going to look
|
||||
before you actually send it in.
|
||||
|
||||
Thank you for taking the time to report a bug with the Gluon project.
|
||||
|
||||
-->
|
||||
|
||||
### Bug report
|
||||
|
||||
**What is the problem?**
|
||||
<!--
|
||||
- What is not working as expected?
|
||||
- How is it misbehaving?
|
||||
- When did the problem first start showing up?
|
||||
- What were you doing when you first noticed the problem?
|
||||
- On which devices (vendor, model and revision) is it misbehaving?
|
||||
- Does the issue appear on multiple devices or targets?
|
||||
-->
|
||||
|
||||
**What is the expected behaviour?**
|
||||
<!--
|
||||
- How do you think it should work instead?
|
||||
- Did it work like that before?
|
||||
-->
|
||||
|
||||
**Gluon Version:**
|
||||
<!--
|
||||
Please provide a usable Git reference before applying custom patches:
|
||||
|
||||
By using a Git reference:
|
||||
$ git describe --always
|
||||
v2018.2-17-g3abadc28
|
||||
|
||||
Or the URL to the relevant Gluon commit
|
||||
https://github.com/freifunk-gluon/gluon/commit/<commit hash here>
|
||||
-->
|
||||
|
||||
**Site Configuration:**
|
||||
<!--
|
||||
Please provide the URL to your site configuration repository and the
|
||||
explicit commit used to build the firmware experiencing the problem.
|
||||
|
||||
Additionally excerpts of problem-related configuration parts are
|
||||
often helpful.
|
||||
-->
|
||||
|
||||
**Custom patches:**
|
||||
<!--
|
||||
Be upfront about any custom patches you have applied to your Gluon build, as they might
|
||||
be part of your problem.
|
||||
-->
|
||||
|
12
.github/dependabot.yml
vendored
@ -1,12 +0,0 @@
|
||||
# Docs: <https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/customizing-dependency-updates>
|
||||
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule: {interval: monthly}
|
||||
|
||||
- package-ecosystem: pip
|
||||
directory: /docs/
|
||||
schedule: {interval: monthly}
|
237
.github/filters.yml
vendored
@ -1,237 +0,0 @@
|
||||
{
|
||||
"ath79-generic": [
|
||||
"targets/ath79-generic",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ath79-nand": [
|
||||
"targets/ath79-nand",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ath79-mikrotik": [
|
||||
"targets/ath79-mikrotik",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/mikrotik.inc"
|
||||
],
|
||||
"bcm27xx-bcm2708": [
|
||||
"targets/bcm27xx-bcm2708",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/bcm27xx.inc"
|
||||
],
|
||||
"bcm27xx-bcm2709": [
|
||||
"targets/bcm27xx-bcm2709",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/bcm27xx.inc"
|
||||
],
|
||||
"ipq40xx-generic": [
|
||||
"targets/ipq40xx-generic",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ipq40xx-mikrotik": [
|
||||
"targets/ipq40xx-mikrotik",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/mikrotik.inc"
|
||||
],
|
||||
"ipq806x-generic": [
|
||||
"targets/ipq806x-generic",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"lantiq-xrx200": [
|
||||
"targets/lantiq-xrx200",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"lantiq-xway": [
|
||||
"targets/lantiq-xway",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"mediatek-mt7622": [
|
||||
"targets/mediatek-mt7622",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"mpc85xx-p1010": [
|
||||
"targets/mpc85xx-p1010",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"mpc85xx-p1020": [
|
||||
"targets/mpc85xx-p1020",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ramips-mt7620": [
|
||||
"targets/ramips-mt7620",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ramips-mt7621": [
|
||||
"targets/ramips-mt7621",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"ramips-mt76x8": [
|
||||
"targets/ramips-mt76x8",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"realtek-rtl838x": [
|
||||
"targets/realtek-rtl838x",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"rockchip-armv8": [
|
||||
"targets/rockchip-armv8",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"sunxi-cortexa7": [
|
||||
"targets/sunxi-cortexa7",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"x86-generic": [
|
||||
"targets/x86-generic",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/x86.inc"
|
||||
],
|
||||
"x86-geode": [
|
||||
"targets/x86-geode",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
],
|
||||
"x86-legacy": [
|
||||
"targets/x86-legacy",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/x86.inc"
|
||||
],
|
||||
"x86-64": [
|
||||
"targets/x86-64",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/x86.inc",
|
||||
"contrib/ci/minimal-site/**",
|
||||
"package/**"
|
||||
],
|
||||
"bcm27xx-bcm2710": [
|
||||
"targets/bcm27xx-bcm2710",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
"targets/bcm27xx.inc"
|
||||
],
|
||||
"mvebu-cortexa9": [
|
||||
"targets/mvebu-cortexa9",
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk"
|
||||
]
|
||||
}
|
59
.github/labeler.yml
vendored
@ -1,59 +0,0 @@
|
||||
---
|
||||
"3. topic: babel":
|
||||
- package/gluon-l3roamd/**
|
||||
- package/gluon-mesh-babel/**
|
||||
- package/gluon-mmfd/**
|
||||
"3. topic: batman-adv":
|
||||
- docs/package/gluon-mesh-batman-adv*
|
||||
- package/gluon-alfred/**
|
||||
- package/gluon-cient-bridge/**
|
||||
- package/gluon-mesh-batman-adv/**
|
||||
- package/libbatadv/**
|
||||
"3. topic: build":
|
||||
- Makefile
|
||||
- scripts/**
|
||||
"3. topic: config-mode":
|
||||
- docs/dev/web/config-mode.rst
|
||||
- docs/package/gluon-config-mode-*
|
||||
- packge/gluon-config-mode-*/**
|
||||
- package/gluon-web*/**
|
||||
"3. topic: continous integration":
|
||||
- .github/workflows/*
|
||||
- contrib/actions/**
|
||||
- contrib/ci/**
|
||||
"3. topic: docs":
|
||||
- docs/**
|
||||
"3. topic: fastd":
|
||||
- docs/features/fastd*
|
||||
- package/gluon-mesh-vpn-fastd/**
|
||||
"3. topic: firewall":
|
||||
- package/**/*-firewall
|
||||
- package/gluon-ebtables-*/**
|
||||
"3. topic: hardware":
|
||||
- package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
|
||||
- package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
|
||||
- targets/*
|
||||
"3. topic: multidomain":
|
||||
- docs/features/multidomain*
|
||||
- docs/multidomain-site-example/**
|
||||
- package/gluon-config-mode-domain-select/**
|
||||
- package/gluon-scheduled-domain-switch/**
|
||||
"3. topic: package":
|
||||
- package/**
|
||||
"3. topic: respondd":
|
||||
- package/**/*respondd*
|
||||
- package/gluon-respondd/**
|
||||
"3. topic: status-page":
|
||||
- package/gluon-status-page/**
|
||||
"3. topic: tests":
|
||||
- tests/**
|
||||
"3. topic: tunneldigger":
|
||||
- package/gluon-mesh-vpn-tunneldigger/**
|
||||
"3. topic: wireguard":
|
||||
- package/gluon-mesh-vpn-wireguard/**
|
||||
"3. topic: wireless":
|
||||
- package/gluon-mesh-wireless-sae/**
|
||||
- package/gluon-private-wifi/**
|
||||
- package/gluon-web-private-wifi/**
|
||||
- package/gluon-web-wifi-config/**
|
||||
- package/gluon-wireless-encryption/**
|
20
.github/workflows/backport.yml
vendored
@ -1,20 +0,0 @@
|
||||
name: Backport
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [closed, labeled]
|
||||
permissions:
|
||||
contents: write # so it can comment
|
||||
pull-requests: write # so it can create pull requests
|
||||
jobs:
|
||||
backport:
|
||||
name: Backport Pull Request
|
||||
if: github.repository_owner == 'freifunk-gluon' && github.event.pull_request.merged == true && (github.event_name != 'labeled' || startsWith('backport', github.event.label.name))
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Create backport PRs
|
||||
uses: korthout/backport-action@v1.2.0
|
||||
with:
|
||||
# Config README: https://github.com/korthout/backport-action#backport-action
|
||||
pull_description: |-
|
||||
Automatic backport to `${target_branch}`, triggered by a label in #${pull_number}.
|
29
.github/workflows/build-docs.yml
vendored
@ -1,29 +0,0 @@
|
||||
name: Build Documentation
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- '.github/workflows/build-docs.yml'
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
paths:
|
||||
- 'docs**/'
|
||||
- '.github/workflows/build-docs.yml'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-documentation:
|
||||
name: docs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Dependencies
|
||||
run: sudo pip3 install sphinx-rtd-theme
|
||||
- name: Build documentation
|
||||
run: make -C docs html
|
||||
- name: Archive build output
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: docs_output
|
||||
path: docs/_build/html
|
61
.github/workflows/build-gluon.yml
vendored
@ -1,61 +0,0 @@
|
||||
name: Build Gluon
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- next*
|
||||
- v20*
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
changed:
|
||||
permissions:
|
||||
contents: read # for dorny/paths-filter to fetch a list of changed files
|
||||
pull-requests: read # for dorny/paths-filter to read pull requests
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
targets: ${{ steps.filter.outputs.changes }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Filter targets based on changed files
|
||||
- uses: dorny/paths-filter@v2
|
||||
id: filter
|
||||
with:
|
||||
filters: .github/filters.yml
|
||||
|
||||
build_firmware:
|
||||
needs: changed
|
||||
if: ${{ needs.changed.outputs.targets != '[]' && needs.changed.outputs.targets != '' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Read back changed targets to create build matrix
|
||||
target: ${{ fromJSON(needs.changed.outputs.targets) }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install Dependencies
|
||||
run: sudo contrib/actions/install-dependencies.sh
|
||||
|
||||
- name: Build
|
||||
run: contrib/actions/run-build.sh ${{ matrix.target }}
|
||||
|
||||
- name: Archive build logs
|
||||
if: ${{ !cancelled() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.target }}_logs
|
||||
path: openwrt/logs
|
||||
|
||||
- name: Archive build output
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.target }}_output
|
||||
path: output
|
||||
|
30
.github/workflows/check-patches.yml
vendored
@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Check patches
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'modules'
|
||||
- 'patches/**'
|
||||
- '.github/workflows/check-patches.yml'
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
paths:
|
||||
- 'modules'
|
||||
- 'patches/**'
|
||||
- '.github/workflows/check-patches.yml'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
check-patches:
|
||||
name: Check patches
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Refresh patches
|
||||
run: make refresh-patches GLUON_SITEDIR="contrib/ci/minimal-site"
|
||||
- name: Show diff
|
||||
run: git status; git diff
|
||||
- name: Patch status
|
||||
run: git diff-files --quiet
|
||||
|
21
.github/workflows/labels.yml
vendored
@ -1,21 +0,0 @@
|
||||
name: "Label PRs"
|
||||
|
||||
on:
|
||||
# only execute base branch actions
|
||||
pull_request_target:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
labels:
|
||||
permissions:
|
||||
contents: read # for actions/labeler to determine modified files
|
||||
pull-requests: write # for actions/labeler to add labels to PRs
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository_owner == 'freifunk-gluon'
|
||||
steps:
|
||||
- uses: actions/labeler@v4
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
sync-labels: true
|
54
.github/workflows/lint.yml
vendored
@ -1,54 +0,0 @@
|
||||
name: Lint
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lua:
|
||||
name: Lua
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Dependencies
|
||||
run: sudo apt-get -y update && sudo apt-get -y install lua-check
|
||||
- name: Install example site
|
||||
run: ln -s ./docs/site-example ./site
|
||||
- name: Lint Lua code
|
||||
run: make lint-lua
|
||||
|
||||
sh:
|
||||
name: Shell
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Dependencies
|
||||
run: sudo apt-get -y update && sudo apt-get -y install shellcheck
|
||||
- name: Install example site
|
||||
run: ln -s ./docs/site-example ./site
|
||||
- name: Lint shell code
|
||||
run: make lint-sh
|
||||
|
||||
editorconfig:
|
||||
name: Editorconfig
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Dependencies
|
||||
run: sudo apt install curl tar
|
||||
- name: Install editorconfig-checker
|
||||
env:
|
||||
VERSION: 2.7.0
|
||||
OS: linux
|
||||
ARCH: amd64
|
||||
run: |
|
||||
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz
|
||||
tar xzf ec-$OS-$ARCH.tar.gz
|
||||
sudo mv ./bin/ec-$OS-$ARCH /usr/bin/editorconfig-checker
|
||||
sudo chmod +x /usr/bin/editorconfig-checker
|
||||
- name: Install example site
|
||||
run: ln -s ./docs/site-example ./site
|
||||
- name: Lint editorconfig
|
||||
run: make lint-editorconfig
|
4
.gitignore
vendored
@ -4,7 +4,3 @@
|
||||
/site
|
||||
/tmp
|
||||
/packages
|
||||
.bash_history
|
||||
.subversion
|
||||
.wget-hsts
|
||||
/.scmversion
|
||||
|
119
.luacheckrc
@ -1,119 +0,0 @@
|
||||
codes = true
|
||||
std = "min"
|
||||
self = false
|
||||
|
||||
read_globals = {
|
||||
"getfenv",
|
||||
"setfenv",
|
||||
"unpack",
|
||||
}
|
||||
|
||||
include_files = {
|
||||
"**/*.lua",
|
||||
"package/**/luasrc/**/*",
|
||||
"targets/*",
|
||||
"package/features",
|
||||
}
|
||||
|
||||
exclude_files = {
|
||||
"**/*.mk",
|
||||
}
|
||||
|
||||
files["package/**/check_site.lua"] = {
|
||||
read_globals = {
|
||||
"alternatives",
|
||||
"extend",
|
||||
"in_domain",
|
||||
"in_site",
|
||||
"value",
|
||||
"need",
|
||||
"need_alphanumeric_key",
|
||||
"need_array",
|
||||
"need_array_elements_exclusive",
|
||||
"need_array_of",
|
||||
"need_boolean",
|
||||
"need_chanlist",
|
||||
"need_domain_name",
|
||||
"need_number",
|
||||
"need_number_range",
|
||||
"need_one_of",
|
||||
"need_string",
|
||||
"need_string_array",
|
||||
"need_string_array_match",
|
||||
"need_string_match",
|
||||
"need_table",
|
||||
"need_value",
|
||||
"obsolete",
|
||||
"table_keys",
|
||||
"this_domain",
|
||||
},
|
||||
}
|
||||
|
||||
files["package/**/luasrc/lib/gluon/config-mode/*"] = {
|
||||
globals = {
|
||||
"MultiListValue",
|
||||
"DynamicList",
|
||||
"Flag",
|
||||
"Form",
|
||||
"i18n",
|
||||
"ListValue",
|
||||
"renderer.render",
|
||||
"renderer.render_string",
|
||||
"Section",
|
||||
"TextValue",
|
||||
"_translate",
|
||||
"translate",
|
||||
"translatef",
|
||||
"Value",
|
||||
"Element",
|
||||
},
|
||||
}
|
||||
|
||||
files["package/**/luasrc/lib/gluon/**/controller/*"] = {
|
||||
read_globals = {
|
||||
"_",
|
||||
"alias",
|
||||
"call",
|
||||
"entry",
|
||||
"model",
|
||||
"node",
|
||||
"template",
|
||||
},
|
||||
}
|
||||
|
||||
files["package/**/luasrc/lib/gluon/ebtables/*"] = {
|
||||
read_globals = {
|
||||
"chain",
|
||||
"rule",
|
||||
},
|
||||
max_line_length = false,
|
||||
}
|
||||
|
||||
files["targets/*"] = {
|
||||
read_globals = {
|
||||
"class",
|
||||
"config",
|
||||
"defaults",
|
||||
"device",
|
||||
"env",
|
||||
"exec",
|
||||
"exec_capture",
|
||||
"exec_capture_raw",
|
||||
"exec_raw",
|
||||
"factory_image",
|
||||
"include",
|
||||
"istrue",
|
||||
"no_opkg",
|
||||
"packages",
|
||||
"sysupgrade_image",
|
||||
"try_config",
|
||||
},
|
||||
}
|
||||
|
||||
files["package/features"] = {
|
||||
read_globals = {
|
||||
"_",
|
||||
"feature",
|
||||
"when",
|
||||
},
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.8"
|
@ -1,30 +0,0 @@
|
||||
workspace:
|
||||
base: /build
|
||||
|
||||
#clone:
|
||||
# git:
|
||||
# image: woodpeckerci/plugin-git
|
||||
# settings:
|
||||
# recursive: true
|
||||
|
||||
pipeline:
|
||||
build-${TARGET}:
|
||||
image: "ubuntu:latest"
|
||||
pull: true
|
||||
environment:
|
||||
- input_version=v2022.1.4
|
||||
- GLUON_SITEDIR=../site
|
||||
- FORCE_UNSAFE_CONFIGURE=1
|
||||
- GLUON_TARGET=${TARGET}
|
||||
- GLUON_DEPRECATED=1
|
||||
commands:
|
||||
- echo ${TARGET}
|
||||
# - git config --global init.defaultBranch main
|
||||
# - sed -i 's/install/install file/' contrib/actions/install-dependencies.sh
|
||||
# - sh contrib/actions/install-dependencies.sh
|
||||
# - sh contrib/actions/run-build.sh ${TARGET}
|
||||
|
||||
matrix:
|
||||
TARGET:
|
||||
- ath79-generic
|
||||
- x86-64
|
@ -23,8 +23,8 @@ using other parts or why the proposed change breaks other parts of the system.
|
||||
They might even refuse the idea altogether - after all, they have to sleep well
|
||||
after merging the changes, too.
|
||||
|
||||
The preferred way to discuss is in the IRC channel ([#gluon] on irc.hackint.org)
|
||||
or on the [mailing list], however, you can also open a new issue on GitHub to
|
||||
The preferred way to discuss in the IRC channel ([#gluon] on irc.hackint.org)
|
||||
or on the [mailing list], however, you can also open a new issue on Github to
|
||||
discuss there. We maintain a [list of rejected features] and we'd like to
|
||||
kindly ask you to review it first. In general, looking for duplicates may save
|
||||
you some time.
|
||||
|
2
LICENSE
@ -1,7 +1,7 @@
|
||||
The code of Project Gluon may be distributed under the following terms, unless
|
||||
noted otherwise in individual files or subtrees.
|
||||
|
||||
Copyright (c) Project Gluon
|
||||
Copyright (c) 2013-2018, Project Gluon
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
257
Makefile
@ -4,112 +4,62 @@ LC_ALL:=C
|
||||
LANG:=C
|
||||
export LC_ALL LANG
|
||||
|
||||
.SHELLFLAGS = -ec
|
||||
|
||||
# initialize (possibly already user set) directory variables
|
||||
GLUON_SITEDIR ?= site
|
||||
GLUON_TMPDIR ?= tmp
|
||||
GLUON_OUTPUTDIR ?= output
|
||||
|
||||
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||
|
||||
# check for spaces & resolve possibly relative paths
|
||||
define mkabspath
|
||||
ifneq (1,$(words [$($(1))]))
|
||||
$$(error $(1) must not contain spaces)
|
||||
endif
|
||||
override $(1) := $(abspath $($(1)))
|
||||
ifneq (1,$(words [$($(1))]))
|
||||
$$(error $(1) must not contain spaces)
|
||||
endif
|
||||
override $(1) := $(abspath $($(1)))
|
||||
endef
|
||||
|
||||
escape = '$(subst ','\'',$(1))'
|
||||
|
||||
GLUON_SITEDIR ?= site
|
||||
$(eval $(call mkabspath,GLUON_SITEDIR))
|
||||
$(eval $(call mkabspath,GLUON_TMPDIR))
|
||||
$(eval $(call mkabspath,GLUON_OUTPUTDIR))
|
||||
$(eval $(call mkabspath,GLUON_IMAGEDIR))
|
||||
$(eval $(call mkabspath,GLUON_PACKAGEDIR))
|
||||
|
||||
ifeq ($(realpath $(GLUON_SITEDIR)/site.mk),)
|
||||
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||
endif
|
||||
export GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR DEVICES
|
||||
|
||||
|
||||
$(GLUON_SITEDIR)/site.mk:
|
||||
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||
|
||||
include $(GLUON_SITEDIR)/site.mk
|
||||
|
||||
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
||||
|
||||
GLUON_DEPRECATED ?= 0
|
||||
|
||||
ifneq ($(GLUON_BRANCH),)
|
||||
$(warning *** Warning: GLUON_BRANCH has been deprecated, please set GLUON_AUTOUPDATER_BRANCH and GLUON_AUTOUPDATER_ENABLED instead.)
|
||||
GLUON_AUTOUPDATER_BRANCH ?= $(GLUON_BRANCH)
|
||||
GLUON_AUTOUPDATER_ENABLED ?= 1
|
||||
endif
|
||||
|
||||
GLUON_AUTOUPDATER_ENABLED ?= 0
|
||||
|
||||
# initialize (possibly already user set) directory variables
|
||||
GLUON_TMPDIR ?= tmp
|
||||
GLUON_OUTPUTDIR ?= output
|
||||
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||
GLUON_DEBUGDIR ?= $(GLUON_OUTPUTDIR)/debug
|
||||
GLUON_TARGETSDIR ?= targets
|
||||
GLUON_PATCHESDIR ?= patches
|
||||
|
||||
$(eval $(call mkabspath,GLUON_TMPDIR))
|
||||
$(eval $(call mkabspath,GLUON_OUTPUTDIR))
|
||||
$(eval $(call mkabspath,GLUON_IMAGEDIR))
|
||||
$(eval $(call mkabspath,GLUON_PACKAGEDIR))
|
||||
$(eval $(call mkabspath,GLUON_TARGETSDIR))
|
||||
$(eval $(call mkabspath,GLUON_PATCHESDIR))
|
||||
|
||||
GLUON_VERSION := $(shell scripts/getversion.sh '.')
|
||||
GLUON_SITE_VERSION := $(shell scripts/getversion.sh '$(GLUON_SITEDIR)')
|
||||
|
||||
GLUON_MULTIDOMAIN ?= 0
|
||||
GLUON_AUTOREMOVE ?= 0
|
||||
GLUON_WLAN_MESH ?= 11s
|
||||
GLUON_DEBUG ?= 0
|
||||
GLUON_MINIFY ?= 1
|
||||
|
||||
# Can be overridden via environment/command line/... to use the Gluon
|
||||
# build system for non-Gluon builds
|
||||
define GLUON_BASE_FEEDS ?=
|
||||
src-link gluon_base ../../package
|
||||
endef
|
||||
|
||||
GLUON_VARS = \
|
||||
GLUON_VERSION GLUON_SITE_VERSION \
|
||||
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_AUTOREMOVE GLUON_DEBUG GLUON_MINIFY GLUON_DEPRECATED \
|
||||
GLUON_DEVICES GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR GLUON_DEBUGDIR \
|
||||
GLUON_SITEDIR GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS \
|
||||
GLUON_TARGET BOARD SUBTARGET
|
||||
|
||||
unexport $(GLUON_VARS)
|
||||
GLUON_ENV = $(foreach var,$(GLUON_VARS),$(var)=$(call escape,$($(var))))
|
||||
export GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_WLAN_MESH GLUON_DEBUG
|
||||
|
||||
show-release:
|
||||
@echo '$(GLUON_RELEASE)'
|
||||
|
||||
|
||||
update: FORCE
|
||||
@
|
||||
export $(GLUON_ENV)
|
||||
scripts/update.sh
|
||||
scripts/patch.sh
|
||||
scripts/feeds.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||
|
||||
update-patches: FORCE
|
||||
@
|
||||
export $(GLUON_ENV)
|
||||
scripts/update.sh
|
||||
scripts/update-patches.sh
|
||||
scripts/patch.sh
|
||||
|
||||
refresh-patches: FORCE
|
||||
@
|
||||
export $(GLUON_ENV)
|
||||
scripts/update.sh
|
||||
scripts/patch.sh
|
||||
scripts/update-patches.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update-patches.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||
|
||||
update-feeds: FORCE
|
||||
@$(GLUON_ENV) scripts/feeds.sh
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||
|
||||
update-modules: FORCE
|
||||
@scripts/update-modules.sh
|
||||
|
||||
update-ci: FORCE
|
||||
@$(GLUON_ENV) scripts/update-ci.sh
|
||||
|
||||
GLUON_TARGETS :=
|
||||
|
||||
@ -120,7 +70,7 @@ GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
||||
endef
|
||||
|
||||
include $(GLUON_TARGETSDIR)/targets.mk
|
||||
include targets/targets.mk
|
||||
|
||||
|
||||
OPENWRTMAKE = $(MAKE) -C openwrt
|
||||
@ -128,109 +78,108 @@ OPENWRTMAKE = $(MAKE) -C openwrt
|
||||
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
||||
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
||||
|
||||
GLUON_CONFIG_VARS := \
|
||||
GLUON_SITEDIR='$(GLUON_SITEDIR)' \
|
||||
GLUON_RELEASE='$(GLUON_RELEASE)' \
|
||||
GLUON_BRANCH='$(GLUON_BRANCH)' \
|
||||
GLUON_LANGS='$(GLUON_LANGS)' \
|
||||
BOARD='$(BOARD)' \
|
||||
SUBTARGET='$(SUBTARGET)'
|
||||
|
||||
define CheckTarget
|
||||
if [ -z '$(BOARD)' ]; then
|
||||
echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'
|
||||
for target in $(GLUON_TARGETS); do
|
||||
echo " * $$target"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
endef
|
||||
OPENWRT_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
|
||||
|
||||
export OPENWRT_TARGET
|
||||
|
||||
|
||||
CheckTarget := [ '$(OPENWRT_TARGET)' ] \
|
||||
|| (echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'; $(foreach target,$(GLUON_TARGETS),echo ' * $(target)';) false)
|
||||
|
||||
CheckExternal := test -d openwrt || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
||||
|
||||
define CheckSite
|
||||
if ! GLUON_SITEDIR='$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' $(LUA) -e 'assert(dofile("scripts/site_config.lua")(os.getenv("GLUON_SITE_CONFIG")))'; then
|
||||
echo 'Your site configuration ($(1).conf) did not pass validation'
|
||||
exit 1
|
||||
fi
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' $(LUA) scripts/site_config.lua \
|
||||
|| (echo 'Your site configuration ($(1).conf) did not pass validation.'; false)
|
||||
|
||||
endef
|
||||
|
||||
list-targets: FORCE
|
||||
@for target in $(GLUON_TARGETS); do
|
||||
echo "$$target"
|
||||
done
|
||||
@$(foreach target,$(GLUON_TARGETS),echo '$(target)';)
|
||||
|
||||
lint: lint-editorconfig lint-lua lint-sh
|
||||
|
||||
lint-editorconfig: FORCE
|
||||
@scripts/lint-editorconfig.sh
|
||||
GLUON_DEFAULT_PACKAGES := hostapd-mini
|
||||
|
||||
lint-lua: FORCE
|
||||
@scripts/lint-lua.sh
|
||||
GLUON_FEATURE_PACKAGES := $(shell scripts/features.sh '$(GLUON_FEATURES)' || echo '__ERROR__')
|
||||
ifneq ($(filter __ERROR__,$(GLUON_FEATURE_PACKAGES)),)
|
||||
$(error Error while evaluating GLUON_FEATURES)
|
||||
endif
|
||||
|
||||
lint-sh: FORCE
|
||||
@scripts/lint-sh.sh
|
||||
|
||||
GLUON_PACKAGES :=
|
||||
define merge_packages
|
||||
$(foreach pkg,$(1),
|
||||
GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
|
||||
)
|
||||
endef
|
||||
$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_FEATURE_PACKAGES) $(GLUON_SITE_PACKAGES)))
|
||||
|
||||
config: FORCE
|
||||
@$(CheckExternal)
|
||||
@$(CheckTarget)
|
||||
|
||||
@$(GLUON_CONFIG_VARS) \
|
||||
scripts/target_config.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES)' \
|
||||
> openwrt/.config
|
||||
+@$(OPENWRTMAKE) defconfig
|
||||
|
||||
@$(GLUON_CONFIG_VARS) \
|
||||
scripts/target_config_check.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES)'
|
||||
|
||||
|
||||
LUA := openwrt/staging_dir/hostpkg/bin/lua
|
||||
|
||||
$(LUA):
|
||||
+@
|
||||
@$(CheckExternal)
|
||||
|
||||
scripts/module_check.sh
|
||||
+@[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
||||
+@$(OPENWRTMAKE) tools/install
|
||||
+@$(OPENWRTMAKE) package/lua/host/compile
|
||||
|
||||
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
||||
$(OPENWRTMAKE) tools/install
|
||||
$(OPENWRTMAKE) package/lua/host/compile
|
||||
prepare-target: config $(LUA) ;
|
||||
|
||||
all: prepare-target
|
||||
$(foreach conf,site $(patsubst $(GLUON_SITEDIR)/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),$(call CheckSite,$(conf)))
|
||||
|
||||
config: $(LUA) FORCE
|
||||
+@
|
||||
|
||||
scripts/module_check.sh
|
||||
$(CheckTarget)
|
||||
$(foreach conf,site $(patsubst $(GLUON_SITEDIR)/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),\
|
||||
$(call CheckSite,$(conf)); \
|
||||
)
|
||||
|
||||
$(OPENWRTMAKE) prepare-tmpinfo
|
||||
$(GLUON_ENV) $(LUA) scripts/target_config.lua > openwrt/.config
|
||||
$(OPENWRTMAKE) defconfig
|
||||
$(GLUON_ENV) $(LUA) scripts/target_config_check.lua
|
||||
|
||||
|
||||
container: FORCE
|
||||
@scripts/container.sh
|
||||
|
||||
|
||||
all: config
|
||||
+@
|
||||
$(GLUON_ENV) $(LUA) scripts/clean_output.lua
|
||||
$(OPENWRTMAKE)
|
||||
$(GLUON_ENV) $(LUA) scripts/copy_output.lua
|
||||
@scripts/clean_output.sh
|
||||
+@$(OPENWRTMAKE)
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/copy_output.sh '$(GLUON_TARGET)'
|
||||
|
||||
clean download: config
|
||||
+@$(OPENWRTMAKE) $@
|
||||
|
||||
dirclean: FORCE
|
||||
+@
|
||||
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
||||
$(OPENWRTMAKE) dirclean
|
||||
rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
||||
+@[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
||||
+@$(OPENWRTMAKE) dirclean
|
||||
@rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
||||
|
||||
manifest: $(LUA) FORCE
|
||||
@
|
||||
[ '$(GLUON_AUTOUPDATER_BRANCH)' ] || (echo 'Please set GLUON_AUTOUPDATER_BRANCH to create a manifest.'; false)
|
||||
echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
||||
scripts/module_check.sh
|
||||
@[ '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
||||
@echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
||||
@$(CheckExternal)
|
||||
|
||||
(
|
||||
export $(GLUON_ENV)
|
||||
echo 'BRANCH=$(GLUON_AUTOUPDATER_BRANCH)'
|
||||
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)"
|
||||
echo 'PRIORITY=$(GLUON_PRIORITY)'
|
||||
echo
|
||||
for target in $(GLUON_TARGETS); do
|
||||
$(LUA) scripts/generate_manifest.lua "$$target"
|
||||
done
|
||||
) > 'tmp/$(GLUON_AUTOUPDATER_BRANCH).manifest.tmp'
|
||||
@( \
|
||||
echo 'BRANCH=$(GLUON_BRANCH)' && \
|
||||
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)" && \
|
||||
echo 'PRIORITY=$(GLUON_PRIORITY)' && \
|
||||
echo && \
|
||||
$(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
||||
GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/generate_manifest.sh '$(GLUON_TARGET)' && \
|
||||
) : \
|
||||
) > 'tmp/$(GLUON_BRANCH).manifest.tmp'
|
||||
|
||||
mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
||||
mv 'tmp/$(GLUON_AUTOUPDATER_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest'
|
||||
@mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
||||
@mv 'tmp/$(GLUON_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest'
|
||||
|
||||
FORCE: ;
|
||||
|
||||
.PHONY: FORCE
|
||||
.NOTPARALLEL:
|
||||
.ONESHELL:
|
||||
|
19
README.md
@ -1,21 +1,12 @@
|
||||
[![Build Gluon](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml/badge.svg?branch=master)](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml)
|
||||
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/license/bsd-2-clause/)
|
||||
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/freifunk-gluon/gluon?sort=semver)](https://github.com/freifunk-gluon/gluon/releases/latest)
|
||||
|
||||
# Gluon
|
||||
|
||||
Gluon is a firmware framework to build preconfigured OpenWrt images for public mesh networks.
|
||||
|
||||
## Getting started
|
||||
|
||||
We have a huge amount of documentation over at https://gluon.readthedocs.io/.
|
||||
Documentation (incomplete at this time, contribute if you can!) may be found at
|
||||
https://gluon.readthedocs.io/.
|
||||
|
||||
If you're new to Gluon and ready to get your feet wet, have a look at the
|
||||
[Getting Started Guide](https://gluon.readthedocs.io/en/latest/user/getting_started.html).
|
||||
|
||||
Gluon's developers frequent an IRC chatroom at [#gluon](ircs://irc.hackint.org/#gluon)
|
||||
on [hackint](https://hackint.org/). There is also a [webchat](https://webirc.hackint.org/#irc://irc.hackint.org/#gluon)
|
||||
that allows for uncomplicated access from within your browser. This channel is also available as a bridged Matrix Room at [#gluon:hackint.org](https://matrix.to/#/#gluon:hackint.org).
|
||||
that allows for access from within your browser.
|
||||
|
||||
## Issues & Feature requests
|
||||
|
||||
@ -30,10 +21,10 @@ the future development of Gluon.
|
||||
|
||||
Please refrain from using the `master` branch for anything else but development purposes!
|
||||
Use the most recent release instead. You can list all releases by running `git tag`
|
||||
and switch to one by running `git checkout v2022.1 && make update`.
|
||||
and switch to one by running `git checkout v2018.2.4 && make update`.
|
||||
|
||||
If you're using the autoupdater, do not autoupdate nodes with anything but releases.
|
||||
If you upgrade using random master commits the nodes *might break* eventually.
|
||||
If you upgrade using random master commits the nodes *will break* eventually.
|
||||
|
||||
## Mailinglist
|
||||
|
||||
|
@ -1,53 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Update target filters using
|
||||
# make update-ci
|
||||
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
|
||||
# these changes trigger rebuilds on all targets
|
||||
common = [
|
||||
"modules",
|
||||
"Makefile",
|
||||
"patches/**",
|
||||
"scripts/**",
|
||||
"targets/generic",
|
||||
"targets/targets.mk",
|
||||
]
|
||||
|
||||
# these changes are only built on x86-64
|
||||
extra = [
|
||||
"contrib/ci/minimal-site/**",
|
||||
"package/**"
|
||||
]
|
||||
|
||||
_filter = dict()
|
||||
|
||||
# INCLUDE_PATTERN matches:
|
||||
# include '...'
|
||||
# include "..."
|
||||
# include("...")
|
||||
# include('...')
|
||||
INCLUDE_PATTERN = "^\\s*include *\\(? *[\"']([^\"']+)[\"']"
|
||||
|
||||
# construct filters map from stdin
|
||||
for target in sys.stdin:
|
||||
target = target.strip()
|
||||
|
||||
_filter[target] = [
|
||||
f"targets/{target}"
|
||||
] + common
|
||||
|
||||
target_file = os.path.join(os.environ['GLUON_TARGETSDIR'], target)
|
||||
with open(target_file) as f:
|
||||
includes = re.findall(INCLUDE_PATTERN, f.read(), re.MULTILINE)
|
||||
_filter[target].extend([f"targets/{i}" for i in includes])
|
||||
|
||||
if target == "x86-64":
|
||||
_filter[target].extend(extra)
|
||||
|
||||
# print filters to stdout in json format, because json is stdlib and yaml compatible.
|
||||
print(json.dumps(_filter, indent=2))
|
@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
apt-get -y update
|
||||
apt-get -y install git build-essential python3 gawk unzip libncurses5-dev zlib1g-dev libssl-dev libelf-dev wget rsync time qemu-utils
|
||||
apt-get -y clean
|
||||
rm -rf /var/lib/apt/lists/*
|
@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
export BROKEN=1
|
||||
export GLUON_AUTOREMOVE=1
|
||||
export GLUON_DEPRECATED=1
|
||||
export GLUON_SITEDIR="contrib/ci/minimal-site"
|
||||
export GLUON_TARGET="$1"
|
||||
export BUILD_LOG=1
|
||||
|
||||
make update
|
||||
make -j2 V=s
|
@ -1 +0,0 @@
|
||||
../../../docs/site-example/i18n/
|
@ -1 +0,0 @@
|
||||
../../../docs/site-example/modules
|
@ -1,180 +0,0 @@
|
||||
-- This is an example site configuration for Gluon v2022.1
|
||||
--
|
||||
-- Take a look at the documentation located at
|
||||
-- https://gluon.readthedocs.io/ for details.
|
||||
--
|
||||
-- This configuration will not work as is. You're required to make
|
||||
-- community specific changes to it!
|
||||
{
|
||||
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
|
||||
-- hostname_prefix = 'freifunk-',
|
||||
|
||||
-- Name of the community.
|
||||
site_name = 'Continuous Integration',
|
||||
|
||||
-- Shorthand of the community.
|
||||
site_code = 'ci',
|
||||
|
||||
-- 32 bytes of random data, encoded in hexadecimal
|
||||
-- This data must be unique among all sites and domains!
|
||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
||||
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
|
||||
|
||||
-- Prefixes used within the mesh.
|
||||
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
||||
-- is not set.
|
||||
prefix4 = '10.0.0.0/20',
|
||||
prefix6 = 'fd::/64',
|
||||
|
||||
-- Timezone of your community.
|
||||
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
|
||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
||||
|
||||
-- List of NTP servers in your community.
|
||||
-- Must be reachable using IPv6!
|
||||
-- ntp_servers = {'1.ntp.services.ffxx'},
|
||||
|
||||
-- Wireless regulatory domain of your community.
|
||||
regdom = 'DE',
|
||||
|
||||
-- Wireless configuration for 2.4 GHz interfaces.
|
||||
wifi24 = {
|
||||
-- Wireless channel.
|
||||
channel = 1,
|
||||
|
||||
-- ESSIDs used for client network.
|
||||
ap = {
|
||||
ssid = 'gluon-ci-ssid',
|
||||
-- disabled = true, -- (optional)
|
||||
|
||||
-- Configuration for a backward compatible OWE network below.
|
||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
||||
},
|
||||
|
||||
mesh = {
|
||||
-- Adjust these values!
|
||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
||||
mcast_rate = 12000,
|
||||
-- disabled = true, -- (optional)
|
||||
},
|
||||
},
|
||||
|
||||
-- Wireless configuration for 5 GHz interfaces.
|
||||
-- This should be equal to the 2.4 GHz variant, except
|
||||
-- for channel.
|
||||
wifi5 = {
|
||||
channel = 44,
|
||||
outdoor_chanlist = '100-140',
|
||||
ap = {
|
||||
ssid = 'gluon-ci-ssid',
|
||||
},
|
||||
mesh = {
|
||||
-- Adjust these values!
|
||||
id = 'ueH3uXjdp',
|
||||
mcast_rate = 12000,
|
||||
},
|
||||
},
|
||||
|
||||
mesh = {
|
||||
vxlan = true,
|
||||
batman_adv = {
|
||||
routing_algo = 'BATMAN_IV',
|
||||
},
|
||||
},
|
||||
|
||||
-- The next node feature allows clients to always reach the node it is
|
||||
-- connected to using a known IP address.
|
||||
next_node = {
|
||||
-- anycast IPs of all nodes
|
||||
-- name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||
ip4 = '10.0.0.1',
|
||||
ip6 = 'fd::1',
|
||||
},
|
||||
|
||||
-- Options specific to routing protocols (optional)
|
||||
-- mesh = {
|
||||
-- Options specific to the batman-adv routing protocol (optional)
|
||||
-- batman_adv = {
|
||||
-- Gateway selection class (optional)
|
||||
-- The default class 20 is based on the link quality (TQ) only,
|
||||
-- class 1 is calculated from both the TQ and the announced bandwidth
|
||||
-- gw_sel_class = 1,
|
||||
-- },
|
||||
-- },
|
||||
|
||||
mesh_vpn = {
|
||||
-- enabled = true,
|
||||
|
||||
fastd = {
|
||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
||||
-- what these options do.
|
||||
|
||||
-- List of crypto-methods to use.
|
||||
methods = {'salsa2012+umac'},
|
||||
mtu = 1312,
|
||||
-- configurable = true,
|
||||
-- syslog_level = 'warn',
|
||||
|
||||
groups = {
|
||||
backbone = {
|
||||
-- Limit number of connected peers to reduce bandwidth.
|
||||
limit = 1,
|
||||
|
||||
-- List of peers.
|
||||
peers = {
|
||||
},
|
||||
|
||||
-- Optional: nested peer groups
|
||||
-- groups = {
|
||||
-- backbone_sub = {
|
||||
-- ...
|
||||
-- },
|
||||
-- ...
|
||||
-- },
|
||||
},
|
||||
-- Optional: additional peer groups, possibly with other limits
|
||||
-- backbone2 = {
|
||||
-- ...
|
||||
-- },
|
||||
},
|
||||
},
|
||||
|
||||
bandwidth_limit = {
|
||||
-- The bandwidth limit can be enabled by default here.
|
||||
enabled = false,
|
||||
|
||||
-- Default upload limit (kbit/s).
|
||||
egress = 200,
|
||||
|
||||
-- Default download limit (kbit/s).
|
||||
ingress = 3000,
|
||||
},
|
||||
},
|
||||
|
||||
autoupdater = {
|
||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
||||
branch = 'stable',
|
||||
|
||||
-- List of branches. You may define multiple branches.
|
||||
branches = {
|
||||
stable = {
|
||||
name = 'stable',
|
||||
|
||||
-- List of mirrors to fetch images from. IPv6 required!
|
||||
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
|
||||
|
||||
-- Number of good signatures required.
|
||||
-- Have multiple maintainers sign your build and only
|
||||
-- accept it when a sufficient number of them have
|
||||
-- signed it.
|
||||
good_signatures = 0,
|
||||
|
||||
-- List of public keys of maintainers.
|
||||
pubkeys = {
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
@ -1 +0,0 @@
|
||||
../../../docs/site-example/site.mk
|
@ -1 +0,0 @@
|
||||
../minimal-site/i18n
|
@ -1 +0,0 @@
|
||||
../minimal-site/modules
|
@ -1,176 +0,0 @@
|
||||
-- This is an example site configuration for Gluon v2022.1
|
||||
--
|
||||
-- Take a look at the documentation located at
|
||||
-- https://gluon.readthedocs.io/ for details.
|
||||
--
|
||||
-- This configuration will not work as is. You're required to make
|
||||
-- community specific changes to it!
|
||||
{
|
||||
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
|
||||
-- hostname_prefix = 'freifunk-',
|
||||
|
||||
-- Name of the community.
|
||||
site_name = 'Continuous Integration',
|
||||
|
||||
-- Shorthand of the community.
|
||||
site_code = 'ci',
|
||||
|
||||
-- 32 bytes of random data, encoded in hexadecimal
|
||||
-- This data must be unique among all sites and domains!
|
||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
||||
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
|
||||
|
||||
-- Prefixes used by clients within the mesh.
|
||||
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
||||
-- is not set.
|
||||
prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
||||
|
||||
-- Prefixes used by nodes within the mesh
|
||||
node_prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
||||
|
||||
-- Timezone of your community.
|
||||
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
|
||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
||||
|
||||
-- List of NTP servers in your community.
|
||||
-- Must be reachable using IPv6!
|
||||
-- ntp_servers = {'1.ntp.services.ffxx'},
|
||||
|
||||
-- Wireless regulatory domain of your community.
|
||||
regdom = 'DE',
|
||||
|
||||
-- Wireless configuration for 2.4 GHz interfaces.
|
||||
wifi24 = {
|
||||
-- Wireless channel.
|
||||
channel = 1,
|
||||
|
||||
-- ESSIDs used for client network.
|
||||
ap = {
|
||||
ssid = 'gluon-ci-ssid',
|
||||
-- disabled = true, -- (optional)
|
||||
|
||||
-- Configuration for a backward compatible OWE network below.
|
||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
||||
},
|
||||
|
||||
mesh = {
|
||||
-- Adjust these values!
|
||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
||||
mcast_rate = 12000,
|
||||
-- disabled = true, -- (optional)
|
||||
},
|
||||
},
|
||||
|
||||
-- Wireless configuration for 5 GHz interfaces.
|
||||
-- This should be equal to the 2.4 GHz variant, except
|
||||
-- for channel.
|
||||
wifi5 = {
|
||||
channel = 44,
|
||||
outdoor_chanlist = '100-140',
|
||||
ap = {
|
||||
ssid = 'gluon-ci-ssid',
|
||||
-- disabled = true, -- (optional)
|
||||
|
||||
-- Configuration for a backward compatible OWE network below.
|
||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
||||
},
|
||||
mesh = {
|
||||
-- Adjust these values!
|
||||
id = 'ueH3uXjdp',
|
||||
mcast_rate = 12000,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
-- The next node feature allows clients to always reach the node it is
|
||||
-- connected to using a known IP address.
|
||||
next_node = {
|
||||
-- anycast IPs of all nodes
|
||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||
ip4 = '10.0.0.1',
|
||||
ip6 = 'fd::1',
|
||||
},
|
||||
|
||||
-- Options specific to routing protocols (optional)
|
||||
mesh = {
|
||||
vxlan = true,
|
||||
olsrd = {},
|
||||
},
|
||||
|
||||
mesh_vpn = {
|
||||
-- enabled = true,
|
||||
|
||||
fastd = {
|
||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
||||
-- what these options do.
|
||||
|
||||
-- List of crypto-methods to use.
|
||||
methods = {'salsa2012+umac'},
|
||||
mtu = 1312,
|
||||
-- configurable = true,
|
||||
-- syslog_level = 'warn',
|
||||
|
||||
groups = {
|
||||
backbone = {
|
||||
-- Limit number of connected peers to reduce bandwidth.
|
||||
limit = 1,
|
||||
|
||||
-- List of peers.
|
||||
peers = {
|
||||
},
|
||||
|
||||
-- Optional: nested peer groups
|
||||
-- groups = {
|
||||
-- backbone_sub = {
|
||||
-- ...
|
||||
-- },
|
||||
-- ...
|
||||
-- },
|
||||
},
|
||||
-- Optional: additional peer groups, possibly with other limits
|
||||
-- backbone2 = {
|
||||
-- ...
|
||||
-- },
|
||||
},
|
||||
},
|
||||
|
||||
bandwidth_limit = {
|
||||
-- The bandwidth limit can be enabled by default here.
|
||||
enabled = false,
|
||||
|
||||
-- Default upload limit (kbit/s).
|
||||
egress = 200,
|
||||
|
||||
-- Default download limit (kbit/s).
|
||||
ingress = 3000,
|
||||
},
|
||||
},
|
||||
|
||||
autoupdater = {
|
||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
||||
branch = 'stable',
|
||||
|
||||
-- List of branches. You may define multiple branches.
|
||||
branches = {
|
||||
stable = {
|
||||
name = 'stable',
|
||||
|
||||
-- List of mirrors to fetch images from. IPv6 required!
|
||||
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
|
||||
|
||||
-- Number of good signatures required.
|
||||
-- Have multiple maintainers sign your build and only
|
||||
-- accept it when a sufficient number of them have
|
||||
-- signed it.
|
||||
good_signatures = 0,
|
||||
|
||||
-- List of public keys of maintainers.
|
||||
pubkeys = {
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
## gluon site.mk makefile example
|
||||
|
||||
## GLUON_FEATURES
|
||||
# Specify Gluon features/packages to enable;
|
||||
# Gluon will automatically enable a set of packages
|
||||
# depending on the combination of features listed
|
||||
|
||||
GLUON_FEATURES := \
|
||||
autoupdater \
|
||||
ebtables-filter-multicast \
|
||||
ebtables-filter-ra-dhcp \
|
||||
ebtables-limit-arp \
|
||||
mesh-olsrd \
|
||||
mesh-vpn-fastd \
|
||||
respondd \
|
||||
status-page \
|
||||
web-advanced \
|
||||
web-wizard
|
||||
|
||||
GLUON_FEATURES_standard := \
|
||||
wireless-encryption-wpa3
|
||||
|
||||
## GLUON_SITE_PACKAGES
|
||||
# Specify additional Gluon/OpenWrt packages to include here;
|
||||
# A minus sign may be prepended to remove a packages from the
|
||||
# selection that would be enabled by default or due to the
|
||||
# chosen feature flags
|
||||
|
||||
GLUON_SITE_PACKAGES := iwinfo
|
||||
|
||||
## DEFAULT_GLUON_RELEASE
|
||||
# version string to use for images
|
||||
# gluon relies on
|
||||
# opkg compare-versions "$1" '>>' "$2"
|
||||
# to decide if a version is newer or not.
|
||||
|
||||
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
||||
|
||||
# Variables set with ?= can be overwritten from the command line
|
||||
|
||||
## GLUON_RELEASE
|
||||
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
||||
# e.g.:
|
||||
# $ make images GLUON_RELEASE=23.42+5
|
||||
# would generate images named like this:
|
||||
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
||||
|
||||
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
||||
|
||||
# Default priority for updates.
|
||||
GLUON_PRIORITY ?= 0
|
||||
|
||||
# Region code required for some images; supported values: us eu
|
||||
GLUON_REGION ?= eu
|
||||
|
||||
# Languages to include
|
||||
GLUON_LANGS ?= en de
|
@ -5,7 +5,8 @@
|
||||
# * Works only if directory names and package names are the same (true for all Gluon packages)
|
||||
# * Doesn't show dependencies through virtual packages correctly
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
|
||||
|
@ -1,36 +0,0 @@
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
file \
|
||||
git \
|
||||
python3 \
|
||||
build-essential \
|
||||
gawk \
|
||||
unzip \
|
||||
libncurses5-dev \
|
||||
zlib1g-dev \
|
||||
libssl-dev \
|
||||
libelf-dev \
|
||||
wget \
|
||||
rsync \
|
||||
time \
|
||||
qemu-utils \
|
||||
ecdsautils \
|
||||
lua-check \
|
||||
shellcheck \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN mkdir /tmp/ec &&\
|
||||
wget -O /tmp/ec/ec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.7.0/ec-linux-amd64.tar.gz &&\
|
||||
tar -xvzf /tmp/ec/ec-linux-amd64.tar.gz &&\
|
||||
mv bin/ec-linux-amd64 /usr/local/bin/editorconfig-checker &&\
|
||||
rm -rf /tmp/ec
|
||||
|
||||
RUN useradd -d /gluon gluon
|
||||
USER gluon
|
||||
|
||||
VOLUME /gluon
|
||||
WORKDIR /gluon
|
@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
||||
|
||||
@ARGV >= 1 || die "Usage: $0 <source directory>\n";
|
||||
@ARGV >= 1 || die "Usage: $0 <source direcory>\n";
|
||||
|
||||
|
||||
my %stringtable;
|
||||
@ -79,7 +79,7 @@ if( open F, "find @ARGV -type f '(' -name '*.html' -o -name '*.lua' ')' |" )
|
||||
{
|
||||
my $stag = quotemeta $1;
|
||||
my $etag = $stag;
|
||||
$etag =~ s/\[/]/g;
|
||||
$etag =~ s/\[/]/g;
|
||||
|
||||
( $res ) = extract_tagged($code, $stag, $etag);
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
# Script to list all upgrade scripts in a clear manner
|
||||
# Limitations:
|
||||
# * Does only show scripts of packages whose `files'/`luasrc' directories represent the whole image filesystem (which are all Gluon packages)
|
||||
@ -28,7 +27,7 @@ fi
|
||||
|
||||
pushd "$(dirname "$0")/.." >/dev/null
|
||||
|
||||
find ./package packages -name Makefile | grep -v '^packages/packages/' | while read -r makefile; do
|
||||
find ./package packages -name Makefile | while read makefile; do
|
||||
dir="$(dirname "$makefile")"
|
||||
|
||||
pushd "$dir" >/dev/null
|
||||
@ -37,12 +36,13 @@ find ./package packages -name Makefile | grep -v '^packages/packages/' | while r
|
||||
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
||||
package="$(basename "$dir")"
|
||||
|
||||
for file in "${SUFFIX1}"/* "${SUFFIX2}"/*; do
|
||||
basename="$(basename "${file}")"
|
||||
suffix="$(dirname "${file}")"
|
||||
printf "%s\t%s\n" "${basename}" "${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${suffix}/${GREEN}${basename}${RESET}"
|
||||
for file in "${SUFFIX1}"/*; do
|
||||
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX1})"
|
||||
done
|
||||
for file in "${SUFFIX2}"/*; do
|
||||
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX2})"
|
||||
done
|
||||
popd >/dev/null
|
||||
done | sort | cut -f2-
|
||||
done | sort
|
||||
|
||||
popd >/dev/null
|
||||
|
@ -1,149 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
topdir="$(realpath "$(dirname "${0}")/../openwrt")"
|
||||
|
||||
# defaults to qemu run script
|
||||
ssh_host=localhost
|
||||
build_only=0
|
||||
preserve_config=1
|
||||
|
||||
print_help() {
|
||||
echo "$0 [OPTIONS] PACAKGE_DIR [PACKAGE_DIR] ..."
|
||||
echo ""
|
||||
echo " -h print this help"
|
||||
echo " -r HOST use a remote machine as target machine. By default if this"
|
||||
echo " option is not given, push_pkg.sh will use a locally"
|
||||
echo " running qemu instance started by run_qemu.sh."
|
||||
echo " -p PORT use PORT as ssh port (default is 22)"
|
||||
echo " -b build only, do not push"
|
||||
echo " -P do not preserve /etc/config. By default, if a package"
|
||||
echo " defines a config file in /etc/config, this config file"
|
||||
echo " will be preserved. If you specify this flag, the package"
|
||||
echo " default will be installed instead."
|
||||
echo ""
|
||||
echo ' To change gluon variables, run e.g. "make config GLUON_MINIFY=0"'
|
||||
echo ' because then the gluon logic will be triggered, and openwrt/.config'
|
||||
echo ' will be regenerated. The variables from openwrt/.config are already'
|
||||
echo ' automatically used for this script.'
|
||||
echo
|
||||
}
|
||||
|
||||
while getopts "p:r:hbP" opt
|
||||
do
|
||||
case $opt in
|
||||
P) preserve_config=0;;
|
||||
p) ssh_port="${OPTARG}";;
|
||||
r) ssh_host="${OPTARG}"; [ -z "$ssh_port" ] && ssh_port=22;;
|
||||
b) build_only=1;;
|
||||
h) print_help; exit 0;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
shift $(( OPTIND - 1 ))
|
||||
|
||||
[ -z "$ssh_port" ] && ssh_port=2223
|
||||
|
||||
if [ "$build_only" -eq 0 ]; then
|
||||
remote_info=$(ssh -p "${ssh_port}" "root@${ssh_host}" '
|
||||
source /etc/os-release
|
||||
printf "%s\\t%s\\n" "$OPENWRT_BOARD" "$OPENWRT_ARCH"
|
||||
')
|
||||
REMOTE_OPENWRT_BOARD="$(echo "$remote_info" | cut -f 1)"
|
||||
REMOTE_OPENWRT_ARCH="$(echo "$remote_info" | cut -f 2)"
|
||||
|
||||
# check target
|
||||
if ! grep -q "CONFIG_TARGET_ARCH_PACKAGES=\"${REMOTE_OPENWRT_ARCH}\"" "${topdir}/.config"; then
|
||||
echo "Configured OpenWrt Target is not matching with the target machine!" 1>&2
|
||||
echo
|
||||
printf "%s" " Configured architecture: " 1>&2
|
||||
grep "CONFIG_TARGET_ARCH_PACKAGES" "${topdir}/.config" 1>&2
|
||||
echo "Target machine architecture: ${REMOTE_OPENWRT_ARCH}" 1>&2
|
||||
echo 1>&2
|
||||
echo "To switch the local with the run with the corresponding GLUON_TARGET:" 1>&2
|
||||
echo " make GLUON_TARGET=... config" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo ERROR: Please specify a PACKAGE_DIR. For example:
|
||||
echo
|
||||
echo " \$ $0 package/gluon-core"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
|
||||
pkgdir="$1"; shift
|
||||
echo "Package: ${pkgdir}"
|
||||
|
||||
if ! [ -f "${pkgdir}/Makefile" ]; then
|
||||
echo "ERROR: ${pkgdir} does not contain a Makefile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! grep -q BuildPackage "${pkgdir}/Makefile"; then
|
||||
echo "ERROR: ${pkgdir}/Makefile does not contain a BuildPackage command"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
opkg_packages="$(make TOPDIR="${topdir}" -C "${pkgdir}" DUMP=1 | awk '/^Package: / { print $2 }')"
|
||||
|
||||
search_package() {
|
||||
find "$2" -name "$1_*.ipk" -printf '%f\n'
|
||||
}
|
||||
|
||||
make TOPDIR="${topdir}" -C "${pkgdir}" clean
|
||||
make TOPDIR="${topdir}" -C "${pkgdir}" compile
|
||||
|
||||
if [ "$build_only" -eq 1 ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# IPv6 addresses need brackets around the ${ssh_host} for scp!
|
||||
if echo "${ssh_host}" | grep -q :; then
|
||||
BL=[
|
||||
BR=]
|
||||
fi
|
||||
|
||||
for pkg in ${opkg_packages}; do
|
||||
|
||||
for feed in "${topdir}/bin/packages/${REMOTE_OPENWRT_ARCH}/"*/ "${topdir}/bin/targets/${REMOTE_OPENWRT_BOARD}/packages/"; do
|
||||
printf "%s" "searching ${pkg} in ${feed}: "
|
||||
filename=$(search_package "${pkg}" "${feed}")
|
||||
if [ -n "${filename}" ]; then
|
||||
echo found!
|
||||
break
|
||||
else
|
||||
echo not found
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$preserve_config" -eq 0 ]; then
|
||||
opkg_flags=" --force-maintainer"
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2029
|
||||
if [ -n "$filename" ]; then
|
||||
scp -O -P "${ssh_port}" "$feed/$filename" "root@${BL}${ssh_host}${BR}:/tmp/${filename}"
|
||||
ssh -p "${ssh_port}" "root@${ssh_host}" "
|
||||
set -e
|
||||
echo Running opkg:
|
||||
opkg install --force-reinstall ${opkg_flags} '/tmp/${filename}'
|
||||
rm '/tmp/${filename}'
|
||||
gluon-reconfigure
|
||||
"
|
||||
else
|
||||
# Some packages (e.g. procd-seccomp) seem to contain BuildPackage commands
|
||||
# which do not generate *.ipk files. Till this point, I am not aware why
|
||||
# this is happening. However, dropping a warning if the corresponding
|
||||
# *.ipk is not found (maybe due to other reasons as well), seems to
|
||||
# be more reasonable than aborting. Before this commit, the command
|
||||
# has failed.
|
||||
echo "Warning: ${pkg}*.ipk not found! Ignoring." 1>&2
|
||||
fi
|
||||
|
||||
done
|
||||
done
|
@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Note: You can exit the qemu instance by first pressing "CTRL + a" then "c".
|
||||
# Then you enter the command mode of qemu and can exit by typing "quit".
|
||||
|
||||
qemu-system-x86_64 \
|
||||
-d 'cpu_reset' \
|
||||
-enable-kvm \
|
||||
-gdb tcp::1234 \
|
||||
-nographic \
|
||||
-netdev user,id=wan,hostfwd=tcp::2223-10.0.2.15:22 \
|
||||
-device virtio-net-pci,netdev=wan,addr=0x06,id=nic1 \
|
||||
-netdev user,id=lan,hostfwd=tcp::6080-192.168.1.1:80,hostfwd=tcp::2222-192.168.1.1:22,net=192.168.1.100/24 \
|
||||
-device virtio-net-pci,netdev=lan,addr=0x05,id=nic2 \
|
||||
"$@"
|
@ -2,7 +2,7 @@
|
||||
|
||||
set -e
|
||||
|
||||
if [ $# -ne 2 ] || [ "-h" = "$1" ] || [ "--help" = "$1" ] || [ ! -r "$1" ] || [ ! -r "$2" ]; then
|
||||
if [ $# -ne 2 -o "-h" = "$1" -o "--help" = "$1" -o ! -r "$1" -o ! -r "$2" ]; then
|
||||
cat <<EOHELP
|
||||
Usage: $0 <secret> <manifest>
|
||||
|
||||
@ -15,7 +15,7 @@ The script may be performed multiple times to the same document
|
||||
to indicate an approval by multiple developers.
|
||||
|
||||
See also
|
||||
* ecdsautils on https://github.com/freifunk-gluon/ecdsautils
|
||||
* ecdsautils on https://github.com/tcatm/ecdsautils
|
||||
|
||||
EOHELP
|
||||
exit 1
|
||||
@ -29,22 +29,11 @@ lower="$(mktemp)"
|
||||
|
||||
trap 'rm -f "$upper" "$lower"' EXIT
|
||||
|
||||
awk 'BEGIN {
|
||||
sep = 0
|
||||
}
|
||||
|
||||
/^---$/ {
|
||||
sep = 1;
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if(sep == 0) {
|
||||
print > "'"$upper"'"
|
||||
} else {
|
||||
print > "'"$lower"'"
|
||||
}
|
||||
}' "$manifest"
|
||||
awk 'BEGIN { sep=0 }
|
||||
/^---$/ { sep=1; next }
|
||||
{ if(sep==0) print > "'"$upper"'";
|
||||
else print > "'"$lower"'"}' \
|
||||
"$manifest"
|
||||
|
||||
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -eq 0 ] || [ "-h" = "$1" ] || [ "-help" = "$1" ] || [ "--help" = "$1" ]; then
|
||||
cat <<EOHELP
|
||||
if [ $# -eq 0 -o "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
|
||||
cat <<EOHELP
|
||||
Usage: $0 <public> <signed manifest>
|
||||
|
||||
sigtest.sh checks if a manifest is signed by the public key <public>. There is
|
||||
no output, success or failure is indicated via the return code.
|
||||
|
||||
See also:
|
||||
* ecdsautils in https://github.com/freifunk-gluon/ecdsautils
|
||||
* https://gluon.readthedocs.io/en/latest/features/autoupdater.html
|
||||
* ecdsautils in https://github.com/tcatm/ecdsautils
|
||||
* http://gluon.readthedocs.org/en/latest/features/autoupdater.html
|
||||
|
||||
EOHELP
|
||||
exit 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
public="$1"
|
||||
@ -21,29 +21,18 @@ upper="$(mktemp)"
|
||||
lower="$(mktemp)"
|
||||
ret=1
|
||||
|
||||
awk 'BEGIN {
|
||||
sep = 0
|
||||
}
|
||||
awk "BEGIN { sep=0 }
|
||||
/^---\$/ { sep=1; next }
|
||||
{ if(sep==0) print > \"$upper\";
|
||||
else print > \"$lower\"}" \
|
||||
"$manifest"
|
||||
|
||||
/^---$/ {
|
||||
sep = 1;
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if(sep == 0) {
|
||||
print > "'"$upper"'"
|
||||
} else {
|
||||
print > "'"$lower"'"
|
||||
}
|
||||
}' "$manifest"
|
||||
|
||||
while read -r line
|
||||
while read line
|
||||
do
|
||||
if ecdsaverify -s "$line" -p "$public" "$upper"; then
|
||||
ret=0
|
||||
break
|
||||
fi
|
||||
if ecdsaverify -s "$line" -p "$public" "$upper"; then
|
||||
ret=0
|
||||
break
|
||||
fi
|
||||
done < "$lower"
|
||||
|
||||
rm -f "$upper" "$lower"
|
||||
|
178
docs/Makefile
@ -1,19 +1,177 @@
|
||||
# Minimal makefile for Sphinx documentation
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS = -W --keep-going
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
SOURCEDIR = .
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
# User-friendly check for sphinx-build
|
||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||
endif
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
.PHONY: help Makefile
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Gluon.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Gluon.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/Gluon"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Gluon"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
latexpdfja:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
xml:
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
pseudoxml:
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||
|
10
docs/_static/css/custom.css
vendored
@ -1,10 +0,0 @@
|
||||
/*
|
||||
This fixes the vertical position of list markers when the first
|
||||
element in the <li> is a <pre> block
|
||||
|
||||
Scrolling inside the <pre> block is still working as expected
|
||||
*/
|
||||
.rst-content pre.literal-block,
|
||||
.rst-content div[class^='highlight'] pre {
|
||||
overflow: visible;
|
||||
}
|
271
docs/conf.py
@ -1,188 +1,257 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
# Gluon documentation build configuration file, created by
|
||||
# sphinx-quickstart on Wed Jan 29 00:45:53 2014.
|
||||
#
|
||||
# This file does only contain a selection of the most common options. For a
|
||||
# full list see the documentation:
|
||||
# http://www.sphinx-doc.org/en/master/config
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
# -- Path setup --------------------------------------------------------------
|
||||
import sys
|
||||
import os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
# import os
|
||||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'Gluon'
|
||||
copyright = 'Project Gluon'
|
||||
author = 'Project Gluon'
|
||||
|
||||
# The short X.Y version
|
||||
version = '2022.1'
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = version
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.mathjax',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = 'Gluon'
|
||||
copyright = '2015-2019, Project Gluon'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
version = release = '2018.2.3'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = 'en'
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This pattern also affects html_static_path and html_extra_path.
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = None
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# Don't highlight code blocks unless requested explicitly
|
||||
highlight_language = 'none'
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# Ignore links to the config mode, as well as anchors on on hackint, which are
|
||||
# used to mark channel names and do not exist. Regular links are not effected.
|
||||
linkcheck_ignore = [
|
||||
'http://192.168.1.1',
|
||||
'https://webirc.hackint.org/#'
|
||||
]
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
#keep_warnings = False
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
#html_theme = 'default'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
#
|
||||
html_static_path = ['_static']
|
||||
#html_static_path = ['_static']
|
||||
|
||||
# Custom sidebar templates, must be a dictionary that maps document names
|
||||
# to template names.
|
||||
#
|
||||
# The default sidebars (for documents that don't match any pattern) are
|
||||
# defined by theme itself. Builtin themes are using these templates by
|
||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||
# 'searchbox.html']``.
|
||||
#
|
||||
# html_sidebars = {}
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#html_extra_path = []
|
||||
|
||||
# These paths are either relative to html_static_path
|
||||
# or fully qualified paths (eg. https://...)
|
||||
html_css_files = ['css/custom.css']
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# -- Options for HTMLHelp output ---------------------------------------------
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'Gluondoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ------------------------------------------------
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'Gluon.tex', 'Gluon Documentation',
|
||||
'Project Gluon', 'manual'),
|
||||
('index', 'Gluon.tex', 'Gluon Documentation',
|
||||
'Project Gluon', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# -- Options for manual page output ------------------------------------------
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'gluon', 'Gluon Documentation',
|
||||
[author], 1)
|
||||
('index', 'gluon', 'Gluon Documentation',
|
||||
['Project Gluon'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
# -- Options for Texinfo output ----------------------------------------------
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'Gluon', 'Gluon Documentation',
|
||||
author, 'Gluon', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
('index', 'Gluon', 'Gluon Documentation',
|
||||
'Project Gluon', 'Gluon', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# -- Options for Epub output -------------------------------------------------
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# Bibliographic Dublin Core info.
|
||||
epub_title = project
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# The unique identifier of the text. This can be a ISBN number
|
||||
# or the project homepage.
|
||||
#
|
||||
# epub_identifier = ''
|
||||
|
||||
# A unique identification for the text.
|
||||
#
|
||||
# epub_uid = ''
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files = ['search.html']
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
|
@ -23,7 +23,6 @@ webbrowser. You're welcome to join us!
|
||||
.. _hackint: https://hackint.org/
|
||||
.. _webchat: https://webirc.hackint.org/#irc://irc.hackint.org/#gluon
|
||||
|
||||
.. _working-with-repositories:
|
||||
|
||||
Working with repositories
|
||||
-------------------------
|
||||
@ -33,7 +32,7 @@ rerun
|
||||
|
||||
::
|
||||
|
||||
make update
|
||||
make update
|
||||
|
||||
`make update` also applies the patches that can be found in the directories found in
|
||||
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
|
||||
@ -45,7 +44,7 @@ using
|
||||
|
||||
::
|
||||
|
||||
make update-patches
|
||||
make update-patches
|
||||
|
||||
If applying a patch fails because you have changed the base commit, the repository will be reset to the old `patched` branch
|
||||
and you can try rebasing it onto the new `base` branch yourself and after that call `make update-patches` to fix the problem.
|
||||
@ -53,33 +52,18 @@ and you can try rebasing it onto the new `base` branch yourself and after that c
|
||||
Always call `make update-patches` after making changes to a module repository as `make update` will overwrite your
|
||||
commits, making `git reflog` the only way to recover them!
|
||||
|
||||
::
|
||||
|
||||
make refresh-patches
|
||||
|
||||
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt build system.
|
||||
|
||||
This command speeds up the maintenance of updating OpenWrt and feeds.
|
||||
|
||||
Development Guidelines
|
||||
----------------------
|
||||
Lua should be used instead of sh whenever sensible. The following criteria
|
||||
lua should be used instead of sh whenever sensible. The following criteria
|
||||
should be considered:
|
||||
|
||||
- Is the script doing more than just executing external commands? if so, use Lua
|
||||
- Is the script parsing/editing json-data? If so, use Lua for speed
|
||||
- Is the script doing more than just executing external commands? if so, use lua
|
||||
- Is the script parsing/editing json-data? If so, use lua for speed
|
||||
- When using sh, use jsonfilter instead of json_* functions for speed
|
||||
|
||||
Code formatting may sound like a topic for the pedantic, however it helps if
|
||||
the code in the project is formatted in the same way. The following basic rules
|
||||
the code in the project is formatted in the same way. The following rules
|
||||
apply:
|
||||
|
||||
- use tabs instead of spaces
|
||||
- trailing whitespaces must be eliminated
|
||||
- files need to end with a final newline
|
||||
- newlines need to have Unix line endings (lf)
|
||||
|
||||
To that end we provide a ``.editorconfig`` configuration, which is supported by most
|
||||
of the editors out there.
|
||||
|
||||
If you add Lua scripts to gluon, check formatting with ``luacheck``.
|
||||
|
@ -1,104 +0,0 @@
|
||||
Build system
|
||||
============
|
||||
|
||||
This page explains internals of the Gluon build system. It is currently very
|
||||
incomplete; please contribute if you can!
|
||||
|
||||
Feed management
|
||||
---------------
|
||||
|
||||
Rather that relying on the *feed.conf* mechanism of OpenWrt directly, Gluon
|
||||
manages its feeds (*"modules"*) using a collection of scripts. This solution was
|
||||
selected for multiple reasons:
|
||||
|
||||
- Feeds lists from Gluon base and the site repository are combined
|
||||
- Patchsets are applied to downloaded feed repositories automatically
|
||||
|
||||
The following variables specifically affect the feed management:
|
||||
|
||||
GLUON_FEEDS
|
||||
List of base feeds; defined in file *modules* in Gluon base
|
||||
|
||||
GLUON_SITE_FEED
|
||||
List of site feeds; defined in file *modules* in site config
|
||||
|
||||
\*_REPO, \*_BRANCH, \*_COMMIT
|
||||
Git repository URL, branch and
|
||||
commit ID of the feeds to use. The branch name may be omitted; the default
|
||||
branch will be used in this case.
|
||||
|
||||
GLUON_BASE_FEEDS
|
||||
Additional feed definitions to be added to *feeds.conf*
|
||||
verbatim. By default, this contains a reference to the Gluon base packages;
|
||||
when using the Gluon build system to build a non-Gluon system, the variable
|
||||
can be set to the empty string.
|
||||
|
||||
Helper scripts
|
||||
--------------
|
||||
|
||||
Several tasks of the build process have been separated from the Makefile into
|
||||
external scripts, which are stored in the *scripts* directory. This was done to
|
||||
ease maintenance of these scripts and the Makefile, by avoiding a lot of escaping.
|
||||
These scripts are either bash or Lua scripts that run on the build system.
|
||||
|
||||
default_feeds.sh
|
||||
Defines the constant ``DEFAULT_FEEDS`` with the names of all feeds listed in
|
||||
*openwrt/feeds.conf.default*. This script is only used as an include by other
|
||||
scripts.
|
||||
|
||||
feeds.sh
|
||||
Creates the *openwrt/feeds.conf* file from ``FEEDS`` and ``DEFAULT_FEEDS``. The
|
||||
feeds from ``FEEDS`` are linked to the matching subfolder of *packages/* and not
|
||||
explicitly defined feeds of ``DEFAULT_FEEDS`` are setup as dummy (src-dummy).
|
||||
This *openwrt/feeds.conf* is used to reinstall all packages of all feeds with
|
||||
the *openwrt/scripts/feeds* tool.
|
||||
|
||||
modules.sh
|
||||
Defines the constants ``GLUON_MODULES`` and ``FEEDS`` by reading the *modules*
|
||||
files of the Gluon repository root and the site configuration. The returned
|
||||
variables look like:
|
||||
|
||||
- ``FEEDS``: "*feedA feedB ...*"
|
||||
- ``GLUON_MODULES``: "*openwrt packages/feedA packages/feedB ...*"
|
||||
|
||||
This script is only used as an include by other scripts.
|
||||
|
||||
patch.sh
|
||||
(Re-)applies the patches from the *patches* directory to all ``GLUON_MODULES``
|
||||
and checks out the files to the filesystem.
|
||||
This is done for each repo by:
|
||||
|
||||
- creating a temporary clone of the repo to patch
|
||||
- only branch *base* is used
|
||||
- applying all patches via *git am* on top of this temporary *base* branch
|
||||
- this branch is named *patched*
|
||||
- copying the temporary clone to the *openwrt* (for OpenWrt Base) or
|
||||
*packages* (for feeds) folder
|
||||
- *git fetch* is used with the temporary clone as source
|
||||
- *git checkout* is called to update the filesystem
|
||||
- updating all git submodules
|
||||
|
||||
This solution with a temporary clone ensures that the timestamps of checked
|
||||
out files are not changed by any intermediate patch steps, but only when
|
||||
updating the checkout with the final result. This avoids triggering unnecessary
|
||||
rebuilds.
|
||||
|
||||
update.sh
|
||||
Sets up a working clone of the ``GLUON_MODULES`` (external repos) from the external
|
||||
source and installs it into *packages/* directory. It simply tries to set the *base*
|
||||
branch of the cloned repo to the correct commit. If this fails it fetches the
|
||||
upstream branch and tries again to set the local *base* branch.
|
||||
|
||||
getversion.sh
|
||||
Used to determine the version numbers of the repositories of Gluon and the
|
||||
site configuration, to be included in the built firmware images as
|
||||
*/lib/gluon/gluon-version* and */lib/gluon/site-version*.
|
||||
|
||||
By default, this uses ``git describe`` to generate a version number based
|
||||
on the last git tag. This can be overridden by putting a file called
|
||||
*.scmversion* into the root of the respective repositories.
|
||||
|
||||
A command like ``rm -f .scmversion; echo "$(./scripts/getversion.sh .)" > .scmversion``
|
||||
can be used before applying local patches to ensure that the reported
|
||||
version numbers refer to an upstream commit ID rather than an arbitrary
|
||||
local one after ``git am``.
|
@ -1,51 +0,0 @@
|
||||
Debugging
|
||||
=========
|
||||
|
||||
|
||||
.. _dev-debugging-kernel-oops:
|
||||
|
||||
Kernel Oops
|
||||
-----------
|
||||
|
||||
Sometimes a running Linux kernel detects an error during runtime that can't
|
||||
be corrected.
|
||||
This usually generates a stack trace that points to the location in the code
|
||||
that caused the oops.
|
||||
|
||||
Linux kernels in Gluon (and OpenWrt) are stripped.
|
||||
That means they do not contain any debug symbols.
|
||||
On one hand this leads to a smaller binary and faster loading times on the
|
||||
target.
|
||||
On the other hand this means that in a case of a stack trace the unwinder
|
||||
can only print memory locations and no further debugging information.
|
||||
|
||||
Gluon stores a compressed kernel with debug symbols for every target
|
||||
in the directory `output/debug/`.
|
||||
These kernels should be kept along with the images as long as the images
|
||||
are in use.
|
||||
This allows the developer to analyse a stack trace later.
|
||||
|
||||
Decoding Stacktraces
|
||||
....................
|
||||
|
||||
The tooling is contained in the kernel source tree in the file
|
||||
`decode_stacktrace.sh <https://github.com/torvalds/linux/blob/master/scripts/decode_stacktrace.sh>`__.
|
||||
This file and the needed source tree are available in the directory: ::
|
||||
|
||||
openwrt/build_dir/target-<architecture>/linux-<architecture>/linux-<version>/
|
||||
|
||||
.. note::
|
||||
Make sure to use a kernel tree that matches the version and patches
|
||||
that was used to build the kernel.
|
||||
If in doubt just re-build the images for the target.
|
||||
|
||||
Some more information on how to use this tool can be found at
|
||||
`LWN <https://lwn.net/Articles/592724/>`__.
|
||||
|
||||
Obtaining Stacktraces
|
||||
.....................
|
||||
|
||||
On many targets stack traces can be read from the following
|
||||
location after reboot: ::
|
||||
|
||||
/sys/kernel/debug/crashlog
|
@ -1,238 +1,144 @@
|
||||
Adding hardware support
|
||||
=======================
|
||||
Adding support for new hardware
|
||||
===============================
|
||||
This page will give a short overview on how to add support
|
||||
for new hardware to Gluon.
|
||||
|
||||
Hardware requirements
|
||||
---------------------
|
||||
Having an ath9k, ath10k or mt76 based WLAN adapter is highly recommended,
|
||||
Having an ath9k (or ath10k) based WLAN adapter is highly recommended,
|
||||
although other chipsets may also work. VAP (multiple SSID) support
|
||||
with simultaneous AP + Mesh Point (802.11s) operation is required.
|
||||
is a requirement.
|
||||
|
||||
Device checklist
|
||||
----------------
|
||||
The description of pull requests adding device support must include the
|
||||
`device integration checklist
|
||||
<https://github.com/freifunk-gluon/gluon/wiki/Device-Integration-checklist>`_.
|
||||
The checklist ensures that core functionality of Gluon is well supported on the
|
||||
device.
|
||||
|
||||
.. _device-class-definition:
|
||||
.. _hardware-adding-profiles:
|
||||
|
||||
Device classes
|
||||
--------------
|
||||
All supported hardware is categorized into "device classes". This allows to
|
||||
adjust the feature set of Gluon to the different hardware's capabilities via
|
||||
``site.mk`` without having to list individual devices.
|
||||
Adding profiles
|
||||
---------------
|
||||
The vast majority of devices with ath9k WLAN is based on the ar71xx target of OpenWrt.
|
||||
If the hardware you want to add support for is ar71xx, adding a new profile
|
||||
is sufficient.
|
||||
|
||||
There are currently two devices classes defined: "standard" and "tiny". The
|
||||
"tiny" class contains all devices that do not meet the following requirements:
|
||||
Profiles are defined in ``targets/*`` in a shell-based DSL (so common shell
|
||||
command syntax like ``if`` can be used).
|
||||
|
||||
- At least 7 MiB of usable firmware space
|
||||
- At least 64 MiB of RAM (128MiB for devices with ath10k radio)
|
||||
The ``device`` command is used to define an image build for a device. It takes
|
||||
two or three parameters.
|
||||
|
||||
Target configuration
|
||||
--------------------
|
||||
Gluon's hardware support is based on OpenWrt's. For each supported target,
|
||||
a configuration file exists at ``targets/<target>-<subtarget>`` (or just
|
||||
``target/<target>`` for targets without subtargets) that contains all
|
||||
Gluon-specific settings for the target. The generic configuration
|
||||
``targets/generic`` contains settings that affect all targets.
|
||||
The first parameter defines the Gluon profile name, which is used to refer to the
|
||||
device and is part of the generated image name. The profile name must be same as
|
||||
the output of the following command (on the target device), so the autoupdater
|
||||
can work::
|
||||
|
||||
All targets must be listed in ``target/targets.mk``.
|
||||
lua -e 'print(require("platform_info").get_image_name())'
|
||||
|
||||
The target configuration language is based on Lua, so Lua's syntax for variables
|
||||
and control structures can be used.
|
||||
While porting Gluon to a new device, it might happen that the profile name is
|
||||
unknown. Best practise is to generate an image first by using an arbitrary value
|
||||
and then executing the lua command on the device and use its output from then on.
|
||||
|
||||
Device definitions
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
To configure a device to be built for Gluon, the ``device`` function is used.
|
||||
In the simplest case, only two arguments are passed, for example:
|
||||
The second parameter defines the name of the image files generated by OpenWrt. Usually,
|
||||
it is also the OpenWrt profile name; for devices that still use the old image build
|
||||
code, a third parameter with the OpenWrt profile name can be passed. The profile names
|
||||
can be found in the image Makefiles in ``openwrt/target/linux/<target>/image/Makefile``.
|
||||
|
||||
.. code-block:: lua
|
||||
Examples::
|
||||
|
||||
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
|
||||
|
||||
The first argument is the device name in Gluon, which is part of the output
|
||||
image filename, and must correspond to the model string looked up by the
|
||||
autoupdater. The second argument is the corresponding device profile name in
|
||||
OpenWrt, as found in ``openwrt/target/linux/<target>/image/*``.
|
||||
|
||||
A table of additional settings can be passed as a third argument:
|
||||
|
||||
.. code-block:: lua
|
||||
|
||||
device('ubiquiti-edgerouter-x', 'ubnt_edgerouter-x', {
|
||||
factory = false,
|
||||
packages = {'-hostapd-mini'},
|
||||
manifest_aliases = {
|
||||
'ubnt-erx',
|
||||
},
|
||||
})
|
||||
|
||||
The supported additional settings are described in the following sections.
|
||||
device tp-link-tl-wr1043n-nd-v1 tl-wr1043nd-v1
|
||||
device alfa-network-hornet-ub hornet-ub HORNETUB
|
||||
|
||||
Suffixes and extensions
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
For many targets, OpenWrt generates images with the suffixes
|
||||
``-squashfs-factory.bin`` and ``-squashfs-sysupgrade.bin``. For devices with
|
||||
different image names, is it possible to override the suffixes and extensions
|
||||
using the settings ``factory``, ``factory_ext``, ``sysupgrade`` and
|
||||
``sysupgrade_ext``, for example:
|
||||
'''''''''''''''''''''''
|
||||
|
||||
.. code-block:: lua
|
||||
By default, image files are expected to have the extension ``.bin``. In addition,
|
||||
the images generated by OpenWrt have a suffix before the extension that defaults to
|
||||
``-squashfs-factory`` and ``-squashfs-sysupgrade``.
|
||||
|
||||
{
|
||||
factory = '-squashfs-combined',
|
||||
factory_ext = '.img.gz',
|
||||
sysupgrade = '-squashfs-combined',
|
||||
sysupgrade_ext = '.img.gz',
|
||||
}
|
||||
This can be changed using the ``factory`` and ``sysupgrade`` commands, either at
|
||||
the top of the file to set the defaults for all images, or for a single image. There
|
||||
are three forms with 0 to 2 arguments (all work with ``sysupgrade`` as well)::
|
||||
|
||||
Only settings that differ from the defaults need to be passed. ``factory`` and
|
||||
``sysupgrade`` can be set to ``false`` when no such images exist.
|
||||
factory SUFFIX .EXT
|
||||
factory .EXT
|
||||
factory
|
||||
|
||||
For some device types, there are multiple factory images with different
|
||||
extensions. ``factory_ext`` can be set to a table of strings to account for this
|
||||
case:
|
||||
When only an extension is given, the default suffix is retained. When no arguments
|
||||
are given, this signals that no factory (or sysupgrade) image exists.
|
||||
|
||||
.. code-block:: lua
|
||||
Aliases
|
||||
'''''''
|
||||
|
||||
{
|
||||
factory_ext = {'.img.gz', '.vmdk', '.vdi'},
|
||||
}
|
||||
Sometimes multiple models use the same OpenWrt images. In this case, the ``alias``
|
||||
command can be used to create symlinks and additional entries in the autoupdater
|
||||
manifest for the alternative models.
|
||||
|
||||
TODO: Extra images
|
||||
Standalone images
|
||||
'''''''''''''''''
|
||||
|
||||
Aliases and manifest aliases
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Sometimes multiple devices exist that use the same OpenWrt images. To make it
|
||||
easier to find these images, the ``aliases`` setting can be used to define
|
||||
additional device names. Gluon will create symlinks for these names in the
|
||||
image output directory.
|
||||
On targets without *per-device rootfs* support in OpenWrt, the commands described above
|
||||
can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used::
|
||||
|
||||
.. code-block:: lua
|
||||
factory_image PROFILE IMAGE .EXT
|
||||
sysupgrade_image PROFILE IMAGE .EXT
|
||||
|
||||
device('aruba-ap-303', 'aruba_ap-303', {
|
||||
factory = false,
|
||||
aliases = {'aruba-instant-on-ap11'},
|
||||
})
|
||||
Again, the profile name must match the value printed by the aforementioned Lua
|
||||
command. The image name must match the part between the target name and the extension
|
||||
as generated by OpenWrt and is to be omitted when no such part exists.
|
||||
|
||||
The aliased name will also be added to the autoupdate manifest, allowing upgrade
|
||||
images to be found under the different name on targets that perform model name
|
||||
detection at runtime.
|
||||
Packages
|
||||
''''''''
|
||||
|
||||
It is also possible to add alternative names to the autoupdater manifest without
|
||||
creating a symlink by using ``manifest_aliases`` instead of ``aliases``, which
|
||||
should be done when the alternative name does not refer to a separate device.
|
||||
This is particularly useful to allow the autoupdater to work when the model name
|
||||
changed between Gluon versions.
|
||||
The ``packages`` command takes an arbitrary number of arguments. Each argument
|
||||
defines an additional package to include in the images in addition to the default
|
||||
package sets defined by OpenWrt. When a package name is prefixed by a minus sign, the
|
||||
packages are excluded instead.
|
||||
|
||||
Package lists
|
||||
~~~~~~~~~~~~~
|
||||
Gluon generates lists of packages that are installed in all images based on a
|
||||
default list and the features and packages specified in the site configuration.
|
||||
The ``packages`` command may be used at the top of a target definition to modify
|
||||
the default package list for all images, or just for a single device (when the
|
||||
target supports *per-default rootfs*).
|
||||
|
||||
In addition, OpenWrt defines additional per-device package lists. These lists
|
||||
may be modified in Gluon's device definitions, for example to include additional
|
||||
drivers and firmware, or to remove unneeded software. Packages to remove are
|
||||
prefixed with a ``-`` character.
|
||||
|
||||
For many ath10k-based devices, this is used to replace the "CT" variant of
|
||||
ath10k with the mainline-based version:
|
||||
Configuration
|
||||
'''''''''''''
|
||||
|
||||
.. code-block:: lua
|
||||
The ``config`` command allows to add arbitrary target-specific OpenWrt configuration
|
||||
to be emitted to ``.config``.
|
||||
|
||||
local ATH10K_PACKAGES_QCA9880 = {
|
||||
'kmod-ath10k',
|
||||
'-kmod-ath10k-ct',
|
||||
'-kmod-ath10k-ct-smallbuffers',
|
||||
'ath10k-firmware-qca988x',
|
||||
'-ath10k-firmware-qca988x-ct',
|
||||
}
|
||||
device('openmesh-a40', 'openmesh_a40', {
|
||||
packages = ATH10K_PACKAGES_QCA9880,
|
||||
factory = false,
|
||||
})
|
||||
Notes
|
||||
'''''
|
||||
|
||||
This example also shows how to define a local variable, allowing the package
|
||||
list to be reused for multiple devices.
|
||||
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
||||
configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which
|
||||
can be found on a label on most hardware; if it does not, ``/lib/gluon/upgrade/010-primary-mac``
|
||||
in ``gluon-core`` might need a fix. (There have also been cases in which the address was incorrect
|
||||
even on devices with only one WLAN adapter, in these cases a OpenWrt bug was the cause).
|
||||
|
||||
Device flags
|
||||
~~~~~~~~~~~~
|
||||
|
||||
The settings ``class``, ``deprecated`` or ``broken`` should be set according to
|
||||
the device support status. The default values are as follows:
|
||||
Adding support for new hardware targets
|
||||
---------------------------------------
|
||||
|
||||
.. code-block:: lua
|
||||
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
||||
required for adding a new target:
|
||||
|
||||
{
|
||||
class = 'standard',
|
||||
deprecated = false,
|
||||
broken = false,
|
||||
}
|
||||
Package adjustments
|
||||
'''''''''''''''''''
|
||||
|
||||
- Device classes are described in :ref:`device-class-definition`
|
||||
- Broken devices are untested or do not meet our requirements as given by the
|
||||
device checklist
|
||||
- Deprecated devices are slated for removal in a future Gluon version due to
|
||||
hardware constraints
|
||||
One package that may need adjustments for new targets is ``libplatforminfo`` (to be found in
|
||||
`packages/gluon/libs/libplatforminfo <https://github.com/freifunk-gluon/packages/tree/master/libs/libplatforminfo>`_).
|
||||
If the new platform works fine with the definitions found in ``default.c``, nothing needs to be done. Otherwise,
|
||||
create a definition for the added target or subtarget, either by symlinking one of the files in the ``templates``
|
||||
directory, or adding a new source file.
|
||||
|
||||
Global settings
|
||||
~~~~~~~~~~~~~~~
|
||||
There is a number of directives that can be used outside of a ``device()``
|
||||
definition:
|
||||
On many targets, Gluon's network setup scripts (mainly in the package ``gluon-core``)
|
||||
won't run correctly without some adjustments, so better double check that everything is fine there (and the files
|
||||
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
||||
|
||||
- ``include('filename')``: Include another file with global settings
|
||||
- ``config(key, value)``: Set a config symbol in OpenWrt's ``.config``. Value
|
||||
may be a string, number, boolean, or nil. Booleans and nil are used for
|
||||
tristate symbols, where nil sets the symbol to ``m``.
|
||||
- ``try_config(key, value)``: Like ``config()``, but do not fail if setting
|
||||
the symbol is not possible (usually because its dependencies are not met)
|
||||
- ``packages { 'package1', '-package2', ... }``: Define a list of packages to
|
||||
add or remove for all devices of a target. Package lists passed to multiple
|
||||
calls of ``packages`` will be aggregated.
|
||||
- ``defaults { key = value, ... }``: Set default values for any of the
|
||||
additional settings that can be passed to ``device()``.
|
||||
Build system support
|
||||
''''''''''''''''''''
|
||||
|
||||
Helper functions
|
||||
~~~~~~~~~~~~~~~~
|
||||
The following helpers can be used in the target configuration:
|
||||
A definition for the new target must be created under ``targets``, and it must be added
|
||||
to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to three arguments:
|
||||
the target name, the Gluon subtarget name (if the target has subtargets), and the
|
||||
OpenWrt subtarget name (if it differs from the Gluon subtarget). The third argument
|
||||
can be used to define multiple Gluon targets with different configuration for the
|
||||
same OpenWrt target, like it is done for the ``ar71xx-tiny`` target.
|
||||
|
||||
- ``env.KEY`` allows to access environment variables
|
||||
- ``istrue(value)`` returns true if the passed string is a positive number
|
||||
(often used with ``env``, for example ``if istrue(env.GLUON_DEBUG) then ...``)
|
||||
|
||||
Hardware support in packages
|
||||
----------------------------
|
||||
In addition to the target configuration files, some device-specific changes may
|
||||
be required in packages.
|
||||
|
||||
gluon-core
|
||||
~~~~~~~~~~
|
||||
- ``/lib/gluon/upgrade/010-primary-mac``: Override primary MAC address selection
|
||||
|
||||
Usually, the primary (label) MAC address is defined in OpenWrt's Device Trees.
|
||||
For devices or targets where this is not the case, it is possible to specify
|
||||
what interface to take the primary MAC address from in ``010-primary-mac``.
|
||||
|
||||
- ``/lib/gluon/upgrade/020-interfaces``: Override LAN/WAN interface assignment
|
||||
|
||||
On PoE-powered devices, the PoE input port should be "WAN".
|
||||
|
||||
- ``/usr/lib/lua/gluon/platform.lua``: Contains a list of outdoor devices
|
||||
|
||||
gluon-setup-mode
|
||||
~~~~~~~~~~~~~~~~
|
||||
- ``/lib/gluon/upgrade/320-setup-ifname``: Contains a list of devices that use
|
||||
the WAN port for the config mode
|
||||
|
||||
On PoE-powered devices, the PoE input port should be used for the config
|
||||
mode. This is handled correctly by default for outdoor devices listed in
|
||||
``platform.lua``.
|
||||
|
||||
libplatforminfo
|
||||
~~~~~~~~~~~~~~~
|
||||
When adding support for a new target to Gluon, it may be necessary to adjust
|
||||
libplatforminfo to define how autoupdater image names are derived from the
|
||||
model name.
|
||||
After this, is should be sufficient to call ``make GLUON_TARGET=<target>`` to build the images for the new target.
|
||||
|
@ -10,9 +10,9 @@ Gluon tries to solve this issue by using a hash of the primary MAC address as a
|
||||
|
||||
* 0: client0; WAN
|
||||
* 1: mesh0
|
||||
* 2: owe0
|
||||
* 2: ibss0
|
||||
* 3: wan_radio0 (private WLAN); batman-adv primary address
|
||||
* 4: client1; LAN
|
||||
* 5: mesh1
|
||||
* 6: owe1
|
||||
* 6: ibss1
|
||||
* 7: wan_radio1 (private WLAN); mesh VPN
|
||||
|
@ -3,88 +3,6 @@ Package development
|
||||
|
||||
Gluon packages are OpenWrt packages and follow the same rules described at https://openwrt.org/docs/guide-developer/packages.
|
||||
|
||||
Development workflow
|
||||
====================
|
||||
|
||||
When you are developing packages, it often happens that you iteratively want to deploy
|
||||
and verify the state your development. There are two ways to verify your changes:
|
||||
|
||||
1)
|
||||
One way is to rebuild the complete firmware, flash it, configure it and verify your
|
||||
development then. This usually takes at least a few minutes to get your changes
|
||||
working so you can test them. Especially if you iterate a lot, this becomes tedious.
|
||||
|
||||
2)
|
||||
Another way is to rebuild only the package you are currently working on and
|
||||
to deploy this package to your test system. Here not even a reboot is required.
|
||||
This makes iterating relatively fast. Your test system could be real hardware or
|
||||
even a qemu in most cases.
|
||||
|
||||
Gluon provides scripts to enhance workflow 2). Here is an example illustrating
|
||||
the workflow using these scripts:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# start a local qemu instance
|
||||
contrib/run_qemu.sh output/images/factory/[...]-x86-64.img
|
||||
|
||||
# apply changes to the desired package
|
||||
vi package/gluon-ebtables/files/etc/init.d/gluon-ebtables
|
||||
|
||||
# rebuild and push the package to the qemu instance
|
||||
contrib/push_pkg.sh package/gluon-ebtables/
|
||||
|
||||
# test your changes
|
||||
...
|
||||
|
||||
# do more changes
|
||||
...
|
||||
|
||||
# rebuild and push the package to the qemu instance
|
||||
contrib/push_pkg.sh package/gluon-ebtables/
|
||||
|
||||
# test your changes
|
||||
...
|
||||
|
||||
(and so on...)
|
||||
|
||||
# see help of the script for more information
|
||||
contrib/push_pkg.sh -h
|
||||
...
|
||||
|
||||
Features of ``push_pkg.sh``:
|
||||
|
||||
* Works with compiled and non-compiled packages.
|
||||
|
||||
* This means it can be used in the development of C-code, Lua-Code and mostly any other code.
|
||||
|
||||
* Works with native OpenWrt and Gluon packages.
|
||||
* Pushes to remote machines or local qemu instances.
|
||||
* Pushes multiple packages in in one call if desired.
|
||||
* Performs site.conf checks.
|
||||
|
||||
Implementation details of ``push_pkg.sh``:
|
||||
|
||||
* First, the script builds an opkg package using the OpenWrt build system.
|
||||
* This package is pushed to a *target machine* using scp:
|
||||
|
||||
* By default the *target machine* is a locally running x86 qemu started using ``run_qemu.sh``.
|
||||
* The *target machine* can also be remote machine. (See the cli switch ``-r``)
|
||||
* Remote machines are not limited to a specific architecture. All architectures supported by gluon can be used as remote machines.
|
||||
|
||||
* Finally opkg is used to install/update the packages in the target machine.
|
||||
|
||||
* While doing this, it will not override ``/etc/config`` with package defaults by default. (See the cli switch ``-P``).
|
||||
* While doing this, opkg calls the ``check_site.lua`` from the package as post_install script to validate the ``site.conf``. This means that the ``site.conf`` of the target machine is used for this validation.
|
||||
|
||||
Note that:
|
||||
|
||||
* ``push_pkg.sh`` does neither build nor push dependencies of the packages automatically. If you want to update dependencies, you must explicitly specify them to be pushed.
|
||||
* If you add new packages, you must run ``make update config GLUON_TARGET=...``.
|
||||
* You can change the gluon target of the target machine via ``make config GLUON_TARGET=...``.
|
||||
* If you want to update the ``site.conf`` of the target machine, use ``push_pkg.sh package/gluon-site/``.
|
||||
* Sometimes when things break, you can heal them by compiling a package with its dependencies: ``cd openwrt; make package/gluon-ebtables/clean; make package/gluon-ebtables/compile; cd ..``.
|
||||
* You can exit qemu by pressing ``CTRL + a`` and ``c`` afterwards.
|
||||
|
||||
Gluon package makefiles
|
||||
=======================
|
||||
@ -153,62 +71,44 @@ Feature flags
|
||||
=============
|
||||
|
||||
Feature flags provide a convenient way to define package selections without
|
||||
making it necessary to list each package explicitly. The list of features to
|
||||
enable for a Gluon build is set by the *GLUON_FEATURES* variable in *site.mk*.
|
||||
making it necessary to list each package explicitly.
|
||||
|
||||
The main feature flag definition file is ``package/features``, but each package
|
||||
feed can provide additional definitions in a file called ``features`` at the root
|
||||
of the feed repository.
|
||||
|
||||
Each flag *$flag* will include the package the name *gluon-$flag* by default.
|
||||
The feature definition file can modify the package selection by adding or removing
|
||||
packages when certain combinations of flags are set.
|
||||
Each flag *$flag* without any explicit definition will simply include the package
|
||||
with the name *gluon-$flag* by default. The feature definition file can modify
|
||||
the package selection in two ways:
|
||||
|
||||
Feature definitions use Lua syntax. Two basic functions are defined:
|
||||
|
||||
* *feature(name, pkgs)*: Defines a new feature. *feature()* expects a feature
|
||||
(flag) name and a list of packages to add or remove when the feature is
|
||||
enabled.
|
||||
|
||||
* Defining a feature using *feature* replaces the default definition of
|
||||
just including *gluon-$flag*.
|
||||
* A package is removed when the package name is prefixed with a ``-`` (after
|
||||
the opening quotation mark).
|
||||
|
||||
* *when(expr, pkgs)*: Adds or removes packages when a given logical expression
|
||||
of feature flags is satisfied.
|
||||
|
||||
* *expr* is a logical expression composed of feature flag names (each prefixed
|
||||
with an underscore before the opening quotation mark), logical operators
|
||||
(*and*, *or*, *not*) and parentheses.
|
||||
* Referencing a feature flag in *expr* has no effect on the default handling
|
||||
of the flag. When no *feature()* entry for a flag exists, it will still
|
||||
add *gluon-$flag* by default.
|
||||
* *pkgs* is handled as for *feature()*.
|
||||
* The *nodefault* function suppresses default of including the *gluon-$flag*
|
||||
package
|
||||
* The *packages* function adds a list of packages (or removes, when package
|
||||
names are prepended with minus signs) when a given logical expression
|
||||
is satisfied
|
||||
|
||||
Example::
|
||||
|
||||
feature('web-wizard', {
|
||||
'gluon-config-mode-hostname',
|
||||
'gluon-config-mode-geo-location',
|
||||
'gluon-config-mode-contact-info',
|
||||
'gluon-config-mode-outdoor',
|
||||
})
|
||||
nodefault 'web-wizard'
|
||||
|
||||
when(_'web-wizard' and (_'mesh-vpn-fastd' or _'mesh-vpn-tunneldigger'), {
|
||||
'gluon-config-mode-mesh-vpn',
|
||||
})
|
||||
|
||||
feature('no-radvd', {
|
||||
'-gluon-radvd',
|
||||
})
|
||||
packages 'web-wizard' \
|
||||
'gluon-config-mode-hostname' \
|
||||
'gluon-config-mode-geo-location' \
|
||||
'gluon-config-mode-contact-info'
|
||||
|
||||
packages 'web-wizard & (mesh-vpn-fastd | mesh-vpn-tunneldigger)' \
|
||||
'gluon-config-mode-mesh-vpn'
|
||||
|
||||
This will
|
||||
|
||||
* disable the inclusion of the (non-existent) packages *gluon-web-wizard* and *gluon-no-radvd* when their
|
||||
corresponding feature flags appear in *GLUON_FEATURES*
|
||||
* enable four additional config mode packages when the *web-wizard* feature is enabled
|
||||
* disable the inclusion of a (non-existent) package called *gluon-web-wizard*
|
||||
* enable three config mode packages when the *web-wizard* feature is enabled
|
||||
* enable *gluon-config-mode-mesh-vpn* when both *web-wizard* and one
|
||||
of *mesh-vpn-fastd* and *mesh-vpn-tunneldigger* are enabled
|
||||
* disable the *gluon-radvd* package when *gluon-no-radvd* is enabled
|
||||
|
||||
Supported syntax elements of logical expressions are:
|
||||
|
||||
* \& (and)
|
||||
* \| (or)
|
||||
* \! (not)
|
||||
* parentheses
|
||||
|
@ -1,5 +1,5 @@
|
||||
Uplink support
|
||||
==============
|
||||
WAN support
|
||||
===========
|
||||
|
||||
As the WAN port of a node will be connected to a user's private network, it
|
||||
is essential that the node only uses the WAN when it is absolutely necessary.
|
||||
@ -11,12 +11,6 @@ There are two cases in which the WAN port is used:
|
||||
After the VPN connection has been established, the node should be able to reach
|
||||
the mesh's DNS servers and use these for all other name resolution.
|
||||
|
||||
If a device has only a single Ethernet port (or group of ports), it will be
|
||||
used as an uplink port even when it is not labelled as "WAN" by default. This
|
||||
behavior can be controlled using the ``interfaces.single.default_roles``
|
||||
site.conf option. It is also possible to alter the interface assignment after
|
||||
installation by modifying ``/etc/config/gluon`` and running
|
||||
``gluon-reconfigure``.
|
||||
|
||||
Routing tables
|
||||
~~~~~~~~~~~~~~
|
@ -74,7 +74,8 @@ Useful functions:
|
||||
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
|
||||
the client. Has no effect when non-header data has already been written.
|
||||
- *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
|
||||
type
|
||||
type, potentially setting additional headers or modifying the MIME type to
|
||||
accommodate browser quirks
|
||||
- *write* (*data*, ...): Sends the given data to the client. If headers have not
|
||||
been sent, it will be done before the data is written.
|
||||
|
||||
|
@ -7,11 +7,8 @@ Building Images
|
||||
---------------
|
||||
|
||||
By default, the autoupdater is disabled (as it is usually not helpful to have unexpected updates
|
||||
during development), but it can be enabled by setting the variable ``GLUON_AUTOUPDATER_ENABLED`` to ``1`` when building.
|
||||
It is also possible to override the default branch during build using the variable ``GLUON_AUTOUPDATER_BRANCH``.
|
||||
|
||||
If a default branch is set neither in *site.conf* nor via ``GLUON_AUTOUPDATER_BRANCH``, the default branch is
|
||||
implementation-defined. Currently, the branch with the first name in alphabetical order is chosen.
|
||||
during development), but it can be enabled by setting the variable GLUON_BRANCH when building
|
||||
to override the default branch set in the site configuration.
|
||||
|
||||
A manifest file for the updater can be generated with `make manifest`. A signing script (using
|
||||
``ecdsautils``) can be found in the `contrib` directory. When creating the manifest, the
|
||||
@ -30,42 +27,20 @@ in ``site.mk``, care must be taken to pass the same ``GLUON_RELEASE`` to ``make
|
||||
as otherwise the generated manifest will be incomplete.
|
||||
|
||||
|
||||
Manifest format
|
||||
------------------------
|
||||
|
||||
The manifest starts with a short header, followed by the list of firmwares and signatures.
|
||||
The header contains the following information:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
BRANCH=stable
|
||||
DATE=2020-10-07 00:00:00+02:00
|
||||
PRIORITY=7
|
||||
|
||||
- ``BRANCH`` is the autoupdater branch name that needs to match the nodes configuration.
|
||||
- ``DATE`` specifies when the time period for the update begins. Nodes will do their regular update during a random minute
|
||||
between 4:00 and 4:59 am. Nodes might not always have a reliable NTP synchronization, which is why a fallback mechanism
|
||||
exists, that checks for an update, and will execute if ``DATE`` is at least 24h in the past.
|
||||
- ``PRIORITY`` can be configured as ``GLUON_PRIORITY`` when generating the manifest or in ``site.mk``, and defines
|
||||
the number of days over which the update should be stretched out after ``DATE``. Nodes will calculate a probability
|
||||
based on the time left to determine when to update.
|
||||
|
||||
|
||||
Automated nightly builds
|
||||
------------------------
|
||||
|
||||
A fully automated nightly build could use the following commands:
|
||||
|
||||
.. code-block:: sh
|
||||
::
|
||||
|
||||
git pull
|
||||
# git -C site pull
|
||||
(git -C site pull)
|
||||
make update
|
||||
make clean GLUON_TARGET=ath79-generic
|
||||
make clean GLUON_TARGET=ar71xx-generic
|
||||
NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
|
||||
make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ath79-generic GLUON_RELEASE=$GLUON_RELEASE \
|
||||
GLUON_AUTOUPDATER_BRANCH=experimental GLUON_AUTOUPDATER_ENABLED=1
|
||||
make manifest GLUON_RELEASE=$GLUON_RELEASE GLUON_AUTOUPDATER_BRANCH=experimental
|
||||
make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental GLUON_RELEASE=$GLUON_RELEASE
|
||||
make manifest GLUON_BRANCH=experimental GLUON_RELEASE=$GLUON_RELEASE
|
||||
contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest
|
||||
|
||||
rm -rf /where/to/put/this/experimental
|
||||
@ -99,16 +74,16 @@ These commands can be used on a node:
|
||||
|
||||
::
|
||||
|
||||
# Update with some probability
|
||||
autoupdater
|
||||
# Update with some probability
|
||||
autoupdater
|
||||
|
||||
::
|
||||
|
||||
# Force update check, even when the updater is disabled
|
||||
autoupdater -f
|
||||
# Force update check, even when the updater is disabled
|
||||
autoupdater -f
|
||||
|
||||
::
|
||||
|
||||
# If fallback is true the updater will perform an update only if the timespan
|
||||
# PRIORITY days (as defined in the manifest) and another 24h have passed
|
||||
autoupdater --fallback
|
||||
# If fallback is true the updater will perform an update only if the timespan
|
||||
# PRIORITY days (as defined in the manifest) and another 24h have passed
|
||||
autoupdater --fallback
|
||||
|
@ -14,13 +14,10 @@ Activating Config Mode
|
||||
----------------------
|
||||
|
||||
Config Mode is automatically entered at the first boot. You can re-enter
|
||||
Config Mode by pressing and holding the RESET/WPS/DECT button for about three
|
||||
Config Mode by pressing and holding the RESET/WPS button for about three
|
||||
seconds. The device should reboot (all LEDs will turn off briefly) and
|
||||
Config Mode will be available.
|
||||
|
||||
If you have access to the console of the node, there is the
|
||||
``gluon-enter-setup-mode`` command, which reboots a node into Config Mode.
|
||||
|
||||
|
||||
Port Configuration
|
||||
------------------
|
||||
|
@ -1,51 +0,0 @@
|
||||
DNS caching
|
||||
===========
|
||||
|
||||
User experience may be greatly improved when dns is accelerated. Also, it
|
||||
seems like a good idea to keep the number of packages being exchanged
|
||||
between node and gateway as small as possible. In order to do this, a
|
||||
DNS cache may be used on a node. The dnsmasq instance listening on port
|
||||
53 on the node will be reconfigured to answer requests, use a list of
|
||||
upstream servers and a specific cache size if the options listed below are
|
||||
added to site.conf. Upstream servers are the DNS servers which are normally
|
||||
used by the nodes to resolve hostnames (e.g. gateways/supernodes).
|
||||
|
||||
There are the following settings:
|
||||
servers
|
||||
cacheentries
|
||||
|
||||
To use the node's DNS server, both options should be set. The node will cache at
|
||||
most 'cacheentries' many DNS records in RAM. The 'servers' list will be used to
|
||||
resolve the received DNS queries if the request cannot be answered from
|
||||
cache. Gateways should announce the "next node" address via DHCP and RDNSS (if
|
||||
any). Note that not setting 'servers' here will lead to DNS not working: Once
|
||||
the gateways all announce the "next node" address for DNS, there is no way for
|
||||
nodes to automatically determine DNS servers. They have to be baked into the
|
||||
firmware.
|
||||
|
||||
If these settings do not exist, the cache is not initialized and RAM usage will
|
||||
not increase.
|
||||
|
||||
When next_node.name is set, an A record and an AAAA record for the
|
||||
next-node IP address are placed in the dnsmasq configuration. This means that
|
||||
the content of next_node.name may be resolved even without upstream connectivity.
|
||||
It is suggested to use the same name as the DNS server provides:
|
||||
e.g. nextnode.location.community.example.org (This way the name also works if a
|
||||
client uses static DNS Servers). Hint: If next_node.name does not contain a dot
|
||||
some browsers would open the searchpage instead.
|
||||
|
||||
::
|
||||
|
||||
dns = {
|
||||
cacheentries = 5000,
|
||||
servers = { '2001:db8::1', },
|
||||
},
|
||||
|
||||
next_node = {
|
||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||
ip6 = '2001:db8:8::1',
|
||||
ip4 = '198.51.100.1',
|
||||
}
|
||||
|
||||
|
||||
Each cache entry will occupy about 90 bytes of RAM.
|
26
docs/features/dns-forwarder.rst
Normal file
@ -0,0 +1,26 @@
|
||||
DNS forwarder
|
||||
=============
|
||||
|
||||
A Gluon node can be configured to act as a DNS forwarder. Requests for the
|
||||
next-node hostname(s) can be answered locally, without querying the upstream
|
||||
resolver.
|
||||
|
||||
**Note:** While this reduces answer time and allows to use the next-node
|
||||
hostname without upstream connectivity, this feature should not be used for
|
||||
next-node hostnames that are FQDN when the zone uses DNSSEC.
|
||||
|
||||
One or more upstream resolvers can be configured in the *dns.servers* setting.
|
||||
When *next_node.name* is set, A and/or AAAA records for the next-node IP
|
||||
addresses are placed in the dnsmasq configuration.
|
||||
|
||||
::
|
||||
|
||||
dns = {
|
||||
servers = { '2001:db8::1', },
|
||||
},
|
||||
|
||||
next_node = {
|
||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||
ip6 = '2001:db8:8::1',
|
||||
ip4 = '198.51.100.1',
|
||||
}
|
@ -47,7 +47,7 @@ installed. Please note that at least one alfred daemon is required to run as
|
||||
|
||||
.. _alfred-json: https://github.com/ffnord/alfred-json
|
||||
|
||||
The following data types are used:
|
||||
The following datatypes are used:
|
||||
|
||||
* `nodeinfo`: 158
|
||||
* `statistics`: 159
|
||||
@ -104,8 +104,7 @@ gluon-respondd
|
||||
|
||||
`gluon-respondd` allows querying neighbouring nodes for their information.
|
||||
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
||||
UDP port 1001 on the mesh interface and on the multicast address
|
||||
``ff05::2:1001`` on the `br-client` interface. Unicast
|
||||
UDP port 1001 on both the bare mesh interfaces and `br-client`. Unicast
|
||||
requests are supported as well.
|
||||
|
||||
The supported requests are:
|
||||
@ -123,8 +122,8 @@ information from other nodes.
|
||||
|
||||
::
|
||||
|
||||
gluon-neighbour-info -i bat0 \
|
||||
-p 1001 -d ff05:0:0:0:0:0:2:1001 \
|
||||
gluon-neighbour-info -i wlan0 \
|
||||
-p 1001 -d ff02:0:0:0:0:0:2:1001 \
|
||||
-r nodeinfo
|
||||
|
||||
An optional timeout may be specified, e.g. `-t 5` (default: 3 seconds). See
|
||||
|
@ -21,18 +21,18 @@ Overview
|
||||
Multidomain support allows to build a single firmware with multiple,
|
||||
switchable domain configurations. The nomenclature is as follows:
|
||||
|
||||
- ``site``: an aggregate over multiple domains
|
||||
- ``domain``: mesh network with connectivity parameters that prevent
|
||||
accidental bridging with other domains
|
||||
- ``domain code``: unique domain identifier
|
||||
- ``domain name``: pretty name for a domain code
|
||||
- ``site``: an aggregate over multiple domains
|
||||
- ``domain``: mesh network with connectivity parameters that prevent
|
||||
accidental bridging with other domains
|
||||
- ``domain code``: unique domain identifier
|
||||
- ``domain name``: pretty name for a domain code
|
||||
|
||||
By default Gluon builds firmware with a single domain embedded into
|
||||
``site.conf``. To use multiple domains, enable it in ``site.mk``:
|
||||
|
||||
::
|
||||
|
||||
GLUON_MULTIDOMAIN=1
|
||||
GLUON_MULTIDOMAIN=1
|
||||
|
||||
In the site repository, create the ``domains/`` directory, which will
|
||||
hold your domain configurations. Each domain configuration file is named
|
||||
@ -41,26 +41,26 @@ supported.
|
||||
|
||||
::
|
||||
|
||||
site/
|
||||
|-- site.conf
|
||||
|-- site.mk
|
||||
|-- i18n/
|
||||
|-- domains/
|
||||
|-- alpha_centauri.conf
|
||||
|-- beta_centauri.conf
|
||||
|-- gamma_centauri.conf
|
||||
site/
|
||||
|-- site.conf
|
||||
|-- site.mk
|
||||
|-- i18n/
|
||||
|-- domains/
|
||||
|-- alpha_centauri.conf
|
||||
|-- beta_centauri.conf
|
||||
|-- gamma_centauri.conf
|
||||
|
||||
The domain configuration ``alpha_centauri.conf`` could look like this.
|
||||
|
||||
::
|
||||
|
||||
{
|
||||
domain_names = {
|
||||
alpha_centauri = 'Alpha Centauri'
|
||||
},
|
||||
{
|
||||
domain_names = {
|
||||
alpha_centauri = 'Alpha Centauri'
|
||||
},
|
||||
|
||||
-- more domain specific config follows below
|
||||
}
|
||||
-- more domain specific config follows below
|
||||
}
|
||||
|
||||
In this example “Alpha Centauri” is the user-visible ``domain_name`` for the
|
||||
domain_code ``alpha_centauri``. Also note that the domain code
|
||||
@ -88,25 +88,18 @@ domain of a router, if and only if one of the above conditions matches.
|
||||
Switching the domain
|
||||
--------------------
|
||||
|
||||
Via commandline
|
||||
^^^^^^^^^^^^^^^
|
||||
**via commandline**:
|
||||
|
||||
::
|
||||
|
||||
gluon-switch-domain 'newdomaincode'
|
||||
uci set gluon.core.domain="newdomaincode"
|
||||
gluon-reconfigure
|
||||
reboot
|
||||
|
||||
When the node is not in config mode, ``gluon-switch-domain`` will automatically
|
||||
reboot the node by default. This can be suppressed by passing ``--no-reboot``::
|
||||
**via config mode:**
|
||||
|
||||
gluon-switch-domain --no-reboot 'newdomaincode'
|
||||
|
||||
Switching the domain without reboot is currently **experimental**.
|
||||
|
||||
Via config mode
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
To allow switching the domain via config mode, add ``config-mode-domain-select``
|
||||
to GLUON_FEATURES in site.mk.
|
||||
To allow switching the domain via config mode, ``config-mode-domain-select``
|
||||
has to be added to GLUON_FEATURES in the site.mk.
|
||||
|
||||
|image0|
|
||||
|
||||
@ -123,113 +116,119 @@ site or domain context.
|
||||
site.conf only variables
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Used in as initial default values, when the firmware was just flashed
|
||||
and/or the config mode is skipped, so they do not make sense in a
|
||||
domain specific way:
|
||||
- Used in as initial default values, when the firmware was just flashed
|
||||
and/or the config mode is skipped, so they do not make sense in a
|
||||
domain specific way:
|
||||
|
||||
- authorized_keys
|
||||
- default_domain
|
||||
- poe_passthrough
|
||||
- interfaces.*.default_roles
|
||||
- setup_mode.skip
|
||||
- autoupdater.branch
|
||||
- mesh_vpn.enabled
|
||||
- mesh_vpn.pubkey_privacy
|
||||
- mesh_vpn.bandwidth_limit
|
||||
- mesh_vpn.bandwidth_limit.enabled
|
||||
- mesh_vpn.bandwidth_limit.ingress
|
||||
- mesh_vpn.bandwidth_limit.egress
|
||||
- authorized_keys
|
||||
- default_domain
|
||||
- poe_passthrough
|
||||
- mesh_on_wan
|
||||
- mesh_on_lan
|
||||
- single_as_lan
|
||||
- setup_mode.skip
|
||||
- autoupdater.branch
|
||||
- mesh_vpn.enabled
|
||||
- mesh_vpn.pubkey_privacy
|
||||
- mesh_vpn.bandwidth_limit
|
||||
- mesh_vpn.bandwidth_limit.enabled
|
||||
- mesh_vpn.bandwidth_limit.ingress
|
||||
- mesh_vpn.bandwidth_limit.egress
|
||||
|
||||
- Variables that influence the appearance of the config mode,
|
||||
domain-independent because they are relevant before a domain was selected.
|
||||
- Variables that influence the appearance of the config mode,
|
||||
domain-independent because they are relevant before a domain was selected.
|
||||
|
||||
- config_mode.geo_location.show_altitude
|
||||
- config_mode.hostname.optional
|
||||
- config_mode.remote_login
|
||||
- config_mode.remote_login.show_password_form
|
||||
- config_mode.remote_login.min_password_length
|
||||
- hostname_prefix
|
||||
- mesh_vpn.fastd.configurable
|
||||
- roles.default
|
||||
- roles.list
|
||||
- config_mode.geo_location.show_altitude
|
||||
- config_mode.hostname.optional
|
||||
- config_mode.remote_login
|
||||
- config_mode.remote_login.show_password_form
|
||||
- config_mode.remote_login.min_password_length
|
||||
- hostname_prefix
|
||||
- mesh_vpn.fastd.configurable
|
||||
- roles.default
|
||||
- roles.list
|
||||
|
||||
- Specific to a firmware build itself:
|
||||
- Specific to a firmware build itself:
|
||||
|
||||
- site_code
|
||||
- site_name
|
||||
- autoupdater.branches.*.name
|
||||
- autoupdater.branches.*.good_signatures
|
||||
- autoupdater.branches.*.pubkeys
|
||||
- site_code
|
||||
- site_name
|
||||
- autoupdater.branches.*.name
|
||||
- autoupdater.branches.*.good_signatures
|
||||
- autoupdater.branches.*.pubkeys
|
||||
|
||||
- We simply do not see any reason, why these variables could be helpful
|
||||
in a domain specific way:
|
||||
- We simply do not see any reason, why these variables could be helpful
|
||||
in a domain specific way:
|
||||
|
||||
- mesh_vpn.fastd.syslog_level
|
||||
- timezone
|
||||
- regdom
|
||||
- mesh_vpn.fastd.syslog_level
|
||||
- wifi*.supported_rates
|
||||
- wifi*.basic_rate
|
||||
- timezone
|
||||
- regdom
|
||||
|
||||
domain.conf only variables
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Obviously:
|
||||
- Obviously:
|
||||
|
||||
- domain_names
|
||||
- domain_names
|
||||
|
||||
- a table of domain codes to domain names
|
||||
``domain_names = { foo = 'Foo Domain', bar = 'Bar Domain', baz = 'Baz Domain' }``
|
||||
- a table of domain codes to domain names
|
||||
``domain_names = { foo = 'Foo Domain', bar = 'Bar Domain', baz = 'Baz Domain' }``
|
||||
|
||||
- hide_domain
|
||||
- hide_domain
|
||||
|
||||
- prevents a domain name(s) from appearing in config mode, either
|
||||
boolean or array of domain codes
|
||||
- prevents a domain name(s) from appearing in config mode, either
|
||||
boolean or array of domain codes
|
||||
|
||||
- ``true``, ``false``
|
||||
- ``{ 'foo', 'bar' }``
|
||||
- ``true``, ``false``
|
||||
- ``{ 'foo', 'bar' }``
|
||||
|
||||
- Because each domain is considered a separate layer 2 network, these
|
||||
values should be different in each domain:
|
||||
- Because each domain is considered as an own layer 2 network, these
|
||||
values should be different in each domain:
|
||||
|
||||
- next_node.ip4
|
||||
- next_node.ip6
|
||||
- next_node.name
|
||||
- prefix6
|
||||
- prefix4
|
||||
- extra_prefixes6
|
||||
- next_node.ip4
|
||||
- next_node.ip6
|
||||
- next_node.name
|
||||
- prefix6
|
||||
- prefix4
|
||||
- extra_prefixes6
|
||||
|
||||
- To prevent accidental bridging of different domains, all meshing
|
||||
technologies should be separated:
|
||||
- To prevent accidental bridging of different domains, all meshing
|
||||
technologies should be separated:
|
||||
|
||||
- domain_seed (wired mesh)
|
||||
- domain_seed (wired mesh)
|
||||
|
||||
- must be a random value used to derive the vxlan id for wired meshing
|
||||
- must be a random value used to derive the vxlan id for wired meshing
|
||||
|
||||
- wifi*.mesh.id
|
||||
- mesh_vpn.fastd.groups.*.peers.remotes
|
||||
- mesh_vpn.fastd.groups.*.peers.key
|
||||
- mesh_vpn.tunneldigger.brokers
|
||||
- wifi*.ibss.ssid
|
||||
- wifi*.ibss.bssid
|
||||
- wifi*.mesh.id
|
||||
- mesh_vpn.fastd.groups.*.peers.remotes
|
||||
- mesh_vpn.fastd.groups.*.peers.key
|
||||
- mesh_vpn.tunneldigger.brokers
|
||||
|
||||
- Clients consider WiFi networks sharing the same ESSID as if they were
|
||||
the same L2 network and try to reconfirm and reuse previous
|
||||
addressing. If multiple neighbouring domains shared the same ESSID,
|
||||
the roaming experience of clients would degrade.
|
||||
- Clients consider WiFi networks sharing the same ESSID as if they were
|
||||
the same L2 network and try to reconfirm and reuse previous
|
||||
addressing. If multiple neighbouring domains shared the same ESSID,
|
||||
the roaming experience of clients would degrade.
|
||||
|
||||
- wifi*.ap.ssid
|
||||
- wifi*.ap.ssid
|
||||
|
||||
- Some values should be only set in legacy domains and not in new domains.
|
||||
- Some values should be only set in legacy domains and not in new domains.
|
||||
|
||||
- mesh.vxlan
|
||||
- mesh.vxlan
|
||||
|
||||
- By default, this value is `true`. It should be only set to `false`
|
||||
for one legacy domain, since vxlan prevents accidental wired
|
||||
merges of domains. For old domains this value is still available
|
||||
to keep compatibility between all nodes in one domain.
|
||||
- By default, this value is `true`. It should be only set to `false`
|
||||
for one legacy domain, since vxlan prevents accidental wired
|
||||
merges of domains. For old domains this value is still available
|
||||
to keep compatibility between all nodes in one domain.
|
||||
|
||||
- next_node.mac
|
||||
- next_node.mac
|
||||
|
||||
- For new domains, the default value should be used, since there is
|
||||
no need for a special mac (or domain specific mac). For old domains
|
||||
this value is still available to keep compatibility between all
|
||||
nodes in one domain.
|
||||
- For new domains, the default value should be used, since there is
|
||||
no need for a special mac (or domain specific mac). For old domains
|
||||
this value is still available to keep compatibility between all
|
||||
nodes in one domain.
|
||||
|
||||
Example config
|
||||
--------------
|
||||
|
@ -1,16 +1,8 @@
|
||||
Private WLAN
|
||||
============
|
||||
|
||||
It is possible to set up a private WLAN that bridges the uplink port and is separated from the mesh network.
|
||||
Please note that you should not enable Wired Mesh on the uplink port at the same time.
|
||||
|
||||
The private WLAN is encrypted using WPA2 by default. On devices with enough flash and a supported radio,
|
||||
WPA3 or WPA2/WPA3 mixed-mode can be used instead of WPA2. For this to work, the ``wireless-encryption-wpa3``
|
||||
feature has to be added to ``GLUON_FEATURES``.
|
||||
|
||||
It is recommended to enable IEEE 802.11w management frame protection for WPA2/WPA3 networks, however this
|
||||
can lead to connectivity problems for older clients. In this case, management frame protection can be
|
||||
made optional or completely disabled in the advanced settings tab.
|
||||
It is possible to set up a private WLAN that bridges the WAN port and is separated from the mesh network.
|
||||
Please note that you should not enable ``mesh_on_wan`` simultaneously.
|
||||
|
||||
The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
|
||||
You may also enable a private WLAN using the command line::
|
||||
|
@ -2,8 +2,8 @@ Roles
|
||||
=====
|
||||
|
||||
It is possible to define a set of roles you want to distinguish at backend side. One node can own one
|
||||
role which it will announce via respondd/announced inside the mesh. This will make it easier to differentiate
|
||||
nodes when parsing respondd data. E.g to count only **normal** nodes and not the gateways
|
||||
role which it will announce via alfred inside the mesh. This will make it easier to differentiate
|
||||
nodes when parsing alfred data. E.g to count only **normal** nodes and not the gateways
|
||||
or servers (nodemap). A lot of things are possible.
|
||||
|
||||
For this the section ``roles`` in ``site.conf`` is needed::
|
||||
@ -28,7 +28,7 @@ If you want node owners to change the defined roles via config-mode you can add
|
||||
|
||||
The role is saved in ``gluon-node-info.system.role``. To change the role using command line do::
|
||||
|
||||
uci set gluon-node-info.@system[0].role="$ROLE"
|
||||
uci set gluon-node-info.system.role="$ROLE"
|
||||
uci commit
|
||||
|
||||
Please replace ``$ROLE`` by the role you want the node to own.
|
||||
|
@ -1,212 +1,57 @@
|
||||
Mesh VPN
|
||||
Mesh-VPN
|
||||
========
|
||||
|
||||
Gluon integrates several layer 2 tunneling protocols to
|
||||
allow connections between local meshes through the internet.
|
||||
Gluon integrates several OSI-Layer 2 tunneling protocols to
|
||||
enable interconnects between local meshes and provide
|
||||
internetwork access. Available protocols currently are:
|
||||
|
||||
Protocol handlers
|
||||
^^^^^^^^^^^^^^^^^
|
||||
- fastd
|
||||
- L2TPv3 (via tunneldigger)
|
||||
|
||||
There are currently three protocol handlers which can be selected
|
||||
via ``GLUON_FEATURES`` in ``site.mk``:
|
||||
|
||||
mesh-vpn-fastd
|
||||
""""""""""""""
|
||||
|
||||
fastd is a lightweight userspace tunneling daemon that
|
||||
fastd is a lightweight userspace tunneling daemon, that
|
||||
implements cipher suites that are specifically designed
|
||||
to work well on embedded devices. It offers encryption
|
||||
and authentication.
|
||||
The primary drawback of fastd's encrypted connection modes
|
||||
is the necessary context switches when forwarding packets.
|
||||
A kernel-supported L2TPv3 offloading option is available to
|
||||
work around the context-switching bottleneck, but it comes
|
||||
at the cost of losing the ability to protect tunnel connections
|
||||
against eavesdropping or manipulation.
|
||||
and authentication. Its primary drawback are the necessary
|
||||
context-switches when forwarding packets.
|
||||
|
||||
mesh-vpn-tunneldigger
|
||||
"""""""""""""""""""""
|
||||
|
||||
Tunneldigger always uses L2TPv3, generally achieving the same
|
||||
performance as fastd with the ``null@l2tp`` method, but offering
|
||||
no security.
|
||||
Tunneldigger's primary drawback is the lack of IPv6 support.
|
||||
It also provides less configurability than fastd.
|
||||
|
||||
mesh-vpn-wireguard
|
||||
""""""""""""""""""
|
||||
|
||||
WireGuard is an encrypted in-kernel tunneling protocol that
|
||||
provides encrypted transmission and at the same time offers
|
||||
high throughput.
|
||||
L2TPv3 is an in-kernel tunneling protocol that performs well,
|
||||
but offers no security properties by itself.
|
||||
The brokering of the tunnel happens through tunneldigger,
|
||||
its primary drawback being the lack of IPv6 support.
|
||||
|
||||
fastd
|
||||
^^^^^
|
||||
-----
|
||||
|
||||
.. _VPN fastd methods:
|
||||
|
||||
Methods
|
||||
"""""""
|
||||
|
||||
fastd offers various different connection "methods" with different
|
||||
security properties that can be configured in the site configuration.
|
||||
|
||||
The following methods are currently recommended:
|
||||
|
||||
- ``salsa2012+umac``: Encrypted + authenticated
|
||||
- ``null+salsa2012+umac``: Unencrypted, authenticated
|
||||
- ``null@l2tp``: Unencrypted, unauthenticated
|
||||
|
||||
Multiple methods can be listed in ``site.conf``. The first listed method
|
||||
supported by both the node and its peer will be used.
|
||||
|
||||
The use of the ``null@l2tp`` method with offloading enabled can provide a
|
||||
considerable performance gain, especially on weaker embedded hardware.
|
||||
For L2TP offloading, the ``mesh-vpn-fastd-l2tp`` feature needs to be enabled in
|
||||
``site.mk``.
|
||||
Configurable Cipher
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
.. _vpn-gateway-configuration:
|
||||
|
||||
Gateway / Supernode Configuration
|
||||
"""""""""""""""""""""""""""""""""
|
||||
|
||||
When only using the ``null`` or ``null@l2tp`` methods without offloading,
|
||||
simply add these methods to the front of the method list. ``null@l2tp``
|
||||
should always appear before ``null`` in the configuration when both are enabled.
|
||||
fastd v22 or newer is needed for the ``null@l2tp`` method.
|
||||
|
||||
It is often not necessary to enable L2TP offloading on supernodes for
|
||||
performance reasons. Nodes using offloading can communicate with supernodes that
|
||||
don't use offloading as long as both use the ``null@l2tp`` method.
|
||||
|
||||
|
||||
.. _vpn-gateway-configuration-offloading:
|
||||
|
||||
Offloading on Gateways / Supernodes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To enable L2TP offloading on the supornodes, it is recommended to study the
|
||||
fastd documentation section pertaining to the `offload configuration option
|
||||
<https://fastd.readthedocs.io/en/stable/manual/config.html#option-offload>`_.
|
||||
|
||||
However, the important changes to the fastd config on your Supernode are:
|
||||
|
||||
- | Set ``mode multitap;``
|
||||
| Every peer gets their own interface.
|
||||
|
||||
- | Replace ``interface "foo":`` with ``interface "peer-%k";``
|
||||
| ``%k`` is substituted for a portion of the peers public key.
|
||||
|
||||
- | Set ``offload l2tp yes;``
|
||||
| This tells fastd to use the l2tp kernel module.
|
||||
|
||||
- | Set ``persist interface no;``
|
||||
| This tells fastd to only keep interfaces around while the connection is active.
|
||||
|
||||
Note that in ``multitap`` mode, which is required when using L2TP offloading,
|
||||
fastd will create one interface per peer on the supernode's. This allows
|
||||
offloading the L2TP forwarding into the kernel space. But this also means added
|
||||
complexity with regards to handling those interfaces.
|
||||
|
||||
There are two main options on how you can handle this:
|
||||
|
||||
- create ``on up`` and ``on down`` hooks
|
||||
|
||||
- to handle interface setup and destruction
|
||||
- preferably using the async keyword, so hooks are not blocking fastd
|
||||
|
||||
- use a daemon like systemd-networkd
|
||||
|
||||
Examples for both options can be found in the
|
||||
`Wiki <https://github.com/freifunk-gluon/gluon/wiki/fastd-l2tp-offloading-on-supernodes>`_.
|
||||
|
||||
Configurable Method
|
||||
"""""""""""""""""""
|
||||
|
||||
From the site configuration, fastd can be allowed to offer
|
||||
From the site configuration fastd can be allowed to offer
|
||||
toggleable encryption in the config mode with the intent to
|
||||
increase throughput.
|
||||
increase throughput, although in practice the gain is minimal.
|
||||
|
||||
There is also an older unprotected method ``null``. Use of the newer
|
||||
``null@l2tp`` method is generally recommended over ``null``, as the
|
||||
performance gains provided by the latter (compared to the encrypted
|
||||
and authenticated methods) are very small.
|
||||
**Site configuration:**
|
||||
|
||||
Site configuration
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
1) Add the feature ``web-mesh-vpn-fastd`` in ``site.mk``
|
||||
2) Set ``mesh_vpn.fastd.configurable = true`` in ``site.conf``
|
||||
3) Optionally add ``null`` to the ``mesh_vpn.fastd.methods`` table if you want "Performance mode" as default (not recommended)
|
||||
|
||||
1)
|
||||
Add the feature ``web-mesh-vpn-fastd`` in ``site.mk``
|
||||
2)
|
||||
Set ``mesh_vpn.fastd.configurable = true`` in ``site.conf``
|
||||
3)
|
||||
Optionally, add ``null@l2tp`` to the ``mesh_vpn.fastd.methods`` table if you want
|
||||
"Performance mode" as default (not recommended)
|
||||
**Gateway configuration:**
|
||||
|
||||
Config Mode
|
||||
~~~~~~~~~~~
|
||||
1) Prepend the ``null`` cipher in fastd's method list
|
||||
|
||||
|
||||
**Config Mode:**
|
||||
The resulting firmware will allow users to choose between secure (encrypted) and fast (unencrypted) transport.
|
||||
|
||||
.. image:: fastd_mode.gif
|
||||
|
||||
To confirm whether the correct cipher is being used, the log output
|
||||
of fastd can be checked using ``logread``.
|
||||
**Unix socket:**
|
||||
To confirm whether the correct cipher is being used, fastds unix
|
||||
socket can be interrogated, after installing for example `socat`.
|
||||
|
||||
WireGuard
|
||||
^^^^^^^^^
|
||||
::
|
||||
|
||||
In order to support WireGuard in Gluon, a few technologies are glued together.
|
||||
|
||||
**VXLAN:** As Gluon typically relies on batman-adv, the Mesh VPN has to provide
|
||||
OSI Layer 2 transport. But WireGuard is an OSI Layer 3 tunneling protocol, so
|
||||
additional technology is necessary here. For this, we use VXLAN. In short, VXLAN
|
||||
is a well-known technology to encapsulate ethernet packages into IP packages.
|
||||
You can think of it as kind of similar to VLAN, but on a different layer. Here,
|
||||
we use VXLAN to transport batman-adv traffic over WireGuard.
|
||||
|
||||
**wgpeerselector**: To connect all gluon nodes to each other, it is common to
|
||||
create a topology where each gluon node is connected to one of the available
|
||||
gateways via Mesh VPN respectively. To achieve this, the gluon node should be
|
||||
able to select a random gateway to connect to. But such "random selection of a
|
||||
peer" is not implemented in WireGuard by default. WireGuard only knows static
|
||||
peers. Therefore the *wgpeerselector* has been developed. It randomly selects a
|
||||
gateway, tries to establish a connection, and if it fails, tries to connect
|
||||
to the next gateway. This approach has several advantages, such as load
|
||||
balancing VPN connection attempts and avoiding problems with offline gateways.
|
||||
More information about the wgpeerselector and its algorithm can be found
|
||||
`here <https://github.com/freifunk-gluon/packages/blob/master/net/wgpeerselector/README.md>`__.
|
||||
|
||||
On the gluon node both VXLAN and the wgpeerselector are well integrated and no
|
||||
explicit configuration of those tools is necessary, once the general WireGuard
|
||||
support has been configured.
|
||||
|
||||
Attention must by paid to time synchronization. As WireGuard
|
||||
performs checks on timestamps in order to avoid replay attacks, time must
|
||||
be synchronized before the Mesh VPN connection is established. This means that
|
||||
the NTP servers specified in your site.conf must be publicly available (and not
|
||||
only through the mesh). Be aware that if you fail this, you may not directly see
|
||||
negative effects. Only when a previously connected node reboots the effect
|
||||
comes into play, as the gateway still knows about the old timestamp of the gluon
|
||||
node.
|
||||
|
||||
gluon-mesh-vpn-key-translate
|
||||
""""""""""""""""""""""""""""
|
||||
|
||||
Many communities already possess a collection of active fastd-keys when they
|
||||
plan migrating their community to WireGuard.
|
||||
These public keys known on the server-side can be derived into their WireGuard
|
||||
equivalent using `gluon-mesh-vpn-key-translate <https://github.com/AiyionPrime/gluon-mesh-vpn-key-translate>`__.
|
||||
The routers do the necessary reencoding of the private key seamlessly
|
||||
when updating firmware from fastd to the WireGuard variant.
|
||||
|
||||
Gateway / Supernode Configuration
|
||||
"""""""""""""""""""""""""""""""""
|
||||
|
||||
On the gateway side, a software called *wireguard-vxlan-glue* is necessary. It
|
||||
is a small daemon that dynamically adds and removes forwarding rules for VXLAN
|
||||
interfaces, so traffic is sent correctly into the WireGuard interface. Thereby
|
||||
the forwarding rules are only installed if a client is connected, so
|
||||
unnecessary traffic in the kernel is avoided. The source can be found
|
||||
`here <https://github.com/freifunkh/wireguard-vxlan-glue/>`__.
|
||||
opkg update
|
||||
opkg install socat
|
||||
socat - UNIX-CONNECT:/var/run/fastd.mesh_vpn.socket
|
||||
|
@ -50,84 +50,38 @@ Configuration
|
||||
Both Mesh-on-WAN and Mesh-on-LAN can be configured on the "Network" page
|
||||
of the *Advanced settings* (if the package ``gluon-web-network`` is installed).
|
||||
|
||||
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by adding
|
||||
the ``mesh`` role to the ``interfaces.*.default_roles`` options in your
|
||||
:ref:`site.conf<user-site-interfaces>`.
|
||||
|
||||
|
||||
.. _wired-mesh-commandline:
|
||||
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by
|
||||
adding ``mesh_on_wan = true`` and ``mesh_on_lan = true`` to ``site.conf``.
|
||||
|
||||
Commandline
|
||||
===========
|
||||
|
||||
Starting with release 2022.1, the wired network configuration is rebuilt from ``/etc/config/gluon``
|
||||
upon each ``gluon-reconfigure``.
|
||||
Therefore the network configuration is overwritten at least with every firmware upgrade.
|
||||
|
||||
Every interface has a list of roles assigned to it which can be ``client``, ``mesh`` or ``uplink``.
|
||||
|
||||
When the client role is assigned to an interface in combination with other roles
|
||||
(like 'client', 'mesh' in the Mesh-on-LAN example below), the other roles take
|
||||
precedence, enabling mesh but not client in the previous example.
|
||||
|
||||
The setup/config-mode interface is every interface with the role ``client`` which makes removing
|
||||
it from interfaces not only unnecessary, but generally unrecommended.
|
||||
|
||||
In order to make persistent changes to the router's configuration it's necessary to:
|
||||
|
||||
* change the sections in ``/etc/config/gluon`` e.g. using uci (see examples below)
|
||||
* call ``gluon-reconfigure`` to re-generate ``/etc/config/network``
|
||||
* apply the networking changes, either through executing ``service network restart`` or by performing a ``reboot``
|
||||
|
||||
Enable Mesh-on-WAN::
|
||||
|
||||
uci add_list gluon.iface_wan.role='mesh'
|
||||
uci commit gluon
|
||||
uci set network.mesh_wan.disabled=0
|
||||
uci commit network
|
||||
|
||||
Disable Mesh-on-WAN::
|
||||
|
||||
uci del_list gluon.iface_wan.role='mesh'
|
||||
uci commit gluon
|
||||
uci set network.mesh_wan.disabled=1
|
||||
uci commit network
|
||||
|
||||
Enable Mesh-on-LAN::
|
||||
|
||||
uci add_list gluon.iface_lan.role='mesh'
|
||||
uci commit gluon
|
||||
uci set network.mesh_lan.disabled=0
|
||||
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||
uci del_list network.client.ifname=$ifname
|
||||
done
|
||||
uci commit network
|
||||
|
||||
Disable Mesh-on-LAN::
|
||||
|
||||
uci del_list gluon.iface_lan.role='mesh'
|
||||
uci commit gluon
|
||||
uci set network.mesh_lan.disabled=1
|
||||
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||
uci add_list network.client.ifname=$ifname
|
||||
done
|
||||
uci commit network
|
||||
|
||||
For devices with a single interface, instead of `iface_lan` and `iface_wan` configuration is
|
||||
done with `iface_single`.
|
||||
|
||||
Enable Mesh-on-Single::
|
||||
|
||||
uci add_list gluon.iface_single.role='mesh'
|
||||
uci commit gluon
|
||||
|
||||
Disable Mesh-on-Single::
|
||||
|
||||
uci del_list gluon.iface_single.role='mesh'
|
||||
uci commit gluon
|
||||
|
||||
Furthermore it is possible to make use of 802.1Q VLAN.
|
||||
The following statements would create a VLAN with id 8 on ``eth0`` and join the mesh network with it::
|
||||
|
||||
uci set gluon.iface_lan_vlan8=interface
|
||||
uci set gluon.iface_lan_vlan8.name='eth0.8'
|
||||
uci add_list gluon.iface_lan_vlan8.role='mesh'
|
||||
uci commit gluon
|
||||
|
||||
Other VLAN-interfaces could be configured on the same parent interface in order to have
|
||||
all three roles available on ``eth0`` without having them interfere with each other.
|
||||
This feature comes in especially handy for the persistent configuration of virtual machines
|
||||
as offloader for bigger installations.
|
||||
|
||||
A ``reboot`` is not sufficient to apply an altered configuration; calling ``gluon-reconfigure`` before is
|
||||
mandatory in order for changes to take effect.
|
||||
|
||||
Please note that this configuration has changed in Gluon 2022.1. Using
|
||||
the old commands on 2022.1 and later will break the corresponding options
|
||||
Please note that this configuration has changed in Gluon 2016.1. Using
|
||||
the old commands on 2016.1 and later will break the corresponding options
|
||||
in the *Advanced settings*.
|
||||
|
@ -2,9 +2,10 @@ WLAN configuration
|
||||
==================
|
||||
|
||||
Gluon allows to configure 2.4GHz and 5GHz radios independently. The configuration
|
||||
may include one or both of the two networks "client" (AP mode) and "mesh" (802.11s
|
||||
mode), which can be used simultaneously. See :doc:`../user/site` for details on the
|
||||
configuration.
|
||||
may include any or all of the three networks "client" (AP mode), "mesh" (802.11s
|
||||
mode) and "ibss" (adhoc mode), which can be used simultaneously (using "mesh" and
|
||||
"ibss" at same time should be avoided though as weaker hardware usually can't handle the additional
|
||||
load). See :doc:`../user/site` for details on the configuration.
|
||||
|
||||
Upgrade behaviour
|
||||
-----------------
|
||||
@ -15,12 +16,19 @@ on upgrades the existing setting is always retained (as this setting may have be
|
||||
by the user). This means that it is not possible to enable or disable an existing network
|
||||
configurations during upgrades.
|
||||
|
||||
For the "mesh" and "ibss" networks, the default setting only has an effect if none
|
||||
of the two has existed before. If a new configuration has been added for "mesh" or "ibss",
|
||||
while the other of the two has already existed before, the enabled/disabled state of the
|
||||
existing configuration will also be set for the new configuration.
|
||||
|
||||
This allows upgrades to change from IBSS to 11s and vice-versa while retaining the
|
||||
"wireless meshing is enabled/disabled" property configured by the user regardless
|
||||
of the used mode.
|
||||
|
||||
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
||||
configured in the site.conf. The channel width will be reset to Gluon's default. If you need to preserve
|
||||
these settings during upgrades you can configure this via the uci section ``gluon-core.wireless``::
|
||||
configured in the site.conf. If you need to preserve a user defined wifi channel during upgrades
|
||||
you can configure this via the uci section ``gluon-core.wireless``::
|
||||
|
||||
uci set gluon.wireless.preserve_channels='1'
|
||||
uci set gluon-core.@wireless[0].preserve_channels='1'
|
||||
|
||||
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
|
||||
Therefore, the Outdoor mode settings won't be displayed in config mode.
|
||||
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
|
||||
|
496
docs/index.rst
@ -6,80 +6,459 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
|
||||
|
||||
|
||||
.. toctree::
|
||||
:caption: User Documentation
|
||||
:maxdepth: 2
|
||||
:caption: User Documentation
|
||||
:maxdepth: 2
|
||||
|
||||
user/getting_started
|
||||
user/site
|
||||
user/supported_devices
|
||||
user/x86
|
||||
user/faq
|
||||
user/mtu
|
||||
user/getting_started
|
||||
user/site
|
||||
user/x86
|
||||
user/faq
|
||||
|
||||
.. toctree::
|
||||
:caption: Features
|
||||
:maxdepth: 2
|
||||
:caption: Features
|
||||
:maxdepth: 2
|
||||
|
||||
features/configmode
|
||||
features/autoupdater
|
||||
features/wlan-configuration
|
||||
features/private-wlan
|
||||
features/wired-mesh
|
||||
features/dns-cache
|
||||
features/monitoring
|
||||
features/multidomain
|
||||
features/authorized-keys
|
||||
features/roles
|
||||
features/vpn
|
||||
features/configmode
|
||||
features/autoupdater
|
||||
features/wlan-configuration
|
||||
features/private-wlan
|
||||
features/wired-mesh
|
||||
features/dns-forwarder
|
||||
features/monitoring
|
||||
features/multidomain
|
||||
features/authorized-keys
|
||||
features/roles
|
||||
features/vpn
|
||||
|
||||
.. toctree::
|
||||
:caption: Developer Documentation
|
||||
:maxdepth: 2
|
||||
:caption: Developer Documentation
|
||||
:maxdepth: 2
|
||||
|
||||
dev/basics
|
||||
dev/hardware
|
||||
dev/packages
|
||||
dev/upgrade
|
||||
dev/uplink
|
||||
dev/mac_addresses
|
||||
dev/site_library
|
||||
dev/build
|
||||
dev/debugging
|
||||
dev/basics
|
||||
dev/hardware
|
||||
dev/packages
|
||||
dev/upgrade
|
||||
dev/wan
|
||||
dev/mac_addresses
|
||||
dev/site_library
|
||||
|
||||
.. toctree::
|
||||
:caption: gluon-web Reference
|
||||
:maxdepth: 1
|
||||
:caption: gluon-web Reference
|
||||
:maxdepth: 1
|
||||
|
||||
dev/web/controller
|
||||
dev/web/model
|
||||
dev/web/view
|
||||
dev/web/i18n
|
||||
dev/web/config-mode
|
||||
dev/web/controller
|
||||
dev/web/model
|
||||
dev/web/view
|
||||
dev/web/i18n
|
||||
dev/web/config-mode
|
||||
|
||||
.. toctree::
|
||||
:caption: Packages
|
||||
:maxdepth: 1
|
||||
:caption: Packages
|
||||
:maxdepth: 1
|
||||
|
||||
package/gluon-client-bridge
|
||||
package/gluon-config-mode-domain-select
|
||||
package/gluon-ebtables-filter-multicast
|
||||
package/gluon-ebtables-filter-ra-dhcp
|
||||
package/gluon-ebtables-limit-arp
|
||||
package/gluon-ebtables-source-filter
|
||||
package/gluon-hoodselector
|
||||
package/gluon-logging
|
||||
package/gluon-mesh-batman-adv
|
||||
package/gluon-mesh-wireless-sae
|
||||
package/gluon-radv-filterd
|
||||
package/gluon-scheduled-domain-switch
|
||||
package/gluon-web-admin
|
||||
package/gluon-web-logging
|
||||
package/gluon-client-bridge
|
||||
package/gluon-config-mode-domain-select
|
||||
package/gluon-ebtables-filter-multicast
|
||||
package/gluon-ebtables-filter-ra-dhcp
|
||||
package/gluon-ebtables-limit-arp
|
||||
package/gluon-ebtables-source-filter
|
||||
package/gluon-radv-filterd
|
||||
package/gluon-scheduled-domain-switch
|
||||
package/gluon-web-admin
|
||||
package/gluon-web-logging
|
||||
|
||||
.. toctree::
|
||||
:caption: Releases
|
||||
:maxdepth: 1
|
||||
:caption: Releases
|
||||
:maxdepth: 1
|
||||
|
||||
releases/index
|
||||
releases/v2018.2.4
|
||||
releases/v2018.2.3
|
||||
releases/v2018.2.2
|
||||
releases/v2018.2.1
|
||||
releases/v2018.2
|
||||
releases/v2018.1.4
|
||||
releases/v2018.1.3
|
||||
releases/v2018.1.2
|
||||
releases/v2018.1.1
|
||||
releases/v2018.1
|
||||
releases/v2017.1.8
|
||||
releases/v2017.1.7
|
||||
releases/v2017.1.6
|
||||
releases/v2017.1.5
|
||||
releases/v2017.1.4
|
||||
releases/v2017.1.3
|
||||
releases/v2017.1.2
|
||||
releases/v2017.1.1
|
||||
releases/v2017.1
|
||||
releases/v2016.2.7
|
||||
releases/v2016.2.6
|
||||
releases/v2016.2.5
|
||||
releases/v2016.2.4
|
||||
releases/v2016.2.3
|
||||
releases/v2016.2.2
|
||||
releases/v2016.2.1
|
||||
releases/v2016.2
|
||||
releases/v2016.1.6
|
||||
releases/v2016.1.5
|
||||
releases/v2016.1.4
|
||||
releases/v2016.1.3
|
||||
releases/v2016.1.2
|
||||
releases/v2016.1.1
|
||||
releases/v2016.1
|
||||
releases/v2015.1.2
|
||||
releases/v2015.1.1
|
||||
releases/v2015.1
|
||||
releases/v2014.4
|
||||
releases/v2014.3.1
|
||||
releases/v2014.3
|
||||
|
||||
|
||||
Supported Devices & Architectures
|
||||
---------------------------------
|
||||
|
||||
ar71xx-generic
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
* 8devices
|
||||
|
||||
- Carambola 2
|
||||
|
||||
* ALFA Network
|
||||
|
||||
- AP121
|
||||
- AP121F
|
||||
- AP121U
|
||||
- Hornet-UB
|
||||
- Tube2H
|
||||
- N2
|
||||
- N5
|
||||
|
||||
* Allnet
|
||||
|
||||
- ALL0315N
|
||||
|
||||
* AVM
|
||||
|
||||
- Fritz!Box 4020 [#avmflash]_
|
||||
- Fritz!WLAN Repeater 300E [#avmflash]_
|
||||
- Fritz!WLAN Repeater 450E [#avmflash]_
|
||||
|
||||
* Buffalo
|
||||
|
||||
- WZR-HP-AG300H / WZR-600DHP
|
||||
- WZR-HP-G300NH
|
||||
- WZR-HP-G300NH2
|
||||
- WZR-HP-G450H
|
||||
|
||||
* D-Link
|
||||
|
||||
- DIR-505 (A1, A2)
|
||||
- DIR-825 (B1)
|
||||
|
||||
* GL Innovations
|
||||
|
||||
- GL-AR150
|
||||
- GL-AR300M
|
||||
- GL-AR750 [#ath10k]_
|
||||
- GL-iNet 6408A (v1)
|
||||
- GL-iNet 6416A (v1)
|
||||
|
||||
* Linksys
|
||||
|
||||
- WRT160NL
|
||||
|
||||
* Netgear
|
||||
|
||||
- WNDR3700 (v1, v2)
|
||||
- WNDR3800
|
||||
- WNDRMAC (v2)
|
||||
|
||||
* OCEDO
|
||||
|
||||
- Koala [#ath10k]_
|
||||
|
||||
* OpenMesh
|
||||
|
||||
- A40
|
||||
- A60
|
||||
- MR600 (v1, v2)
|
||||
- MR900 (v1, v2)
|
||||
- MR1750 (v1, v2) [#ath10k]_
|
||||
- OM2P (v1, v2, v4)
|
||||
- OM2P-HS (v1, v2, v3, v4)
|
||||
- OM2P-LC
|
||||
- OM5P
|
||||
- OM5P-AN
|
||||
- OM5P-AC (v1, v2) [#ath10k]_
|
||||
|
||||
* TP-Link
|
||||
|
||||
- Archer C5 (v1) [#ath10k]_
|
||||
- Archer C59 (v1) [#80211s]_
|
||||
- Archer C7 (v2, v4, v5) [#ath10k]_
|
||||
- CPE210 (v1.0, v1.1, v2.0, v3.0)
|
||||
- CPE220 (v1.1)
|
||||
- CPE510 (v1.0, v1.1)
|
||||
- CPE520 (v1.1)
|
||||
- RE450 [#ath10k]_
|
||||
- TL-WDR3500 (v1)
|
||||
- TL-WDR3600 (v1)
|
||||
- TL-WDR4300 (v1)
|
||||
- TL-WR710N (v1, v2.1)
|
||||
- TL-WR810N (v1)
|
||||
- TL-WR842N/ND (v1, v2, v3)
|
||||
- TL-WR1043N/ND (v1, v2, v3, v4, v5)
|
||||
- TL-WR2543N/ND (v1)
|
||||
- WBS210 (v1.20)
|
||||
- WBS510 (v1.20)
|
||||
|
||||
* Ubiquiti
|
||||
|
||||
- Air Gateway
|
||||
- Air Gateway LR
|
||||
- Air Gateway PRO
|
||||
- Air Router
|
||||
- Bullet M2/M5
|
||||
- Loco M2/M5
|
||||
- Loco M2/M5 XW
|
||||
- Nanostation M2/M5
|
||||
- Nanostation M2/M5 XW
|
||||
- Picostation M2
|
||||
- Rocket M2/M5
|
||||
- Rocket M2/M5 Ti
|
||||
- Rocket M2/M5 XW
|
||||
- UniFi AC Mesh [#ath10k]_
|
||||
- UniFi AC Mesh Pro [#ath10k]_
|
||||
- UniFi AP
|
||||
- UniFi AP AC Lite [#ath10k]_
|
||||
- UniFi AP AC LR [#ath10k]_
|
||||
- UniFi AP AC Pro [#ath10k]_
|
||||
- UniFi AP LR
|
||||
- UniFi AP Pro
|
||||
- UniFi AP Outdoor
|
||||
- UniFi AP Outdoor+
|
||||
|
||||
* Western Digital
|
||||
|
||||
- My Net N600
|
||||
- My Net N750
|
||||
|
||||
* ZyXEL
|
||||
|
||||
- NBG6616 [#ath10k]_
|
||||
|
||||
ar71xx-nand
|
||||
^^^^^^^^^^^
|
||||
|
||||
* Aerohive
|
||||
|
||||
- HiveAP 121
|
||||
|
||||
* Netgear
|
||||
|
||||
- WNDR3700 (v4)
|
||||
- WNDR4300 (v1)
|
||||
|
||||
* ZyXEL
|
||||
|
||||
- NBG6716 [#ath10k]_
|
||||
|
||||
ar71xx-tiny
|
||||
^^^^^^^^^^^
|
||||
|
||||
* D-Link
|
||||
|
||||
- DIR-615 (C1)
|
||||
|
||||
* TP-Link
|
||||
|
||||
- TL-MR13U (v1)
|
||||
- TL-MR3020 (v1)
|
||||
- TL-MR3040 (v1, v2)
|
||||
- TL-MR3220 (v1, v2)
|
||||
- TL-MR3420 (v1, v2)
|
||||
- TL-WA701N/ND (v1, v2)
|
||||
- TL-WA730RE (v1)
|
||||
- TL-WA750RE (v1)
|
||||
- TL-WA801N/ND (v1, v2, v3)
|
||||
- TL-WA830RE (v1, v2)
|
||||
- TL-WA850RE (v1)
|
||||
- TL-WA860RE (v1)
|
||||
- TL-WA901N/ND (v1, v2, v3, v4, v5)
|
||||
- TL-WA7210N (v2)
|
||||
- TL-WA7510N (v1)
|
||||
- TL-WR703N (v1)
|
||||
- TL-WR710N (v2)
|
||||
- TL-WR740N (v1, v3, v4, v5)
|
||||
- TL-WR741N/ND (v1, v2, v4, v5)
|
||||
- TL-WR743N/ND (v1, v2)
|
||||
- TL-WR841N/ND (v3, v5, v7, v8, v9, v10, v11, v12)
|
||||
- TL-WR843N/ND (v1)
|
||||
- TL-WR940N (v1, v2, v3, v4, v5, v6)
|
||||
- TL-WR941ND (v2, v3, v4, v5, v6)
|
||||
|
||||
brcm2708-bcm2708
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
* RaspberryPi 1
|
||||
|
||||
brcm2708-bcm2709
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
* RaspberryPi 2
|
||||
|
||||
|
||||
ipq40xx [#80211s]_
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* AVM
|
||||
|
||||
- FRITZ!Box 4040 [#avmflash]_
|
||||
|
||||
* GL.iNet
|
||||
|
||||
- GL-B1300
|
||||
|
||||
* NETGEAR
|
||||
|
||||
- EX6100v2
|
||||
- EX6150v2
|
||||
|
||||
* OpenMesh
|
||||
|
||||
- A42
|
||||
- A62
|
||||
|
||||
* ZyXEL
|
||||
|
||||
- NBG6617
|
||||
- WRE6606
|
||||
|
||||
mpc85xx-generic
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
* TP-Link
|
||||
|
||||
- TL-WDR4900 (v1)
|
||||
|
||||
mpc85xx-p1020
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
* Aerohive
|
||||
|
||||
- HiveAP 330
|
||||
|
||||
ramips-mt7620 [#80211s]_
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* GL Innovations
|
||||
|
||||
- GL-MT300A
|
||||
- GL-MT300N
|
||||
- GL-MT750
|
||||
|
||||
* Nexx
|
||||
|
||||
- WT3020AD/F/H
|
||||
|
||||
ramips-mt7621
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
* D-Link
|
||||
|
||||
- DIR-860L (B1) [#80211s]_
|
||||
|
||||
* Ubiquiti
|
||||
|
||||
- EdgeRouter X
|
||||
- EdgeRouter X-SFP
|
||||
|
||||
* ZBT
|
||||
|
||||
- WG3526-16M [#80211s]_
|
||||
- WG3526-32M [#80211s]_
|
||||
|
||||
ramips-mt76x8 [#80211s]_
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* GL.iNet
|
||||
|
||||
- GL-MT300N v2
|
||||
|
||||
* NETGEAR
|
||||
|
||||
- R6120
|
||||
|
||||
* TP-Link
|
||||
|
||||
- TL-MR3420 v5
|
||||
- TL-WR841N v13
|
||||
- Archer C50 v3
|
||||
- Archer C50 v4
|
||||
|
||||
* VoCore
|
||||
|
||||
- VoCore2
|
||||
|
||||
ramips-rt305x [#80211s]_
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* A5-V11
|
||||
|
||||
* D-Link
|
||||
|
||||
- DIR-615 (D1, D2, D3, D4, H1)
|
||||
|
||||
* VoCore
|
||||
|
||||
- VoCore (8M, 16M)
|
||||
|
||||
sunxi-cortexa7
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
* LeMaker
|
||||
|
||||
- Banana Pi M1
|
||||
|
||||
x86-generic
|
||||
^^^^^^^^^^^
|
||||
|
||||
* x86-generic
|
||||
* x86-virtualbox
|
||||
* x86-vmware
|
||||
|
||||
See also: :doc:`user/x86`
|
||||
|
||||
x86-geode
|
||||
^^^^^^^^^
|
||||
|
||||
* x86-geode
|
||||
|
||||
See also: :doc:`user/x86`
|
||||
|
||||
x86-64
|
||||
^^^^^^
|
||||
|
||||
* x86-64-generic
|
||||
* x86-64-virtualbox
|
||||
* x86-64-vmware
|
||||
|
||||
See also: :doc:`user/x86`
|
||||
|
||||
Footnotes
|
||||
^^^^^^^^^
|
||||
|
||||
.. [#ath10k]
|
||||
Device uses the ath10k WLAN driver. Images are built for 11s by default unless GLUON_WLAN_MESH
|
||||
is set as described in :ref:`getting-started-make-variables`.
|
||||
|
||||
.. [#80211s]
|
||||
Device or target does not support IBSS. Images are built by default unless
|
||||
GLUON_WLAN_MESH is explicitly set to something other than *11s*. Targets that
|
||||
are affected as a whole may not be selected for build in this case.
|
||||
|
||||
.. [#avmflash]
|
||||
For instructions on how to flash AVM devices, visit https://fritzfla.sh
|
||||
|
||||
License
|
||||
-------
|
||||
@ -91,4 +470,5 @@ See LICENCE_
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
||||
|
@ -21,7 +21,7 @@
|
||||
ip6 = 'fdxx:xxxx:xxxx:xxxx::xxxx',
|
||||
},
|
||||
|
||||
wifi24 = {
|
||||
wifi24= {
|
||||
ap = {
|
||||
ssid = "alpha-centauri.example.org",
|
||||
channel = 1,
|
||||
@ -31,7 +31,7 @@
|
||||
},
|
||||
},
|
||||
|
||||
wifi5 = {
|
||||
wifi5= {
|
||||
ap = {
|
||||
ssid = "alpha-centauri.example.org",
|
||||
channel = 44,
|
||||
@ -41,12 +41,6 @@
|
||||
},
|
||||
},
|
||||
|
||||
mesh = {
|
||||
batman_adv = {
|
||||
routing_algo = 'BATMAN_IV',
|
||||
},
|
||||
},
|
||||
|
||||
mesh_vpn = {
|
||||
fastd = {
|
||||
groups = {
|
||||
|
@ -20,10 +20,10 @@
|
||||
},
|
||||
|
||||
mesh_vpn = {
|
||||
mtu = 1312,
|
||||
|
||||
fastd = {
|
||||
methods = {'salsa2012+umac'},
|
||||
mtu = 1312,
|
||||
},
|
||||
|
||||
bandwidth_limit = {
|
||||
|
@ -12,6 +12,7 @@ GLUON_FEATURES := \
|
||||
ebtables-limit-arp \
|
||||
mesh-batman-adv-15 \
|
||||
mesh-vpn-fastd \
|
||||
radvd \
|
||||
respondd \
|
||||
status-page \
|
||||
web-advanced \
|
||||
@ -29,7 +30,7 @@ GLUON_MULTIDOMAIN=1
|
||||
# chosen feature flags
|
||||
|
||||
|
||||
GLUON_SITE_PACKAGES := iwinfo
|
||||
GLUON_SITE_PACKAGES := haveged iwinfo
|
||||
|
||||
## DEFAULT_GLUON_RELEASE
|
||||
# version string to use for images
|
||||
|
@ -1,17 +1,17 @@
|
||||
gluon-ebtables-limit-arp
|
||||
========================
|
||||
|
||||
The *gluon-ebtables-limit-arp* package adds filters to limit the
|
||||
amount of ARP requests client devices are allowed to send into the
|
||||
mesh.
|
||||
The *gluon-ebtables-limit-arp* package adds filters to limit the
|
||||
amount of ARP requests client devices are allowed to send into the
|
||||
mesh.
|
||||
|
||||
The limits per client device, identified by its MAC address, are
|
||||
6 packets per minute and 1 per second per node in total.
|
||||
6 packets per minute and 1 per second per node in total.
|
||||
A burst of up to 50 ARP requests is allowed until the rate-limiting
|
||||
takes effect (see ``--limit-burst`` in ``ebtables(8)``).
|
||||
|
||||
Furthermore, ARP requests for a target IP already present in the
|
||||
batman-adv DAT cache are excluded from rate-limiting, in regard
|
||||
batman-adv DAT cache are excluded from rate-limiting, in regard
|
||||
to both counting and filtering, as batman-adv will be able
|
||||
to respond locally without a burden for the mesh. Therefore, this
|
||||
limiter should not affect popular target IP addresses, like those
|
||||
@ -21,9 +21,3 @@ However it mitigates the impact on the mesh when a larger range of
|
||||
its IPv4 subnet is being scanned, which would otherwise result in
|
||||
a significant amount of ARP chatter, even for unused IP addresses.
|
||||
|
||||
This package is installed by default if the selected routing
|
||||
feature is *mesh-batman-adv-15*.
|
||||
It can be unselected via::
|
||||
|
||||
GLUON_SITE_PACKAGES := \
|
||||
-gluon-ebtables-limit-arp
|
||||
|
Before Width: | Height: | Size: 291 KiB |
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||
<svg width="13cm" height="9cm" viewBox="348 138 253 169" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g>
|
||||
<rect style="fill: #ffffff" x="389" y="164" width="158" height="115"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="389" y="164" width="158" height="115"/>
|
||||
</g>
|
||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="348" y="150">
|
||||
<tspan x="348" y="150">53.22,</tspan>
|
||||
<tspan x="348" y="166">8.09 #</tspan>
|
||||
</text>
|
||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="545" y="288">
|
||||
<tspan x="545" y="288"># 53.36,</tspan>
|
||||
<tspan x="545" y="304"> 8.32</tspan>
|
||||
</text>
|
||||
</svg>
|
Before Width: | Height: | Size: 996 B |
@ -1,133 +0,0 @@
|
||||
gluon-hoodselector
|
||||
==================
|
||||
|
||||
This package provides an automated way to continuously select the correct
|
||||
domain based on the geolocation of a node. The purpose of Hoodselector is to
|
||||
automatically detect in which domain the node is located based on its
|
||||
geolocation settings. Therefore domains are required to have bounding boxes,
|
||||
defined as polygons or rectangles. Based on this information Hoodselector will
|
||||
select a domain from the list of known domains and migrate towards it without
|
||||
requiring a reboot. This package therefore provides a scalable and
|
||||
decentralized approach to automatic domain selection.
|
||||
|
||||
Background information
|
||||
----------------------
|
||||
|
||||
The main problem of the Nordwest Freifunk community was the quickly rising
|
||||
number of nodes in the network. This indirectly affected the stability of the
|
||||
network, because the noise inside the network, e.g. management traffic from
|
||||
the batman-adv protocol, was rising, too. Inside the community there were some
|
||||
ideas like building separate firmwares for each region. This solution would
|
||||
cause issues with splitting regions again and nodes scattered among regions
|
||||
which belong to a different region. Therefore we decided to develop a
|
||||
dynamic and decentralized management of regions called domains.
|
||||
The Hoodselector's task is to choose the "right" domains in an intelligent way
|
||||
and to hold the network together and accessible.
|
||||
|
||||
A domain is defined by geostationary fixed shapes by using longitude & latitude
|
||||
in combination with the domain configuration system. Below you can see a visual
|
||||
example of a regional domain:
|
||||
|
||||
.. figure:: ./gluon-hoodselector-domainmap.jpeg
|
||||
:alt: Regional domains visualized as shapes defined by latitude & longitude
|
||||
|
||||
© OpenStreetMap contributors
|
||||
|
||||
Behaviour
|
||||
------------------
|
||||
|
||||
The following is an abstract state diagram which gives an overview
|
||||
of the process:
|
||||
|
||||
.. image:: ./gluon-hoodselector.svg
|
||||
|
||||
The sequence of this diagram reflects the priority of its running modes.
|
||||
Each mode will be explained separately below.
|
||||
|
||||
geolocation mode
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This mode will only be entered when a node has location coordinates set.
|
||||
Nodes with a position will set their domain based on it.
|
||||
The node will skip to the next mode when the node (a) has no position or
|
||||
(b) its position is not within any of the defined bounding boxes.
|
||||
|
||||
default domain mode
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This mode will be entered if no other mode before fits.
|
||||
It provides a fallback to the default domain.
|
||||
|
||||
Domain shapes
|
||||
-------------
|
||||
|
||||
There are two types of domains: the unique default one without a defined shape
|
||||
and others which contain shapes.
|
||||
|
||||
* **default domain**
|
||||
|
||||
The default domain doesn't hold any shapes and represents the inverted area of
|
||||
all other shapes held by other domains with geo coordinates. It will only be
|
||||
entered if a node could not be matched to a geo domain. A suggested approach is
|
||||
to define the "old" network as default domain and gradually migrate nodes from
|
||||
there to geo domains.
|
||||
|
||||
* **geo domains**
|
||||
|
||||
A geo domain contains shapes, which are described by three dimensional arrays
|
||||
and represents the geographical size of the domain. There are two possible
|
||||
definitions of these shapes. The first one is using rectangles so that only
|
||||
two coordinates per box are needed to define it (see below for an
|
||||
example). The second one uses polygons which can have multiple edges.
|
||||
Each domain can hold multiple shapes.
|
||||
|
||||
.. image:: ./gluon-hoodselector-rectangle-example.svg
|
||||
|
||||
site.conf
|
||||
---------
|
||||
|
||||
The designer of the shapes must always ensure that no overlapping polygons
|
||||
between domains will be created or else the order in the domain list will
|
||||
become relevant. If for example domain A and B overlap, Hoodselector
|
||||
would, for that overlapping area, only ever reach domain A, but never domain B.
|
||||
Here is an example of a rectangular definition of a shape:
|
||||
Example::
|
||||
|
||||
hoodselector = {
|
||||
shapes = {
|
||||
{
|
||||
{
|
||||
lat = 53.128,
|
||||
lon = 8.187
|
||||
},
|
||||
{
|
||||
lat = 53.163,
|
||||
lon = 8.216
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Here is an example of a shape defined by a triangle:
|
||||
Example::
|
||||
|
||||
hoodselector = {
|
||||
shapes = {
|
||||
{
|
||||
{
|
||||
lat = 53.128,
|
||||
lon = 8.187
|
||||
},
|
||||
{
|
||||
lat = 53.163,
|
||||
lon = 8.216
|
||||
},
|
||||
{
|
||||
lat = 53.196,
|
||||
lon = 8.194
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
This package is incompatible with :doc:`gluon-config-mode-domain-select`.
|
@ -1,291 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="863pt" height="411pt" viewBox="0 0 863 411" version="1.1">
|
||||
<defs>
|
||||
<g>
|
||||
<symbol overflow="visible" id="glyph0-0">
|
||||
<path style="stroke:none;" d="M 0.640625 2.265625 L 0.640625 -9.015625 L 7.03125 -9.015625 L 7.03125 2.265625 Z M 1.359375 1.546875 L 6.328125 1.546875 L 6.328125 -8.296875 L 1.359375 -8.296875 Z M 1.359375 1.546875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-1">
|
||||
<path style="stroke:none;" d="M 1.25 -9.328125 L 2.515625 -9.328125 L 2.515625 -1.0625 L 7.0625 -1.0625 L 7.0625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-2">
|
||||
<path style="stroke:none;" d="M 3.921875 -6.1875 C 3.304688 -6.1875 2.816406 -5.945312 2.453125 -5.46875 C 2.097656 -4.988281 1.921875 -4.332031 1.921875 -3.5 C 1.921875 -2.65625 2.097656 -1.992188 2.453125 -1.515625 C 2.804688 -1.035156 3.296875 -0.796875 3.921875 -0.796875 C 4.535156 -0.796875 5.019531 -1.035156 5.375 -1.515625 C 5.726562 -2.003906 5.90625 -2.664062 5.90625 -3.5 C 5.90625 -4.320312 5.726562 -4.972656 5.375 -5.453125 C 5.019531 -5.941406 4.535156 -6.1875 3.921875 -6.1875 Z M 3.921875 -7.171875 C 4.921875 -7.171875 5.703125 -6.84375 6.265625 -6.1875 C 6.835938 -5.539062 7.125 -4.644531 7.125 -3.5 C 7.125 -2.351562 6.835938 -1.453125 6.265625 -0.796875 C 5.703125 -0.140625 4.921875 0.1875 3.921875 0.1875 C 2.910156 0.1875 2.117188 -0.140625 1.546875 -0.796875 C 0.984375 -1.453125 0.703125 -2.351562 0.703125 -3.5 C 0.703125 -4.644531 0.984375 -5.539062 1.546875 -6.1875 C 2.117188 -6.84375 2.910156 -7.171875 3.921875 -7.171875 Z M 3.921875 -7.171875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-3">
|
||||
<path style="stroke:none;" d="M 4.390625 -3.515625 C 3.460938 -3.515625 2.816406 -3.40625 2.453125 -3.1875 C 2.097656 -2.976562 1.921875 -2.617188 1.921875 -2.109375 C 1.921875 -1.703125 2.050781 -1.378906 2.3125 -1.140625 C 2.582031 -0.898438 2.953125 -0.78125 3.421875 -0.78125 C 4.054688 -0.78125 4.566406 -1.003906 4.953125 -1.453125 C 5.335938 -1.910156 5.53125 -2.515625 5.53125 -3.265625 L 5.53125 -3.515625 Z M 6.671875 -4 L 6.671875 0 L 5.53125 0 L 5.53125 -1.0625 C 5.269531 -0.632812 4.941406 -0.316406 4.546875 -0.109375 C 4.160156 0.0859375 3.679688 0.1875 3.109375 0.1875 C 2.390625 0.1875 1.816406 -0.015625 1.390625 -0.421875 C 0.972656 -0.828125 0.765625 -1.363281 0.765625 -2.03125 C 0.765625 -2.820312 1.023438 -3.414062 1.546875 -3.8125 C 2.078125 -4.21875 2.867188 -4.421875 3.921875 -4.421875 L 5.53125 -4.421875 L 5.53125 -4.53125 C 5.53125 -5.0625 5.351562 -5.46875 5 -5.75 C 4.65625 -6.039062 4.171875 -6.1875 3.546875 -6.1875 C 3.140625 -6.1875 2.75 -6.140625 2.375 -6.046875 C 2 -5.953125 1.632812 -5.8125 1.28125 -5.625 L 1.28125 -6.671875 C 1.695312 -6.835938 2.101562 -6.960938 2.5 -7.046875 C 2.894531 -7.128906 3.28125 -7.171875 3.65625 -7.171875 C 4.675781 -7.171875 5.429688 -6.90625 5.921875 -6.375 C 6.421875 -5.851562 6.671875 -5.0625 6.671875 -4 Z M 6.671875 -4 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-4">
|
||||
<path style="stroke:none;" d="M 5.8125 -5.9375 L 5.8125 -9.71875 L 6.953125 -9.71875 L 6.953125 0 L 5.8125 0 L 5.8125 -1.046875 C 5.570312 -0.628906 5.265625 -0.316406 4.890625 -0.109375 C 4.523438 0.0859375 4.082031 0.1875 3.5625 0.1875 C 2.71875 0.1875 2.03125 -0.148438 1.5 -0.828125 C 0.96875 -1.503906 0.703125 -2.394531 0.703125 -3.5 C 0.703125 -4.59375 0.96875 -5.476562 1.5 -6.15625 C 2.03125 -6.832031 2.71875 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.660156 5.570312 -6.351562 5.8125 -5.9375 Z M 1.890625 -3.5 C 1.890625 -2.644531 2.0625 -1.976562 2.40625 -1.5 C 2.757812 -1.019531 3.238281 -0.78125 3.84375 -0.78125 C 4.457031 -0.78125 4.9375 -1.019531 5.28125 -1.5 C 5.632812 -1.976562 5.8125 -2.644531 5.8125 -3.5 C 5.8125 -4.34375 5.632812 -5.003906 5.28125 -5.484375 C 4.9375 -5.960938 4.457031 -6.203125 3.84375 -6.203125 C 3.238281 -6.203125 2.757812 -5.960938 2.40625 -5.484375 C 2.0625 -5.003906 1.890625 -4.34375 1.890625 -3.5 Z M 1.890625 -3.5 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-5">
|
||||
<path style="stroke:none;" d=""/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-6">
|
||||
<path style="stroke:none;" d="M 6.65625 -5.65625 C 6.9375 -6.164062 7.273438 -6.546875 7.671875 -6.796875 C 8.078125 -7.046875 8.550781 -7.171875 9.09375 -7.171875 C 9.820312 -7.171875 10.382812 -6.914062 10.78125 -6.40625 C 11.175781 -5.894531 11.375 -5.164062 11.375 -4.21875 L 11.375 0 L 10.21875 0 L 10.21875 -4.1875 C 10.21875 -4.851562 10.097656 -5.347656 9.859375 -5.671875 C 9.628906 -6.003906 9.269531 -6.171875 8.78125 -6.171875 C 8.1875 -6.171875 7.710938 -5.972656 7.359375 -5.578125 C 7.015625 -5.179688 6.84375 -4.640625 6.84375 -3.953125 L 6.84375 0 L 5.6875 0 L 5.6875 -4.1875 C 5.6875 -4.863281 5.566406 -5.363281 5.328125 -5.6875 C 5.097656 -6.007812 4.734375 -6.171875 4.234375 -6.171875 C 3.648438 -6.171875 3.179688 -5.96875 2.828125 -5.5625 C 2.484375 -5.164062 2.3125 -4.628906 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.582031 -6.332031 2.898438 -6.648438 3.265625 -6.859375 C 3.628906 -7.066406 4.0625 -7.171875 4.5625 -7.171875 C 5.070312 -7.171875 5.503906 -7.039062 5.859375 -6.78125 C 6.222656 -6.519531 6.488281 -6.144531 6.65625 -5.65625 Z M 6.65625 -5.65625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-7">
|
||||
<path style="stroke:none;" d="M 1.203125 -7 L 2.359375 -7 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 -8.265625 L 1.203125 -8.265625 Z M 1.203125 -9.71875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-8">
|
||||
<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-9">
|
||||
<path style="stroke:none;" d="M 5.671875 -6.796875 L 5.671875 -5.703125 C 5.347656 -5.867188 5.007812 -5.992188 4.65625 -6.078125 C 4.300781 -6.160156 3.9375 -6.203125 3.5625 -6.203125 C 3 -6.203125 2.570312 -6.113281 2.28125 -5.9375 C 2 -5.769531 1.859375 -5.507812 1.859375 -5.15625 C 1.859375 -4.882812 1.957031 -4.671875 2.15625 -4.515625 C 2.363281 -4.367188 2.773438 -4.226562 3.390625 -4.09375 L 3.78125 -4 C 4.601562 -3.832031 5.1875 -3.585938 5.53125 -3.265625 C 5.875 -2.941406 6.046875 -2.5 6.046875 -1.9375 C 6.046875 -1.28125 5.785156 -0.757812 5.265625 -0.375 C 4.753906 0 4.050781 0.1875 3.15625 0.1875 C 2.78125 0.1875 2.390625 0.148438 1.984375 0.078125 C 1.578125 0.00390625 1.144531 -0.101562 0.6875 -0.25 L 0.6875 -1.4375 C 1.113281 -1.21875 1.53125 -1.050781 1.9375 -0.9375 C 2.351562 -0.832031 2.765625 -0.78125 3.171875 -0.78125 C 3.710938 -0.78125 4.128906 -0.875 4.421875 -1.0625 C 4.710938 -1.25 4.859375 -1.507812 4.859375 -1.84375 C 4.859375 -2.15625 4.753906 -2.394531 4.546875 -2.5625 C 4.335938 -2.726562 3.875 -2.890625 3.15625 -3.046875 L 2.765625 -3.140625 C 2.046875 -3.285156 1.53125 -3.515625 1.21875 -3.828125 C 0.90625 -4.140625 0.75 -4.566406 0.75 -5.109375 C 0.75 -5.765625 0.976562 -6.269531 1.4375 -6.625 C 1.90625 -6.988281 2.570312 -7.171875 3.4375 -7.171875 C 3.851562 -7.171875 4.25 -7.140625 4.625 -7.078125 C 5 -7.015625 5.347656 -6.921875 5.671875 -6.796875 Z M 5.671875 -6.796875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-10">
|
||||
<path style="stroke:none;" d="M 2.34375 -8.984375 L 2.34375 -7 L 4.71875 -7 L 4.71875 -6.109375 L 2.34375 -6.109375 L 2.34375 -2.3125 C 2.34375 -1.738281 2.421875 -1.367188 2.578125 -1.203125 C 2.734375 -1.046875 3.050781 -0.96875 3.53125 -0.96875 L 4.71875 -0.96875 L 4.71875 0 L 3.53125 0 C 2.644531 0 2.03125 -0.164062 1.6875 -0.5 C 1.351562 -0.832031 1.1875 -1.4375 1.1875 -2.3125 L 1.1875 -6.109375 L 0.34375 -6.109375 L 0.34375 -7 L 1.1875 -7 L 1.1875 -8.984375 Z M 2.34375 -8.984375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-11">
|
||||
<path style="stroke:none;" d="M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-12">
|
||||
<path style="stroke:none;" d="M 0.703125 -7 L 6.171875 -7 L 6.171875 -5.953125 L 1.84375 -0.921875 L 6.171875 -0.921875 L 6.171875 0 L 0.546875 0 L 0.546875 -1.046875 L 4.875 -6.078125 L 0.703125 -6.078125 Z M 0.703125 -7 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-13">
|
||||
<path style="stroke:none;" d="M 5.8125 -3.578125 C 5.8125 -4.410156 5.640625 -5.054688 5.296875 -5.515625 C 4.953125 -5.972656 4.46875 -6.203125 3.84375 -6.203125 C 3.226562 -6.203125 2.75 -5.972656 2.40625 -5.515625 C 2.0625 -5.054688 1.890625 -4.410156 1.890625 -3.578125 C 1.890625 -2.753906 2.0625 -2.113281 2.40625 -1.65625 C 2.75 -1.195312 3.226562 -0.96875 3.84375 -0.96875 C 4.46875 -0.96875 4.953125 -1.195312 5.296875 -1.65625 C 5.640625 -2.113281 5.8125 -2.753906 5.8125 -3.578125 Z M 6.953125 -0.875 C 6.953125 0.320312 6.6875 1.207031 6.15625 1.78125 C 5.632812 2.363281 4.828125 2.65625 3.734375 2.65625 C 3.328125 2.65625 2.945312 2.625 2.59375 2.5625 C 2.238281 2.507812 1.890625 2.421875 1.546875 2.296875 L 1.546875 1.171875 C 1.890625 1.359375 2.222656 1.492188 2.546875 1.578125 C 2.878906 1.671875 3.21875 1.71875 3.5625 1.71875 C 4.3125 1.71875 4.875 1.519531 5.25 1.125 C 5.625 0.726562 5.8125 0.132812 5.8125 -0.65625 L 5.8125 -1.234375 C 5.570312 -0.816406 5.265625 -0.503906 4.890625 -0.296875 C 4.523438 -0.0976562 4.082031 0 3.5625 0 C 2.707031 0 2.015625 -0.328125 1.484375 -0.984375 C 0.960938 -1.640625 0.703125 -2.503906 0.703125 -3.578125 C 0.703125 -4.660156 0.960938 -5.53125 1.484375 -6.1875 C 2.015625 -6.84375 2.707031 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.648438 5.570312 -6.34375 5.8125 -5.9375 L 5.8125 -7 L 6.953125 -7 Z M 6.953125 -0.875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-14">
|
||||
<path style="stroke:none;" d="M 7.1875 -3.78125 L 7.1875 -3.21875 L 1.90625 -3.21875 C 1.957031 -2.425781 2.195312 -1.820312 2.625 -1.40625 C 3.050781 -1 3.644531 -0.796875 4.40625 -0.796875 C 4.84375 -0.796875 5.269531 -0.847656 5.6875 -0.953125 C 6.101562 -1.066406 6.515625 -1.226562 6.921875 -1.4375 L 6.921875 -0.359375 C 6.515625 -0.179688 6.09375 -0.046875 5.65625 0.046875 C 5.21875 0.140625 4.78125 0.1875 4.34375 0.1875 C 3.21875 0.1875 2.328125 -0.132812 1.671875 -0.78125 C 1.023438 -1.4375 0.703125 -2.320312 0.703125 -3.4375 C 0.703125 -4.582031 1.007812 -5.488281 1.625 -6.15625 C 2.25 -6.832031 3.085938 -7.171875 4.140625 -7.171875 C 5.078125 -7.171875 5.816406 -6.863281 6.359375 -6.25 C 6.910156 -5.644531 7.1875 -4.820312 7.1875 -3.78125 Z M 6.046875 -4.125 C 6.035156 -4.75 5.859375 -5.25 5.515625 -5.625 C 5.171875 -6 4.71875 -6.1875 4.15625 -6.1875 C 3.507812 -6.1875 2.992188 -6.003906 2.609375 -5.640625 C 2.222656 -5.285156 2 -4.78125 1.9375 -4.125 Z M 6.046875 -4.125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-15">
|
||||
<path style="stroke:none;" d="M 6.25 -6.734375 L 6.25 -5.65625 C 5.914062 -5.832031 5.585938 -5.960938 5.265625 -6.046875 C 4.941406 -6.140625 4.613281 -6.1875 4.28125 -6.1875 C 3.53125 -6.1875 2.945312 -5.953125 2.53125 -5.484375 C 2.125 -5.015625 1.921875 -4.351562 1.921875 -3.5 C 1.921875 -2.644531 2.125 -1.976562 2.53125 -1.5 C 2.945312 -1.03125 3.53125 -0.796875 4.28125 -0.796875 C 4.613281 -0.796875 4.941406 -0.835938 5.265625 -0.921875 C 5.585938 -1.015625 5.914062 -1.148438 6.25 -1.328125 L 6.25 -0.265625 C 5.925781 -0.117188 5.59375 -0.0078125 5.25 0.0625 C 4.90625 0.144531 4.539062 0.1875 4.15625 0.1875 C 3.09375 0.1875 2.25 -0.144531 1.625 -0.8125 C 1.007812 -1.476562 0.703125 -2.375 0.703125 -3.5 C 0.703125 -4.632812 1.015625 -5.53125 1.640625 -6.1875 C 2.273438 -6.84375 3.132812 -7.171875 4.21875 -7.171875 C 4.570312 -7.171875 4.914062 -7.132812 5.25 -7.0625 C 5.59375 -6.988281 5.925781 -6.878906 6.25 -6.734375 Z M 6.25 -6.734375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-16">
|
||||
<path style="stroke:none;" d="M 2.3125 -1.046875 L 2.3125 2.65625 L 1.15625 2.65625 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.9375 C 2.5625 -6.351562 2.867188 -6.660156 3.234375 -6.859375 C 3.597656 -7.066406 4.039062 -7.171875 4.5625 -7.171875 C 5.40625 -7.171875 6.09375 -6.832031 6.625 -6.15625 C 7.15625 -5.476562 7.421875 -4.59375 7.421875 -3.5 C 7.421875 -2.394531 7.15625 -1.503906 6.625 -0.828125 C 6.09375 -0.148438 5.40625 0.1875 4.5625 0.1875 C 4.039062 0.1875 3.597656 0.0859375 3.234375 -0.109375 C 2.867188 -0.316406 2.5625 -0.628906 2.3125 -1.046875 Z M 6.234375 -3.5 C 6.234375 -4.34375 6.054688 -5.003906 5.703125 -5.484375 C 5.359375 -5.960938 4.882812 -6.203125 4.28125 -6.203125 C 3.664062 -6.203125 3.179688 -5.960938 2.828125 -5.484375 C 2.484375 -5.003906 2.3125 -4.34375 2.3125 -3.5 C 2.3125 -2.644531 2.484375 -1.976562 2.828125 -1.5 C 3.179688 -1.019531 3.664062 -0.78125 4.28125 -0.78125 C 4.882812 -0.78125 5.359375 -1.019531 5.703125 -1.5 C 6.054688 -1.976562 6.234375 -2.644531 6.234375 -3.5 Z M 6.234375 -3.5 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-17">
|
||||
<path style="stroke:none;" d="M 1.375 -1.59375 L 2.6875 -1.59375 L 2.6875 0 L 1.375 0 Z M 1.375 -1.59375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-18">
|
||||
<path style="stroke:none;" d="M 7.015625 -7 L 4.5 -3.59375 L 7.15625 0 L 5.796875 0 L 3.765625 -2.75 L 1.71875 0 L 0.375 0 L 3.09375 -3.65625 L 0.59375 -7 L 1.953125 -7 L 3.8125 -4.5 L 5.671875 -7 Z M 7.015625 -7 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-19">
|
||||
<path style="stroke:none;" d="M 4.75 -9.71875 L 4.75 -8.765625 L 3.65625 -8.765625 C 3.238281 -8.765625 2.945312 -8.679688 2.78125 -8.515625 C 2.625 -8.347656 2.546875 -8.046875 2.546875 -7.609375 L 2.546875 -7 L 4.4375 -7 L 4.4375 -6.109375 L 2.546875 -6.109375 L 2.546875 0 L 1.390625 0 L 1.390625 -6.109375 L 0.296875 -6.109375 L 0.296875 -7 L 1.390625 -7 L 1.390625 -7.484375 C 1.390625 -8.265625 1.570312 -8.832031 1.9375 -9.1875 C 2.300781 -9.539062 2.875 -9.71875 3.65625 -9.71875 Z M 4.75 -9.71875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-20">
|
||||
<path style="stroke:none;" d="M 2.515625 -8.296875 L 2.515625 -1.03125 L 4.046875 -1.03125 C 5.328125 -1.03125 6.265625 -1.320312 6.859375 -1.90625 C 7.460938 -2.488281 7.765625 -3.410156 7.765625 -4.671875 C 7.765625 -5.921875 7.460938 -6.835938 6.859375 -7.421875 C 6.265625 -8.003906 5.328125 -8.296875 4.046875 -8.296875 Z M 1.25 -9.328125 L 3.84375 -9.328125 C 5.65625 -9.328125 6.984375 -8.953125 7.828125 -8.203125 C 8.671875 -7.453125 9.09375 -6.273438 9.09375 -4.671875 C 9.09375 -3.066406 8.664062 -1.882812 7.8125 -1.125 C 6.96875 -0.375 5.644531 0 3.84375 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-21">
|
||||
<path style="stroke:none;" d="M 5.265625 -5.921875 C 5.128906 -5.992188 4.984375 -6.046875 4.828125 -6.078125 C 4.679688 -6.117188 4.519531 -6.140625 4.34375 -6.140625 C 3.6875 -6.140625 3.179688 -5.925781 2.828125 -5.5 C 2.484375 -5.082031 2.3125 -4.476562 2.3125 -3.6875 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.5625 -6.332031 2.878906 -6.648438 3.265625 -6.859375 C 3.648438 -7.066406 4.117188 -7.171875 4.671875 -7.171875 C 4.753906 -7.171875 4.84375 -7.164062 4.9375 -7.15625 C 5.03125 -7.144531 5.132812 -7.128906 5.25 -7.109375 Z M 5.265625 -5.921875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-22">
|
||||
<path style="stroke:none;" d="M 1.09375 -2.765625 L 1.09375 -7 L 2.234375 -7 L 2.234375 -2.8125 C 2.234375 -2.144531 2.363281 -1.644531 2.625 -1.3125 C 2.882812 -0.976562 3.269531 -0.8125 3.78125 -0.8125 C 4.40625 -0.8125 4.894531 -1.007812 5.25 -1.40625 C 5.613281 -1.800781 5.796875 -2.34375 5.796875 -3.03125 L 5.796875 -7 L 6.953125 -7 L 6.953125 0 L 5.796875 0 L 5.796875 -1.078125 C 5.515625 -0.648438 5.191406 -0.332031 4.828125 -0.125 C 4.460938 0.0820312 4.035156 0.1875 3.546875 0.1875 C 2.742188 0.1875 2.132812 -0.0625 1.71875 -0.5625 C 1.300781 -1.0625 1.09375 -1.796875 1.09375 -2.765625 Z M 1.09375 -2.765625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-23">
|
||||
<path style="stroke:none;" d="M 1.25 -9.328125 L 7.15625 -9.328125 L 7.15625 -8.265625 L 2.515625 -8.265625 L 2.515625 -5.5 L 6.953125 -5.5 L 6.953125 -4.4375 L 2.515625 -4.4375 L 2.515625 -1.0625 L 7.265625 -1.0625 L 7.265625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-24">
|
||||
<path style="stroke:none;" d="M 6.84375 -9.015625 L 6.84375 -7.796875 C 6.363281 -8.023438 5.910156 -8.191406 5.484375 -8.296875 C 5.066406 -8.410156 4.660156 -8.46875 4.265625 -8.46875 C 3.578125 -8.46875 3.046875 -8.332031 2.671875 -8.0625 C 2.296875 -7.800781 2.109375 -7.425781 2.109375 -6.9375 C 2.109375 -6.519531 2.234375 -6.207031 2.484375 -6 C 2.734375 -5.789062 3.203125 -5.625 3.890625 -5.5 L 4.65625 -5.34375 C 5.59375 -5.15625 6.285156 -4.835938 6.734375 -4.390625 C 7.179688 -3.941406 7.40625 -3.335938 7.40625 -2.578125 C 7.40625 -1.671875 7.101562 -0.984375 6.5 -0.515625 C 5.894531 -0.046875 5.007812 0.1875 3.84375 0.1875 C 3.394531 0.1875 2.921875 0.132812 2.421875 0.03125 C 1.929688 -0.0703125 1.414062 -0.21875 0.875 -0.40625 L 0.875 -1.71875 C 1.394531 -1.425781 1.898438 -1.207031 2.390625 -1.0625 C 2.878906 -0.914062 3.363281 -0.84375 3.84375 -0.84375 C 4.5625 -0.84375 5.113281 -0.984375 5.5 -1.265625 C 5.894531 -1.546875 6.09375 -1.953125 6.09375 -2.484375 C 6.09375 -2.941406 5.953125 -3.296875 5.671875 -3.546875 C 5.390625 -3.804688 4.925781 -4.003906 4.28125 -4.140625 L 3.515625 -4.28125 C 2.578125 -4.46875 1.894531 -4.757812 1.46875 -5.15625 C 1.050781 -5.5625 0.84375 -6.117188 0.84375 -6.828125 C 0.84375 -7.660156 1.132812 -8.3125 1.71875 -8.78125 C 2.300781 -9.257812 3.101562 -9.5 4.125 -9.5 C 4.5625 -9.5 5.003906 -9.457031 5.453125 -9.375 C 5.910156 -9.300781 6.375 -9.179688 6.84375 -9.015625 Z M 6.84375 -9.015625 "/>
|
||||
</symbol>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface2229">
|
||||
<rect x="0" y="0" width="863" height="411" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.118086 6.441094 L 9.277656 6.466289 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 9.276094 6.716289 L 9.777656 6.469219 L 9.279023 6.216289 Z M 9.276094 6.716289 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.924336 6.487969 C 15.924336 7.765703 14.559492 8.801445 12.876094 8.801445 C 11.1925 8.801445 9.827656 7.765703 9.827656 6.487969 C 9.827656 5.210234 11.1925 4.174492 12.876094 4.174492 C 14.559492 4.174492 15.924336 5.210234 15.924336 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="176.851562" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-2" x="183.796007" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-3" x="191.573785" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-4" x="199.351562" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-5" x="207.407118" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-4" x="211.573785" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-2" x="219.62934" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-6" x="227.407118" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-3" x="239.907118" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-7" x="247.684896" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-8" x="251.296007" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-9" x="259.351562" y="68.529405"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.949141 6.487969 L 17.296992 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 17.296992 6.737969 L 17.796992 6.487969 L 17.296992 6.237969 Z M 17.296992 6.737969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 69.898438 0 L 147.648438 0 L 147.648438 14.898438 L 69.898438 14.898438 Z M 69.898438 0 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-7" x="69.898438" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-8" x="73.509549" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-7" x="81.565104" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-10" x="85.176215" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-7" x="90.176215" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-3" x="93.787326" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-11" x="101.565104" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-7" x="105.176215" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-12" x="108.787326" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-3" x="115.453993" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-10" x="123.231771" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-7" x="128.231771" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-2" x="131.842882" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-8" x="139.62066" y="11.88878"/>
|
||||
</g>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 324.351562 0 L 439.453125 0 L 439.453125 14.898438 L 324.351562 14.898438 Z M 324.351562 0 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-13" x="324.691406" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-14" x="332.746962" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-2" x="340.52474" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-11" x="348.302517" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-2" x="351.913628" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-15" x="359.691406" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-3" x="366.635851" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-10" x="374.413628" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-7" x="379.413628" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-2" x="383.02474" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-8" x="390.802517" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-5" x="398.858073" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-6" x="403.02474" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-2" x="415.52474" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-4" x="423.302517" y="11.88878"/>
|
||||
<use xlink:href="#glyph0-14" x="431.358073" y="11.88878"/>
|
||||
</g>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.205195 6.487969 C 24.205195 7.495391 22.781758 8.311992 21.026094 8.311992 C 19.270234 8.311992 17.846992 7.495391 17.846992 6.487969 C 17.846992 5.480742 19.270234 4.664141 21.026094 4.664141 C 22.781758 4.664141 24.205195 5.480742 24.205195 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-13" x="339.851562" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-14" x="347.907118" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-2" x="355.684896" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-5" x="363.462674" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-16" x="367.62934" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-2" x="375.684896" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-9" x="383.462674" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-17" x="390.12934" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-5" x="394.296007" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-14" x="398.462674" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-18" x="406.240451" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-7" x="413.740451" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-9" x="417.351562" y="68.529405"/>
|
||||
<use xlink:href="#glyph0-10" x="424.018229" y="68.529405"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.204609 6.467266 L 29.831758 6.430352 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29.83332 6.680352 L 30.331758 6.427031 L 29.830195 6.180352 Z M 29.83332 6.680352 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-19" x="484.898438" y="56.88878"/>
|
||||
<use xlink:href="#glyph0-3" x="489.342882" y="56.88878"/>
|
||||
<use xlink:href="#glyph0-11" x="497.12066" y="56.88878"/>
|
||||
<use xlink:href="#glyph0-9" x="500.731771" y="56.88878"/>
|
||||
<use xlink:href="#glyph0-14" x="507.398438" y="56.88878"/>
|
||||
</g>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.225312 13.150078 C 24.225312 14.040703 22.781172 14.762773 20.999922 14.762773 C 19.218672 14.762773 17.774531 14.040703 17.774531 13.150078 C 17.774531 12.259453 19.218672 11.537383 20.999922 11.537383 C 22.781172 11.537383 24.225312 12.259453 24.225312 13.150078 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-13" x="334.875" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-14" x="342.930556" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-10" x="350.708333" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-5" x="355.708333" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-13" x="359.875" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-14" x="367.930556" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-2" x="375.708333" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-20" x="383.486111" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-2" x="393.208333" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-6" x="400.986111" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-3" x="413.486111" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-7" x="421.263889" y="201.771593"/>
|
||||
<use xlink:href="#glyph0-8" x="424.875" y="201.771593"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.018867 8.336602 L 21.00832 10.987969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.75832 10.986992 L 21.006367 11.487969 L 21.25832 10.988945 Z M 20.75832 10.986992 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-10" x="391.898438" y="129.88878"/>
|
||||
<use xlink:href="#glyph0-21" x="396.898438" y="129.88878"/>
|
||||
<use xlink:href="#glyph0-22" x="402.176215" y="129.88878"/>
|
||||
<use xlink:href="#glyph0-14" x="410.231771" y="129.88878"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.999922 14.786797 L 20.999922 16.078789 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.749922 16.078789 L 20.999922 16.578789 L 21.249922 16.078789 Z M 20.749922 16.078789 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 23.262812 11.97957 L 31.010469 7.972539 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.125312 8.194609 L 31.454609 7.742852 L 30.895625 7.750469 Z M 31.125312 8.194609 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.1925 18.224883 C 24.1925 19.106523 22.763203 19.821172 21.000117 19.821172 C 19.237031 19.821172 17.807734 19.106523 17.807734 18.224883 C 17.807734 17.343438 19.237031 16.628789 21.000117 16.628789 C 22.763203 16.628789 24.1925 17.343438 24.1925 18.224883 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-9" x="335.582031" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-14" x="342.248698" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-10" x="350.026476" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-5" x="355.026476" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-13" x="359.193142" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-14" x="367.248698" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-2" x="375.026476" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-20" x="382.804253" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-2" x="392.526476" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-6" x="400.304253" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-3" x="412.804253" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-7" x="420.582031" y="303.267687"/>
|
||||
<use xlink:href="#glyph0-8" x="424.193142" y="303.267687"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-19" x="479.898438" y="130.13878"/>
|
||||
<use xlink:href="#glyph0-3" x="484.342882" y="130.13878"/>
|
||||
<use xlink:href="#glyph0-11" x="492.12066" y="130.13878"/>
|
||||
<use xlink:href="#glyph0-9" x="495.731771" y="130.13878"/>
|
||||
<use xlink:href="#glyph0-14" x="502.398438" y="130.13878"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-10" x="393.898438" y="248.13878"/>
|
||||
<use xlink:href="#glyph0-21" x="398.898438" y="248.13878"/>
|
||||
<use xlink:href="#glyph0-22" x="404.176215" y="248.13878"/>
|
||||
<use xlink:href="#glyph0-14" x="412.231771" y="248.13878"/>
|
||||
</g>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 23.212227 22.674883 C 23.212227 23.28582 22.221797 23.780938 21.000117 23.780938 C 19.778242 23.780938 18.787812 23.28582 18.787812 22.674883 C 18.787812 22.064141 19.778242 21.568828 21.000117 21.568828 C 22.221797 21.568828 23.212227 22.064141 23.212227 22.674883 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-23" x="371.832031" y="392.267687"/>
|
||||
<use xlink:href="#glyph0-18" x="379.887587" y="392.267687"/>
|
||||
<use xlink:href="#glyph0-7" x="387.387587" y="392.267687"/>
|
||||
<use xlink:href="#glyph0-10" x="390.998698" y="392.267687"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.000117 19.846367 L 21.000117 21.019023 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.750117 21.019023 L 21.000117 21.519023 L 21.250117 21.019023 Z M 20.750117 21.019023 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.094062 6.431133 C 5.094062 7.086211 4.363398 7.617266 3.462031 7.617266 C 2.560664 7.617266 1.83 7.086211 1.83 6.431133 C 1.83 5.776055 2.560664 5.245 3.462031 5.245 C 4.363398 5.245 5.094062 5.776055 5.094062 6.431133 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="17.59375" y="67.392687"/>
|
||||
<use xlink:href="#glyph0-10" x="25.649306" y="67.392687"/>
|
||||
<use xlink:href="#glyph0-3" x="30.649306" y="67.392687"/>
|
||||
<use xlink:href="#glyph0-21" x="38.427083" y="67.392687"/>
|
||||
<use xlink:href="#glyph0-10" x="43.704861" y="67.392687"/>
|
||||
</g>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 574.574219 0.300781 L 712.023438 0.300781 L 712.023438 15.199219 L 574.574219 15.199219 Z M 574.574219 0.300781 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-4" x="574.84375" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-14" x="582.899306" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-19" x="590.677083" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-3" x="595.121528" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-22" x="602.899306" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-11" x="610.954861" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-10" x="614.565972" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-5" x="619.565972" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-4" x="623.732639" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-2" x="631.788194" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-6" x="639.565972" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-3" x="652.065972" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-7" x="659.84375" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-8" x="663.454861" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-5" x="671.510417" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-6" x="675.677083" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-2" x="688.177083" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-4" x="695.954861" y="12.185655"/>
|
||||
<use xlink:href="#glyph0-14" x="704.010417" y="12.185655"/>
|
||||
</g>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.710859 6.402812 C 37.710859 7.414922 36.069844 8.23543 34.04543 8.23543 C 32.021016 8.23543 30.38 7.414922 30.38 6.402812 C 30.38 5.390508 32.021016 4.57 34.04543 4.57 C 36.069844 4.57 37.710859 5.390508 37.710859 6.402812 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-9" x="585.921875" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-14" x="592.588542" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-10" x="600.366319" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-5" x="605.366319" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-4" x="609.532986" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-14" x="617.588542" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-19" x="625.366319" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-3" x="629.810764" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-22" x="637.588542" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-11" x="645.644097" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-10" x="649.255208" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-20" x="654.255208" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-2" x="663.977431" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-6" x="671.755208" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-3" x="684.255208" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-7" x="692.032986" y="66.822374"/>
|
||||
<use xlink:href="#glyph0-8" x="695.644097" y="66.822374"/>
|
||||
</g>
|
||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.962227 6.300078 C 44.962227 6.91082 43.971797 7.406133 42.750117 7.406133 C 41.528242 7.406133 40.537812 6.91082 40.537812 6.300078 C 40.537812 5.689141 41.528242 5.194023 42.750117 5.194023 C 43.971797 5.194023 44.962227 5.689141 44.962227 6.300078 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-23" x="806.832031" y="64.767687"/>
|
||||
<use xlink:href="#glyph0-18" x="814.887587" y="64.767687"/>
|
||||
<use xlink:href="#glyph0-7" x="822.387587" y="64.767687"/>
|
||||
<use xlink:href="#glyph0-10" x="825.998698" y="64.767687"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.735273 6.359258 L 39.988984 6.3325 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.991914 6.5825 L 40.488789 6.326641 L 39.985859 6.082695 Z M 39.991914 6.5825 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 36 KiB |
@ -1,37 +0,0 @@
|
||||
gluon-logging
|
||||
=============
|
||||
|
||||
The *gluon-logging* package allows to configure a remote syslog server that
|
||||
will receive the systems log output that is also visible when calling ``logread``
|
||||
from a terminal.
|
||||
|
||||
It supports both IPv4 and IPv6 endpoints over UDP and TCP.
|
||||
|
||||
Note: The syslog mechanism is incapable of providing a complete log as network
|
||||
access is required to send out log messages and ``logd`` does not buffer and resend
|
||||
older log messages even though they might be available in ``logread``.
|
||||
|
||||
This package conflicts with ``gluon-web-logging`` as it will overwrite the
|
||||
user-given syslog server on every upgrade.
|
||||
|
||||
site.conf
|
||||
---------
|
||||
|
||||
syslog.ip : required
|
||||
- Destination address of the remote syslog server
|
||||
|
||||
syslog.port : optional
|
||||
- Destination port of the remote syslog server
|
||||
- Defaults to 514
|
||||
|
||||
syslog.proto : optional
|
||||
- Protocol to transport syslog frames in, can be either ``tcp`` or ``udp``
|
||||
- Defaults to UDP
|
||||
|
||||
Example::
|
||||
|
||||
syslog = {
|
||||
ip = "2001:db8::1",
|
||||
port = 514,
|
||||
proto = "udp",
|
||||
},
|
@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="931.48547" height="370.93994" id="svg4059" inkscape:version="0.48.1 r9760" sodipodi:docname="bat_v2_black.svg" inkscape:export-filename="/mnt/pandem0nium/pub/incoming/bat_logo_v2/bat_v2_black.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" style="display:inline">
|
||||
<sodipodi:namedview pagecolor="#000000" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="956" inkscape:window-height="1173" id="namedview9" showgrid="false" inkscape:zoom="0.88204281" inkscape:cx="466.24453" inkscape:cy="37.028713" inkscape:window-x="1920" inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="layer2" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" inkscape:snap-nodes="true"/>
|
||||
<defs id="defs4061"/>
|
||||
<metadata id="metadata4064">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:groupmode="layer" id="layer3" inkscape:label="outline" style="display:none" transform="translate(6.26672, 5.9375)">
|
||||
<path style="color:#000000;fill:#ffffff;stroke:none;stroke-width:4.27199984;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 483.25,-3.21875 c -6.08901,48.631979 -35.33662,91.011416 -69.21578,124.91707 -21.83485,21.38244 -47.03966,39.44335 -75.34672,51.17668 5.57969,-19.28428 1.04687,-40.97874 -11.5,-56.59375 2.45626,-29.914047 0.68927,-59.992978 -2.5,-89.78125 -15.98198,19.265018 -27.7684,41.544355 -37.5,64.5 -12.24825,-3.17862 -25.72651,-2.402049 -37.71875,0.46875 C 239.88593,74.102096 226.47693,59.077996 210.625,47.0625 c -3.34092,23.469062 -2.56561,47.559048 0.25,70.875 -6.69043,8.82966 -11.26059,19.42531 -12.0625,30.53125 -1.92921,1.3424 -3.05608,3.45019 -4.6875,0.40625 -20.84238,-21.1131 -32.59851,-48.84198 -44.9375,-75.34375 -14.85679,72.96988 -54.000466,137.54014 -93.508574,199.57505 -20.539303,31.20908 -42.388201,61.40672 -64.085176,91.86245 8.08014534,2.26279 14.376322,-5.17296 21.382238,-7.84546 48.067949,-26.0431 95.020242,-57.97999 149.805262,-67.65454 7.73822,-1.18656 15.65228,-1.74501 23.53125,-1.625 -0.16141,-13.91977 12.35539,-25.87856 26.40625,-24.625 13.02151,-0.10475 25.24921,5.06339 36.71875,10.84375 3.0761,-8.90096 9.56834,-15.98034 17.8125,-20.25 15.98458,27.53202 46.28592,42.98776 75.65932,52.75163 10.28498,3.53684 21.92146,5.33208 32.02818,7.49837 -0.72852,8.29742 2.55832,18.64745 11.71875,20.5625 7.84288,-6.18411 13.7902,-15.27395 22.59202,-19.68372 10.89918,-0.79379 21.80373,-2.64611 32.18923,-5.97253 8.1863,6.12253 18.23881,13.28825 29.03125,9.78125 0.2397,-7.80979 -2.17974,-15.60208 -1.25,-23.34375 14.60652,-14.33722 28.49903,-29.6116 39.75,-46.65625 -31.89112,0.19103 -65.39001,-1.50716 -93.6875,-17.375 12.63668,-0.24322 25.04624,3.36048 36.09375,9.40625 26.41279,-12.24594 57.54458,-3.79641 80.97725,11.3725 5.86994,3.60205 11.37305,7.64719 16.46025,12.19 36.58823,-16.89113 78.56629,-15.82385 118.11934,-12.20623 88.66214,9.36494 173.26796,44.12384 247.50566,92.70623 3.41963,1.85442 7.16209,2.95892 10.78125,4.40625 -11.75164,-20.6658 -29.05422,-37.32743 -43.5,-56.125 C 818.67884,217.58496 746.42668,149.41496 664.49937,94.602513 607.29452,55.830775 546.38636,22.78003 483.5625,-5.9375 c -0.10417,0.90625 -0.20833,1.8125 -0.3125,2.71875 z" id="path3993-5" inkscape:connector-curvature="0"/>
|
||||
</g>
|
||||
<g inkscape:groupmode="layer" id="layer2" inkscape:label="batman-adv" style="display:inline" transform="translate(6.26672, 5.9375)">
|
||||
<g style="display:inline" transform="translate(-51.5312, -495.768)" id="layer1">
|
||||
<path d="m 538.40625,495.76769 c -8.05674,66.9338 -77.31603,151.94452 -154.9375,179.84375 3.27747,-7.40037 5.09375,-15.49392 5.09375,-24 0,-14.42887 -5.21809,-27.70021 -13.96875,-38.3125 1.97025,-21.96404 1.77421,-48.67721 -1.375,-80.59375 -13.0022,16.9579 -23.30307,37.7663 -32.15625,58.78125 -6.27289,-1.8029 -12.93745,-2.78125 -19.84375,-2.78125 -7.73405,0 -15.17627,1.22854 -22.09375,3.46875 -7.42014,-13.90647 -17.47037,-28.11748 -33.78125,-41.59375 -2.4998,23.48832 -1.59267,44.90394 1.6875,63.65625 -8.2866,10.45096 -13.63544,23.35979 -12.0986,32.68414 -4.42484,0.36051 -5.23536,4.01016 -5.31948,6.88419 -19.28312,-16.49687 -32.60091,-39.15698 -47.58192,-72.16208 -13.26705,58.98947 -53.37139,142.16702 -150.5,273.75 61.55905,-33.2251 123.79671,-75.61843 182.8125,-75.78125 4.05468,-25.33145 30.1327,-32.48291 64.65625,-15.15625 4.05331,-9.20658 11.84907,-15.85762 21.59375,-20.21875 12.89223,29.16757 60.06405,56.23506 110.53125,61.78125 -2.71475,10.31567 2.48339,19.28096 6.03125,19.90625 L 457.25,806.89269 c 12.40469,-0.59384 24.70147,-2.7024 36.40625,-6.5625 8.39362,6.41285 17.71829,12.37841 24.1875,10.96875 l -1.71875,-21.125 c 13.74684,-14.03964 23.51218,-23.14064 36.6879,-41.69749 -37.60849,-0.0334 -70.29254,-4.68998 -97.84415,-24.05251 14.31376,-2.87534 30.90137,-1.2243 48.09375,7.71875 48.64496,-20.64584 97.96875,23.25 97.96875,23.25 59.36547,-28.55091 217.47867,-17.57755 366.6875,81.8125 -81.50891,-100.35408 -186.3503,-229.51108 -429.3125,-341.4375 z" id="path3993" style="color:#000000;fill:#000000;stroke:none;stroke-width:4.27199984;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:export-filename="/home/sven/dokumente/bat_logo_v2.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:connector-curvature="0" sodipodi:nodetypes="ccscccscccccccccccccccccccccc"/>
|
||||
<path d="m 287.37698,691.21665 6.32487,6.0769 42.42641,-3.28299 4.04061,-10.85914 -6.08375,5.31015 -38.85662,6.0495 z" id="path4001" style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.77165353;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
|
||||
<path d="m 304.03798,658.90775 c 3.73562,-7.35256 3.37257,-7.75354 27.47128,-14.84657 15.15993,-4.46206 30.11288,-9.25782 32.38025,-2.07348 l 18.53034,-4.86774 0.54842,3.1737 -18.32114,6.49226 c -3.7905,21.99567 -3.66551,19.92566 -20.7106,21.97074 -27.63928,3.31618 -30.32837,6.17704 -39.39348,-6.06083 l -7.32361,1.01015 c -3.77481,8.34177 -0.87651,8.42602 -25.47706,7.6321 -16.18663,-0.52238 -14.20261,-0.23719 -17.22819,-15.14996 -1.35304,-6.66902 -0.33802,-7.91117 21.30347,-5.15085 17.50983,2.23334 17.19396,1.76122 21.20894,8.92319 z" id="path4003" style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.77165353;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="csccccsccssscc"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 7.2 KiB |
@ -1,246 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||
<svg width="28cm" height="12cm" viewBox="239 289 551 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="Background">
|
||||
<g>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
||||
<tspan x="620" y="390">Mesh</tspan>
|
||||
</text>
|
||||
<g>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
||||
<tspan x="270" y="430">Clients</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="IGMP/MLD segmentation">
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #ff0000" x1="490" y1="290" x2="490" y2="510"/>
|
||||
<text font-size="18.0622" style="fill: #ff0000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="500" y="420">
|
||||
<tspan x="500" y="420">IGMP + MLD</tspan>
|
||||
<tspan x="500" y="442.578">Firewall</tspan>
|
||||
</text>
|
||||
<text font-size="12.7998" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="440" y="420">
|
||||
<tspan x="440" y="420">Query</tspan>
|
||||
</text>
|
||||
<text font-size="12.7998" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="310" y="490">
|
||||
<tspan x="310" y="490">Report</tspan>
|
||||
</text>
|
||||
<g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 3; stroke: #800080" x1="435" y1="415" x2="386.5" y2="415"/>
|
||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 3; stroke: #800080" fill-rule="evenodd" points="386.5,410 376.5,415 386.5,420 "/>
|
||||
</g>
|
||||
<g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 3; stroke: #800080" x1="357" y1="485.5" x2="405.5" y2="485.5"/>
|
||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 3; stroke: #800080" fill-rule="evenodd" points="405.5,490.5 415.5,485.5 405.5,480.5 "/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 100 KiB |
@ -1,232 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||
<svg width="29cm" height="12cm" viewBox="219 289 572 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="Background">
|
||||
<g>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
||||
<tspan x="620" y="390">Mesh</tspan>
|
||||
</text>
|
||||
<g>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
||||
<tspan x="270" y="430">Clients</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="to-clients">
|
||||
<g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #800080" x1="440" y1="380" x2="352" y2="380"/>
|
||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 4; stroke: #800080" fill-rule="evenodd" points="352,375 342,380 352,385 "/>
|
||||
</g>
|
||||
<rect style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 20; stroke: #000000" x="220" y="290" width="270" height="220" rx="0" ry="0"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 99 KiB |
@ -1,232 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||
<svg width="29cm" height="12cm" viewBox="239 289 572 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="Background">
|
||||
<g>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
||||
<tspan x="620" y="390">Mesh</tspan>
|
||||
</text>
|
||||
<g>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
||||
<g>
|
||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
||||
</g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
||||
</g>
|
||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
||||
<tspan x="270" y="430">Clients</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="to-mesh">
|
||||
<g>
|
||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #800080" x1="480" y1="380" x2="568" y2="380"/>
|
||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 4; stroke: #800080" fill-rule="evenodd" points="568,385 578,380 568,375 "/>
|
||||
</g>
|
||||
<rect style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 20; stroke: #000000" x="430" y="290" width="380" height="220" rx="0" ry="0"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 99 KiB |
@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="900pt" height="600pt" id="svg2" sodipodi:version="0.32" inkscape:version="0.43" sodipodi:docname="multicast.svg" sodipodi:docbase="/home/cyberix/Desktop">
|
||||
<metadata id="metadata5027">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview inkscape:window-height="555" inkscape:window-width="822" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="1" inkscape:cx="381.10844" inkscape:cy="421.95237" inkscape:window-x="83" inkscape:window-y="46" inkscape:current-layer="svg2"/>
|
||||
<defs id="defs4">
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow2Lend">
|
||||
<path d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " transform="matrix(-1.1,0,0,-1.1,5.5,0)" style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" id="path3334"/>
|
||||
</marker>
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Mstart">
|
||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(0.4,0.4)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3349"/>
|
||||
</marker>
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Lstart">
|
||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(0.8,0.8)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3355"/>
|
||||
</marker>
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow2Mend">
|
||||
<path d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " transform="matrix(-0.6,0,0,-0.6,3,0)" style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" id="path3328"/>
|
||||
</marker>
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Mend">
|
||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(-0.4,-0.4)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3346"/>
|
||||
</marker>
|
||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Lend">
|
||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(-0.8,-0.8)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3352"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<path id="path4261" style="fill:#ff5555;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 223.53106,327.10441 C 223.53106,352.62811 202.95773,373.31911 177.57924,373.31911 C 152.20074,373.31911 131.62741,352.62811 131.62741,327.10441 C 131.62741,301.58081 152.20074,280.88981 177.57924,280.88981 C 202.95773,280.88981 223.53106,301.58081 223.53106,327.10441 z "/>
|
||||
<path id="path4263" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 1037.931,293.05631 C 1037.931,318.58001 1017.3577,339.27101 991.97924,339.27101 C 966.60074,339.27101 946.02741,318.58001 946.02741,293.05631 C 946.02741,267.53271 966.60074,246.84171 991.97924,246.84171 C 1017.3577,246.84171 1037.931,267.53271 1037.931,293.05631 z "/>
|
||||
<path id="path4265" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 632.21606,104.97986 C 632.21606,130.50353 611.64273,151.19455 586.26424,151.19455 C 560.88574,151.19455 540.31241,130.50353 540.31241,104.97986 C 540.31241,79.456184 560.88574,58.765174 586.26424,58.765174 C 611.64273,58.765174 632.21606,79.456184 632.21606,104.97986 z "/>
|
||||
<path id="path4267" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 603.64506,607.83681 C 603.64506,633.36051 583.07173,654.05151 557.69324,654.05151 C 532.31474,654.05151 511.74141,633.36051 511.74141,607.83681 C 511.74141,582.31321 532.31474,561.62221 557.69324,561.62221 C 583.07173,561.62221 603.64506,582.31321 603.64506,607.83681 z "/>
|
||||
<path id="path4269" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 903.64506,147.83696 C 903.64506,173.36063 883.07173,194.05161 857.69324,194.05161 C 832.31474,194.05161 811.74141,173.36063 811.74141,147.83696 C 811.74141,122.31328 832.31474,101.62227 857.69324,101.62227 C 883.07173,101.62227 903.64506,122.31328 903.64506,147.83696 z "/>
|
||||
<path id="path4271" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 817.93106,413.55121 C 817.93106,439.07491 797.35773,459.76591 771.97924,459.76591 C 746.60074,459.76591 726.02741,439.07491 726.02741,413.55121 C 726.02741,388.02761 746.60074,367.33661 771.97924,367.33661 C 797.35773,367.33661 817.93106,388.02761 817.93106,413.55121 z "/>
|
||||
<path id="path4273" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 915.07406,584.97981 C 915.07406,610.50351 894.50073,631.19451 869.12224,631.19451 C 843.74374,631.19451 823.17041,610.50351 823.17041,584.97981 C 823.17041,559.45621 843.74374,538.76521 869.12224,538.76521 C 894.50073,538.76521 915.07406,559.45621 915.07406,584.97981 z "/>
|
||||
<path id="path4277" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 369.68244,325.81177 L 812.01072,165.86573" sodipodi:nodetypes="cc"/>
|
||||
<path id="path4281" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 366.80669,324.95185 L 520.83602,583.62361" sodipodi:nodetypes="cc"/>
|
||||
<path id="path4287" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 368.22207,325.49587 L 828.71412,568.06311" sodipodi:nodetypes="cc"/>
|
||||
<path style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 226.9654,327.86162 L 369.65596,325.86694" id="path1410" sodipodi:nodetypes="cc"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 7.3 KiB |
@ -1,170 +0,0 @@
|
||||
gluon-mesh-batman-adv
|
||||
=====================
|
||||
|
||||
.. image:: gluon-mesh-batman-adv-logo.svg
|
||||
:width: 300 px
|
||||
|
||||
B.A.T.M.A.N. Advanced (often referenced as batman-adv) is an implementation of
|
||||
the B.A.T.M.A.N. routing protocol in form of a linux kernel module operating on layer 2.
|
||||
|
||||
Layer 2 means that all client devices will operate in the same, virtual broadcast
|
||||
domain and will see each other "as if they were connected to one giant switch".
|
||||
|
||||
This comes with a set of advantages (like quick and economical client device roaming,
|
||||
layer 3 protocol agnosticism, broadcast/multicast). But also impediments, especially
|
||||
layer 2 multicast overhead - which Gluon tries to mitigate to achieve a certain degree
|
||||
of scalability. See :doc:`gluon-ebtables-filter-multicast` and
|
||||
:ref:`batman-adv-multicast-architecture` for details.
|
||||
|
||||
B.A.T.M.A.N. Advanced project homepage:
|
||||
|
||||
* https://www.open-mesh.org/projects/batman-adv/wiki/Wiki
|
||||
|
||||
B.A.T.M.A.N. Routing Algorithms
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Two routing algorithms are selectable via
|
||||
:ref:`site.conf mesh section <user-site-mesh>`: BATMAN_IV and BATMAN_V.
|
||||
|
||||
BATMAN_IV - stable
|
||||
""""""""""""""""""
|
||||
|
||||
This is the recommended algorithm to use with `gluon-mesh-batman-adv-15`.
|
||||
|
||||
BATMAN_V - experimental
|
||||
"""""""""""""""""""""""
|
||||
|
||||
This is the experimental B.A.T.M.A.N. routing algorithm. It is packet format /
|
||||
compatibility stable but is still in development.
|
||||
|
||||
For more details, see:
|
||||
|
||||
* https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V
|
||||
|
||||
.. _batman-adv-multicast-architecture:
|
||||
|
||||
Multicast Architecture
|
||||
----------------------
|
||||
|
||||
.. image:: gluon-mesh-batman-adv-multicast.svg
|
||||
:width: 300 px
|
||||
|
||||
While generally broadcast capability is a nice feature of a layer 2
|
||||
mesh protocol, it quickly reaches its limit.
|
||||
|
||||
For meshes with about **50 nodes / 100 clients, or more** it is therefore highly
|
||||
recommended to add the :doc:`gluon-ebtables-filter-multicast`
|
||||
package. Also, with the *mesh-batman-adv-15* feature,
|
||||
:doc:`gluon-ebtables-limit-arp` is selected by default.
|
||||
|
||||
Furthermore, by default IGMP and MLD messages are filtered. See
|
||||
:ref:`site.conf mesh section <user-site-mesh>` and
|
||||
:ref:`igmp-mld-domain-segmentation` for details.
|
||||
|
||||
To achieve some level of scalability for multicast, multicast group
|
||||
awareness is implemented and utilized in the following ways:
|
||||
|
||||
Node-Local Multicast Handling
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-to-clients.svg
|
||||
|
||||
A Gluon node sends IGMP/MLD Queries with the following parameters on its
|
||||
local segment:
|
||||
|
||||
* Interval: 20 seconds
|
||||
* Robustness: 9
|
||||
* Query Response Interval: 5 seconds
|
||||
|
||||
This way, through the returning IGMP/MLD reports, the node learns which
|
||||
multicast groups its clients are interested in.
|
||||
|
||||
This is then used to deliver multicast packets to its own Wifi clients
|
||||
via individual Wifi unicast transmissions instead of a broadcast transmission.
|
||||
|
||||
The advantages of this are:
|
||||
|
||||
* Usually higher bitrates: Mostly lower airtime usage
|
||||
* Acknowledged, retried transmissions (ARQ): Higher reliability
|
||||
* If no local client is interested: Avoiding the transmission, no airtime usage
|
||||
|
||||
Notably multicast for IPv6 Neighbor Discovery usually has only a single
|
||||
multicast listener in the case of address resolution and usually no
|
||||
multicast listener for duplicate address detection. Which are the ideal
|
||||
cases for multicast snooping / multicast to unicast.
|
||||
|
||||
The unicast delivery is achieved through utilizing the multicast-to-unicast
|
||||
feature in OpenWrt/netifd. Which in turn utilizes the multicast-to-unicast
|
||||
conversion and hairpin features of the Linux bridge, plus the hostapd client
|
||||
isolation feature, to hand over full delivery control to the bridge.
|
||||
|
||||
Mesh-wide Multicast Handling
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-to-mesh.svg
|
||||
|
||||
To be able to avoid transmissions not only on the "last mile", the AP interface
|
||||
to the local clients, but also from the "last mile" into the mesh in the future
|
||||
multicast listener state is propagated through the mesh:
|
||||
|
||||
batman-adv (compat 15) taps into the Linux bridge and inherits the multicast
|
||||
groups into its translation table. Which then takes care of efficiently
|
||||
distributing this knowledge to other nodes.
|
||||
|
||||
While by that the receiver side is ready to go, the sender part in batman-adv
|
||||
is disabled for now in Gluon. It will be enabled in a future release.
|
||||
|
||||
.. _igmp-mld-domain-segmentation:
|
||||
|
||||
IGMP/MLD Domain Segmentation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-segmentation.svg
|
||||
|
||||
Internet Group Membership Protocol and Multicast Listener Discovery Protocol
|
||||
are the standardized network protocols to query, report and learn multicast
|
||||
group memberships on the local link for IPv4 (IGMP) and IPv6 (MLD).
|
||||
|
||||
By default Gluon filters IGMP and MLD queries and reports towards the mesh
|
||||
and runs an IGMP/MLD querier on each node for its own local clients.
|
||||
Furthermore Gluon tags the mesh side bridge port (bat0) as a multicast
|
||||
router port.
|
||||
|
||||
That way, even though the Linux client bridge in Gluon is unable to learn
|
||||
about multicast memberships behind other nodes, the multicast router port
|
||||
flag will force it to unconditionally hand over all multicast packets to
|
||||
batman-adv. Which even with IGMP/MLD filtered, will have full multicast
|
||||
membership knowledge through its own propagation through the batman-adv
|
||||
translation table.
|
||||
|
||||
Advantages are:
|
||||
|
||||
* Reduced overhead through reactive batman-adv multicast TT vs.
|
||||
periodic IGMP/MLD messages in the mesh
|
||||
* Increased IGMP/MLD snooping robustness via local, per node
|
||||
IGMP/MLD queriers
|
||||
* DDoS vector mitigation
|
||||
|
||||
**Note:** For nodes running an operating system other than Gluon, but a bridge
|
||||
interface on top of the batman-adv interface, you will need to set the
|
||||
multicast router flag there manually:
|
||||
|
||||
``debian$ echo 2 > /sys/class/net/bat0/brport/multicast_router``
|
||||
|
||||
"2" for this parameter means to always assume a multicast router behind
|
||||
this bridge port and to therefore forward all multicast packets to this
|
||||
port. Versus the default of "1" which means to learn about multicast
|
||||
routers via IGMP/MLD Queries, PIM and MRD messages; or "0" to always
|
||||
assume that there is no multicast router behind this port, meaning
|
||||
to only forward multicast to this port if an according multicast
|
||||
listener on this link was detected.
|
||||
|
||||
Further limitations: IGMP/MLD snooping switches (e.g. "enterprise switches")
|
||||
behind the client network of a node (LAN ports) are unsupported. It is
|
||||
advised to disable IGMP/MLD snooping on those enterprise switches for now
|
||||
or to at least manually mark the port to the Gluon router as a
|
||||
"multicast router port".
|
||||
|
||||
Alternatively, the filtering of IGMP/MLD reports can be disabled via
|
||||
the site.conf (which is not recommended in large meshes though).
|
||||
See :ref:`site.conf mesh section <user-site-mesh>` for details.
|
@ -1,49 +0,0 @@
|
||||
gluon-mesh-wireless-sae
|
||||
=======================
|
||||
|
||||
This package adds support for SAE on 802.11s mesh connections.
|
||||
|
||||
Enabling this package will require all 802.11s mesh connections
|
||||
to be encrypted using the SAE key agreement scheme. The security
|
||||
of SAE relies upon the authentication through a shared secret.
|
||||
|
||||
In the context of public mesh networks a shared secret is an
|
||||
obvious oxymoron. Still, this functionality may provide an improvement
|
||||
over unencrypted mesh connections in that it protects against a
|
||||
passive attacker who did not observe the key agreement. In addition
|
||||
Management Frame Protection (802.11w) gets automatically enabled on
|
||||
wireless mesh interfaces to prevent protocol-level deauthentication attacks.
|
||||
|
||||
If `wifi.mesh.sae` is enabled, a shared secret will automatically be
|
||||
derived from the `prefix6` variable. This is as secure as it gets
|
||||
for a public mesh network.
|
||||
|
||||
For *private* mesh networks `wifi.mesh.sae_passphrase` should be
|
||||
set to your shared secret.
|
||||
|
||||
site.conf
|
||||
---------
|
||||
These settings apply to all 802.11s mesh interfaces on all radios.
|
||||
|
||||
wifi.mesh.sae \: optional
|
||||
- ``true`` enables SAE on 802.11s mesh connections
|
||||
- ``false`` disables SAE on 802.11s mesh connections
|
||||
- defaults to ``false``
|
||||
|
||||
wifi.mesh.sae_passphrase \: optional
|
||||
- sets a shared secret used to authenticate any two mesh nodes,
|
||||
crucial for private mesh networks
|
||||
- should not be set, if the shared secret is shared with untrusted
|
||||
third parties, like in a publish mesh network
|
||||
- defaults to an autogenerated value derived from ``prefix6``
|
||||
|
||||
|
||||
Example::
|
||||
|
||||
wifi = {
|
||||
mesh = {
|
||||
sae = true,
|
||||
-- sae_passphrase = "<shared secret>",
|
||||
},
|
||||
},
|
||||
|
@ -13,32 +13,29 @@ Selected router
|
||||
The router selection mechanism is independent from the batman-adv gateway mode.
|
||||
In contrast, the device originating the router advertisement could be any router
|
||||
or client connected to the mesh, as radv-filterd captures all router
|
||||
advertisements originating from it. All nodes announcing router advertisement
|
||||
advertisements originating from it. All nodes announcing router advertisement
|
||||
**with** a default lifetime greater than 0 are being considered as candidates.
|
||||
|
||||
In case a router is not a batman-adv originator itself, its TQ is defined by
|
||||
the originator it is connected to. This lookup uses the batman-adv global
|
||||
translation table.
|
||||
|
||||
Initially the router is selected by choosing the candidate with the strongest
|
||||
TQ. When another candidate can provide a better TQ metric, that outperforms the
|
||||
currently selected router by X metric units, it will be picked as the new
|
||||
selected router. The hysteresis threshold is configurable and prevents excessive
|
||||
flapping of the gateway.
|
||||
Initially the router is the selected by choosing the candidate with the
|
||||
strongest TQ. When another candidate can provide a better TQ metric it is not
|
||||
picked up as the selected router until it will outperform the currently
|
||||
selected router by X metric units. The hysteresis threshold is configurable
|
||||
and prevents excessive flapping of the gateway.
|
||||
|
||||
Local routers
|
||||
-------------
|
||||
"Local" routers
|
||||
---------------
|
||||
|
||||
Local routers (i.e. local internet gateways connected to some nodes) that are
|
||||
connected to the client interface via cable or WLAN instead of via the mesh
|
||||
(technically: appearing in the transtable_local) are taken into account with a
|
||||
fake TQ of 512, so that they are always preferred.
|
||||
|
||||
Be aware of problems if you plan to use local routers together with the
|
||||
:doc:`gluon-ebtables-filter-ra-dhcp` package. These router advertisements are
|
||||
filtered anyway and reach neither the node nor any other client. Therefore the
|
||||
use of local routers is not possible as long as the package
|
||||
``gluon-radv-filterd`` is used.
|
||||
The package has functionality to select "local" routers, i.e. those connected
|
||||
via cable or WLAN instead of via the mesh (technically: appearing in the
|
||||
``transtable_local``), a fake TQ of 512 so that they are always preferred.
|
||||
However, if used together with the :doc:`gluon-ebtables-filter-ra-dhcp`
|
||||
package, these router advertisements are filtered anyway and reach neither the
|
||||
node nor any other client. You currently have to disable the package or insert
|
||||
custom ebtables rules in order to use local routers.
|
||||
|
||||
respondd module
|
||||
---------------
|
||||
|
@ -3,7 +3,7 @@ gluon-scheduled-domain-switch
|
||||
|
||||
This package allows to switch a routers domain at a given point
|
||||
in time. This is needed for switching between incompatible transport
|
||||
protocols (e.g. wired meshing with and without VXLAN).
|
||||
protocols (e.g. 802.11s and IBSS or VXLAN).
|
||||
|
||||
Nodes will switch when the defined *switch-time* has passed. In case the node was
|
||||
powered off while this was supposed to happen, it might not be able to acquire the
|
||||
@ -15,15 +15,15 @@ site.conf
|
||||
All those settings have to be defined exclusively in the domain, not the site.
|
||||
|
||||
domain_switch : optional (needed for domains to switch)
|
||||
target_domain :
|
||||
- target domain to switch to
|
||||
switch_after_offline_mins :
|
||||
- amount of time without reachable gateway to switch unconditionally
|
||||
switch_time :
|
||||
- UNIX epoch after which domain will be switched
|
||||
connection_check_targets :
|
||||
- array of IPv6 addresses which are probed to determine if the node is
|
||||
connected to the mesh
|
||||
target_domain :
|
||||
- target domain to switch to
|
||||
switch_after_offline_mins :
|
||||
- amount of time without reachable gateway to switch unconditionally
|
||||
switch_time :
|
||||
- UNIX epoch after which domain will be switched
|
||||
connection_check_targets :
|
||||
- array of IPv6 addresses which are probed to determine if the node is
|
||||
connected to the mesh
|
||||
|
||||
Example::
|
||||
|
||||
|
@ -1,129 +0,0 @@
|
||||
Release Notes
|
||||
=============
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2022.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2022.1.4
|
||||
v2022.1.3
|
||||
v2022.1.2
|
||||
v2022.1.1
|
||||
v2022.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2021.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2021.1.2
|
||||
v2021.1.1
|
||||
v2021.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2020.2
|
||||
:maxdepth: 2
|
||||
|
||||
v2020.2.3
|
||||
v2020.2.2
|
||||
v2020.2.1
|
||||
v2020.2
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2020.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2020.1.4
|
||||
v2020.1.3
|
||||
v2020.1.2
|
||||
v2020.1.1
|
||||
v2020.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2019.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2019.1.3
|
||||
v2019.1.2
|
||||
v2019.1.1
|
||||
v2019.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2018.2
|
||||
:maxdepth: 2
|
||||
|
||||
v2018.2.4
|
||||
v2018.2.3
|
||||
v2018.2.2
|
||||
v2018.2.1
|
||||
v2018.2
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2018.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2018.1.4
|
||||
v2018.1.3
|
||||
v2018.1.2
|
||||
v2018.1.1
|
||||
v2018.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2017.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2017.1.8
|
||||
v2017.1.7
|
||||
v2017.1.6
|
||||
v2017.1.5
|
||||
v2017.1.4
|
||||
v2017.1.3
|
||||
v2017.1.2
|
||||
v2017.1.1
|
||||
v2017.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2016.2
|
||||
:maxdepth: 2
|
||||
|
||||
v2016.2.7
|
||||
v2016.2.6
|
||||
v2016.2.5
|
||||
v2016.2.4
|
||||
v2016.2.3
|
||||
v2016.2.2
|
||||
v2016.2.1
|
||||
v2016.2
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2016.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2016.1.6
|
||||
v2016.1.5
|
||||
v2016.1.4
|
||||
v2016.1.3
|
||||
v2016.1.2
|
||||
v2016.1.1
|
||||
v2016.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2015.1
|
||||
:maxdepth: 2
|
||||
|
||||
v2015.1.2
|
||||
v2015.1.1
|
||||
v2015.1
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2014.4
|
||||
:maxdepth: 2
|
||||
|
||||
v2014.4
|
||||
|
||||
.. toctree::
|
||||
:caption: Gluon 2014.3
|
||||
:maxdepth: 2
|
||||
|
||||
v2014.3.1
|
||||
v2014.3
|
||||
|
@ -19,7 +19,7 @@ ar71xx-generic
|
||||
|
||||
- DIR-615 (C1)
|
||||
|
||||
* GL.iNet
|
||||
* GL-Inet
|
||||
|
||||
- 6408A (v1)
|
||||
- 6416A (v1)
|
||||
@ -170,16 +170,16 @@ Site changes
|
||||
for example::
|
||||
|
||||
fastd_mesh_vpn = {
|
||||
methods = {'salsa2012+umac'},
|
||||
mtu = 1426,
|
||||
groups = {
|
||||
backbone = {
|
||||
limit = 2,
|
||||
peers = {
|
||||
-- ...
|
||||
}
|
||||
methods = {'salsa2012+umac'},
|
||||
mtu = 1426,
|
||||
groups = {
|
||||
backbone = {
|
||||
limit = 2,
|
||||
peers = {
|
||||
-- ...
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- ``config_mode``: The config mode messages aren't configured in ``site.conf`` anymore. Instead, they are
|
||||
@ -190,11 +190,11 @@ Site changes
|
||||
in the site i18n files. The ``site.conf`` section becomes::
|
||||
|
||||
roles = {
|
||||
default = 'foo',
|
||||
list = {
|
||||
'foo',
|
||||
'bar',
|
||||
}
|
||||
default = 'foo',
|
||||
list = {
|
||||
'foo',
|
||||
'bar',
|
||||
}
|
||||
}
|
||||
|
||||
The display string use i18n message IDs like ``gluon-luci-node-role:role:foo`` and ``gluon-luci-node-role:role:bar``.
|
||||
|
@ -9,21 +9,21 @@ ar71xx-generic
|
||||
|
||||
* OpenMesh
|
||||
|
||||
- MR600 (v1, v2)
|
||||
- MR900 (v1, v2)
|
||||
- OM2P (v1, v2)
|
||||
- OM2P-HS (v1, v2)
|
||||
- OM2P-LC
|
||||
- OM5P
|
||||
- OM5P-AN
|
||||
- MR600 (v1, v2)
|
||||
- MR900 (v1, v2)
|
||||
- OM2P (v1, v2)
|
||||
- OM2P-HS (v1, v2)
|
||||
- OM2P-LC
|
||||
- OM5P
|
||||
- OM5P-AN
|
||||
|
||||
* Ubiquiti
|
||||
|
||||
- Rocket M XW
|
||||
- Rocket M XW
|
||||
|
||||
* TP-LINK
|
||||
|
||||
- TL-WR841N/ND v11
|
||||
- TL-WR841N/ND v11
|
||||
|
||||
Bugfixes
|
||||
~~~~~~~~
|
||||
|
@ -88,8 +88,6 @@ New features
|
||||
* Add support for making nodes a DNS cache for clients
|
||||
(`#1000 <https://github.com/freifunk-gluon/gluon/pull/1000>`_)
|
||||
|
||||
See also: :doc:`../features/dns-cache`
|
||||
|
||||
* Add L2TP via tunneldigger as an alternative VPN system
|
||||
(`#978 <https://github.com/freifunk-gluon/gluon/pull/978>`_)
|
||||
|
||||
|
@ -28,7 +28,7 @@ Bugfixes
|
||||
As the path to both config mode and status page were changed between versions
|
||||
users could be affected by a redirect to a no more valid URL.
|
||||
|
||||
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt/routing/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
|
||||
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt-routing/packages/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
|
||||
|
||||
Other changes
|
||||
~~~~~~~~~~~~~
|
||||
|
@ -21,7 +21,7 @@ ramips-mt7620
|
||||
ramips-mt76x8
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
* GL.iNet
|
||||
* Gl.iNet
|
||||
|
||||
- MT300N (v2) [#noibss]_
|
||||
|
||||
|
@ -1,64 +0,0 @@
|
||||
Gluon 2019.1.1
|
||||
##############
|
||||
|
||||
Bugfixes
|
||||
********
|
||||
|
||||
* Fixes device alias for Ubiquiti UniFi AC LR. (`#1834 <https://github.com/freifunk-gluon/gluon/issues/1834>`_)
|
||||
Autoupdates on this model were impossible before, since we were missing the proper device alias.
|
||||
|
||||
* Add correct ath10k firmware package for OCEDO Koala. (`#1838 <https://github.com/freifunk-gluon/gluon/pull/1838>`_)
|
||||
|
||||
* Fixes various batman-adv bugs with backports from 2019.4 and 2019.5 by updating the openwrt-routing packages feed.
|
||||
|
||||
* Fixes node role list. (`#1851 <https://github.com/freifunk-gluon/gluon/issues/1851>`_)
|
||||
With Gluon v2019.1 it became impossible to change the role of a node via the config mode.
|
||||
|
||||
Other Changes
|
||||
*************
|
||||
|
||||
* Linux kernel has been updated to either
|
||||
|
||||
- 4.9.207 (ar71xx, brcm2708, mpc85xx) or
|
||||
- 4.14.160 (ipq40xx, ipq806x, mvebu, ramips, sunxi, x86).
|
||||
|
||||
Known issues
|
||||
************
|
||||
|
||||
* Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
* Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,60 +0,0 @@
|
||||
Gluon 2019.1.2
|
||||
##############
|
||||
|
||||
Bugfixes
|
||||
********
|
||||
|
||||
* Fixes a buffer-overflow vulnerability in libubox, a core component of OpenWrt
|
||||
(CVE-2020-7248)
|
||||
|
||||
* Fixes a vulnerability in the OpenWrt package manager (opkg). By using this vulnerability,
|
||||
an attacker could bypass the integrity check of the package artifacts. (CVE-2020-7982)
|
||||
|
||||
Other Changes
|
||||
*************
|
||||
|
||||
* Linux kernel has been updated to either
|
||||
|
||||
- 4.9.211 (ar71xx, brcm2708, mpc85xx) or
|
||||
- 4.14.167 (ipq40xx, ipq806x, mvebu, ramips, sunxi, x86).
|
||||
|
||||
Known issues
|
||||
************
|
||||
|
||||
* Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
* Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,70 +0,0 @@
|
||||
Gluon 2019.1.3
|
||||
==============
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixes a bug in the tunneldigger watchdog where the watchdog would incorrectly find itself while looking up the running tunneldigger process. It then went on and assumed a PID mismatch between the tunneldigger service and its PID file and therefore caused an unnecessary restart of the tunnel. (`#1952 <https://github.com/freifunk-gluon/gluon/issues/1952>`_)
|
||||
|
||||
- Fixes an oversight in the firewalling of the respondd service where queries from prefix listed in ``extra_prefixes6`` would be dropped. (`#1941 <https://github.com/freifunk-gluon/gluon/issues/1941>`_)
|
||||
|
||||
- Fixes a bug in ``gluon-web`` where forms would not correctly update their field visibility on reset. This affected, for example, the private wifi page in the config mode. (`#1970 <https://github.com/freifunk-gluon/gluon/pull/1970>`_)
|
||||
|
||||
- Fixes RX buffer sizing in the ath10k driver to allow for frames larger than 1528 Bytes. (`#1992 <https://github.com/freifunk-gluon/gluon/pull/1992>`_)
|
||||
|
||||
- Fixed handling of mesh interfaces together with outdoor mode, site.conf defaults and config mode (`#2049 <https://github.com/freifunk-gluon/gluon/pull/2049>`_) (`#2054 <https://github.com/freifunk-gluon/gluon/pull/2054>`_)
|
||||
|
||||
- Fixes a bug with perl when building Gluon v2019.1.x with GCC10
|
||||
|
||||
- Fixes a buffer leak in fastd when receiving invalid packets
|
||||
|
||||
Other Changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to either
|
||||
|
||||
- 4.9.237 (ar71xx, brcm2708, mpc85xx) or
|
||||
- 4.14.199 (ipq40xx, ipq806x, mvebu, ramips, sunxi, x86).
|
||||
|
||||
- Backports of batman-adv bugfixes
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
* Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
* Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,287 +0,0 @@
|
||||
Gluon 2019.1
|
||||
############
|
||||
|
||||
Important notes
|
||||
***************
|
||||
|
||||
Gluon v2019.1.x will be the last series of releases to support batman-adv-legacy (v14 compat) and IBSS
|
||||
(Ad-hoc) mesh links. Migration features have been developed and should be used during this release cycle
|
||||
to migrate to batman-adv v15 compat and/or 802.11s mesh links. These migration features are the
|
||||
:doc:`scheduled domain switching <../package/gluon-scheduled-domain-switch>` (since v2018.2.1) and
|
||||
:ref:`batman-adv module coexistence <release-v2019.1-batman-adv-coexistence>` (since v2019.1, see below).
|
||||
The migration must be completed before an upgrade to future Gluon releases (v2019.2 or later) becomes
|
||||
possible.
|
||||
|
||||
With Gluon v2019.1, nodes will not answer respondd queries on ``[ff02::2:1001]:1001`` anymore. Respondd
|
||||
querier setups still using this address must be updated to the new address ``[ff05::2:1001]:1001``
|
||||
(supported since Gluon v2017.1). This change was required due to cross-domain leakage of respondd data.
|
||||
If you are using hopglass-server to query respondd data, you need to update it to at least commit f0e2c0a5.
|
||||
|
||||
If you are upgrading from a version prior to v2018.1, please note that the flash layout on some
|
||||
devices (TP-Link CPE/WBS 210/510) was changed. To avoid upgrade failures, make sure to upgrade
|
||||
to Gluon 2017.1.8 or the latest Gluon 2016.2.x (unreleased) before installing Gluon 2018.1, 2018.2 or 2019.1.
|
||||
|
||||
Added hardware support
|
||||
**********************
|
||||
|
||||
ar71xx-generic
|
||||
==============
|
||||
|
||||
* D-Link
|
||||
|
||||
- DAP-1330 A1
|
||||
|
||||
ar71xx-tiny [#deprecated]_
|
||||
==========================
|
||||
|
||||
* TP-Link
|
||||
|
||||
- TL-WR840N v2
|
||||
|
||||
ipq40xx
|
||||
=======
|
||||
|
||||
* 8devices
|
||||
|
||||
- Jalapeno
|
||||
|
||||
mpc85xx-p1020 [#newtarget]_
|
||||
===========================
|
||||
|
||||
* Aerohive
|
||||
|
||||
- HiveAP 330
|
||||
|
||||
ramips-mt7621
|
||||
=============
|
||||
|
||||
* ASUS
|
||||
|
||||
- RT-AC57U [#noibss]_
|
||||
|
||||
.. [#deprecated]
|
||||
This target will be reaching its end of life soon. This means that support
|
||||
in the next major release of Gluon is doubtful.
|
||||
|
||||
.. [#newtarget]
|
||||
This is a new target.
|
||||
|
||||
.. [#noibss]
|
||||
Device or target does not support AP+IBSS mode: This device or target will not be built
|
||||
when *GLUON_WLAN_MESH* is set to ``ibss``.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
The ``ipq806x`` target has been flagged as broken, as none of its devices are fully supported in this OpenWrt
|
||||
release yet. You might have to update your build scripts accordingly.
|
||||
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
.. _release-v2019.1-batman-adv-coexistence:
|
||||
|
||||
batman-adv coexistence
|
||||
======================
|
||||
|
||||
To allow a migration from B.A.T.M.A.N. Adv. compat 14 this Gluon release offers the ability to ship both
|
||||
B.A.T.M.A.N. Adv. compat versions 14 and 15 in the same image. The ``mesh.batman_adv.routing_algo`` option is used
|
||||
to decide which module gets loaded and the scheduled domain switching functionality can be used to migrate between
|
||||
the two versions.
|
||||
|
||||
Note that if you were using ``gluon-mesh-batman-adv-14`` ("batman-adv-legacy") before you will need to update the
|
||||
``mesh.batman_adv.routing_algo`` setting from ``BATMAN_IV`` to ``BATMAN_IV_LEGACY`` if you want to
|
||||
stay on v14 compat.
|
||||
|
||||
See the :ref:`mesh <user-site-mesh>` section for the *site.conf* configuration of this feature.
|
||||
|
||||
Outdoor Mode
|
||||
============
|
||||
|
||||
Radio devices hosted outdoors are often affected by different regulation than if they were installed indoors. The
|
||||
outdoor mode allows for the reconfiguration of 5 GHz radios onto different channels and channel ranges.
|
||||
Regulatory policies like DFS currently make it difficult to use the 5 GHz band for mesh networking because it's
|
||||
never certain that nodes will stay on the same channel.
|
||||
If enabled, by setting ``wifi5.outdoor_chanlist``, a number of devices that are commonly installed outdoors will
|
||||
have outdoor mode automatically enabled during their initial setup, specifically:
|
||||
|
||||
* Ubiquiti
|
||||
|
||||
- Bullet M
|
||||
- Litebeam M5
|
||||
- Nanostation M5
|
||||
- Nanostation M5 Loco
|
||||
- Rocket M5
|
||||
- Rocket M5 TI
|
||||
- Unifi AC Mesh
|
||||
- Unifi AC Mesh Pro
|
||||
- Unifi Outdoor
|
||||
|
||||
* TP-Link
|
||||
|
||||
- CPE510
|
||||
- WBS510
|
||||
|
||||
See the :ref:`wifi5 <user-site-wifi5>` section for the *site.conf* configuration of this feature.
|
||||
|
||||
Device Deprecation
|
||||
==================
|
||||
|
||||
The ar71xx-tiny and several devices in the ramips-rt305x target have been marked as deprecated. The `GLUON_DEPRECATED`
|
||||
flag was introduced to offer communities the choice on how to deal with the ending support for those devices. Devices
|
||||
or targets marked as deprecated will very likely not be included in following Gluon releases anymore, usually due to
|
||||
their insufficient flash size.
|
||||
|
||||
See the :ref:`Build configuration <user-site-build-configuration>` section for details.
|
||||
|
||||
Hoodselector: Geolocation Mode
|
||||
==============================
|
||||
|
||||
The new hoodselector package allows a node to automatically reevaluate its selected mesh domain at runtime. In this
|
||||
release we support its geolocation feature.
|
||||
|
||||
See the :doc:`../package/gluon-hoodselector` documentation for details.
|
||||
|
||||
|
||||
x86 images support firstboot
|
||||
============================
|
||||
|
||||
x86 images are now using squashfs instead of ext4 and can now have their configuration reset by using ``firstboot``.
|
||||
|
||||
|
||||
Bugfixes
|
||||
********
|
||||
|
||||
* Fixes passwordless SSH access when gluon-authorized-keys was used without gluon-setup-mode.
|
||||
(`#1777 <https://github.com/freifunk-gluon/gluon/issues/1777>`_)
|
||||
|
||||
* Fixes cross-domain leakage of respondd data by not joining the link-local multicast group on br-client. Nodes will
|
||||
not be answering respondd queries on ``[ff02::2:1001]:1001`` anymore. Respondd queries using that address must be
|
||||
updated to the new address ``[ff05::2:1001]:1001``. (`#1701 <https://github.com/freifunk-gluon/gluon/issues/1701>`_)
|
||||
|
||||
|
||||
Site changes
|
||||
************
|
||||
|
||||
When updating a site configuration from Gluon 2018.2.x, the following changes must be made:
|
||||
|
||||
site.mk
|
||||
=======
|
||||
|
||||
* We now require the ``GLUON_DEPRECATED`` variable to be set to decide how to handle the image generation for
|
||||
deprecated devices. (`#1745 <https://github.com/freifunk-gluon/gluon/pull/1745>`_)
|
||||
|
||||
* The variable ``DEVICES`` that controls which devices to build images for has been renamed to ``GLUON_DEVICES``.
|
||||
(`#1686 <https://github.com/freifunk-gluon/gluon/pull/1686>`_)
|
||||
|
||||
* The ``gluon-radvd`` package is now included by default and can be dropped from *FEATURES* and *GLUON_SITE_PACKGES*.
|
||||
|
||||
site.conf
|
||||
=========
|
||||
|
||||
* The ``mesh.batman_adv.routing_algo`` option is now required when the batman-adv routing protocol is used.
|
||||
(`#1622 <https://github.com/freifunk-gluon/gluon/pull/1622>`_)
|
||||
|
||||
To continue using batman-adv v14 compat you need to set this option from ``BATMAN_IV`` to ``BATMAN_IV_LEGACY``.
|
||||
|
||||
* The options ``wifi*.basic_rates`` and ``wifi*.supported_rates`` have been removed, as the legacy 802.11b rates are
|
||||
now disabled by default. (`#1716 <https://github.com/freifunk-gluon/gluon/pull/1716>`_)
|
||||
|
||||
|
||||
Gateway recommendations
|
||||
***********************
|
||||
|
||||
These are recommendations for running non-Gluon nodes, like for example gateways, in your mesh network:
|
||||
|
||||
* Since Gluon v2018.1 the IGMP/MLD segmentation feature was enabled by default. When ``bat0`` is run with a bridge on
|
||||
top the ``bat0`` bridge port should be set to receive all multicast traffic unconditionally:
|
||||
|
||||
::
|
||||
|
||||
# echo 2 > /sys/class/net/bat0/brport/multicast_router
|
||||
|
||||
See the chapter on :ref:`IGMP/MLD Domain Segmentation <igmp-mld-domain-segmentation>` for more details.
|
||||
|
||||
|
||||
Internals
|
||||
*********
|
||||
|
||||
Debug Build Flag
|
||||
================
|
||||
|
||||
Setting ``GLUON_DEBUG=1`` will provide firmware images including debugging symbols usable with GDB or similar tools.
|
||||
Requires a device or target with at least 16 MB of flash space, e.g. `x86-64`. Unset by default.
|
||||
|
||||
Lua target files
|
||||
================
|
||||
|
||||
Target definitions were rewritten in Lua; this was necessary to implement the device deprecation feature. It also
|
||||
offers the option for more flexible tagging of devices in the future.
|
||||
(`#1745 <https://github.com/freifunk-gluon/gluon/pull/1745>`_)
|
||||
|
||||
luacheck
|
||||
========
|
||||
|
||||
Lua scripts can now be properly linted and analyzed using luacheck. Run ``luacheck package scripts target`` in the
|
||||
Gluon project root. (`#1741 <https://github.com/freifunk-gluon/gluon/pull/1741>`_)
|
||||
|
||||
|
||||
Docker build environment
|
||||
========================
|
||||
|
||||
A minimal docker-based build environment is now available in ``contrib/Dockerfile``.
|
||||
(`#1738 <https://github.com/freifunk-gluon/gluon/pull/1738>`_)
|
||||
|
||||
|
||||
Reload of domain-related services
|
||||
=================================
|
||||
|
||||
A mechanism to reload domain related services is now available.
|
||||
(`#1710 <https://github.com/freifunk-gluon/gluon/pull/1710>`_)
|
||||
|
||||
|
||||
.. _releases-v2019.1-known-issues:
|
||||
|
||||
|
||||
Known issues
|
||||
************
|
||||
|
||||
* Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
* Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,61 +0,0 @@
|
||||
Gluon 2020.1.1
|
||||
==============
|
||||
|
||||
This is the first service release for the Gluon 2020.1.x line, fixing regressions reported by
|
||||
the community.
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixed non-working LEDs on TP-Link Archer C5 v1 and Archer C7 v2 after an upgrade to Gluon 2020.1.
|
||||
|
||||
- Fixed an issue which leads to AVM FRITZ!WLAN Repeater 450E devices being stuck in failsafe mode
|
||||
after an upgrade to Gluon 2020.1.
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.171
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
- Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
- The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
- Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
- Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
||||
- High chance of ending in a soft-bricked state for Ubiquiti EdgeRouter-X. Workaround is to
|
||||
repeat initial installation using the serial console. (`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
@ -1,84 +0,0 @@
|
||||
Gluon 2020.1.2
|
||||
==============
|
||||
|
||||
Removed hardware support
|
||||
------------------------
|
||||
|
||||
lantiq-xway
|
||||
~~~~~~~~~~~
|
||||
|
||||
- AVM FRITZ!Box 7320 [#switchports_not_working]_
|
||||
- AVM FRITZ!Box 7330 [#switchports_not_working]_
|
||||
- AVM FRITZ!Box 7330 SL [#switchports_not_working]_
|
||||
|
||||
.. [#switchports_not_working]
|
||||
The switchports on these devices are not working properly (`#1943 <https://github.com/freifunk-gluon/gluon/issues/1943>`_)
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixes a bug in the tunneldigger watchdog where the watchdog would incorrectly find itself while looking up the running tunneldigger process. It then went on and assumed a PID mismatch between the tunneldigger service and its PID file and therefore caused an unnecessary restart of the tunnel. (`#1952 <https://github.com/freifunk-gluon/gluon/issues/1952>`_)
|
||||
|
||||
- Fixes an oversight in the firewalling of the respondd service where queries from prefix listed in ``extra_prefixes6`` would be dropped. (`#1941 <https://github.com/freifunk-gluon/gluon/issues/1941>`_)
|
||||
|
||||
- Fixes a bug in ``gluon-web`` where forms would not correctly update their field visibility on reset. This affected, for example, the private wifi page in the config mode. (`#1970 <https://github.com/freifunk-gluon/gluon/pull/1970>`_)
|
||||
|
||||
- Fixes RX buffer sizing in the ath10k driver to allow for frames larger than 1528 Bytes. (`#1992 <https://github.com/freifunk-gluon/gluon/pull/1992>`_)
|
||||
|
||||
- Fixes a regression in the v4.14 kernel where spurious data bus errors on ar71xx devices would cause a reboot. (`#1994 <https://github.com/freifunk-gluon/gluon/pull/1994>`_)
|
||||
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.176
|
||||
|
||||
|
||||
Internals
|
||||
---------
|
||||
|
||||
- OpenWrt 19.07 introduced the urngd entropy daemon that serves the same function as the haveged service, which we have been recommending. To not have two redundant entropy daemons in this release we remove urngd in favor of haveged in the v2020.1 release series.
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
- High chance of ending in a soft-bricked state for Ubiquiti EdgeRouter-X. Workaround is to
|
||||
repeat initial installation using the serial console. (`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
- Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
- The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
- Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
- Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,57 +0,0 @@
|
||||
Gluon 2020.1.3
|
||||
==============
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixes a bug in musl which can lead to spurious crashes in fastd and other programs, which alternate between single-
|
||||
and multi-threaded operation. (`#2029 <https://github.com/freifunk-gluon/gluon/issues/2029>`_)
|
||||
|
||||
- Fixes a regression which led to around 2.5 MiB higher memory usage for ar71xx-tiny and ramips-rt305x targets.
|
||||
While this decreases the memory usage, the image will become around 64KiB larger. (`#2032 <https://github.com/freifunk-gluon/gluon/issues/2032>`_)
|
||||
|
||||
- Fixes a bug which can cause the TP-Link TL-MR3020 v1 to become stuck in failsafe mode.
|
||||
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.180
|
||||
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
- High chance of ending in a soft-bricked state for Ubiquiti EdgeRouter-X. Workaround is to
|
||||
repeat initial installation using the serial console. (`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
- Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
- The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
- Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
@ -1,47 +0,0 @@
|
||||
Gluon 2020.1.4
|
||||
==============
|
||||
|
||||
Added hardware support
|
||||
----------------------
|
||||
|
||||
- Added support for TP-Link CPE210 3.20 (`#2080 <https://github.com/freifunk-gluon/gluon/issues/2080>`_)
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixed a rare race-condition during mesh interface teardown (`#2057 <https://github.com/freifunk-gluon/gluon/pull/2057>`_)
|
||||
|
||||
- Fixed handling of mesh interfaces together with outdoor mode, site.conf defaults and config mode (`#2049 <https://github.com/freifunk-gluon/gluon/pull/2049>`_) (`#2054 <https://github.com/freifunk-gluon/gluon/pull/2054>`_)
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.193
|
||||
- Backports of batman-adv bugfixes
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the
|
||||
NAND flash which the NAND driver before this release does not handle well.
|
||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
@ -1,240 +0,0 @@
|
||||
Gluon 2020.1
|
||||
============
|
||||
|
||||
This is the first release of Gluon in 2020, based on OpenWrt 19.07. It
|
||||
introduces the ath79 target, which will replace ar71xx in the short
|
||||
term.
|
||||
|
||||
Added hardware support
|
||||
----------------------
|
||||
|
||||
ath79-generic
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- devolo WiFi pro 1200e
|
||||
- devolo WiFi pro 1200i
|
||||
- devolo WiFi pro 1750c
|
||||
- devolo WiFi pro 1750e
|
||||
- devolo WiFi pro 1750i
|
||||
- devolo WiFi pro 1750x
|
||||
- GL.iNet GL-AR300M-Lite
|
||||
- OCEDO Raccoon
|
||||
- TP-Link Archer C6 v2
|
||||
|
||||
ipq40xx-generic
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
- Aruba AP-303
|
||||
- Aruba Instant On AP11
|
||||
- AVM FRITZ!Repeater 1200
|
||||
|
||||
ipq806x-generic
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
- Netgear R7800
|
||||
|
||||
lantiq-xway
|
||||
~~~~~~~~~~~
|
||||
|
||||
- AVM FRITZ!Box 7312
|
||||
- AVM FRITZ!Box 7320
|
||||
- AVM FRITZ!Box 7330
|
||||
- AVM FRITZ!Box 7330 SL
|
||||
|
||||
lantiq-xrx200
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- AVM FRITZ!Box 7360 (v1, v2)
|
||||
- AVM FRITZ!Box 7360 SL
|
||||
- AVM FRITZ!Box 7362 SL
|
||||
- AVM FRITZ!Box 7412
|
||||
|
||||
mpc85xx-p1020
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- Enterasys WS-AP3710i
|
||||
- OCEDO Panda
|
||||
|
||||
ramips-mt7620
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- TP-Link Archer C2 (v1)
|
||||
- TP-Link Archer C20 (v1)
|
||||
- TP-Link Archer C20i
|
||||
- TP-Link Archer C50 (v1)
|
||||
- Xiaomi MiWifi Mini
|
||||
|
||||
ramips-mt7621
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- Netgear EX6150 (v1)
|
||||
- Netgear R6220
|
||||
|
||||
ramips-mt76x8
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- GL.iNet VIXMINI
|
||||
- TP-Link TL-MR3020 (v3)
|
||||
- TP-Link TL-WA801ND (v5)
|
||||
- TP-Link TL-WR902AC (v3)
|
||||
|
||||
Removed hardware support
|
||||
------------------------
|
||||
|
||||
- ALFA Network Hornet-UB [#kernelpartition_too_small]_
|
||||
- ALFA Network Tube2H [#kernelpartition_too_small]_
|
||||
- ALFA Network N2 [#kernelpartition_too_small]_
|
||||
- ALFA Network N5 [#kernelpartition_too_small]_
|
||||
|
||||
.. [#kernelpartition_too_small]
|
||||
The kernel partition on this device is too small to build a working image.
|
||||
|
||||
Major changes
|
||||
-------------
|
||||
|
||||
OpenWrt 19.07
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Gluon v2020.1 is the first release to use OpenWrt 19.07. All targets
|
||||
therefore use Linux 4.14.166.
|
||||
|
||||
batman-adv compat v14 removal
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Support for the long deprecated compat 14 version of batman-adv has been
|
||||
dropped. Communities still using this version should migrate to batman-adv
|
||||
using the scheduled domain switch.
|
||||
|
||||
IBSS wireless mesh removal
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Support for the IBSS wireless protocol has been dropped. Communities
|
||||
still using IBSS are suggested to migrate to 802.11s using the scheduled
|
||||
domain switch.
|
||||
|
||||
Performance enhancements
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We install zram-swap by default on ``ar71xx`` devices with 8MB of flash
|
||||
and 32MB of RAM.
|
||||
|
||||
Renamed targets
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
- The ``ipq40xx`` target was renamed to ``ipq40xx-generic``.
|
||||
- The ``ipq806x`` target was renamed to ``ipq806x-generic``.
|
||||
|
||||
Status Page
|
||||
~~~~~~~~~~~
|
||||
|
||||
- Gateway nexthop information has been added to the status page when batman-adv
|
||||
is used. This includes its MAC address and prettyname as well as the interface
|
||||
name towards the selected gateway.
|
||||
- The site name has been added to the status page. If the node is in a multidomain
|
||||
setup it will also show the domain name.
|
||||
|
||||
DECT button to enter config mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Many AVM devices don't feature a separate RESET/WPS button, therefore
|
||||
starting this release we support entering the config mode via DECT buttons.
|
||||
|
||||
X86 partition size
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The x86 partition size has been reduced to fit on disks with a capacity of 128 MB.
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
Autoupdater aliases
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We have added several new aliases for autoupdater compatibility on
|
||||
the following devices:
|
||||
|
||||
- Ubiquiti UniFi AC LR
|
||||
- Raspberry Pi
|
||||
|
||||
Site changes
|
||||
------------
|
||||
|
||||
site.mk
|
||||
~~~~~~~
|
||||
|
||||
- The ``GLUON_WLAN_MESH`` variable can be dropped, as 802.11s is
|
||||
the only supported wireless transport from now on.
|
||||
|
||||
Internals
|
||||
---------
|
||||
|
||||
Linting Targets
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Support for linter make targets was added.
|
||||
|
||||
- ``make lint``
|
||||
- ``make lint-sh`` to only check shell scripts
|
||||
- ``make lint-lua`` to only check lua scripts
|
||||
|
||||
These require the shellcheck and luacheck tools. The docker image has
|
||||
been updated accordingly.
|
||||
|
||||
Continuous integration
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We have implemented continuous integration testing using Jenkins and thereby
|
||||
ensure that all lua and shell scripts are linted, that the documentation
|
||||
still builds and warnings are highlighted, and that Gluon still
|
||||
compiles, by testing a build on the ``x86_64`` target. We expect this to
|
||||
significantly improve the feedback cycle and quality of contributions.
|
||||
|
||||
Known issues
|
||||
************
|
||||
|
||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the
|
||||
NAND flash which the NAND driver before this release does not handle well.
|
||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
* LEDs on TP-Link Archer C5 v1 and Archer C7 v2 are not working after Upgrade to v2020.1
|
||||
(`#1941 <https://github.com/freifunk-gluon/gluon/issues/1941>`_)
|
||||
|
||||
* AVM FRITZ!WLAN Repeater 450E is stuck in failsafe mode. (`#1940 <https://github.com/freifunk-gluon/gluon/issues/1940>`_)
|
||||
|
||||
* Out of memory situations with high client count on ath9k.
|
||||
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* The MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|
||||
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||
|
||||
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||
|
||||
* Frequent reboots due to out-of-memory or high load due to memory pressure on weak hardware especially in larger
|
||||
meshes (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)
|
||||
|
||||
Optimizations in Gluon 2018.1 have significantly improved memory usage.
|
||||
There are still known bugs leading to unreasonably high load that we hope to
|
||||
solve in future releases.
|
||||
|
@ -1,47 +0,0 @@
|
||||
Gluon 2020.2.1
|
||||
==============
|
||||
|
||||
Added hardware support
|
||||
----------------------
|
||||
|
||||
- Added support for TP-Link CPE210 3.20 (`#2080 <https://github.com/freifunk-gluon/gluon/issues/2080>`_)
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixed handling of *mesh_on_lan* enabled in site configuration (`#2090 <https://github.com/freifunk-gluon/gluon/issues/2090>`_)
|
||||
|
||||
- Fixed build issues with lantiq-xrx200 target by removing unsupported DSL modem packages (`#2087 <https://github.com/freifunk-gluon/gluon/pull/2087>`_)
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.193
|
||||
- Backports of batman-adv bugfixes
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the
|
||||
NAND flash which the NAND driver before this release does not handle well.
|
||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* In configurations not using VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
@ -1,42 +0,0 @@
|
||||
Gluon 2020.2.2
|
||||
==============
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fixed unstable WiFi on some units of the TP-Link Archer C50 v4 (`#2133 <https://github.com/freifunk-gluon/gluon/pull/2133>`_)
|
||||
|
||||
- Fixed CVE-2020-27638 in fastd
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.206
|
||||
- Backports of batman-adv bugfixes
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the
|
||||
NAND flash which the NAND driver before this release does not handle well.
|
||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* In configurations not using VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
@ -1,49 +0,0 @@
|
||||
Gluon 2020.2.3
|
||||
==============
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- LEDs on the ASUS RT-AC51 are now fully functional.
|
||||
|
||||
- Netgear EX6150v1 randomly booting into failsafe mode has been fixed.
|
||||
This happened dependent on the state of the mode setting switch.
|
||||
|
||||
- Dnsmasq has been patched against multiple security issues in its DNS response validation.
|
||||
See the OpenWrt advisory at https://openwrt.org/advisory/2021-01-19-1
|
||||
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
|
||||
- Linux kernel has been updated to 4.14.224
|
||||
- batman-adv fixes were backported from its 2021.0 release
|
||||
- OpenSSL has been updated to 1.1.1k
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the
|
||||
NAND flash which the NAND driver before this release does not handle well.
|
||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
||||
|
||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||
|
||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||
metric.
|
||||
- Throughput values are not correctly acquired for different interface types.
|
||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||
This affects virtual interface types like bridges and VXLAN.
|
||||
|
||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||
|
||||
Reducing the TX power in the Advanced Settings is recommended.
|
||||
|
||||
* In configurations not using VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
||||
|
||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is
|
||||
disallowed).
|
||||
|