aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2022-07-25 00:31:54 +0200
committerJulien Dessaux2022-07-25 00:36:30 +0200
commit1077f37c53460c86a6dba3203d210e3617bb7e70 (patch)
tree2e58e5e48ce4d66d240df2daad618c21410a6bc7
parentFixed git articles (diff)
downloadwww-1077f37c53460c86a6dba3203d210e3617bb7e70.tar.gz
www-1077f37c53460c86a6dba3203d210e3617bb7e70.tar.bz2
www-1077f37c53460c86a6dba3203d210e3617bb7e70.zip
Added home blog article
-rw-r--r--assets/base.css4
-rw-r--r--content/blog/miscellaneous/gitolite-cgit.md2
-rw-r--r--content/blog/miscellaneous/home.md31
-rw-r--r--static/static/home.drawio.svg3
4 files changed, 39 insertions, 1 deletions
diff --git a/assets/base.css b/assets/base.css
index 9cec5e4..d60d821 100644
--- a/assets/base.css
+++ b/assets/base.css
@@ -53,3 +53,7 @@ h1, h2, h3, h4, h5 {
.fullwidth {
width: 100%;
}
+img[src*='#center'] {
+ display: block;
+ margin: auto;
+}
diff --git a/content/blog/miscellaneous/gitolite-cgit.md b/content/blog/miscellaneous/gitolite-cgit.md
index b480082..9ef67fa 100644
--- a/content/blog/miscellaneous/gitolite-cgit.md
+++ b/content/blog/miscellaneous/gitolite-cgit.md
@@ -19,7 +19,7 @@ The installation is documented in the following docs articles on this website:
- [gitolite]({{< ref "gitolite" >}})
- [cgit]({{< ref "cgit" >}})
-If you are following these installation notes as a guide, there is one important thing to know: I wanted to keep gitea links mostly working (at least redirecting to the correct repository), so I create all my publicly available repositories under an `adyxax` folder. This shows mostly in the cgit and nginx configurations.
+If you are following these installation notes as a guide, there is one important thing to know: I wanted to keep gitea links mostly working (at least redirecting to the correct repository), so I created all my publicly available repositories under an `adyxax` folder. This shows mostly in the cgit and nginx configurations.
## Challenges
diff --git a/content/blog/miscellaneous/home.md b/content/blog/miscellaneous/home.md
new file mode 100644
index 0000000..b2d3b54
--- /dev/null
+++ b/content/blog/miscellaneous/home.md
@@ -0,0 +1,31 @@
+---
+title: My home network
+description: wifi setup with transparent roaming
+date: 2022-07-24
+---
+
+## Introduction
+
+This week I have upgraded my OpenWRT access points. The new release had non compatible changes so I had to wipe the routers and reconfigure everything from scratch. I took the opportunity to document the process and will write at least two blog articles about this. This first one describes my network and the design choices, the second one will be about the OpenWRT configuration to implement these choices.
+
+## My home network
+
+This is a simple lan network:
+
+![home network](/static/home.drawio.svg)
+
+My FAI's router acts as a very basic firewall and as a dhcp server for the lan. Most other functionalities are disabled, especially its wifi since I wanted to do cool stuff this router does not support at all.
+
+## The wifi setup
+
+There are two wifi access point on my network. One might just be enough if placed at the center of the house, but I then would have no reception in the garden. Besides I very much prefer having two access points emitting at low power instead of one at high power.
+
+I chose to run OpenWRT on these two access points in order to do the following cool stuff:
+- use 802.11r aka transparent roaming
+- have one wifi network bridged with my lan
+- have a second wifi network isolated from my lan with a restricted firewall and adblocking
+- manage the configuration with ansible
+
+Roaming wifi is fantastic once you experience it: never again will your network go down for a few seconds when disconnecting from an access point and reconnecting another. You always have the best signal and your connection never loses a packet!
+
+Having your wifi network bridged with your lan is very comfortable if you need to ssh from your workstation to your wifi devices like laptops or phones, especially coupled with the roaming. But devices like TVs, sound bar or game consoles need to go onto an isolated network. It allows me to hide devices from each others on wifi, run dns adblocking on it and ban some weird spying traffic all these "smart" devices do.
diff --git a/static/static/home.drawio.svg b/static/static/home.drawio.svg
new file mode 100644
index 0000000..9192653
--- /dev/null
+++ b/static/static/home.drawio.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="279px" height="222px" viewBox="-0.5 -0.5 279 222" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2022-07-24T22:09:01.552Z&quot; agent=&quot;5.0 (X11)&quot; version=&quot;15.0.3&quot; etag=&quot;eFXnGROQanL8T0EdIgcd&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;ZPRT6O2qIPaLcVj74FYs&quot;&gt;7Zpdc9o6EIZ/DdOro/GngMtAkjYz7RlmctGeq46xha1GWIwsAvTXnxWW/IEgEEJD6MAFY72S1kh6di2t6fjD6fKziGbZN54Q1vGcZNnxbzueF/YxfCthVQq+G5ZCKmhSSm4tPNLfRIuOVuc0IUWroeScSTprizHPcxLLlhYJwRftZhPO2nedRSmxhMc4Yrb6nSYyK9Ve6NT6F0LTzNzZdXTNNDKNtVBkUcIXDcm/6/hDwbksr6bLIWFq7sy8lP3ud9RWP0yQXB7SwSs7PEdsrsfW8TCDroOEPsNlqi5H8zGjMTR7GJnasTCVRoF7NLro0cmVmTKSwAzqIhcy4ynPI3ZXqwPB53lC1O9yoFS3+cr5DEQXxF9EypXGIZpLDlImp0zXkiWVP1R3FOrSf9qYur5dNgsrU8iTGwUEFHOek1K5p4zp+ojRNIdrRiZqWM9ESAoc3Gh5zKXkU6hg0ZiwQRQ/pethDDnjorY54bk0Usfze34/ABcws6SmZufyuRUU4EyET4kUK2iiPekf3UMQFkn63DYTacrTqltlacQp3KAyE3gOchofbaDyTqdtsOBzERNtownXq8x64YZZGYmUyBfMmoZ8MilIqw1cNKanlta0byfft8h/yCURuTbcYpcxiCxqIcFdZ0qMGZ+DncEio5I8zqJYiQuIdW0i30KFQo0sj+TCx057rk0AWtThyjUxKGuEqt7GmjTZaU32CzMbHBJT3L6HXNxDLoI73qs+h4URy18b022cVZTj+XDe6iC/G1rrEG5ZBqO91a/DNga+d6QnY3ePoff13fAQwpD30R9NpuavfDSd5skUOn2E8c4nE34thoeZfbWbnJRufBDd3SvdF0+3FVaP5XlvfH5fgrsWwci/gnlBYIb4RGBahs4LZs8C8wsR3EJzc1Gl4q1a6q9qZUe8oJJye8kbFTFRJ4oGM5XQYJTPJaM5GVapCgXZBHhr4DFcf9T5Qwr+RBo1uNdzBz7UpCJKKKmh0pwZ+ZYKsF7+rFx5UmXMJDC8xvFmukxV3gbBYWjBxVOBZvE5TzNhfweNjV104KEetjfS/gnOM30LmgWdUPdKzT5qFtCdkaL4mc3HZ+XHxyjothCqEnBNhLrI2YJQcAKEzOP55T3dv3CLwzZ1V9Q2UCuIgNH/LCQX69zt+WALDglWW478J8HMtTAbZZzkdHkl6HIICoMzEmS/ELi/efhUqC0lLCOs7BWkPSDpeTpn9reHEcb9+oPbPLk2Txh6dG2kNnfrRyFlZ9oRtjD6O0+DpTNc9suht+d+dxiyXja871nQtd9TIHtTD14oO1vfMuxLAAhS0N/ReG1IoTJTg1gPIBx0wltlCRAtSlpdK2BpOs63jwl95AfbV74ROLa9RDpJ1LBz/Ci8Ro2LiRp7Ez/HZpDOHTXs7LzKBnjXfdG+fdGHyQZsHND+bCoAivW/eUre6r9E+Xf/Aw==&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><path d="M 60 110 L 60 50" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 107px; margin-left: 62px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div>Public IP<br /></div></div></div></div></foreignObject><text x="62" y="107" fill="#839496" font-family="Helvetica" font-size="11px">Public IP&#xa;</text></switch></g><path d="M 30 20 C 6 20 0 40 19.2 44 C 0 52.8 21.6 72 37.2 64 C 48 80 84 80 96 64 C 120 64 120 48 105 40 C 120 24 96 8 75 16 C 60 4 36 4 30 20 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 40px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Internet</div></div></div></foreignObject><text x="60" y="44" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">Internet</text></switch></g><path d="M 90 120 L 250 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 117px; margin-left: 198px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div>192.168.1.0/24</div></div></div></div></foreignObject><text x="198" y="117" fill="#839496" font-family="Helvetica" font-size="11px" text-anchor="end">192.168.1....</text></switch></g><path d="M 149.66 120 L 149.66 160" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 157px; margin-left: 152px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div>.2</div></div></div></div></foreignObject><text x="152" y="157" fill="#839496" font-family="Helvetica" font-size="11px">.2</text></switch></g><path d="M 250 120 L 250 160" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 157px; margin-left: 252px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div>.7</div></div></div></div></foreignObject><text x="252" y="157" fill="#839496" font-family="Helvetica" font-size="11px">.7</text></switch></g><path d="M 200 120 L 200 160" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 157px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">.3</div></div></div></foreignObject><text x="202" y="157" fill="#839496" font-family="Helvetica" font-size="11px">.3</text></switch></g><rect x="230" y="160" width="12.86" height="25.71" rx="0.86" ry="0.86" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 230 164.29 L 242.86 164.29 M 230 172.86 L 242.86 172.86" fill="none" stroke="#6881b3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><rect x="238.57" y="162.14" width="34.29" height="19.29" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="251.43" y="181.43" width="8.57" height="4.29" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 245 185.29 L 266.43 185.29 L 270.72 190 L 240.71 190 Z" fill="#cccccc" stroke="#6881b3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><path d="M 251 188.93 L 258.72 188.93 M 245.43 187.64 L 262.14 187.64 M 246.29 186.36 L 261.72 186.36 M 263 186.36 L 266 186.36 M 263.86 187.64 L 266.86 187.64 M 264.72 188.93 L 267.72 188.93" fill="none" stroke="#6881b3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><rect x="239.86" y="163.43" width="31.29" height="16.71" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="232.14" cy="175" rx="0.8572" ry="0.8571428571428571" fill="#ffffff" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 197px; margin-left: 251px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Hero</div></div></div></foreignObject><text x="251" y="209" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">Hero</text></switch></g><rect x="176.47" y="46.45" width="47.06" height="11.68" rx="2.34" ry="2.34" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="181.18" y="58.13" width="37.65" height="1.87" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 208 46.45 L 208.24 25.42 C 208.37 25.22 208.59 25.11 208.82 25.11 C 209.06 25.11 209.28 25.22 209.41 25.42 L 209.65 46.45 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="217.88" cy="52.29" rx="3.7647999999999997" ry="3.738317757009346" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.77" cy="48.79" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.77" cy="55.79" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.77" cy="52.29" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="207.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="203.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="199.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="195.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="191.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="187.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="183.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="179.29" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 177.88 49.72 L 180.71 49.72 L 180.71 51.12 L 179.76 51.12 L 179.76 51.59 L 178.82 51.59 L 178.82 51.12 L 177.88 51.12 Z M 181.88 49.72 L 184.71 49.72 L 184.71 51.12 L 183.76 51.12 L 183.76 51.59 L 182.82 51.59 L 182.82 51.12 L 181.88 51.12 Z M 185.88 49.72 L 188.71 49.72 L 188.71 51.12 L 187.76 51.12 L 187.76 51.59 L 186.82 51.59 L 186.82 51.12 L 185.88 51.12 Z M 189.88 49.72 L 192.71 49.72 L 192.71 51.12 L 191.76 51.12 L 191.76 51.59 L 190.82 51.59 L 190.82 51.12 L 189.88 51.12 Z M 193.88 49.72 L 196.71 49.72 L 196.71 51.12 L 195.76 51.12 L 195.76 51.59 L 194.82 51.59 L 194.82 51.12 L 193.88 51.12 Z M 197.88 49.72 L 200.71 49.72 L 200.71 51.12 L 199.76 51.12 L 199.76 51.59 L 198.82 51.59 L 198.82 51.12 L 197.88 51.12 Z M 201.88 49.72 L 204.71 49.72 L 204.71 51.12 L 203.76 51.12 L 203.76 51.59 L 202.82 51.59 L 202.82 51.12 L 201.88 51.12 Z M 205.88 49.72 L 208.71 49.72 L 208.71 51.12 L 207.76 51.12 L 207.76 51.59 L 206.82 51.59 L 206.82 51.12 L 205.88 51.12 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="176.47" y="20" width="0" height="0" fill="none" stroke="#6881b3" pointer-events="all"/><path d="M 218.82 51.36 L 219.77 52.29 L 218.82 53.22 M 215.53 52.29 L 219.77 52.29" fill="none" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 211.2 22.76 C 212.23 24.32 212.23 26.34 211.2 27.9 L 210.49 27.43 C 211.28 26.2 211.28 24.64 210.49 23.41 Z M 213.08 21.36 C 214.96 23.73 214.96 27.07 213.08 29.44 L 212.38 28.88 C 213.98 26.85 213.98 23.99 212.38 21.96 Z M 214.97 20 C 217.81 23.05 217.81 27.75 214.97 30.79 L 214.26 30.23 C 216.86 27.53 216.86 23.27 214.26 20.56 Z M 206.49 22.76 C 205.46 24.32 205.46 26.34 206.49 27.9 L 207.2 27.43 C 206.41 26.2 206.41 24.64 207.2 23.41 Z M 204.61 21.36 C 202.71 23.74 202.71 27.1 204.61 29.49 L 205.32 28.83 C 203.76 26.82 203.76 24.02 205.32 22.01 Z M 202.73 20.05 C 199.92 23.09 199.92 27.76 202.73 30.79 L 203.44 30.23 C 200.87 27.53 200.87 23.31 203.44 20.61 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 200px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">wifi1</div></div></div></foreignObject><text x="200" y="79" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">wifi1</text></switch></g><rect x="130" y="192.04" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="130" y="185.45" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="130" y="178.85" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="130" y="172.25" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="130" y="165.65" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 131.55 164.9 L 139.71 160 L 155.24 160 L 163.4 164.9 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="161.84" cy="194.87" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="161.72" cy="188.27" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="161.84" cy="181.68" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="161.84" cy="175.08" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="161.84" cy="168.48" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 131.94 196.94 L 133.88 192.8 L 135.83 192.8 L 133.88 196.94 Z M 135.83 196.94 L 137.77 192.8 L 139.71 192.8 L 137.77 196.94 Z M 139.71 196.94 L 141.65 192.8 L 143.59 192.8 L 141.65 196.94 Z M 143.59 196.94 L 145.53 192.8 L 147.48 192.8 L 145.53 196.94 Z M 147.48 196.94 L 149.42 192.8 L 151.36 192.8 L 149.42 196.94 Z M 151.36 196.94 L 153.3 192.8 L 155.24 192.8 L 153.3 196.94 Z M 131.94 190.35 L 133.88 186.2 L 135.83 186.2 L 133.88 190.35 Z M 135.83 190.35 L 137.77 186.2 L 139.71 186.2 L 137.77 190.35 Z M 139.71 190.35 L 141.65 186.2 L 143.59 186.2 L 141.65 190.35 Z M 143.59 190.35 L 145.53 186.2 L 147.48 186.2 L 145.53 190.35 Z M 147.48 190.35 L 149.42 186.2 L 151.36 186.2 L 149.42 190.35 Z M 151.36 190.35 L 153.3 186.2 L 155.24 186.2 L 153.3 190.35 Z M 131.94 183.75 L 133.88 179.6 L 135.83 179.6 L 133.88 183.75 Z M 135.83 183.75 L 137.77 179.6 L 139.71 179.6 L 137.77 183.75 Z M 139.71 183.75 L 141.46 179.6 L 143.4 179.6 L 141.46 183.75 Z M 143.59 183.75 L 145.53 179.6 L 147.48 179.6 L 145.53 183.75 Z M 147.48 183.75 L 149.42 179.6 L 151.36 179.6 L 149.42 183.75 Z M 151.36 183.75 L 153.3 179.6 L 155.24 179.6 L 153.3 183.75 Z M 131.94 177.15 L 133.88 173.01 L 135.83 173.01 L 133.88 177.15 Z M 135.83 177.15 L 137.77 173.01 L 139.71 173.01 L 137.77 177.15 Z M 139.71 177.15 L 141.65 173.01 L 143.59 173.01 L 141.65 177.15 Z M 143.59 177.15 L 145.53 173.01 L 147.48 173.01 L 145.53 177.15 Z M 147.48 177.15 L 149.42 173.01 L 151.36 173.01 L 149.42 177.15 Z M 151.36 177.15 L 153.3 173.01 L 155.24 173.01 L 153.3 177.15 Z M 131.94 170.56 L 133.88 166.41 L 135.83 166.41 L 133.88 170.56 Z M 135.83 170.56 L 137.77 166.41 L 139.71 166.41 L 137.77 170.56 Z M 139.71 170.56 L 141.65 166.41 L 143.59 166.41 L 141.65 170.56 Z M 143.59 170.56 L 145.53 166.41 L 147.48 166.41 L 145.53 170.56 Z M 147.48 170.56 L 149.42 166.41 L 151.36 166.41 L 149.42 170.56 Z M 151.36 170.56 L 153.3 166.41 L 155.24 166.41 L 153.3 170.56 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="130" y="160" width="0" height="0" fill="none" stroke="#6881b3" pointer-events="all"/><path d="M 155.63 195.62 C 155.63 194.77 158.85 194.07 162.82 194.07 C 166.78 194.07 170 194.77 170 195.62 L 170 198.45 C 170 199.31 166.78 200 162.82 200 C 158.85 200 155.63 199.31 155.63 198.45 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 155.63 192.04 C 155.63 191.19 158.85 190.49 162.82 190.49 C 166.78 190.49 170 191.19 170 192.04 L 170 194.87 C 170 195.73 166.78 196.42 162.82 196.42 C 158.85 196.42 155.63 195.73 155.63 194.87 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 155.63 188.65 C 155.63 187.79 158.85 187.1 162.82 187.1 C 166.78 187.1 170 187.79 170 188.65 L 170 191.29 C 170 192.14 166.78 192.84 162.82 192.84 C 158.85 192.84 155.63 192.14 155.63 191.29 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 155.63 195.62 C 155.63 196.48 158.85 197.17 162.82 197.17 C 166.78 197.17 170 196.48 170 195.62 M 155.63 192.04 C 155.63 192.9 158.85 193.59 162.82 193.59 C 166.78 193.59 170 192.9 170 192.04 M 155.63 188.65 C 155.63 189.51 158.85 190.2 162.82 190.2 C 166.78 190.2 170 189.51 170 188.65" fill="none" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 150px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div>Nas</div></div></div></div></foreignObject><text x="150" y="219" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">Nas</text></switch></g><rect x="180" y="192.04" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="180" y="185.45" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="180" y="178.85" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="180" y="172.25" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="180" y="165.65" width="34.95" height="5.65" rx="0.75" ry="0.75" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 181.55 164.9 L 189.71 160 L 205.24 160 L 213.4 164.9 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="211.84" cy="194.87" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.72" cy="188.27" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.84" cy="181.68" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.84" cy="175.08" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="211.84" cy="168.48" rx="1.5533980582524272" ry="1.5078691923475638" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 181.94 196.94 L 183.88 192.8 L 185.83 192.8 L 183.88 196.94 Z M 185.83 196.94 L 187.77 192.8 L 189.71 192.8 L 187.77 196.94 Z M 189.71 196.94 L 191.65 192.8 L 193.59 192.8 L 191.65 196.94 Z M 193.59 196.94 L 195.53 192.8 L 197.48 192.8 L 195.53 196.94 Z M 197.48 196.94 L 199.42 192.8 L 201.36 192.8 L 199.42 196.94 Z M 201.36 196.94 L 203.3 192.8 L 205.24 192.8 L 203.3 196.94 Z M 181.94 190.35 L 183.88 186.2 L 185.83 186.2 L 183.88 190.35 Z M 185.83 190.35 L 187.77 186.2 L 189.71 186.2 L 187.77 190.35 Z M 189.71 190.35 L 191.65 186.2 L 193.59 186.2 L 191.65 190.35 Z M 193.59 190.35 L 195.53 186.2 L 197.48 186.2 L 195.53 190.35 Z M 197.48 190.35 L 199.42 186.2 L 201.36 186.2 L 199.42 190.35 Z M 201.36 190.35 L 203.3 186.2 L 205.24 186.2 L 203.3 190.35 Z M 181.94 183.75 L 183.88 179.6 L 185.83 179.6 L 183.88 183.75 Z M 185.83 183.75 L 187.77 179.6 L 189.71 179.6 L 187.77 183.75 Z M 189.71 183.75 L 191.46 179.6 L 193.4 179.6 L 191.46 183.75 Z M 193.59 183.75 L 195.53 179.6 L 197.48 179.6 L 195.53 183.75 Z M 197.48 183.75 L 199.42 179.6 L 201.36 179.6 L 199.42 183.75 Z M 201.36 183.75 L 203.3 179.6 L 205.24 179.6 L 203.3 183.75 Z M 181.94 177.15 L 183.88 173.01 L 185.83 173.01 L 183.88 177.15 Z M 185.83 177.15 L 187.77 173.01 L 189.71 173.01 L 187.77 177.15 Z M 189.71 177.15 L 191.65 173.01 L 193.59 173.01 L 191.65 177.15 Z M 193.59 177.15 L 195.53 173.01 L 197.48 173.01 L 195.53 177.15 Z M 197.48 177.15 L 199.42 173.01 L 201.36 173.01 L 199.42 177.15 Z M 201.36 177.15 L 203.3 173.01 L 205.24 173.01 L 203.3 177.15 Z M 181.94 170.56 L 183.88 166.41 L 185.83 166.41 L 183.88 170.56 Z M 185.83 170.56 L 187.77 166.41 L 189.71 166.41 L 187.77 170.56 Z M 189.71 170.56 L 191.65 166.41 L 193.59 166.41 L 191.65 170.56 Z M 193.59 170.56 L 195.53 166.41 L 197.48 166.41 L 195.53 170.56 Z M 197.48 170.56 L 199.42 166.41 L 201.36 166.41 L 199.42 170.56 Z M 201.36 170.56 L 203.3 166.41 L 205.24 166.41 L 203.3 170.56 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="180" y="160" width="0" height="0" fill="none" stroke="#6881b3" pointer-events="all"/><path d="M 205.63 195.62 C 205.63 194.77 208.85 194.07 212.82 194.07 C 216.78 194.07 220 194.77 220 195.62 L 220 198.45 C 220 199.31 216.78 200 212.82 200 C 208.85 200 205.63 199.31 205.63 198.45 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 205.63 192.04 C 205.63 191.19 208.85 190.49 212.82 190.49 C 216.78 190.49 220 191.19 220 192.04 L 220 194.87 C 220 195.73 216.78 196.42 212.82 196.42 C 208.85 196.42 205.63 195.73 205.63 194.87 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 205.63 188.65 C 205.63 187.79 208.85 187.1 212.82 187.1 C 216.78 187.1 220 187.79 220 188.65 L 220 191.29 C 220 192.14 216.78 192.84 212.82 192.84 C 208.85 192.84 205.63 192.14 205.63 191.29 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 205.63 195.62 C 205.63 196.48 208.85 197.17 212.82 197.17 C 216.78 197.17 220 196.48 220 195.62 M 205.63 192.04 C 205.63 192.9 208.85 193.59 212.82 193.59 C 216.78 193.59 220 192.9 220 192.04 M 205.63 188.65 C 205.63 189.51 208.85 190.2 212.82 190.2 C 216.78 190.2 220 189.51 220 188.65" fill="none" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 200px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Phoenix</div></div></div></foreignObject><text x="200" y="219" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">Phoenix</text></switch></g><rect x="26.67" y="110" width="66.67" height="17.24" rx="3.45" ry="3.45" fill="#cccccc" stroke="#6881b3" stroke-width="1.33" pointer-events="all"/><rect x="33.34" y="127.24" width="53.34" height="2.76" fill="#cccccc" stroke="#6881b3" stroke-width="1.33" pointer-events="all"/><path d="M 28.67 114.83 L 32.67 114.83 L 32.67 116.9 L 31.34 116.9 L 31.34 117.59 L 30 117.59 L 30 116.9 L 28.67 116.9 Z M 34.34 114.83 L 38.34 114.83 L 38.34 116.9 L 37 116.9 L 37 117.59 L 35.67 117.59 L 35.67 116.9 L 34.34 116.9 Z M 40 114.83 L 44 114.83 L 44 116.9 L 42.67 116.9 L 42.67 117.59 L 41.34 117.59 L 41.34 116.9 L 40 116.9 Z M 45.67 114.83 L 49.67 114.83 L 49.67 116.9 L 48.34 116.9 L 48.34 117.59 L 47 117.59 L 47 116.9 L 45.67 116.9 Z M 51.34 114.83 L 55.34 114.83 L 55.34 116.9 L 54 116.9 L 54 117.59 L 52.67 117.59 L 52.67 116.9 L 51.34 116.9 Z M 57 114.83 L 61.01 114.83 L 61.01 116.9 L 59.67 116.9 L 59.67 117.59 L 58.34 117.59 L 58.34 116.9 L 57 116.9 Z M 62.67 114.83 L 66.67 114.83 L 66.67 116.9 L 65.34 116.9 L 65.34 117.59 L 64.01 117.59 L 64.01 116.9 L 62.67 116.9 Z M 68.34 114.83 L 72.34 114.83 L 72.34 116.9 L 71.01 116.9 L 71.01 117.59 L 69.67 117.59 L 69.67 116.9 L 68.34 116.9 Z" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="85.34" cy="118.62" rx="5.333600000000001" ry="5.517241379310345" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="76.67" cy="113.45" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="76.67" cy="123.79" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="76.67" cy="118.62" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="70.34" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="64.67" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="59" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="53.34" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="47.67" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="42" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="36.34" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="30.67" cy="121.72" rx="1.3334000000000001" ry="1.3793103448275863" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 85.34 114.83 L 85.34 122.41 M 81.01 118.62 L 83.67 118.62 M 87.01 118.62 L 89.67 118.62 M 84.01 116.21 L 85.34 114.83 L 86.67 116.21 M 84.01 121.03 L 85.34 122.41 L 86.67 121.03 M 82.34 117.24 L 83.67 118.62 L 82.34 120 M 88.34 117.24 L 87.01 118.62 L 88.34 120" fill="none" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 137px; margin-left: 60px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">FAI's router</div></div></div></foreignObject><text x="60" y="149" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">FAI's router</text></switch></g><path d="M 250 80 L 250 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 87px; margin-left: 252px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">.6</div></div></div></foreignObject><text x="252" y="98" fill="#839496" font-family="Helvetica" font-size="11px">.6</text></switch></g><rect x="93.34" y="120" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 137px; margin-left: 95px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">.1</div></div></div></foreignObject><text x="95" y="137" fill="#839496" font-family="Helvetica" font-size="12px">.1</text></switch></g><path d="M 200 80 L 200 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 87px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">.5</div></div></div></foreignObject><text x="202" y="98" fill="#839496" font-family="Helvetica" font-size="11px">.5</text></switch></g><rect x="230" y="46.45" width="47.06" height="11.68" rx="2.34" ry="2.34" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><rect x="234.71" y="58.13" width="37.65" height="1.87" fill="#cccccc" stroke="#6881b3" pointer-events="all"/><path d="M 261.53 46.45 L 261.77 25.42 C 261.9 25.22 262.12 25.11 262.35 25.11 C 262.59 25.11 262.81 25.22 262.94 25.42 L 263.18 46.45 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="271.41" cy="52.29" rx="3.7647999999999997" ry="3.738317757009346" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="265.3" cy="48.79" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="265.3" cy="55.79" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="265.3" cy="52.29" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="260.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="256.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="252.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="248.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="244.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="240.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="236.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><ellipse cx="232.82" cy="54.39" rx="0.9411999999999999" ry="0.9345794392523366" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 231.41 49.72 L 234.24 49.72 L 234.24 51.12 L 233.29 51.12 L 233.29 51.59 L 232.35 51.59 L 232.35 51.12 L 231.41 51.12 Z M 235.41 49.72 L 238.24 49.72 L 238.24 51.12 L 237.29 51.12 L 237.29 51.59 L 236.35 51.59 L 236.35 51.12 L 235.41 51.12 Z M 239.41 49.72 L 242.24 49.72 L 242.24 51.12 L 241.29 51.12 L 241.29 51.59 L 240.35 51.59 L 240.35 51.12 L 239.41 51.12 Z M 243.41 49.72 L 246.24 49.72 L 246.24 51.12 L 245.29 51.12 L 245.29 51.59 L 244.35 51.59 L 244.35 51.12 L 243.41 51.12 Z M 247.41 49.72 L 250.24 49.72 L 250.24 51.12 L 249.29 51.12 L 249.29 51.59 L 248.35 51.59 L 248.35 51.12 L 247.41 51.12 Z M 251.41 49.72 L 254.24 49.72 L 254.24 51.12 L 253.29 51.12 L 253.29 51.59 L 252.35 51.59 L 252.35 51.12 L 251.41 51.12 Z M 255.41 49.72 L 258.24 49.72 L 258.24 51.12 L 257.29 51.12 L 257.29 51.59 L 256.35 51.59 L 256.35 51.12 L 255.41 51.12 Z M 259.41 49.72 L 262.24 49.72 L 262.24 51.12 L 261.29 51.12 L 261.29 51.59 L 260.35 51.59 L 260.35 51.12 L 259.41 51.12 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="230" y="20" width="0" height="0" fill="none" stroke="#6881b3" pointer-events="all"/><path d="M 272.35 51.36 L 273.3 52.29 L 272.35 53.22 M 269.06 52.29 L 273.3 52.29" fill="none" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><path d="M 264.73 22.76 C 265.76 24.32 265.76 26.34 264.73 27.9 L 264.02 27.43 C 264.81 26.2 264.81 24.64 264.02 23.41 Z M 266.61 21.36 C 268.49 23.73 268.49 27.07 266.61 29.44 L 265.91 28.88 C 267.51 26.85 267.51 23.99 265.91 21.96 Z M 268.5 20 C 271.34 23.05 271.34 27.75 268.5 30.79 L 267.79 30.23 C 270.39 27.53 270.39 23.27 267.79 20.56 Z M 260.02 22.76 C 258.99 24.32 258.99 26.34 260.02 27.9 L 260.73 27.43 C 259.94 26.2 259.94 24.64 260.73 23.41 Z M 258.14 21.36 C 256.24 23.74 256.24 27.1 258.14 29.49 L 258.85 28.83 C 257.29 26.82 257.29 24.02 258.85 22.01 Z M 256.26 20.05 C 253.45 23.09 253.45 27.76 256.26 30.79 L 256.97 30.23 C 254.4 27.53 254.4 23.31 256.97 20.61 Z" fill="#cccccc" stroke="#6881b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 254px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #839496; line-height: 1.2; pointer-events: all; white-space: nowrap; ">wifi2</div></div></div></foreignObject><text x="254" y="79" fill="#839496" font-family="Helvetica" font-size="12px" text-anchor="middle">wifi2</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> \ No newline at end of file