From: Richard W.M. Jones <rjones@redhat.com> Date: Tue, 11 Jun 2019 16:59:04 +0000 (+0100) Subject: Add tech introductions. X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=789100b7cac6bdc6a5147031415b229edec2b905;p=libguestfs-talks.git Add tech introductions. --- diff --git a/2019-tech-introductions/.gitignore b/2019-tech-introductions/.gitignore new file mode 100644 index 0000000..ceb0adb --- /dev/null +++ b/2019-tech-introductions/.gitignore @@ -0,0 +1,2 @@ +bindings +history diff --git a/2019-tech-introductions/1000-introduction.html b/2019-tech-introductions/1000-introduction.html new file mode 100644 index 0000000..692a6e5 --- /dev/null +++ b/2019-tech-introductions/1000-introduction.html @@ -0,0 +1,19 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<div id="titlepage"> + <p class="title"> + Introduction to nbdkit, libnbd, IMS, KVM to KVM migrations + </p> + + <p class="author"> + Richard W.M. Jones <br> + rjones @ redhat.com + </p> + + <p class="abstract"> + + </p> +</div> + diff --git a/2019-tech-introductions/2000-nbdkit-universal-connector.html b/2019-tech-introductions/2000-nbdkit-universal-connector.html new file mode 100644 index 0000000..fee7f77 --- /dev/null +++ b/2019-tech-introductions/2000-nbdkit-universal-connector.html @@ -0,0 +1,8 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>The âuniversal connectorâ</h1> + +<img src="universal-connector-1.svg" + width="80%"> diff --git a/2019-tech-introductions/2100-nbdkit-universal-connector-2.html b/2019-tech-introductions/2100-nbdkit-universal-connector-2.html new file mode 100644 index 0000000..b5b1955 --- /dev/null +++ b/2019-tech-introductions/2100-nbdkit-universal-connector-2.html @@ -0,0 +1,8 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>The âuniversal connectorâ</h1> + +<img src="universal-connector-2.svg" + width="80%"> diff --git a/2019-tech-introductions/2200-nbdkit-connect-directly.html b/2019-tech-introductions/2200-nbdkit-connect-directly.html new file mode 100644 index 0000000..122369d --- /dev/null +++ b/2019-tech-introductions/2200-nbdkit-connect-directly.html @@ -0,0 +1,8 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>Why not connect directly?</h1> + +<img src="universal-connector-3.svg" + width="80%"> diff --git a/2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term b/2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term new file mode 100755 index 0000000..361110c --- /dev/null +++ b/2019-tech-introductions/2300-custom-plugins-are-easy-to-write.term @@ -0,0 +1,14 @@ +#!/bin/bash + +source functions + +# Title. +export title="Custom plugins are easy to write" + +# History. +remember 'cat custom.sh' +remember 'nbdkit sh custom.sh' +remember "qemu-io -r -f raw nbd://localhost -c 'r -v 0 512'" + +./restore +terminal diff --git a/2019-tech-introductions/2400-nbdkit-layers.html b/2019-tech-introductions/2400-nbdkit-layers.html new file mode 100644 index 0000000..ad8c1ae --- /dev/null +++ b/2019-tech-introductions/2400-nbdkit-layers.html @@ -0,0 +1,15 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>Filters</h1> + +<script> +filters("1") + +document.getElementById("filter1-rate").classList.add("highlighted") + +plugins() + +document.getElementById("plugin-ssh").classList.add("highlighted") +</script> diff --git a/2019-tech-introductions/4000-libnbd-why.html b/2019-tech-introductions/4000-libnbd-why.html new file mode 100644 index 0000000..2ade029 --- /dev/null +++ b/2019-tech-introductions/4000-libnbd-why.html @@ -0,0 +1,13 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>libnbd — Something was missing</h1> + +<ul> +<li> +NBD servers, but no client library. +<li> +qemu (<code>qemu-img</code>, <code>qemu-io</code>) was +the only client +</ul> diff --git a/2019-tech-introductions/4010-libnbd-why-2.html b/2019-tech-introductions/4010-libnbd-why-2.html new file mode 100644 index 0000000..a517e2b --- /dev/null +++ b/2019-tech-introductions/4010-libnbd-why-2.html @@ -0,0 +1,16 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>libnbd — We need a client library</h1> + +<ul> +<li> <b>fio</b> +— Filesystem I/O tester +<li> <b>curl</b> +— Popular download library +<li> <b>nbdkit-nbd-plugin</b> +— nbdkitâs server to client bridge +<li> <b>qemu</b>(!) +<li> <b>virt-v2v warm migration</b> +</ul> diff --git a/2019-tech-introductions/4100-nbd-not-easy-or-efficient.html b/2019-tech-introductions/4100-nbd-not-easy-or-efficient.html new file mode 100644 index 0000000..6281855 --- /dev/null +++ b/2019-tech-introductions/4100-nbd-not-easy-or-efficient.html @@ -0,0 +1,9 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>NBD is easy to implement</h1> + +<p> +... but it's <b>hard to get good performance</b> +</p> diff --git a/2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html b/2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html new file mode 100644 index 0000000..73a96e8 --- /dev/null +++ b/2019-tech-introductions/4110-nbd-not-easy-or-efficient-2.html @@ -0,0 +1,23 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>NBD is easy to implement</h1> + +<pre> +$ time nbdkit memory 100M \ + --run 'examples/threaded-reads-and-writes localhost 10809' +</pre> + +<p> +In <b>three weeks</b>: +</p> + +<ol> +<li> +50% faster? +<li> +twice as fast? +<li> +15 times faster? +</ol> diff --git a/2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html b/2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html new file mode 100644 index 0000000..79c88bd --- /dev/null +++ b/2019-tech-introductions/4120-nbd-not-easy-or-efficient-3.html @@ -0,0 +1,35 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>NBD is easy to implement</h1> + +<p> +It's <b>hard to get good performance</b> +</p> + +<pre> +$ time nbdkit memory 100M \ + --run 'examples/threaded-reads-and-writes localhost 10809' +</pre> + +<table width="80%"> +<tr> +<td> +May 21st 2019 +</td> +<td> <b>587</b> seconds </td> +</tr> + +<tr> +<td> +Jun 11th 2019 +</td> +<td> <b>38</b> seconds </td> +</tr> + +<tr> +<td> Ratio </td> +<td> <b>15</b> times faster </td> +</tr> +</table> diff --git a/2019-tech-introductions/4200-libnbd.html b/2019-tech-introductions/4200-libnbd.html new file mode 100644 index 0000000..a2c2a41 --- /dev/null +++ b/2019-tech-introductions/4200-libnbd.html @@ -0,0 +1,14 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>libnbd is ...</h1> + +<ul> +<li> +C library +<li> +bindings in several languages +<li> +Python shell (<code>nbdsh</code>) +</ul> diff --git a/2019-tech-introductions/4300-libnbd-example.html b/2019-tech-introductions/4300-libnbd-example.html new file mode 100644 index 0000000..d3d8db0 --- /dev/null +++ b/2019-tech-introductions/4300-libnbd-example.html @@ -0,0 +1,23 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>libnbd is easy to use</h1> + +<pre> +struct nbd_handle *nbd; + +nbd = <b>nbd_create</b> (); + +<b>nbd_connect_unix</b> (nbd, "/tmp/socket"); + +<b>nbd_pread</b> (nbd, buf, sizeof buf, 0, 0); + +<b>nbd_close</b> (nbd); +</pre> + +<p> +... also a low level, +high performance, +asynchronous (AIO) API +</p> diff --git a/2019-tech-introductions/4400-nbdsh-example.term b/2019-tech-introductions/4400-nbdsh-example.term new file mode 100755 index 0000000..8be607b --- /dev/null +++ b/2019-tech-introductions/4400-nbdsh-example.term @@ -0,0 +1,13 @@ +#!/bin/bash + +source functions + +# Title. +export title="nbdsh example" + +# History. +remember 'nbdkit memory 1M' +remember "nbdsh --connect nbd://localhost -c 'print(h.get_size())'" + +./restore +terminal diff --git a/2019-tech-introductions/6000-v2v-warm-migrations.html b/2019-tech-introductions/6000-v2v-warm-migrations.html new file mode 100644 index 0000000..006bf03 --- /dev/null +++ b/2019-tech-introductions/6000-v2v-warm-migrations.html @@ -0,0 +1,6 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>virt-v2v warm migrations</h1> + diff --git a/2019-tech-introductions/6100-snapshots.html b/2019-tech-introductions/6100-snapshots.html new file mode 100644 index 0000000..e6e6146 --- /dev/null +++ b/2019-tech-introductions/6100-snapshots.html @@ -0,0 +1,7 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>virt-v2v warm migrations</h1> + +<img src="warm-migrations.svg" width="80%"> diff --git a/2019-tech-introductions/6200-changed-blocks.html b/2019-tech-introductions/6200-changed-blocks.html new file mode 100644 index 0000000..2ccc452 --- /dev/null +++ b/2019-tech-introductions/6200-changed-blocks.html @@ -0,0 +1,7 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>virt-v2v warm migrations</h1> + +<img src="warm-migrations-2.svg" width="80%"> diff --git a/2019-tech-introductions/6300-todo.html b/2019-tech-introductions/6300-todo.html new file mode 100644 index 0000000..a7b8325 --- /dev/null +++ b/2019-tech-introductions/6300-todo.html @@ -0,0 +1,45 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>virt-v2v warm migrations — to do</h1> + +<table width="90%"> +<tr> +<th width="20%" align="left">nbdkit</th> +<td> +VDDK <b>extents</b>, <b>CBT</b>, +and some other minor features +</td> +</tr> + +<tr> +<th width="20%" align="left">libnbd</th> +<td> +<b>lots of work</b> +</td> +</tr> + +<tr> +<th width="20%" align="left">libguestfs</th> +<td> +<b>extra tool</b> to handle snapshotting and +copying +</td> +</tr> + +<tr> +<th width="20%" align="left">virt-v2v</th> +<td> +unmodified! +</td> +</tr> + +<tr> +<th width="20%" align="left">user interface</th> +<td> +lots of work +</td> +</tr> + +</table> diff --git a/2019-tech-introductions/8000-kvm-to-kvm-introduction.html b/2019-tech-introductions/8000-kvm-to-kvm-introduction.html new file mode 100644 index 0000000..2f03c0a --- /dev/null +++ b/2019-tech-introductions/8000-kvm-to-kvm-introduction.html @@ -0,0 +1,11 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>KVM to KVM migrations</h1> + +<table width="50%"> +<tr> <td> OSP 10 </td> <td> → </td> <td> OSP 16 </td> </tr> +<tr> <td> RHV </td> <td> → </td> <td> CNV (KubeVirt) </td> </tr> +<tr> <td> OSP </td> <td> → </td> <td> CNV </td> </tr> +</table> diff --git a/2019-tech-introductions/8100-reuse-the-tools.html b/2019-tech-introductions/8100-reuse-the-tools.html new file mode 100644 index 0000000..2da3cbe --- /dev/null +++ b/2019-tech-introductions/8100-reuse-the-tools.html @@ -0,0 +1,12 @@ +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> +<link rel="stylesheet" href="style.css" type="text/css"/> +<script src="code.js" type="text/javascript"></script> + +<h1>Not virt-v2v, but reuse the tools</h1> + +<ul> +<li> <b>nbdkit</b> +<li> <b>qemu-img convert</b> +<li> virt-v2v <b>metadata model</b> +<li> libnbd, bindings or nbdsh, maybe +</ul> diff --git a/2019-tech-introductions/bashrc b/2019-tech-introductions/bashrc new file mode 100644 index 0000000..f526961 --- /dev/null +++ b/2019-tech-introductions/bashrc @@ -0,0 +1,19 @@ +# -*- shell-script -*- + +# Colour ls. +if [ -f /etc/profile.d/colorls.sh ]; then . /etc/profile.d/colorls.sh; fi + +# Fancy prompt colours (see +# https://wiki.archlinux.org/index.php/Color_Bash_Prompt) +promptcol='\e[0;32m' ;# colour for the prompt +commandcol='\e[1;31m' ;# colour for the typed command +outputcol='\e[0m' ;# colour for command output + +export PS1="\n\[$promptcol\]\$ \[$commandcol\]" + +trap 'echo -ne "$outputcol"' DEBUG + +# Load key bindings (if any). +bind -f $talkdir/bindings + +echo $title diff --git a/2019-tech-introductions/code.js b/2019-tech-introductions/code.js new file mode 100644 index 0000000..d167d3a --- /dev/null +++ b/2019-tech-introductions/code.js @@ -0,0 +1,67 @@ +function plugins () +{ + document.write ("\ +<div class=\"plugins\"> \ +<p id=\"caption\">plugins available in nbdkit 1.12</p> \ +<ul> \ +<li id=\"plugin-curl\"> curl \ +<li id=\"plugin-data\"> data \ +<li id=\"plugin-ext2\"> ext2 \ +<li id=\"plugin-file\"> file \ +<li id=\"plugin-floppy\"> floppy \ +<li id=\"plugin-full\"> full \ +<li id=\"plugin-guestfs\"> guestfs \ +<li id=\"plugin-gzip\"> gzip \ +<li id=\"plugin-iso\"> iso \ +<li id=\"plugin-libvirt\"> libvirt \ +<li id=\"plugin-linuxdisk\"> linuxdisk \ +<li id=\"plugin-lua\"> lua \ +<li id=\"plugin-memory\"> memory \ +<li id=\"plugin-nbd\"> nbd \ +<li id=\"plugin-null\"> null \ +<li id=\"plugin-ocaml\"> ocaml \ +<li id=\"plugin-partitioning\"> partitioning \ +<li id=\"plugin-pattern\"> pattern \ +<li id=\"plugin-perl\"> perl \ +<li id=\"plugin-python\"> python \ +<li id=\"plugin-random\"> random \ +<li id=\"plugin-ruby\"> ruby \ +<li id=\"plugin-rust\"> rust \ +<li id=\"plugin-sh\"> sh \ +<li id=\"plugin-split\"> split \ +<li id=\"plugin-ssh\"> ssh \ +<li id=\"plugin-streaming\"> streaming \ +<li id=\"plugin-tar\"> tar \ +<li id=\"plugin-tcl\"> tcl \ +<li id=\"plugin-vddk\"> vddk \ +<li id=\"plugin-zero\"> zero \ +</ul> \ +</div> \ +"); +} + +function filters (layer) +{ + document.write ("\ +<div class=\"filters\"> \ +<p class=\"filtercaption\">filters available in nbdkit 1.12</p> \ +<ul> \ +<li id=\"filter" + layer + "-blocksize\"> blocksize \ +<li id=\"filter" + layer + "-cache\"> cache \ +<li id=\"filter" + layer + "-cow\"> cow \ +<li id=\"filter" + layer + "-delay\"> delay \ +<li id=\"filter" + layer + "-error\"> error \ +<li id=\"filter" + layer + "-fua\"> fua \ +<li id=\"filter" + layer + "-log\"> log \ +<li id=\"filter" + layer + "-noextents\"> noextents \ +<li id=\"filter" + layer + "-nozero\"> nozero \ +<li id=\"filter" + layer + "-offset\"> offset \ +<li id=\"filter" + layer + "-partition\"> partition \ +<li id=\"filter" + layer + "-rate\"> rate \ +<li id=\"filter" + layer + "-readahead\"> readahead \ +<li id=\"filter" + layer + "-truncate\"> truncate \ +<li id=\"filter" + layer + "-xz\"> xz \ +</ul> \ +</div> \ +"); +} diff --git a/2019-tech-introductions/custom.sh b/2019-tech-introductions/custom.sh new file mode 100755 index 0000000..48bdcb4 --- /dev/null +++ b/2019-tech-introductions/custom.sh @@ -0,0 +1,13 @@ +#!/bin/bash - + +case "$1" in + get_size) + echo 1M ;; + pread) + for i in `seq 1 $(( $3/16 ))`; do + echo -ne 'HELLO BEIJING __' + done + ;; + *) + exit 2;; +esac diff --git a/2019-tech-introductions/functions b/2019-tech-introductions/functions new file mode 100644 index 0000000..d5347e7 --- /dev/null +++ b/2019-tech-introductions/functions @@ -0,0 +1,43 @@ +# -*- shell-script -*- +# This creates some standard functions. See also $talkdir/bashrc +# which runs in the same bash context as the terminal. + +# Place any local environment variables and settings in "local". +if [ -f local ]; then source local; fi + +# Environment variables. +export HISTFILE=$talkdir/history +export PATH=$talkdir:$PATH +export EDITOR="emacs -nw" + +# Ditch libvirt for stability :-( +export LIBGUESTFS_BACKEND=direct + +# remember <command> <args ...> +# +# This function does two things: (1) It adds the command and arguments +# to the shell history, so that commands can be recalled using up +# arrow or reverse search. (2) It makes a function key recall the +# command. The first command is assigned to F2, the second to F3 and +# so forth. + +rm -f $HISTFILE +touch $HISTFILE +rm -f $talkdir/bindings +touch bindings + +fnum=2 +keys=(- OP OQ OR OS '[15~' '[17~' '[18~' '[19~' '[20~' '[21~') + +remember () +{ + echo "$@" >> $HISTFILE + echo \"\\e${keys[$fnum]}\":\"\\C-k \\C-u"$@"\" >> $talkdir/bindings + ((fnum++)) +} + +terminal () +{ + chmod -w $HISTFILE + /bin/bash --rcfile $talkdir/bashrc "$@" +} diff --git a/2019-tech-introductions/restore b/2019-tech-introductions/restore new file mode 100755 index 0000000..3976ea5 --- /dev/null +++ b/2019-tech-introductions/restore @@ -0,0 +1,5 @@ +#!/bin/bash - + +killall nbdkit >&/dev/null + +exit 0 diff --git a/2019-tech-introductions/run b/2019-tech-introductions/run new file mode 100755 index 0000000..39d43f6 --- /dev/null +++ b/2019-tech-introductions/run @@ -0,0 +1,22 @@ +#!/bin/bash - +# Run the talk. + +set -e + +# Avoid GNOME keyring stupidity +export GNOME_KEYRING_CONTROL= +export GNOME_KEYRING_PID= + +# No proxy. +unset http_proxy +unset https_proxy +unset ftp_proxy + +# Remove any old nbdkit processes etc. +./restore + +# Run techtalk. +techtalk-pse +#~/d/techtalk-pse/techtalk-pse + +./restore diff --git a/2019-tech-introductions/style.css b/2019-tech-introductions/style.css new file mode 100644 index 0000000..35588a8 --- /dev/null +++ b/2019-tech-introductions/style.css @@ -0,0 +1,243 @@ +/* Red Hat red is rgb(204,0,0). */ + +body { + background: url(redhat.png) no-repeat; + background-position: 98% 0; + /* font-size: 28pt; */ /* For max */ + font-size: 20pt; /* For 1024x768 */ + /* font-family: liberation, helvetica; */ + font-family: helvetica; + + /* Can be used to scale the whole document. */ + /*transform: translate(-10%,-10%) scale(0.75,0.75);*/ +} + +body td, body th { /* why?? */ + font-size: 24pt; + padding-bottom: 8px; +} + +h1 { + color: rgb(204,0,0); + /*font-size: 48px;*/ + font-size: 40px; + top: 8; + left: 0; + border-bottom: 2px solid rgb(204,0,0); +} + +h2 { + color: rgb(204,0,0); + font-size: 32px; + font-style: italic; + border-bottom: 2px solid rgb(204,0,0); +} + +b { + color: rgb(204,0,0); +} + +/* Title page. */ +div#titlepage { + margin-top: 100px; + width: 80%; + margin-left: 10%; +} + +div#titlepage p.title { + color: rgb(204,0,0); + font-weight: bold; + font-size: 48px; + text-align: left; +} + +div#titlepage p.author { + font-size: 36px; + text-align: left; +} + +div#titlepage p.abstract { + font-size: 28px; + text-align: left; +} + +/* Code */ +pre.code { + margin-left: 1em; + background: #eee; +} + +code { + color: rgb(204,0,0); +} + +/* Bullet points */ +li { + padding-bottom: 16px; +} + +/* Plugins box. */ +div.plugins { + background: #f8f8ff; + border: 1px solid rgb(204,0,0); + border-radius: 15px; + margin-left: auto; + margin-right: auto; + width: 800px; + height: 400px; + /* Position relative is needed so that items may be + positioned inside. */ + position: relative; +} + +div.plugins p#caption { + position: absolute; + bottom: -5px; right: 5px; + color: rgb(204,0,0); + text-align: right; + font-size: 16px; + font-weight: bold; +} + +div.plugins ul { + position: absolute; + top: 10%; + width: 700px; + height: 380px; + column-count: 4; + list-style-type: none; + margin: 0; +} + +div.plugins ul li { + padding: 0px; + margin: 5px; +} + +div.plugins ul li.highlighted { + border: 1px solid rgb(204,0,0); + background: #fff; + padding-left: 10px; + color: rgb(204,0,0); + border-radius: 20px; + font-weight: bold; +} + +/* Filters box. */ +div.filters { + background: #f8fff8; + border: 1px solid rgb(204,0,0); + border-radius: 15px; + margin-left: auto; + margin-right: auto; + width: 800px; + height: 200px; + /* Position relative is needed so that items may be + positioned inside. */ + position: relative; +} + +div.filters p.filtercaption { + position: absolute; + bottom: -5px; right: 5px; + color: rgb(204,0,0); + text-align: right; + font-size: 16px; + font-weight: bold; +} + +div.filters ul { + position: absolute; + top: 10%; + width: 700px; + height: 180px; + column-count: 4; + list-style-type: none; + margin: 0; +} + +div.filters ul li { + padding: 0px; + margin: 5px; +} + +div.filters ul li.highlighted { + border: 1px solid rgb(204,0,0); + background: #fff; + padding-left: 10px; + color: rgb(204,0,0); + border-radius: 20px; + font-weight: bold; +} + +/* For images which must be centered on the page. */ +div.allcenter { + display: flex; + justify-content: center; + align-items: center; + height: 50vw; +} + +div.all-center img { +} + +/* Outlined text. */ +.outline { + text-shadow: 2px 2px 0 rgb(204,0,0), + -2px 2px 0 rgb(204,0,0), + 2px -2px 0 rgb(204,0,0), + -2px -2px 0 rgb(204,0,0), + 0px 2px 0 rgb(204,0,0), + 0px -2px 0 rgb(204,0,0), + -2px 0px 0 rgb(204,0,0), + 2px 0px 0 rgb(204,0,0), + 4px 4px 0 rgb(204,0,0), + -4px 4px 0 rgb(204,0,0), + 4px -4px 0 rgb(204,0,0), + -4px -4px 0 rgb(204,0,0), + + 0px 4px 0 rgb(204,0,0), + 0px -4px 0 rgb(204,0,0), + -4px 0px 0 rgb(204,0,0), + 4px 0px 0 rgb(204,0,0), + 2px 4px 0 rgb(204,0,0), + -2px 4px 0 rgb(204,0,0), + 2px -4px 0 rgb(204,0,0), + -2px -4px 0 rgb(204,0,0), + 4px 2px 0 rgb(204,0,0), + -4px 2px 0 rgb(204,0,0), + 4px -2px 0 rgb(204,0,0), + -4px -2px 0 rgb(204,0,0), + + 4px 4px 0 rgb(255,128,128), + -4px 4px 0 rgb(255,128,128), + 4px -4px 0 rgb(255,128,128), + -4px -4px 0 rgb(255,128,128), + 0px 4px 0 rgb(255,128,128), + 0px -4px 0 rgb(255,128,128), + -4px 0px 0 rgb(255,128,128), + 4px 0px 0 rgb(255,128,128), + 8px 8px 0 rgb(255,128,128), + -8px 8px 0 rgb(255,128,128), + 8px -8px 0 rgb(255,128,128), + -8px -8px 0 rgb(255,128,128), + + 0px 8px 0 rgb(255,128,128), + 0px -8px 0 rgb(255,128,128), + -8px 0px 0 rgb(255,128,128), + 8px 0px 0 rgb(255,128,128), + 4px 8px 0 rgb(255,128,128), + -4px 8px 0 rgb(255,128,128), + 4px -8px 0 rgb(255,128,128), + -4px -8px 0 rgb(255,128,128), + 8px 4px 0 rgb(255,128,128), + -8px 4px 0 rgb(255,128,128), + 8px -4px 0 rgb(255,128,128), + -8px -4px 0 rgb(255,128,128); +} + +/* Warning symbol. */ +span.warning { + background-color: yellow; + font-weight: bold; +} diff --git a/2019-tech-introductions/universal-connector-1.svg b/2019-tech-introductions/universal-connector-1.svg new file mode 100644 index 0000000..fac6a67 --- /dev/null +++ b/2019-tech-introductions/universal-connector-1.svg @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="130.70972mm" + height="50.31411mm" + viewBox="0 0 130.70972 50.31411" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="universal-connector-1.svg"> + <defs + id="defs2"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1139" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1137" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect1135" + effect="bspline" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path854" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect849" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="253.0562" + inkscape:cy="67.767775" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-width="1920" + inkscape:window-height="1018" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-7.2544057,2.1708934)"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect815" + width="23.434523" + height="15.497025" + x="17.386906" + y="14.840774" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="21.355656" + y="22.589285" + id="text819"><tspan + sodipodi:role="line" + id="tspan817" + x="21.355656" + y="22.589285" + style="stroke-width:0.26458332">qemu</tspan></text> + <rect + y="14.840774" + x="60.249447" + height="15.497025" + width="23.434523" + id="rect821" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text825" + y="22.589285" + x="64.218193" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="64.218193" + id="tspan823" + sodipodi:role="line">?</tspan></text> + <g + id="g845" + transform="translate(-0.52916667,-6.879167)"> + <rect + y="14.840774" + x="104.17031" + height="30.04911" + width="24.190483" + id="rect827" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text831" + y="22.589285" + x="108.13906" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="108.13906" + id="tspan829" + sodipodi:role="line">http</tspan><tspan + id="tspan833" + style="stroke-width:0.26458332" + y="27.880951" + x="108.13906" + sodipodi:role="line">imageio</tspan><tspan + id="tspan835" + style="stroke-width:0.26458332" + y="33.172619" + x="108.13906" + sodipodi:role="line">ssh</tspan><tspan + id="tspan837" + style="stroke-width:0.26458332" + y="38.464283" + x="108.13906" + sodipodi:role="line">vddk</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + id="path847" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect849" + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" /> + <path + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" + inkscape:path-effect="#path-effect1135" + inkscape:connector-curvature="0" + id="path1133" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)" + transform="translate(42.862521)" /> + </g> +</svg> diff --git a/2019-tech-introductions/universal-connector-2.svg b/2019-tech-introductions/universal-connector-2.svg new file mode 100644 index 0000000..27b2c35 --- /dev/null +++ b/2019-tech-introductions/universal-connector-2.svg @@ -0,0 +1,417 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="130.70972mm" + height="77.417534mm" + viewBox="0 0 130.70972 77.417534" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="universal-connector-2.svg"> + <defs + id="defs2"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1139" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1137" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect1135" + effect="bspline" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path854" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect849" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="253.0562" + inkscape:cy="170.20591" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-width="1920" + inkscape:window-height="1018" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-7.2544057,2.1708934)"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect815" + width="23.434523" + height="15.497025" + x="17.386906" + y="14.840774" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="21.355656" + y="22.589285" + id="text819"><tspan + sodipodi:role="line" + id="tspan817" + x="21.355656" + y="22.589285" + style="stroke-width:0.26458332">qemu</tspan></text> + <rect + y="14.840774" + x="60.249447" + height="15.497025" + width="23.434523" + id="rect821" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text825" + y="22.589285" + x="64.218193" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="64.218193" + id="tspan823" + sodipodi:role="line">nbdkit</tspan></text> + <g + id="g845" + transform="translate(-0.52916667,-6.879167)"> + <rect + y="14.840774" + x="104.17031" + height="30.04911" + width="24.190483" + id="rect827" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text831" + y="22.589285" + x="108.13906" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="108.13906" + id="tspan829" + sodipodi:role="line">http</tspan><tspan + id="tspan833" + style="stroke-width:0.26458332" + y="27.880951" + x="108.13906" + sodipodi:role="line">imageio</tspan><tspan + id="tspan835" + style="stroke-width:0.26458332" + y="33.172619" + x="108.13906" + sodipodi:role="line">ssh</tspan><tspan + id="tspan837" + style="stroke-width:0.26458332" + y="38.464283" + x="108.13906" + sodipodi:role="line">vddk</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + id="path847" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect849" + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" /> + <path + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" + inkscape:path-effect="#path-effect1135" + inkscape:connector-curvature="0" + id="path1133" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)" + transform="translate(42.862521)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="29.139225" + y="28.450657" + id="text1672"><tspan + sodipodi:role="line" + id="tspan1670" + x="29.139225" + y="28.450657" + style="font-size:2.11666656px;stroke-width:0.26458332">nbd client</tspan></text> + <image + y="31.795746" + x="55.446369" + id="image1752" + xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf +IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 +Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEsASwDASIA +AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA +AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 +ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm +p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx +BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 +uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii +gAooooAKKKr3d0LWMEIZJHOEQdz/AEFAFiis4DV5Pm8yCLP8Hllsfjmjy9X/AOfm3/78n/4qgDRo +rO8vV/8An5t/+/J/+KoKauoyJ7dsfw+URn8c0AaNFVLO9a4Z4povJnj+8mcgj1B9KtUALRVW7vPs ++1I4zLM/3UBx+JPYVAH1dudlsue3PFAGjRWdnV/7tt+tGdX/ALtt+tAGjRWa0urx/MYbeQD+FSQT ++NWrS7S7iLqpRlOHRuqmgCxRSU2SRYY2kc4VRkmgB9FZwudRuPngt44o+3mklj+A6UZ1f0tvyNAG +jRWdu1f0tvyNGdX9Lb8jQBo0VQgvplnW3vYRE7/cdTlW9vY1foAKKa7rGhdyFVRkk9qoC7v7n5rW +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 +" + preserveAspectRatio="none" + height="33.450893" + width="33.450893" /> + </g> +</svg> diff --git a/2019-tech-introductions/universal-connector-3.svg b/2019-tech-introductions/universal-connector-3.svg new file mode 100644 index 0000000..8151f45 --- /dev/null +++ b/2019-tech-introductions/universal-connector-3.svg @@ -0,0 +1,561 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="130.70972mm" + height="77.417534mm" + viewBox="0 0 130.70972 77.417534" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="universal-connector-3.svg"> + <defs + id="defs2"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker1939" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1937" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect1929" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1139" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:collect="always"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1137" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect1135" + effect="bspline" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path854" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect849" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="300.42213" + inkscape:cy="170.20591" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-width="1920" + inkscape:window-height="1018" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-7.2544057,2.1708934)"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect815" + width="23.434523" + height="15.497025" + x="17.386906" + y="14.840774" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="21.355656" + y="22.589285" + id="text819"><tspan + sodipodi:role="line" + id="tspan817" + x="21.355656" + y="22.589285" + style="stroke-width:0.26458332">qemu</tspan></text> + <rect + y="14.840774" + x="60.249447" + height="15.497025" + width="23.434523" + id="rect821" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text825" + y="22.589285" + x="64.218193" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="64.218193" + id="tspan823" + sodipodi:role="line">nbdkit</tspan></text> + <g + id="g845" + transform="translate(-0.52916667,-6.879167)"> + <rect + y="14.840774" + x="104.17031" + height="30.04911" + width="24.190483" + id="rect827" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text831" + y="22.589285" + x="108.13906" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="22.589285" + x="108.13906" + id="tspan829" + sodipodi:role="line">http</tspan><tspan + id="tspan833" + style="stroke-width:0.26458332" + y="27.880951" + x="108.13906" + sodipodi:role="line">imageio</tspan><tspan + id="tspan835" + style="stroke-width:0.26458332" + y="33.172619" + x="108.13906" + sodipodi:role="line">ssh</tspan><tspan + id="tspan837" + style="stroke-width:0.26458332" + y="38.464283" + x="108.13906" + sodipodi:role="line">vddk</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + id="path847" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect849" + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" /> + <path + inkscape:original-d="m 40.821427,22.967261 c 6.362864,-0.06326 12.725463,-0.126256 19.087798,-0.188988" + inkscape:path-effect="#path-effect1135" + inkscape:connector-curvature="0" + id="path1133" + d="m 40.821427,22.967261 c 6.362867,-0.063 12.725466,-0.125995 19.087798,-0.188988" + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1139)" + transform="translate(42.862521)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="29.139225" + y="28.450657" + id="text1672"><tspan + sodipodi:role="line" + id="tspan1670" + x="29.139225" + y="28.450657" + style="font-size:2.11666656px;stroke-width:0.26458332">nbd client</tspan></text> + <image + y="31.795746" + x="55.446369" + id="image1752" + xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf +IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 +Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEsASwDASIA +AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA +AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 +ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm +p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx +BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 +uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii +gAooooAKKKr3d0LWMEIZJHOEQdz/AEFAFiis4DV5Pm8yCLP8Hllsfjmjy9X/AOfm3/78n/4qgDRo +rO8vV/8An5t/+/J/+KoKauoyJ7dsfw+URn8c0AaNFVLO9a4Z4povJnj+8mcgj1B9KtUALRVW7vPs ++1I4zLM/3UBx+JPYVAH1dudlsue3PFAGjRWdnV/7tt+tGdX/ALtt+tAGjRWa0urx/MYbeQD+FSQT ++NWrS7S7iLqpRlOHRuqmgCxRSU2SRYY2kc4VRkmgB9FZwudRuPngt44o+3mklj+A6UZ1f0tvyNAG +jRWdu1f0tvyNGdX9Lb8jQBo0VQgvplnW3vYRE7/cdTlW9vY1foAKKa7rGhdyFVRkk9qoC7v7n5rW +3RI+zSk5b8B0oA0aKzt2r/3bb9aN2r/3bb9aANGis7dq/wDdtv1p0N/Mk6297AI2c4SRDlWPp7Gg +C/RRRQAUUUUAFFFFABRRRQAUUUUAFVmUNqKE87Yzj86s1XP/AB/j/rn/AFoAsUUnWuS8HeMLrxLr +3iPTri1hhTR7oQxtGTmQbpFyc/7g/OgDrqK5S58W3MHxLs/CgtYjb3FmbgzZO8Eb+PTHy/rXVHpQ +BVlUDUoHA5KsCfwq3VWb/j/t/o38qtUAVYkBv5nPJACj2GKtVXi/4+p/qP5Vi+MPGNn4Os7Wa4hk +up7udYobaEjzH5G4qO+AfxJUcZzQB0VFNQlkDFSpIzg9R7Vi+LvE8PhHQ21a4sri6iWRUYQAfJnj +cxJ4Hb6kDvQBuVUjQJqcpXjdGCffmpbW6gvbSG7tpBLBPGskbjoysMg/kajX/kJP/wBc/wCtAFqq +18u+OND0Mi5qzVe76Rf9dBQBOAAMDoKWkqnJrGmQ6pFpcl/bpfTLvjtmkAkYc8hevY/kfSgC7RUF +5e22nWct5eTpBbwrukkkOFUU2w1Cz1SyjvbC5jubaUZSWJtytzg8/UEUAN1JA1oW7oQwPoc1aHSq ++of8eb1YHQUAV78brcJ2ZwD+dWAAoAHQVBef6pf98VPQAtFFed/CyDxDDqHiM65HqKRtcJ9m+2b8 +EZkzs3dvu9PagD0SqmpRiSzfPVeQfQ1bqtff8eUn0oAnU5QE9xTqan+rX6CnUAFFFFABRRRQAUUU +UAFFFFABVc/8f4/65/1qxVc8agvvH/WgCZDuUeo4Neb/AAut54vGHjmSWGREl1AFGZSAw8yboe/U +fnXorq6MZIxuz95PX3HvQJ4m4LBW/utwaAPPtQgnPx80ucQyGEaYymQIdoOJO/TuPzr0OQ4XHc8C +mtcRA7Q29v7qcmhFdm8yTg/wqO3/ANegCKb/AI/7f6N/KrVVZudQgA6gMf0q1QBXi/4+p/qP5VxV +t4X1XWvibP4g8QQoNP01VXSYldXV85O8jqCOpyAclcEhRXaw/wDH5OO/H8qcS0LZCloz2HVf/rUA +TVV1LT7XVtNuNPvYhLb3MZjkQ9wf5H0Pap0ljkGUdT+NNaeNTtB3v/dXk0Ach8N9J13w9p97oerp +utLS5I064LDMsRJJ+UZ2joef7xHauqX/AJCT/wDXMfzqaNWyXk+8egH8IqFP+Qk/tGP50AWqr3fS +L/roKsVXvDhYv+ugoAkVv3roevDD6VxWpfC+01H4hQeLW1KVPLkjme1CZ3yRgBSHzwPlXIweh5Ge +O0miZ8PGwWRPuk9D7H2pi3iAhZwYX9H6H6HoaAM7xZ4ch8WeHLnR553txOAVlQZKMDkHHcZHI/Ud +ah8G+FbfwZ4eTSorlrjDtJJM67dzHqQMnAwBxk1tPdQIMtKn55pmXuTypSEf3uC/4dhQAy9ObBie +/NWh0FV9Q/49GHrgCrA6UAQXn+qT/fFUvEWq3Wi6Jc39lpsuqXEW0pZw53yZYKcYBPAJPTtV294h +U9g65qSRCwDIcOvTPT6GgDnPB3inVfEv2z+0/DF5of2fZ5f2kt++3bs43IvTaPX7wrpqiWdNwWT9 +2/o3f6HvT2kRBlnVR6k0AcR4c8e6/rWu2+n33gXUdLt5t2+7mMmyPClhnMYHJAHUda7C85sZDnqC +ak3NPwoKx92PBb2FMv8AAspB7YFAE6f6tfoKdTU4Rc+lOoAKKKKACiiigAooooAKKKKACoZ4TKFZ +G2yIcqf6GpqKAK4kuRw1uCfVWGKDJMwwbbI92Fcfa+Ob+48CaP4gNpbi41C9S3kjydiAyshI5z0G +fxqI+O9Xm8RXllZ2WnMlleG2awluvLvrgDrLGrYUrg5A7gHnkVr7KYrnbCSYDAtsD2YUhluMcW/P +uwqjYarPe+ItVsBCFttPEKCXnLyOpdh9ApT/AL6rkIPH2u6lbaFHYWWnR3mrS3aE3LuIoxCeORzy +M/jSjSlLb+uoXsd9BCyO0srBpH4OOij0FT1z/hHxHL4js7w3FukFzYXb2k/kvvid0xlkYgcHNdBU +Si4uzGV5oZPNWeEjeBgqejClE02ObVwf95f8a5Lxn4zvvD+r2ttYWyXEMEIvNTzGzNHbmRUymCOe +WPsFz0rT/t26bx/DokfktYyaUbwOASxfzNvBzjbj2q/ZStcVzYZmc/PZlvqVNKskijC2jAegK/41 +wN3481eHTWmk+zWsI1e4s5tQNu8qWsaHCFkU5LMeM5A9q1LHxTqc/h+1lMun3V3danHZ29xZtvil +jJDM5XOUIjD5UnIK5PFN0pJXC51TTTkYW2bPqWGKdbwmIMzsGkc5Yjp9B7V5zafEvUZ/C2oXEtvb +xarZzxlEZCEngeYR71GcnB3KcHAIHritDxFrXjHT9fg0rS7rSbu5vpWaC2Ns+6CDJ/eSsH4A4Gcc +nOB2qnQmnZ6Bc7yo5YlmiaNuh7jtUlcVqXjPU4vE+paPZxaPClgsRMuo3phMm9d3yjac46H8PWso +wcthnWK91GNjw+Zj+NCOfwNOMspGDasR7lf8aw9L8R3d54mOi3FtbqU02O7aaCUupZmxhSQMr6Gs +GL4hapeR6PHaadYx3GqS3SZubhkij8k92Ck8jPbrVqjN7L+v6QrncKzIcpZlT7bRTjNN/wA+z/8A +fS/41xkXxEuDp9wjaVHNqseorp0MFtch4Z5SM7hJjhQM5yOOM9eJZfGOsaKbyz8Q6bapepYzXlnL +aSs0Fx5aktH8w3KwGPXIz04yexntYLo6wRSzyrJMAiIcqgOST6mrNcLbeOdXhuNPh1XSrRP7Wspb +qza1uS5XZH5m11KjGR3Gef0l8N+LtY16SwkZNCjgu13tFHqBa4VcZ+5t6juM0OjNK7C52UsayxtG +33WGKgR7mIBHi83HR1IGfqDVqishkBlkIwbViPQlf8aapKHK2W0+o21iWGv3t14o8T6a6w+TpKW7 +W5VTuJeMs24555HGMVzFr8T5rO006/1w26W1zpUl0VhjIeScS7FRMk9R6+hOcVqqM5bL+nqK6PRP +Ol/59n/76H+NM8ua4kVplEcaHITOST71S8NTaxdaPHea01oJ7n96kVpykSEZVd2TvOOpHHPHqdes +2rOwwooopAFFFFABRRRQAUUUUAFFFFABRRRQB53ZeBfEMGn6b4dnu9NbRNOvhcrOvmfaZEVy4Urj +aCSSCQemPTmTxB4L8Q6/PPb3U2jz28lwHt9SkhKXtrFu3bF2rg46A7hnknrx39Fbe3ne4rI5IaH4 +n063E+kX9l9smv5ri8hucmK4RvlQbwu5SqKnTjOe2Kyrf4ayGPwza6i9pe2mm/anv433ASvKMjYM +cgN6kcDOO1ehUVKrTW39f1cLIr2Gn2el2aWdhaxWtvH92KJQqj8u9WaSlrMZyH/CA2moanrF/rs0 +lzJqMm1Ft55YVSAKFRCFYBj65yM9utVbbwXr2nR6Td2Gs2v9qadZtYO81sTFPb7soMAggqAPrj65 +7iitFVn3FZHHW3g3V9L0y2Oma9t1NLmW5umli/0e8aX7weMEYxxgjpg8c8LoHgefStTg1C5vopH+ +0TXc0MEPlRea6CNdig8BVLjJ5O7J6V2FFDqzaaCx5/cfDE3XhvSrB79Fv9NnZ/tKxnEsbSmQxkZ6 +ZwRnOCPeprfwj4r0/VdT1Kx1vTTc6jNveaezZnCDhUB3Y2gY4xXd0lV7ebVnqFha4PVPB+rzeLdV +1aHTfD2pW98sIjXVN7NDsTacAIQMn37Cu8pKiM3DYZxkmg+JbHXLfXdMi0prh9PFndWTSOkMZU5V +o2Ck4HoQOB78UbP4cTqPDsGpNZX9rYC7bUI5AcSPMMjYuMYDdzg8ZHPFeg0VSrzS0/rf/MVkcBH4 +D1i20xbC1vrVRpF8LvRJX3EhTktDMAPu843AknPbpU9/4Y8R+Ibi6vtWk0+2lTTp7SwtreR3VJJV +2tI7lQe3QA8e457iij2073Cxyuk+BtO0jw8YbSws4NWksPs8tzGDzIUwxDEZwW56fhWb4W8Ka5oT +6dHLo/hfFqoSW9hD/aWXGCwPlj5j9ea7yil7Wbum9wsFFLSVmM5LVfC2srr1/qvh7Vbe0OqwpFeR +3MBkG5BtV0IIwQpIx09c9m6b4BtrDUtMkkeK7tNP0xrIRTxAlnZss/PAyCwx6HFdfTWljT7zge1a +e1na1xWMTwloV54b06bTJr4XdnFMxsdw+eKI8hGPfHr/ACGBW7TUlST7rA+3en1Dbk7sYUUUUgCi +iigAooooAKKKQnAyaAFoqFrqJehLH/ZqNrtj91APqaALVNZlUZZgPqapNNK3VyPpxTQmT79SSaAL +bXUS9CW+gqJrxz9yMD3JrGvvEemWOVRzdSjjZDyM+56Vm/8ACXzzDFvZQo3JPmOTgfpWbqwXU46m +Pw1N8sp6+Wp05nn678fgKet1IvDqG9xxXJw+Mpt4iuLeF5GOFMJyfyzzW2NTjiCfbDHGXVWGDhwG +OF3J94EnjjPNOFSM/hLoYqjiE3Td7GwtzE3Vtp/2uKkByMisSPUXuLjy7bTLxoxnfNKgiUY7ANyT ++Q461oBdv3WI+hqzpLlFVleRe+4ehqUTKfvZX60ASUUmQaWgAooooAKKKKACiiigAopjzIhwzc+l +RNcn+FPzoAsU1nVPvMBVVpJG6uQPQcU3A/GgCdrpB90FqikvCkbSuyRRIMs7HAUepJ6VDcSSQW0k +sUDXEiLlYlIBb865iTxLc3UjRxyi3lT70BTa49ueayqVo09zkxOLp4ZLnvqdSkouY/MjnEqf7J4o +2gdsVxMOozwXrXVvAI7iXiR8BfMwe46Z9yO5re07XJZwqygXAVGeV8bZBjnAQZ3nHTGOlKFeE3bq +Z4fMaGIfLF2fnobG0VIk0id9w9DVWz1Gx1FnWyuVkkj/ANZCQVki/wB5Dhl6dwKs4xWx3lhLhG4P +yn3qWqWKVWZPutj2oAuUVAtx/fGPcVMGDDIORQAtFFFACMwVSx6DmqRn8w5ccdh6VbkcLj3NNIjk ++8oJoAgGxqXyQehp7WqnlGK/Xmm+XKnbI9qAGmMjtUF7YRajZyWkzyJHIPmMTbWFWvMZTh1p4KP9 +aN9xNJqzOEOg24nljtNQ+2JA6xusNuWkVieFJBC9OT0x+Iq3/wAIfNNGpUoHD8m93Om0Z6RxlMZ4 +Iyx7giuzK+nFNKHvWSo010OOGX4WD5lBfmYtp4ZtbVZ4zczvFcLtMMe2FI/XYYwHH4sa0Lews7Qg +21pDEQAuVQZwBgc9eKtbKDhRliFHua1O1KyshpJPBNAWo3u4EOASxPTHSknuFt4DPczw2sQGS8jA +AfUnigNyYLTGliT7zj6DmqP2qG9iSe0uhcW7j5ZEbcrfQjg0gUelAbaFlrxV/wBUp/E4qW2u/NOx +xhu3vVPbxQmVfI69aANaik7UtABRRRQAVHO5jhZx1A4qSoLz/j3PuRQBnc53ZOT3p6zsvDcijbxT +HUhS2OBQBaVlfoadiqgcFFcEfMMgqcg/Q09Lkg4bkUAWMVWv9MsdUjCX1skuOFY8Mv0I5FWFdXHy +mnYpNJqzE0mrNaHM3HhW5gB+wTi5hx/qZzhx7Buh/H86oR6Drs7Bo7aKyIPDyyAtx34z/Ku1pST3 +Nc8sLTbPMnlWGlLms15J6Gfb2t3LbRxapteeNcfaYG27/cj9cHIzzQV1W0JMTrqKM6gRyERuq8Bj +u6f7XT1HpWhgntS7T3NdK0PTSsrDMdO3tRjPangAGlzQMYEP0pQu05BOaUtTS1AFhH3D3HWn1Ujk +xKvvxVugCrctiRR7U0Me1Ouf9av0poAoAkWQ1Ir7jioMVJDxuJoAmIBHNMMSnpwfanbqUHNAEYR0 +PByKbJcCPgjLelSu4RCx7Vnbizkk5J5NAD5LiZv4to9qgILHLEn609hSYoAjZRtORwK4LWvAGt+J +fEN1eXWqRwWLyEwBmaR1TsAnQfTIr0ErlTSgZAqZRUtzajXnRbcN2U9G0qHQ9EttKt3aSO3B+d+r +EkknjpyTxVzFOx8tIWUdWqjJtybb3ACkAw4HrR5qA9/yp/BZcfnQIvocop9qdTI/9Uv0FPoAKKKK +AGPIkS7pHVB6scVQutTtHiIRzJ3yo4/Os/VZJX137MxVoDAH27ed2fX0/wA/SnPPpsEUrX32iW4y +RFFAjsUAXIOFGBk8bjxnjNADrrxGIyUt4CzD+JuB/n8K5zWfE2qrbzMkqx7VJAVc/wA/8KfulCIL +kp9oKjzAnI3d8fjmon0a/vnISAIjD70p2j8utAGX8Ode1KbxDd6ddSSXFpcQG4DMSfKkUgE+wIP5 +gV6TtIz3rivD/h+08IX91crqD3QuY9htgudh3A5DE+2Me9XdS8UXqRv5MccaBSTu5P8An86AOtjw +Yw4PB6EdDUyysOvNeSeCvFOqy+OI7W5laa11FJBJHgBY3VSyuAOn3dv0Ner8Z4OR2oAtJiQZB/Cn +4AqojFDkVMZAe9AEpamlxUReml/egCQvSb+KiLgDrTPM64zQBOWppb8ah3Mfajk9SaAJDIARyM5r +TrIx0rWoAq3sYYowJVhnDCoklKsElwpPRh0P+FWLofKv1qHaHUqwyp6igCTp2py8ZHvUMRaN/Ic5 +GMxue49DUwHX60AOz70ZpMUlACXDfugPU1VXvU9xwq++agWgAPWlxTGcLwOWphZm+8fwoAkLqO+f +pTDK3YAU0U7FACZY9STRilxS4PegBuKfDnO38RQFp8Q/fA0AX4v9Uv0p9Nj+4KdQAUlLRQBmX2kf +ab5b2KXbKI/LKt90jOfzqN9Fj8o+fO7DuE+UGrr3eSRGvQ4JNQO7ufmYn27UAY2omDT7i2tbO2jj +M7DzJ8ZcjOMZ6804iD5mu72Oxtw/lq7SKmXxu6t147fU/R2qWNzdXtrcwBWSIgOucMBnOR2IqO8s +vMdmksxIdoVZAgfPt6jHr70gOdSdrmCO4eNomlQOUYYIzz0NU5oLi+mMFpbS3LEYKxqTj6noPxrp +bGLR74Bv3hlcBlNw+3fu6Fex6Hrz7VqK8tqnltGDEOnlrtI/4COPypgcF4e8Jat4a8Ureyqs9vPG +6Mgdd1uxHB9CPUDmvQ4SMYByBVN8SjzEYMM9RVmA8YoAsgU3zAoK9cU8VEw+dvrQAGQnpSZJ6mjF +LigBuKUClxSgUAAFAFKBS4oATFag6VmGtOgCK5+4PrUKDmp7j/V/jUSCgBsowqv/AHGBqUDFMlGY +XHtUvTrQAmKMUuRRQBXujhlHtVdW2gn0qa7/ANZ+Aqv2oAaATyeppwXmlApQKAExT0jZugoA5Fcb +4g1O6fxPdaYb6SK2h2BIVO1TlFJzjryT1oA7HGD1zVbUL0afChSFri5nfy7a3U4Mj/XsB1J7VLZB +Rp0AXBUIBxVDVroabq9hqM8UklokUkTPEhYxMxUgkDnB2kVFSXLG5rRhzzta++nfTb5kqXE91rJt +opkit7Mf6QowXnkK/dHoq7hk9yQK0Y/9YKy7SxurHX7qYWsEtreHzPtgYCWPIHyEdSM88Vqx/wCs +FKm2079x1lFSXLtZf8H8e5di/wBWKfUQkSKAPI6ooHJY4ArCn8aWMk72ui29xrlyh2stioaND6NK +SEX88+1aGJ0VRS3EMAzLIq/U1zialqz+Y+oz2kOSAtpZM0pi9S8uAM+20fU0sNtdXbZiiOD1d/8A +GgC1LdwCZ2jdsn5sEYyO+KWeeRWAU4HXikOhSRkT+Z50gUrs6DnvUc6liqBWLAYK45H4UAWkm39w +w9VqTtlTxVJLSRAHZvKBIGe/NXVZD8uNp/nQBSudLtLtZUcyRLM/mSiNuHYAYJU5GRgduwqtZW+q +ws63EqmDeSBM5lk/BhjjvyM5J4HFbBTuTionkRRxzQBSltgz71zG/wDeX+vrS20j72ikCllGdy9D ++HY06WRj7VWgYi+9itAGsp6VG332+tPSkb75+tADefajn1p2KMUARlzGQGxg9/SpFFQ3fFuxqaP7 +g+lADqMUAU4CgBuOlaVZ+OlaNAEc3+r/ABpkYp833PxpIhQAko/cv9KcV+YmlkH7tvpSjpQAzbij +Bp560CgCldf60/QVCo61Nd/68/QVEo4NABS4pQD6VDd3lrp4Q3lwsJlbZGp5Zz6ADk8AnjsDQBPG +F3Zc4VeSfQV5BJqU+r63danKhVrmXKrj7qDhR/3yBXrsZjmhySTDOnBHdWHX8jXm1pBNomqtperw +pLJCfllQ/fT+FvxHY0Adt4c3/wBmENnG7jNaqsVPFUnv9N0vTILiWUx28riNCELMznouB9D+Vc/q +HjS8eXULTRtNkaW0byopDE0rTOQ3AUcLggHdluA3y54oA6zpxTo+HFVxPBZ6fbSahdpDI0ab2uHV +WLHAyeAOp9B16Cn2F3b6hbx3lo7Pbyg7HZChOCQeGAI5B6igDP8AGNpd3eheXY6dZX1xIwVVv4TL +Eg7naAeffHpUGjaVq40Kx0+5IBt4Vjkdh5cbEDHEa8sP97HrgV1Mf+rFPoAzrTRYIGWSV2nkXpn5 +UX6KOPzzWhjHApax9Z8SW2jIN1pe3cjMEVLa3ZgWJAAL8IvLAckdfY0AbFQzyxRIS7qhYYya5We9 +8T374vJ7Xw7bk/6qHF1eMM+2UTPrh6ZZWNvaStDZJcSXU53SzXdwZZ5sevOFA9sD2FAGxNeW+3aq +NJgg5J2rx+tU5dTkM8S4UhzjCr04z9e1NCQibZcytkHnaOAfc057i3in2JGjp/CyjlfXnvQBff68 +UxqQTxso2EuQM4UHIFU7jVooYmk2sypy2xS2KAJ3Umo4oP33m7snGMVxGv8Aiy+vFMWhJMt0h3xm +Jd7sQDgFcHIOehrrfDV3qN/o0VxrNollqR/10CdBycHGTjIxxmgDcjHAFIfvH60sfag/eNACUUDi +igCvef8AHufcirEY+QfSoL3/AFI/3hVhOg+lADsUYpaWgAxyPrV+qKj5x9avUARy/c/Glj6US/c/ +GiPpQAr/AHG+lC/dpW+6fpSJ9wfSgBaKKKAKN1/r2+gpkYBHzdKfdf69voKbEoZcH1oA5u9k8VTX +aCycSRbp0PkxiNY/vJEW3ZLYIBJDL1zg9qcmhxae9vJr3iCD7RBIg27TIzKUIbqcjcxZskED681p +GXX9auwlqTb6UXEU7KTFKpB+Yqx5I4I+uMcZrOXTNIs7p/7a1Bb7UPOW4kjslfdFOIwWYkMQmdrE +cLkcfNxgA0tA8Q6RLcWmhWlzJM0VvGwmupAXYMu5B/tEqCeO1ceANS8ValJNKYrn7ZIhWT0VtqgH +6AV13hrUbS51O50uz0c2EFluBkmO6VpgRv8Am5DHLckMT0J+8K4fX7th8bprCZhaQTrEFfbgS/ug +ct6nOV3D+6BQB3usCy0zQLOPU7ae8je5QJb27Y8x8FhuGQGUBScHPQcGsqwv9X1bRzb6JbrpcUC7 +BZ2seGQeW+AXfaCSwXgbGUjDEE8dgtojLDHIiyNAMoW5AOCpP5MR+NNvrkWFsLiWN2QOqBIxzliA +P1NArmInhYXH72+lWOcl1d4iXeaJv4XduRwSMDpxgnFbVla29hbx2dnEIbaIERxr0UdcD0HPTt2q +TIJxuUkfeAOdp9KVOXFAy3H/AKtafTU4QfSnUAFcj418KXvimS1gS/urexT/AFsNvN5azZIJ3jv0 +GDzjniuuooAxodDd/mu5woPWO3yoP1f7zfXitKG0t7OFktoUiBGTtGMn1PqamPFRPMNhwDjpk8AU +Ac1cY+0Sf7xqFPmmVUBY+ijNac/9lWzNJL5ly5Odq8j+g/Ws+48SXMabLGzhtk9T8x/IYH86ANOz +srhdxaMpuHGajxA8/kGWIXe3OIXBHvkdvxrmLm/vb3i6u5ZQf4c4U/8AARgVY0H93q6Y4+RqALyf +uSywxxwZOWEahdx9Tiren/elJyTxmqrf6xvrVvTAW872x/WgDQjPPNKep+tNUYp3c5oAMUUtGKAK +t5/q0/3xVpB/IVWu+kY/2xVpR/KgB1FLRQAsfMi/WrtU4R++WrlADJfufjSp92kl+5+NKn3aAFPQ +0ifcH0FKelNj+7+X8qAHUUGigCjdf68/QUkYBX5jgZ5p11/r/wDgIpqD5KAMC4tte1a4minV7S3Z +pkhmWYBBEw2jdGD87EZI3DA9u92x8P2VnaG3l3XruMTTTcmb5CmCOmNpPA4yxOMmtIsFRnkcJGg3 +M7HAUDqSe1cX4p+J2m6NaFdCeLVLxm2+YuTBEPUsPvewB/Ed05JbmlOnOo7QVzroJ9Ot3XTLeaBZ +IFXNrGwLRjHGVHI4x1rldS8D3+ufEJteu54xYQRolooPzDA5BHb5ix/EVg/Ci7udX17W9Wu3Es8x +h85wAOSTjgdOh/Kr/jez13XvHem6XZR3C6faIlwXAIiL5OTnoT0GOwz6mle6TNHB05yhfZF34s7x +4VsUiLZ+2oAAcEkI2P1xXnuqT6kLF2n1q7a4kT955lwxye2Oe3Fd78U7meZtF0KCNjLczeZ9pKnY +hUbckj/fJP4etaXhnwJp+gW5e58rU72U7nupowQv+zGpztHv3754AwnTlOd07I9XC42hhsKoyjzS +d9PLzZY8Bnf4I02QrhniDOAMfNjnj610CffFMWOOIFYkCKecCnp9+uk8Itp9wfSnU1P9Wv0FOoAK +KKKAIbmUwQPKF3bFLY9cCsCC4lvfMlnbc2eB2UegrevRm0lH+w38q5vTWBWQA+mKQDrhRzxWXPH1 +rakQuOATVaTTpGUNIRGp9smmBz7/ACtzV3RVLasm3nCEn2Fa9vpllHFPK0PnOkZKtLzg/TpWP4dk +xrrKQSZImAPpgg0AaLnEjfWpNPult7lo5M7JR94diKhkOHb61DE3+lL9DQB0qgHBBBB6Ed6Wqtmx +DhR91uoq3igBKKXijpQBWuuWiH+1VoDFVpxmWL/eq1QAUUUUASQDMo9hVqq9uPnY+1WKAGSfcpV+ +7SsNwxQBgUALTI/uj6ClLAdTikQbcA/3RQA6iiigCndj9+P90f1pifcqS7H71T/s0xPuH60AZvig +KfB2sBsbfskmQf8AdNeNW/hzW7gRLBo126Tj92fJIVh9TwPxr3jjuMjuDS7iVKdVPUNzWNSiqjTb +PTwOZVMHGUYRTv3PKvhr4fvtP1+7uZYrqxXYYGWRSoduvAPUqQPzr1YyMAVHQ01grFWKKSowpx0+ +lFaQjyxscWIrOvUdRpK/RDWRJE2OCQDng4P59aUAKAqqFUcBQMAU4AmobiWRJ4raAxNOxDSI7crF +nDMB+gqjEkpyfe/CkOO1HODjrigC6v3R9KWiigAooooAKrDT7QStKsCB36nHB/DpVXVtXbTlCwW5 +uZsbmQNjavr7/QVhz6rdahbM/wBoxEyniP5QPr3oA2m2x/KxywqPzlc7GHB6Zrk9D13Ulu2sr6Hz +7Etthuc4kQ9h/tD+XvW7JdnBVFGPU0AXp9q2k+0Y/dt/KuU8Ouh8Qou9d5hchM8445xXRLI0mnOz +feMRz+VcR4VI/wCFlT+osWz/AOO0AdFPKFZsnvVWG4/09ARgEEA+9aN1p6RSbyS6sciohb7gVVAM ++g5oA19PbM6j61frN0tHjuEV+wPPrxWn1oASloxSEheTQBDIN1zEO4yasZqNEO4yN95u3oKkoAO9 +LSDrS0ATW44Y+9T1FAP3f1NS0AFFFM3kEgigB9NP3gaUMKQ9vrQAAEUtFFAFW8++n0NRp901LeDl +D9aiT7poAWiiq+pzvaaLf3cTKstvbSSRswyAyqSM+2aALIUkE9h1rI1bxRp2jadBqUgkurC4UmO7 +t8NEG/hDHPAY8BugPUisCQ+KPETwubR7Nltn064bhUSR9pluF5G9doGz3JHHNa+leELbSoEs5rxr +/T4ZHlgtJolCq7jDZAGCuS5C4AG89cDABU1TWNfi1e3traxe8htYR/a62aZQvIMBVJ+bKfK2ACSr +c44q54c0K+0uSC8v9QkupTp8du0b7R5LDnaoUYwOmSSSe9bFnaW2m2y21jAlvAvARB7YGfXgAc+g +qXrQAGljGZFHvTelSWqlpC56Lx+NAFuiiigAooooAwdZ0y6+1NqFn+9O354e5IHBH+FcfZWOoXEs +zXXn3t3PJukQQlI4/QBOg+pr02mvIsYyxoA4VvD2oW7x3UgWPy2DCFTktjsT0H61pRTW06HyQVkH +343+8v8AiPete6vlYFQM1jXdihje9lZoki+YuoJYfQDk0AXkCvGYzwHUqce9choOk3Ft8RWvRE4t +zYSRTNj5Q4ZdvPqQf0NX18TM1tI1tCJCg+WWXjd9VH+NUtC8aXE9xLbayiOvUXMKbWX2ZR1HPbn6 +0Adczop2vgqe3apWt4pFBQBD7dKi2IYw4cMjjKkdxS20w81oR93GRmgCS2ieO6G5egPNWu1CHoO2 +aUcUAJz9Pel4HTr60hOaM0AFLSdTUUt5DExTJkf+4nJoAmpWZEx5jqm7gZPWqqm9uT8oEKe3LVag +09EO98s56sxyaALaABAAcinUgAAwKWgArP1CymmkWeCd45E+7g8fl3rQooAyYdSeNhFfIIX/AL4+ +43+H41oLICP1pZreOdSrqCD7VQNlPZEm2O+L/nkx4/D0oA06KqW9/HIQhykndG4P4etWgwPSgCC7 +HyofeoU6GrF1zAT6EGq0Z5I9qAHUEKwKsoZTwVIyCPSloNAAWJ79sUhoOB1NNaQKMkgAdycCgB2K +TPpzVc3BfiFGkPqeB/8AXqRLGWbmeQkf3RwKAGPcjO2Iea/YL0H1NXrQy+ViVFUj+7ToraOEYVQK +loAWiiigAooooAKz7m2llk68VoUUAUIdOVeX5ql4gju4o7eW1iLwxEmVV6jpg/zrcooA86Ah1jWn +t4bRobVI991dAhfNY9FVf1Lfh71q2dnYacfL06ySOQ9WVdzt9T1rfbQtOa6+0i38uQ/e8tiob6gc +VK0trYR7YkRfZRjNAGQkiiIKc+YvVTwRRbFTPuHXpRdbr9/3ceOeCOtNFtcWLBpQXQ/xAcigDVj5 +IpT1P1qst/axoGMoc44RPmJNM8+9uuIIhAvq3zN/gKALbska7pGCr6k4qsb8OdttE0p/vHhafFpG +9hJcO0rernNaEdtHGMBRQBnLaXd0P3z7V/upwKuW9hDAoCqKtdKWgBAoXoKWiigAooooAKKKKACi +iigCC4s4bhcOgz2NUzHeWZyh8+P+6x+YfQ9/xrTooAox3cV3E8aEh8ZKNwwqIEggirNzYQ3I5XDD +ow4IqmYru3+V189ezZw34+tAE3mDHT8KbJMEGXYID096SOK5l/hEQ/M1ZhsIozubLN3J5NAFNTNM +cRR4H95/8Knj04Ehp2Mje/T8qvBQBwKWgBiRIgwoxT6KKACiiigAooooAKKKKACiiigAooooAa4L +IQDjNUV0tS5aV91aFFAEccEcQwigU50VxhhkU6igCqunwK+4KKsKioOBinUUAFFFFABRRRQAUUUU +AFFFFABRRRQAUUUUAFFFFABSUtFACUtFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU +AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA +UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/2Q== +" + preserveAspectRatio="none" + height="33.450893" + width="33.450893" /> + <image + y="9.9701509" + x="117.92583" + id="image1855" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA1xJREFU +WIXtlk9IHGcYh5/5ZrRLdmd3NqmyBlZNMDEBYQOxULDdKl5MPGhPUkqqJTkUqbWWQk9p01sPbVha +CZQ2bNpDaQP1T1OhoQna4FLGEt0iaYKGpBJvWdlo6vpnZ/ftwWgv2Y1pFr34g7nMzDfPMy/v+83A +TnZS+HQDw0BoO+ChsooyOR09LcDEdggMnxs+J7bY0tjdKMBHWwlvD7eExRZbvr7/lQT6SsSoNAR4 +ZSvgPtNvJvvv9osttrxwrVZKBvfInrN+Ae4CvlwLVYEEzrS902btrdxL38yP3F6cJqtnUFUanpPu +SiBSIM5jEzoQOiC22HI1fVUCv5WK91ePWL94ZfeQJc9f2i1FNYaQYyqMAghEeiI9AHxx53PmZQGl +KwQQTZCMIFruxc8q0N7c3lx/tP4o4wvj/Dw3hDLUI6hARpH6dAln0okAf/5fSK4u9pl+M3kleUVs +saX6r2pRY5oYv+tSHCsS17XnxOgwBIjme/iTmjBaVlE2AvQ/5tqZUx+eskzLZDAxyOzKLJquyBhZ +MnqW9GUH54ITB9584ivmiM/0m0lbbAm3hIW1LXY9G4037AxLza0aCUwGxBf3SfF4sWhfaus7Yc7x +W0++CrQef+O4lZUsrb2teIPeCP91cqTzbCeLmUUu3r+IQuHRPXh0D67bLuR9eQB0APPPIvBu89vN +zDvzrLpXafu2DZflGgC6G0401JfXlXMzdZOp1BQe3YOpm+xK7SL1XuoBD6lnk02n5zhfcfjlw580 +djaykFnAwcEsNXGVuKyZ2ExTV18XTpHDxD8TpEmjUGQfZpk6McXqndW3gMubgUPuMezY/9J+5pw5 +vLoXj+5BR6fu9TpKK0pZdi+TWEkgCKZuoqMT/yDO0q2lDuCbzcLzVSA+PTrd5A/6A7W1tShNoTSF +hoZVbrGYXSQjGTRNQ2mKWE+Me5fuXQA+fhp4PoEV4PvJocmm4L5g4OCRg2sSKDRNw9AMFGtSN364 +wdhnYwPAa08LzyewIRH7KdYU3BcMVB+p3oCuH9e/u85A10AcaH10f0EFNiRGB0cPJWYShxpebdio +wuzkLOdPnv87vZx+kU2MWyESPdZ+TEacEen9o1fcljvJNvz3RcMtYakKVeX8vG5FWrYTvpOdFDz/ +AqucSLeWBLo9AAAAAElFTkSuQmCC +" + preserveAspectRatio="none" + height="5.5373507" + width="5.5373507" /> + <image + y="15.507502" + x="123.46318" + id="image1920" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU +WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8 +yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA +JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT +4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl +0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2 +h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl +UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr +hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud +2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740 +0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD +WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo +/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR +IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB +4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59 +zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG +jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg== +" + preserveAspectRatio="none" + height="7.5217257" + width="7.5217257" /> + <image + width="7.5217257" + height="7.5217257" + preserveAspectRatio="none" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU +WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8 +yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA +JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT +4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl +0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2 +h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl +UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr +hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud +2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740 +0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD +WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo +/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR +IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB +4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59 +zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG +jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg== +" + id="image1923" + x="115.33669" + y="21.082651" /> + <image + y="27.224764" + x="117.98253" + id="image1925" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA3hJREFU +WIXtl19oW2UYxn9N21iXxqQzdhNsm7F1UFeXXQmi0NjhHIW5DrToVdIrQRCZgwmiF3P2QtCtvVK8 +yRH8hxfqlDFF1OxmILohuDtl7VzLZpKu+deTNDnf93pxkrTFJCeVSb3oC4fznfO+vM9zvvc5D+fA +JoaI4NpMAsAWgS0Cm0+go8W6ASBcWceB63eotqWI9AUC8sqxcTl59CkZCASWgEij2gf8fjkxGpYT +4RHp9/ub1SIitDmAjwz398UvnjoFxQJtN2+RSS9x5NPPuJpIRIEP1oJPHDhgTB87ipRWILVIJpvl +0LmvmTfNIHV2QkQcRxB+fnQUyefo/P4HXOk0AeDC3kHGzGXjt/wyFRKRidB+4+yRMbS5TNvlK0g2 +h0c0T/t9TJvmODBTD8BRhPe43bh+/wNXOl2752tv53woxLDHYwCxZx4aNs6MHUabJvLzL1iZDGVl +UVYKpXXT/k4Efv3k0iWkWADsLdNao7RmWxt8se9BXg7tj545fAhtmujLVyrgirJSWErxUy4Pthjr +hpMGAGLPBYPR9/r7UBUCWgQlGq0F3e5C7x1EX5tF5fO1vBbNqzcW+HIpPQ0cr9e4FRHWSDzb2xud +2bN7HYDS9llXzyKoSv61+QXOpTMGMNmo6UYIAMQmAoHoO7uC9tOL1AXWonl94SZfOYD/GwIAP740 +0B9+cXuPPY7a06+u302meD+1GAced2q20e+ByND2nvDko4+gd+7AqoisepSVwtKKCZ+XQbc7TBMD +WhutEogM9fiNj58YpVtZlJLJitI1ZV1VvKasFF3AzP072OPuNFoh0coIIkN+n/HRwTBeoDA7h1Uo +/EMDa69FhKxSHP8rybWyFWW9Y9aiJSse8vniH4YfwwuY1//EKhbXAZ/P5njSs61GQmRVEzmleSGR +IqF0kAZW7DSCcGR3kG5lkZ+do2QW7Jlre8tP30owlUjNTSVSWFqjdDVn57tEOHh3F8B4IwBHDXiB +4uJtSoVCDdhSijcTSS7klw1g17fLpvFW6nYlZzul0hqr8mo2C0cr/vzGPGplZVXxWjGVSPGNDV59 +zye/MwvG20uZGnCVxNVSGZpYcSsRG/F2y/TOXjl9370SusstQKxR7cPuTnnD1y0nvR7Z19EhwNlG +jTdiRBEgWFnHgYt3olYcxvOfx9af0RaB/wWBvwE6SlaiRvidkgAAAABJRU5ErkJggg== +" + preserveAspectRatio="none" + height="7.5217257" + width="7.5217257" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)" + d="M 40.705298,17.132804 C 52.328382,13.352939 63.95115,9.5731777 74.86501,8.8960113 85.77887,8.2188449 95.984505,10.644258 106.18967,13.06956" + id="path1927" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1929" + inkscape:original-d="M 40.705298,17.132804 C 52.32833,13.352778 63.951097,9.5730158 75.573602,5.7935186 85.778944,8.2185351 95.984579,10.643948 106.18967,13.06956" /> + <text + id="text1973" + y="17.867313" + x="28.610058" + style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-size:2.11666656px;stroke-width:0.26458332" + y="17.867313" + x="28.610058" + id="tspan1971" + sodipodi:role="line">http client</tspan></text> + </g> +</svg> diff --git a/2019-tech-introductions/warm-migrations-2.svg b/2019-tech-introductions/warm-migrations-2.svg new file mode 100644 index 0000000..b88ea99 --- /dev/null +++ b/2019-tech-introductions/warm-migrations-2.svg @@ -0,0 +1,269 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="129.42459mm" + height="40.338345mm" + viewBox="0 0 129.42459 40.338345" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="warm-migrations-2.svg"> + <defs + id="defs2"> + <inkscape:path-effect + effect="bspline" + id="path-effect1597" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1593" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1589" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1553" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker1939" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1937" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect1929" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect1135" + effect="bspline" /> + <inkscape:path-effect + effect="bspline" + id="path-effect849" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="248.14691" + inkscape:cy="41.572609" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-width="1920" + inkscape:window-height="1018" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-7.2544057,-0.87406835)"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect815" + width="23.434523" + height="15.497025" + x="17.386906" + y="14.840774" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)" + d="m 40.705298,17.132804 c 10.615145,-3.055398 21.229976,-6.110705 31.545505,-6.126383 10.315529,-0.01568 20.331896,3.00813 30.348097,6.031889" + id="path1927" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1929" + inkscape:original-d="M 40.705298,17.132804 C 51.320393,14.077232 61.935224,11.021925 72.549792,7.9668817 82.566427,10.990427 92.582794,14.014235 102.5989,17.03831" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="20.804852" + y="23.652889" + id="text1529"><tspan + sodipodi:role="line" + id="tspan1527" + x="20.804852" + y="23.652889" + style="stroke-width:0.26458332">VMware</tspan></text> + <rect + y="14.840774" + x="103.11198" + height="15.497025" + width="23.434523" + id="rect1531" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text1535" + y="23.652889" + x="110.23409" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="23.652889" + x="110.23409" + id="tspan1533" + sodipodi:role="line">KVM</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="105.33923" + y="28.850063" + id="text1539"><tspan + sodipodi:role="line" + id="tspan1537" + x="105.33923" + y="28.850063" + style="font-size:2.11666656px;stroke-width:0.26458332">RHV, OSP, etc.</tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1541" + width="5.6696429" + height="7.1815472" + x="47.319881" + y="19.117176" /> + <rect + y="15.998873" + x="57.052769" + height="7.1815472" + width="5.6696429" + id="rect1543" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1545" + width="5.6696429" + height="7.1815472" + x="67.636101" + y="15.24292" /> + <rect + y="15.904378" + x="77.652473" + height="7.1815472" + width="5.6696429" + id="rect1547" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1549" + width="5.6696429" + height="7.1815472" + x="86.912888" + y="17.983248" /> + <path + style="fill:none;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 52.611548,31.212413 c 6.079436,-2.362475 12.158554,-4.724826 17.859613,-4.992471 5.701059,-0.267644 11.024224,1.559241 16.347233,3.386072" + id="path1551" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1553" + inkscape:original-d="m 52.611548,31.212413 c 6.079381,-2.362615 12.158499,-4.724967 18.237352,-7.087053 5.323429,1.82662 10.646594,3.653505 15.969494,5.480654" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + id="text1557" + transform="rotate(9.4952474,66.336364,58.396456)"><textPath + xlink:href="#path1551" + id="textPath1559"><tspan + style="stroke:none;stroke-width:0.26458332" + id="tspan1555">snapshots</tspan></textPath></text> + <text + transform="rotate(1.4041511)" + id="text1585" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve" + x="54.315987" + y="32.761391">changed blocks</text> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 54.406936,29.49515 c 4.441533,-1.228509 8.882752,-2.456931 12.504893,-2.992353 3.622141,-0.535421 6.42566,-0.37792 8.315488,-0.236177 1.889827,0.141743 2.866353,0.267746 3.795416,0.456716 0.929062,0.188969 1.811212,0.441012 2.692981,0.692946" + id="path1595" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1597" + inkscape:original-d="m 54.406936,29.49515 c 4.441484,-1.228687 8.882703,-2.457109 13.32366,-3.685267 2.80339,0.157214 5.606909,0.314715 8.409969,0.47247 0.976617,0.125716 1.953143,0.251719 2.929316,0.377976 0.882004,0.251661 1.764154,0.503704 2.645833,0.755953" /> + </g> +</svg> diff --git a/2019-tech-introductions/warm-migrations.svg b/2019-tech-introductions/warm-migrations.svg new file mode 100644 index 0000000..99eee10 --- /dev/null +++ b/2019-tech-introductions/warm-migrations.svg @@ -0,0 +1,225 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="129.42459mm" + height="40.338345mm" + viewBox="0 0 129.42459 40.338345" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="warm-migrations.svg"> + <defs + id="defs2"> + <inkscape:path-effect + effect="bspline" + id="path-effect1553" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker1939" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1937" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect1929" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect1135" + effect="bspline" /> + <inkscape:path-effect + effect="bspline" + id="path-effect849" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="248.14691" + inkscape:cy="41.572609" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-width="1920" + inkscape:window-height="1018" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-7.2544057,-0.87406835)"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect815" + width="23.434523" + height="15.497025" + x="17.386906" + y="14.840774" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1939)" + d="m 40.705298,17.132804 c 10.615145,-3.055398 21.229976,-6.110705 31.545505,-6.126383 10.315529,-0.01568 20.331896,3.00813 30.348097,6.031889" + id="path1927" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1929" + inkscape:original-d="M 40.705298,17.132804 C 51.320393,14.077232 61.935224,11.021925 72.549792,7.9668817 82.566427,10.990427 92.582794,14.014235 102.5989,17.03831" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="20.804852" + y="23.652889" + id="text1529"><tspan + sodipodi:role="line" + id="tspan1527" + x="20.804852" + y="23.652889" + style="stroke-width:0.26458332">VMware</tspan></text> + <rect + y="14.840774" + x="103.11198" + height="15.497025" + width="23.434523" + id="rect1531" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text1535" + y="23.652889" + x="110.23409" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="stroke-width:0.26458332" + y="23.652889" + x="110.23409" + id="tspan1533" + sodipodi:role="line">KVM</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="105.33923" + y="28.850063" + id="text1539"><tspan + sodipodi:role="line" + id="tspan1537" + x="105.33923" + y="28.850063" + style="font-size:2.11666656px;stroke-width:0.26458332">RHV, OSP, etc.</tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1541" + width="5.6696429" + height="7.1815472" + x="47.319881" + y="19.117176" /> + <rect + y="15.998873" + x="57.052769" + height="7.1815472" + width="5.6696429" + id="rect1543" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1545" + width="5.6696429" + height="7.1815472" + x="67.636101" + y="15.24292" /> + <rect + y="15.904378" + x="77.652473" + height="7.1815472" + width="5.6696429" + id="rect1547" + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1549" + width="5.6696429" + height="7.1815472" + x="86.912888" + y="17.983248" /> + <path + style="fill:none;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 52.611548,31.212413 c 6.079436,-2.362475 12.158554,-4.724826 17.859613,-4.992471 5.701059,-0.267644 11.024224,1.559241 16.347233,3.386072" + id="path1551" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1553" + inkscape:original-d="m 52.611548,31.212413 c 6.079381,-2.362615 12.158499,-4.724967 18.237352,-7.087053 5.323429,1.82662 10.646594,3.653505 15.969494,5.480654" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + id="text1557" + transform="rotate(9.4952474,66.336364,58.396456)"><textPath + xlink:href="#path1551" + id="textPath1559"><tspan + style="stroke:none;stroke-width:0.26458332" + id="tspan1555">snapshots</tspan></textPath></text> + </g> +</svg>