Compare commits

..
113 Commits
Author SHA1 Message Date
grossmj 6beab9433b Release v2.2.25 2021-09-14 19:20:10 +09:30
grossmj e59e051961 Merge branch 'master' into 2.2 2021-09-14 18:42:39 +09:30
piotrpekala7 6b3f703f94 Release web UI 2.2.25 2021-09-14 10:35:10 +02:00
grossmj d44a6756c1 Sync appliance files 2021-09-12 18:13:21 +09:30
grossmj 6d10d92af2 Fix images_path -> symbols_path 2021-09-09 16:58:42 +09:30
grossmj a8aeb63c91 No need to find the mountpoint first for disk usage. 2021-09-09 16:58:02 +09:30
grossmj 6f1feed265 Fix issue preventing to use custom nested symbols. Fixes #1969 2021-09-08 15:13:51 +09:30
Jeremy Grossmann e026c1e91f Merge pull request #1967 from GNS3/affinity-symbols
Update affinity symbols
2021-09-07 19:30:53 -07:00
grossmj 40e565d968 Add comment for svgo 2021-09-08 11:33:04 +09:30
grossmj 5162ef2e22 Updated affinity symbols 2021-09-08 01:08:01 +09:30
grossmj 1923c37092 Shell script to update affinity symbols 2021-09-08 01:05:56 +09:30
grossmj 611570a863 Fix qemu-img rebase code to support Qemu 6.1. Ref https://github.com/GNS3/gns3-server/pull/1962 2021-09-05 22:18:46 +09:30
grossmj 99d7d0c769 Merge branch 'master' into 2.2
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
2021-09-05 21:53:36 +09:30
Jeremy Grossmann e42b8cb97c Merge pull request #1963 from GNS3/run-with-qemu-6.1
Qemu 6.1 support
2021-09-05 05:15:23 -07:00
grossmj ed336da304 Qemu 6.1 support
Handle the deprecated use of backing file without explicit backing format issue.
2021-09-05 18:34:37 +09:30
Jeremy Grossmann bcf34d0ec8 Merge pull request #1962 from candlerb/candlerb/1955
Reinstate qemu-img rebase
2021-09-04 22:28:52 -07:00
Brian Candler 21e9f38437 Reinstate qemu-img rebase
This allows importing portable projects with images and/or snapshots,
regression introduced by #1927.

Fixes #1955
2021-09-04 12:34:22 +01:00
grossmj a55c9a5c6a Return disk usage for partition that contains the default project directory. Fixes #1947 2021-09-03 12:04:10 +09:30
Jeremy Grossmann 041d2bd2d6 Merge pull request #1953 from GNS3/revert-1951-disk-usage-all-partitions
Revert "List disk usage for all mount points"
2021-09-02 05:29:53 -07:00
Jeremy Grossmann 51c6f3fa31 Revert "List disk usage for all mount points" 2021-09-02 21:59:09 +09:30
Jeremy Grossmann 83cbcac01b Merge pull request #1951 from GNS3/disk-usage-all-partitions
List disk usage for all mount points
2021-09-01 23:21:19 -07:00
grossmj b1224ce9f6 Update schema description for disk_usage_percent. 2021-09-02 15:48:13 +09:30
grossmj a2367d3c04 List disk usage for all mount points. 2021-09-02 15:43:38 +09:30
grossmj 45e0cbeca2 Merge branch 'master' into 2.2 2021-09-02 14:44:39 +09:30
grossmj 1eaabd6b25 Merge remote-tracking branch 'origin/master' 2021-09-01 19:31:46 +09:30
grossmj 4eb8491cfa Fix tests. Fixes #1950 2021-09-01 19:31:37 +09:30
Jeremy Grossmann b843f94068 Merge pull request #1880 from hrnciar/setuptools
Explicitly require setuptools, utils/get_resource.py imports pkg_resources
2021-08-29 22:06:35 -07:00
Jeremy Grossmann f71e7aac9f Merge branch 'master' into setuptools 2021-08-29 22:01:30 -07:00
grossmj 945e3e3e8e Development on 2.2.25dev1 2021-08-25 21:23:19 +09:30
grossmj 59a89c5f88 Release v2.2.24 2021-08-25 20:31:25 +09:30
grossmj 78c2ded2aa Merge branch 'master' into 2.2 2021-08-25 20:08:26 +09:30
piotrpekala7 6ba40bd5fb Release web UI 2.2.24 2021-08-25 11:57:52 +02:00
grossmj 6005e89181 Fix issue when searching for image with relative path. Fixes #1925 2021-08-25 17:23:21 +09:30
grossmj 27bcb60580 Sync appliance files. 2021-08-24 21:21:18 +09:30
grossmj 93711fe060 Update dependencies 2021-08-24 21:12:27 +09:30
grossmj 363fdb7d10 Fix wrong error when NAT interface is not allowed. Fixes #1943 2021-08-24 20:40:06 +09:30
grossmj 92150fba71 Fix incorrect Qemu binary selected when importing template. Fixes https://github.com/GNS3/gns3-gui/issues/3216 2021-08-24 17:26:06 +09:30
grossmj c4c71cc838 Fix error when updating a link style. Fixes https://github.com/GNS3/gns3-gui/issues/2461 2021-08-24 11:35:33 +09:30
grossmj 8aada49414 Some fixes for early support for Python3.10
The loop parameter has been removed from most of asyncio‘s high-level API following deprecation in Python 3.8.
2021-08-15 15:25:33 +09:30
grossmj 496170b4e5 Early support for Python3.10 Fixes #1940 2021-08-15 15:09:48 +09:30
Jeremy Grossmann 731152c75a Merge pull request #1938 from GNS3/dependabot/pip/pywin32-301
Bump pywin32 from 300 to 301
2021-08-09 17:59:35 -07:00
dependabot[bot] 2897325f36 Bump pywin32 from 300 to 301
Bumps [pywin32](https://github.com/mhammond/pywin32) from 300 to 301.
- [Release notes](https://github.com/mhammond/pywin32/releases)
- [Changelog](https://github.com/mhammond/pywin32/blob/master/CHANGES.txt)
- [Commits](https://github.com/mhammond/pywin32/commits)

---
updated-dependencies:
- dependency-name: pywin32
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-09 20:45:46 +00:00
grossmj 8c0899d086 Development on 2.2.24dev1 2021-08-05 21:16:10 +09:30
grossmj d5c73f4ba4 Release v2.2.23 2021-08-05 15:58:54 +09:30
grossmj 77487e4fc3 Merge branch 'master' into 2.2 2021-08-05 15:54:16 +09:30
grossmj 754f55b01b Sync appliance files. 2021-08-05 15:53:12 +09:30
Jeremy Grossmann b68f7a78a7 Merge pull request #1927 from candlerb/candlerb/1921
Support cloning of encrypted qcow2 base image files
2021-08-04 23:19:23 -07:00
piotrpekala7 6c36beb97f Release web UI 2.2.23 2021-08-04 10:59:50 +02:00
Jeremy Grossmann c231ae77e5 Merge pull request #1935 from rarylson/detect-kms-support
Update `remote-install.sh` with flag for KMS support and fix hostname inconsistencies
2021-08-01 15:28:42 -07:00
Rarylson Freitas e5a76fcf44 Fix hostname inconsistencies during script execution
When `--with-iou` and `--with-openvpn` are both enabled, hostname
were updated in `/etc/hostname` but not on the running system (only
changed after reboot). So the old hostname were used in MOTD and
client OpenVPN config URL.
2021-08-01 17:49:27 -03:00
Rarylson Freitas d926a713b9 Add option --without-kvm
Some cloud providers (example, AWS EC2 for non-metal instances) do not
support nested virtualization, as well as some hypervisors (example,
VirtualBox prior to 6.x, Hyper-V on AMD). Option `--without-kvm` can
be used to disable hardware acceleration in these scenarios. Otherwise,
user will receive error when trying to start Qemu-based devices.

Commit also: replace `enable_kvm` and `require_kvm` with newer config
options (`enable_hardware_acceleration` and
`require_hardware_acceleration`); and do some code refactors.

One can argue that, instead of prividing option `--without-kvm`, we
should check if system supports KVM and enable/disable hardware
acceleration accordingly. However, there is the case when the
hypervisor supports nested virtualization, but feature is just disabled.
The chosen approach for this case is to keep KVM enabled and let user
known (user will eventually receive an error) so user can fix it.
Otherwise, user might never know and suffer from performance
degradation.
2021-08-01 17:47:28 -03:00
grossmj 1a24ebfc19 Add a reload server endpoint. Fixes #1926 2021-08-01 16:20:30 +09:30
Jeremy Grossmann 6cf268ca93 Merge pull request #1934 from GNS3/handle_no-kvm_deprecated
Handle -no-kvm param deprecated in Qemu >= v5.2
2021-07-27 17:37:41 +09:30
Jeremy Grossmann 214bef9d06 Merge pull request #1932 from GNS3/mac-address-generation
Change how to generate random MAC addresses
2021-07-27 16:51:29 +09:30
grossmj 4646ce684f Handle -no-kvm param deprecated in Qemu >= v5.2 2021-07-27 16:34:51 +09:30
Jeremy Grossmann d2534d6fa0 Merge pull request #1933 from akrpic77/ak-fix-binary-websocket
Fix binary websocket access to the console
2021-07-26 20:42:54 +09:30
Andrej Krpič 3b7dc21ef0 Fix binary websocket access to the console
telnet_writer.write is not an async method - drain() is.
Remove async keyword so the call is the same as for the text websocket.
2021-07-26 12:58:35 +02:00
grossmj 0ecea8ffbb Change how to generate random MAC addresses 2021-07-25 16:03:54 +09:30
Jeremy Grossmann 6741d6d7a9 Merge pull request #1930 from mm1ke/fix_tests-gwaqIATV
setup.py: prevent installing tests directory
2021-07-13 08:20:13 +08:00
Michael Mair-Keimberger feace0c7dc setup.py: prevent installing tests directory 2021-07-12 19:04:30 +02:00
Brian Candler 1ee3e14bd3 Support cloning of encrypted qcow2 base image files
Fixes #1921
2021-07-09 10:53:02 +01:00
grossmj cdedd53339 Fix VMware VM support on Linux and Windows. Fixes #1919 2021-06-14 13:16:11 +09:30
Jeremy Grossmann e78b5fa6d6 Fix typo 2021-06-12 15:20:55 +09:30
grossmj 3524e22761 Development on 2.2.23dev1 2021-06-10 16:20:09 +09:30
grossmj 10daab21a3 Release v2.2.22 2021-06-10 15:41:58 +09:30
grossmj 22eb6f7d8c Sync appliance files. 2021-06-10 12:42:43 +09:30
grossmj d556c08def Revert "Skip test"
This reverts commit 8acb2fe3
2021-06-08 12:27:20 +09:30
grossmj 8acb2fe37e Skip test 2021-06-08 12:18:27 +09:30
Jeremy Grossmann 94acf60aef Merge pull request #1913 from GNS3/vmware-bigsur
Fix VMware VM support on macOS BigSur
2021-06-07 19:38:19 -07:00
grossmj c892cf371b Fix VMware support on macOS BigSur 2021-06-08 11:56:33 +09:30
grossmj bfd30f3547 Sync appliance files. 2021-06-07 15:01:45 +09:30
grossmj 095a022033 Fix tests. Ref https://github.com/GNS3/gns3-gui/issues/2461 2021-06-07 14:23:52 +09:30
grossmj 4e34ab8e4f Link style support. Fixes https://github.com/GNS3/gns3-gui/issues/2461 2021-06-07 14:08:21 +09:30
grossmj 8825831106 Upgrade dependencies 2021-06-07 13:46:06 +09:30
grossmj 5da5cbd6d8 Merge branch 'master' into 2.2 2021-06-07 13:34:25 +09:30
piotrpekala7 08f540f417 Release web UI 2.2.22 2021-06-05 10:32:12 +02:00
Jeremy Grossmann 1db1a892b4 Merge pull request #1910 from fabaff/patch-1
Set py-cpuinfo to 8.0.0
2021-06-04 04:49:26 -07:00
Fabian Affolter 7ff72879dd Set py-cpuinfo to 8.0.0 2021-06-04 13:36:21 +02:00
Jeremy Grossmann 48d0c6b183 Merge pull request #1905 from candlerb/candlerb/1904
Preserve auto_start/auto_open/auto_close when restoring snapshot
2021-06-04 02:06:38 -07:00
Brian Candler c051367d4b Preserve auto_start/auto_open/auto_close when restoring snapshot
Fixes #1904
2021-05-24 17:31:04 +01:00
Jeremy Grossmann 150526b1ff Update setup.py
Fixes #1897
2021-05-16 17:44:13 +09:30
grossmj 971e86d254 Fix uBridge errors for cloud nodes not visible in logs. Fixes #1895 2021-05-16 14:59:02 +09:30
grossmj 6847e19847 Change method to prevent forbidden directory traversal. Fixes #1894 2021-05-16 14:44:38 +09:30
Jeremy Grossmann 3a479d7ea6 Merge pull request #1900 from GNS3/prevent-directory-traversal
Prevent directory traversal
2021-05-15 04:09:04 -07:00
grossmj 9a6978902d Fix tests. 2021-05-15 19:43:36 +09:30
grossmj 6294ad9e76 Prevent directory traversal 2021-05-15 17:35:32 +09:30
grossmj 2c938b2c19 Development on 2.2.22dev1 2021-05-10 23:44:40 +09:30
grossmj 03b7d9191b Release v2.2.21 2021-05-10 22:42:46 +09:30
grossmj 87c87ca3cb Sync appliance files. 2021-05-10 22:39:03 +09:30
grossmj dfba40fee2 Merge branch 'master' into 2.2 2021-05-10 22:34:59 +09:30
piotrpekala7 f576bedfaf Release web UI 2.2.21 2021-04-30 14:01:53 +02:00
grossmj 4e61cc811e Improvements for get symbol dimensions endpoint. Ref #1885 2021-04-10 12:28:50 +09:30
Jeremy Grossmann c9c6a5a762 Merge pull request #1885 from GNS3/Create-endpoint-in-symbols-handler-to-get-symbol-dimensions
Create endpoint in symbols handler to get symbol dimensions #1884
2021-04-09 04:59:57 -07:00
grossmj e797ad1b9f Development on 2.2.21dev1 2021-04-09 13:50:20 +09:30
grossmj a50141fcbf Release v2.2.20 2021-04-09 12:14:38 +09:30
grossmj 852151f836 Merge branch 'master' into 2.2 2021-04-09 12:06:01 +09:30
grossmj e5807e5a8c Sync appliance files. 2021-04-09 12:04:20 +09:30
grossmj 87a26d5da0 Fix tests and comment problematic ones that rely on AsyncioMagicMock 2021-04-09 11:57:29 +09:30
piotrpekala7 30cbfe2154 Update picture.py 2021-04-08 23:29:46 +02:00
piotrpekala7 4bbf7c2ed2 Update symbol_handler.py 2021-04-08 21:27:05 +02:00
piotrpekala7 7a8c1e8f5d Release web UI 2.2.20 2021-04-08 13:30:59 +02:00
grossmj 7bb5202bdb Sync appliance files. 2021-04-07 20:58:55 +09:30
grossmj 082206a7db Fix packet capture with HTTPS remote server. Fixes #1882 2021-04-07 12:40:15 +09:30
grossmj 360a819e91 Set PyQt5 version to 5.15.2 on Windows 2021-04-06 22:12:34 +09:30
grossmj adbef787c3 Fix typo 2021-04-06 18:21:59 +09:30
grossmj 685963b85d Sync appliance files and remove old ones after sync with online repo. Fixes #1876 2021-04-06 17:38:11 +09:30
grossmj e614ed79f4 Upgrade dependencies 2021-04-06 13:57:00 +09:30
Tomas Hrnciar bb47cc87e7 Explicitly require setuptools, utils/get_resource.py imports pkg_resources 2021-03-31 11:58:49 +02:00
grossmj 6120736c91 Fix export for missing files 2021-03-24 13:16:00 +10:30
grossmj 7542b28793 Revert "Fix tests"
This reverts commit 4d0cb32b
2021-03-24 13:05:50 +10:30
grossmj 4d0cb32bd0 Fix tests 2021-03-24 12:39:22 +10:30
grossmj 055a78bade Fix issue when trying to export temporary Dynamips files. 2021-03-24 12:06:10 +10:30
grossmj fad52ea2fc Development on 2.2.20dev1 2021-03-05 16:48:09 +10:30
673 changed files with 5256 additions and 14462 deletions

No files matched your search

+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
+57
View File
@@ -1,5 +1,62 @@
# Change Log
## 2.2.25 14/09/2021
* Release web UI 2.2.25
* Fix issue preventing to use custom nested symbols. Fixes #1969
* Updated affinity symbols
* Fix qemu-img rebase code to support Qemu 6.1. Ref https://github.com/GNS3/gns3-server/pull/1962
* Reinstate qemu-img rebase
* Return disk usage for partition that contains the default project directory. Fixes #1947
* Explicitly require setuptools, utils/get_resource.py imports pkg_resources
## 2.2.24 25/08/2021
* Release web UI 2.2.24
* Fix issue when searching for image with relative path. Fixes #1925
* Fix wrong error when NAT interface is not allowed. Fixes #1943
* Fix incorrect Qemu binary selected when importing template. Fixes https://github.com/GNS3/gns3-gui/issues/3216
* Fix error when updating a link style. Fixes https://github.com/GNS3/gns3-gui/issues/2461
* Some fixes for early support for Python3.10 The loop parameter has been removed from most of asyncio‘s high-level API following deprecation in Python 3.8.
* Early support for Python3.10 Fixes #1940
* Bump pywin32 from 300 to 301
## 2.2.23 05/08/2021
* Release web UI 2.2.23
* Fix hostname inconsistencies during script execution
* Add option `--without-kvm`
* Add a `reload` server endpoint. Fixes #1926
* Handle -no-kvm param deprecated in Qemu >= v5.2
* Fix binary websocket access to the console
* Change how to generate random MAC addresses
* setup.py: prevent installing tests directory
* Support cloning of encrypted qcow2 base image files
* Fix VMware VM support on Linux and Windows. Fixes #1919
## 2.2.22 10/06/2021
* Fix VMware support on macOS BigSur
* Link style support. Fixes https://github.com/GNS3/gns3-gui/issues/2461
* Release web UI version 2.2.22
* Preserve auto_start/auto_open/auto_close when restoring snapshot
* Fix uBridge errors for cloud nodes not visible in logs. Fixes #1895
* Prevent directory traversal. Fixes #1894
## 2.2.21 10/05/2021
* Release Web-Ui v2.2.21
* Improvements for get symbol dimensions endpoint. Ref #1885
## 2.2.20 09/04/2021
* Release Web UI version 2.2.20
* Fix packet capture with HTTPS remote server. Fixes #1882
* Sync appliance files and remove old ones after sync with online repo. Fixes #1876
* Upgrade dependencies
* Fix export for missing files
* Fix issue when trying to export temporary Dynamips files.
## 2.2.19 05/03/2021
* Launch projects marked for auto open after SIGHUP is received
+3 -3
View File
@@ -1,6 +1,6 @@
-rrequirements.txt
pytest==5.4.3
flake8==3.8.3
pytest-timeout==1.4.1
pytest==6.2.4
flake8==3.9.2
pytest-timeout==1.4.2
pytest-aiohttp==0.3.0
@@ -0,0 +1,46 @@
{
"name": "6WIND Turbo Router",
"category": "router",
"description": "6WIND Turbo Router is a high performance, ready-to-use software virtual router. It can be deployed bare metal or in virtual machines on commercial-off-the-shelf (COTS) servers. It is a carrier-grade solution for Service Prodivers aiming at using white boxes to deploy network functions. Typical use-cases are transit/peering router, IPsec VPN gateway and CGNAT.",
"vendor_name": "6WIND",
"vendor_url": "https://www.6wind.com/",
"documentation_url": "https://doc.6wind.com/turbo-router-3/latest/turbo-router/",
"product_name": "6WIND Turbo Router",
"product_url": "https://www.6wind.com/vrouter-solutions/turbo-router/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username / password is admin / admin.",
"symbol": "6wind.svg",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 8,
"ram": 4096,
"cpus": 4,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "c",
"kvm": "require",
"options": "-cpu host"
},
"images": [
{
"filename": "6wind-vrouter-tr-ae-x86_64-v3.1.4.m1.qcow2",
"version": "3.1.4.m1",
"md5sum": "bc84b81fba4f2f01eda6a338469e37a5",
"filesize": 693829632,
"download_url": "https://portal.6wind.com/register.php?utm_campaign=GNS3-2021-EVAL"
}
],
"versions": [
{
"name": "3.1.4.m1",
"images": {
"hda_disk_image": "6wind-vrouter-tr-ae-x86_64-v3.1.4.m1.qcow2"
}
}
]
}
-50
View File
@@ -1,50 +0,0 @@
{
"name": "Raspian",
"category": "guest",
"description": "Raspberry Pi Desktop comes pre-installed with plenty of software for education, programming and general use; including Python, Scratch, Sonic Pi, Java, and more. Appliance created to demonstrate new_appliance.py - read more at https://nextpertise.net.",
"vendor_name": "Raspberry Pi Foundation",
"vendor_url": "https://www.raspberrypi.org",
"product_name": "Raspberry Pi Desktop",
"product_url": "https://www.raspberrypi.org/downloads/raspberry-pi-desktop/",
"registry_version": 3,
"status": "stable",
"availability": "free",
"maintainer": "Brent Stewart",
"maintainer_email": "brent@stewart.tc",
"usage": "Default password is raspberry",
"symbol": "rpi.png",
"qemu": {
"adapter_type": "virtio",
"adapters": 1,
"ram": 1024,
"hda_disk_interface": "sata",
"arch": "x86_64",
"console_type": "vnc",
"kvm": "disable"
},
"images": [
{
"filename": "2020-02-12-rpd-x86-buster.iso",
"version": "2020-02-12",
"md5sum": "98f34fb53086752b4c9c452094f30740",
"filesize": 3128147968,
"download_url": "https://www.raspberrypi.org/downloads/raspberry-pi-desktop/"
},
{
"filename": "empty8G.qcow2",
"version": "1",
"md5sum": "f1d2c25b6990f99bd05b433ab603bdb4",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty8G.qcow2/download"
}
],
"versions": [
{
"name": "2020-02-12",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "2020-02-12-rpd-x86-buster.iso"
}
}
]
}
+6 -6
View File
@@ -27,10 +27,10 @@
},
"images": [
{
"filename": "vEOS-lab-4.25.0F.vmdk",
"version": "4.25.0F",
"md5sum": "d420763fdf3bc50e7e5b88418bd9d1fd",
"filesize": 468779008,
"filename": "vEOS-lab-4.25.3M.vmdk",
"version": "4.25.3M",
"md5sum": "2f196969036b4d283e86f15118d59c26",
"filesize": 451543040,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
@@ -211,10 +211,10 @@
],
"versions": [
{
"name": "4.25.0F",
"name": "4.25.3M",
"images": {
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
"hdb_disk_image": "vEOS-lab-4.25.0F.vmdk"
"hdb_disk_image": "vEOS-lab-4.25.3M.vmdk"
}
},
{
+14 -1
View File
@@ -23,12 +23,19 @@
"hdb_disk_interface": "ide",
"hdc_disk_interface": "ide",
"arch": "x86_64",
"console_type": "vnc",
"console_type": "telnet",
"kvm": "require",
"options": "-nographic",
"process_priority": "normal"
},
"images": [
{
"filename": "arubaoscx-disk-image-genericx86-p4-20201110192651.vmdk",
"version": "10.06.0001",
"md5sum": "f8b45bc52f6bad79b5ff563e0c1ea73b",
"filesize": 380304896,
"download_url": "https://asp.arubanetworks.com/"
},
{
"filename": "arubaoscx-disk-image-genericx86-p4-20200311173823.vmdk",
"version": "10.04.1000",
@@ -45,6 +52,12 @@
}
],
"versions": [
{
"name": "10.06.0001",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20201110192651.vmdk"
}
},
{
"name": "10.04.1000",
"images": {
+1 -1
View File
@@ -5,8 +5,8 @@
"vendor_name": "HPE Aruba",
"vendor_url": "arubanetworks.com",
"documentation_url": "https://asp.arubanetworks.com/downloads;products=Aruba%20SD-WAN",
"product_url": "https://www.arubanetworks.com/products/networking/gateways-and-controllers/",
"product_name": "Aruba SD-WAN Virtual Gateway",
"product_url": "https://www.arubanetworks.com/products/networking/gateways-and-controllers/",
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
+1 -1
View File
@@ -22,7 +22,7 @@
"console_type": "telnet",
"kernel_command_line": "ide_generic.probe_mask=0x01 ide_core.chs=0.0:980,16,32 auto nousb console=ttyS0,9600 bigphysarea=65536 ide1=noprobe no-hlt",
"kvm": "disable",
"options": "-no-kvm -icount auto -hdachs 980,16,32",
"options": "-machine accel=tcg -icount auto -hdachs 980,16,32",
"cpu_throttling": 80,
"process_priority": "low"
},
+26
View File
@@ -25,6 +25,20 @@
"kvm": "require"
},
"images": [
{
"filename": "asav9-15-1.qcow2",
"version": "9.15.1",
"md5sum": "4e8747667f52e9046979f126128a61d1",
"filesize": 252444672,
"download_url": "https://software.cisco.com/download/home/286119613/type/280775065/release/9.15.1"
},
{
"filename": "asav9-14-1.qcow2",
"version": "9.14.1",
"md5sum": "03d89e18e7f8ad00fe8e979c4790587d",
"filesize": 211877888,
"download_url": "https://software.cisco.com/download/home/286119613/type/280775065/release/9.14.1"
},
{
"filename": "asav9-12-2-9.qcow2",
"version": "9.12.2-9",
@@ -90,6 +104,18 @@
}
],
"versions": [
{
"name": "9.15.1",
"images": {
"hda_disk_image": "asav9-15-1.qcow2"
}
},
{
"name": "9.14.1",
"images": {
"hda_disk_image": "asav9-14-1.qcow2"
}
},
{
"name": "9.12.2-9",
"images": {
+55
View File
@@ -0,0 +1,55 @@
{
"name": "Cisco Catalyst 8000V",
"category": "router",
"description": "The Cisco Catalyst 8000V Edge Software is a virtual, form-factor router deployed on a virtual machine (VM) running on an x86 server hardware.",
"vendor_name": "Cisco",
"vendor_url": "http://www.cisco.com/",
"documentation_url": "https://www.cisco.com/c/en/us/td/docs/routers/C8000V/Configuration/c8000v-installation-configuration-guide.html",
"product_name": "c8000v",
"product_url": "https://www.cisco.com/c/en/us/support/routers/catalyst-8000v-edge-software/series.html",
"registry_version": 3,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "There is no default password and enable password. A default configuration is present.",
"port_name_format": "Gi{port1}",
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 4,
"ram": 4096,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "c8000v-universalk9_8G_serial.17.04.01a.qcow2",
"version": "17.04.01a 8G",
"md5sum": "5c1dd1d3757ea43b5b02e0af7a010525",
"filesize": 1623130112,
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/Bengaluru-17.4.1a"
},
{
"filename": "c8000v-universalk9_8G_serial.17.04.01b.qcow2",
"version": "17.04.01b 8G",
"md5sum": "84aebb7f5f38bdd4df8e7607643027be",
"filesize": 1623130112,
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/Bengaluru-17.4.1b"
}
],
"versions": [
{
"name": "17.04.01a 8G",
"images": {
"hda_disk_image": "c8000v-universalk9_8G_serial.17.04.01a.qcow2"
}
},
{
"name": "17.04.01b 8G",
"images": {
"hda_disk_image": "c8000v-universalk9_8G_serial.17.04.01b.qcow2"
}
}
]
}
+28
View File
@@ -31,6 +31,20 @@
"download_url": "https://sourceforge.net/projects/gns-3/files",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m3.qcow2",
"version": "15.9(3)M3",
"md5sum": "12893843af18e4c62f13d07266755653",
"filesize": 57296384,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios-adventerprisek9-m.spa.159-3.m2.qcow2",
"version": "15.9(3)M2",
"md5sum": "a19e998bc3086825c751d125af722329",
"filesize": 57308672,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios-adventerprisek9-m.spa.158-3.m2.qcow2",
"version": "15.8(3)M2",
@@ -68,6 +82,20 @@
}
],
"versions": [
{
"name": "15.9(3)M3",
"images": {
"hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m3.qcow2",
"hdb_disk_image": "IOSv_startup_config.img"
}
},
{
"name": "15.9(3)M2",
"images": {
"hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m2.qcow2",
"hdb_disk_image": "IOSv_startup_config.img"
}
},
{
"name": "15.8(3)M2",
"images": {
+26
View File
@@ -23,6 +23,20 @@
"kvm": "require"
},
"images": [
{
"filename": "vios_l2-adventerprisek9-m.ssa.high_iron_20200929.qcow2",
"version": "15.2(20200924:215240)",
"md5sum": "99ecab32de12410c533e6abd4e9710aa",
"filesize": 90409984,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios_l2-adventerprisek9-m.ssa.high_iron_20190423.qcow2",
"version": "15.2(6.0.81)E",
"md5sum": "71cacb678f98a106f99e889b97b34686",
"filesize": 44950016,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2",
"version": "15.2.1",
@@ -46,6 +60,18 @@
}
],
"versions": [
{
"name": "15.2(20200924:215240)",
"images": {
"hda_disk_image": "vios_l2-adventerprisek9-m.ssa.high_iron_20200929.qcow2"
}
},
{
"name": "15.2(6.0.81)E",
"images": {
"hda_disk_image": "vios_l2-adventerprisek9-m.ssa.high_iron_20190423.qcow2"
}
},
{
"name": "15.2.1",
"images": {
+28
View File
@@ -25,6 +25,20 @@
"kvm": "require"
},
"images": [
{
"filename": "nexus9500v64.10.1.1.qcow2",
"version": "9500v 10.1.1",
"md5sum": "35672370b0f43e725d5b2d92488524f0",
"filesize": 1592000512,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.1(1)"
},
{
"filename": "nexus9500v.9.3.7.qcow2",
"version": "9500v 9.3.7",
"md5sum": "65f669e0dd379a05a8cdbb9d7592a064",
"filesize": 1986068480,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(7)"
},
{
"filename": "nexus9500v.9.3.3.qcow2",
"version": "9500v 9.3.3",
@@ -148,6 +162,20 @@
}
],
"versions": [
{
"name": "9500v 10.1.1",
"images": {
"bios_image": "OVMF-20160813.fd",
"hda_disk_image": "nexus9500v64.10.1.1.qcow2"
}
},
{
"name": "9500v 9.3.7",
"images": {
"bios_image": "OVMF-20160813.fd",
"hda_disk_image": "nexus9500v.9.3.7.qcow2"
}
},
{
"name": "9500v 9.3.3",
"images": {
+16 -2
View File
@@ -11,19 +11,27 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username is cumulus and password is CumulusLinux!",
"usage": "Default username is cumulus and password is CumulusLinux! in version 4.1 and earlier, and cumulus in version 4.2 and later.",
"first_port_name": "eth0",
"port_name_format": "swp{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 7,
"ram": 512,
"ram": 768,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "cumulus-linux-4.3.0-vx-amd64-qemu.qcow2",
"version": "4.3.0",
"md5sum": "aba2f0bb462b26a208afb6202bc97d51",
"filesize": 2819325952,
"download_url": "https://cumulusnetworks.com/cumulus-vx/download/",
"direct_download_url": "https://d2cd9e7ca6hntp.cloudfront.net/public/CumulusLinux-4.3.0/cumulus-linux-4.3.0-vx-amd64-qemu.qcow2"
},
{
"filename": "cumulus-linux-4.2.0-vx-amd64-qemu.qcow2",
"version": "4.2.0",
@@ -222,6 +230,12 @@
}
],
"versions": [
{
"name": "4.3.0",
"images": {
"hda_disk_image": "cumulus-linux-4.3.0-vx-amd64-qemu.qcow2"
}
},
{
"name": "4.2.0",
"images": {
+14 -14
View File
@@ -11,29 +11,29 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username/password is vyatta/vyatta. DANOS will live boot and drop into a shell. DANOS can then be installed inside the VM by typing install image. Defaults to using a telnet console, but the vnc console can provide additional help if it's not booting.",
"usage": "Default username / password is tmpuser / tmppwd. DANOS will live boot and drop into a shell. DANOS can then be installed inside the VM by typing install image. Defaults to using a telnet console, but the vnc console can provide additional help if it's not booting.",
"symbol": ":/symbols/affinity/circle/gray/router_cloud.svg",
"port_name_format": "dp0p{1}s{0}",
"port_name_format": "dp0s{3}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 3,
"adapters": 8,
"ram": 4096,
"cpus": 2,
"cpus": 4,
"hda_disk_interface": "ide",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "dc",
"kvm": "allow",
"boot_priority": "cd",
"kvm": "require",
"options": "-cpu host"
},
"images": [
{
"filename": "danos-1908-amd64-vrouter.iso",
"version": "1908",
"md5sum": "e850b6aa2859de1075c11b9149fa50f4",
"filesize": 409993216,
"download_url": "https://danosproject.atlassian.net/wiki/spaces/DAN/pages/753667/DANOS+1908",
"direct_download_url": "http://repos.danosproject.org.s3-website-us-west-1.amazonaws.com/images/danos-1908-amd64-vrouter.iso"
"filename": "danos-2012-base-amd64.iso",
"version": "2012",
"md5sum": "fb7a60dc9afecdb274464832b3ab1ccb",
"filesize": 441450496,
"download_url": "https://danosproject.atlassian.net/wiki/spaces/DAN/pages/892141595/DANOS+2012",
"direct_download_url": "https://s3-us-west-1.amazonaws.com/2012.repos.danosproject.org/2012/iso/danos-2012-base-amd64.iso"
},
{
"filename": "empty8G.qcow2",
@@ -46,10 +46,10 @@
],
"versions": [
{
"name": "1908",
"name": "2012",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "danos-1908-amd64-vrouter.iso"
"cdrom_image": "danos-2012-base-amd64.iso"
}
}
]
+1 -1
View File
@@ -26,7 +26,7 @@
"options": "-cpu core2duo"
},
"images": [
{
{
"filename": "EXOS-VM_v31.1.1.3.qcow2",
"version": "31.1.1.3",
"md5sum": "e4936ad94a5304bfeeca8dfc6f285cc0",
@@ -26,19 +26,26 @@
"options": "-nographic"
},
"images": [
{
"filename": "VOSSGNS3.8.4.0.0.qcow2",
"version": "v8.4.0.0",
"md5sum": "f457e7da3c1dec50670624c421333ef3",
"filesize": 386203648,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.4.0.0.qcow2"
},
{
"filename": "VOSSGNS3.8.3.0.0.qcow2",
"version": "v8.3.0.0",
"md5sum": "e1c789e439c5951728e349cf44690230",
"filesize": 384696320,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.3.0.0.qcow2"
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.3.0.0.qcow2"
},
{
{
"filename": "VOSSGNS3.8.2.0.0.qcow2",
"version": "v8.2.0.0",
"md5sum": "9a0cd77c08644abbf3a69771c125c011",
"filesize": 331808768,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.2.0.0.qcow2"
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.2.0.0.qcow2"
},
{
"filename": "VOSSGNS3.8.1.5.0.qcow2",
@@ -70,18 +77,24 @@
}
],
"versions": [
{
"name": "v8.4.0.0",
"images": {
"hda_disk_image": "VOSSGNS3.8.4.0.0.qcow2"
}
},
{
"name": "v8.3.0.0",
"images": {
"hda_disk_image": "VOSSGNS3.8.3.0.0.qcow2"
}
},
{
},
{
"name": "v8.2.0.0",
"images": {
"hda_disk_image": "VOSSGNS3.8.2.0.0.qcow2"
}
},
},
{
"name": "8.1.5.0",
"images": {
+15 -1
View File
@@ -17,7 +17,7 @@
"qemu": {
"adapter_type": "e1000",
"adapters": 4,
"ram": 1024,
"ram": 4096,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
@@ -26,6 +26,13 @@
"kvm": "allow"
},
"images": [
{
"filename": "FAZ_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
"md5sum": "e220b48c6e86f8ddc660d578295051a9",
"filesize": 152698880,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FAZ_VM64_KVM-v6-build1183-FORTINET.out.kvm.qcow2",
"version": "6.2.2",
@@ -169,6 +176,13 @@
}
],
"versions": [
{
"name": "6.4.5",
"images": {
"hda_disk_image": "FAZ_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.2.2",
"images": {
+14
View File
@@ -26,6 +26,13 @@
"kvm": "allow"
},
"images": [
{
"filename": "FGT_VM64_KVM-v6-build1828-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
"md5sum": "dc064e16fa65461183544d8ddb5d19d9",
"filesize": 36175872,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FGT_VM64_KVM-v6-build1010-FORTINET.out.kvm.qcow2",
"version": "6.2.2",
@@ -246,6 +253,13 @@
}
],
"versions": [
{
"name": "6.4.5",
"images": {
"hda_disk_image": "FGT_VM64_KVM-v6-build1828-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.2.2",
"images": {
+29 -1
View File
@@ -17,7 +17,7 @@
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 4,
"ram": 1024,
"ram": 2048,
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
@@ -26,6 +26,20 @@
"kvm": "allow"
},
"images": [
{
"filename": "FMG_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"version": "6.4.5",
"md5sum": "bd2791984b03f55a6825297e83c6576a",
"filesize": 117014528,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build2253-FORTINET.out.kvm.qcow2",
"version": "6.4.4",
"md5sum": "3554a47fde2dc91d17eec16fd0dc10a3",
"filesize": 116621312,
"download_url": "https://support.fortinet.com/Download/FirmwareImages.aspx"
},
{
"filename": "FMG_VM64_KVM-v6-build1183-FORTINET.out.kvm.qcow2",
"version": "6.2.2",
@@ -162,6 +176,20 @@
}
],
"versions": [
{
"name": "6.4.5",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build2288-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.4.4",
"images": {
"hda_disk_image": "FMG_VM64_KVM-v6-build2253-FORTINET.out.kvm.qcow2",
"hdb_disk_image": "empty30G.qcow2"
}
},
{
"name": "6.2.2",
"images": {
+14
View File
@@ -21,6 +21,14 @@
"kvm": "allow"
},
"images": [
{
"filename": "frr-7.5.1.qcow2",
"version": "7.5.1",
"md5sum": "4b3ca0932a396b282ba35f102be1ed3b",
"filesize": 51169280,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/frr-7.5.1.qcow2"
},
{
"filename": "frr-7.3.1.qcow2",
"version": "7.3.1",
@@ -31,6 +39,12 @@
}
],
"versions": [
{
"name": "7.5.1",
"images": {
"hda_disk_image": "frr-7.5.1.qcow2"
}
},
{
"name": "7.3.1",
"images": {
+1 -1
View File
@@ -6,7 +6,7 @@
"vendor_url": "https://www.huawei.com",
"product_name": "HuaWei AR1000v",
"product_url": "https://support.huawei.com/enterprise/en/routers/ar1000v-pid-21768212",
"registry_version": 5,
"registry_version": 4,
"status": "experimental",
"availability": "service-contract",
"maintainer": "none",
+3 -3
View File
@@ -5,7 +5,7 @@
"vendor_name": "HuaWei",
"vendor_url": "https://www.huawei.com",
"product_name": "HuaWei CE12800",
"registry_version": 5,
"registry_version": 4,
"status": "experimental",
"availability": "service-contract",
"maintainer": "none",
@@ -33,10 +33,10 @@
],
"versions": [
{
"name": "V200R005C10SPC607B607",
"images": {
"hda_disk_image": "ce12800-V200R005C10SPC607B607.qcow2"
},
"name": "V200R005C10SPC607B607"
}
}
]
}
+4 -4
View File
@@ -6,7 +6,7 @@
"vendor_url": "https://www.huawei.com",
"product_name": "HuaWei NE40E",
"product_url": "https://e.huawei.com/en/products/enterprise-networking/routers/ne/ne40e",
"registry_version": 5,
"registry_version": 4,
"status": "experimental",
"availability": "service-contract",
"maintainer": "none",
@@ -35,10 +35,10 @@
],
"versions": [
{
"name": "V800R011C00SPC607B607",
"images": {
"hda_disk_image": "ne40e-V800R011C00SPC607B607.qcow2"
},
"name": "V800R011C00SPC607B607"
}
}
]
}
}
+1 -1
View File
@@ -6,7 +6,7 @@
"vendor_url": "https://www.huawei.com",
"product_name": "HuaWei USG6000v",
"product_url": "https://e.huawei.com/en/products/enterprise-networking/security/firewall-gateway/usg6000v",
"registry_version": 5,
"registry_version": 4,
"status": "experimental",
"availability": "service-contract",
"maintainer": "none",
+39 -24
View File
@@ -23,101 +23,109 @@
"kvm": "require"
},
"images": [
{
"filename": "kali-linux-2021.1-live-amd64.iso",
"version": "2021.1",
"md5sum": "3a3716fef866e5c29a1c1ccfc94264b5",
"filesize": 3591385088,
"download_url": "http://cdimage.kali.org/kali-2021.1/",
"direct_download_url": "http://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso"
},
{
"filename": "kali-linux-2019.3-amd64.iso",
"version": "2019.3",
"md5sum": "9c6fb00558f78ed06992d89f745ef975",
"filesize": 3037736960,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.3/kali-linux-2019.3-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2019.3",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.3/kali-linux-2019.3-amd64.iso"
},
{
"filename": "kali-linux-2019.2-amd64.iso",
"version": "2019.2",
"md5sum": "0f89b6225d7ea9c18682f7cc541c1179",
"filesize": 3353227264,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.2/kali-linux-2019.2-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2019.2",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.2/kali-linux-2019.2-amd64.iso"
},
{
"filename": "kali-linux-mate-2019.2-amd64.iso",
"version": "2019.2 (MATE)",
"md5sum": "fec8dd7009f932c51a74323df965a709",
"filesize": 3313217536,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.2/kali-linux-mate-2019.2-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2019.2",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.2/kali-linux-mate-2019.2-amd64.iso"
},
{
"filename": "kali-linux-2019.1a-amd64.iso",
"version": "2019.1a",
"md5sum": "58c6111ed0be1919ea87267e7e65ab0f",
"filesize": 3483873280,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.1a/kali-linux-2019.1a-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2019.1a",
"direct_download_url": "http://old.kali.org/kali-images/kali-2019.1a/kali-linux-2019.1a-amd64.iso"
},
{
"filename": "kali-linux-2018.4-amd64.iso",
"version": "2018.4",
"md5sum": "1b2d598bb8d2003e6207c119c0ba42fe",
"filesize": 3139436544,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2018.4/kali-linux-2018.4-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2018.4",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.4/kali-linux-2018.4-amd64.iso"
},
{
"filename": "kali-linux-2018.3a-amd64.iso",
"version": "2018.3a",
"md5sum": "2da675d016bd690c05e180e33aa98b94",
"filesize": 3192651776,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2018.3a/kali-linux-2018.3a-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2018.3a",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.3a/kali-linux-2018.3a-amd64.iso"
},
{
"filename": "kali-linux-2018.1-amd64.iso",
"version": "2018.1",
"md5sum": "a3feb90df5b71b3c7f4a02bdddf221d7",
"filesize": 3028500480,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2018.1/kali-linux-2018.1-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2018.1",
"direct_download_url": "http://old.kali.org/kali-images/kali-2018.1/kali-linux-2018.1-amd64.iso"
},
{
"filename": "kali-linux-2017.3-amd64.iso",
"version": "2017.3",
"md5sum": "b465580c897e94675ac1daf031fa66b9",
"filesize": 2886402048,
"download_url": "http://cdimage.kali.org/kali-2017.3/",
"direct_download_url": "http://cdimage.kali.org/kali-2017.3/kali-linux-2017.3-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2017.3/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.3/kali-linux-2017.3-amd64.iso"
},
{
"filename": "kali-linux-2017.2-amd64.iso",
"version": "2017.2",
"md5sum": "541654f8f818450dc0db866a0a0f6eec",
"filesize": 3020619776,
"download_url": "http://cdimage.kali.org/kali-2017.2/",
"direct_download_url": "http://cdimage.kali.org/kali-2017.2/kali-linux-2017.2-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2017.2/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.2/kali-linux-2017.2-amd64.iso"
},
{
"filename": "kali-linux-2017.1-amd64.iso",
"version": "2017.1",
"md5sum": "c8e742283929d7a12dbe7c58e398ff08",
"filesize": 2794307584,
"download_url": "http://cdimage.kali.org/kali-2017.1/",
"direct_download_url": "http://cdimage.kali.org/kali-2017.1/kali-linux-2017.1-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2017.1/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2017.1/kali-linux-2017.1-amd64.iso"
},
{
"filename": "kali-linux-2016.2-amd64.iso",
"version": "2016.2",
"md5sum": "3d163746bc5148e61ad689d94bc263f9",
"filesize": 3076767744,
"download_url": "http://cdimage.kali.org/kali-2016.2/",
"direct_download_url": "http://cdimage.kali.org/kali-2016.2/kali-linux-2016.2-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2016.2/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2016.2/kali-linux-2016.2-amd64.iso"
},
{
"filename": "kali-linux-2016.1-amd64.iso",
"version": "2016.1",
"md5sum": "2e1230dc14036935b3279dfe3e49ad39",
"filesize": 2945482752,
"download_url": "http://cdimage.kali.org/kali-2016.1/",
"direct_download_url": "http://cdimage.kali.org/kali-2016.1/kali-linux-2016.1-amd64.iso"
"download_url": "http://old.kali.org/kali-images/kali-2016.1/",
"direct_download_url": "http://old.kali.org/kali-images/kali-2016.1/kali-linux-2016.1-amd64.iso"
},
{
"filename": "kali-linux-2.0-amd64.iso",
@@ -137,6 +145,13 @@
}
],
"versions": [
{
"name": "2021.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2021.1-live-amd64.iso"
}
},
{
"name": "2019.3",
"images": {
+18
View File
@@ -0,0 +1,18 @@
{
"name": "mcjoin",
"category": "guest",
"description": "mcjoin is a very simple and easy-to-use tool to test IPv4 and IPv6 multicast.",
"vendor_name": "Joachim Nilsson",
"vendor_url": "https://github.com/troglobit",
"product_name": "mcjoin",
"registry_version": 3,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"symbol": "linux_guest.svg",
"docker": {
"adapters": 1,
"image": "troglobit/mcjoin:latest",
"console_type": "telnet"
}
}
+46
View File
@@ -0,0 +1,46 @@
{
"name": "Nokia vSIM",
"category": "router",
"description": "The Nokia Virtualized 7750 SR and 7950 XRS Simulator (vSIM) is a Virtualized Network Function (VNF) that simulates the control, management, and forwarding functions of a 7750 SR or 7950 XRS router. The vSIM runs the same Service Router Operating System (SR OS) as 7750 SR and 7950 XRS hardware-based routers and, therefore, has the same feature set and operational behavior as those platforms.",
"vendor_name": "Nokia",
"vendor_url": "https://www.nokia.com/networks/",
"documentation_url": "https://documentation.nokia.com/",
"product_name": "Nokia vSIM",
"product_url": "https://www.nokia.com/networks/products/virtualized-service-router/",
"registry_version": 4,
"status": "experimental",
"maintainer": "Vinicius Rocha",
"maintainer_email": "viniciusatr@gmail.com",
"usage": "Login is admin and password is admin. \n\nWe are using one IOM with one MDA 12x100G (w/ breakout).\n\nYou must add your license: file vi cf3:license.txt",
"first_port_name": "A/1",
"port_name_format": "1/1/{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 13,
"ram": 4096,
"cpus": 2,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-nographic -smbios type=1,product=TIMOS:license-file=cf3:license.txt\\ slot=A\\ chassis=SR-1\\ card=cpm-1\\ mda/1=me12-100gb-qsfp28"
},
"images": [
{
"filename": "sros-vsr-21.7.R1.qcow2",
"version": "21.7.R1",
"md5sum": "7eed38c01350ebaf9c6105e26ce5307e",
"filesize": 568655872,
"download_url": "https://customer.nokia.com/support/s/",
"compression": "zip"
}
],
"versions": [
{
"name": "21.7.R1",
"images": {
"hda_disk_image": "sros-vsr-21.7.R1.qcow2"
}
}
]
}
+5 -3
View File
@@ -3,16 +3,18 @@
"category": "guest",
"description": "ntopng is the next generation version of the original ntop, a network traffic probe that shows the network usage, similar to what the popular top Unix command does. ntopng is based on libpcap and it has been written in a portable way in order to virtually run on every Unix platform, MacOSX and on Windows as well. ntopng users can use a a web browser to navigate through ntop (that acts as a web server) traffic information and get a dump of the network status. In the latter case, ntopng can be seen as a simple RMON-like agent with an embedded web interface.",
"vendor_name": "ntop",
"vendor_url": "http://www.ntop.org/",
"vendor_url": "https://www.ntop.org/",
"documentation_url": "https://www.ntop.org/guides/ntopng/",
"product_name": "ntopng",
"registry_version": 3,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "In the web interface login as admin/admin",
"usage": "In the web interface login as admin/admin\n\nPersistent configuration:\n- Add \"/var/lib/redis\" as an additional persistent directory.\n- Use \"redis-cli save\" in an auxiliary console to save the configuration.",
"docker": {
"adapters": 1,
"image": "lucaderi/ntopng-docker:latest",
"image": "ntop/ntopng:stable",
"start_command": "--dns-mode 2 --interface eth0",
"console_type": "http",
"console_http_port": 3000,
"console_http_path": "/"
+23 -7
View File
@@ -7,7 +7,7 @@
"documentation_url": "hhttps://docs.openmediavault.org",
"product_name": "OpenMediaVault",
"product_url": "https://www.openmediavault.org/",
"registry_version": 3,
"registry_version": 4,
"status": "stable",
"maintainer": "Savio D'souza",
"maintainer_email": "savio2002@yahoo.in",
@@ -17,21 +17,29 @@
"adapter_type": "e1000",
"adapters": 1,
"ram": 2048,
"hda_disk_interface": "ide",
"hdb_disk_interface": "ide",
"hda_disk_interface": "sata",
"hdb_disk_interface": "sata",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "dc",
"kvm": "require"
},
"images": [
{
"filename": "openmediavault_5.6.13-amd64.iso",
"version": "5.6.13",
"md5sum": "f08b41a5111fffca0355d53e26ec47ab",
"filesize": 652214272,
"download_url": "https://www.openmediavault.org/download.html",
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/5.6.13/openmediavault_5.6.13-amd64.iso/download"
},
{
"filename": "openmediavault_5.5.11-amd64.iso",
"version": "5.5.11",
"md5sum": "76baad8e13dd49bee9b4b4a6936b7296",
"filesize": 608174080,
"download_url": "https://www.openmediavault.org/download.html",
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/latest/download"
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/5.5.11/openmediavault_5.5.11-amd64.iso/download"
},
{
"filename": "empty30G.qcow2",
@@ -44,12 +52,20 @@
],
"versions": [
{
"name": "5.5.11",
"name": "5.6.13",
"images": {
"hda_disk_image": "empty30G.qcow2",
"hdb_disk_image": "empty30G.qcow2",
"cdrom_image": "openmediavault_5.5.11-amd64.iso"
"cdrom_image": "openmediavault_5.6.13-amd64.iso"
}
},
{
"name": "5.5.11",
"images": {
"hda_disk_image": "empty30G.qcow2",
"hdb_disk_image": "empty30G.qcow2",
"cdrom_image": "openmediavault_5.5.11-amd64.iso"
}
}
]
}
}
+1 -1
View File
@@ -11,7 +11,7 @@
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "User root, password gns3",
"first_port_name": "fxp0",
"first_port_name": "em0",
"port_name_format": "em{0}",
"qemu": {
"adapter_type": "e1000",
+31 -1
View File
@@ -22,7 +22,25 @@
"kvm": "allow"
},
"images": [
{
{
"filename": "openwrt-21.02.0-x86-64-generic-ext4-combined.img",
"version": "21.02.0",
"md5sum": "1ba2a5c5c05e592c36a469a8ecd3bcf5",
"filesize": 126353408,
"download_url": "https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/openwrt-21.02.0-x86-64-generic-ext4-combined.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-19.07.8-x86-64-combined-ext4.img",
"version": "19.07.8",
"md5sum": "a9d9776a96968a2042484330f285cae3",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/19.07.8/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.8/targets/x86/64/openwrt-19.07.8-x86-64-combined-ext4.img",
"compression": "gzip"
},
{
"filename": "openwrt-19.07.7-x86-64-combined-ext4.img",
"version": "19.07.7",
"md5sum": "0cfa752fab87014419ab00b18a6cc5a6",
@@ -168,6 +186,18 @@
}
],
"versions": [
{
"name": "21.02.0",
"images": {
"hda_disk_image": "openwrt-21.02.0-x86-64-generic-ext4-combined.img"
}
},
{
"name": "19.07.8",
"images": {
"hda_disk_image": "openwrt-19.07.8-x86-64-combined-ext4.img"
}
},
{
"name": "19.07.7",
"images": {
+22 -34
View File
@@ -1,24 +1,27 @@
{
"name": "Ostinato",
"category": "guest",
"description": "Ostinato is an open-source, cross-platform network packet crafter/traffic generator and analyzer with a friendly GUI. Craft and send packets of several streams with different protocols at different rates.",
"description": "Packet crafter and traffic generator for network engineers",
"vendor_name": "Ostinato",
"vendor_url": "http://ostinato.org/",
"documentation_url": "http://ostinato.org/docs.html",
"vendor_url": "https://ostinato.org/",
"documentation_url": "https://ostinato.org/docs",
"product_name": "Ostinato",
"product_url": "http://ostinato.org/",
"registry_version": 3,
"status": "experimental",
"maintainer": "Bernhard Ehlers",
"maintainer_email": "be@bernhard-ehlers.de",
"usage": "Use interfaces starting with eth1 as traffic interfaces, eth0 is only for the (optional) management of the server/drone.",
"symbol": "ostinato-3d-icon.svg",
"port_name_format": "eth{0}",
"product_url": "https://ostinato.org/",
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
"maintainer": "Srivats P",
"maintainer_email": "support@ostinato.org",
"symbol": ":/symbols/affinity/circle/gray/cog.svg",
"first_port_name": "eth0/mgmt",
"port_name_format": "eth{port1}",
"linked_clone": true,
"qemu": {
"adapter_type": "e1000",
"adapters": 4,
"ram": 256,
"hda_disk_interface": "ide",
"cpus": 2,
"hda_disk_interface": "sata",
"arch": "i386",
"console_type": "vnc",
"kvm": "allow",
@@ -26,33 +29,18 @@
},
"images": [
{
"filename": "ostinato-0.9-1.qcow2",
"version": "0.9",
"md5sum": "00b4856ec9fffbcbcab7a8f757355d69",
"filesize": 101646336,
"download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/index.html",
"direct_download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/ostinato-0.9-1.qcow2"
},
{
"filename": "ostinato-0.8-1.qcow2",
"version": "0.8",
"md5sum": "12e990ba695103cfac82f8771b8015d4",
"filesize": 57344000,
"download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/index.html",
"direct_download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/ostinato-0.8-1.qcow2"
"version": "1.1",
"filename": "ostinatostd-1.1-1.qcow2",
"filesize": 134217728,
"md5sum": "aa027e83cefea1c38d0102eb2f28956e",
"download_url": "https://ostinato.org/pricing/gns3"
}
],
"versions": [
{
"name": "0.9",
"name": "1.1",
"images": {
"hda_disk_image": "ostinato-0.9-1.qcow2"
}
},
{
"name": "0.8",
"images": {
"hda_disk_image": "ostinato-0.8-1.qcow2"
"hda_disk_image": "ostinatostd-1.1-1.qcow2"
}
}
]
+1 -1
View File
@@ -26,7 +26,7 @@
"filename": "fossapup64-9.5.iso",
"version": "9.5",
"md5sum": "6a45e7a305b7d3172ebd9eab5ca460e4",
"filesize": 428867584,
"filesize": 428867584,
"download_url": "http://puppylinux.com/index.html",
"direct_download_url": "http://distro.ibiblio.org/puppylinux/puppy-fossa/fossapup64-9.5.iso"
},
+7 -7
View File
@@ -7,7 +7,7 @@
"documentation_url": "https://access.redhat.com/solutions/641193",
"product_name": "Red Hat Enterprise Linux KVM Guest Image",
"product_url": "https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux",
"registry_version": 5,
"registry_version": 4,
"status": "stable",
"availability": "service-contract",
"maintainer": "Neyder Achahuanco",
@@ -56,25 +56,25 @@
],
"versions": [
{
"name": "8.3",
"images": {
"hda_disk_image": "rhel-8.3-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
},
"name": "8.3"
}
},
{
"name": "7.9",
"images": {
"hda_disk_image": "rhel-server-7.9-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
},
"name": "7.9"
}
},
{
"name": "6.10",
"images": {
"hda_disk_image": "rhel-server-6.10-update-11-x86_64-kvm.qcow2",
"cdrom_image": "rhel-cloud-init.iso"
},
"name": "6.10"
}
}
]
}
+45
View File
@@ -0,0 +1,45 @@
{
"name": "RockyLinux",
"category": "guest",
"description": "Rocky Linux is a community enterprise operating system designed to be 100% bug-for-bug compatible with Red Hat Enterprise Linux (RHEL).",
"vendor_name": "Rocky Enterprise Software Foundation",
"vendor_url": "https://rockylinux.org",
"documentation_url": "https://docs.rockylinux.org",
"product_name": "Rocky Linux",
"registry_version": 4,
"status": "experimental",
"maintainer": "Bernhard Ehlers",
"maintainer_email": "none@b-ehlers.de",
"usage": "Username:\trockylinux\nPassword:\trockylinux\nTo become root, use \"sudo su\".\n\nTo improve performance, increase RAM and vCPUs in the VM settings.",
"symbol": "linux_guest.svg",
"port_name_format": "ens{port4}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
"ram": 1536,
"hda_disk_interface": "sata",
"arch": "x86_64",
"console_type": "vnc",
"kvm": "require",
"options": "-usbdevice tablet"
},
"images": [
{
"filename": "RockyLinux_8.4_VMG_LinuxVMImages.COM.vmdk",
"version": "8.4",
"md5sum": "3452d5b0fbb4cdcf3ac6fe8de8d0ac08",
"filesize": 5273878528,
"download_url": "https://www.linuxvmimages.com/images/rockylinux-8",
"direct_download_url": "https://sourceforge.net/projects/linuxvmimages/files/VMware/R/rockylinux/8/RockyLinux_8.4_VMM.7z/download",
"compression": "7z"
}
],
"versions": [
{
"name": "8.4",
"images": {
"hda_disk_image": "RockyLinux_8.4_VMG_LinuxVMImages.COM.vmdk"
}
}
]
}
+20
View File
@@ -0,0 +1,20 @@
{
"name": "StoneWork",
"category": "router",
"description": "StoneWork is VPP and Ligato based routing platform",
"vendor_name": "Pantheon.tech StoneWork router",
"vendor_url": "https://pantheon.tech/",
"documentation_url": "https://pantheon.tech/documentation-stonework-gns3/",
"product_name": "StoneWork",
"registry_version": 4,
"status": "experimental",
"availability": "free",
"maintainer": "Julius Milan",
"maintainer_email": "julius.milan@pantheon.tech",
"docker": {
"adapters": 5,
"image": "ghcr.io/pantheontech/stonework",
"start_command": "/root/stonework-gns3-startup.sh",
"environment": "INITIAL_LOGLVL=debug,\nMICROSERVICE_LABEL=stonework,\nETCD_CONFIG=,\nCNF_MGMT_SUBNET=127.0.0.1/8"
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Tiny Core Linux",
"category": "guest",
"description": "Core Linux is a smaller variant of Tiny Core without a graphical desktop.\n\nIt provides a complete Linux system using only a few MiB." ,
"description": "Core Linux is a smaller variant of Tiny Core without a graphical desktop.\n\nIt provides a complete Linux system using only a few MiB.",
"vendor_name": "Team Tiny Core",
"vendor_url": "http://distro.ibiblio.org/tinycorelinux",
"documentation_url": "http://wiki.tinycorelinux.net/",
+26
View File
@@ -25,6 +25,20 @@
"options": "-vga virtio"
},
"images": [
{
"filename": "Ubuntu 20.10 (64bit).vmdk",
"version": "20.10",
"md5sum": "d7fb9d7b5f6e55349204d493d00507d2",
"filesize": 7512915968,
"download_url": "http://www.osboxes.org/ubuntu/"
},
{
"filename": "Ubuntu 20.04.2 (64bit).vmdk",
"version": "20.04.2",
"md5sum": "e995e5768c1dbee94bc02072d841bb50",
"filesize": 7625179136,
"download_url": "http://www.osboxes.org/ubuntu/"
},
{
"filename": "Ubuntu 20.04 (64bit).vmdk",
"version": "20.04",
@@ -62,6 +76,18 @@
}
],
"versions": [
{
"name": "20.10",
"images": {
"hda_disk_image": "Ubuntu 20.10 (64bit).vmdk"
}
},
{
"name": "20.04.2",
"images": {
"hda_disk_image": "Ubuntu 20.04.2 (64bit).vmdk"
}
},
{
"name": "20.04",
"images": {
+29 -14
View File
@@ -11,7 +11,7 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default username/password is vyos/vyos.\n\nAt first boot of versions 1.1.x/1.2.x the router will start from the cdrom. Login and then type \"install image\" and follow the instructions.",
"usage": "Default username/password is vyos/vyos.\n\nAt first boot the router will start from the cdrom. Login and then type \"install image\" and follow the instructions.",
"symbol": "vyos.svg",
"port_name_format": "eth{0}",
"qemu": {
@@ -26,19 +26,26 @@
},
"images": [
{
"filename": "vyos-1.3-rolling-202101-qemu.qcow2",
"version": "1.3-snapshot-202101",
"md5sum": "b05a1f8a879c42342ea90f65ebe62f05",
"filesize": 315359232,
"filename": "vyos-1.3.0-rc6-amd64.iso",
"version": "1.3.0-rc6",
"md5sum": "b3939f82a35b23d428ee0ad4ac8be087",
"filesize": 331350016,
"download_url": "https://vyos.net/get/snapshots/",
"direct_download_url": "https://s3.amazonaws.com/s3-us.vyos.io/snapshot/vyos-1.3-rolling-202101/qemu/vyos-1.3-rolling-202101-qemu.qcow2"
"direct_download_url": "https://s3.amazonaws.com/s3-us.vyos.io/snapshot/vyos-1.3.0-rc6/vyos-1.3.0-rc6-amd64.iso"
},
{
"filename": "vyos-1.2.6-S1-amd64.iso",
"version": "1.2.6-S1",
"md5sum": "449873ae455d5f3f509db7a614e86984",
"filename": "vyos-1.2.8-amd64.iso",
"version": "1.2.8",
"md5sum": "0ad879db903efdbf1c39dc945e165931",
"filesize": 429916160,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-8-generic-iso-image"
},
{
"filename": "vyos-1.2.7-amd64.iso",
"version": "1.2.7",
"md5sum": "1a06255edfac63fa3ea89353317130bf",
"filesize": 428867584,
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-6-s1-generic-iso-image"
"download_url": "https://support.vyos.io/en/downloads/files/vyos-1-2-7-generic-iso-image"
},
{
"filename": "vyos-1.1.8-amd64.iso",
@@ -59,16 +66,24 @@
],
"versions": [
{
"name": "1.3-snapshot-202101",
"name": "1.3.0-rc6",
"images": {
"hda_disk_image": "vyos-1.3-rolling-202101-qemu.qcow2"
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "vyos-1.3.0-rc6-amd64.iso"
}
},
{
"name": "1.2.6-S1",
"name": "1.2.8",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "vyos-1.2.6-S1-amd64.iso"
"cdrom_image": "vyos-1.2.8-amd64.iso"
}
},
{
"name": "1.2.7",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "vyos-1.2.7-amd64.iso"
}
},
{
+1 -1
View File
@@ -48,4 +48,4 @@
}
}
]
}
}
+13 -7
View File
@@ -481,7 +481,7 @@ class BaseManager:
if not path:
return ""
orig_path = path
orig_path = os.path.normpath(path)
server_config = self.config.get_section_config("Server")
img_directory = self.get_images_directory()
@@ -494,7 +494,8 @@ class BaseManager:
if re.match(r"^[A-Z]:", path) is not None:
raise NodeError("{} is not allowed on this remote server. Please only use a file from '{}'".format(path, img_directory))
if not os.path.isabs(path):
if not os.path.isabs(orig_path):
for directory in valid_directory_prefices:
log.debug("Searching for image '{}' in '{}'".format(orig_path, directory))
path = self._recursive_search_file_in_directory(directory, orig_path)
@@ -503,6 +504,12 @@ class BaseManager:
# Not found we try the default directory
log.debug("Searching for image '{}' in default directory".format(orig_path))
# check that the image path is in the default image directory
#common_prefix = os.path.commonprefix([orig_path, img_directory])
#if common_prefix != img_directory:
# raise NodeError("{} is not allowed. Please only use a file from '{}'".format(orig_path, img_directory))
s = os.path.split(orig_path)
path = force_unix_path(os.path.join(img_directory, *s))
if os.path.exists(path):
@@ -517,7 +524,6 @@ class BaseManager:
return path
raise ImageMissingError(orig_path)
# Check to see if path is an absolute path to a valid directory
path = force_unix_path(path)
for directory in valid_directory_prefices:
log.debug("Searching for image '{}' in '{}'".format(orig_path, directory))
@@ -525,7 +531,8 @@ class BaseManager:
if os.path.exists(path):
return path
raise ImageMissingError(orig_path)
raise NodeError("{} is not allowed on this remote server. Please only use a file from '{}'".format(path, img_directory))
raise NodeError("{} is not allowed on this remote server. Please only use a file from '{}'"
.format(path, img_directory))
def _recursive_search_file_in_directory(self, directory, searched_file):
"""
@@ -533,12 +540,11 @@ class BaseManager:
:returns: Path or None if not found
"""
s = os.path.split(searched_file)
s = os.path.split(searched_file)
for root, dirs, files in os.walk(directory):
for file in files:
# If filename is the same
if s[1] == file and (s[0] == '' or s[0] == os.path.basename(root)):
if s[1] == file and (s[0] == '' or root == os.path.join(directory, s[0])):
path = os.path.normpath(os.path.join(root, s[1]))
if os.path.exists(path):
return path
+1 -1
View File
@@ -430,7 +430,7 @@ class BaseNode:
telnet_writer.write(msg.data.encode())
await telnet_writer.drain()
elif msg.type == aiohttp.WSMsgType.BINARY:
await telnet_writer.write(msg.data)
telnet_writer.write(msg.data)
await telnet_writer.drain()
elif msg.type == aiohttp.WSMsgType.ERROR:
log.debug("Websocket connection closed with exception {}".format(ws.exception()))
+3 -2
View File
@@ -362,12 +362,12 @@ class Cloud(BaseNode):
"""
# Wireless adapters are not well supported by the libpcap on OSX
if (await self._is_wifi_adapter_osx(port_info["interface"])):
if await self._is_wifi_adapter_osx(port_info["interface"]):
raise NodeError("Connecting to a Wireless adapter is not supported on Mac OS")
if port_info["interface"].startswith("vmnet"):
# Use a special NIO to connect to VMware vmnet interfaces on OSX (libpcap doesn't support them)
await self._ubridge_send('bridge add_nio_fusion_vmnet {name} "{interface}"'.format(name=bridge_name,
interface=port_info["interface"]))
interface=port_info["interface"]))
return
if not gns3server.utils.interfaces.has_netmask(port_info["interface"]):
raise NodeError("Interface {} has no netmask, interface down?".format(port_info["interface"]))
@@ -402,6 +402,7 @@ class Cloud(BaseNode):
await self._add_ubridge_connection(nio, port_number)
self._nios[port_number] = nio
except (NodeError, UbridgeError) as e:
log.error('Cannot add NIO on cloud "{name}": {error}'.format(name=self._name, error=e))
await self._stop_ubridge()
self.status = "stopped"
self._nios[port_number] = nio
+9
View File
@@ -35,13 +35,22 @@ class Nat(Cloud):
def __init__(self, name, node_id, project, manager, ports=None):
allowed_interfaces = Config.instance().get_section_config("Server").get("allowed_interfaces", None)
if allowed_interfaces:
allowed_interfaces = allowed_interfaces.split(',')
if sys.platform.startswith("linux"):
nat_interface = Config.instance().get_section_config("Server").get("default_nat_interface", "virbr0")
if allowed_interfaces and nat_interface not in allowed_interfaces:
raise NodeError("NAT interface {} is not allowed be used on this server. "
"Please check the server configuration file.".format(nat_interface))
if nat_interface not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]:
raise NodeError("NAT interface {} is missing, please install libvirt".format(nat_interface))
interface = nat_interface
else:
nat_interface = Config.instance().get_section_config("Server").get("default_nat_interface", "vmnet8")
if allowed_interfaces and nat_interface not in allowed_interfaces:
raise NodeError("NAT interface {} is not allowed be used on this server. "
"Please check the server configuration file.".format(nat_interface))
interfaces = list(filter(lambda x: nat_interface in x.lower(),
[interface["name"] for interface in gns3server.utils.interfaces.interfaces()]))
if not len(interfaces):
-2
View File
@@ -152,8 +152,6 @@ class Qemu(BaseManager):
log.debug("Searching for Qemu binaries in '{}'".format(path))
try:
for f in os.listdir(path):
if f.endswith("-spice"):
continue
if (f.startswith("qemu-system") or f.startswith("qemu-kvm") or f == "qemu" or f == "qemu.exe") and \
os.access(os.path.join(path, f), os.X_OK) and \
os.path.isfile(os.path.join(path, f)):
+66 -33
View File
@@ -615,7 +615,7 @@ class QemuVM(BaseNode):
if not mac_address:
# use the node UUID to generate a random MAC address
self._mac_address = "0c:%s:%s:%s:%s:00" % (self.project.id[-4:-2], self.project.id[-2:], self.id[-4:-2], self.id[-2:])
self._mac_address = "0c:%s:%s:%s:00:00" % (self.id[2:4], self.id[4:6], self.id[6:8])
else:
self._mac_address = mac_address
@@ -829,20 +829,26 @@ class QemuVM(BaseNode):
id=self._id,
options=options))
if not sys.platform.startswith("linux"):
if "-no-kvm" in options:
options = options.replace("-no-kvm", "")
if "-enable-kvm" in options:
# "-no-kvm" and "-no-hax' are deprecated since Qemu v5.2
if "-no-kvm" in options:
options = options.replace("-no-kvm", "-machine accel=tcg")
if "-no-hax" in options:
options = options.replace("-no-hax", "-machine accel=tcg")
if "-enable-kvm" in options:
if not sys.platform.startswith("linux"):
# KVM can only be enabled on Linux
options = options.replace("-enable-kvm", "")
else:
if "-no-hax" in options:
options = options.replace("-no-hax", "")
if "-enable-hax" in options:
else:
options = options.replace("-enable-kvm", "-machine accel=kvm")
if "-enable-hax" in options:
if not sys.platform.startswith("win"):
# HAXM is only available on Windows
options = options.replace("-enable-hax", "")
if "-icount" in options and ("-no-kvm" not in options):
# automatically add the -no-kvm option if -icount is detected
# to help with the migration of ASA VMs created before version 1.4
options = "-no-kvm " + options
else:
options = options.replace("-enable-hax", "-machine accel=hax")
self._options = options.strip()
@property
@@ -1641,23 +1647,16 @@ class QemuVM(BaseNode):
def _get_qemu_img(self):
"""
Search the qemu-img binary in the same binary of the qemu binary
for avoiding version incompatibility.
to avoid version incompatibility.
:returns: qemu-img path or raise an error
"""
qemu_img_path = ""
qemu_path_dir = os.path.dirname(self.qemu_path)
try:
for f in os.listdir(qemu_path_dir):
if f.startswith("qemu-img"):
qemu_img_path = os.path.join(qemu_path_dir, f)
except OSError as e:
raise QemuError("Error while looking for qemu-img in {}: {}".format(qemu_path_dir, e))
if not qemu_img_path:
raise QemuError("Could not find qemu-img in {}".format(qemu_path_dir))
return qemu_img_path
qemu_image_path = shutil.which("qemu-img", path=qemu_path_dir)
if qemu_image_path:
return qemu_image_path
raise QemuError("Could not find qemu-img in {}".format(qemu_path_dir))
async def _qemu_img_exec(self, command):
@@ -1671,10 +1670,37 @@ class QemuVM(BaseNode):
log.info("{} returned with {}".format(self._get_qemu_img(), retcode))
return retcode
async def _find_disk_file_format(self, disk):
qemu_img_path = self._get_qemu_img()
try:
output = await subprocess_check_output(qemu_img_path, "info", "--output=json", disk)
except subprocess.SubprocessError as e:
raise QemuError("Error received while checking Qemu disk format: {}".format(e))
if output:
try:
json_data = json.loads(output)
except ValueError as e:
raise QemuError("Invalid JSON data returned by qemu-img: {}".format(e))
return json_data.get("format")
async def _create_linked_clone(self, disk_name, disk_image, disk):
try:
qemu_img_path = self._get_qemu_img()
command = [qemu_img_path, "create", "-o", "backing_file={}".format(disk_image), "-f", "qcow2", disk]
backing_file_format = await self._find_disk_file_format(disk_image)
if not backing_file_format:
raise QemuError("Could not detect format for disk image: {}".format(disk_image))
backing_options, base_qcow2 = Qcow2.backing_options(disk_image)
if base_qcow2 and base_qcow2.crypt_method:
# Workaround for https://gitlab.com/qemu-project/qemu/-/issues/441
# (we have to pass -u and the size). Also embed secret name.
command = [qemu_img_path, "create", "-b", backing_options,
"-F", backing_file_format, "-f", "qcow2", "-u", disk, str(base_qcow2.size)]
else:
command = [qemu_img_path, "create", "-o", "backing_file={}".format(disk_image),
"-F", backing_file_format, "-f", "qcow2", disk]
retcode = await self._qemu_img_exec(command)
if retcode:
stdout = self.read_qemu_img_stdout()
@@ -1838,13 +1864,14 @@ class QemuVM(BaseNode):
if retcode == 3:
# image has leaked clusters, but is not corrupted, let's try to fix it
log.warning("Qemu image {} has leaked clusters".format(disk_image))
if (await self._qemu_img_exec([qemu_img_path, "check", "-r", "leaks", "{}".format(disk_image)])) == 3:
if await self._qemu_img_exec([qemu_img_path, "check", "-r", "leaks", "{}".format(disk_image)]) == 3:
self.project.emit("log.warning", {"message": "Qemu image '{}' has leaked clusters and could not be fixed".format(disk_image)})
elif retcode == 2:
# image is corrupted, let's try to fix it
log.warning("Qemu image {} is corrupted".format(disk_image))
if (await self._qemu_img_exec([qemu_img_path, "check", "-r", "all", "{}".format(disk_image)])) == 2:
if await self._qemu_img_exec([qemu_img_path, "check", "-r", "all", "{}".format(disk_image)]) == 2:
self.project.emit("log.warning", {"message": "Qemu image '{}' is corrupted and could not be fixed".format(disk_image)})
# ignore retcode == 1. One reason is that the image is encrypted and there is no encrypt.key-secret available
except (OSError, subprocess.SubprocessError) as e:
stdout = self.read_qemu_img_stdout()
raise QemuError("Could not check '{}' disk image: {}\n{}".format(disk_name, e, stdout))
@@ -1855,12 +1882,18 @@ class QemuVM(BaseNode):
# create the disk
await self._create_linked_clone(disk_name, disk_image, disk)
else:
# The disk exists we check if the clone works
backing_file_format = await self._find_disk_file_format(disk_image)
if not backing_file_format:
raise QemuError("Could not detect format for disk image: {}".format(disk_image))
# Rebase the image. This is in case the base image moved to a different directory,
# which will be the case if we imported a portable project. This uses
# get_abs_image_path(hdX_disk_image) and ignores the old base path embedded
# in the qcow2 file itself.
try:
qcow2 = Qcow2(disk)
await qcow2.rebase(qemu_img_path, disk_image)
await qcow2.rebase(qemu_img_path, disk_image, backing_file_format)
except (Qcow2Error, OSError) as e:
raise QemuError("Could not use qcow2 disk image '{}' for {} {}".format(disk_image, disk_name, e))
raise QemuError("Could not use qcow2 disk image '{}' for {}: {}".format(disk_image, disk_name, e))
else:
disk = disk_image
@@ -2078,7 +2111,7 @@ class QemuVM(BaseNode):
if require_kvm is not None:
require_hardware_accel = require_kvm
if enable_hardware_accel and "-no-kvm" not in options and "-no-hax" not in options:
if enable_hardware_accel and "-machine accel=tcg" not in options:
# Turn OFF hardware acceleration for non x86 architectures
if sys.platform.startswith("win"):
supported_binaries = ["qemu-system-x86_64.exe", "qemu-system-x86_64w.exe", "qemu-system-i386.exe", "qemu-system-i386w.exe"]
+37 -4
View File
@@ -15,6 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import os
import asyncio
import struct
@@ -58,11 +59,12 @@ class Qcow2:
# uint64_t snapshots_offset;
# } QCowHeader;
struct_format = ">IIQi"
struct_format = ">IIQiiQi"
with open(self._path, 'rb') as f:
content = f.read(struct.calcsize(struct_format))
try:
self.magic, self.version, self.backing_file_offset, self.backing_file_size = struct.unpack_from(struct_format, content)
(self.magic, self.version, self.backing_file_offset, self.backing_file_size,
self.cluster_bits, self.size, self.crypt_method) = struct.unpack_from(struct_format, content)
except struct.error:
raise Qcow2Error("Invalid file header for {}".format(self._path))
@@ -87,17 +89,48 @@ class Qcow2:
return None
return path
async def rebase(self, qemu_img, base_image):
@staticmethod
def backing_options(base_image):
"""
If the base_image is encrypted qcow2, return options for the upper layer
which include a secret name (equal to the basename)
:param base_image: Path to the base file (which may or may not be qcow2)
:returns: (base image string, Qcow2 object representing base image or None)
"""
try:
base_qcow2 = Qcow2(base_image)
if base_qcow2.crypt_method:
# Embed a secret name so it doesn't have to be passed to qemu -drive ...
options = {
"encrypt.key-secret": os.path.basename(base_image),
"driver": "qcow2",
"file": {
"driver": "file",
"filename": base_image,
},
}
return ("json:"+json.dumps(options, separators=(',', ':')), base_qcow2)
else:
return (base_image, base_qcow2)
except Qcow2Error:
return (base_image, None) # non-qcow2 base images are acceptable (e.g. vmdk, raw image)
async def rebase(self, qemu_img, base_image, backing_file_format):
"""
Rebase a linked clone in order to use the correct disk
:param qemu_img: Path to the qemu-img binary
:param base_image: Path to the base image
:param backing_file_format: File format of the base image
"""
if not os.path.exists(base_image):
raise FileNotFoundError(base_image)
command = [qemu_img, "rebase", "-u", "-b", base_image, self._path]
backing_options, _ = Qcow2.backing_options(base_image)
command = [qemu_img, "rebase", "-u", "-b", backing_options, "-F", backing_file_format, self._path]
process = await asyncio.create_subprocess_exec(*command)
retcode = await process.wait()
if retcode != 0:
+38 -3
View File
@@ -27,6 +27,7 @@ import asyncio
import subprocess
import logging
import codecs
import ipaddress
from collections import OrderedDict
from gns3server.utils.interfaces import interfaces
@@ -51,6 +52,7 @@ class VMware(BaseManager):
self._vmrun_path = None
self._host_type = None
self._vmnets = []
self._vmnets_info = {}
self._vmnet_start_range = 2
if sys.platform.startswith("win"):
self._vmnet_end_range = 19
@@ -273,7 +275,7 @@ class VMware(BaseManager):
else:
# location on Linux
vmware_networking_file = "/etc/vmware/networking"
vmnet_interfaces = []
vmnet_interfaces = {}
try:
with open(vmware_networking_file, "r", encoding="utf-8") as f:
for line in f.read().splitlines():
@@ -281,7 +283,20 @@ class VMware(BaseManager):
if match:
vmnet = "vmnet{}".format(match.group(1))
if vmnet not in ("vmnet0", "vmnet1", "vmnet8"):
vmnet_interfaces.append(vmnet)
vmnet_interfaces[vmnet] = {}
with open(vmware_networking_file, "r", encoding="utf-8") as f:
for line in f.read().splitlines():
match = re.search(r"VNET_([0-9]+)_HOSTONLY_SUBNET\s+(.*)", line)
if match:
vmnet = "vmnet{}".format(match.group(1))
if vmnet in vmnet_interfaces.keys():
vmnet_interfaces[vmnet]["subnet"] = match.group(2)
match = re.search(r"VNET_([0-9]+)_HOSTONLY_NETMASK\s+(.*)", line)
if match:
vmnet = "vmnet{}".format(match.group(1))
if vmnet in vmnet_interfaces.keys():
vmnet_interfaces[vmnet]["netmask"] = match.group(2)
except OSError as e:
raise VMwareError("Cannot open {}: {}".format(vmware_networking_file, e))
return vmnet_interfaces
@@ -324,6 +339,25 @@ class VMware(BaseManager):
raise VMwareError("No VMnet interface available between vmnet{} and vmnet{}. Go to preferences VMware / Network / Configure to add more interfaces.".format(self._vmnet_start_range, self._vmnet_end_range))
return self._vmnets.pop(0)
def find_bridge_interface(self, vmnet_interface):
"""
Find the bridge interface that is used for the vmnet interface in VMware.
"""
if vmnet_interface in self._vmnets_info.keys():
subnet = self._vmnets_info[vmnet_interface].get("subnet", None)
netmask = self._vmnets_info[vmnet_interface].get("netmask", None)
if subnet and netmask:
for interface in interfaces():
try:
network = ipaddress.ip_network(f"{subnet}/{netmask}")
ip = ipaddress.ip_address(interface["ip_address"])
except ValueError:
continue
if ip in network:
return interface["name"]
return None
def refresh_vmnet_list(self, ubridge=True):
if ubridge:
@@ -331,6 +365,8 @@ class VMware(BaseManager):
vmnet_interfaces = self._get_vmnet_interfaces_ubridge()
else:
vmnet_interfaces = self._get_vmnet_interfaces()
vmnet_interfaces = list(vmnet_interfaces.keys())
self._vmnets_info = vmnet_interfaces.copy()
# remove vmnets already in use
for vmware_vm in self._nodes.values():
@@ -734,5 +770,4 @@ class VMware(BaseManager):
if __name__ == '__main__':
loop = asyncio.get_event_loop()
vmware = VMware.instance()
print("=> Check version")
loop.run_until_complete(asyncio.ensure_future(vmware.check_vmware_version()))
+22 -6
View File
@@ -23,9 +23,11 @@ import sys
import os
import asyncio
import tempfile
import platform
from gns3server.utils.asyncio.telnet_server import AsyncioTelnetServer
from gns3server.utils.asyncio.serial import asyncio_open_serial
from gns3server.utils import parse_version
from gns3server.utils.asyncio import locking
from collections import OrderedDict
from .vmware_error import VMwareError
@@ -252,8 +254,13 @@ class VMwareVM(BaseNode):
if self._get_vmx_setting(connected):
del self._vmx_pairs[connected]
use_ubridge = True
# use alternative method to find vmnet interfaces on macOS >= 11.0 (BigSur)
# because "bridge" interfaces are used instead and they are only created on the VM starts
if sys.platform.startswith("darwin") and parse_version(platform.mac_ver()[0]) >= parse_version("11.0.0"):
use_ubridge = False
self.manager.refresh_vmnet_list(ubridge=use_ubridge)
# then configure VMware network adapters
self.manager.refresh_vmnet_list()
for adapter_number in range(0, self._adapters):
custom_adapter = self._get_custom_adapter_settings(adapter_number)
@@ -333,8 +340,17 @@ class VMwareVM(BaseNode):
vmnet_interface = os.path.basename(self._vmx_pairs[vnet])
if sys.platform.startswith("darwin"):
# special case on OSX, we cannot bind VMnet interfaces using the libpcap
await self._ubridge_send('bridge add_nio_fusion_vmnet {name} "{interface}"'.format(name=vnet, interface=vmnet_interface))
if parse_version(platform.mac_ver()[0]) >= parse_version("11.0.0"):
# a bridge interface (bridge100, bridge101 etc.) is used instead of a vmnet interface
# on macOS >= 11.0 (Big Sur)
vmnet_interface = self.manager.find_bridge_interface(vmnet_interface)
if not vmnet_interface:
raise VMwareError(f"Could not find bridge interface linked with {vmnet_interface}")
block_host_traffic = self.manager.config.get_section_config("VMware").getboolean("block_host_traffic", False)
await self._add_ubridge_ethernet_connection(vnet, vmnet_interface, block_host_traffic)
else:
# special case on macOS, we cannot bind VMnet interfaces using the libpcap
await self._ubridge_send('bridge add_nio_fusion_vmnet {name} "{interface}"'.format(name=vnet, interface=vmnet_interface))
else:
block_host_traffic = self.manager.config.get_section_config("VMware").getboolean("block_host_traffic", False)
await self._add_ubridge_ethernet_connection(vnet, vmnet_interface, block_host_traffic)
@@ -426,7 +442,7 @@ class VMwareVM(BaseNode):
if self.status == "started":
return
if (await self.is_running()):
if await self.is_running():
raise VMwareError("The VM is already running in VMware")
ubridge_path = self.ubridge_path
@@ -476,7 +492,7 @@ class VMwareVM(BaseNode):
await self._stop_ubridge()
try:
if (await self.is_running()):
if await self.is_running():
if self.on_close == "save_vm_state":
await self._control_vm("suspend")
elif self.on_close == "shutdown_signal":
@@ -728,7 +744,7 @@ class VMwareVM(BaseNode):
# check for the connection type
connection_type = "ethernet{}.connectiontype".format(adapter_number)
if not self._use_any_adapter and connection_type in self._vmx_pairs and self._vmx_pairs[connection_type] in ("nat", "bridged", "hostonly"):
if (await self.is_running()):
if await self.is_running():
raise VMwareError("Attachment '{attachment}' is configured on network adapter {adapter_number}. "
"Please stop VMware VM '{name}' to link to this adapter and allow GNS3 to change the attachment type.".format(attachment=self._vmx_pairs[connection_type],
adapter_number=adapter_number,
+11 -3
View File
@@ -53,6 +53,7 @@ class Controller:
self._notification = Notification(self)
self.gns3vm = GNS3VM(self)
self.symbols = Symbols()
self._ssl_context = None
self._appliance_manager = ApplianceManager()
self._template_manager = TemplateManager()
self._iou_license_settings = {"iourc_content": "",
@@ -82,9 +83,9 @@ class Controller:
computes = self._load_controller_settings()
from gns3server.web.web_server import WebServer
ssl_context = WebServer.instance(host=host, port=port).ssl_context()
self._ssl_context = WebServer.instance(host=host, port=port).ssl_context()
protocol = server_config.get("protocol", "http")
if ssl_context and protocol != "https":
if self._ssl_context and protocol != "https":
log.warning("Protocol changed to 'https' for local compute because SSL is enabled".format(port))
protocol = "https"
try:
@@ -97,7 +98,7 @@ class Controller:
user=server_config.get("user", ""),
password=server_config.get("password", ""),
force=True,
ssl_context=ssl_context)
ssl_context=self._ssl_context)
except aiohttp.web.HTTPConflict:
log.fatal("Cannot access to the local server, make sure something else is not running on the TCP port {}".format(port))
sys.exit(1)
@@ -115,6 +116,13 @@ class Controller:
await self.load_projects()
await self._project_auto_open()
def ssl_context(self):
"""
Returns the SSL context for the server.
"""
return self._ssl_context
def _update_config(self):
"""
Call this when the server configuration file changes.
@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import shutil
import json
import uuid
import asyncio
@@ -181,6 +182,7 @@ class ApplianceManager:
Controller.instance().save()
json_data = await response.json()
appliances_dir = get_resource('appliances')
downloaded_appliance_files = []
for appliance in json_data:
if appliance["type"] == "file":
appliance_name = appliance["name"]
@@ -201,6 +203,21 @@ class ApplianceManager:
f.write(appliance_data)
except OSError as e:
raise aiohttp.web.HTTPConflict(text="Could not write appliance file '{}': {}".format(path, e))
downloaded_appliance_files.append(appliance_name)
# delete old appliance files
for filename in os.listdir(appliances_dir):
file_path = os.path.join(appliances_dir, filename)
if filename in downloaded_appliance_files:
continue
try:
if os.path.isfile(file_path) or os.path.islink(file_path):
log.info("Deleting old appliance file {}".format(file_path))
os.unlink(file_path)
except OSError as e:
log.warning("Could not delete old appliance file '{}': {}".format(file_path, e))
continue
except ValueError as e:
raise aiohttp.web.HTTPConflict(text="Could not read appliances information from GitHub: {}".format(e))
+2 -2
View File
@@ -312,7 +312,7 @@ class Compute:
url = self._getUrl("/projects/{}/files/{}".format(project.id, path))
response = await self._session().request("GET", url, auth=self._auth)
if response.status == 404:
raise aiohttp.web.HTTPNotFound(text="{} not found on compute".format(path))
raise aiohttp.web.HTTPNotFound(text="File '{}' not found on compute".format(path))
return response
async def download_image(self, image_type, image):
@@ -327,7 +327,7 @@ class Compute:
url = self._getUrl("/{}/images/{}".format(image_type, image))
response = await self._session().request("GET", url, auth=self._auth)
if response.status == 404:
raise aiohttp.web.HTTPNotFound(text="{} not found on compute".format(image))
raise aiohttp.web.HTTPNotFound(text="Image '{}' not found on compute".format(image))
return response
async def http_query(self, method, path, data=None, dont_connect=False, **kwargs):
+23 -18
View File
@@ -66,22 +66,26 @@ async def export_project(zstream, project, temporary_dir, include_images=False,
# Export the local files
for root, dirs, files in os.walk(project._path, topdown=True, followlinks=False):
files = [f for f in files if _is_exportable(os.path.join(root, f), include_snapshots)]
for file in files:
path = os.path.join(root, file)
# check if we can export the file
try:
open(path).close()
except OSError as e:
msg = "Could not export file {}: {}".format(path, e)
log.warning(msg)
project.emit_notification("log.warning", {"message": msg})
continue
# ignore the .gns3 file
if file.endswith(".gns3"):
continue
_patch_mtime(path)
zstream.write(path, os.path.relpath(path, project._path))
try:
files = [f for f in files if _is_exportable(os.path.join(root, f), include_snapshots)]
for file in files:
path = os.path.join(root, file)
# check if we can export the file
try:
open(path).close()
except OSError as e:
msg = "Could not export file {}: {}".format(path, e)
log.warning(msg)
project.emit_notification("log.warning", {"message": msg})
continue
# ignore the .gns3 file
if file.endswith(".gns3"):
continue
_patch_mtime(path)
zstream.write(path, os.path.relpath(path, project._path))
except FileNotFoundError as e:
log.warning("Cannot export local file: {}".format(e))
continue
# Export files from remote computes
for compute in project.computes:
@@ -91,8 +95,9 @@ async def export_project(zstream, project, temporary_dir, include_images=False,
if _is_exportable(compute_file["path"], include_snapshots):
log.debug("Downloading file '{}' from compute '{}'".format(compute_file["path"], compute.id))
response = await compute.download_file(project, compute_file["path"])
#if response.status != 200:
# raise aiohttp.web.HTTPConflict(text="Cannot export file from compute '{}'. Compute returned status code {}.".format(compute.id, response.status))
if response.status != 200:
log.warning("Cannot export file from compute '{}'. Compute returned status code {}.".format(compute.id, response.status))
continue
(fd, temp_path) = tempfile.mkstemp(dir=temporary_dir)
async with aiofiles.open(fd, 'wb') as f:
while True:
+5 -4
View File
@@ -38,7 +38,8 @@ Handle the import of project from a .gns3project
"""
async def import_project(controller, project_id, stream, location=None, name=None, keep_compute_id=False):
async def import_project(controller, project_id, stream, location=None, name=None, keep_compute_id=False,
auto_start=False, auto_open=False, auto_close=True):
"""
Import a project contain in a zip file
@@ -98,9 +99,9 @@ async def import_project(controller, project_id, stream, location=None, name=Non
topology = load_topology(os.path.join(path, "project.gns3"))
topology["name"] = project_name
# To avoid unexpected behavior (project start without manual operations just after import)
topology["auto_start"] = False
topology["auto_open"] = False
topology["auto_close"] = True
topology["auto_start"] = auto_start
topology["auto_open"] = auto_open
topology["auto_close"] = auto_close
# Generate a new node id
node_old_to_new = {}
+9
View File
@@ -124,6 +124,7 @@ class Link:
self._link_type = "ethernet"
self._suspended = False
self._filters = {}
self._link_style = {}
@property
def filters(self):
@@ -209,6 +210,12 @@ class Link:
self._project.emit_notification("link.updated", self.__json__())
self._project.dump()
async def update_link_style(self, link_style):
if link_style != self._link_style:
self._link_style = link_style
self._project.emit_notification("link.updated", self.__json__())
self._project.dump()
@property
def created(self):
"""
@@ -454,6 +461,7 @@ class Link:
"nodes": res,
"link_id": self._id,
"filters": self._filters,
"link_style": self._link_style,
"suspend": self._suspended
}
return {
@@ -466,5 +474,6 @@ class Link:
"capture_compute_id": self.capture_compute_id,
"link_type": self._link_type,
"filters": self._filters,
"link_style": self._link_style,
"suspend": self._suspended
}
+6 -3
View File
@@ -25,6 +25,7 @@ import os
from .compute import ComputeConflict, ComputeError
from .ports.port_factory import PortFactory, StandardPortFactory, DynamipsPortFactory
from ..utils.images import images_directories
from ..config import Config
from ..utils.qt import qt_font_to_style
@@ -263,10 +264,12 @@ class Node:
if val is None:
val = ":/symbols/computer.svg"
# No abs path, fix them (bug of 1.X)
try:
if not val.startswith(":") and os.path.abspath(val):
val = os.path.basename(val)
if not val.startswith(":") and os.path.isabs(val):
server_config = Config.instance().get_section_config("Server")
default_symbol_directory = os.path.expanduser(server_config.get("symbols_path", "~/GNS3/symbols"))
if os.path.commonprefix([default_symbol_directory, val]) != default_symbol_directory:
val = os.path.basename(val)
except OSError:
pass
+2
View File
@@ -957,6 +957,8 @@ class Project:
link = await self.add_link(link_id=link_data["link_id"])
if "filters" in link_data:
await link.update_filters(link_data["filters"])
if "link_style" in link_data:
await link.update_link_style(link_data["link_style"])
for node_link in link_data.get("nodes", []):
node = self.get_node(node_link["node_id"])
port = node.get_port(node_link["adapter_number"], node_link["port_number"])
+3 -1
View File
@@ -121,7 +121,9 @@ class Snapshot:
if os.path.exists(project_files_path):
await wait_run_in_executor(shutil.rmtree, project_files_path)
with open(self._path, "rb") as f:
project = await import_project(self._project.controller, self._project.id, f, location=self._project.path)
project = await import_project(self._project.controller, self._project.id, f, location=self._project.path,
auto_start=self._project.auto_start, auto_open=self._project.auto_open,
auto_close=self._project.auto_close)
except (OSError, PermissionError) as e:
raise aiohttp.web.HTTPConflict(text=str(e))
await project.open()
+2 -2
View File
@@ -63,13 +63,13 @@ def _check_topology_schema(topo):
error = "Invalid data in topology file: {} in schema: {}".format(
e.message,
json.dumps(e.schema))
log.critical(error)
log.debug(error)
raise aiohttp.web.HTTPConflict(text=error)
def project_to_topology(project):
"""
:return: A dictionnary with the topology ready to dump to a .gns3
:return: A dictionary with the topology ready to dump to a .gns3
"""
data = {
"project_id": project.id,
+1 -1
View File
@@ -58,7 +58,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://289e75a5996944f9af6de8b071c99cf0:b1caf92ea47a4b489b569e70cd85c02b@o19455.ingest.sentry.io/38482"
DSN = "https://54d3363bab36489fb0f7cbbdda6ca7c5:9f1012f8aa1547f683e00c0aac9b99f6@o19455.ingest.sentry.io/38482"
_instance = None
def __init__(self):
@@ -470,7 +470,8 @@ class DynamipsVMHandler:
async def upload_image(request, response):
dynamips_manager = Dynamips.instance()
await dynamips_manager.write_image(request.match_info["filename"], request.content)
filename = os.path.normpath(request.match_info["filename"])
await dynamips_manager.write_image(filename, request.content)
response.set_status(204)
@Route.get(
@@ -484,15 +485,15 @@ class DynamipsVMHandler:
raw=True,
description="Download a Dynamips IOS image")
async def download_image(request, response):
filename = request.match_info["filename"]
filename = os.path.normpath(request.match_info["filename"])
# Raise error if user try to escape
if filename[0] == "." or os.path.sep in filename:
raise aiohttp.web.HTTPForbidden()
dynamips_manager = Dynamips.instance()
image_path = dynamips_manager.get_abs_image_path(filename)
# Raise error if user try to escape
if filename[0] == ".":
raise aiohttp.web.HTTPForbidden()
await response.stream_file(image_path)
@Route.post(
@@ -428,7 +428,8 @@ class IOUHandler:
async def upload_image(request, response):
iou_manager = IOU.instance()
await iou_manager.write_image(request.match_info["filename"], request.content)
filename = os.path.normpath(request.match_info["filename"])
await iou_manager.write_image(filename, request.content)
response.set_status(204)
@@ -443,15 +444,15 @@ class IOUHandler:
raw=True,
description="Download an IOU image")
async def download_image(request, response):
filename = request.match_info["filename"]
filename = os.path.normpath(request.match_info["filename"])
# Raise error if user try to escape
if filename[0] == "." or os.path.sep in filename:
raise aiohttp.web.HTTPForbidden()
iou_manager = IOU.instance()
image_path = iou_manager.get_abs_image_path(filename)
# Raise error if user try to escape
if filename[0] == ".":
raise aiohttp.web.HTTPForbidden()
await response.stream_file(image_path)
@Route.get(
@@ -20,12 +20,12 @@ import asyncio
import json
import os
import psutil
import tempfile
from gns3server.web.route import Route
from gns3server.compute.project_manager import ProjectManager
from gns3server.compute import MODULES
from gns3server.utils.cpu_percent import CpuPercent
from gns3server.utils.path import is_safe_path
from gns3server.schemas.project import (
PROJECT_OBJECT_SCHEMA,
@@ -247,14 +247,13 @@ class ProjectHandler:
pm = ProjectManager.instance()
project = pm.get_project(request.match_info["project_id"])
path = request.match_info["path"]
path = os.path.normpath(path)
path = os.path.normpath(request.match_info["path"])
# Raise error if user try to escape
if path[0] == ".":
if not is_safe_path(path, project.path):
raise aiohttp.web.HTTPForbidden()
path = os.path.join(project.path, path)
path = os.path.join(project.path, path)
await response.stream_file(path)
@Route.post(
@@ -273,15 +272,14 @@ class ProjectHandler:
pm = ProjectManager.instance()
project = pm.get_project(request.match_info["project_id"])
path = request.match_info["path"]
path = os.path.normpath(path)
path = os.path.normpath(request.match_info["path"])
# Raise error if user try to escape
if path[0] == ".":
if not is_safe_path(path, project.path):
raise aiohttp.web.HTTPForbidden()
path = os.path.join(project.path, path)
response.set_status(200)
path = os.path.join(project.path, path)
response.set_status(201)
try:
os.makedirs(os.path.dirname(path), exist_ok=True)
@@ -207,7 +207,7 @@ class QEMUHandler:
enable_kvm = qemu_manager.config.get_section_config("Qemu").getboolean("enable_kvm")
if enable_kvm is not None:
hardware_accel = enable_kvm
if hardware_accel and "-no-kvm" not in vm.options and "-no-hax" not in vm.options:
if hardware_accel and "-machine accel=tcg" not in vm.options:
pm = ProjectManager.instance()
if pm.check_hardware_virtualization(vm) is False:
raise aiohttp.web.HTTPConflict(text="Cannot start VM with hardware acceleration (KVM/HAX) enabled because hardware virtualization (VT-x/AMD-V) is already used by another software like VMware or VirtualBox")
@@ -552,7 +552,8 @@ class QEMUHandler:
async def upload_image(request, response):
qemu_manager = Qemu.instance()
await qemu_manager.write_image(request.match_info["filename"], request.content)
filename = os.path.normpath(request.match_info["filename"])
await qemu_manager.write_image(filename, request.content)
response.set_status(204)
@Route.get(
@@ -566,15 +567,15 @@ class QEMUHandler:
raw=True,
description="Download Qemu image")
async def download_image(request, response):
filename = request.match_info["filename"]
filename = os.path.normpath(request.match_info["filename"])
# Raise error if user try to escape
if filename[0] == "." or os.path.sep in filename:
raise aiohttp.web.HTTPForbidden()
qemu_manager = Qemu.instance()
image_path = qemu_manager.get_abs_image_path(filename)
# Raise error if user try to escape
if filename[0] == ".":
raise aiohttp.web.HTTPForbidden()
await response.stream_file(image_path)
@Route.get(
@@ -24,6 +24,7 @@ from gns3server.schemas.version import VERSION_SCHEMA
from gns3server.schemas.server_statistics import SERVER_STATISTICS_SCHEMA
from gns3server.compute.port_manager import PortManager
from gns3server.utils.cpu_percent import CpuPercent
from gns3server.utils.path import get_default_project_directory
from gns3server.version import __version__
from aiohttp.web import HTTPConflict
@@ -61,7 +62,7 @@ class ServerHandler:
load_average_percent = [int(x / psutil.cpu_count() * 100) for x in psutil.getloadavg()]
memory_percent = int(psutil.virtual_memory().percent)
swap_percent = int(psutil.swap_memory().percent)
disk_usage_percent = int(psutil.disk_usage('/').percent)
disk_usage_percent = int(psutil.disk_usage(get_default_project_directory()).percent)
except psutil.Error as e:
raise HTTPConflict(text="Psutil error detected: {}".format(e))
response.json({"memory_total": memory_total,
@@ -64,6 +64,8 @@ class LinkHandler:
link = await project.add_link()
if "filters" in request.json:
await link.update_filters(request.json["filters"])
if "link_style" in request.json:
await link.update_link_style(request.json["link_style"])
if "suspend" in request.json:
await link.update_suspend(request.json["suspend"])
try:
@@ -135,6 +137,8 @@ class LinkHandler:
link = project.get_link(request.match_info["link_id"])
if "filters" in request.json:
await link.update_filters(request.json["filters"])
if "link_style" in request.json:
await link.update_link_style(request.json["link_style"])
if "suspend" in request.json:
await link.update_suspend(request.json["suspend"])
if "nodes" in request.json:
@@ -215,6 +219,7 @@ class LinkHandler:
async def pcap(request, response):
project = await Controller.instance().get_loaded_project(request.match_info["project_id"])
ssl_context = Controller.instance().ssl_context()
link = project.get_link(request.match_info["link_id"])
if not link.capturing:
raise aiohttp.web.HTTPConflict(text="This link has no active packet capture")
@@ -226,7 +231,7 @@ class LinkHandler:
headers['Router-Host'] = request.host
body = await request.read()
connector = aiohttp.TCPConnector(limit=None, force_close=True)
connector = aiohttp.TCPConnector(limit=None, force_close=True, ssl_context=ssl_context)
async with aiohttp.ClientSession(connector=connector, headers=headers) as session:
async with session.request(request.method, pcap_streaming_url, timeout=None, data=body) as response:
proxied_response = aiohttp.web.Response(headers=response.headers, status=response.status)
@@ -409,21 +409,19 @@ class NodeHandler:
path = request.match_info["path"]
path = force_unix_path(path)
# Raise error if user try to escape
if path[0] == ".":
if path[0] == "." or "/../" in path:
raise aiohttp.web.HTTPForbidden()
node_type = node.node_type
path = "/project-files/{}/{}/{}".format(node_type, node.id, path)
res = await node.compute.http_query("GET", "/projects/{project_id}/files{path}".format(project_id=project.id, path=path), timeout=None, raw=True)
response.set_status(200)
response.content_type = "application/octet-stream"
response.enable_chunked_encoding()
await response.prepare(request)
await response.write(res.body)
# await response.write_eof() #FIXME: shound't be needed anymore
response.set_status(res.status)
if res.status == 200:
response.content_type = "application/octet-stream"
response.enable_chunked_encoding()
await response.prepare(request)
await response.write(res.body)
@Route.post(
r"/projects/{project_id}/nodes/{node_id}/files/{path:.+}",
@@ -446,14 +444,14 @@ class NodeHandler:
path = force_unix_path(path)
# Raise error if user try to escape
if path[0] == ".":
if path[0] == "." or "/../" in path:
raise aiohttp.web.HTTPForbidden()
node_type = node.node_type
path = "/project-files/{}/{}/{}".format(node_type, node.id, path)
data = await request.content.read() #FIXME: are we handling timeout or large files correctly?
await node.compute.http_query("POST", "/projects/{project_id}/files{path}".format(project_id=project.id, path=path), data=data, timeout=None, raw=True)
response.set_status(201)
res = await node.compute.http_query("POST", "/projects/{project_id}/files{path}".format(project_id=project.id, path=path), data=data, timeout=None, raw=True)
response.set_status(res.status)
@Route.get(
r"/projects/{project_id}/nodes/{node_id}/console/ws",
@@ -28,6 +28,7 @@ from gns3server.controller import Controller
from gns3server.controller.import_project import import_project
from gns3server.controller.export_project import export_project
from gns3server.utils.asyncio import aiozipstream
from gns3server.utils.path import is_safe_path
from gns3server.config import Config
@@ -454,14 +455,12 @@ class ProjectHandler:
controller = Controller.instance()
project = await controller.get_loaded_project(request.match_info["project_id"])
path = request.match_info["path"]
path = os.path.normpath(path).strip('/')
path = os.path.normpath(request.match_info["path"])
# Raise error if user try to escape
if path[0] == ".":
if not is_safe_path(path, project.path):
raise aiohttp.web.HTTPForbidden()
path = os.path.join(project.path, path)
await response.stream_file(path)
@Route.post(
@@ -480,15 +479,13 @@ class ProjectHandler:
controller = Controller.instance()
project = await controller.get_loaded_project(request.match_info["project_id"])
path = request.match_info["path"]
path = os.path.normpath(path).strip("/")
path = os.path.normpath(request.match_info["path"])
# Raise error if user try to escape
if path[0] == ".":
if not is_safe_path(path, project.path):
raise aiohttp.web.HTTPForbidden()
path = os.path.join(project.path, path)
response.set_status(200)
response.set_status(201)
try:
async with aiofiles.open(path, 'wb+') as f:
@@ -78,6 +78,22 @@ class ServerHandler:
pass
response.set_status(201)
@classmethod
@Route.post(
r"/reload",
description="Reload the local server",
status_codes={
200: "Server has reloaded"
})
async def reload(request, response):
from gns3server.web.web_server import WebServer
server = WebServer.instance()
try:
asyncio.ensure_future(server.reload_server())
except asyncio.CancelledError:
pass
@Route.get(
r"/version",
description="Retrieve the server version number",
@@ -23,7 +23,6 @@ import urllib.parse
from gns3server.web.route import Route
from gns3server.controller import Controller
import logging
log = logging.getLogger(__name__)
@@ -44,6 +43,24 @@ class SymbolHandler:
controller = Controller.instance()
response.json(controller.symbols.list())
@Route.get(
r"/symbols/{symbol_id:.+}/dimensions",
description="Get the symbol dimensions",
status_codes={
200: "Symbol dimensions returned"
})
async def get_dimensions(request, response):
controller = Controller.instance()
symbol_id = urllib.parse.unquote(request.match_info["symbol_id"])
try:
width, height, _ = controller.symbols.get_size(symbol_id)
symbol_dimensions = {'width': width, 'height': height}
response.json(symbol_dimensions)
except (KeyError, OSError, ValueError) as e:
log.warning("Could not get symbol dimensions: {}".format(e))
response.set_status(404)
@Route.get(
r"/symbols/{symbol_id:.+}/raw",
description="Get the symbol file",
+1 -1
View File
@@ -92,7 +92,7 @@ class IndexHandler:
filename = os.path.join('static', 'web-ui', filename)
# Raise error if user try to escape
if filename[0] == ".":
if filename[0] == "." or '/../' in filename:
raise aiohttp.web.HTTPForbidden()
static = get_resource(filename)
+21
View File
@@ -68,6 +68,27 @@ LINK_OBJECT_SCHEMA = {
"type": "boolean",
"description": "Suspend the link"
},
"link_style": {
"type": "object",
"description": "Link line style",
"items": {
"type": "object",
"properties": {
"color": {
"description": "Link line color",
"type": "string"
},
"width": {
"description": "Link line width",
"type": "integer"
},
"type": {
"description": "Link line type",
"type": "integer"
}
}
}
},
"filters": FILTER_OBJECT_SCHEMA,
"capturing": {
"description": "Read only property. True if a capture running on the link",
@@ -0,0 +1 @@
"use strict";(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[26],{91026:function(q,c,a){a.r(c),a.d(c,{TopologySummaryComponent:function(){return N}});var t=a(65508),d=a(96852),_=a(14200),m=a(36889),h=a(3941),f=a(15132),p=a(40098),v=a(39095),u=a(88802),y=a(73044),g=a(59412),x=a(93386);function T(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",2),t.NdJ("mousemove",function(r){return t.CHM(o),t.oxw().dragWidget(r)},!1,t.evT)("mouseup",function(){return t.CHM(o),t.oxw().toggleDragging(!1)},!1,t.evT),t.qZA()}}function C(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function S(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",30),t.qZA())}function b(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function E(i,e){if(1&i&&(t.TgZ(0,"div"),t._uU(1),t.qZA()),2&i){var o=t.oxw().$implicit;t.xp6(1),t.lnq(" ",o.console_type," ",o.console_host,":",o.console," ")}}function Z(i,e){1&i&&(t.TgZ(0,"div"),t._uU(1," none "),t.qZA())}function O(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,C,2,0,"svg",26),t.YNc(3,S,2,0,"svg",26),t.YNc(4,b,2,0,"svg",26),t._uU(5),t.qZA(),t.YNc(6,E,2,3,"div",27),t.YNc(7,Z,2,0,"div",27),t.qZA()),2&i){var o=e.$implicit;t.xp6(2),t.Q6J("ngIf","started"===o.status),t.xp6(1),t.Q6J("ngIf","suspended"===o.status),t.xp6(1),t.Q6J("ngIf","stopped"===o.status),t.xp6(1),t.hij(" ",o.name," "),t.xp6(1),t.Q6J("ngIf",null!=o.console&&null!=o.console&&"none"!=o.console_type),t.xp6(1),t.Q6J("ngIf",null==o.console||"none"===o.console_type)}}function M(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",29),t.qZA())}function w(i,e){1&i&&(t.O4$(),t.TgZ(0,"svg",28),t._UZ(1,"rect",31),t.qZA())}function A(i,e){if(1&i&&(t.TgZ(0,"div",25),t.TgZ(1,"div"),t.YNc(2,M,2,0,"svg",26),t.YNc(3,w,2,0,"svg",26),t._uU(4),t.qZA(),t.TgZ(5,"div"),t._uU(6),t.qZA(),t.TgZ(7,"div"),t._uU(8),t.qZA(),t.qZA()),2&i){var o=e.$implicit,s=t.oxw(2);t.xp6(2),t.Q6J("ngIf",o.connected),t.xp6(1),t.Q6J("ngIf",!o.connected),t.xp6(1),t.hij(" ",o.name," "),t.xp6(2),t.hij(" ",o.host," "),t.xp6(2),t.hij(" ",s.server.location," ")}}var P=function(i){return{lightTheme:i}},F=function(){return{right:!0,left:!0,bottom:!0,top:!0}};function D(i,e){if(1&i){var o=t.EpF();t.TgZ(0,"div",3),t.NdJ("mousedown",function(){return t.CHM(o),t.oxw().toggleDragging(!0)})("resizeStart",function(){return t.CHM(o),t.oxw().toggleDragging(!1)})("resizeEnd",function(n){return t.CHM(o),t.oxw().onResizeEnd(n)}),t.TgZ(1,"div",4),t.TgZ(2,"mat-tab-group"),t.TgZ(3,"mat-tab",5),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!0)}),t.TgZ(4,"div",6),t.TgZ(5,"div",7),t.TgZ(6,"mat-select",8),t.TgZ(7,"mat-optgroup",9),t.TgZ(8,"mat-option",10),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("started")}),t._uU(9,"started"),t.qZA(),t.TgZ(10,"mat-option",11),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("suspended")}),t._uU(11,"suspended"),t.qZA(),t.TgZ(12,"mat-option",12),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyStatusFilter("stopped")}),t._uU(13,"stopped"),t.qZA(),t.qZA(),t.TgZ(14,"mat-optgroup",13),t.TgZ(15,"mat-option",14),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("capture")}),t._uU(16,"active capture(s)"),t.qZA(),t.TgZ(17,"mat-option",15),t.NdJ("onSelectionChange",function(){return t.CHM(o),t.oxw().applyCaptureFilter("packet")}),t._uU(18,"active packet captures"),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.TgZ(19,"div",16),t.TgZ(20,"mat-select",17),t.NdJ("selectionChange",function(){return t.CHM(o),t.oxw().setSortingOrder()})("valueChange",function(n){return t.CHM(o),t.oxw().sortingOrder=n}),t.TgZ(21,"mat-option",18),t._uU(22,"sort by name ascending"),t.qZA(),t.TgZ(23,"mat-option",19),t._uU(24,"sort by name descending"),t.qZA(),t.qZA(),t.qZA(),t._UZ(25,"mat-divider",20),t.TgZ(26,"div",21),t.YNc(27,O,8,6,"div",22),t.qZA(),t.qZA(),t.qZA(),t.TgZ(28,"mat-tab",23),t.NdJ("click",function(){return t.CHM(o),t.oxw().toggleTopologyVisibility(!1)}),t.TgZ(29,"div",6),t.TgZ(30,"div",24),t.YNc(31,A,9,5,"div",22),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA(),t.qZA()}if(2&i){var s=t.oxw();t.Q6J("ngStyle",s.style)("ngClass",t.VKq(9,P,s.isLightThemeEnabled))("validateResize",s.validate)("resizeEdges",t.DdM(11,F))("enableGhostResize",!0),t.xp6(20),t.Q6J("value",s.sortingOrder),t.xp6(6),t.Q6J("ngStyle",s.styleInside),t.xp6(1),t.Q6J("ngForOf",s.filteredNodes),t.xp6(4),t.Q6J("ngForOf",s.computes)}}var N=function(){function i(e,o,s,r,n){this.nodesDataSource=e,this.projectService=o,this.computeService=s,this.linksDataSource=r,this.themeService=n,this.closeTopologySummary=new t.vpe,this.style={},this.styleInside={height:"280px"},this.subscriptions=[],this.nodes=[],this.filteredNodes=[],this.sortingOrder="asc",this.startedStatusFilterEnabled=!1,this.suspendedStatusFilterEnabled=!1,this.stoppedStatusFilterEnabled=!1,this.captureFilterEnabled=!1,this.packetFilterEnabled=!1,this.computes=[],this.isTopologyVisible=!0,this.isDragginLine truncated
+103 -480
View File
@@ -23,9 +23,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@angular-react/core
MIT
@angular/animations
MIT
@@ -371,31 +368,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
angular-persistence
MIT
MIT License
Copyright (c) 2017 Scott O'Bryan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
angular-resizable-element
MIT
The MIT License (MIT)
@@ -421,30 +393,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
angular2-indexeddb
MIT
The MIT License (MIT)
Copyright (c) 2016 Gil Fink and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
bootstrap
MIT
The MIT License (MIT)
@@ -471,34 +419,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
classnames
MIT
The MIT License (MIT)
Copyright (c) 2017 Jed Watson
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
core-js
MIT
Copyright (c) 2014-2020 Denis Pushkarev
Copyright (c) 2014-2021 Denis Pushkarev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -519,55 +442,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
css-loader
MIT
Copyright JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
css-to-style
MIT
The MIT License (MIT)
Copyright (c) 2020 Jacob Buck
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
css-tree
MIT
Copyright (C) 2016-2019 by Roman Dvornov
@@ -591,25 +465,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
d
ISC
ISC License
Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
d3-array
BSD-3-Clause
Copyright 2010-2016 Mike Bostock
@@ -1687,88 +1542,124 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dom-helpers
MIT
The MIT License (MIT)
mdn-data
CC0-1.0
CC0 1.0 Universal
Copyright (c) 2015 Jason Quense
Statement of Purpose
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator and
subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Certain owners wish to permanently relinquish those rights to a Work for the
purpose of contributing to a commons of creative, cultural and scientific
works ("Commons") that the public can reliably and without fear of later
claims of infringement build upon, modify, incorporate in other works, reuse
and redistribute as freely as possible in any form whatsoever and for any
purposes, including without limitation commercial purposes. These owners may
contribute to the Commons to promote the ideal of a free culture and the
further production of creative, cultural and scientific works, or to gain
reputation or greater distribution for their Work in part through the use and
efforts of others.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
For these and/or other purposes and motivations, and without any expectation
of additional consideration or compensation, the person associating CC0 with a
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
and publicly distribute the Work under its terms, with knowledge of his or her
Copyright and Related Rights in the Work and the meaning and intended legal
effect of CC0 on those rights.
eev
MIT
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not limited
to, the following:
es5-ext
ISC
ISC License
i. the right to reproduce, adapt, distribute, perform, display, communicate,
and translate a Work;
Copyright (c) 2011-2019, Mariusz Nowak, @medikoo, medikoo.com
ii. moral rights retained by the original author(s) and/or performer(s);
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
iii. publicity and privacy rights pertaining to a person's image or likeness
depicted in a Work;
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data in
a Work;
es6-symbol
ISC
ISC License
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation thereof,
including any amended or successor version of such directive); and
Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com
vii. other similar, equivalent or corresponding rights throughout the world
based on applicable law or treaty, and any national implementations thereof.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
2. Waiver. To the greatest extent permitted by, but not in contravention of,
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
and Related Rights and associated claims and causes of action, whether now
known or unknown (including existing as well as future claims and causes of
action), in the Work (i) in all territories worldwide, (ii) for the maximum
duration provided by applicable law or treaty (including future time
extensions), (iii) in any current or future medium and for any number of
copies, and (iv) for any purpose whatsoever, including without limitation
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
the Waiver for the benefit of each member of the public at large and to the
detriment of Affirmer's heirs and successors, fully intending that such Waiver
shall not be subject to revocation, rescission, cancellation, termination, or
any other legal or equitable action to disrupt the quiet enjoyment of the Work
by the public as contemplated by Affirmer's express Statement of Purpose.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
3. Public License Fallback. Should any part of the Waiver for any reason be
judged legally invalid or ineffective under applicable law, then the Waiver
shall be preserved to the maximum extent permitted taking into account
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
is so judged Affirmer hereby grants to each affected person a royalty-free,
non transferable, non sublicensable, non exclusive, irrevocable and
unconditional license to exercise Affirmer's Copyright and Related Rights in
the Work (i) in all territories worldwide, (ii) for the maximum duration
provided by applicable law or treaty (including future time extensions), (iii)
in any current or future medium and for any number of copies, and (iv) for any
purpose whatsoever, including without limitation commercial, advertising or
promotional purposes (the "License"). The License shall be deemed effective as
of the date CC0 was applied by Affirmer to the Work. Should any part of the
License for any reason be judged legally invalid or ineffective under
applicable law, such partial invalidity or ineffectiveness shall not
invalidate the remainder of the License, and in such case Affirmer hereby
affirms that he or she will not (i) exercise any of his or her remaining
Copyright and Related Rights in the Work or (ii) assert any associated claims
and causes of action with respect to the Work, in either case contrary to
Affirmer's express Statement of Purpose.
4. Limitations and Disclaimers.
ext
ISC
ISC License
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
Copyright (c) 2011-2019, Mariusz Nowak, @medikoo, medikoo.com
b. Affirmer offers the Work as-is and makes no representations or warranties
of any kind concerning the Work, express, implied, statutory or otherwise,
including without limitation warranties of title, merchantability, fitness
for a particular purpose, non infringement, or the absence of latent or
other defects, accuracy, or the present or absence of errors, whether or not
discoverable, all to the greatest extent permissible under applicable law.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without limitation
any person's Copyright and Related Rights in the Work. Further, Affirmer
disclaims responsibility for obtaining any necessary consents, permissions
or other rights required for any use of the Work.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to this
CC0 or use of the Work.
For more information, please see
<http://creativecommons.org/publicdomain/zero/1.0/>
mousetrap
@@ -1977,6 +1868,7 @@ ngx-childprocess
MIT
ngx-device-detector
MIT
ngx-electron
MIT
@@ -2187,157 +2079,6 @@ Apache-2.0
limitations under the License.
object-assign
MIT
The MIT License (MIT)
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
prop-types
MIT
MIT License
Copyright (c) 2013-present, Facebook, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
prop-types-extra
MIT
The MIT License (MIT)
Copyright (c) 2015 react-bootstrap
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
react
MIT
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
react-bootstrap
MIT
The MIT License (MIT)
Copyright (c) 2014-present Stephen J. Collings, Matthew Honnibal, Pieter Vanderwerff
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
react-dom
MIT
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
regenerator-runtime
MIT
MIT License
@@ -2801,31 +2542,6 @@ THE SOFTWARE.
scheduler
MIT
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
source-map
BSD-3-Clause
@@ -2859,7 +2575,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
spark-md5
WTFPL
(WTFPL OR MIT)
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
@@ -2875,31 +2591,6 @@ WTFPL
0. You just DO WHAT THE FUCK YOU WANT TO.
stylenames
MIT
MIT License
Copyright (c) 2016 Kevin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
svg-crowbar
MIT
Copyright (c) 2013 The New York Times
@@ -2926,25 +2617,6 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
type
ISC
ISC License
Copyright (c) 2019, Mariusz Nowak, @medikoo, medikoo.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
uuid
MIT
The MIT License (MIT)
@@ -2970,55 +2642,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
warning
MIT
MIT License
Copyright (c) 2013-present, Facebook, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
webpack
MIT
Copyright JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
xterm
MIT
Copyright (c) 2017-2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
@@ -3094,7 +2717,7 @@ zone.js
MIT
The MIT License
Copyright (c) 2010-2020 Google LLC. http://angular.io/license
Copyright (c) 2010-2020 Google LLC. https://angular.io/license
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+4 -1
View File
@@ -1,6 +1,9 @@
GNS3 WebUI is web implementation of user interface for GNS3 software.
Current version: 2.2.19
Current version: 2.2.24
Bug Fixes & enhancements
- security fixes
Current version: 2020.4.0-beta.1
+13 -14
View File
@@ -1,10 +1,8 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<!DOCTYPE html><html lang="en"><head>
<meta charset="utf-8">
<title>GNS3 Web UI</title>
<!-- It's important to have base here because of the script below //-->
<base href="/static/web-ui/"/>
<base href="/static/web-ui/">
<script>
var userAgent = navigator.userAgent.toLowerCase();
@@ -20,12 +18,12 @@
}
</script>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="assets/favicon.ico">
<script type="application/javascript">
// Github Pages redirection
(function() {
(function () {
var redirect = sessionStorage.redirect;
delete sessionStorage.redirect;
if (redirect && redirect != location.href) {
@@ -33,7 +31,7 @@
}
})();
</script>
<link rel="stylesheet" href="styles.0942250f369e8f2d5439.css"></head>
<style>@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,0.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;}*,:after,:before{box-sizing:border-box;}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth;}}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-body-font-family);font-size:1rem;font-size:var(--bs-body-font-size);font-weight:400;font-weight:var(--bs-body-font-weight);line-height:1.5;line-height:var(--bs-body-line-height);color:#212529;color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:#fff;background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;}@font-face{font-family:Noto Sans;src:url(NotoSans-Regular.f55982ed9f2bc3af6185.eot);src:local("Noto Sans Regular"),local("NotoSans-Regular"),url(NotoSans-Regular.f55982ed9f2bc3af6185.eot?#iefix) format("embedded-opentype"),url(NotoSans-Regular.730e73a4d4556fa0efe8.woff2) format("woff2"),url(NotoSans-Regular.22c53c8686edcaecdf66.woff) format("woff"),url(NotoSans-Regular.e962f548522aa99bb8f9.ttf) format("truetype"),url(NotoSans-Regular.8142e5b2e99a1cccafb7.svg#NotoSans-Regular) format("svg");font-weight:400;font-style:normal;}@font-face{font-family:Noto Sans;src:url(NotoSans-Italic.1506cb93f574152bda3d.eot);src:local("Noto Sans Italic"),local("NotoSans-Italic"),url(NotoSans-Italic.1506cb93f574152bda3d.eot?#iefix) format("embedded-opentype"),url(NotoSans-Italic.ca985d172a576d01c77e.woff2) format("woff2"),url(NotoSans-Italic.8a08f0f08e448e4f522e.woff) format("woff"),url(NotoSans-Italic.08690ed789a5532ed7be.ttf) format("truetype"),url(NotoSans-Italic.cecaa17f122ac96a50f8.svg#NotoSans-Italic) format("svg");font-weight:400;font-style:italic;}@font-face{font-family:Noto Sans;src:url(NotoSans-Bold.fe2c3263802c4469728b.eot);src:local("Noto Sans Bold"),local("NotoSans-Bold"),url(NotoSans-Bold.fe2c3263802c4469728b.eot?#iefix) format("embedded-opentype"),url(NotoSans-Bold.3ea2282022a16bb2827b.woff2) format("woff2"),url(NotoSans-Bold.364158e7b3016f83790a.woff) format("woff"),url(NotoSans-Bold.82b1a58ddf26951345dc.ttf) format("truetype"),url(NotoSans-Bold.18ef6a21171328dc11a9.svg#NotoSans-Bold) format("svg");font-weight:700;font-style:normal;}@font-face{font-family:Noto Sans;src:url(NotoSans-BoldItalic.b40d78b2f9e2490108d0.eot);src:local("Noto Sans BoldItalic"),local("NotoSans-BoldItalic"),url(NotoSans-BoldItalic.b40d78b2f9e2490108d0.eot?#iefix) format("embedded-opentype"),url(NotoSans-BoldItalic.f2639d17cfb5c6e74edd.woff2) format("woff2"),url(NotoSans-BoldItalic.ed8d2295c0b2e0a854d8.woff) format("woff"),url(NotoSans-BoldItalic.9e49c91c40231a024afb.ttf) format("truetype"),url(NotoSans-BoldItalic.7930d6e32b12448fc0ae.svg#NotoSans-BoldItalic) format("svg");font-weight:700;font-style:italic;}body{background-color:#e8ecef;}app-root{width:100%;}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:100;src:local("Roboto Thin "),local("Roboto-Thin"),url(roboto-latin-100.c2aa4ab115bf9c6057cb.woff2) format("woff2"),url(roboto-latin-100.a45108d3b34af91f9113.woff) format("woff");}@font-face{font-family:Roboto;font-style:italic;font-display:swap;font-weight:100;src:local("Roboto Thin italic"),local("Roboto-Thinitalic"),url(roboto-latin-100italic.7f839a8652da29745ce4.woff2) format("woff2"),url(roboto-latin-100italic.451d4e559d6f57cdf6a1.woff) format("woff");}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;sLine truncated
<!-- <body class="mat-app-background" oncontextmenu="return false;"> -->
<body class="mat-app-background" oncontextmenu="return false;">
<app-root></app-root>
@@ -41,12 +39,13 @@
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-5D6FZL9923"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag()
{dataLayer.push(arguments);}
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-5D6FZL9923');
</script>
<script src="runtime.7425f237727658da0a30.js" defer></script><script src="polyfills-es5.b186ac526f152db6b6ba.js" nomodule defer></script><script src="polyfills.4fe1bb939733274d40c5.js" defer></script><script src="main.490039d90f88a1275b1d.js" defer></script></body>
</html>
<script src="runtime.001148a9d0f7b37d03b4.js" defer></script><script src="polyfills-es5.300b3ac245f51be06907.js" nomodule defer></script><script src="polyfills.519e27ac94450b1b7e67.js" defer></script><script src="main.99bd505aa7e5588a7375.js" defer></script>
</body></html>
@@ -1 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+/L5":function(e,t,n){var r=n("t1UP").isCustomProperty,i=n("vd7W").TYPE,o=n("4njK").mode,a=i.Ident,s=i.Hash,c=i.Colon,l=i.Semicolon,u=i.Delim;function h(e){return this.Raw(e,o.exclamationMarkOrSemicolon,!0)}function d(e){return this.Raw(e,o.exclamationMarkOrSemicolon,!1)}function f(){var e=this.scanner.tokenIndex,t=this.Value();return"Raw"!==t.type&&!1===this.scanner.eof&&this.scanner.tokenType!==l&&!1===this.scanner.isDelim(33)&&!1===this.scanner.isBalanceEdge(e)&&this.error(),t}function p(){var e=this.scanner.tokenStart;if(this.scanner.tokenType===u)switch(this.scanner.source.charCodeAt(this.scanner.tokenStart)){case 42:case 36:case 43:case 35:case 38:this.scanner.next();break;case 47:this.scanner.next(),this.scanner.isDelim(47)&&this.scanner.next()}return this.eat(this.scanner.tokenType===s?s:a),this.scanner.substrToCursor(e)}function m(){this.eat(u),this.scanner.skipSC();var e=this.consume(a);return"important"===e||e}e.exports={name:"Declaration",structure:{important:[Boolean,String],property:String,value:["Value","Raw"]},parse:function(){var e,t=this.scanner.tokenStart,n=this.scanner.tokenIndex,i=p.call(this),o=r(i),a=o?this.parseCustomProperty:this.parseValue,s=o?d:h,u=!1;return this.scanner.skipSC(),this.eat(c),o||this.scanner.skipSC(),e=a?this.parseWithFallback(f,s):s.call(this,this.scanner.tokenIndex),this.scanner.isDelim(33)&&(u=m.call(this),this.scanner.skipSC()),!1===this.scanner.eof&&this.scanner.tokenType!==l&&!1===this.scanner.isBalanceEdge(n)&&this.error(),{type:"Declaration",loc:this.getLocation(t,this.scanner.tokenStart),important:u,property:i,value:e}},generate:function(e){this.chunk(e.property),this.chunk(":"),this.node(e.value),e.important&&this.chunk(!0===e.important?"!important":"!"+e.important)},walkContext:"declaration"}},"+4/i":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("qCKp"),i=n("odkN");r.Observable.prototype.let=i.letProto,r.Observable.prototype.letBind=i.letProto},"+EXs":function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}n.d(t,"a",function(){return o});var i=n("JL25");function o(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?Object(i.a)(e):t}},"+Kd2":function(e,t,n){var r=n("vd7W").TYPE,i=n("4njK").mode,o=r.Comma;e.exports=function(){var e=this.createList();return this.scanner.skipSC(),e.push(this.Identifier()),this.scanner.skipSC(),this.scanner.tokenType===o&&(e.push(this.Operator()),e.push(this.parseCustomProperty?this.Value(null):this.Raw(this.scanner.tokenIndex,i.exclamationMarkOrSemicolon,!1))),e}},"+Wds":function(e,t,n){"use strict";var r=String.prototype.indexOf;e.exports=function(e){return r.call(this,e,arguments[1])>-1}},"+XMV":function(e,t,n){"use strict";e.exports=n("GOzd")()?String.prototype.contains:n("+Wds")},"+oeQ":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("qCKp"),i=n("H+DX");r.Observable.prototype.observeOn=i.observeOn},"+psR":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("qCKp"),i=n("16Oq");r.Observable.prototype.retry=i.retry},"+qxJ":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("qCKp"),i=n("GsYY");r.Observable.prototype.distinctUntilChanged=i.distinctUntilChanged},"+v8i":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("qCKp");r.Observable.concat=r.concat},"+wdc":function(e,t,n){"use strict";var r,i,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var s=performance;t.unstable_now=function(){return s.now()}}else{var c=Date,l=c.now();t.unstable_now=function(){return c.now()-l}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,h=null,d=function e(){if(null!==u)try{var n=t.unstable_now();u(!0,n),u=null}catch(r){throw setTimeout(e,0),r}};r=function(e){null!==u?setTimeout(r,0,e):(u=e,setTimeout(d,0))},i=function(e,t){h=setTimeout(e,t)},o=function(){clearTimeout(h)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,v=null,b=-1,y=5,_=0;t.unstable_shouldYield=function(){return t.unstable_now()>=_},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a posiLine truncated
@@ -0,0 +1 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[179],{98255:function(ce){function q(f){return Promise.resolve().then(function(){var U=new Error("Cannot find module '"+f+"'");throw U.code="MODULE_NOT_FOUND",U})}q.keys=function(){return[]},q.resolve=q,q.id=98255,ce.exports=q},82908:function(ce){ce.exports=function(f,U){(null==U||U>f.length)&&(U=f.length);for(var B=0,V=new Array(U);B<U;B++)V[B]=f[B];return V},ce.exports.default=ce.exports,ce.exports.__esModule=!0},36457:function(ce){ce.exports=function(f){if(Array.isArray(f))return f},ce.exports.default=ce.exports,ce.exports.__esModule=!0},35036:function(ce){ce.exports=function(f,U){var B=null==f?null:"undefined"!=typeof Symbol&&f[Symbol.iterator]||f["@@iterator"];if(null!=B){var I,C,V=[],Z=!0,T=!1;try{for(B=B.call(f);!(Z=(I=B.next()).done)&&(V.push(I.value),!U||V.length!==U);Z=!0);}catch(v){T=!0,C=v}finally{try{!Z&&null!=B.return&&B.return()}finally{if(T)throw C}}return V}},ce.exports.default=ce.exports,ce.exports.__esModule=!0},13969:function(ce){ce.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},ce.exports.default=ce.exports,ce.exports.__esModule=!0},6326:function(ce,q,f){var U=f(36457),B=f(35036),V=f(54850),Z=f(13969);ce.exports=function(I,C){return U(I)||B(I,C)||V(I,C)||Z()},ce.exports.default=ce.exports,ce.exports.__esModule=!0},54850:function(ce,q,f){var U=f(82908);ce.exports=function(V,Z){if(V){if("string"==typeof V)return U(V,Z);var T=Object.prototype.toString.call(V).slice(8,-1);if("Object"===T&&V.constructor&&(T=V.constructor.name),"Map"===T||"Set"===T)return Array.from(V);if("Arguments"===T||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(T))return U(V,Z)}},ce.exports.default=ce.exports,ce.exports.__esModule=!0},26552:function(ce,q,f){ce.exports=f(55590)},61855:function(ce,q,f){"use strict";f.d(q,{ZT:function(){return B},mG:function(){return v},Jh:function(){return P},ev:function(){return N}});var U=function(te,se){return(U=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(le,de){le.__proto__=de}||function(le,de){for(var ue in de)Object.prototype.hasOwnProperty.call(de,ue)&&(le[ue]=de[ue])})(te,se)};function B(te,se){if("function"!=typeof se&&null!==se)throw new TypeError("Class extends value "+String(se)+" is not a constructor or null");function le(){this.constructor=te}U(te,se),te.prototype=null===se?Object.create(se):(le.prototype=se.prototype,new le)}function v(te,se,le,de){return new(le||(le=Promise))(function(ae,Me){function ye(_t){try{He(de.next(_t))}catch(yt){Me(yt)}}function ot(_t){try{He(de.throw(_t))}catch(yt){Me(yt)}}function He(_t){_t.done?ae(_t.value):function(ae){return ae instanceof le?ae:new le(function(Me){Me(ae)})}(_t.value).then(ye,ot)}He((de=de.apply(te,se||[])).next())})}function P(te,se){var de,ue,ae,Me,le={label:0,sent:function(){if(1&ae[0])throw ae[1];return ae[1]},trys:[],ops:[]};return Me={next:ye(0),throw:ye(1),return:ye(2)},"function"==typeof Symbol&&(Me[Symbol.iterator]=function(){return this}),Me;function ye(He){return function(_t){return function(He){if(de)throw new TypeError("Generator is already executing.");for(;le;)try{if(de=1,ue&&(ae=2&He[0]?ue.return:He[0]?ue.throw||((ae=ue.return)&&ae.call(ue),0):ue.next)&&!(ae=ae.call(ue,He[1])).done)return ae;switch(ue=0,ae&&(He=[2&He[0],ae.value]),He[0]){case 0:case 1:ae=He;break;case 4:return le.label++,{value:He[1],done:!1};case 5:le.label++,ue=He[1],He=[0];continue;case 7:He=le.ops.pop(),le.trys.pop();continue;default:if(!(ae=(ae=le.trys).length>0&&ae[ae.length-1])&&(6===He[0]||2===He[0])){le=0;continue}if(3===He[0]&&(!ae||He[1]>ae[0]&&He[1]<ae[3])){le.label=He[1];break}if(6===He[0]&&le.label<ae[1]){le.label=ae[1],ae=He;break}if(ae&&le.label<ae[2]){le.label=ae[2],le.ops.push(He);break}ae[2]&&le.ops.pop(),le.trys.pop();continue}He=se.call(te,le)}catch(_t){He=[6,_t],ue=0}finally{de=ae=0}if(5&He[0])throw He[1];return{value:He[0]?He[1]:void 0,done:!0}}([He,_t])}}}function N(te,se,le){if(le||2===arguments.length)for(var ae,de=0,ue=se.length;de<ue;de++)(ae||!(de in se))&&(ae||(ae=Array.prototype.slice.call(se,0,de)),ae[de]=se[de]);return te.concat(ae||Array.prototype.slice.call(se))}},739:function(ce,q,f){"use strict";f.d(q,{l3:function(){return T},_j:function(){return V},LC:function(){return Z},ZN:function(){return O},jt:function(){return C},pV:function(){return k},F4:function(){return A},IO:function(){return E},vP:function(){return P},SB:function(){return M},oB:function(){return D},eR:function(){return y},X$:function(){return I},ZE:function(){return L},k1:function(){return j}});var U=f(14105),B=f(18967),V=function K(){(0,B.Z)(this,K)},Z=function K(){(0,B.Z)(this,K)},T="*";function I(K,W){return{type:7,name:K,definitions:W,options:{}}}function C(K){var W=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return{type:4,styles:W,timings:K}}function P(K){var W=arguments.length>1&&void 0!==arguments[1]?Line truncated
@@ -0,0 +1 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[698,429],{92137:function(o,c,t){t(59889),t(8963),t(60145),t(24943),t(8040),t(22665),t(4209),t(82972);var e=t(41071);o.exports=e.Date},16488:function(o,c,t){t(2310),t(56942),t(17500),t(76743),t(38651),t(31070),t(45929),t(98267),t(50346),t(32973),t(42017),t(46895),t(64031),t(93237),t(51641),t(60329),t(38145),t(11821);var e=t(41071);o.exports=e.Math},26596:function(o,c,t){t(7587),t(13961),t(47316),t(82196),t(93011),t(44693),t(5531),t(66389),t(22917),t(90543),t(28327),t(77197);var e=t(41071);o.exports=e.Number},73846:function(o,c,t){t(96886),t(10887),t(29982),t(93241),t(62099),t(48087),t(1853),t(46692),t(7211),t(75418),t(45015),t(86052),t(4569),t(52209),t(90573),t(35212),t(15695),t(80774),t(38145),t(75458);var e=t(41071);o.exports=e.Symbol},69566:function(o){o.exports=function(c){if("function"!=typeof c)throw TypeError(String(c)+" is not a function");return c}},12222:function(o,c,t){var e=t(80285);o.exports=function(r){if(!e(r)&&null!==r)throw TypeError("Can't set "+String(r)+" as a prototype");return r}},68756:function(o,c,t){var e=t(93636),r=t(64121),n=t(29017),a=e("unscopables"),s=Array.prototype;null==s[a]&&n.f(s,a,{configurable:!0,value:r(null)}),o.exports=function(i){s[a][i]=!0}},28565:function(o,c,t){"use strict";var e=t(8271).charAt;o.exports=function(r,n,a){return n+(a?e(r,n).length:1)}},48883:function(o){o.exports=function(c,t,e){if(!(c instanceof t))throw TypeError("Incorrect "+(e?e+" ":"")+"invocation");return c}},68485:function(o,c,t){var e=t(80285);o.exports=function(r){if(!e(r))throw TypeError(String(r)+" is not an object");return r}},61969:function(o,c,t){"use strict";var e=t(64132),r=t(30581),n=t(46681),a=Math.min;o.exports=[].copyWithin||function(i,u){var f=e(this),l=n(f.length),d=r(i,l),h=r(u,l),m=arguments.length>2?arguments[2]:void 0,I=a((void 0===m?l:r(m,l))-h,l-d),v=1;for(h<d&&d<h+I&&(v=-1,h+=I-1,d+=I-1);I-- >0;)h in f?f[d]=f[h]:delete f[d],d+=v,h+=v;return f}},25771:function(o,c,t){"use strict";var e=t(64132),r=t(30581),n=t(46681);o.exports=function(s){for(var i=e(this),u=n(i.length),f=arguments.length,l=r(f>1?arguments[1]:void 0,u),d=f>2?arguments[2]:void 0,h=void 0===d?u:r(d,u);h>l;)i[l++]=s;return i}},84875:function(o,c,t){"use strict";var e=t(43887).forEach,n=t(48561)("forEach");o.exports=n?[].forEach:function(s){return e(this,s,arguments.length>1?arguments[1]:void 0)}},81690:function(o,c,t){"use strict";var e=t(96935),r=t(64132),n=t(62873),a=t(86778),s=t(46681),i=t(51823),u=t(45149);o.exports=function(l){var P,y,p,S,O,T,d=r(l),h="function"==typeof this?this:Array,m=arguments.length,I=m>1?arguments[1]:void 0,v=void 0!==I,E=u(d),g=0;if(v&&(I=e(I,m>2?arguments[2]:void 0,2)),null==E||h==Array&&a(E))for(y=new h(P=s(d.length));P>g;g++)T=v?I(d[g],g):d[g],i(y,g,T);else for(O=(S=E.call(d)).next,y=new h;!(p=O.call(S)).done;g++)T=v?n(S,I,[p.value,g],!0):p.value,i(y,g,T);return y.length=g,y}},8069:function(o,c,t){var e=t(32580),r=t(46681),n=t(30581),a=function(s){return function(i,u,f){var m,l=e(i),d=r(l.length),h=n(f,d);if(s&&u!=u){for(;d>h;)if((m=l[h++])!=m)return!0}else for(;d>h;h++)if((s||h in l)&&l[h]===u)return s||h||0;return!s&&-1}};o.exports={includes:a(!0),indexOf:a(!1)}},43887:function(o,c,t){var e=t(96935),r=t(36994),n=t(64132),a=t(46681),s=t(77192),i=[].push,u=function(f){var l=1==f,d=2==f,h=3==f,m=4==f,I=6==f,v=7==f,E=5==f||I;return function(g,P,y,p){for(var w,V,S=n(g),O=r(S),T=e(P,y,3),j=a(O.length),x=0,M=p||s,C=l?M(g,j):d||v?M(g,0):void 0;j>x;x++)if((E||x in O)&&(V=T(w=O[x],x,S),f))if(l)C[x]=V;else if(V)switch(f){case 3:return!0;case 5:return w;case 6:return x;case 2:i.call(C,w)}else switch(f){case 4:return!1;case 7:i.call(C,w)}return I?-1:h||m?m:C}};o.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},63715:function(o,c,t){"use strict";var e=t(32580),r=t(27543),n=t(46681),a=t(48561),s=Math.min,i=[].lastIndexOf,u=!!i&&1/[1].lastIndexOf(1,-0)<0,f=a("lastIndexOf");o.exports=u||!f?function(h){if(u)return i.apply(this,arguments)||0;var m=e(this),I=n(m.length),v=I-1;for(arguments.length>1&&(v=s(v,r(arguments[1]))),v<0&&(v=I+v);v>=0;v--)if(v in m&&m[v]===h)return v||0;return-1}:i},60551:function(o,c,t){var e=t(58889),r=t(93636),n=t(32046),a=r("species");o.exports=function(s){return n>=51||!e(function(){var i=[];return(i.constructor={})[a]=function(){return{foo:1}},1!==i[s](Boolean).foo})}},48561:function(o,c,t){"use strict";var e=t(58889);o.exports=function(r,n){var a=[][r];return!!a&&e(function(){a.call(null,n||function(){throw 1},1)})}},11241:function(o,c,t){var e=t(69566),r=t(64132),n=t(36994),a=t(46681),s=function(i){return function(u,f,l,d){e(f);var h=r(u),m=n(h),I=a(h.length),v=i?I-1:0,E=i?-1:1;if(l<2)for(;;){if(v in m){d=m[v],v+=E;break}if(v+=E,i?v<0:I<=v)throw TypeError("Reduce of empty array with no initial value")}for(;i?v>=0:I>v;v+=E)v in m&&(d=f(d,m[v],v,h));return d}};o.exports={left:s(!1),right:s(!0)}},93483:function(o){var c=Math.floor,t=functLine truncated
@@ -1 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{"+5Eg":function(t,e,n){var r=n("wA6s"),o=n("6XUM"),i=n("M7Xk").onFreeze,a=n("cZY6"),c=n("rG8t"),u=Object.seal;r({target:"Object",stat:!0,forced:c(function(){u(1)}),sham:!a},{seal:function(t){return u&&o(t)?u(i(t)):t}})},"+IJR":function(t,e,n){n("wA6s")({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},"/AsP":function(t,e,n){var r=n("yIiL"),o=n("SDMg"),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},"/Ybd":function(t,e,n){var r=n("T69T"),o=n("XdSI"),i=n("F26l"),a=n("LdO1"),c=Object.defineProperty;e.f=r?c:function(t,e,n){if(i(t),e=a(e,!0),i(n),o)try{return c(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},"0Ds2":function(t,e,n){var r=n("m41k")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(o){}}return!1}},"0TWp":function(t,e,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";!function(t){var e=t.performance;function n(t){e&&e.mark&&e.mark(t)}function r(t,n){e&&e.measure&&e.measure(t,n)}n("Zone");var o=t.__Zone_symbol_prefix||"__zone_symbol__";function i(t){return o+t}var a=!0===t[i("forceDuplicateZoneCheck")];if(t.Zone){if(a||"function"!=typeof t.Zone.__symbol__)throw new Error("Zone already loaded.");return t.Zone}var c=function(){function e(t,e){this._parent=t,this._name=e?e.name||"unnamed":"<root>",this._properties=e&&e.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,e)}return e.assertZonePatched=function(){if(t.Promise!==M.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(e,"root",{get:function(){for(var t=e.current;t.parent;)t=t.parent;return t},enumerable:!1,configurable:!0}),Object.defineProperty(e,"current",{get:function(){return P.zone},enumerable:!1,configurable:!0}),Object.defineProperty(e,"currentTask",{get:function(){return I},enumerable:!1,configurable:!0}),e.__load_patch=function(o,i){if(M.hasOwnProperty(o)){if(a)throw Error("Already loaded patch: "+o)}else if(!t["__Zone_disable_"+o]){var c="Zone:"+o;n(c),M[o]=i(t,e,j),r(c,c)}},Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),e.prototype.get=function(t){var e=this.getZoneWith(t);if(e)return e._properties[t]},e.prototype.getZoneWith=function(t){for(var e=this;e;){if(e._properties.hasOwnProperty(t))return e;e=e._parent}return null},e.prototype.fork=function(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)},e.prototype.wrap=function(t,e){if("function"!=typeof t)throw new Error("Expecting function got: "+t);var n=this._zoneDelegate.intercept(this,t,e),r=this;return function(){return r.runGuarded(n,this,arguments,e)}},e.prototype.run=function(t,e,n,r){P={parent:P,zone:this};try{return this._zoneDelegate.invoke(this,t,e,n,r)}finally{P=P.parent}},e.prototype.runGuarded=function(t,e,n,r){void 0===e&&(e=null),P={parent:P,zone:this};try{try{return this._zoneDelegate.invoke(this,t,e,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{P=P.parent}},e.prototype.runTask=function(t,e,n){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||b).name+"; Execution: "+this.name+")");if(t.state!==w||t.type!==A&&t.type!==O){var r=t.state!=x;r&&t._transitionTo(x,E),t.runCount++;var o=I;I=t,P={parent:P,zone:this};try{t.type==O&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,e,n)}catch(i){if(this._zoneDelegate.handleError(this,i))throw i}}finally{t.state!==w&&t.state!==_&&(t.type==A||t.data&&t.data.isPeriodic?r&&t._transitionTo(E,x):(t.runCount=0,this._updateTaskCount(t,-1),r&&t._transitionTo(w,x,w))),P=P.parent,I=o}}},e.prototype.scheduleTask=function(t){if(t.zone&&t.zone!==this)for(var e=this;e;){if(e===t.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+t.zone.name);e=e.parent}t._transitionTo(k,w);var n=[];t._zoneDelegates=n,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(r){throw t._transitionTo(_,k,w),this._zoneDelegate.handleError(this,r),r}return t._zoneDelegates===n&&this._updateTaskCount(t,1),t.state==k&&t._transitionTo(E,k),t},e.prototype.scheduleMicroTask=function(t,e,n,r){return this.scheduleTask(new l(T,t,e,n,r,void 0))},e.prototype.scheduleMacroTask=function(t,e,n,r,o){return this.scheduleTask(new l(O,t,e,n,r,o))},e.prototype.scheduleEventTask=function(t,e,n,r,o){return this.scheduleTask(new l(A,t,e,n,r,o))},e.protoLine truncated
@@ -1 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"0TWp":function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";!function(e){var t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function r(e,n){t&&t.measure&&t.measure(e,n)}n("Zone");var o=e.__Zone_symbol_prefix||"__zone_symbol__";function a(e){return o+e}var i=!0===e[a("forceDuplicateZoneCheck")];if(e.Zone){if(i||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}var c=function(){function t(e,t){this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new u(this,this._parent&&this._parent._zoneDelegate,t)}return t.assertZonePatched=function(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(t,"root",{get:function(){for(var e=t.current;e.parent;)e=e.parent;return e},enumerable:!1,configurable:!0}),Object.defineProperty(t,"current",{get:function(){return j.zone},enumerable:!1,configurable:!0}),Object.defineProperty(t,"currentTask",{get:function(){return z},enumerable:!1,configurable:!0}),t.__load_patch=function(o,a){if(D.hasOwnProperty(o)){if(i)throw Error("Already loaded patch: "+o)}else if(!e["__Zone_disable_"+o]){var c="Zone:"+o;n(c),D[o]=a(e,t,C),r(c,c)}},Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},t.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},t.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},t.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},t.prototype.run=function(e,t,n,r){j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{j=j.parent}},t.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{j=j.parent}},t.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");if(e.state!==b||e.type!==Z&&e.type!==P){var r=e.state!=E;r&&e._transitionTo(E,T),e.runCount++;var o=z;z=e,j={parent:j,zone:this};try{e.type==P&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(a){if(this._zoneDelegate.handleError(this,a))throw a}}finally{e.state!==b&&e.state!==S&&(e.type==Z||e.data&&e.data.isPeriodic?r&&e._transitionTo(T,E):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(b,E,b))),j=j.parent,z=o}}},t.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(k,b);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(r){throw e._transitionTo(S,k,b),this._zoneDelegate.handleError(this,r),r}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==k&&e._transitionTo(T,k),e},t.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(O,e,t,n,r,void 0))},t.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new p(P,e,t,n,r,o))},t.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new p(Z,e,t,n,r,o))},t.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");e._transitionTo(w,T,E);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(S,w),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(b,w),e.runCount=0,e},t.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},t}();c.__symbol__=a;var s,l={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,a){return e.invokeTask(n,r,o,a)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},u=function(){function e(e,t,n){this._taskCounts=Line truncated
@@ -0,0 +1 @@
(self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[]).push([[429],{82908:function(H){H.exports=function(re,X){(null==X||X>re.length)&&(X=re.length);for(var ee=0,M=new Array(X);ee<X;ee++)M[ee]=re[ee];return M},H.exports.default=H.exports,H.exports.__esModule=!0},45478:function(H){H.exports=function(re,X){if(!(re instanceof X))throw new TypeError("Cannot call a class as a function")},H.exports.default=H.exports,H.exports.__esModule=!0},29545:function(H){function de(X,ee){for(var M=0;M<ee.length;M++){var fe=ee[M];fe.enumerable=fe.enumerable||!1,fe.configurable=!0,"value"in fe&&(fe.writable=!0),Object.defineProperty(X,fe.key,fe)}}H.exports=function(X,ee,M){return ee&&de(X.prototype,ee),M&&de(X,M),X},H.exports.default=H.exports,H.exports.__esModule=!0},76567:function(H,de,re){var X=re(54850);H.exports=function(M,fe){var K="undefined"!=typeof Symbol&&M[Symbol.iterator]||M["@@iterator"];if(!K){if(Array.isArray(M)||(K=X(M))||fe&&M&&"number"==typeof M.length){K&&(M=K);var Ze=0,De=function(){};return{s:De,n:function(){return Ze>=M.length?{done:!0}:{done:!1,value:M[Ze++]}},e:function(me){throw me},f:De}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var Ne,Fe=!0,Ve=!1;return{s:function(){K=K.call(M)},n:function(){var me=K.next();return Fe=me.done,me},e:function(me){Ve=!0,Ne=me},f:function(){try{!Fe&&null!=K.return&&K.return()}finally{if(Ve)throw Ne}}}},H.exports.default=H.exports,H.exports.__esModule=!0},54850:function(H,de,re){var X=re(82908);H.exports=function(M,fe){if(M){if("string"==typeof M)return X(M,fe);var K=Object.prototype.toString.call(M).slice(8,-1);if("Object"===K&&M.constructor&&(K=M.constructor.name),"Map"===K||"Set"===K)return Array.from(M);if("Arguments"===K||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(K))return X(M,fe)}},H.exports.default=H.exports,H.exports.__esModule=!0},18787:function(H,de,re){"use strict";var X=re(76567).default,ee=re(45478).default,M=re(29545).default,K=(function(r){var t=r.performance;function o(p){t&&t.mark&&t.mark(p)}function a(p,d){t&&t.measure&&t.measure(p,d)}o("Zone");var i=r.__Zone_symbol_prefix||"__zone_symbol__";function l(p){return i+p}var v=!0===r[l("forceDuplicateZoneCheck")];if(r.Zone){if(v||"function"!=typeof r.Zone.__symbol__)throw new Error("Zone already loaded.");return r.Zone}var y=function(){function p(d,e){ee(this,p),this._parent=d,this._name=e?e.name||"unnamed":"<root>",this._properties=e&&e.properties||{},this._zoneDelegate=new E(this,this._parent&&this._parent._zoneDelegate,e)}return M(p,[{key:"parent",get:function(){return this._parent}},{key:"name",get:function(){return this._name}},{key:"get",value:function(e){var n=this.getZoneWith(e);if(n)return n._properties[e]}},{key:"getZoneWith",value:function(e){for(var n=this;n;){if(n._properties.hasOwnProperty(e))return n;n=n._parent}return null}},{key:"fork",value:function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)}},{key:"wrap",value:function(e,n){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var h=this._zoneDelegate.intercept(this,e,n),b=this;return function(){return b.runGuarded(h,this,arguments,n)}}},{key:"run",value:function(e,n,h,b){A={parent:A,zone:this};try{return this._zoneDelegate.invoke(this,e,n,h,b)}finally{A=A.parent}}},{key:"runGuarded",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,h=arguments.length>2?arguments[2]:void 0,b=arguments.length>3?arguments[3]:void 0;A={parent:A,zone:this};try{try{return this._zoneDelegate.invoke(this,e,n,h,b)}catch(J){if(this._zoneDelegate.handleError(this,J))throw J}}finally{A=A.parent}}},{key:"runTask",value:function(e,n,h){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||B).name+"; Execution: "+this.name+")");if(e.state!==j||e.type!==Z&&e.type!==ae){var b=e.state!=P;b&&e._transitionTo(P,W),e.runCount++;var J=ge;ge=e,A={parent:A,zone:this};try{e.type==ae&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,n,h)}catch(c){if(this._zoneDelegate.handleError(this,c))throw c}}finally{e.state!==j&&e.state!==L&&(e.type==Z||e.data&&e.data.isPeriodic?b&&e._transitionTo(W,P):(e.runCount=0,this._updateTaskCount(e,-1),b&&e._transitionTo(j,P,j))),A=A.parent,ge=J}}}},{key:"scheduleTask",value:function(e){if(e.zone&&e.zone!==this)for(var n=this;n;){if(n===e.zone)throw Error("can not reschedule task to ".concat(this.name," which is descendants of the original zone ").concat(e.zone.name));n=n.parent}e._transitionTo(Y,j);var h=[];e._zoneDelegates=h,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(b){throw e._transitionTo(L,Y,j),this._zoneDelegate.handleError(this,b),b}return e._zoneDelegates===h&&this._updateTaskCount(e,1),e.state==Y&&e._transitionTo(W,Y),e}},{key:"scheduleMicroTask",value:function(e,n,h,b){return this.scheduleTask(new k(le,e,n,hLine truncated
@@ -0,0 +1 @@
!function(){"use strict";var e,v={},g={};function n(e){var u=g[e];if(void 0!==u)return u.exports;var t=g[e]={id:e,loaded:!1,exports:{}};return v[e](t,t.exports,n),t.loaded=!0,t.exports}n.m=v,e=[],n.O=function(u,t,a,o){if(!t){var r=1/0;for(i=0;i<e.length;i++){t=e[i][0],a=e[i][1],o=e[i][2];for(var l=!0,f=0;f<t.length;f++)(!1&o||r>=o)&&Object.keys(n.O).every(function(b){return n.O[b](t[f])})?t.splice(f--,1):(l=!1,o<r&&(r=o));if(l){e.splice(i--,1);var s=a();void 0!==s&&(u=s)}}return u}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},n.n=function(e){var u=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(u,{a:u}),u},n.d=function(e,u){for(var t in u)n.o(u,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:u[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce(function(u,t){return n.f[t](e,u),u},[]))},n.u=function(e){return e+".30249f0e3aeb3f791226.js"},n.miniCssF=function(e){return"styles.bc7659e2cee2695de64b.css"},n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,u){return Object.prototype.hasOwnProperty.call(e,u)},function(){var e={},u="gns3-web-ui:";n.l=function(t,a,o,i){if(e[t])e[t].push(a);else{var r,l;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var c=f[s];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==u+o){r=c;break}}r||(l=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,n.nc&&r.setAttribute("nonce",n.nc),r.setAttribute("data-webpack",u+o),r.src=n.tu(t)),e[t]=[a];var d=function(h,b){r.onerror=r.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],r.parentNode&&r.parentNode.removeChild(r),_&&_.forEach(function(m){return m(b)}),h)return h(b)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=d.bind(null,r.onerror),r.onload=d.bind(null,r.onload),l&&document.head.appendChild(r)}}}(),n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.tu=function(u){return void 0===e&&(e={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e.createScriptURL(u)}}(),n.p="",function(){var e={666:0};n.f.j=function(a,o){var i=n.o(e,a)?e[a]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=a){var r=new Promise(function(c,d){i=e[a]=[c,d]});o.push(i[2]=r);var l=n.p+n.u(a),f=new Error;n.l(l,function(c){if(n.o(e,a)&&(0!==(i=e[a])&&(e[a]=void 0),i)){var d=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;f.message="Loading chunk "+a+" failed.\n("+d+": "+p+")",f.name="ChunkLoadError",f.type=d,f.request=p,i[1](f)}},"chunk-"+a,a)}else e[a]=0},n.O.j=function(a){return 0===e[a]};var u=function(a,o){var f,s,i=o[0],r=o[1],l=o[2],c=0;for(f in r)n.o(r,f)&&(n.m[f]=r[f]);if(l)var d=l(n);for(a&&a(o);c<i.length;c++)n.o(e,s=i[c])&&e[s]&&e[s][0](),e[i[c]]=0;return n.O(d)},t=self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[];t.forEach(u.bind(null,0)),t.push=u.bind(null,t.push.bind(t))}()}();
@@ -1 +0,0 @@
!function(e){function r(r){for(var n,l,f=r[0],i=r[1],p=r[2],c=0,s=[];c<f.length;c++)l=f[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(a&&a(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,f=1;f<t.length;f++)0!==o[t[f]]&&(n=!1);n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={0:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,(function(r){return e[r]}).bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="";var f=window.webpackJsonp=window.webpackJsonp||[],i=f.push.bind(f);f.push=r,f=f.slice();for(var p=0;p<f.length;p++)r(f[p]);var a=i;t()}([]);
@@ -1,10 +0,0 @@
/*!
* Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inLine truncated
/*!*/}@keyframes cdk-text-field-autofill-start{
/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{
/*!*/}@keyframes cdk-text-field-autofill-end{
/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation:cdk-text-field-autofill-start 0s 1ms;animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation:cdk-text-field-autofill-end 0s 1ms;animation:cdk-text-field-autofill-end 0s 1ms}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.dark-theme{color:#fff!important}.dark-theme .mat-badge-content{color:#fff;background:#0097a7}.cdk-high-contrast-active .dark-theme .mat-badge-content{outline:1px solid;border-radius:0}.dark-theme .mat-badge-accent .mat-badge-content{background:#b0bec5;color:rgba(0,0,0,.87)}.dark-theme .mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.dark-theme .mat-badge{position:relative}.dark-theme .mat-badge-hidden .mat-badge-content{display:none}.dark-theme .mat-badge-disabled .mat-badge-content{background:#677074;color:hsla(0,0%,100%,.5)}.dark-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.dark-theme .mat-badge-content._mat-animation-noopable,.dark-theme .ng-animate-disabled .mat-badge-content{transition:none}.dark-theme .mat-badge-content.mat-badge-active{transform:none}.dark-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.dark-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.dark-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.dark-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.dark-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.dark-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.dark-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.dark-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.dark-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.dark-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.dark-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.dark-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.dark-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.dark-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.dark-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.dark-theme .mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#263238;color:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.dark-theme .mat-divider{border-top-color:hsla(0,0%,10Line truncated
@@ -0,0 +1,11 @@
@charset "UTF-8";
/*!
* Bootstrap v5.1.1 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,0.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-body-font-family);font-size:1rem;font-size:var(--bs-body-font-size);font-weight:400;font-weight:var(--bs-body-font-weight);line-height:1.5;line-height:var(--bs-body-line-height);color:#212529;color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:#fff;background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=Line truncated
/*!*/}@keyframes cdk-text-field-autofill-start{
/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{
/*!*/}@keyframes cdk-text-field-autofill-end{
/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation:cdk-text-field-autofill-start 0s 1ms;animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation:cdk-text-field-autofill-end 0s 1ms;animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.dark-theme{color:#fff!important}.dark-theme .mat-badge{position:relative}.dark-theme .mat-badge-hidden .mat-badge-content{display:none}.dark-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.dark-theme .mat-badge-content._mat-animation-noopable,.dark-theme .ng-animate-disabled .mat-badge-content{transition:none}.dark-theme .mat-badge-content.mat-badge-active{transform:none}.dark-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.dark-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.dark-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.dark-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.dark-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .dark-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.dark-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.dark-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.dark-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.dark-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.dark-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .dark-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.dark-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.dark-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.dark-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.dark-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.dark-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .dark-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.dark-theme .mat-badge-content{color:#fff;background:#0097a7}.cdk-high-contrast-active .dark-theme .mat-badge-content{outline:1px solid;border-radius:0}.dark-theme .mat-badge-accent .mat-badge-content{background:#b0bec5;color:rgba(0,0,0,.87)}.dark-theme .mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.dark-theme .mat-badge-disabled .mat-badge-content{background:#677074;color:hsla(0,0%,100%,.5)}.dark-theme .mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#263238;color:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.dark-theme .mat-divider{border-top-color:hsla(0,0%,100%,.12)}.dark-theme .mat-divider-vertical{border-right-color:hsla(0,0%,100%,.12)}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-paginator-container{min-height:56px}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-steppLine truncated
@@ -1,60 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"
inkscape:version="0.91 r13725"
sodipodi:docname="atm.svg"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1649"
inkscape:window-height="1069"
id="namedview19"
showgrid="false"
inkscape:zoom="5.5625733"
inkscape:cx="10.639262"
inkscape:cy="37.744295"
inkscape:window-x="1442"
inkscape:window-y="405"
inkscape:window-maximized="0"
inkscape:current-layer="g2348" /><metadata
id="metadata35"><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><defs
id="defs33" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><g
id="g9"><circle
id="circle11"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path13"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g></g></g><g
id="g2348"
transform="matrix(20.299892,0,0,20.757616,28.738101,29.359515)"><path
inkscape:connector-curvature="0"
id="path2341"
d="m -0.57518956,-0.83795069 0,0.21003421 0.42006839,0 0.22976117,0.47460762 0.22860076,-0.47460762 0.41890798,0 0,-0.21003421 0.26805471,0.26689429 -0.26805471,0.26689428 0,-0.19030722 -0.3040274,0 -0.24832773,0.53262812 0.24832773,0.53262819 0.3040274,0 0,-0.19030726 0.26805471,0.2657339 -0.26805471,0.26689429 0,-0.19030723 -0.41890798,0 L 0.07464,0.2273056 l -0.22976117,0.49549507 -0.42006839,0 0,0.19030723 -0.26689423,-0.26689429 0.26689423,-0.2657339 0,0.19030726 0.28662125,0 0.26689429,-0.53262819 -0.26689429,-0.53262812 -0.28662125,0 0,0.19030722 -0.26689423,-0.26689428 0.26689423,-0.26689429"
style="fill:#2d67b9;fill-opacity:1;stroke:none;stroke-width:0.001" /></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" xml:space="preserve" viewBox="0 0 300 300" height="60" width="60">
<circle style="fill:#fffefe" r="150" cy="150" cx="150" transform="matrix(.9552 0 0 .9552 6.721 6.721)"/>
<path style="fill:#2d67b9" d="m150.485.001.484.002.485.004.483.005.484.007.483.009.483.01.482.011.482.013.482.015.481.016.481.017.48.019.48.021.48.022.479.023.479.025.478.027.479.028.477.03.478.031.476.032.477.034.476.036.476.037.475.038.475.04.474.042.474.043.474.044.473.046.472.047.473.049.472.05.471.052.471.053.471.055.47.056.469.057.469.059.469.06.469.062.467.064.468.064.467.067.466.067.466.069.466.071.465.072.464.073.465.075.463.076.463.077.463.079.462.081.462.082.461.083.461.084.92.174.459.089.459.09.459.092.457.093.458.094.456.096.457.097.455.099.456.1.454.101.455.103.453.104.453.105.453.107.452.108.452.11.451.111.45.112.45.114.45.115.449.116.448.118.448.119.447.12.447.122.446.123.446.125.445.125.888.256.444.13.442.131.443.132.441.134.441.135.441.136.44.138.439.139.439.141.438.141.438.143.437.144.436.146.436.147.435.148.435.149.434.151.433.152.433.153.432.155.432.156.431.157.86.318.429.161.429.163.427.163.428.165.426.166.426.167.426.169.424.17.425.171.846.346.422.175.422.176.42.178.421.178.419.18.419.181.418.182.418.184.417.185.416.186.416.187.415.189.414.189.413.191.413.192.824.388.411.196.41.197.41.198.816.4.408.202.406.203.406.204.406.206.404.206.404.208.403.209.403.21.402.211.401.213.4.214.399.214.399.216.796.436.397.219.395.221.396.222.394.223.394.224.393.225.784.454.39.229.39.23.39.231.388.232.388.233.387.235.386.235.385.237.385.238.384.239.383.24.383.241.762.486.38.244.379.246.379.247.377.248.377.249.376.25.376.251.374.252.374.254.373.254.372.256.371.256.37.258.37.259.369.26.368.261.367.262.367.263.365.264.365.265.364.267.363.267.362.268.362.27.72.542.359.273.358.274.357.274.356.276.356.277.355.278.353.279.353.28.352.281.352.282.35.283.35.284.348.285.348.287.347.287.346.288.345.289.344.29.344.292.342.292.342.293.68.59.339.296.338.297.337.299.336.299.336.3.334.301.334.303.332.303.332.304.331.305.329.306.329.308.328.308.327.309.327.31.325.311.324.312.324.313.322.314.642.63.32.317.636.636.317.32.63.642.314.322.313.324.312.324.311.325.31.327.309.327.308.328.308.329.306.329.305.331.304.332.303.332.303.334.301.334.3.336.299.336.299.337.297.338.296.339.59.68.293.342.292.342.292.344.29.344.289.345.288.346.287.347.287.348.285.348.284.35.283.35.282.352.281.352.28.353.279.353.278.355.277.356.276.356.274.357.274.358.273.359.542.72.27.362.268.362.267.363.267.364.265.365.264.365.263.367.262.367.261.368.26.369.259.37.258.37.256.371.256.372.254.373.254.374.252.374.251.376.25.376.249.377.248.377.247.379.246.379.244.38.486.762.241.383.24.383.239.384.238.385.237.385.235.386.235.387.233.388.232.388.231.39.23.39.229.39.454.784.225.393.224.394.223.394.222.396.221.395.219.397.436.796.216.399.214.399.214.4.213.401.211.402.21.403.209.403.208.404.206.404.206.406.204.406.203.406.202.408.4.816.198.41.197.41.196.411.388.824.192.413.191.413.189.414.189.415.187.416.186.416.185.417.184.418.182.418.181.419.18.419.178.421.178.42.176.422.175.422.346.846.171.425.17.424.169.426.167.426.166.426.165.428.163.427.163.429.161.429.318.86.157.431.156.432.155.432.153.433.152.433.151.434.149.435.148.435.147.436.146.436.144.437.143.438.141.438.141.439.139.439.138.44.136.441.135.441.134.441.132.443.131.442.13.444.256.888.125.445.125.446.123.446.122.447.12.447.119.448.118.448.116.449.115.45.114.45.112.45.111.451.11.452.108.452.107.453.105.453.104.453.103.455.101.454.1.456.099.455.097.457.096.456.094.458.093.457.092.459.09.459.089.459.174.92.084.461.083.461.082.462.081.462.079.463.077.463.076.463.075.465.073.464.072.465.071.466.069.466.067.466.067.467.064.468.064.467.062.469.06.469.059.469.057.469.056.47.055.471.053.471.052.471.05.472.049.473.047.472.046.473.044.474.043.474.042.474.04.475.038.475.037.476.036.476.034.477.032.476.031.478.03.477.028.479.027.478.025.479.023.479.022.48.021.48.019.48.017.481.016.481.015.482.013.482.011.482.01.483.009.483.007.484.005.483.004.485.002.484.001.485-.001.485-.002.484-.004.485-.005.483-.007.484-.009.483-.01.483-.011.482-.013.482-.015.482-.016.481-.017.481-.019.48-.021.48-.022.48-.023.479-.025.479-.027.478-.028.479-.03.477-.031.478-.032.476-.034.477-.036.476-.037.476-.038.475-.04.475-.042.474-.043.474-.044.474-.046.473-.047.472-.049.473-.05.472-.052.471-.053.471-.055.471-.056.47-.057.469-.059.469-.06.469-.062.469-.064.467-.064.468-.067.467-.067.466-.069.466-.071.466-.072.465-.073.464-.075.465-.076.463-.077.463-.079.463-.081.462-.082.462-.083.461-.084.461-.174.92-.089.459-.09.459-.092.459-.093.457-.094.458-.096.456-.097.457-.099.455-.1.456-.101.454-.103.455-.104.453-.105.453-.107.453-.108.452-.11.452-.111.451-.112.45-.114.45-.115.45-.116.449-.118.448-.119.448-.12.447-.122.447-.123.446-.125.446-.125.445-.256.888-.13.444-.131.442-.132.443-.134.441-.135.441-.136.441-.138.44-.139.439-.141.439-.141.438-.143.438-.144.437-.146.436-.147.436-.148.435-.149.435-.151.434-.152.433-.153.433-.155.432-.156.432-.157.431-.318.86-.161.429-.163.429-.163.427-.165.428-.166.426-.167.426-.169.426-.17.424-.171.425-.346.846-.175.422-.176.422-.178.42-.178.421-.18.419-.181.419-.182.418-.184.418-.185.417-.186.416-.187.416-.189.415Line truncated
<path style="clip-rule:evenodd;fill:#2d67b9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:.1023686;stroke-linejoin:round;stroke-miterlimit:1.41420996" d="M85.421 61.91v21.743h42.525l23.26 49.13 23.142-49.13h42.407V61.91l27.136 27.628-27.136 27.628v-19.7h-30.778l-25.139 55.135 25.14 55.136h30.777v-19.7l27.136 27.508-27.136 27.628v-19.7h-42.407l-23.142-51.292-23.26 51.292H85.421v19.7l-27.019-27.628 27.019-27.508v19.7h29.016l27.018-55.136-27.018-55.135H85.42v19.7L58.402 89.539 85.421 61.91"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1,8 @@
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="m150.485.001.484.002.485.004.483.005.484.007.483.009.483.01.482.011.482.013.482.015.481.016.481.017.48.019.48.021.48.022.479.023.479.025.478.027.479.028.477.03.478.031.476.032.477.034.476.036.476.037.475.038.475.04.474.042.474.043.474.044.473.046.472.047.473.049.472.05.471.052.471.053.471.055.47.056.469.057.469.059.469.06.469.062.467.064.468.064.467.067.466.067.466.069.466.071.465.072.464.073.465.075.463.076.463.077.463.079.462.081.462.082.461.083.461.084.46.087.46.087.459.089.459.09.459.092.457.093.458.094.456.096.457.097.455.099.456.1.454.101.455.103.453.104.453.105.453.107.452.108.452.11.451.111.45.112.45.114.45.115.449.116.448.118.448.119.447.12.447.122.446.123.446.125.445.125.444.128.444.128.444.13.442.131.443.132.441.134.441.135.441.136.44.138.439.139.439.141.438.141.438.143.437.144.436.146.436.147.435.148.435.149.434.151.433.152.433.153.432.155.432.156.431.157.43.159.43.159.429.161.429.163.427.163.428.165.426.166.426.167.426.169.424.17.425.171.423.173.423.173.422.175.422.176.42.178.421.178.419.18.419.181.418.182.418.184.417.185.416.186.416.187.415.189.414.189.413.191.413.192.412.194.412.194.411.196.41.197.41.198.408.2.408.2.408.202.406.203.406.204.406.206.404.206.404.208.403.209.403.21.402.211.401.213.4.214.399.214.399.216.398.218.398.218.397.219.395.221.396.222.394.223.394.224.393.225.392.227.392.227.39.229.39.23.39.231.388.232.388.233.387.235.386.235.385.237.385.238.384.239.383.24.383.241.381.243.381.243.38.244.379.246.379.247.377.248.377.249.376.25.376.251.374.252.374.254.373.254.372.256.371.256.37.258.37.259.369.26.368.261.367.262.367.263.365.264.365.265.364.267.363.267.362.268.362.27.36.271.36.271.359.273.358.274.357.274.356.276.356.277.355.278.353.279.353.28.352.281.352.282.35.283.35.284.348.285.348.287.347.287.346.288.345.289.344.29.344.292.342.292.342.293.34.295.34.295.339.296.338.297.337.299.336.299.336.3.334.301.334.303.332.303.332.304.331.305.329.306.329.308.328.308.327.309.327.31.325.311.324.312.324.313.322.314.321.315.321.315.32.317.318.318.318.318.317.32.315.321.315.321.314.322.313.324.312.324.311.325.31.327.309.327.308.328.308.329.306.329.305.331.304.332.303.332.303.334.301.334.3.336.299.336.299.337.297.338.296.339.295.34.295.34.293.342.292.342.292.344.29.344.289.345.288.346.287.347.287.348.285.348.284.35.283.35.282.352.281.352.28.353.279.353.278.355.277.356.276.356.274.357.274.358.273.359.271.36.271.36.27.362.268.362.267.363.267.364.265.365.264.365.263.367.262.367.261.368.26.369.259.37.258.37.256.371.256.372.254.373.254.374.252.374.251.376.25.376.249.377.248.377.247.379.246.379.244.38.243.381.243.381.241.383.24.383.239.384.238.385.237.385.235.386.235.387.233.388.232.388.231.39.23.39.229.39.227.392.227.392.225.393.224.394.223.394.222.396.221.395.219.397.218.398.218.398.216.399.214.399.214.4.213.401.211.402.21.403.209.403.208.404.206.404.206.406.204.406.203.406.202.408.2.408.2.408.198.41.197.41.196.411.194.412.194.412.192.413.191.413.189.414.189.415.187.416.186.416.185.417.184.418.182.418.181.419.18.419.178.421.178.42.176.422.175.422.173.423.173.423.171.425.17.424.169.426.167.426.166.426.165.428.163.427.163.429.161.429.159.43.159.43.157.431.156.432.155.432.153.433.152.433.151.434.149.435.148.435.147.436.146.436.144.437.143.438.141.438.141.439.139.439.138.44.136.441.135.441.134.441.132.443.131.442.13.444.128.444.128.444.125.445.125.446.123.446.122.447.12.447.119.448.118.448.116.449.115.45.114.45.112.45.111.451.11.452.108.452.107.453.105.453.104.453.103.455.101.454.1.456.099.455.097.457.096.456.094.458.093.457.092.459.09.459.089.459.087.46.087.46.084.461.083.461.082.462.081.462.079.463.077.463.076.463.075.465.073.464.072.465.071.466.069.466.067.466.067.467.064.468.064.467.062.469.06.469.059.469.057.469.056.47.055.471.053.471.052.471.05.472.049.473.047.472.046.473.044.474.043.474.042.474.04.475.038.475.037.476.036.476.034.477.032.476.031.478.03.477.028.479.027.478.025.479.023.479.022.48.021.48.019.48.017.481.016.481.015.482.013.482.011.482.01.483.009.483.007.484.005.483.004.485.002.484.001.485-.001.485-.002.484-.004.485-.005.483-.007.484-.009.483-.01.483-.011.482-.013.482-.015.482-.016.481-.017.481-.019.48-.021.48-.022.48-.023.479-.025.479-.027.478-.028.479-.03.477-.031.478-.032.476-.034.477-.036.476-.037.476-.038.475-.04.475-.042.474-.043.474-.044.474-.046.473-.047.472-.049.473-.05.472-.052.471-.053.471-.055.471-.056.47-.057.469-.059.469-.06.469-.062.469-.064.467-.064.468-.067.467-.067.466-.069.466-.071.466-.072.465-.073.464-.075.465-.076.463-.077.463-.079.463-.081.462-.082.462-.083.461-.084.461-.087.46-.087.46-.089.459-.09.459-.092.459-.093.457-.094.458-.096.456-.097.457-.099.455-.1.456-.101.454-.103.455-.104.453-.105.453-.107.453-.108.452-.11.452-.111.451-.112.45-.114.45-.115.45-.116.449-.118.448-.119.448-.12.447-.122.447-.123.446-.125.446-.125.445-.128.444-.128.444-.13.444-.131.442-.132.443-.134.441-.135.441-.136.441-.138.44-.139.439-.141.439-.141.438-.143.438-.144.437-.146.436-.147.436-.148.435-.149.435-.151.434-.152.433-.153.433-.155.432-.156.432-.157.431-.159.43-.159.4Line truncated
<g>
<path d="m184.921 173.594.001 7.215 16.426 9.484a.931.931 0 0 1 .465.853.706.706 0 0 1 .001.046v22.604l12.476 7.203c.129.059.255.124.38.196l12.238 7.065a4.506 4.506 0 0 1-4.506 7.803l-5.503-3.177a.93.93 0 0 1-.177-.079l-23.452-13.54a.932.932 0 0 1-.461-.902.97.97 0 0 1-.005-.094v-22.507l-7.889-4.555c-.006 4.032-.015 7.809-.03 11.016-.035 7.701-.018 15.538-11 25.727-7.084 6.572-15.907 8.184-20.596 8.559v-58.25a3.29 3.29 0 0 0-6.578 0v58.25c-4.689-.375-13.512-1.987-20.596-8.559-10.982-10.189-10.965-18.026-11-25.727-.014-3.124-.024-6.79-.029-10.706l-7.353 4.245v22.507a.97.97 0 0 1-.005.094.932.932 0 0 1-.461.902l-23.451 13.54a.967.967 0 0 1-.178.079l-5.503 3.177a4.507 4.507 0 0 1-6.154-1.649 4.507 4.507 0 0 1 1.649-6.154l12.237-7.065c.125-.072.252-.137.38-.196l12.476-7.203v-22.604l.001-.046a.933.933 0 0 1 .465-.853l15.889-9.173.001-7.526h-9.676l-12.679 12.679a.96.96 0 0 1-.248.178 4.51 4.51 0 0 1-5.223.513l-12.238-7.065a4.506 4.506 0 0 1 4.506-7.803l9.28 5.358 12.597-12.597a.932.932 0 0 1 .882-.246.908.908 0 0 1 .223-.027h12.583l.003-2.662.004-2.912h-8.959a.932.932 0 0 1-.932-.932v-19.143l-8.671-8.672a4.507 4.507 0 0 1 0-6.371 4.507 4.507 0 0 1 6.371 0l9.992 9.992a4.487 4.487 0 0 1 1.292 2.696.948.948 0 0 1 .026.221V150h72.282v-13.199c0-.076.009-.15.026-.221a4.487 4.487 0 0 1 1.292-2.696l9.992-9.992a4.507 4.507 0 0 1 6.371 0 4.507 4.507 0 0 1 0 6.371l-8.671 8.672v19.143a.932.932 0 0 1-.932.932h-9.665l.004 2.884.003 2.69h12.989c.077 0 .151.009.223.027a.932.932 0 0 1 .882.246l12.597 12.597 9.28-5.358a4.506 4.506 0 0 1 4.505 7.803l-12.237 7.065a4.51 4.51 0 0 1-5.223-.513.928.928 0 0 1-.248-.178l-12.679-12.679h-10.082Z" style="fill:#2d67b9" transform="rotate(45 176.22 160.626)"/>
<path d="M130.534 145.925a18.108 18.108 0 0 1-.506-4.259c0-5.171 2.184-9.865 5.729-13.304a70.747 70.747 0 0 0-5.352-7.71c-9.866-12.379-23.022-20.481-36.939-23.936l.002-.005a4.78 4.78 0 0 1-3.378-5.852 4.78 4.78 0 0 1 5.851-3.378v-.001c15.739 4.078 30.585 13.332 41.762 27.356a81.517 81.517 0 0 1 6.08 8.74 21.304 21.304 0 0 1 6.217-1.001l.203.004c2.099.045 4.12.392 6.014.997a81.517 81.517 0 0 1 6.08-8.74c11.177-14.024 26.023-23.278 41.762-27.356v.001a4.78 4.78 0 0 1 5.851 3.378 4.78 4.78 0 0 1-3.378 5.852l.002.005c-13.917 3.455-27.073 11.557-36.939 23.936a70.747 70.747 0 0 0-5.352 7.71c3.545 3.439 5.729 8.133 5.729 13.304 0 1.464-.175 2.889-.506 4.259h-38.932Z" style="fill:#2d67b9" transform="rotate(45 176.22 160.626)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

@@ -1,53 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata37"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs35" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><g
id="g9"><circle
id="circle11"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path13"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="g15"><g
id="g17"><g
id="g19"
transform="matrix(0,-1.75127,1.42064,0,22.4725,513.322)"><path
id="path21"
style="fill:#2d67b9"
d="M 207.484,99.968 236.031,150 178.937,150 207.484,99.968 Z" /></g><g
id="g23"
transform="matrix(0,-0.656744,0.532754,0,139.382,286.225)"><path
id="path25"
style="fill:#ffffff"
d="M 207.484,99.968 236.031,150 178.937,150 207.484,99.968 Z" /></g></g><g
id="g27"><path
id="path29"
style="fill:#2d67b9"
d="m 178.937,109.509 c 0,-5.266 -4.275,-9.541 -9.541,-9.541 l -94.458,0 c -5.265,0 -9.54,4.275 -9.54,9.541 l 0,80.905 c 0,5.266 4.275,9.541 9.54,9.541 l 94.458,0 c 5.266,0 9.541,-4.275 9.541,-9.541 l 0,-80.905 z" /><rect
id="rect31"
style="fill:#ffffff"
height="68.193001"
width="84.647003"
y="115.903"
x="79.844002" /></g></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M178.937 160.122v30.292c0 5.266-4.275 9.541-9.541 9.541H74.938c-5.265 0-9.54-4.275-9.54-9.541v-80.905c0-5.266 4.275-9.541 9.54-9.541h94.458c5.266 0 9.541 4.275 9.541 9.541V139.8l56.631-39.832v99.987l-56.631-39.833Zm-14.446-44.219H79.844v68.194h84.647v-68.194Zm28.149 34.058 26.655-18.748v37.496l-26.655-18.748Z" style="fill:#2d67b9"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 822 B

@@ -1,38 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata23"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs21" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><circle
id="circle9"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path11"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g><g
id="g13"
transform="translate(0,-15.9782)"><path
id="path15"
style="fill:#ffffff"
d="m 241.138,156.703 -29.669,0 c -3.93,30.435 -29.971,53.981 -61.469,53.981 -31.498,0 -57.539,-23.546 -61.469,-53.981 l -29.669,0 0,-16 182.276,0 0,16 z" /><path
id="path17"
d="m 241.138,156.703 c -9.88967,0 -19.77933,0 -29.669,0 -2.75936,23.30276 -20.04169,43.99957 -42.421,50.994 -21.18426,7.05062 -45.9144,1.40736 -61.884,-14.214 -10.154998,-9.66534 -16.879935,-22.86289 -18.633,-36.78 -9.889667,0 -19.779333,0 -29.669,0 0,-5.33333 0,-10.66667 0,-16 60.75867,0 121.51733,0 182.276,0 0,5.33333 0,10.66667 0,16 z m -136.426,0 c 3.04452,18.68365 18.80759,34.37167 37.506,37.326 17.01994,3.11844 35.3316,-4.45645 45.221,-18.643 3.96655,-5.53804 6.67997,-11.97058 7.849,-18.683 -30.192,0 -60.384,0 -90.576,0 z"
style="fill:#2d67b9" /></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="m150.485.001.484.002.485.004.483.005.484.007.483.009.483.01.482.011.482.013.482.015.481.016.481.017.48.019.48.021.48.022.479.023.479.025.478.027.479.028.477.03.478.031.476.032.477.034.476.036.476.037.475.038.475.04.474.042.474.043.474.044.473.046.472.047.473.049.472.05.471.052.471.053.471.055.47.056.469.057.469.059.469.06.469.062.467.064.468.064.467.067.466.067.466.069.466.071.465.072.464.073.465.075.463.076.463.077.463.079.462.081.462.082.461.083.461.084.46.087.46.087.459.089.459.09.459.092.457.093.458.094.456.096.457.097.455.099.456.1.454.101.455.103.453.104.453.105.453.107.452.108.452.11.451.111.45.112.45.114.45.115.449.116.448.118.448.119.447.12.447.122.446.123.446.125.445.125.444.128.444.128.444.13.442.131.443.132.441.134.441.135.441.136.44.138.439.139.439.141.438.141.438.143.437.144.436.146.436.147.435.148.435.149.434.151.433.152.433.153.432.155.432.156.431.157.43.159.43.159.429.161.429.163.427.163.428.165.426.166.426.167.426.169.424.17.425.171.423.173.423.173.422.175.422.176.42.178.421.178.419.18.419.181.418.182.418.184.417.185.416.186.416.187.415.189.414.189.413.191.413.192.412.194.412.194.411.196.41.197.41.198.408.2.408.2.408.202.406.203.406.204.406.206.404.206.404.208.403.209.403.21.402.211.401.213.4.214.399.214.399.216.398.218.398.218.397.219.395.221.396.222.394.223.394.224.393.225.392.227.392.227.39.229.39.23.39.231.388.232.388.233.387.235.386.235.385.237.385.238.384.239.383.24.383.241.381.243.381.243.38.244.379.246.379.247.377.248.377.249.376.25.376.251.374.252.374.254.373.254.372.256.371.256.37.258.37.259.369.26.368.261.367.262.367.263.365.264.365.265.364.267.363.267.362.268.362.27.36.271.36.271.359.273.358.274.357.274.356.276.356.277.355.278.353.279.353.28.352.281.352.282.35.283.35.284.348.285.348.287.347.287.346.288.345.289.344.29.344.292.342.292.342.293.34.295.34.295.339.296.338.297.337.299.336.299.336.3.334.301.334.303.332.303.332.304.331.305.329.306.329.308.328.308.327.309.327.31.325.311.324.312.324.313.322.314.321.315.321.315.32.317.318.318.318.318.317.32.315.321.315.321.314.322.313.324.312.324.311.325.31.327.309.327.308.328.308.329.306.329.305.331.304.332.303.332.303.334.301.334.3.336.299.336.299.337.297.338.296.339.295.34.295.34.293.342.292.342.292.344.29.344.289.345.288.346.287.347.287.348.285.348.284.35.283.35.282.352.281.352.28.353.279.353.278.355.277.356.276.356.274.357.274.358.273.359.271.36.271.36.27.362.268.362.267.363.267.364.265.365.264.365.263.367.262.367.261.368.26.369.259.37.258.37.256.371.256.372.254.373.254.374.252.374.251.376.25.376.249.377.248.377.247.379.246.379.244.38.243.381.243.381.241.383.24.383.239.384.238.385.237.385.235.386.235.387.233.388.232.388.231.39.23.39.229.39.227.392.227.392.225.393.224.394.223.394.222.396.221.395.219.397.218.398.218.398.216.399.214.399.214.4.213.401.211.402.21.403.209.403.208.404.206.404.206.406.204.406.203.406.202.408.2.408.2.408.198.41.197.41.196.411.194.412.194.412.192.413.191.413.189.414.189.415.187.416.186.416.185.417.184.418.182.418.181.419.18.419.178.421.178.42.176.422.175.422.173.423.173.423.171.425.17.424.169.426.167.426.166.426.165.428.163.427.163.429.161.429.159.43.159.43.157.431.156.432.155.432.153.433.152.433.151.434.149.435.148.435.147.436.146.436.144.437.143.438.141.438.141.439.139.439.138.44.136.441.135.441.134.441.132.443.131.442.13.444.128.444.128.444.125.445.125.446.123.446.122.447.12.447.119.448.118.448.116.449.115.45.114.45.112.45.111.451.11.452.108.452.107.453.105.453.104.453.103.455.101.454.1.456.099.455.097.457.096.456.094.458.093.457.092.459.09.459.089.459.087.46.087.46.084.461.083.461.082.462.081.462.079.463.077.463.076.463.075.465.073.464.072.465.071.466.069.466.067.466.067.467.064.468.064.467.062.469.06.469.059.469.057.469.056.47.055.471.053.471.052.471.05.472.049.473.047.472.046.473.044.474.043.474.042.474.04.475.038.475.037.476.036.476.034.477.032.476.031.478.03.477.028.479.027.478.025.479.023.479.022.48.021.48.019.48.017.481.016.481.015.482.013.482.011.482.01.483.009.483.007.484.005.483.004.485.002.484.001.485-.001.485-.002.484-.004.485-.005.483-.007.484-.009.483-.01.483-.011.482-.013.482-.015.482-.016.481-.017.481-.019.48-.021.48-.022.48-.023.479-.025.479-.027.478-.028.479-.03.477-.031.478-.032.476-.034.477-.036.476-.037.476-.038.475-.04.475-.042.474-.043.474-.044.474-.046.473-.047.472-.049.473-.05.472-.052.471-.053.471-.055.471-.056.47-.057.469-.059.469-.06.469-.062.469-.064.467-.064.468-.067.467-.067.466-.069.466-.071.466-.072.465-.073.464-.075.465-.076.463-.077.463-.079.463-.081.462-.082.462-.083.461-.084.461-.087.46-.087.46-.089.459-.09.459-.092.459-.093.457-.094.458-.096.456-.097.457-.099.455-.1.456-.101.454-.103.455-.104.453-.105.453-.107.453-.108.452-.11.452-.111.451-.112.45-.114.45-.115.45-.116.449-.118.448-.119.448-.12.447-.122.447-.123.446-.125.446-.125.445-.128.444-.128.444-.13.444-.131.442-.132.443-.134.441-.135.441-.136.441-.138.44-.139.439-.141.439-.141.438-.143.438-.144.437-.146.436-.147.436-.148.435-.149.435-.151.434-.152.433-.153.433-.155.432-.156.432-.157.431-.159.43-.159.4Line truncated
<g>
<path d="M241.138 156.703h-29.669c-3.93 30.435-29.971 53.981-61.469 53.981s-57.539-23.546-61.469-53.981H58.862v-16h182.276v16Z" style="fill:#fff" transform="translate(0 -15.978)"/>
<path d="M241.138 156.703h-29.669l-.048.356-.049.356-.051.355-.053.354-.055.354-.057.353-.059.352-.061.352-.063.351-.065.351-.067.349-.069.349-.071.349-.073.347-.075.347-.076.346-.079.346-.08.344-.083.344-.084.344-.087.342-.088.342-.09.341-.092.34-.094.339-.095.339-.098.338-.1.337-.101.336-.103.336-.105.334-.107.334-.109.333-.11.332-.112.332-.115.33-.116.33-.117.329-.12.328-.121.327-.123.326-.125.326-.127.324-.129.324-.13.322-.132.322-.134.321-.135.32-.137.319-.139.318-.141.317-.142.317-.144.315-.146.314-.148.314-.149.312-.151.312-.153.31-.154.31-.156.309-.157.307-.16.307-.161.305-.162.305-.164.304-.166.302-.168.302-.169.3-.171.3-.172.298-.174.297-.176.297-.177.295-.178.294-.181.293-.182.293-.183.291-.185.289-.187.289-.188.288-.19.286-.191.286-.193.284-.194.284-.196.282-.197.281-.199.279-.201.279-.201.278-.204.276-.205.275-.206.274-.208.273-.209.272-.211.27-.212.269-.214.268-.215.267-.216.266-.218.264-.22.264-.221.261-.222.261-.224.26-.225.258-.226.257-.228.256-.229.254-.231.253-.232.252-.233.251-.235.249-.236.248-.238.247-.238.245-.241.244-.241.243-.243.241-.244.24-.245.239-.247.238-.248.236-.25.234-.25.234-.252.232-.253.23-.255.229-.256.228-.257.227-.258.225-.259.223-.261.223-.262.22-.263.22-.265.218-.265.216-.267.215-.268.214-.27.212-.27.211-.272.209-.273.208-.274.206-.275.205-.276.203-.278.202-.279.2-.28.199-.281.198-.282.195-.283.195-.284.192-.286.192-.286.189-.288.188-.289.187-.29.185-.291.183-.292.182-.293.181-.294.178-.296.177-.296.176-.298.174-.298.172-.3.171-.3.169-.302.167-.302.166-.304.164-.305.163-.305.161-.307.159-.307.158-.309.156-.31.154-.31.152-.312.151-.312.149-.314.148-.314.146-.316.144-.316.142-.317.141-.318.139-.319.137-.32.135-.321.134-.322.132-.323.13-.323.128-.325.127-.325.125-.327.123-.327.121-.328.12-.329.118-.329.115-.331.115-.331.112-.332.11-.333.109-.334.107-.335.105-.336.103-.336.101-.337.1-.338.097-.338.096-.34.094-.34.091-.341.09-.342.089-.342.086-.344.084-.344.083-.344.08-.346.079-.346.076-.347.075-.348.073-.348.071-.349.069-.35.066-.35.065-.351.063-.352.061-.352.059-.354.057-.353.055-.355.053-.355.052-.356.049-.356.047-.357.044-.358.043-.358.041-.359.039-.359.037-.36.035-.361.032-.361.031-.362.029-.362.026-.363.025-.364.022-.364.02-.365.018-.365.016-.366.014-.366.012-.367.009-.367.008-.368.005-.368.004-.369.001-.369-.001-.368-.004-.368-.005-.367-.008-.367-.009-.366-.012-.366-.014-.365-.016-.365-.018-.364-.02-.364-.022-.363-.025-.362-.026-.362-.029-.361-.031-.361-.032-.36-.035-.359-.037-.359-.039-.358-.041-.358-.043-.357-.044-.356-.047-.356-.049-.355-.052-.355-.053-.353-.055-.354-.057-.352-.059-.352-.061-.351-.063-.35-.065-.35-.066-.349-.069-.348-.071-.348-.073-.347-.075-.346-.076-.346-.079-.344-.08-.344-.083-.344-.084-.342-.086-.342-.089-.341-.09-.34-.091-.34-.094-.338-.096-.338-.097-.337-.1-.336-.101-.336-.103-.335-.105-.334-.107-.333-.109-.332-.11-.331-.112-.331-.115-.329-.115-.329-.118-.328-.12-.327-.121-.327-.123-.325-.125-.325-.127-.323-.128-.323-.13-.322-.132-.321-.134-.32-.135-.319-.137-.318-.139-.317-.141-.316-.142-.316-.144-.314-.146-.314-.148-.312-.149-.312-.151-.31-.152-.31-.154-.309-.156-.307-.158-.307-.159-.305-.161-.305-.163-.304-.164-.302-.166-.302-.167-.3-.169-.3-.171-.298-.172-.298-.174-.296-.176-.296-.177-.294-.178-.293-.181-.292-.182-.291-.183-.29-.185-.289-.187-.288-.188-.286-.189-.286-.192-.284-.192-.283-.195-.282-.195-.281-.198-.28-.199-.279-.2-.278-.202-.276-.203-.275-.205-.274-.206-.273-.208-.272-.209-.27-.211-.27-.212-.268-.214-.267-.215-.265-.216-.265-.218-.263-.22-.262-.22-.261-.223-.259-.223-.258-.225-.257-.227-.256-.228-.255-.229-.253-.23-.252-.232-.25-.234-.25-.234-.248-.236-.247-.238-.245-.239-.244-.24-.243-.241-.241-.243-.241-.244-.238-.245-.238-.247-.236-.248-.235-.249-.233-.251-.232-.252-.231-.253-.229-.254-.228-.256-.226-.257-.225-.258-.224-.26-.222-.261-.221-.261-.22-.264-.218-.264-.216-.266-.215-.267-.214-.268-.212-.269-.211-.27-.209-.272-.208-.273-.206-.274-.205-.275-.204-.276-.201-.278-.201-.279-.199-.279-.197-.281-.196-.282-.194-.284-.193-.284-.191-.286-.19-.286-.188-.288-.187-.289-.185-.289-.183-.291-.182-.293-.181-.293-.178-.294-.177-.295-.176-.297-.174-.297-.172-.298-.171-.3-.169-.3-.168-.302-.166-.302-.164-.304-.162-.305-.161-.305-.16-.307-.157-.307-.156-.309-.154-.31-.153-.31-.151-.312-.149-.312-.148-.314-.146-.314-.144-.315-.142-.317-.141-.317-.139-.318-.137-.319-.135-.32-.134-.321-.132-.322-.13-.322-.129-.324-.127-.324-.125-.326-.123-.326-.121-.327-.12-.328-.117-.329-.116-.33-.115-.33-.112-.332-.11-.332-.109-.333-.107-.334-.105-.334-.103-.336-.101-.336-.1-.337-.098-.338-.095-.339-.094-.339-.092-.34-.09-.341-.088-.342-.087-.342-.084-.344-.083-.344-.08-.344-.079-.346-.076-.346-.075-.347-.073-.347-.071-.349-.069-.349-.067-.349-.065-.351-.063-.351-.061-.352-.059-.352-.057-.353-.055-.354-.053-.354-.051-.355-.049-.356-.048-.356H58.862v-16h182.276v16Zm-136.426 0 .008.05.047.26.048.26.05.258.051.259.052.258.054.257.056.257.056.256.059.255.059.256.061.254.063.254.063.253.066.253.066.252.068.252.07.251.071.25.072.25.073.25.075.2Line truncated
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 44 KiB

@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"
inkscape:version="0.91 r13725"
sodipodi:docname="circle.svg"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="866"
inkscape:window-height="480"
id="namedview12"
showgrid="false"
inkscape:zoom="3.9333333"
inkscape:cx="30"
inkscape:cy="30"
inkscape:window-x="150"
inkscape:window-y="68"
inkscape:window-maximized="0"
inkscape:current-layer="g5" /><metadata
id="metadata21"><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><defs
id="defs19" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><circle
id="circle9"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path11"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@@ -1,60 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg128"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.5"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata134"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs132" /><g
transform="matrix(0.19997959,0,0,0.19995117,0.00612242,3.3261915e-4)"
id="Background_circle"><g
id="g105"><circle
id="circle101"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path103"
d="m 150.485,0.001 c 49.52443,-0.30811961 97.99009,26.139159 124.885,67.66 29.14955,43.41666 32.66867,102.35471 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.16927,120.37286 9.3281329,175.39447 33.956,217.011 c 22.83544,40.17536 67.60985,66.70688 113.877,66.972 44.98421,1.17284 89.41924,-22.44652 113.952,-60.106 26.866,-39.70944 29.54259,-94.08821 6.807,-136.282 -21.26707,-41.053691 -65.00625,-69.348254 -111.261,-71.398 -2.58582,-0.137959 -5.17549,-0.2052 -7.765,-0.196 z"
style="fill:#2d67b9" /></g><g
id="g125"><g
id="g119"><g
id="g109"
transform="matrix(1,0,0,1.01748,0,-12.4555)"><rect
id="rect107"
style="fill:#2d67b9;fill-opacity:0;stroke:#2d67b9;stroke-width:11.89999962px"
height="93.275002"
width="142.27901"
y="103.363"
x="78.860001" /></g><g
id="g113"
transform="matrix(1.70092,0,0,1.08662,-105.138,-15.1201)"><rect
id="rect111"
style="fill:#ffffff"
height="77.197998"
width="77.197998"
y="104.31"
x="111.401" /></g><g
id="g117"
transform="translate(-4.85646,-7.97745)"><path
id="path115"
style="fill:#2d67b9"
d="m 202.868,225.508 c 0,-3.287 -2.668,-5.955 -5.954,-5.955 h -84.115 c -3.286,0 -5.954,2.668 -5.954,5.955 0,3.286 2.668,5.954 5.954,5.954 h 84.115 c 3.286,0 5.954,-2.668 5.954,-5.954 z" /></g></g><g
id="g123"
transform="matrix(1.66872,0,0,1.06605,-100.308,-7.71468)"><rect
id="rect121"
style="fill:#ffffff"
height="78.688004"
width="78.688004"
y="99.375999"
x="110.656" /></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M216.943 234.5a7.246 7.246 0 0 0-7.243-7.243H90.3a7.246 7.246 0 0 0-7.243 7.243 7.247 7.247 0 0 0 7.243 7.243h119.4a7.247 7.247 0 0 0 7.243-7.243Zm33.072-162.59c0-8.46-6.869-15.329-15.329-15.329H65.308c-8.46 0-15.328 6.869-15.328 15.329v113.343c0 8.46 6.868 15.328 15.328 15.328h169.378c8.46 0 15.329-6.868 15.329-15.328V71.91Zm-14.411-.508h-170v114h170v-114Z" style="fill:#2d67b9" transform="translate(30.473 37.188) scale(.79686)"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 922 B

@@ -1,46 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg1072"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata1078"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs1076" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="g1070"><g
id="Background_circle"><g
id="g1054"><circle
id="circle1050"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path1052"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="Layer1"><g
id="g1067"><path
id="path1057"
style="fill:#2d67b9;fill-opacity:0;stroke:#2d67b9;stroke-width:12px"
d="m 193.656,225.178 h -87.312 v -0.433 h 87.312 z M 221.14,92.714 V 193.016 H 78.86 V 92.714 Z" /><g
id="g1065"
transform="matrix(0.314025,0,0,0.314025,101.684,100.157)"><path
id="path1059"
style="fill:#2d67b9"
d="M 68.751,82.244 153.879,131.92 238.287,82.244 153.879,31.058 Z" /><path
id="path1061"
style="fill:#2d67b9"
d="m 59.634,99.464 84.96,49.02 v 98.076 l -84.96,-48.641 z" /><path
id="path1063"
style="fill:#2d67b9"
d="m 162.579,149.166 85.504,-49.702 v 98.214 l -85.504,48.882 z" /></g></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M216.943 234.5a7.246 7.246 0 0 0-7.243-7.243H90.3a7.246 7.246 0 0 0-7.243 7.243 7.247 7.247 0 0 0 7.243 7.243h119.4a7.247 7.247 0 0 0 7.243-7.243Zm33.072-162.59c0-8.46-6.869-15.329-15.329-15.329H65.308c-8.46 0-15.328 6.869-15.328 15.329v113.343c0 8.46 6.868 15.328 15.328 15.328h169.378c8.46 0 15.329-6.868 15.329-15.328V71.91Zm-14.411-.508h-170v114h170v-114Z" style="fill:#2d67b9" transform="translate(30.473 37.188) scale(.79686)"/>
<path d="m68.751 82.244 85.128 49.676 84.408-49.676-84.408-51.186-85.128 51.186ZM59.634 99.464l84.96 49.02v98.076l-84.96-48.641V99.464ZM162.579 149.166l85.504-49.702v98.214l-85.504 48.882v-97.394Z" style="fill:#2d67b9" transform="matrix(.30646 0 0 .30646 102.851 96.967)"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,35 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata21"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs19" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="g4"><g
id="Background_circle"><g
id="g7"><circle
id="circle9"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path11"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="g13"
transform="translate(0,-6.69727)"><path
id="path15"
style="fill:#2d67b9"
d="m 210.025,221.534 -118.119,0 0,0 c -21.734,-0.004 -39.378,-17.65 -39.378,-39.385 0,-19.275 13.877,-35.335 32.177,-38.725 0.182,-35.883 29.37,-64.958 65.295,-64.958 35.925,0 65.113,29.075 65.295,64.958 18.3,3.39 32.177,19.45 32.177,38.725 0,21.087 -16.609,38.326 -37.447,39.338 l 0,0.047 z m -2.802,-15.929 c 0.287,0.01 0.575,0.015 0.865,0.015 12.954,0 23.471,-10.517 23.471,-23.471 0,-11.115 -7.742,-20.435 -18.124,-22.858 l -0.006,0.026 c -0.884,-0.215 -1.787,-0.38 -2.707,-0.492 -0.865,-0.098 -1.744,-0.147 -2.634,-0.147 -4.025,0 -7.814,1.015 -11.126,2.803 1.984,-5.385 3.068,-11.204 3.068,-17.274 0,-16.41 -7.917,-30.984 -20.137,-40.11 -8.32,-6.282 -18.675,-10.009 -29.893,-10.009 -11.218,0 -21.573,3.727 -29.893,10.009 -12.22,9.126 -20.137,23.7 -20.137,40.11 0,6.07 1.084,11.889 3.068,17.274 -3.312,-1.788 -7.101,-2.803 -11.126,-2.803 -0.825,0 -1.64,0.042 -2.444,0.126 -0.985,0.113 -1.952,0.287 -2.896,0.517 l -0.007,-0.03 c -10.382,2.423 -18.124,11.743 -18.124,22.858 0,12.954 10.517,23.471 23.471,23.471 0.29,0 0.578,-0.005 0.865,-0.015 0.248,0.024 0.499,0.037 0.753,0.037 l 29.987,0 -0.018,0.024 53.002,0 -0.018,-0.024 29.987,0 c 0.254,0 0.505,-0.013 0.753,-0.037 z" /></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M93.524 228.429c-.175.003-.349.004-.524.004-21.764 0-39.433-17.669-39.433-39.433 0-19.528 14.227-35.76 32.872-38.888.478-34.678 28.775-62.679 63.561-62.679s63.083 28.001 63.561 62.679c18.645 3.128 32.872 19.36 32.872 38.888 0 21.764-17.669 39.433-39.433 39.433-.273 0-.545-.003-.815-.009v.005H93.524ZM93 215h114c14.037 0 25.433-11.396 25.433-25.433 0-12.32-8.779-22.606-20.417-24.937l-.223-.044-.086-.015-.225-.042-.087-.015-.225-.039-.091-.014-.223-.035-.095-.014-.22-.032-.102-.014-.214-.028-.11-.014-.207-.025-.12-.013-.198-.021-.13-.012-.19-.018-.14-.012-.181-.015-.151-.01-.171-.012-.162-.009-.161-.01-.174-.007-.15-.007-.19-.006-.136-.004-.215-.004-.111-.002-.328-.003-.318.002-.106.002-.212.004-.126.004-.19.006-.134.006-.182.008-.138.007-.176.01-.141.009-.173.013-.142.011-.17.014-.143.012-.169.016-.143.015-.168.018-.143.016-.166.02-.143.018-.166.022-.142.02-.167.024-.14.021-.168.027-.137.022-.178.031-.126.021-.295.055-.144.029-.157.031-.153.032-.146.031-.156.034-.141.032-.159.037-.138.033-.159.039-.135.034-.16.042-.134.035-.16.043-.131.037-.161.045-.13.038-.161.048-.127.039-.162.05-.125.039-.163.053-.122.04-.163.055-.119.041-.166.058-.113.04-.169.062-.087.032-.188.07-.147.057-.075.03A49.912 49.912 0 0 0 200 151c0-27.596-22.404-50-50-50s-50 22.404-50 50c0 5.18.789 10.177 2.253 14.874l-.075-.03-.147-.057-.188-.07-.087-.032-.169-.062-.113-.04-.166-.058-.119-.041-.163-.055-.122-.04-.163-.053-.125-.039-.162-.05-.127-.039-.161-.048-.13-.038-.161-.045-.131-.037-.16-.043-.134-.035-.16-.042-.135-.034-.159-.039-.138-.033-.159-.037-.141-.032-.156-.034-.146-.031-.153-.032-.157-.031-.144-.029-.295-.055-.126-.021-.178-.031-.137-.022-.168-.027-.14-.021-.167-.024-.142-.02-.166-.022-.143-.018-.166-.02-.143-.016-.168-.018-.143-.015-.169-.016-.143-.012-.17-.014-.142-.011-.173-.013-.141-.009-.176-.01-.138-.007-.182-.008-.134-.006-.19-.006-.126-.004-.212-.004-.106-.002-.318-.002-.328.003-.111.002-.215.004-.136.004-.19.006-.15.007-.174.007-.161.01-.162.009-.171.012-.151.01-.181.015-.14.012-.19.018-.13.012-.198.021-.12.013-.207.025-.11.014-.214.028-.102.014-.22.032-.095.014-.223.035-.091.014-.225.039-.087.015-.225.042-.086.015-.223.044c-11.638 2.331-20.417 12.617-20.417 24.937C67.567 203.604 78.963 215 93 215Z" style="fill:#2d67b9" transform="matrix(1.0372 0 0 .99188 -5.58 -13.784)"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -0,0 +1,6 @@
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M180.131 174.282v1.14c0 11.084-2.724 24.533-25.105 24.533H123.37c-22.409 0-25.136-13.449-25.136-24.533v-52.604a.42.42 0 0 1 .421-.419l40.553.174 40.503-.174a.42.42 0 0 1 .42.419v8.193c11.941 0 21.635 9.695 21.635 21.635 0 11.941-9.694 21.636-21.635 21.636Zm0-35.399v27.526c7.596 0 13.763-6.167 13.763-13.763s-6.167-13.763-13.763-13.763Zm-61.629-81.191s7.108 11.839 1.996 24.91c-9.984 25.532 9.726 28.484 9.726 28.484s-9.621-5.38-1.347-25.031c8.371-19.884-10.375-28.363-10.375-28.363Zm23.499-15.79s9.978 10.824 2.742 34.763c-9.696 32.077 12.307 34.58 14.443 34.414 2.137-.166-13.228-2.669-1.622-35.408 8.544-24.102-15.563-33.769-15.563-33.769Z" style="fill:#2d67b9" transform="translate(-39.85 -20.556) scale(1.34621)"/>
<path d="M180.131 174.282v1.14c0 11.084-2.724 24.533-25.105 24.533H123.37c-22.409 0-25.136-13.449-25.136-24.533v-52.604a.42.42 0 0 1 .421-.419l40.553.174 40.503-.174a.42.42 0 0 1 .42.419v8.193c11.941 0 21.635 9.695 21.635 21.635 0 11.941-9.694 21.636-21.635 21.636ZM102.319 126.5v48.922c0 5.546.526 11.901 5.217 16.019 3.194 2.802 8.203 4.428 15.834 4.428h31.656c7.619 0 12.621-1.625 15.809-4.427 4.686-4.118 5.211-10.473 5.211-16.02v-1.14a4.085 4.085 0 0 1 2.991-3.936 4.086 4.086 0 0 1-2.991-3.937v-27.526a4.085 4.085 0 0 1 2.991-3.936 4.085 4.085 0 0 1-2.991-3.936V126.5l-36.82.158h-.036l-36.871-.158Zm77.812 12.383v27.526c7.596 0 13.763-6.167 13.763-13.763s-6.167-13.763-13.763-13.763Zm-81.476-12.399Zm81.055 0h.001-.001Zm-61.208-68.792s7.108 11.839 1.996 24.91c-9.984 25.532 9.726 28.484 9.726 28.484s-9.621-5.38-1.347-25.031c8.371-19.884-10.375-28.363-10.375-28.363Zm23.499-15.79s9.978 10.824 2.742 34.763c-9.696 32.077 12.307 34.58 14.443 34.414 2.137-.166-13.228-2.669-1.622-35.408 8.544-24.102-15.563-33.769-15.563-33.769Zm9.031 11.878c.893 6.033.662 14.008-2.378 24.067-3.396 11.233-2.697 18.324-.101 22.78.308.528.641 1.015.993 1.462-.499-2.816-.641-6.314-.122-10.664.548-4.587 1.842-10.218 4.289-17.119 3.263-9.206.901-15.924-2.681-20.526Zm-24.62 18.55c.049 3.647-.502 7.65-2.109 11.76-1.91 4.884-2.643 8.774-2.552 11.873.464-3.253 1.493-7.059 3.36-11.494 2.047-4.86 2.211-8.878 1.301-12.139Z" style="fill:#2d67b9" transform="translate(-39.85 -20.556) scale(1.34621)"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@@ -1,42 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata27"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs25" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><g
id="g9"><circle
id="circle11"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path13"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="g15"><path
id="path17"
style="fill:#2d67b9"
d="m 182.537,71.431 c 6.916,2.87 13.373,6.628 19.228,11.13 l -10.827,26.822 14.706,25.472 28.662,4.038 c 0.475,3.635 0.721,7.343 0.721,11.107 0,3.764 -0.246,7.472 -0.721,11.107 l -28.662,4.038 -14.706,25.472 10.827,26.822 c -5.855,4.502 -12.312,8.26 -19.228,11.13 l -17.831,-22.807 -29.412,0 -17.831,22.807 c -6.916,-2.87 -13.373,-6.628 -19.228,-11.13 l 10.827,-26.822 -14.706,-25.472 -28.662,-4.038 c -0.475,-3.635 -0.721,-7.343 -0.721,-11.107 0,-3.764 0.246,-7.472 0.721,-11.107 l 28.662,-4.038 14.706,-25.472 -10.827,-26.822 c 5.855,-4.502 12.312,-8.26 19.228,-11.13 l 17.831,22.807 29.412,0 17.831,-22.807 z m 41.377,120.599 c -0.149,0.262 -0.3,0.523 -0.452,0.782 l 0.452,-0.782 z m -147.828,0 0.452,0.782 c -0.152,-0.259 -0.303,-0.52 -0.452,-0.782 z M 150,118.87 c 17.181,0 31.13,13.949 31.13,31.13 0,17.181 -13.949,31.13 -31.13,31.13 -17.181,0 -31.13,-13.949 -31.13,-31.13 0,-17.181 13.949,-31.13 31.13,-31.13 z m 73.462,-11.682 c 0.152,0.259 0.303,0.52 0.452,0.782 l -0.452,-0.782 z m -146.924,0 -0.452,0.782 c 0.149,-0.262 0.3,-0.523 0.452,-0.782 z M 150,64.973 c 0,0 0,0 0,0 z" /><g
id="g19"
transform="matrix(1.13747,0,0,1.13747,-20.62,-20.62)"><circle
id="circle21"
style="fill:#ffffff"
r="28.177"
cy="150"
cx="150" /></g></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M182.537 71.431a85 85 0 0 1 19.228 11.13l-10.827 26.822 14.706 25.472 28.662 4.038c.475 3.635.721 7.343.721 11.107 0 3.764-.246 7.472-.721 11.107l-28.662 4.038-14.706 25.472 10.827 26.822a85 85 0 0 1-19.228 11.13l-17.831-22.807h-29.412l-17.831 22.807a85 85 0 0 1-19.228-11.13l10.827-26.822-14.706-25.472-28.662-4.038A85.697 85.697 0 0 1 64.973 150c0-3.764.246-7.472.721-11.107l28.662-4.038 14.706-25.472-10.827-26.822a85 85 0 0 1 19.228-11.13l17.831 22.807h29.412l17.831-22.807Zm41.377 120.599c-.149.262-.3.523-.452.782l.452-.782Zm-147.828 0 .452.782a66.35 66.35 0 0 1-.452-.782ZM150 118.87c17.181 0 31.13 13.949 31.13 31.13 0 17.181-13.949 31.13-31.13 31.13-17.181 0-31.13-13.949-31.13-31.13 0-17.181 13.949-31.13 31.13-31.13Zm73.462-11.682c.152.259.303.52.452.782l-.452-.782Zm-146.924 0-.452.782c.149-.262.3-.523.452-.782ZM150 64.973Z" style="fill:#2d67b9"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1,42 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata27"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs25" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><g
id="g9"><circle
id="circle11"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path13"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="g15"><path
id="path17"
style="fill:#2d67b9"
d="m 109.7,179.509 c -6.069,-8.27 -9.655,-18.474 -9.655,-29.509 0,-1.07 0.034,-2.131 0.1,-3.184 l 0,-66.371 -18.912,18.912 0,-29.291 29.096,-29.096 29.096,29.096 0,29.207 -18.934,-18.934 0,29.361 c 8.27,-6.069 18.474,-9.655 29.509,-9.655 1.07,0 2.131,0.034 3.184,0.1 l 66.371,0 -18.912,-18.912 29.291,0 29.096,29.096 -29.096,29.096 -29.207,0 18.934,-18.934 -29.361,0 c 6.069,8.271 9.655,18.475 9.655,29.509 0,1.07 -0.034,2.131 -0.1,3.184 l 0,66.371 18.912,-18.912 0,29.291 -29.096,29.096 -29.096,-29.096 0,-29.207 18.934,18.934 0,-29.361 c -8.27,6.069 -18.474,9.655 -29.509,9.655 -1.07,0 -2.131,-0.034 -3.184,-0.1 l -66.371,0 18.912,18.912 -29.291,0 -29.096,-29.096 29.096,-29.096 29.207,0 -18.934,18.934 29.361,0 z m 40.004,-58.805 c 16.005,0 29,12.994 29,29 0,16.005 -12.995,29 -29,29 -16.006,0 -29,-12.995 -29,-29 0,-16.006 12.994,-29 29,-29 z" /><g
id="g19"
transform="matrix(1.06678,0,0,1.06678,-10.0171,-10.0171)"><circle
id="circle21"
style="fill:#ffffff"
r="28.177"
cy="150"
cx="150" /></g></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z" style="fill:#2d67b9"/>
<path d="M109.7 179.509A49.71 49.71 0 0 1 100.045 150c0-1.07.034-2.131.1-3.184V80.445L81.233 99.357V70.066l29.096-29.096 29.096 29.096v29.207l-18.934-18.934V109.7A49.71 49.71 0 0 1 150 100.045c1.07 0 2.131.034 3.184.1h66.371l-18.912-18.912h29.291l29.096 29.096-29.096 29.096h-29.207l18.934-18.934H190.3A49.714 49.714 0 0 1 199.955 150c0 1.07-.034 2.131-.1 3.184v66.371l18.912-18.912v29.291l-29.096 29.096-29.096-29.096v-29.207l18.934 18.934V190.3A49.71 49.71 0 0 1 150 199.955c-1.07 0-2.131-.034-3.184-.1H80.445l18.912 18.912H70.066L40.97 189.671l29.096-29.096h29.207l-18.934 18.934H109.7Zm40.004-58.805c16.005 0 29 12.994 29 29 0 16.005-12.995 29-29 29-16.006 0-29-12.995-29-29 0-16.006 12.994-29 29-29Z" style="fill:#2d67b9" transform="matrix(.91685 0 0 .91685 12.473 12.473)"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,48 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41420996"
xml:space="preserve"
version="1.1"
viewBox="0 0 60 60"
height="60"
width="60"><metadata
id="metadata33"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs31" /><g
transform="matrix(0.19997959,0,0,0.19995118,0.00612242,3.3238395e-4)"
id="Background_circle"><g
id="g5"><g
id="g7"><g
id="g9"><circle
id="circle11"
style="fill:#ffffff"
r="150"
cy="150"
cx="150" /><path
id="path13"
d="m 150.485,0.001 c 49.5244,-0.30805092 97.99005,26.13918 124.885,67.66 29.14949,43.41669 32.66869,102.35469 9.029,148.98 -22.3226,45.72399 -69.26524,78.27982 -120.017,82.677 C 116.79963,304.27157 67.626954,284.53159 36.597,248.141 4.2284143,211.43134 -7.8772602,158.34647 5.079,111.186 18.20087,60.591626 59.782145,18.758853 110.292,5.321 c 13.07378,-3.5887368 26.6371,-5.36778112 40.193,-5.32 z m -0.919,16 C 104.07954,15.682674 59.676029,40.73106 36.035,79.522 10.237529,120.258 9.3382219,175.08668 33.754,216.66 c 22.507056,39.83833 66.53845,66.428 112.351,67.284 44.86675,1.74378 89.5149,-21.18229 114.552,-58.394 27.38615,-39.18451 30.93913,-93.31402 9.052,-135.793 C 249.0838,48.105271 205.50868,18.954337 159.041,16.3 c -3.15359,-0.209033 -6.31449,-0.309606 -9.475,-0.299 z"
style="fill:#2d67b9" /></g></g><g
id="g15"><g
id="g17"
transform="matrix(0.724619,0,0,0.592282,68.8494,40.4095)"><path
id="path19"
style="fill:#ffffff"
d="m 250.015,109.41 c 0,-13.541 -8.986,-24.535 -20.055,-24.535 l -121.05,0 c -11.068,0 -20.054,10.994 -20.054,24.535 l 0,85.388 c 0,13.541 8.986,24.535 20.054,24.535 l 32.322,0 0.188,23.576 22.7,-23.576 65.84,0 c 11.069,0 20.055,-10.994 20.055,-24.535 l 0,-85.388 z" /><path
id="path21"
d="m 230.219,84.877 c 10.62021,0.166079 18.27714,10.321519 19.482,20.192 0.72662,11.01108 0.10958,22.08912 0.314,33.12558 -0.10937,19.90686 0.2179,39.8289 -0.162,59.72642 -0.8228,10.0534 -8.1203,20.67233 -18.861,21.38 -22.28936,0.0748 -44.58155,0.0106 -66.872,0.032 -7.56667,7.85867 -15.13333,15.71733 -22.7,23.576 -0.0627,-7.85867 -0.12533,-15.71733 -0.188,-23.576 -11.62111,-0.13842 -23.27092,0.27257 -34.875,-0.197 -11.14669,-1.85602 -17.716056,-13.73769 -17.501,-24.338 0.0873,-29.39996 -0.174196,-58.81075 0.13,-88.204 0.723062,-10.158313 8.036282,-20.966931 18.892,-21.687 40.77892,-0.07337 81.56107,-0.01331 122.341,-0.03 z m -121.257,20.259 c -2.99592,0.0323 -4.01711,3.72875 -3.546,6.16559 0.0684,28.17148 -0.13522,56.36075 0.099,84.52141 0.34326,2.43767 2.92626,3.90211 5.27459,3.249 10.95356,0.15278 21.94605,-0.30571 32.87567,0.22918 3.52056,0.61947 6.68932,2.6651 8.98474,5.36782 3.62388,-4.49524 9.5308,-6.21771 15.12518,-5.597 20.99059,-0.0761 42.00906,0.14992 62.98282,-0.109 3.20394,-1.04189 2.87801,-5.28755 2.696,-7.88418 -0.0685,-27.56261 0.13537,-55.14304 -0.099,-82.69482 -0.34391,-2.43732 -2.92622,-3.90165 -5.27459,-3.248 -39.70614,0 -79.41227,0 -119.11841,0 z"
style="fill:#2d67b9" /></g><g
id="g23"
transform="matrix(-0.724619,0,0,0.592282,231.145,78.43)"><path
id="path25"
style="fill:#ffffff"
d="m 250.015,109.322 c 0,-13.493 -8.954,-24.447 -19.983,-24.447 l -121.194,0 c -11.029,0 -19.982,10.954 -19.982,24.447 l 0,85.082 c 0,13.493 8.953,24.447 19.982,24.447 l 32.394,0 -0.186,24.058 23.074,-24.058 65.912,0 c 11.029,0 19.983,-10.954 19.983,-24.447 l 0,-85.082 z" /><path
id="path27"
d="m 108.58,84.877 c -10.582213,0.165562 -18.211559,10.284882 -19.412,20.12 -0.722889,11.00584 -0.108246,22.07844 -0.312,33.10958 0.109546,19.80117 -0.217318,39.61747 0.16,59.40942 0.821111,10.01692 8.091235,20.59913 18.794,21.303 11.13935,0.0751 22.28156,0.0104 33.422,0.032 -0.062,8.01933 -0.124,16.03867 -0.186,24.058 7.69133,-8.01933 15.38267,-16.03867 23.074,-24.058 22.64951,-0.086 45.31314,0.17072 67.954,-0.126 11.02037,-1.46718 17.81825,-12.95652 17.926,-23.377 -0.0352,-29.50672 0.14485,-59.02182 -0.089,-88.524 C 249.28959,96.677894 242.12877,85.819765 231.315,84.925 190.40609,84.809575 149.49091,84.90573 108.58,84.877 Z m 121.4,20.259 c 2.95175,0.0321 3.93938,3.68419 3.474,6.07759 -0.0669,28.06285 0.1323,56.14322 -0.097,84.19541 -0.33826,2.40471 -2.89541,3.82753 -5.20459,3.182 -21.98965,0.0942 -43.99627,-0.18783 -65.97541,0.14 -3.73465,0.51886 -7.06423,2.66539 -9.526,5.459 -3.65569,-4.71328 -9.83275,-6.20018 -15.53108,-5.599 -9.70759,-0.10759 -19.45824,0.20204 -29.14292,-0.131 -3.10043,-1.10256 -2.70931,-5.22805 -2.561,-7.77518 0.067,-27.45366 -0.13242,-54.92478 0.097,-82.36782 0.33869,-2.40503 2.89603,-3.82804 5.20559,-3.181 39.7538,0 79.50761,0 119.26141,0 z"
style="fill:#2d67b9" /></g></g></g></g></svg>
<svg width="60" height="60" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421">
<circle cx="150" cy="150" r="150" style="fill:#fffefe"/>
<path d="m150.485.001.484.002.485.004.483.005.484.007.483.009.483.01.482.011.482.013.482.015.481.016.481.017.48.019.48.021.48.022.479.023.479.025.478.027.479.028.477.03.478.031.476.032.477.034.476.036.476.037.475.038.475.04.474.042.474.043.474.044.473.046.472.047.473.049.472.05.471.052.471.053.471.055.47.056.469.057.469.059.469.06.469.062.467.064.468.064.467.067.466.067.466.069.466.071.465.072.464.073.465.075.463.076.463.077.463.079.462.081.462.082.461.083.461.084.46.087.46.087.459.089.459.09.459.092.457.093.458.094.456.096.457.097.455.099.456.1.454.101.455.103.453.104.453.105.453.107.452.108.452.11.451.111.45.112.45.114.45.115.449.116.448.118.448.119.447.12.447.122.446.123.446.125.445.125.444.128.444.128.444.13.442.131.443.132.441.134.441.135.441.136.44.138.439.139.439.141.438.141.438.143.437.144.436.146.436.147.435.148.435.149.434.151.433.152.433.153.432.155.432.156.431.157.43.159.43.159.429.161.429.163.427.163.428.165.426.166.426.167.426.169.424.17.425.171.423.173.423.173.422.175.422.176.42.178.421.178.419.18.419.181.418.182.418.184.417.185.416.186.416.187.415.189.414.189.413.191.413.192.412.194.412.194.411.196.41.197.41.198.408.2.408.2.408.202.406.203.406.204.406.206.404.206.404.208.403.209.403.21.402.211.401.213.4.214.399.214.399.216.398.218.398.218.397.219.395.221.396.222.394.223.394.224.393.225.392.227.392.227.39.229.39.23.39.231.388.232.388.233.387.235.386.235.385.237.385.238.384.239.383.24.383.241.381.243.381.243.38.244.379.246.379.247.377.248.377.249.376.25.376.251.374.252.374.254.373.254.372.256.371.256.37.258.37.259.369.26.368.261.367.262.367.263.365.264.365.265.364.267.363.267.362.268.362.27.36.271.36.271.359.273.358.274.357.274.356.276.356.277.355.278.353.279.353.28.352.281.352.282.35.283.35.284.348.285.348.287.347.287.346.288.345.289.344.29.344.292.342.292.342.293.34.295.34.295.339.296.338.297.337.299.336.299.336.3.334.301.334.303.332.303.332.304.331.305.329.306.329.308.328.308.327.309.327.31.325.311.324.312.324.313.322.314.321.315.321.315.32.317.318.318.318.318.317.32.315.321.315.321.314.322.313.324.312.324.311.325.31.327.309.327.308.328.308.329.306.329.305.331.304.332.303.332.303.334.301.334.3.336.299.336.299.337.297.338.296.339.295.34.295.34.293.342.292.342.292.344.29.344.289.345.288.346.287.347.287.348.285.348.284.35.283.35.282.352.281.352.28.353.279.353.278.355.277.356.276.356.274.357.274.358.273.359.271.36.271.36.27.362.268.362.267.363.267.364.265.365.264.365.263.367.262.367.261.368.26.369.259.37.258.37.256.371.256.372.254.373.254.374.252.374.251.376.25.376.249.377.248.377.247.379.246.379.244.38.243.381.243.381.241.383.24.383.239.384.238.385.237.385.235.386.235.387.233.388.232.388.231.39.23.39.229.39.227.392.227.392.225.393.224.394.223.394.222.396.221.395.219.397.218.398.218.398.216.399.214.399.214.4.213.401.211.402.21.403.209.403.208.404.206.404.206.406.204.406.203.406.202.408.2.408.2.408.198.41.197.41.196.411.194.412.194.412.192.413.191.413.189.414.189.415.187.416.186.416.185.417.184.418.182.418.181.419.18.419.178.421.178.42.176.422.175.422.173.423.173.423.171.425.17.424.169.426.167.426.166.426.165.428.163.427.163.429.161.429.159.43.159.43.157.431.156.432.155.432.153.433.152.433.151.434.149.435.148.435.147.436.146.436.144.437.143.438.141.438.141.439.139.439.138.44.136.441.135.441.134.441.132.443.131.442.13.444.128.444.128.444.125.445.125.446.123.446.122.447.12.447.119.448.118.448.116.449.115.45.114.45.112.45.111.451.11.452.108.452.107.453.105.453.104.453.103.455.101.454.1.456.099.455.097.457.096.456.094.458.093.457.092.459.09.459.089.459.087.46.087.46.084.461.083.461.082.462.081.462.079.463.077.463.076.463.075.465.073.464.072.465.071.466.069.466.067.466.067.467.064.468.064.467.062.469.06.469.059.469.057.469.056.47.055.471.053.471.052.471.05.472.049.473.047.472.046.473.044.474.043.474.042.474.04.475.038.475.037.476.036.476.034.477.032.476.031.478.03.477.028.479.027.478.025.479.023.479.022.48.021.48.019.48.017.481.016.481.015.482.013.482.011.482.01.483.009.483.007.484.005.483.004.485.002.484.001.485-.001.485-.002.484-.004.485-.005.483-.007.484-.009.483-.01.483-.011.482-.013.482-.015.482-.016.481-.017.481-.019.48-.021.48-.022.48-.023.479-.025.479-.027.478-.028.479-.03.477-.031.478-.032.476-.034.477-.036.476-.037.476-.038.475-.04.475-.042.474-.043.474-.044.474-.046.473-.047.472-.049.473-.05.472-.052.471-.053.471-.055.471-.056.47-.057.469-.059.469-.06.469-.062.469-.064.467-.064.468-.067.467-.067.466-.069.466-.071.466-.072.465-.073.464-.075.465-.076.463-.077.463-.079.463-.081.462-.082.462-.083.461-.084.461-.087.46-.087.46-.089.459-.09.459-.092.459-.093.457-.094.458-.096.456-.097.457-.099.455-.1.456-.101.454-.103.455-.104.453-.105.453-.107.453-.108.452-.11.452-.111.451-.112.45-.114.45-.115.45-.116.449-.118.448-.119.448-.12.447-.122.447-.123.446-.125.446-.125.445-.128.444-.128.444-.13.444-.131.442-.132.443-.134.441-.135.441-.136.441-.138.44-.139.439-.141.439-.141.438-.143.438-.144.437-.146.436-.147.436-.148.435-.149.435-.151.434-.152.433-.153.433-.155.432-.156.432-.157.431-.159.43-.159.4Line truncated
<g>
<path d="M250.015 109.41c0-13.541-8.986-24.535-20.055-24.535H108.91c-11.068 0-20.054 10.994-20.054 24.535v85.388c0 13.541 8.986 24.535 20.054 24.535h32.322l.188 23.576 22.7-23.576h65.84c11.069 0 20.055-10.994 20.055-24.535V109.41Z" style="fill:#fffefe" transform="matrix(.72462 0 0 .59228 68.85 40.41)"/>
<path d="m230.219 84.877.259.006.257.01.257.014.255.018.255.022.254.025.253.03.253.033.251.037.25.041.25.045.248.048.247.052.247.056.245.06.244.063.243.067.242.07.241.074.239.077.239.081.237.085.236.088.235.091.233.095.233.098.231.102.229.105.229.108.227.111.225.115.224.118.223.122.222.124.219.128.219.131.217.134.215.137.214.14.212.143.211.147.209.149.208.152.206.155.204.158.203.162.201.164.199.166.197.17.196.173.194.175.192.178.19.181.189.183.187.187.184.188.183.192.181.194.179.197.178.199.175.202.173.205.171.207.169.209.167.212.165.214.163.217.161.219.159.221.156.224.155.226.152.229.15.23.148.233.145.235.144.237.141.24.138.242.137.243.134.246.131.248.13.25.127.252.124.254.122.256.12.257.117.26.114.262.112.263.11.266.107.267.104.269.102.271.099.272.097.275.093.276.092.277.088.28.086.281.083.282.08.284.078.286.074.287.072.289.069.29.066.292.064.293.06.295.058.296.054.297.052.299.048.3.046.301.043.303.039.304.037.305.033.306.031.307.027.309.024.31.021.31.018.312.014.313.012.314.008.315.005.316.002.317v85.388l-.002.317-.005.316-.008.314-.012.314-.014.313-.018.312-.021.311-.024.31-.027.308-.031.308-.033.306-.037.305-.039.304-.043.302-.046.302-.048.3-.052.298-.054.298-.058.296-.06.294-.064.294-.066.291-.069.291-.072.288-.074.288-.078.285-.08.284-.083.283-.086.281-.088.279-.092.278-.093.276-.097.274-.099.273-.102.271-.104.269-.107.267-.11.265-.112.264-.114.262-.117.259-.12.258-.122.256-.124.254-.127.252-.13.25-.131.248-.134.245-.137.244-.138.242-.141.239-.144.238-.145.235-.148.232-.15.231-.152.229-.155.226-.156.223-.159.222-.161.219-.163.217-.165.214-.167.212-.169.209-.171.207-.173.205-.175.201-.178.2-.179.197-.181.194-.183.191-.184.189-.187.186-.189.184-.19.181-.192.178-.194.175-.196.173-.197.169-.199.167-.201.164-.203.161-.204.158-.206.156-.208.152-.209.149-.211.146-.212.144-.214.14-.215.137-.217.134-.219.131-.219.128-.222.124-.223.121-.224.118-.225.115-.227.112-.229.108-.229.105-.231.102-.233.098-.233.095-.235.091-.236.088-.237.084-.239.081-.239.078-.241.074-.242.07-.243.067-.244.063-.245.059-.247.056-.247.052-.248.049-.25.045-.25.041-.251.037-.253.033-.253.03-.254.025-.255.022-.255.018-.257.014-.257.01-.259.006-.259.002h-65.84l-22.7 23.576-.188-23.576H108.91l-.259-.002-.258-.006-.258-.01-.257-.014-.255-.018-.255-.022-.254-.025-.253-.03-.253-.033-.251-.037-.25-.041-.25-.045-.248-.049-.247-.052-.246-.056-.246-.059-.244-.063-.243-.067-.242-.07-.241-.074-.239-.078-.239-.081-.237-.084-.236-.088-.235-.091-.233-.095-.233-.098-.231-.102-.229-.105-.229-.108-.226-.112-.226-.115-.224-.118-.223-.121-.221-.124-.22-.128-.219-.131-.217-.134-.215-.137-.214-.14-.212-.144-.211-.146-.209-.149-.208-.152-.206-.156-.204-.158-.203-.161-.2-.164-.2-.167-.197-.169-.196-.173-.194-.175-.192-.178-.19-.181-.189-.184-.186-.186-.185-.189-.183-.191-.181-.194-.179-.197-.177-.2-.176-.201-.173-.205-.171-.207-.169-.209-.167-.212-.165-.214-.163-.217-.161-.219-.159-.222-.156-.223-.155-.226-.152-.229-.15-.231-.148-.232-.145-.235-.143-.238-.141-.239-.139-.242-.137-.244-.134-.245-.131-.248-.13-.25-.126-.252-.125-.254-.122-.256-.119-.258-.118-.259-.114-.262-.112-.264-.11-.265-.107-.267-.104-.269-.102-.271-.099-.273-.096-.274-.094-.276-.092-.278-.088-.279-.086-.281-.083-.283-.08-.284-.078-.285-.074-.288-.072-.288-.069-.291-.066-.291-.064-.294-.06-.294-.058-.296-.054-.298-.052-.298-.048-.3-.046-.302-.043-.302-.039-.304-.037-.305-.033-.306-.031-.308-.027-.308-.024-.31-.021-.311-.018-.312-.014-.313-.012-.314-.008-.314-.005-.316-.001-.317V109.41l.001-.317.005-.316.008-.315.012-.314.014-.313.018-.312.021-.31.024-.31.027-.309.031-.307.033-.306.037-.305.039-.304.043-.303.046-.301.048-.3.052-.299.054-.297.058-.296.06-.295.064-.293.066-.292.069-.29.072-.289.074-.287.078-.286.08-.284.083-.282.086-.281.088-.28.092-.277.094-.276.096-.275.099-.272.102-.271.104-.269.107-.267.11-.266.112-.263.114-.262.118-.26.119-.257.122-.256.125-.254.126-.252.13-.25.131-.248.134-.246.137-.243.139-.242.141-.24.143-.237.145-.235.148-.233.15-.23.152-.229.155-.226.156-.224.159-.221.161-.219.163-.217.165-.214.167-.212.169-.209.171-.207.173-.205.176-.202.177-.199.179-.197.181-.194.183-.192.185-.188.186-.187.189-.183.19-.181.192-.178.194-.175.196-.173.197-.17.2-.166.2-.164.203-.162.204-.158.206-.155.208-.152.209-.149.211-.147.212-.143.214-.14.215-.137.217-.134.219-.131.22-.128.221-.124.223-.122.224-.118.226-.115.226-.111.229-.108.229-.105.231-.102.233-.098.233-.095.235-.091.236-.088.237-.085.239-.081.239-.077.241-.074.242-.07.243-.067.244-.063.246-.06.246-.056.247-.052.248-.048.25-.045.25-.041.251-.037.253-.033.253-.03.254-.025.255-.022.255-.018.257-.014.258-.01.258-.006.259-.002h121.05l.259.002Zm-121.257 20.259h-.101l-.048.001-.048.002-.047.003-.046.003-.046.004-.045.005-.045.005-.044.006-.044.006-.044.007-.042.008-.043.008-.042.009-.042.01-.041.01-.042.01-.04.011-.041.012-.041.013-.039.013-.04.013-.04.014-.039.015-.04.015-.039.016-.039.017-.038.017-.039.017-.039.019-.038.018-.038.02-.038.02-.038.02-.037.022-.038.021-.037.023-.038.023-.037.023-.037.025-.036.024-.037.026-.036.02Line truncated
<g>
<path d="M250.015 109.322c0-13.493-8.954-24.447-19.983-24.447H108.838c-11.029 0-19.982 10.954-19.982 24.447v85.082c0 13.493 8.953 24.447 19.982 24.447h32.394l-.186 24.058 23.074-24.058h65.912c11.029 0 19.983-10.954 19.983-24.447v-85.082Z" style="fill:#fffefe" transform="matrix(-.72462 0 0 .59228 231.145 78.43)"/>
<path d="m108.58 84.877-.257.006-.257.01-.256.014-.255.018-.254.021-.253.026-.252.029-.251.033-.251.038-.249.04-.248.045-.248.048-.246.052-.246.056-.244.059-.243.063-.242.066-.242.071-.239.073-.239.077-.238.081-.236.084-.235.088-.234.091-.233.094-.232.098-.23.101-.229.105-.227.108-.226.111-.225.114-.223.118-.222.121-.221.124-.219.127-.218.131-.216.133-.214.137-.214.139-.211.143-.21.146-.209.149-.206.151-.206.155-.203.158-.202.16-.2.164-.199.166-.196.169-.195.172-.194.174-.191.178-.19.18-.188.183-.186.185-.184.189-.182.191-.18.193-.179.196-.176.199-.175.201-.172.204-.171.206-.169.208-.166.212-.164.213-.163.216-.16.218-.158.221-.156.223-.154.225-.152.228-.149.23-.147.232-.145.234-.143.236-.141.239-.138.241-.136.242-.133.245-.132.247-.128.249-.127.251-.124.253-.121.255-.12.257-.116.259-.114.261-.112.263-.109.264-.107.266-.104.268-.101.27-.099.272-.096.273-.094.275-.09.277-.089.278-.085.28-.083.282-.08.283-.077.284-.074.287-.072.287-.069.29-.066.29-.063.292-.06.294-.057.295-.055.296-.051.298-.049.299-.045.3-.043.301-.039.303-.036.304-.034.305-.03.307-.027.307-.024.309-.021.309-.018.311-.014.312-.012.313-.008.314-.005.314-.001.316v85.082l.001.316.005.315.008.313.012.313.014.312.018.311.021.309.024.309.027.308.03.306.034.305.036.304.039.303.043.301.045.3.049.299.051.298.055.296.057.295.06.294.063.292.066.29.069.29.072.287.074.287.077.284.08.284.083.281.085.28.089.278.09.277.094.275.096.273.099.272.101.27.104.268.107.266.109.265.112.262.114.261.116.259.12.257.121.255.124.253.127.251.128.249.132.247.133.245.136.243.138.24.141.239.143.236.145.235.147.232.149.229.152.228.154.225.156.223.158.221.16.218.163.216.164.214.166.211.169.208.171.207.172.203.175.201.176.199.179.196.18.194.182.191.184.188.186.185.188.183.19.18.191.178.194.174.195.172.196.169.199.167.2.163.202.161.203.157.206.155.206.152.209.148.21.146.211.143.214.139.214.137.216.134.218.13.219.127.221.124.222.121.223.118.225.114.226.111.227.108.229.105.23.101.232.098.233.094.234.091.235.088.236.084.238.081.239.077.239.074.242.07.242.066.243.063.244.059.246.056.246.052.248.048.248.045.249.041.251.037.251.033.252.029.253.026.254.022.255.017.256.014.257.01.257.006.258.002h32.394l-.186 24.058 23.074-24.058h65.912l.258-.002.258-.006.256-.01.256-.014.255-.017.254-.022.253-.026.252-.029.251-.033.251-.037.249-.041.249-.045.247-.048.246-.052.246-.056.244-.059.243-.063.243-.066.241-.07.24-.074.238-.077.238-.081.236-.084.236-.088.233-.091.233-.094.232-.098.23-.101.229-.105.227-.108.226-.111.225-.114.223-.118.222-.121.221-.124.219-.127.218-.13.216-.134.215-.137.213-.139.211-.143.21-.146.209-.148.206-.152.206-.155.203-.157.202-.161.2-.163.199-.167.196-.169.196-.172.193-.174.191-.178.19-.18.188-.183.186-.185.184-.188.182-.191.18-.194.179-.196.176-.199.175-.201.173-.203.17-.207.169-.208.166-.211.165-.214.162-.216.16-.218.158-.221.156-.223.154-.225.152-.228.149-.229.148-.232.145-.235.142-.236.141-.239.138-.24.136-.243.133-.245.132-.247.128-.249.127-.251.124-.253.122-.255.119-.257.116-.259.114-.261.112-.262.109-.265.107-.266.104-.268.101-.27.099-.272.096-.273.094-.275.091-.277.088-.278.085-.28.083-.281.08-.284.077-.284.075-.287.071-.287.069-.29.066-.29.063-.292.06-.294.058-.295.054-.296.051-.298.049-.299.045-.3.043-.301.039-.303.037-.304.033-.305.03-.306.027-.308.024-.309.021-.309.018-.311.015-.312.011-.313.008-.313.005-.315.002-.316v-85.082l-.002-.316-.005-.314-.008-.314-.011-.313-.015-.312-.018-.311-.021-.309-.024-.309-.027-.307-.03-.307-.033-.305-.037-.304-.039-.303-.043-.301-.045-.3-.049-.299-.051-.298-.054-.296-.058-.295-.06-.294-.063-.292-.066-.29-.069-.29-.071-.287-.075-.287-.077-.284-.08-.283-.083-.282-.085-.28-.088-.278-.091-.277-.094-.275-.096-.273-.099-.272-.101-.27-.104-.268-.107-.266-.109-.264-.112-.263-.114-.261-.116-.259-.119-.257-.122-.255-.124-.253-.127-.251-.128-.249-.132-.247-.133-.245-.136-.242-.138-.241-.141-.239-.142-.236-.145-.234-.148-.232-.149-.23-.152-.228-.154-.225-.156-.223-.158-.221-.16-.218-.162-.216-.165-.213-.166-.212-.169-.208-.17-.206-.173-.204-.175-.201-.176-.199-.179-.196-.18-.193-.182-.191-.184-.189-.186-.185-.188-.183-.19-.18-.191-.178-.193-.174-.196-.172-.196-.169-.199-.166-.2-.164-.202-.16-.203-.158-.206-.155-.206-.151-.209-.149-.21-.146-.211-.143-.213-.139-.215-.137-.216-.133-.218-.131-.219-.127-.221-.124-.222-.121-.223-.118-.225-.114-.226-.111-.227-.108-.229-.105-.23-.101-.232-.098-.233-.094-.233-.091-.236-.088-.236-.084-.238-.081-.238-.077-.24-.073-.241-.071-.243-.066-.243-.063-.244-.059-.246-.056-.246-.052-.247-.048-.249-.045-.249-.04-.251-.038-.251-.033-.252-.029-.253-.026-.254-.021-.255-.018-.256-.014-.256-.01-.258-.006-.258-.002H108.838l-.258.002Zm121.4 20.259h.1l.048.001.046.002.046.003.046.003.044.004.045.004.044.005.043.006.043.006.043.007.041.008.042.008.041.009.041.009.04.01.041.01.04.011.039.012.04.012.04.013.039.013.038.014.039.014.038.015.038.015.039.017.038.016.037.018.038.017.037.019.038.019.037.02.037.019.037.021.037.022.036.022.037.022.036.023.036.024.036.024.036.025.036.026.035.026.036.026.035.027.034.028.Line truncated
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Loaded 100 of 673 files, more files were not shown because too many files have changed in this diff. Show more