erster Commit, fertiges artwork und funktionstüchtige scripte
authorMax Andre <andremax@linux.fritz.box>
Thu, 29 Oct 2015 06:42:22 +0000 (07:42 +0100)
committerMax Andre <andremax@linux.fritz.box>
Thu, 29 Oct 2015 06:42:22 +0000 (07:42 +0100)
15 files changed:
.gitignore [new file with mode: 0644]
README.md
c3t_rpc_client.py [new file with mode: 0644]
cccffm/__init__.py [new file with mode: 0644]
cccffm/artwork/intro.svg [new file with mode: 0644]
cccffm/artwork/outro.svg [new file with mode: 0644]
easing.py [new file with mode: 0644]
fading.py [new file with mode: 0644]
make-overlay.sh [new file with mode: 0755]
make-snapshots.sh [new file with mode: 0755]
make.py [new file with mode: 0755]
renderlib.py [new file with mode: 0644]
script-Z-preroll-generator.py [new file with mode: 0755]
video_hd.sh [new file with mode: 0755]
video_sd.sh [new file with mode: 0755]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..3c2be26
--- /dev/null
@@ -0,0 +1,3 @@
+*.mp4
+*.ts
+__pycache__
index d8c8020..9643720 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,14 +1,12 @@
 # cccffm2mediacccde
 
-# cccffm2mediacccde\r
-\r
-Tools von media.ccc.de zum Veröffentlichen von Videos auf media.ccc.de gepaart mit dem Artwork für den CCC FFM. \r
-\r
-## Abhängigkeiten\r
-\r
-* python3\r
-* python3-lxml\r
-* python3-cssutils\r
-* ffmpeg\r
-* acc\r
-* x.264\r
+Tools von media.ccc.de zum Veröffentlichen von Videos auf media.ccc.de gepaart mit dem Artwork für den CCC FFM. 
+
+## Abhängigkeiten
+
+* python3
+* python3-lxml
+* python3-cssutils
+* ffmpeg
+* acc
+* x.264
diff --git a/c3t_rpc_client.py b/c3t_rpc_client.py
new file mode 100644 (file)
index 0000000..f646c07
--- /dev/null
@@ -0,0 +1,158 @@
+#!/usr/bin/python3
+#    Copyright (C) 2014  derpeter
+#    derpeter@berlin.ccc.de
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import xmlrpc.client
+import hashlib
+import hmac
+import socket
+import urllib
+import xml
+import sys
+
+
+## client constructor #####
+# group: worker group
+# secret: client secret
+# host: client hostname (will be taken from local host if set to None)
+# url: tracker url (without the rpc)
+# method: method to access
+############################
+def C3TClient(url, method, group, host, secret, args):
+    if 'rpc' != url[-3:]:
+        url = url + "rpc"
+    
+#     if host == None:
+#         host = socket.getfqdn()
+        
+    #####################
+    # generate signature
+    #####################
+    # assemble static part of signature arguments
+    # 1. URL  2. method name  3. worker group token  4. hostname
+    sig_args = urllib.parse.quote(url  + "&" + method + "&" + group + "&" + host + "&", '')
+    
+    #### add method args
+    if len(args) > 0:
+        i = 0
+        while i < len(args):
+            arg = args[i]
+            if isinstance(arg, dict):
+                for k in arg:
+                    sig_args = str(sig_args) + urllib.parse.quote("[" + str(k) + "]", '') + "=" + urllib.parse.quote(str(arg[k]), '')
+            else:
+                sig_args = str(sig_args) + urllib.parse.quote(str(arg), '')
+            
+            if i < (len(args) -1):
+                sig_args = sig_args + urllib.parse.quote("&", '')
+            i = i + 1
+    
+        
+    #### generate the hmac hash with key
+    hash =  hmac.new(bytes(secret, 'utf-8'), bytes(sig_args, 'utf-8'), hashlib.sha256)
+    
+    #### add signature as last parameter to the arg list
+    args.append(hash.hexdigest())
+    
+    #### create xmlrpc client
+    print('creating XML RPC proxy: ' + url + "?group=" + group + "&hostname=" + host)
+    try:
+        proxy = xmlrpc.client.ServerProxy(url + "?group=" + group + "&hostname=" + host);
+    except xmlrpc.client.Fault as err:
+        print("A fault occurred")
+        print("Fault code: %d" % err.faultCode)
+        print("Fault string: %s" % err.faultString)
+        sys.exit()
+    except xmlrpc.client.ProtocolError as err:
+        print("A protocol error occurred")
+        print("URL: %s" % err.url)
+        print("HTTP/HTTPS headers: %s" % err.headers)
+        print("Error code: %d" % err.errcode)
+        print("Error message: %s" % err.errmsg)
+        sys.exit()
+    except socket.gaierror as err:
+        print("A socket error occurred")
+        print(err)
+        sys.exit()
+    except xmlrpc.client.ProtocolError as err:
+        print("A Protocol occurred")
+        print(err)
+        sys.exit()
+    
+    #### call the given method with args
+    try:
+        print(method + str(args))
+        result = getattr(proxy,method)(*args)
+    except xml.parsers.expat.ExpatError as err:
+        print("A expat err occured")
+        print(err)
+        sys.exit()
+    except xmlrpc.client.Fault as err:
+        print("A fault occurred")
+        print("Fault code: %d" % err.faultCode)
+        print("Fault string: %s" % err.faultString)
+        sys.exit()
+    except xmlrpc.client.ProtocolError as err:
+        print("A protocol error occurred")
+        print("URL: %s" % err.url)
+        print("HTTP/HTTPS headers: %s" % err.headers)
+        print("Error code: %d" % err.errcode)
+        print("Error message: %s" % err.errmsg)
+        sys.exit()
+    #### return the result
+    return result
+
+def open_rpc(method, args, url, group, host, secret):
+    result = C3TClient(url, method, group, host, secret, args)
+    return result
+
+### get Tracker Version
+def getVersion():
+    tmp_args = ["1"];
+    return str(open_rpc("C3TT.getVersion",tmp_args))
+
+### check for new ticket on tracker an get assignement 
+def assignNextUnassignedForState(from_state, to_state, url, group, host, secret, filter = {}):
+    tmp_args = [from_state, to_state, filter]
+    xml = open_rpc("C3TT.assignNextUnassignedForState",tmp_args,url, group, host, secret)
+    # if get no xml there seems to be no ticket for this job
+    if xml == False:
+        return False
+    else:
+        print(xml)
+        return xml['id']
+
+### get ticket properties 
+def getTicketProperties(id ,url, group, host, secret):
+    tmp_args = [id]
+    xml = open_rpc("C3TT.getTicketProperties",tmp_args, url, group, host, secret)
+    if xml == False:
+        print("no xml in answer")
+        return None
+    else:
+        print(xml)
+        return xml
+
+### set Ticket status on done
+def setTicketDone(id, url, group, host, secret):
+    tmp_args = [id]
+    xml = open_rpc("C3TT.setTicketDone", tmp_args , url, group, host, secret)
+    print(xml)
+    
+### set ticket status on failed an supply a error text
+def setTicketFailed(id,error , url, group, host, secret):
+    tmp_args = [id, error]
+    xml = open_rpc("C3TT.setTicketFailed", tmp_args , url, group, host, secret)
diff --git a/cccffm/__init__.py b/cccffm/__init__.py
new file mode 100644 (file)
index 0000000..d65d02d
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/python3
+
+from renderlib import *
+from easing import *
+
+def introFrames(p):
+       move=50
+
+       yield (
+               ('logo', 'style', 'opacity', '0'),
+               ('club', 'style', 'opacity', '0'),
+               ('id', 'style', 'opacity', '0'),
+               ('title', 'style', 'opacity', '0'),
+               ('person', 'style', 'opacity', '0'),
+       )
+
+       # 2 Sekunde Logo FadeIn
+       frames = 1*fps
+       for i in range(0, frames):
+               yield (
+                       ('logo', 'style', 'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
+               )
+
+       # 1 Sekunde club FadeIn
+       frames = 1*fps
+       for i in range(0, frames):
+               yield (
+                       ('club', 'style', 'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
+               )
+
+       # 2 Sekunde id FadeIn
+       frames = 1*fps
+       for i in range(0, frames):
+               yield (
+                       ('id', 'style', 'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
+               )
+
+       # 1 Sekunde titel Fadein
+       frames = 1*fps
+       for i in range(0, frames):
+               yield (
+                       ('title', 'style',    'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
+                       #('title', 'attr',     'transform', 'translate(%.4f, 0)' % easeOutQuad(i, -move, move, frames)),
+               )
+
+       # 1 Sekunde Person einfaden
+       frames = 1*fps
+       for i in range(0, frames):
+               yield (
+                       ('person', 'style',    'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
+                       #('person', 'attr',     'transform', 'translate(%.4f, 0)' % easeOutQuad(i, -move, move, frames)),
+               )
+
+
+       # 3 Sekunden stehen lassen
+       frames = 3*fps
+       for i in range(0, frames):
+               yield ()
+
+       # 2 Sekunden alles ausfaden
+       frames = 2*fps
+       for i in range(0, frames):
+               yield (
+                       ('person', 'style',    'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
+                       ('logo', 'style',    'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
+                       ('club', 'style',    'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
+                       ('id', 'style',    'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
+                       ('title', 'style',    'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
+               )
+
+       # 2 leere Frames zum Abschluss
+       for i in range(0, 2):
+               yield ()
+
+
+def outroFrames(p):
+       # 5 Sekunden stehen bleiben
+       frames = 5*fps
+       for i in range(0, frames):
+               yield []
+
+def debug():
+       render(
+               'intro.svg',
+               '../intro.ts',
+               introFrames,
+               {
+                       '$type': 'Vortrag',
+                       '$date': '2015-10-24',
+                       '$title': 'Autoboot: Offene Boot Firmware leicht gemacht',
+                       '$person': 'Klemens Nanni (kl3)',
+               }
+       )
+
+       render(
+               'outro.svg',
+               '../outro.ts',
+               outroFrames
+       )
+
+def tasks(queue, args):
+       raise NotImplementedError('call with --debug to render your intro/outro')
diff --git a/cccffm/artwork/intro.svg b/cccffm/artwork/intro.svg
new file mode 100644 (file)
index 0000000..4294136
--- /dev/null
@@ -0,0 +1,341 @@
+<?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="1920"
+   height="1080"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="intro.svg">
+  <metadata
+     id="metadata4188">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4">
+    <inkscape:path-effect
+       effect="powerstroke"
+       id="path-effect4190"
+       is_visible="true"
+       offset_points=""
+       sort_points="true"
+       interpolator_type="Linear"
+       interpolator_beta="0.51764706"
+       start_linecap_type="round"
+       linejoin_type="round"
+       miter_limit="3.4"
+       end_linecap_type="zerowidth" />
+    <linearGradient
+       id="linearGradient3807">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809" />
+      <stop
+         id="stop3815"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:0.78431374;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78431374;"
+         offset="1"
+         id="stop3811" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807"
+       id="linearGradient3813"
+       x1="650"
+       y1="595.07648"
+       x2="1230"
+       y2="595.07648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.99744172,-74.949237,-22.857439)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807"
+       id="linearGradient3819"
+       x1="575.05078"
+       y1="570.69666"
+       x2="1155.0508"
+       y2="570.69666"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807-2"
+       id="linearGradient3819-8"
+       x1="575.05078"
+       y1="570.69666"
+       x2="1155.0508"
+       y2="570.69666"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+    <linearGradient
+       id="linearGradient3807-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809-5" />
+      <stop
+         id="stop3815-1"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3811-1" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.3933139,0,0,1,-1291.5105,359.35582)"
+       y2="570.69666"
+       x2="1155.0508"
+       y1="570.69666"
+       x1="575.05078"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4017-1"
+       xlink:href="#linearGradient3807-2-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3807-2-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809-5-5" />
+      <stop
+         id="stop3815-1-7"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3811-1-0" />
+    </linearGradient>
+    <linearGradient
+       y2="570.69666"
+       x2="1155.0508"
+       y1="570.69666"
+       x1="575.05078"
+       spreadMethod="reflect"
+       gradientTransform="matrix(2.3933139,0,0,1,-842.013,2.87365)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4510"
+       xlink:href="#linearGradient3807-2-2"
+       inkscape:collect="always" />
+    <filter
+       id="filter4858"
+       inkscape:label="Drop Shadow"
+       width="1.2"
+       color-interpolation-filters="sRGB">
+      <feFlood
+         id="feFlood4860"
+         flood-opacity="0.29666666666666669"
+         flood-color="rgb(255,255,255)"
+         result="flood" />
+      <feComposite
+         id="feComposite4862"
+         in2="SourceGraphic"
+         in="flood"
+         operator="in"
+         result="composite1" />
+      <feGaussianBlur
+         id="feGaussianBlur4864"
+         stdDeviation="2"
+         result="blur" />
+      <feOffset
+         id="feOffset4866"
+         dx="2"
+         dy="2.2000000000000002"
+         result="offset" />
+      <feComposite
+         id="feComposite4868"
+         in2="offset"
+         in="SourceGraphic"
+         operator="over"
+         result="composite2"
+         dy="0" />
+    </filter>
+    <inkscape:perspective
+       id="perspective2905"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="853.41033"
+     inkscape:cy="621.04707"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1030"
+     inkscape:window-x="0"
+     inkscape:window-y="21"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-paths="true"
+     inkscape:bbox-nodes="true"
+     inkscape:snap-bbox-edge-midpoints="true"
+     inkscape:snap-bbox-midpoints="true"
+     inkscape:object-paths="false"
+     inkscape:snap-to-guides="true">
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,0"
+       id="guide3017" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,1080"
+       id="guide3019" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="1920,1337.442"
+       id="guide3023" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,25"
+       id="guide3025" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,1048"
+       id="guide3027" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="32,0"
+       id="guide3029" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="1888,0"
+       id="guide3031" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,540"
+       id="guide3821" />
+    <sodipodi:guide
+       position="629.46889,755.68277"
+       orientation="1,0"
+       id="guide4516" />
+    <sodipodi:guide
+       position="1289.8103,532.00001"
+       orientation="1,0"
+       id="guide4518" />
+    <sodipodi:guide
+       position="959.99999,818.57142"
+       orientation="1,0"
+       id="guide5302" />
+  </sodipodi:namedview>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,27.63782)">
+    <rect
+       style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       id="rect3797"
+       width="1920"
+       height="1080"
+       x="0"
+       y="-27.637817" />
+    <g
+       transform="matrix(2.3295434,0,0,-2.3295434,266.28049,1693.1461)"
+       inkscape:label="Platine_ansicht-nick-final"
+       id="logo">
+      <path
+         sodipodi:nodetypes="cccccssccsscccccccccccccccccsccccscccccccccsccccsccccsccsccccccscccccccccccccccccccccccccccccccccsccccccsccccccccscccccccccsccccscccccccccccccccscccccccccccccccscccscccccccccsccccsccccscccccccccscccccccccccsccccccccccccccccccccccccsccccscccccccccccsccccsccccscccccsccccccccsccscccccsccccccscccccccsccccsccccccsccsscccccsscccccscccccsccccsccccccccsccscccccccsccccsccccccccccscccccccsccccscccccccccccsccccscccccccccccccccccsccccscccccccccccsccccscccccccccccscccccccccsccccsccccsccccscccccccccccsccccscccccccccccccccccccccccccccccccccccccccccccccsccccccsccccccccccccccccsccsccsccccccccccsccccccccccccccsccccscccccccccccccccccccccsccccscccccccccccccsccccccccsscccccssccsccccccccsccccccscccccccccccccccccsccccscccccccccccccsssssccccccccssccccccsccscccccccsccccccccccsccccsccccccssccsssccccssccssssccccccccccccccsssssccccccccsccssccsccccccccccccccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+         id="path2913"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 258.1642,550.2832 0,-26.6516 16.8509,-0.0193 c 0.4189,1.2626 1.6112,2.1751 3.0123,2.1751 l 0,-0.004 c 0.8759,0 1.6679,-0.3543 2.2403,-0.9261 0.5768,-0.5768 0.9343,-1.3702 0.9343,-2.2433 0,-0.8759 -0.3558,-1.6702 -0.9304,-2.2448 l -0.002,0.002 c -0.5762,-0.5757 -1.3697,-0.9323 -2.2422,-0.9323 -0.8728,0 -1.6665,0.3572 -2.243,0.9343 -0.3456,0.3461 -0.6126,0.7719 -0.7696,1.2461 l -17.7679,0.0201 c -0.0272,-0.002 -0.0552,-0.004 -0.083,-0.004 l 0,0 c -0.5451,0 -0.9882,0.4365 -1.0001,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c 0.0247,0.6492 0.3484,0.9987 1.0007,1.0185 l 19.0927,-0.021 c 0.1576,0.4729 0.4241,0.8972 0.7694,1.2425 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2402,-0.9263 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.24 0,-0.8759 -0.356,-1.6701 -0.9306,-2.2444 l -0.002,0.002 c -0.574,-0.5735 -1.3672,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8728,0 -1.6668,0.3574 -2.2433,0.9345 -0.3447,0.345 -0.6106,0.7705 -0.7674,1.2453 l -18.0944,0.0198 10e-4,-10e-4 z m 61.2074,2.6011 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2402,-0.9264 l 0.002,-0.002 0.002,-0.002 c 0.5743,-0.576 0.9303,-1.3682 0.9303,-2.2396 0,-0.8759 -0.356,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6667,0.3572 -2.2433,0.9343 -0.4785,0.4791 -0.8053,1.1126 -0.8989,1.8199 l -10.1798,0.0187 0,-5.1234 13.2327,-0.0207 c 0.0295,0.003 0.0593,0.004 0.0893,0.004 0.5525,0 1.0004,-0.4478 1.0004,-1.0003 l 0,-14.3226 c 0,-0.5525 -0.4479,-1.0004 -1.0004,-1.0004 -0.0286,0 -0.0575,0.002 -0.0859,0.004 l -11.9415,0.0204 c -0.1567,-0.4819 -0.4252,-0.9145 -0.7752,-1.2645 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2423,-0.9286 l 0,-0.004 c -0.8727,0 -1.6667,0.3572 -2.2433,0.9343 -0.572,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2397 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.354 2.2403,-0.9264 l 0.002,-0.002 0.002,-0.002 c 0.3415,-0.3422 0.6051,-0.7608 0.7633,-1.2271 l 11.039,-0.0188 0,12.3296 -13.3214,0.021 0,-0.004 -6e-4,0 c -0.5448,0 -0.9882,0.436 -1.0003,0.978 l -3e-4,0 0,0.0224 0,7.1164 0,0.0226 0.004,0 c 0.0122,0.54 0.4536,0.974 0.9964,0.974 l 0.1885,-6e-4 11.3783,-0.0206 c 0.1406,0.2449 0.3138,0.4699 0.5122,0.6686 l 0,0.004 3e-4,-3e-4 z m -15.0466,-28.046 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.3541 2.2403,-0.9264 l 0.002,-0.002 0.002,-0.001 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.1571,-0.1567 -0.3309,-0.2968 -0.5177,-0.4181 l 0,-11.643 0,-0.0227 -5e-4,0 c -0.0122,-0.5417 -0.4553,-0.9776 -0.9998,-0.9776 -0.0289,0 -0.0578,0.002 -0.0859,0.004 l -14.1548,0.0221 c -0.0269,-0.002 -0.0539,-0.004 -0.0816,-0.004 l -3e-4,0 c -0.5369,0 -0.9754,0.4238 -0.9995,0.955 l -9e-4,0 0,0.0454 0,57.2451 c 0,0.5525 0.4482,1.0006 1.0004,1.0006 0.0286,0 0.0567,-10e-4 0.0845,-0.004 l 0.1046,-2e-4 27.4555,-0.0216 0,33.8366 -12.3217,0.0199 0,-16.8565 c 0.472,-0.1568 0.8955,-0.421 1.2399,-0.7643 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9346 -0.5721,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 c 0.3452,0.3453 0.769,0.6109 1.2427,0.7685 l 0,17.8495 c 0.009,0.6228 0.3211,0.9737 1.0006,0.9972 l 14.3223,-0.0227 c 0.6585,-0.0249 0.9919,-0.3574 1.0004,-0.9972 l 0,-35.8058 c 0.002,-0.648 -0.3099,-1.0077 -1.0004,-1.0191 l -27.6443,0.0219 0,-55.253 12.3214,-0.0195 0,10.1426 c -0.7634,0.0666 -1.4519,0.4065 -1.967,0.9224 -0.572,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 0.001,-0.002 z m 43.6924,6.562 c 0.5743,0.5743 1.368,0.9303 2.243,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2405,-0.9263 l 0.002,-0.002 10e-4,-10e-4 c 0.1874,-0.1877 0.3507,-0.398 0.4867,-0.6271 l 10.5908,-0.0192 0,12.3522 -13.096,0.0207 c -0.0726,-0.017 -0.1477,-0.0261 -0.2257,-0.0261 -0.5521,0 -1.0003,0.4479 -1.0003,1.0004 l 0,0.0224 0,7.5532 c 0,0.5524 0.4482,1.0006 1.0003,1.0006 0.0312,0 0.0618,-10e-4 0.0922,-0.004 l 12.8256,-0.0201 c 0.1553,0.3175 0.3628,0.6058 0.6103,0.8535 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2431,0.9304 l 0,-0.004 c 0.8742,0 1.6667,-0.3541 2.2405,-0.9264 l 0.002,-0.002 0.001,-10e-4 c 0.5746,-0.5762 0.9307,-1.3685 0.9307,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2445 l -0.002,0.002 c -0.5738,-0.5734 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3575 -2.2431,0.9346 -0.4365,0.4371 -0.7469,1.0021 -0.8691,1.6345 l -11.6583,0.0187 0,-5.5605 13.2321,-0.0207 c 0.0295,0.003 0.0592,0.004 0.0893,0.004 0.5525,0 1.0006,-0.4478 1.0006,-1.0003 l 0,-14.3226 c 0,-0.5525 -0.4481,-1.0004 -1.0006,-1.0004 l 0,-0.0187 -11.1705,0.0199 c -0.087,-0.724 -0.4175,-1.3737 -0.9074,-1.8635 l -0.002,0.002 c -0.574,-0.5735 -1.3668,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8725,0 -1.6664,0.3574 -2.243,0.9345 -0.572,0.5724 -0.9264,1.3649 -0.9264,2.2408 l -0.004,0 c 0,0.8728 0.3557,1.6651 0.9303,2.24 l 0,0.004 0.002,-0.003 z m 0,-7.1649 c 0.5743,0.5743 1.368,0.9303 2.243,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2405,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.3446,-0.3444 -0.7687,-0.6094 -1.2415,-0.7665 l 0,-10.6917 c 0,-0.5522 -0.4482,-1.0003 -1.0007,-1.0003 l 0,-0.0188 -14.3231,0.0227 0,0.4102 c -0.5522,0 -1.0004,0.4482 -1.0004,1.0006 l 0,57.2905 c 0,0.5525 0.4482,1.0003 1.0004,1.0003 l 0.189,0 0,-0.004 5.9721,-0.005 0,12.9167 c 0.009,0.5893 0.2987,0.9623 1.0006,1.0185 l 19.9125,-0.0204 c 0.1565,0.4813 0.4261,0.9133 0.7764,1.2636 l 0,0.004 c 0.5743,0.5746 1.368,0.9304 2.2431,0.9304 l 0,-0.004 c 0.8742,0 1.6668,-0.3541 2.2405,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.5737,-0.5734 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3575 -2.2431,0.9346 -0.3398,0.3402 -0.6032,0.7571 -0.7605,1.224 l -18.9281,0.0193 0,-11.9427 19.4775,-0.0153 c 0.0666,0.0814 0.1374,0.1591 0.2117,0.2333 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2431,0.9303 l 0,-0.004 c 0.8742,0 1.6667,-0.3541 2.2405,-0.9264 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9307,-1.3683 0.9307,-2.2396 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2448 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2431,0.9343 -0.572,0.5726 -0.9264,1.3652 -0.9264,2.2411 l -0.004,0 0,0.0139 -19.6696,0.0156 c -0.0295,-0.003 -0.0596,-0.004 -0.0896,-0.004 -0.0309,0 -0.0618,10e-4 -0.0919,0.004 l -6.0692,0.005 0,-55.7127 12.3222,-0.0196 0,9.7135 c -0.4725,0.1582 -0.8966,0.4246 -1.2427,0.7713 -0.572,0.5723 -0.9264,1.3649 -0.9264,2.2408 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.2399 l 0,0.004 0.002,-0.002 z m 28.6444,-15.3794 c 0.3452,0.3453 0.769,0.6117 1.2427,0.7694 l 0,55.9332 c 0,0.5525 0.4481,1.0006 1.0006,1.0006 0.0283,0 0.0567,-10e-4 0.0848,-0.004 l 21.1714,-0.0223 c 0.0731,0.017 0.1496,0.0263 0.2276,0.0263 0.5525,0 1.0006,-0.4481 1.0006,-1.0006 l 0,-0.0227 0,-6.1438 12.3216,-0.019 0,6.1855 c 0,0.5525 0.4482,1.0006 1.0004,1.0006 0.0286,0 0.0567,-10e-4 0.0845,-0.004 l 3e-4,0 0.1043,-2e-4 5.9711,-0.006 0,19.4766 -20.3932,0.0204 c -0.0295,-0.003 -0.0593,-0.004 -0.0896,-0.004 -0.5522,0 -1.0004,0.4479 -1.0004,1.0004 l 0,20.467 -12.3216,0.0195 0,-24.014 c 0.4722,-0.1567 0.8957,-0.4209 1.2399,-0.7642 l 0.002,-0.002 10e-4,-10e-4 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9346 -0.5717,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7691,0.6109 1.243,0.7685 l 0,25.0078 c 0,0.5525 0.4479,1.0006 1.0004,1.0006 0.0286,0 0.0569,-0.002 0.0853,-0.004 l 14.0272,-0.0221 c 0.0678,0.0144 0.1381,0.0224 0.2098,0.0224 0.4941,0 0.9037,-0.36 0.9825,-0.8317 0.0102,-0.0539 0.0158,-0.1086 0.0175,-0.165 l 6e-4,0 0,-0.0227 0,-20.4664 20.2785,-0.0201 c 0.066,0.0136 0.1344,0.021 0.2044,0.021 0.4875,0 0.8929,-0.3507 0.9791,-0.8133 0.0122,-0.0595 0.0192,-0.1205 0.0207,-0.1831 l 5e-4,0 0,-0.0213 0,-20.4743 13.2395,-0.0139 c 0.0272,0.002 0.0556,0.004 0.0834,0.004 0.5524,0 1.0003,-0.4481 1.0003,-1.0006 l 0,-55.9145 c 0.4723,-0.1568 0.8958,-0.4221 1.2399,-0.7654 l 0.002,-0.002 0.002,-10e-4 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9343 -0.572,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7691,0.6117 1.2427,0.7694 l 0,54.9153 -19.4828,0.0204 0,-6.164 c 0,-0.0669 -0.007,-0.1326 -0.0195,-0.1958 -0.082,-0.4678 -0.4899,-0.8227 -0.9811,-0.8227 l -14.2336,0.0219 c -0.0295,-0.003 -0.059,-0.004 -0.089,-0.004 -0.5522,0 -1.0004,0.4481 -1.0004,1.0003 l 0,6.1436 -19.4831,0.0204 0,-54.9397 c 0.4723,-0.1568 0.8955,-0.4221 1.2399,-0.7654 l 0.002,-0.002 0.001,-0.001 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9343 -0.5721,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 0.002,-0.004 z m 14.3223,0.004 c 0.3461,0.3461 0.7716,0.6131 1.247,0.7707 l 0,41.6056 c 0,0.5504 0.4461,0.9966 0.9963,0.9966 l 6.9506,-0.0221 c 0.0677,0.0147 0.1389,0.0221 0.2109,0.0221 0.5505,0 0.9966,-0.4462 0.9966,-0.9966 l 0.004,0 0,-0.0227 0,-41.5882 c 0.472,-0.1568 0.8955,-0.4221 1.2396,-0.7654 l 0.002,-0.002 0.002,-10e-4 c 0.5746,-0.5763 0.9303,-1.3686 0.9303,-2.2399 0,-0.8759 -0.3557,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2434,0.9343 -0.5717,0.5726 -0.926,1.3652 -0.926,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7694,0.6117 1.243,0.7693 l 0,40.591 -5.1644,0.0162 0,-40.6097 c 0.4737,-0.1568 0.8983,-0.4227 1.2436,-0.7668 l 0.002,-0.002 0.002,-10e-4 c 0.5743,-0.5763 0.9304,-1.3686 0.9304,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9304,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6667,0.3572 -2.2433,0.9343 -0.5718,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3555,1.665 0.9301,2.2399 l 0,0.004 -10e-5,-0.002 z m 22.1057,0 c 0.1868,0.1868 0.3968,0.3512 0.6253,0.4873 l 0,41.889 0,0.0116 0,0.011 c 0,0.5505 0.4462,0.9967 0.9964,0.9967 l 7.1609,-0.0227 c 0.5502,0 0.9964,-0.4462 0.9964,-0.9966 l 0,-41.4715 c 0.7248,-0.0853 1.3756,-0.4155 1.8663,-0.9048 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2434,0.9343 -0.5717,0.5726 -0.926,1.3652 -0.926,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.93,2.2399 l 0,0.004 c 0.1868,0.1868 0.3963,0.3509 0.6245,0.4867 l 0,40.8963 -5.1675,0.0161 0,-40.4946 c 0.7242,-0.0853 1.3748,-0.4155 1.8652,-0.9045 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9307,-1.3686 0.9307,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2448 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.242,-0.9286 l 0,-0.004 c -0.8728,0 -1.6667,0.3572 -2.2433,0.9343 -0.572,0.5726 -0.9264,1.3652 -0.9264,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.9303,2.2399 l 0,0.004 0.002,-0.002 z m -44.2097,101.9083 c 0.5743,0.5743 1.3677,0.9304 2.243,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.354 2.2406,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9307,-1.3686 0.9307,-2.24 0,-0.8759 -0.3561,-1.6701 -0.9307,-2.2447 l -0.002,0.002 c -0.5741,-0.5735 -1.3669,-0.9287 -2.2423,-0.9287 l 0,-0.004 c -0.3495,0 -0.6865,0.0566 -1.002,0.1627 L 358.1283,593.519 c -0.1953,-0.1953 -0.4513,-0.2931 -0.7073,-0.2931 l 0,-0.0182 -14.2333,0.0218 c -0.0295,-0.003 -0.0587,-0.004 -0.0887,-0.004 -0.5525,0 -1.0004,0.4475 -1.0006,0.9997 l 0,6e-4 0,13.2829 -13.233,0.0209 c -0.0295,-0.002 -0.059,-0.004 -0.089,-0.004 -0.5522,0 -1.0001,0.4476 -1.0004,0.9997 l 0,6e-4 0,20.4676 -6.0735,0.0192 c -0.0289,-0.003 -0.0581,-0.004 -0.0876,-0.004 -0.5522,0 -1.0003,0.4478 -1.0003,1 l 0,6e-4 0,13.3067 -6.073,0.019 c -0.0289,-0.003 -0.0581,-0.004 -0.0876,-0.004 -0.5521,0 -1.0003,0.4479 -1.0006,1.0001 l 0,2e-4 0,49.1358 -5.1605,0.0161 0,-34.8295 c -0.0201,-0.6894 -0.3727,-1.008 -1.0003,-1.0188 l -6.1645,0.0196 0,-32.0758 c 0.2276,-0.1349 0.4374,-0.2973 0.6236,-0.483 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9306,-1.3685 0.9306,-2.2396 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3668,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2433,0.9343 -0.5718,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3558,1.6651 0.9301,2.2396 l 0,0.004 c 0.4912,0.491 1.1418,0.8221 1.8672,0.9077 l 0,32.6508 c 0,0.5502 0.4461,0.9964 0.9966,0.9964 l 0.1888,-6e-4 5.9715,-0.0187 0,34.829 c 5e-4,0.6203 0.2891,0.9973 1.0006,1.0191 l 7.1614,-0.0227 c 0.5503,0 0.9964,-0.4459 0.9964,-0.9961 l 0.004,0 0,-3e-4 0,-49.1357 6.1605,-0.0193 c 0.5429,0 0.9837,-0.4342 0.9958,-0.974 l 0.005,0 0,-0.0224 0,-13.3066 6.1611,-0.0193 c 0.5428,0 0.9836,-0.4343 0.9961,-0.974 l 0.005,0 0,-0.0227 0,-20.4658 13.322,-0.021 c 0.5349,0 0.9711,-0.4221 0.995,-0.9513 l 0.005,0 0,-0.0454 0,-13.2828 12.8827,-0.0196 6.33372,6.33378 5.19358,5.19362 c -0.3506,0.5099 -0.5556,1.129 -0.5556,1.7957 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.24 l 0,0.004 2e-4,8e-4 z m -84.6933,14.3425 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2402,-0.9264 l 0.002,-0.002 0.002,-10e-4 c 0.5743,-0.5763 0.9303,-1.3685 0.9303,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.4898,-0.4895 -1.1395,-0.8201 -1.8632,-0.9065 l 0,-25.4917 0,-0.0218 -6e-4,0 c -0.0116,-0.5426 -0.4547,-0.9785 -1.0001,-0.9785 -0.0309,0 -0.062,10e-4 -0.0924,0.004 l -13.2295,0.0213 0,-27.6696 c 0.0493,-0.6562 -0.2844,-0.9958 -1.0004,-1.0193 l -27.6446,0.0224 0,-55.275 32.415,-0.0213 c 0.1574,0.4731 0.4241,0.8969 0.7694,1.2424 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3544 2.2402,-0.9264 l 0.002,-0.002 10e-4,-0.002 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 l -0.004,0 c 0,-0.8782 -0.354,-1.6719 -0.9263,-2.2442 -0.5723,-0.5723 -1.366,-0.9263 -2.2442,-0.9263 l 0,-0.004 c -0.8728,0 -1.6665,0.3574 -2.2433,0.9343 -0.3447,0.345 -0.6109,0.7699 -0.7674,1.2447 l -33.334,0.0218 c -0.0272,-0.002 -0.0556,-0.004 -0.0836,-0.004 -0.5446,0 -0.9876,0.436 -0.9998,0.9777 l -6e-4,0 0,0.0227 0,57.268 c 0.0128,0.6129 0.3464,0.9451 1.0004,0.997 l 27.6446,-0.0224 0,27.6701 c 5e-4,0.6571 0.3339,0.9967 1.0006,1.0193 l 13.322,-0.0212 0,24.916 c -0.2268,0.1357 -0.4351,0.2999 -0.6214,0.4861 -0.5717,0.5723 -0.926,1.3649 -0.926,2.2408 l -0.004,0 c 0,0.8728 0.3555,1.6651 0.93,2.2399 l 0,0.004 7e-4,-9e-4 z m -14.9439,-14.94 c 0.3461,0.3461 0.7716,0.612 1.2466,0.7696 l 0,18.6738 -13.3256,13.326 -13.3223,-13.322 0,-44.5278 c 0.4725,-0.157 0.8955,-0.4212 1.2399,-0.7648 l 0.002,-0.002 0.001,-0.002 c 0.5745,-0.576 0.9306,-1.3683 0.9306,-2.2397 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2431,0.9343 -0.572,0.5726 -0.9263,1.3652 -0.9263,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.2397 l 0,0.004 c 0.345,0.345 0.7693,0.6106 1.2427,0.7682 l 0,44.9385 0,3e-4 c 0,0.1312 0.0258,0.2565 0.072,0.3713 l 0.002,0.005 c 0.0184,0.0454 0.0402,0.089 0.0652,0.1307 l 0.0232,0.0377 0.003,0.005 c 0.0375,0.0561 0.0797,0.1088 0.127,0.1565 l 14.3229,14.3223 c 0.3904,0.3906 1.0239,0.3906 1.4145,0 l 14.3223,-14.3223 c 0.2175,-0.2175 0.3141,-0.5108 0.2892,-0.7949 l 0,-19.0083 c 0.4739,-0.1567 0.8986,-0.4215 1.2438,-0.7656 l 0.002,-0.002 0.001,-10e-4 c 0.5746,-0.5763 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9346 -0.5718,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 0.002,-3e-4 z m -64.4514,1.2433 c 0.3459,0.3458 0.7719,0.612 1.2467,0.7693 l 0,17.8483 c -0.057,0.6444 0.2373,1.0146 0.9967,1.0208 l 14.3226,-0.0232 c 0.6678,-0.0329 1.0015,-0.3657 1.0003,-0.997 l 0,-34.806 6.0778,-0.003 c 0.0278,0.002 0.055,0.004 0.083,0.004 0.5525,0 1.0007,-0.4481 1.0007,-1.0006 l 0,-28.6447 c 0.017,-0.6366 -0.3164,-0.9765 -1.0007,-1.0193 l -27.6446,0.0224 0,-55.2753 31.1741,-0.0213 c 0.1576,0.4731 0.4232,0.8972 0.7687,1.2427 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 0.8753,0 1.6693,-0.356 2.2436,-0.9303 0.5743,-0.5746 0.9303,-1.3686 0.9303,-2.2439 l -0.004,0 c 0,-0.8742 -0.354,-1.6665 -0.9263,-2.2402 l -0.002,-0.002 -10e-4,-0.001 c -0.5763,-0.5746 -1.3686,-0.9306 -2.2399,-0.9306 -0.8728,0 -1.6668,0.3574 -2.2434,0.9343 -0.3444,0.345 -0.6094,0.7696 -0.7662,1.2444 l -32.0936,0.0221 c -0.0275,-0.002 -0.0555,-0.004 -0.0836,-0.004 -0.5445,0 -0.9876,0.436 -0.9998,0.9777 l -5e-4,0 0,0.0227 0,57.268 c 0.0368,0.6296 0.3702,0.9621 1.0003,0.997 l 27.6449,-0.0224 0,26.6743 -6.0707,0.003 c -0.0295,-0.003 -0.0598,-0.004 -0.0901,-0.004 -0.0309,0 -0.061,10e-4 -0.091,0.004 l -30.5209,0.0184 c -0.1565,-0.4833 -0.4264,-0.915 -0.7773,-1.2659 l -0.002,0.002 c -0.574,-0.5735 -1.3671,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8728,0 -1.6668,0.3574 -2.2433,0.9345 -0.5718,0.5724 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.24 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2402,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.341,-0.3419 0.6052,-0.7606 0.7637,-1.226 l 29.6249,-0.0176 0,33.8105 -12.3257,0.0199 0,-16.8778 c 0.474,-0.1568 0.8983,-0.4215 1.2439,-0.7659 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9306,-1.3686 0.9306,-2.2399 0,-0.8756 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.5737,-0.5737 -1.3669,-0.9286 -2.2419,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9343 -0.572,0.5726 -0.9263,1.3652 -0.9263,2.2408 l -0.004,0 c 0,0.8728 0.3557,1.6653 0.9303,2.2399 l 0,0.004 0.001,-0.002 z m -28.6449,-27.0919 c 0.345,0.3453 0.7696,0.6109 1.243,0.7682 l 0,29.6017 -12.3219,0.0198 0,-48.1388 24.9046,-0.0173 c 0.138,0.2356 0.305,0.4527 0.4969,0.6446 l 0,0.004 c 0.5743,0.5746 1.3677,0.9303 2.2431,0.9303 0.8756,0 1.6696,-0.3557 2.2441,-0.9303 0.5741,-0.574 0.9304,-1.3677 0.9304,-2.2436 0,-0.8756 -0.3561,-1.6694 -0.9304,-2.2436 -0.5745,-0.5746 -1.3685,-0.9304 -2.2441,-0.9304 -0.8754,0 -1.6688,0.3561 -2.2431,0.9304 l 0,0.004 c -0.4859,0.4862 -0.815,1.1277 -0.9051,1.8426 l -31.6576,0.0218 0,-55.2753 32.9269,-0.0216 c 0.1577,0.4734 0.4235,0.8972 0.7688,1.2427 l 0,0.004 c 0.5743,0.5743 1.3677,0.9303 2.2431,0.9303 0.8756,0 1.6696,-0.356 2.2441,-0.9303 0.5743,-0.5746 0.9304,-1.3683 0.9304,-2.2439 l -0.004,0 c 0,-0.8782 -0.354,-1.6719 -0.9264,-2.2442 l -0.004,0 c -0.5721,-0.5717 -1.3643,-0.9263 -2.2402,-0.9263 l 0,-0.004 c -0.8728,0 -1.6665,0.3574 -2.2431,0.9343 -0.3447,0.345 -0.6094,0.7699 -0.7662,1.2447 l -33.8465,0.0218 c -0.0272,-0.002 -0.0556,-0.004 -0.0836,-0.004 -0.5446,0 -0.9876,0.436 -0.9998,0.9777 l -6e-4,0 0,0.0227 0,57.268 c 0.1128,0.5843 0.4465,0.9165 1.0004,0.997 l 6.1611,-0.004 0,49.1358 c 0,0.5524 0.4478,1.0003 1.0003,1.0003 0.0289,0 0.0578,-0.002 0.0865,-0.004 l 0.1026,-2e-4 14.1335,-0.023 c 0.5423,0 0.9836,-0.4337 0.9964,-0.9731 l 0.004,0 0,-0.0233 0,-30.6 c 0.4725,-0.1567 0.8954,-0.4212 1.2398,-0.7648 l 0.002,-0.002 0.001,-0.001 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.24 0,-0.8759 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.574,-0.5734 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3575 -2.2433,0.9346 -0.5718,0.5726 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8728 0.3555,1.6654 0.9301,2.24 l 0,0.004 0.001,-0.002 z m 56.6702,-30.8196 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 0.8753,0 1.6693,-0.356 2.2436,-0.9303 0.5743,-0.5743 0.9303,-1.3683 0.9303,-2.2437 l -0.004,0 c 0,-0.8756 -0.354,-1.6684 -0.9263,-2.2408 -0.5766,-0.5771 -1.3706,-0.9345 -2.2436,-0.9345 -0.8728,0 -1.6668,0.3574 -2.2434,0.9345 -0.3447,0.345 -0.6097,0.7702 -0.7665,1.2453 l -16.8539,0.0198 0,-26.6519 16.8511,-0.0198 c 0.1576,0.4751 0.4235,0.8997 0.7696,1.2458 0.5743,0.5743 1.3677,0.9301 2.2431,0.9301 0.8725,0 1.665,-0.3558 2.2399,-0.9301 l 0.004,0 c 0.5743,-0.5746 0.9303,-1.368 0.9303,-2.2433 0,-0.8734 -0.3557,-1.6662 -0.93,-2.2408 -0.5769,-0.5771 -1.3709,-0.9343 -2.2439,-0.9343 -0.8731,0 -1.6671,0.3572 -2.2437,0.9343 -0.3455,0.3461 -0.6114,0.7713 -0.7687,1.2453 l -17.769,0.0209 c -0.0269,-0.002 -0.055,-0.004 -0.0828,-0.004 l -3e-4,0 c -0.5448,0 -0.9878,0.4365 -0.9997,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c -0.006,0.5945 0.328,0.934 1.0003,1.0185 l 17.8529,-0.021 c 0.1574,0.4726 0.423,0.8972 0.7682,1.2425 l 0,0.004 -3e-4,-2e-4 z m -41.2146,-0.6223 c 0.5743,0.5743 1.3677,0.9304 2.2431,0.9304 0.8756,0 1.6696,-0.3558 2.2441,-0.9304 0.5741,-0.5743 0.9304,-1.368 0.9304,-2.2436 0,-0.8759 -0.3561,-1.6693 -0.9304,-2.2439 -0.5745,-0.5743 -1.3685,-0.9303 -2.2441,-0.9303 -0.8754,0 -1.6688,0.356 -2.2431,0.9303 l 0,0.004 c -0.4912,0.4912 -0.822,1.1426 -0.9076,1.8669 l -18.4658,0.0195 0,-26.6519 18.6041,-0.0198 c 0.1573,0.4748 0.4235,0.9 0.7693,1.2458 l 0.004,0 c 0.5746,0.574 1.3669,0.9301 2.2394,0.9301 0.8756,0 1.6693,-0.3558 2.2439,-0.9301 l -0.002,-0.002 c 0.5757,-0.5765 0.9326,-1.3694 0.9326,-2.2413 0,-0.8734 -0.3558,-1.6659 -0.9304,-2.2408 -0.5743,-0.5746 -1.368,-0.9303 -2.2441,-0.9303 l 0,-0.004 c -0.8728,0 -1.6665,0.3572 -2.2434,0.9343 -0.3455,0.3461 -0.6111,0.7713 -0.7687,1.2453 l -19.5217,0.0209 c -0.0272,-0.002 -0.0552,-0.004 -0.083,-0.004 l 0,0 c -0.5451,0 -0.9882,0.4365 -1.0001,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c 0.0188,0.6548 0.3323,1.0148 1.0007,1.0185 l 19.891,-0.0212 c 0.1352,0.2262 0.2973,0.4348 0.4827,0.6202 l 0,0.004 -3e-4,0 z m 2.2436,-29.2098 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 85.4241,-14.3224 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4733,1.0573 1.0576,1.0573 z m -44.2095,0 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -41.2146,0 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 0,42.3459 c 0.584,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 41.2146,-28.0235 c 0.584,0 1.0574,-0.4734 1.0574,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 0,28.6452 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 42.9679,-28.6452 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -85.3155,42.3473 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 86.5571,-13.7021 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4733,1.0573 1.0576,1.0573 z m 28.0233,29.2666 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4733,1.0574 1.0576,1.0574 z m -128.9027,1.5531 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 9.3345,12.1524 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 19.3104,14.9394 c 0.584,0 1.0574,-0.4734 1.0574,-1.0576 0,-0.5839 -0.4734,-1.0573 -1.0574,-1.0573 -0.5842,0 -1.0576,0.4734 -1.0576,1.0573 0,0.5842 0.4734,1.0576 1.0576,1.0576 z m 35.8061,-27.0884 c 0.5843,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.584 0.4734,1.0574 1.0573,1.0574 z m 28.6453,25.8451 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 14.9439,14.94 c 0.584,0 1.0574,-0.4733 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 13.0811,-0.0139 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 71.6119,-14.3285 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4733 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 14.9434,-28.0179 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -20.0355,-0.5811 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.584,0 -1.0574,0.4734 -1.0574,1.0576 0,0.584 0.4734,1.0574 1.0574,1.0574 z m 5e-4,-14.9619 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 0,-13.7009 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.584 0.4734,1.0574 1.0573,1.0574 z m 70.164,-44.6505 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -13.701,0.004 c 0.5843,0 1.0577,-0.4734 1.0577,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0577,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m -7.1614,0 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -14.9443,0 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -7.1614,0 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -14.3223,-0.004 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4733,1.0574 1.0576,1.0574 z m -28.6447,15.3793 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 0,7.1649 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4733 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m -43.6921,-6.5619 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 0,7.1844 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4733,-1.0577 -1.0573,-1.0577 -0.5842,0 -1.0576,0.4734 -1.0576,1.0577 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 15.0466,20.8615 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="959.40997"
+       y="568.20935"
+       id="club"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5836"
+         x="959.40997"
+         y="568.20935"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.375px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1">Chaos Computer Club Frankfurt</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="961.37671"
+       y="778.88611"
+       id="title"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="961.37671"
+         y="778.88611"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1"
+         id="tspan5272"><tspan
+           id="tspan5310"
+           style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:70px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1">$title</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="959.40997"
+       y="656.20935"
+       id="text5834-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5836-3"
+         x="959.40997"
+         y="656.20935"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.34918976px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="960.70367"
+       y="646.88611"
+       id="id"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5296"
+         x="960.70367"
+         y="646.88611"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';text-align:center;text-anchor:middle;fill:#ffffff">$type vom $date</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="960.31573"
+       y="879.79077"
+       id="person"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5306"
+         x="960.31573"
+         y="879.79077"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';text-align:center;text-anchor:middle;fill:#ffffff">$person</tspan></text>
+  </g>
+</svg>
diff --git a/cccffm/artwork/outro.svg b/cccffm/artwork/outro.svg
new file mode 100644 (file)
index 0000000..1289581
--- /dev/null
@@ -0,0 +1,355 @@
+<?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="1920"
+   height="1080"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="outro.svg"
+   inkscape:export-filename="/home/andremax/source/intro-outro-generator/cccffm/artwork/outro.png"
+   inkscape:export-xdpi="150"
+   inkscape:export-ydpi="150">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3807">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809" />
+      <stop
+         id="stop3815"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:0.78431374;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78431374;"
+         offset="1"
+         id="stop3811" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807"
+       id="linearGradient3813"
+       x1="650"
+       y1="595.07648"
+       x2="1230"
+       y2="595.07648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.99744172,-74.949237,-22.857439)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807"
+       id="linearGradient3819"
+       x1="575.05078"
+       y1="570.69666"
+       x2="1155.0508"
+       y2="570.69666"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3807-2"
+       id="linearGradient3819-8"
+       x1="575.05078"
+       y1="570.69666"
+       x2="1155.0508"
+       y2="570.69666"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+    <linearGradient
+       id="linearGradient3807-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809-5" />
+      <stop
+         id="stop3815-1"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3811-1" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.3933139,0,0,1,-1291.5105,359.35582)"
+       y2="570.69666"
+       x2="1155.0508"
+       y1="570.69666"
+       x1="575.05078"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4017-1"
+       xlink:href="#linearGradient3807-2-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3807-2-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3809-5-5" />
+      <stop
+         id="stop3815-1-7"
+         offset="0.2"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3811-1-0" />
+    </linearGradient>
+    <linearGradient
+       y2="570.69666"
+       x2="1155.0508"
+       y1="570.69666"
+       x1="575.05078"
+       spreadMethod="reflect"
+       gradientTransform="matrix(2.3933139,0,0,1,-842.013,2.87365)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4510"
+       xlink:href="#linearGradient3807-2-2"
+       inkscape:collect="always" />
+    <filter
+       id="filter4858"
+       inkscape:label="Drop Shadow"
+       width="1.2"
+       color-interpolation-filters="sRGB">
+      <feFlood
+         id="feFlood4860"
+         flood-opacity="0.29666666666666669"
+         flood-color="rgb(255,255,255)"
+         result="flood" />
+      <feComposite
+         id="feComposite4862"
+         in2="SourceGraphic"
+         in="flood"
+         operator="in"
+         result="composite1" />
+      <feGaussianBlur
+         id="feGaussianBlur4864"
+         stdDeviation="2"
+         result="blur" />
+      <feOffset
+         id="feOffset4866"
+         dx="2"
+         dy="2.2000000000000002"
+         result="offset" />
+      <feComposite
+         id="feComposite4868"
+         in2="offset"
+         in="SourceGraphic"
+         operator="over"
+         result="composite2"
+         dy="0" />
+    </filter>
+    <inkscape:perspective
+       id="perspective2905"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.49497475"
+     inkscape:cx="450.73136"
+     inkscape:cy="548.91977"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1030"
+     inkscape:window-x="0"
+     inkscape:window-y="21"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-paths="true"
+     inkscape:bbox-nodes="true"
+     inkscape:snap-bbox-edge-midpoints="true"
+     inkscape:snap-bbox-midpoints="true"
+     inkscape:object-paths="false"
+     inkscape:snap-to-guides="true">
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,0"
+       id="guide3017" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,1080"
+       id="guide3019" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="0,0"
+       id="guide3021" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="1920,1337.442"
+       id="guide3023" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,25"
+       id="guide3025" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,1048"
+       id="guide3027" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="32,0"
+       id="guide3029" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="1888,0"
+       id="guide3031" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="960,1080"
+       id="guide3819" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0,540"
+       id="guide3821" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,27.63782)">
+    <rect
+       style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       id="rect3797"
+       width="1920"
+       height="1080"
+       x="0"
+       y="-27.637817" />
+    <g
+       id="g4242"
+       transform="translate(0,44.027203)">
+      <g
+         transform="matrix(0.75506019,0,0,0.75506019,618.25712,620.85048)"
+         id="g4318">
+        <g
+           id="g7677"
+           transform="translate(82.473109,1.8769e-6)">
+          <path
+             style="fill:#ffffff"
+             inkscape:connector-curvature="0"
+             id="path37"
+             d="m 296.517,177.191 c 0,-2.319 -1.882,-4.197 -4.197,-4.197 l -26.587,0 c -2.318,0 -4.197,1.878 -4.197,4.197 l 0,26.589 7.416,0 0,31.484 20.149,0 0,-31.484 7.416,0 0,-26.589 0,0 z" />
+          <circle
+             style="fill:#ffffff"
+             id="circle39"
+             cx="279.026"
+             cy="160.39999"
+             r="9.0950003" />
+          <path
+             style="fill:#ffffff"
+             inkscape:connector-curvature="0"
+             id="path41"
+             d="m 278.945,128.285 c -18.007,0 -33.247,6.282 -45.72,18.849 -12.801,13 -19.198,28.384 -19.198,46.151 0,17.766 6.397,33.043 19.198,45.826 12.798,12.783 28.039,19.174 45.72,19.174 17.896,0 33.408,-6.443 46.533,-19.337 12.364,-12.239 18.549,-27.462 18.549,-45.664 0,-18.202 -6.292,-33.585 -18.874,-46.151 -12.584,-12.566 -27.986,-18.848 -46.208,-18.848 z m 0.162,11.697 c 14.753,0 27.279,5.199 37.586,15.601 10.412,10.292 15.617,22.857 15.617,37.701 0,14.949 -5.097,27.354 -15.294,37.213 -10.739,10.616 -23.375,15.924 -37.909,15.924 -14.536,0 -27.064,-5.252 -37.585,-15.761 -10.521,-10.509 -15.782,-22.967 -15.782,-37.376 0,-14.409 5.315,-26.976 15.945,-37.701 10.198,-10.401 22.669,-15.601 37.422,-15.601 z" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.75506019,0,0,0.75506019,816.61646,620.85048)"
+         id="g2552">
+        <path
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0"
+           id="path2554"
+           d="m 278.648,128.196 c -17.835,0 -33.527,6.6 -45.653,18.903 -12.482,12.663 -19.259,29.068 -19.259,46.188 0,17.296 6.598,33.346 19.082,45.829 12.483,12.484 28.71,19.258 45.83,19.258 17.118,0 33.704,-6.775 46.543,-19.437 12.127,-11.948 18.546,-27.819 18.546,-45.652 0,-17.654 -6.419,-33.704 -18.725,-46.009 -12.484,-12.48 -28.532,-19.08 -46.364,-19.08 z m 0.177,11.77 c 14.624,0 27.643,5.527 37.806,15.692 9.986,9.986 15.335,23.183 15.335,37.626 0,14.623 -5.172,27.461 -15.156,37.271 -10.523,10.344 -24.075,15.872 -37.984,15.872 -14.086,0 -27.283,-5.528 -37.448,-15.693 -10.165,-10.165 -15.871,-23.539 -15.871,-37.448 0,-14.088 5.706,-27.461 15.871,-37.805 9.985,-10.165 22.825,-15.515 37.447,-15.515 z" />
+        <path
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0"
+           id="path2556"
+           d="m 277.987,182.471 c -3.677,-6.704 -9.95,-9.373 -17.231,-9.373 -10.599,0 -19.034,7.497 -19.034,20.188 0,12.905 7.931,20.188 19.394,20.188 7.355,0 13.629,-4.038 17.087,-10.165 l -8.073,-4.11 c -1.804,4.326 -4.544,5.624 -8.003,5.624 -5.985,0 -8.725,-4.975 -8.725,-11.535 0,-6.561 2.309,-11.538 8.725,-11.538 1.729,0 5.19,0.939 7.21,5.263 l 8.65,-4.542 z" />
+        <path
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0"
+           id="path2558"
+           d="m 315.536,182.471 c -3.677,-6.704 -9.95,-9.373 -17.231,-9.373 -10.599,0 -19.034,7.497 -19.034,20.188 0,12.905 7.931,20.188 19.396,20.188 7.354,0 13.627,-4.038 17.088,-10.165 l -8.074,-4.11 c -1.804,4.326 -4.542,5.624 -8.003,5.624 -5.985,0 -8.726,-4.975 -8.726,-11.535 0,-6.561 2.31,-11.538 8.726,-11.538 1.729,0 5.19,0.939 7.21,5.263 l 8.648,-4.542 z" />
+      </g>
+    </g>
+    <g
+       transform="matrix(2.3295434,0,0,-2.3295434,266.64088,1685.1461)"
+       inkscape:label="Platine_ansicht-nick-final"
+       id="logo">
+      <path
+         sodipodi:nodetypes="cccccssccsscccccccccccccccccsccccscccccccccsccccsccccsccsccccccscccccccccccccccccccccccccccccccccsccccccsccccccccscccccccccsccccscccccccccccccccscccccccccccccccscccscccccccccsccccsccccscccccccccscccccccccccsccccccccccccccccccccccccsccccscccccccccccsccccsccccscccccsccccccccsccscccccsccccccscccccccsccccsccccccsccsscccccsscccccscccccsccccsccccccccsccscccccccsccccsccccccccccscccccccsccccscccccccccccsccccscccccccccccccccccsccccscccccccccccsccccscccccccccccscccccccccsccccsccccsccccscccccccccccsccccscccccccccccccccccccccccccccccccccccccccccccccsccccccsccccccccccccccccsccsccsccccccccccsccccccccccccccsccccscccccccccccccccccccccsccccscccccccccccccsccccccccsscccccssccsccccccccsccccccscccccccccccccccccsccccscccccccccccccsssssccccccccssccccccsccscccccccsccccccccccsccccsccccccssccsssccccssccssssccccccccccccccsssssccccccccsccssccsccccccccccccccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+         id="path2913"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 258.1642,550.2832 0,-26.6516 16.8509,-0.0193 c 0.4189,1.2626 1.6112,2.1751 3.0123,2.1751 l 0,-0.004 c 0.8759,0 1.6679,-0.3543 2.2403,-0.9261 0.5768,-0.5768 0.9343,-1.3702 0.9343,-2.2433 0,-0.8759 -0.3558,-1.6702 -0.9304,-2.2448 l -0.002,0.002 c -0.5762,-0.5757 -1.3697,-0.9323 -2.2422,-0.9323 -0.8728,0 -1.6665,0.3572 -2.243,0.9343 -0.3456,0.3461 -0.6126,0.7719 -0.7696,1.2461 l -17.7679,0.0201 c -0.0272,-0.002 -0.0552,-0.004 -0.083,-0.004 l 0,0 c -0.5451,0 -0.9882,0.4365 -1.0001,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c 0.0247,0.6492 0.3484,0.9987 1.0007,1.0185 l 19.0927,-0.021 c 0.1576,0.4729 0.4241,0.8972 0.7694,1.2425 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2402,-0.9263 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.24 0,-0.8759 -0.356,-1.6701 -0.9306,-2.2444 l -0.002,0.002 c -0.574,-0.5735 -1.3672,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8728,0 -1.6668,0.3574 -2.2433,0.9345 -0.3447,0.345 -0.6106,0.7705 -0.7674,1.2453 l -18.0944,0.0198 10e-4,-10e-4 z m 61.2074,2.6011 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2402,-0.9264 l 0.002,-0.002 0.002,-0.002 c 0.5743,-0.576 0.9303,-1.3682 0.9303,-2.2396 0,-0.8759 -0.356,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6667,0.3572 -2.2433,0.9343 -0.4785,0.4791 -0.8053,1.1126 -0.8989,1.8199 l -10.1798,0.0187 0,-5.1234 13.2327,-0.0207 c 0.0295,0.003 0.0593,0.004 0.0893,0.004 0.5525,0 1.0004,-0.4478 1.0004,-1.0003 l 0,-14.3226 c 0,-0.5525 -0.4479,-1.0004 -1.0004,-1.0004 -0.0286,0 -0.0575,0.002 -0.0859,0.004 l -11.9415,0.0204 c -0.1567,-0.4819 -0.4252,-0.9145 -0.7752,-1.2645 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2423,-0.9286 l 0,-0.004 c -0.8727,0 -1.6667,0.3572 -2.2433,0.9343 -0.572,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2397 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.354 2.2403,-0.9264 l 0.002,-0.002 0.002,-0.002 c 0.3415,-0.3422 0.6051,-0.7608 0.7633,-1.2271 l 11.039,-0.0188 0,12.3296 -13.3214,0.021 0,-0.004 -6e-4,0 c -0.5448,0 -0.9882,0.436 -1.0003,0.978 l -3e-4,0 0,0.0224 0,7.1164 0,0.0226 0.004,0 c 0.0122,0.54 0.4536,0.974 0.9964,0.974 l 0.1885,-6e-4 11.3783,-0.0206 c 0.1406,0.2449 0.3138,0.4699 0.5122,0.6686 l 0,0.004 3e-4,-3e-4 z m -15.0466,-28.046 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.3541 2.2403,-0.9264 l 0.002,-0.002 0.002,-0.001 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.1571,-0.1567 -0.3309,-0.2968 -0.5177,-0.4181 l 0,-11.643 0,-0.0227 -5e-4,0 c -0.0122,-0.5417 -0.4553,-0.9776 -0.9998,-0.9776 -0.0289,0 -0.0578,0.002 -0.0859,0.004 l -14.1548,0.0221 c -0.0269,-0.002 -0.0539,-0.004 -0.0816,-0.004 l -3e-4,0 c -0.5369,0 -0.9754,0.4238 -0.9995,0.955 l -9e-4,0 0,0.0454 0,57.2451 c 0,0.5525 0.4482,1.0006 1.0004,1.0006 0.0286,0 0.0567,-10e-4 0.0845,-0.004 l 0.1046,-2e-4 27.4555,-0.0216 0,33.8366 -12.3217,0.0199 0,-16.8565 c 0.472,-0.1568 0.8955,-0.421 1.2399,-0.7643 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9346 -0.5721,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 c 0.3452,0.3453 0.769,0.6109 1.2427,0.7685 l 0,17.8495 c 0.009,0.6228 0.3211,0.9737 1.0006,0.9972 l 14.3223,-0.0227 c 0.6585,-0.0249 0.9919,-0.3574 1.0004,-0.9972 l 0,-35.8058 c 0.002,-0.648 -0.3099,-1.0077 -1.0004,-1.0191 l -27.6443,0.0219 0,-55.253 12.3214,-0.0195 0,10.1426 c -0.7634,0.0666 -1.4519,0.4065 -1.967,0.9224 -0.572,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 0.001,-0.002 z m 43.6924,6.562 c 0.5743,0.5743 1.368,0.9303 2.243,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2405,-0.9263 l 0.002,-0.002 10e-4,-10e-4 c 0.1874,-0.1877 0.3507,-0.398 0.4867,-0.6271 l 10.5908,-0.0192 0,12.3522 -13.096,0.0207 c -0.0726,-0.017 -0.1477,-0.0261 -0.2257,-0.0261 -0.5521,0 -1.0003,0.4479 -1.0003,1.0004 l 0,0.0224 0,7.5532 c 0,0.5524 0.4482,1.0006 1.0003,1.0006 0.0312,0 0.0618,-10e-4 0.0922,-0.004 l 12.8256,-0.0201 c 0.1553,0.3175 0.3628,0.6058 0.6103,0.8535 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2431,0.9304 l 0,-0.004 c 0.8742,0 1.6667,-0.3541 2.2405,-0.9264 l 0.002,-0.002 0.001,-10e-4 c 0.5746,-0.5762 0.9307,-1.3685 0.9307,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2445 l -0.002,0.002 c -0.5738,-0.5734 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3575 -2.2431,0.9346 -0.4365,0.4371 -0.7469,1.0021 -0.8691,1.6345 l -11.6583,0.0187 0,-5.5605 13.2321,-0.0207 c 0.0295,0.003 0.0592,0.004 0.0893,0.004 0.5525,0 1.0006,-0.4478 1.0006,-1.0003 l 0,-14.3226 c 0,-0.5525 -0.4481,-1.0004 -1.0006,-1.0004 l 0,-0.0187 -11.1705,0.0199 c -0.087,-0.724 -0.4175,-1.3737 -0.9074,-1.8635 l -0.002,0.002 c -0.574,-0.5735 -1.3668,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8725,0 -1.6664,0.3574 -2.243,0.9345 -0.572,0.5724 -0.9264,1.3649 -0.9264,2.2408 l -0.004,0 c 0,0.8728 0.3557,1.6651 0.9303,2.24 l 0,0.004 0.002,-0.003 z m 0,-7.1649 c 0.5743,0.5743 1.368,0.9303 2.243,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2405,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.3446,-0.3444 -0.7687,-0.6094 -1.2415,-0.7665 l 0,-10.6917 c 0,-0.5522 -0.4482,-1.0003 -1.0007,-1.0003 l 0,-0.0188 -14.3231,0.0227 0,0.4102 c -0.5522,0 -1.0004,0.4482 -1.0004,1.0006 l 0,57.2905 c 0,0.5525 0.4482,1.0003 1.0004,1.0003 l 0.189,0 0,-0.004 5.9721,-0.005 0,12.9167 c 0.009,0.5893 0.2987,0.9623 1.0006,1.0185 l 19.9125,-0.0204 c 0.1565,0.4813 0.4261,0.9133 0.7764,1.2636 l 0,0.004 c 0.5743,0.5746 1.368,0.9304 2.2431,0.9304 l 0,-0.004 c 0.8742,0 1.6668,-0.3541 2.2405,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.5737,-0.5734 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3575 -2.2431,0.9346 -0.3398,0.3402 -0.6032,0.7571 -0.7605,1.224 l -18.9281,0.0193 0,-11.9427 19.4775,-0.0153 c 0.0666,0.0814 0.1374,0.1591 0.2117,0.2333 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2431,0.9303 l 0,-0.004 c 0.8742,0 1.6667,-0.3541 2.2405,-0.9264 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9307,-1.3683 0.9307,-2.2396 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2448 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2431,0.9343 -0.572,0.5726 -0.9264,1.3652 -0.9264,2.2411 l -0.004,0 0,0.0139 -19.6696,0.0156 c -0.0295,-0.003 -0.0596,-0.004 -0.0896,-0.004 -0.0309,0 -0.0618,10e-4 -0.0919,0.004 l -6.0692,0.005 0,-55.7127 12.3222,-0.0196 0,9.7135 c -0.4725,0.1582 -0.8966,0.4246 -1.2427,0.7713 -0.572,0.5723 -0.9264,1.3649 -0.9264,2.2408 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.2399 l 0,0.004 0.002,-0.002 z m 28.6444,-15.3794 c 0.3452,0.3453 0.769,0.6117 1.2427,0.7694 l 0,55.9332 c 0,0.5525 0.4481,1.0006 1.0006,1.0006 0.0283,0 0.0567,-10e-4 0.0848,-0.004 l 21.1714,-0.0223 c 0.0731,0.017 0.1496,0.0263 0.2276,0.0263 0.5525,0 1.0006,-0.4481 1.0006,-1.0006 l 0,-0.0227 0,-6.1438 12.3216,-0.019 0,6.1855 c 0,0.5525 0.4482,1.0006 1.0004,1.0006 0.0286,0 0.0567,-10e-4 0.0845,-0.004 l 3e-4,0 0.1043,-2e-4 5.9711,-0.006 0,19.4766 -20.3932,0.0204 c -0.0295,-0.003 -0.0593,-0.004 -0.0896,-0.004 -0.5522,0 -1.0004,0.4479 -1.0004,1.0004 l 0,20.467 -12.3216,0.0195 0,-24.014 c 0.4722,-0.1567 0.8957,-0.4209 1.2399,-0.7642 l 0.002,-0.002 10e-4,-10e-4 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9346 -0.5717,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7691,0.6109 1.243,0.7685 l 0,25.0078 c 0,0.5525 0.4479,1.0006 1.0004,1.0006 0.0286,0 0.0569,-0.002 0.0853,-0.004 l 14.0272,-0.0221 c 0.0678,0.0144 0.1381,0.0224 0.2098,0.0224 0.4941,0 0.9037,-0.36 0.9825,-0.8317 0.0102,-0.0539 0.0158,-0.1086 0.0175,-0.165 l 6e-4,0 0,-0.0227 0,-20.4664 20.2785,-0.0201 c 0.066,0.0136 0.1344,0.021 0.2044,0.021 0.4875,0 0.8929,-0.3507 0.9791,-0.8133 0.0122,-0.0595 0.0192,-0.1205 0.0207,-0.1831 l 5e-4,0 0,-0.0213 0,-20.4743 13.2395,-0.0139 c 0.0272,0.002 0.0556,0.004 0.0834,0.004 0.5524,0 1.0003,-0.4481 1.0003,-1.0006 l 0,-55.9145 c 0.4723,-0.1568 0.8958,-0.4221 1.2399,-0.7654 l 0.002,-0.002 0.002,-10e-4 c 0.5745,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.5741,-0.5737 -1.3672,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9343 -0.572,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3554,1.6651 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7691,0.6117 1.2427,0.7694 l 0,54.9153 -19.4828,0.0204 0,-6.164 c 0,-0.0669 -0.007,-0.1326 -0.0195,-0.1958 -0.082,-0.4678 -0.4899,-0.8227 -0.9811,-0.8227 l -14.2336,0.0219 c -0.0295,-0.003 -0.059,-0.004 -0.089,-0.004 -0.5522,0 -1.0004,0.4481 -1.0004,1.0003 l 0,6.1436 -19.4831,0.0204 0,-54.9397 c 0.4723,-0.1568 0.8955,-0.4221 1.2399,-0.7654 l 0.002,-0.002 0.001,-0.001 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9343 -0.5721,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 0.002,-0.004 z m 14.3223,0.004 c 0.3461,0.3461 0.7716,0.6131 1.247,0.7707 l 0,41.6056 c 0,0.5504 0.4461,0.9966 0.9963,0.9966 l 6.9506,-0.0221 c 0.0677,0.0147 0.1389,0.0221 0.2109,0.0221 0.5505,0 0.9966,-0.4462 0.9966,-0.9966 l 0.004,0 0,-0.0227 0,-41.5882 c 0.472,-0.1568 0.8955,-0.4221 1.2396,-0.7654 l 0.002,-0.002 0.002,-10e-4 c 0.5746,-0.5763 0.9303,-1.3686 0.9303,-2.2399 0,-0.8759 -0.3557,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2434,0.9343 -0.5717,0.5726 -0.926,1.3652 -0.926,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.93,2.2399 l 0,0.004 c 0.3453,0.3453 0.7694,0.6117 1.243,0.7693 l 0,40.591 -5.1644,0.0162 0,-40.6097 c 0.4737,-0.1568 0.8983,-0.4227 1.2436,-0.7668 l 0.002,-0.002 0.002,-10e-4 c 0.5743,-0.5763 0.9304,-1.3686 0.9304,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9304,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6667,0.3572 -2.2433,0.9343 -0.5718,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3555,1.665 0.9301,2.2399 l 0,0.004 -10e-5,-0.002 z m 22.1057,0 c 0.1868,0.1868 0.3968,0.3512 0.6253,0.4873 l 0,41.889 0,0.0116 0,0.011 c 0,0.5505 0.4462,0.9967 0.9964,0.9967 l 7.1609,-0.0227 c 0.5502,0 0.9964,-0.4462 0.9964,-0.9966 l 0,-41.4715 c 0.7248,-0.0853 1.3756,-0.4155 1.8663,-0.9048 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2434,0.9343 -0.5717,0.5726 -0.926,1.3652 -0.926,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.93,2.2399 l 0,0.004 c 0.1868,0.1868 0.3963,0.3509 0.6245,0.4867 l 0,40.8963 -5.1675,0.0161 0,-40.4946 c 0.7242,-0.0853 1.3748,-0.4155 1.8652,-0.9045 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9307,-1.3686 0.9307,-2.2399 0,-0.8759 -0.3561,-1.6702 -0.9307,-2.2448 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.242,-0.9286 l 0,-0.004 c -0.8728,0 -1.6667,0.3572 -2.2433,0.9343 -0.572,0.5726 -0.9264,1.3652 -0.9264,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.665 0.9303,2.2399 l 0,0.004 0.002,-0.002 z m -44.2097,101.9083 c 0.5743,0.5743 1.3677,0.9304 2.243,0.9304 l 0,-0.004 c 0.8743,0 1.6665,-0.354 2.2406,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.5746,-0.5763 0.9307,-1.3686 0.9307,-2.24 0,-0.8759 -0.3561,-1.6701 -0.9307,-2.2447 l -0.002,0.002 c -0.5741,-0.5735 -1.3669,-0.9287 -2.2423,-0.9287 l 0,-0.004 c -0.3495,0 -0.6865,0.0566 -1.002,0.1627 L 358.1283,593.519 c -0.1953,-0.1953 -0.4513,-0.2931 -0.7073,-0.2931 l 0,-0.0182 -14.2333,0.0218 c -0.0295,-0.003 -0.0587,-0.004 -0.0887,-0.004 -0.5525,0 -1.0004,0.4475 -1.0006,0.9997 l 0,6e-4 0,13.2829 -13.233,0.0209 c -0.0295,-0.002 -0.059,-0.004 -0.089,-0.004 -0.5522,0 -1.0001,0.4476 -1.0004,0.9997 l 0,6e-4 0,20.4676 -6.0735,0.0192 c -0.0289,-0.003 -0.0581,-0.004 -0.0876,-0.004 -0.5522,0 -1.0003,0.4478 -1.0003,1 l 0,6e-4 0,13.3067 -6.073,0.019 c -0.0289,-0.003 -0.0581,-0.004 -0.0876,-0.004 -0.5521,0 -1.0003,0.4479 -1.0006,1.0001 l 0,2e-4 0,49.1358 -5.1605,0.0161 0,-34.8295 c -0.0201,-0.6894 -0.3727,-1.008 -1.0003,-1.0188 l -6.1645,0.0196 0,-32.0758 c 0.2276,-0.1349 0.4374,-0.2973 0.6236,-0.483 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9306,-1.3685 0.9306,-2.2396 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3668,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2433,0.9343 -0.5718,0.5726 -0.9261,1.3652 -0.9261,2.2411 l -0.004,0 c 0,0.8725 0.3558,1.6651 0.9301,2.2396 l 0,0.004 c 0.4912,0.491 1.1418,0.8221 1.8672,0.9077 l 0,32.6508 c 0,0.5502 0.4461,0.9964 0.9966,0.9964 l 0.1888,-6e-4 5.9715,-0.0187 0,34.829 c 5e-4,0.6203 0.2891,0.9973 1.0006,1.0191 l 7.1614,-0.0227 c 0.5503,0 0.9964,-0.4459 0.9964,-0.9961 l 0.004,0 0,-3e-4 0,-49.1357 6.1605,-0.0193 c 0.5429,0 0.9837,-0.4342 0.9958,-0.974 l 0.005,0 0,-0.0224 0,-13.3066 6.1611,-0.0193 c 0.5428,0 0.9836,-0.4343 0.9961,-0.974 l 0.005,0 0,-0.0227 0,-20.4658 13.322,-0.021 c 0.5349,0 0.9711,-0.4221 0.995,-0.9513 l 0.005,0 0,-0.0454 0,-13.2828 12.8827,-0.0196 6.33372,6.33378 5.19358,5.19362 c -0.3506,0.5099 -0.5556,1.129 -0.5556,1.7957 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.24 l 0,0.004 2e-4,8e-4 z m -84.6933,14.3425 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3541 2.2402,-0.9264 l 0.002,-0.002 0.002,-10e-4 c 0.5743,-0.5763 0.9303,-1.3685 0.9303,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9303,-2.2448 l -0.002,0.002 c -0.4898,-0.4895 -1.1395,-0.8201 -1.8632,-0.9065 l 0,-25.4917 0,-0.0218 -6e-4,0 c -0.0116,-0.5426 -0.4547,-0.9785 -1.0001,-0.9785 -0.0309,0 -0.062,10e-4 -0.0924,0.004 l -13.2295,0.0213 0,-27.6696 c 0.0493,-0.6562 -0.2844,-0.9958 -1.0004,-1.0193 l -27.6446,0.0224 0,-55.275 32.415,-0.0213 c 0.1574,0.4731 0.4241,0.8969 0.7694,1.2424 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2433,0.9303 l 0,-0.004 c 0.8742,0 1.6665,-0.3544 2.2402,-0.9264 l 0.002,-0.002 10e-4,-0.002 c 0.5746,-0.5762 0.9306,-1.3685 0.9306,-2.2399 l -0.004,0 c 0,-0.8782 -0.354,-1.6719 -0.9263,-2.2442 -0.5723,-0.5723 -1.366,-0.9263 -2.2442,-0.9263 l 0,-0.004 c -0.8728,0 -1.6665,0.3574 -2.2433,0.9343 -0.3447,0.345 -0.6109,0.7699 -0.7674,1.2447 l -33.334,0.0218 c -0.0272,-0.002 -0.0556,-0.004 -0.0836,-0.004 -0.5446,0 -0.9876,0.436 -0.9998,0.9777 l -6e-4,0 0,0.0227 0,57.268 c 0.0128,0.6129 0.3464,0.9451 1.0004,0.997 l 27.6446,-0.0224 0,27.6701 c 5e-4,0.6571 0.3339,0.9967 1.0006,1.0193 l 13.322,-0.0212 0,24.916 c -0.2268,0.1357 -0.4351,0.2999 -0.6214,0.4861 -0.5717,0.5723 -0.926,1.3649 -0.926,2.2408 l -0.004,0 c 0,0.8728 0.3555,1.6651 0.93,2.2399 l 0,0.004 7e-4,-9e-4 z m -14.9439,-14.94 c 0.3461,0.3461 0.7716,0.612 1.2466,0.7696 l 0,18.6738 -13.3256,13.326 -13.3223,-13.322 0,-44.5278 c 0.4725,-0.157 0.8955,-0.4212 1.2399,-0.7648 l 0.002,-0.002 0.001,-0.002 c 0.5745,-0.576 0.9306,-1.3683 0.9306,-2.2397 0,-0.8759 -0.3561,-1.6702 -0.9306,-2.2447 l -0.002,0.002 c -0.5738,-0.5737 -1.3669,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8725,0 -1.6665,0.3572 -2.2431,0.9343 -0.572,0.5726 -0.9263,1.3652 -0.9263,2.2411 l -0.004,0 c 0,0.8725 0.3557,1.6651 0.9303,2.2397 l 0,0.004 c 0.345,0.345 0.7693,0.6106 1.2427,0.7682 l 0,44.9385 0,3e-4 c 0,0.1312 0.0258,0.2565 0.072,0.3713 l 0.002,0.005 c 0.0184,0.0454 0.0402,0.089 0.0652,0.1307 l 0.0232,0.0377 0.003,0.005 c 0.0375,0.0561 0.0797,0.1088 0.127,0.1565 l 14.3229,14.3223 c 0.3904,0.3906 1.0239,0.3906 1.4145,0 l 14.3223,-14.3223 c 0.2175,-0.2175 0.3141,-0.5108 0.2892,-0.7949 l 0,-19.0083 c 0.4739,-0.1567 0.8986,-0.4215 1.2438,-0.7656 l 0.002,-0.002 0.001,-10e-4 c 0.5746,-0.5763 0.9306,-1.3685 0.9306,-2.2399 0,-0.8759 -0.356,-1.6702 -0.9306,-2.2448 l -0.002,0.002 c -0.574,-0.5737 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2433,0.9346 -0.5718,0.5723 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.2399 l 0,0.004 0.002,-3e-4 z m -64.4514,1.2433 c 0.3459,0.3458 0.7719,0.612 1.2467,0.7693 l 0,17.8483 c -0.057,0.6444 0.2373,1.0146 0.9967,1.0208 l 14.3226,-0.0232 c 0.6678,-0.0329 1.0015,-0.3657 1.0003,-0.997 l 0,-34.806 6.0778,-0.003 c 0.0278,0.002 0.055,0.004 0.083,0.004 0.5525,0 1.0007,-0.4481 1.0007,-1.0006 l 0,-28.6447 c 0.017,-0.6366 -0.3164,-0.9765 -1.0007,-1.0193 l -27.6446,0.0224 0,-55.2753 31.1741,-0.0213 c 0.1576,0.4731 0.4232,0.8972 0.7687,1.2427 l 0,0.004 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 0.8753,0 1.6693,-0.356 2.2436,-0.9303 0.5743,-0.5746 0.9303,-1.3686 0.9303,-2.2439 l -0.004,0 c 0,-0.8742 -0.354,-1.6665 -0.9263,-2.2402 l -0.002,-0.002 -10e-4,-0.001 c -0.5763,-0.5746 -1.3686,-0.9306 -2.2399,-0.9306 -0.8728,0 -1.6668,0.3574 -2.2434,0.9343 -0.3444,0.345 -0.6094,0.7696 -0.7662,1.2444 l -32.0936,0.0221 c -0.0275,-0.002 -0.0555,-0.004 -0.0836,-0.004 -0.5445,0 -0.9876,0.436 -0.9998,0.9777 l -5e-4,0 0,0.0227 0,57.268 c 0.0368,0.6296 0.3702,0.9621 1.0003,0.997 l 27.6449,-0.0224 0,26.6743 -6.0707,0.003 c -0.0295,-0.003 -0.0598,-0.004 -0.0901,-0.004 -0.0309,0 -0.061,10e-4 -0.091,0.004 l -30.5209,0.0184 c -0.1565,-0.4833 -0.4264,-0.915 -0.7773,-1.2659 l -0.002,0.002 c -0.574,-0.5735 -1.3671,-0.9287 -2.2422,-0.9287 l 0,-0.004 c -0.8728,0 -1.6668,0.3574 -2.2433,0.9345 -0.5718,0.5724 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8725 0.3555,1.6651 0.9301,2.24 l 0,0.004 c 0.5743,0.5743 1.368,0.9304 2.2433,0.9304 l 0,-0.004 c 0.8742,0 1.6665,-0.354 2.2402,-0.9264 l 0.002,-0.002 10e-4,-10e-4 c 0.341,-0.3419 0.6052,-0.7606 0.7637,-1.226 l 29.6249,-0.0176 0,33.8105 -12.3257,0.0199 0,-16.8778 c 0.474,-0.1568 0.8983,-0.4215 1.2439,-0.7659 l 0.002,-0.002 0.001,-0.002 c 0.5746,-0.576 0.9306,-1.3686 0.9306,-2.2399 0,-0.8756 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.5737,-0.5737 -1.3669,-0.9286 -2.2419,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3572 -2.2434,0.9343 -0.572,0.5726 -0.9263,1.3652 -0.9263,2.2408 l -0.004,0 c 0,0.8728 0.3557,1.6653 0.9303,2.2399 l 0,0.004 0.001,-0.002 z m -28.6449,-27.0919 c 0.345,0.3453 0.7696,0.6109 1.243,0.7682 l 0,29.6017 -12.3219,0.0198 0,-48.1388 24.9046,-0.0173 c 0.138,0.2356 0.305,0.4527 0.4969,0.6446 l 0,0.004 c 0.5743,0.5746 1.3677,0.9303 2.2431,0.9303 0.8756,0 1.6696,-0.3557 2.2441,-0.9303 0.5741,-0.574 0.9304,-1.3677 0.9304,-2.2436 0,-0.8756 -0.3561,-1.6694 -0.9304,-2.2436 -0.5745,-0.5746 -1.3685,-0.9304 -2.2441,-0.9304 -0.8754,0 -1.6688,0.3561 -2.2431,0.9304 l 0,0.004 c -0.4859,0.4862 -0.815,1.1277 -0.9051,1.8426 l -31.6576,0.0218 0,-55.2753 32.9269,-0.0216 c 0.1577,0.4734 0.4235,0.8972 0.7688,1.2427 l 0,0.004 c 0.5743,0.5743 1.3677,0.9303 2.2431,0.9303 0.8756,0 1.6696,-0.356 2.2441,-0.9303 0.5743,-0.5746 0.9304,-1.3683 0.9304,-2.2439 l -0.004,0 c 0,-0.8782 -0.354,-1.6719 -0.9264,-2.2442 l -0.004,0 c -0.5721,-0.5717 -1.3643,-0.9263 -2.2402,-0.9263 l 0,-0.004 c -0.8728,0 -1.6665,0.3574 -2.2431,0.9343 -0.3447,0.345 -0.6094,0.7699 -0.7662,1.2447 l -33.8465,0.0218 c -0.0272,-0.002 -0.0556,-0.004 -0.0836,-0.004 -0.5446,0 -0.9876,0.436 -0.9998,0.9777 l -6e-4,0 0,0.0227 0,57.268 c 0.1128,0.5843 0.4465,0.9165 1.0004,0.997 l 6.1611,-0.004 0,49.1358 c 0,0.5524 0.4478,1.0003 1.0003,1.0003 0.0289,0 0.0578,-0.002 0.0865,-0.004 l 0.1026,-2e-4 14.1335,-0.023 c 0.5423,0 0.9836,-0.4337 0.9964,-0.9731 l 0.004,0 0,-0.0233 0,-30.6 c 0.4725,-0.1567 0.8954,-0.4212 1.2398,-0.7648 l 0.002,-0.002 0.001,-0.001 c 0.5746,-0.5763 0.9306,-1.3686 0.9306,-2.24 0,-0.8759 -0.356,-1.6699 -0.9306,-2.2445 l -0.002,0.002 c -0.574,-0.5734 -1.3671,-0.9286 -2.2422,-0.9286 l 0,-0.004 c -0.8728,0 -1.6668,0.3575 -2.2433,0.9346 -0.5718,0.5726 -0.9261,1.3649 -0.9261,2.2408 l -0.004,0 c 0,0.8728 0.3555,1.6654 0.9301,2.24 l 0,0.004 0.001,-0.002 z m 56.6702,-30.8196 c 0.5743,0.5743 1.368,0.9303 2.2434,0.9303 0.8753,0 1.6693,-0.356 2.2436,-0.9303 0.5743,-0.5743 0.9303,-1.3683 0.9303,-2.2437 l -0.004,0 c 0,-0.8756 -0.354,-1.6684 -0.9263,-2.2408 -0.5766,-0.5771 -1.3706,-0.9345 -2.2436,-0.9345 -0.8728,0 -1.6668,0.3574 -2.2434,0.9345 -0.3447,0.345 -0.6097,0.7702 -0.7665,1.2453 l -16.8539,0.0198 0,-26.6519 16.8511,-0.0198 c 0.1576,0.4751 0.4235,0.8997 0.7696,1.2458 0.5743,0.5743 1.3677,0.9301 2.2431,0.9301 0.8725,0 1.665,-0.3558 2.2399,-0.9301 l 0.004,0 c 0.5743,-0.5746 0.9303,-1.368 0.9303,-2.2433 0,-0.8734 -0.3557,-1.6662 -0.93,-2.2408 -0.5769,-0.5771 -1.3709,-0.9343 -2.2439,-0.9343 -0.8731,0 -1.6671,0.3572 -2.2437,0.9343 -0.3455,0.3461 -0.6114,0.7713 -0.7687,1.2453 l -17.769,0.0209 c -0.0269,-0.002 -0.055,-0.004 -0.0828,-0.004 l -3e-4,0 c -0.5448,0 -0.9878,0.4365 -0.9997,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c -0.006,0.5945 0.328,0.934 1.0003,1.0185 l 17.8529,-0.021 c 0.1574,0.4726 0.423,0.8972 0.7682,1.2425 l 0,0.004 -3e-4,-2e-4 z m -41.2146,-0.6223 c 0.5743,0.5743 1.3677,0.9304 2.2431,0.9304 0.8756,0 1.6696,-0.3558 2.2441,-0.9304 0.5741,-0.5743 0.9304,-1.368 0.9304,-2.2436 0,-0.8759 -0.3561,-1.6693 -0.9304,-2.2439 -0.5745,-0.5743 -1.3685,-0.9303 -2.2441,-0.9303 -0.8754,0 -1.6688,0.356 -2.2431,0.9303 l 0,0.004 c -0.4912,0.4912 -0.822,1.1426 -0.9076,1.8669 l -18.4658,0.0195 0,-26.6519 18.6041,-0.0198 c 0.1573,0.4748 0.4235,0.9 0.7693,1.2458 l 0.004,0 c 0.5746,0.574 1.3669,0.9301 2.2394,0.9301 0.8756,0 1.6693,-0.3558 2.2439,-0.9301 l -0.002,-0.002 c 0.5757,-0.5765 0.9326,-1.3694 0.9326,-2.2413 0,-0.8734 -0.3558,-1.6659 -0.9304,-2.2408 -0.5743,-0.5746 -1.368,-0.9303 -2.2441,-0.9303 l 0,-0.004 c -0.8728,0 -1.6665,0.3572 -2.2434,0.9343 -0.3455,0.3461 -0.6111,0.7713 -0.7687,1.2453 l -19.5217,0.0209 c -0.0272,-0.002 -0.0552,-0.004 -0.083,-0.004 l 0,0 c -0.5451,0 -0.9882,0.4365 -1.0001,0.9785 l -6e-4,0 0,0.0221 0,28.6228 c 0.0188,0.6548 0.3323,1.0148 1.0007,1.0185 l 19.891,-0.0212 c 0.1352,0.2262 0.2973,0.4348 0.4827,0.6202 l 0,0.004 -3e-4,0 z m 2.2436,-29.2098 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 85.4241,-14.3224 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4733,1.0573 1.0576,1.0573 z m -44.2095,0 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -41.2146,0 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 0,42.3459 c 0.584,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 41.2146,-28.0235 c 0.584,0 1.0574,-0.4734 1.0574,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 0,28.6452 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 42.9679,-28.6452 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -85.3155,42.3473 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 86.5571,-13.7021 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4733,1.0573 1.0576,1.0573 z m 28.0233,29.2666 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4733,1.0574 1.0576,1.0574 z m -128.9027,1.5531 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 9.3345,12.1524 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4733 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 19.3104,14.9394 c 0.584,0 1.0574,-0.4734 1.0574,-1.0576 0,-0.5839 -0.4734,-1.0573 -1.0574,-1.0573 -0.5842,0 -1.0576,0.4734 -1.0576,1.0573 0,0.5842 0.4734,1.0576 1.0576,1.0576 z m 35.8061,-27.0884 c 0.5843,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.584 0.4734,1.0574 1.0573,1.0574 z m 28.6453,25.8451 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 14.9439,14.94 c 0.584,0 1.0574,-0.4733 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 13.0811,-0.0139 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573 z m 71.6119,-14.3285 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4733 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 14.9434,-28.0179 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -20.0355,-0.5811 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.584,0 -1.0574,0.4734 -1.0574,1.0576 0,0.584 0.4734,1.0574 1.0574,1.0574 z m 5e-4,-14.9619 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 0,-13.7009 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.584 0.4734,1.0574 1.0573,1.0574 z m 70.164,-44.6505 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m -13.701,0.004 c 0.5843,0 1.0577,-0.4734 1.0577,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0577,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m -7.1614,0 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -14.9443,0 c 0.584,0 1.0574,-0.4734 1.0574,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0574,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -7.1614,0 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m -14.3223,-0.004 c 0.5839,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5843,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4733,1.0574 1.0576,1.0574 z m -28.6447,15.3793 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4734 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m 0,7.1649 c 0.5842,0 1.0576,-0.4734 1.0576,-1.0573 0,-0.5843 -0.4734,-1.0576 -1.0576,-1.0576 -0.5839,0 -1.0573,0.4733 -1.0573,1.0576 0,0.5839 0.4734,1.0573 1.0573,1.0573 z m -43.6921,-6.5619 c 0.584,0 1.0573,-0.4734 1.0573,-1.0574 0,-0.5842 -0.4733,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0574 1.0576,1.0574 z m 0,7.1844 c 0.584,0 1.0573,-0.4734 1.0573,-1.0573 0,-0.5843 -0.4733,-1.0577 -1.0573,-1.0577 -0.5842,0 -1.0576,0.4734 -1.0576,1.0577 0,0.5839 0.4734,1.0573 1.0576,1.0573 z m 15.0466,20.8615 c 0.5839,0 1.0573,-0.4733 1.0573,-1.0573 0,-0.5842 -0.4734,-1.0576 -1.0573,-1.0576 -0.5842,0 -1.0576,0.4734 -1.0576,1.0576 0,0.584 0.4734,1.0573 1.0576,1.0573"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="959.77032"
+       y="560.20947"
+       id="club"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5836"
+         x="959.77032"
+         y="560.20947"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.375px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1">Chaos Computer Club Frankfurt</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="958.90991"
+       y="934.99194"
+       id="club-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="958.90991"
+         y="934.99194"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.375px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1"
+         id="tspan5120">Except where otherwise noted, this work is licensed under</tspan><tspan
+         sodipodi:role="line"
+         x="958.90991"
+         y="996.71069"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.375px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1"
+         id="tspan5122">http://creativecommons.org/license/by/4.0/</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:50.34918976px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="959.77032"
+       y="655.01202"
+       id="club-46"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5836-4"
+         x="959.77032"
+         y="655.01202"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.375px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ffffff;fill-opacity:1">www.ccc-ffm.de</tspan></text>
+  </g>
+</svg>
diff --git a/easing.py b/easing.py
new file mode 100644 (file)
index 0000000..c362019
--- /dev/null
+++ b/easing.py
@@ -0,0 +1,211 @@
+# ported from http://www.gizma.com/easing/ to https://gist.github.com/th0ma5w/9883420
+# added some from https://gist.github.com/cleure/e5ba94f94e828a3f5466
+# added some from http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js
+
+import math
+
+def easeLinear(t, b, c, d):
+       return c*t/d + b
+
+
+def easeOutCubic(t, b, c, d):
+       t=float(t)/d-1
+       return c*((t)*t*t + 1) + b
+
+def easeInCubic(t, b, c, d):
+       t=float(t)/d
+       return c*(t)*t*t + b;
+
+
+def easeInQuad(t, b, c, d):
+       t /= d
+       return c*t*t + b
+
+def easeOutQuad(t, b, c, d):
+       t /= d
+       return -c * t*(t-2) + b
+
+def easeInOutQuad(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t + b
+       t-=1
+       return -c/2 * (t*(t-2) - 1) + b
+
+
+def easeInOutCubic(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t + b
+       t -= 2
+       return c/2*(t*t*t + 2) + b
+
+def easeInQuart(t, b, c, d):
+       t /= d
+       return c*t*t*t*t + b
+
+def easeOutQuart(t, b, c, d):
+       t /= d
+       t -= 1
+       return -c * (t*t*t*t - 1) + b
+
+def easeInOutQuart(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t*t + b
+       t -= 2
+       return -c/2 * (t*t*t*t - 2) + b
+
+def easeInQuint(t, b, c, d):
+       t /= d
+       return c*t*t*t*t*t + b
+
+def easeOutQuint(t, b, c, d):
+       t /= d
+       t -= 1
+       return c*(t*t*t*t*t + 1) + b
+
+def easeInOutQuint(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t*t*t + b
+       t -= 2
+       return c/2*(t*t*t*t*t + 2) + b
+
+def easeInSine(t, b, c, d):
+       return -c * math.cos(t/d * (math.pi/2)) + c + b
+
+def easeOutSine(t, b, c, d):
+       return c * math.sin(t/d * (math.pi/2)) + b
+
+
+def easeInOutSine(t, b, c, d):
+       return -c/2 * (math.cos(math.pi*t/d) - 1) + b
+
+def easeInExpo(t, b, c, d):
+       return c * math.pow( 2, 10 * (t/d - 1) ) + b
+
+def easeOutExpo(t, b, c, d):
+       return c * ( -math.pow( 2, -10 * t/d ) + 1 ) + b
+
+
+def easeInOutExpo(t, b, c, d):
+       t /= d/2
+       if t < 1: 
+               return c/2 * math.pow( 2, 10 * (t - 1) ) + b
+       t -= 1
+       return c/2 * ( -math.pow( 2, -10 * t) + 2 ) + b
+
+def easeInCirc(t, b, c, d):
+       t /= d
+       return -c * (math.sqrt(1 - t*t) - 1) + b
+
+def easeOutCirc(t, b, c, d):
+       t /= d;
+       t -= 1
+       return c * math.sqrt(1 - t*t) + b
+
+def easeInOutCirc(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return -c/2 * (math.sqrt(1 - t*t) - 1) + b
+       t -= 2
+       return c/2 * (math.sqrt(1 - t*t) + 1) + b
+
+
+def easeInElastic(t, b, c, d, s = 1.70158):
+       a = c
+
+       if t == 0:
+               return b
+       t /= d
+       if t == 1:
+               return b + c
+
+       p = d * 0.3
+       if a < abs(c):
+               a = c
+               s = p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       t -= 1
+       return -(a * pow(2, 10 * t) * math.sin((t * d - s) * (2 * math.pi) / p)) + b
+
+def easeOutElastic(t, b, c, d, a = 1.70158):
+       if t == 0:
+               return b
+       t /= d
+       if t == 1:
+               return b + c
+
+       p = d * 0.3
+       if a < abs(c):
+               a, s = c, p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       return a * pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p) + c + b
+
+def easeInOutElastic(t, b, c, d, a = 1.70158):
+       if t == 0:
+               return b
+       t /= (d / 2)
+       if t == 2:
+               return b + c
+
+       p = d * (0.3 * 1.5)
+       if a < abs(c):
+               a, s = c, p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       if t < 1:
+               t -= 1
+               return -0.5 * (a * pow(2, 10 * t) * math.sin((t * d - s) * (2 * math.pi) / p)) + b
+
+       t -= 1
+       return a * pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p ) * 0.5 + c + b
+
+def easeInBack(t, b, c, d, s = 1.70158):
+       t /= d
+       return c * t * t * ((s + 1) * t - s) + b
+
+def easeOutBack(t, b, c, d, s = 1.70158):
+       t = t / d - 1
+       return c * (t * t * ((s + 1) * t + s) + 1) + b
+
+def easeInOutBack(t, b, c, d, s = 1.70158):
+       t /= d / 2
+       s *= 1.525
+       if t < 1:
+               return c / 2 * (t * t * ((s + 1) * t - s)) + b;
+
+       t -= 2
+       return c/2 * (t * t * ((s + 1) * t + s) + 2) + b;
+
+def easeInBounce(t, b, c, d):
+               return c - easeOutBounce(d-t, 0, c, d) + b;
+
+def easeOutBounce(t, b, c, d):
+       t /= d
+       if t < (1/2.75):
+               return c*(7.5625*t*t) + b;
+
+       elif t < (2/2.75):
+               t -= (1.5/2.75)
+               return c*(7.5625*t*t + 0.75) + b;
+
+       elif t < (2.5/2.75):
+               t -= (2.25/2.75)
+               return c*(7.5625*t*t + 0.9375) + b;
+
+       else:
+               t -= (2.625/2.75)
+               return c*(7.5625*t*t + 0.984375) + b;
+
+def easeInOutBounce(t, b, c, d):
+       if t < d/2:
+               return easeInBounce(t*2, 0, c, d) * .5 + b;
+
+       return easeOutBounce(t*2-d, 0, c, d) * .5 + c*.5 + b;
diff --git a/fading.py b/fading.py
new file mode 100644 (file)
index 0000000..c362019
--- /dev/null
+++ b/fading.py
@@ -0,0 +1,211 @@
+# ported from http://www.gizma.com/easing/ to https://gist.github.com/th0ma5w/9883420
+# added some from https://gist.github.com/cleure/e5ba94f94e828a3f5466
+# added some from http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js
+
+import math
+
+def easeLinear(t, b, c, d):
+       return c*t/d + b
+
+
+def easeOutCubic(t, b, c, d):
+       t=float(t)/d-1
+       return c*((t)*t*t + 1) + b
+
+def easeInCubic(t, b, c, d):
+       t=float(t)/d
+       return c*(t)*t*t + b;
+
+
+def easeInQuad(t, b, c, d):
+       t /= d
+       return c*t*t + b
+
+def easeOutQuad(t, b, c, d):
+       t /= d
+       return -c * t*(t-2) + b
+
+def easeInOutQuad(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t + b
+       t-=1
+       return -c/2 * (t*(t-2) - 1) + b
+
+
+def easeInOutCubic(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t + b
+       t -= 2
+       return c/2*(t*t*t + 2) + b
+
+def easeInQuart(t, b, c, d):
+       t /= d
+       return c*t*t*t*t + b
+
+def easeOutQuart(t, b, c, d):
+       t /= d
+       t -= 1
+       return -c * (t*t*t*t - 1) + b
+
+def easeInOutQuart(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t*t + b
+       t -= 2
+       return -c/2 * (t*t*t*t - 2) + b
+
+def easeInQuint(t, b, c, d):
+       t /= d
+       return c*t*t*t*t*t + b
+
+def easeOutQuint(t, b, c, d):
+       t /= d
+       t -= 1
+       return c*(t*t*t*t*t + 1) + b
+
+def easeInOutQuint(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return c/2*t*t*t*t*t + b
+       t -= 2
+       return c/2*(t*t*t*t*t + 2) + b
+
+def easeInSine(t, b, c, d):
+       return -c * math.cos(t/d * (math.pi/2)) + c + b
+
+def easeOutSine(t, b, c, d):
+       return c * math.sin(t/d * (math.pi/2)) + b
+
+
+def easeInOutSine(t, b, c, d):
+       return -c/2 * (math.cos(math.pi*t/d) - 1) + b
+
+def easeInExpo(t, b, c, d):
+       return c * math.pow( 2, 10 * (t/d - 1) ) + b
+
+def easeOutExpo(t, b, c, d):
+       return c * ( -math.pow( 2, -10 * t/d ) + 1 ) + b
+
+
+def easeInOutExpo(t, b, c, d):
+       t /= d/2
+       if t < 1: 
+               return c/2 * math.pow( 2, 10 * (t - 1) ) + b
+       t -= 1
+       return c/2 * ( -math.pow( 2, -10 * t) + 2 ) + b
+
+def easeInCirc(t, b, c, d):
+       t /= d
+       return -c * (math.sqrt(1 - t*t) - 1) + b
+
+def easeOutCirc(t, b, c, d):
+       t /= d;
+       t -= 1
+       return c * math.sqrt(1 - t*t) + b
+
+def easeInOutCirc(t, b, c, d):
+       t /= d/2
+       if t < 1:
+               return -c/2 * (math.sqrt(1 - t*t) - 1) + b
+       t -= 2
+       return c/2 * (math.sqrt(1 - t*t) + 1) + b
+
+
+def easeInElastic(t, b, c, d, s = 1.70158):
+       a = c
+
+       if t == 0:
+               return b
+       t /= d
+       if t == 1:
+               return b + c
+
+       p = d * 0.3
+       if a < abs(c):
+               a = c
+               s = p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       t -= 1
+       return -(a * pow(2, 10 * t) * math.sin((t * d - s) * (2 * math.pi) / p)) + b
+
+def easeOutElastic(t, b, c, d, a = 1.70158):
+       if t == 0:
+               return b
+       t /= d
+       if t == 1:
+               return b + c
+
+       p = d * 0.3
+       if a < abs(c):
+               a, s = c, p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       return a * pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p) + c + b
+
+def easeInOutElastic(t, b, c, d, a = 1.70158):
+       if t == 0:
+               return b
+       t /= (d / 2)
+       if t == 2:
+               return b + c
+
+       p = d * (0.3 * 1.5)
+       if a < abs(c):
+               a, s = c, p / 4
+       else:
+               s = p / (2 * math.pi) * math.asin(c / a)
+
+       if t < 1:
+               t -= 1
+               return -0.5 * (a * pow(2, 10 * t) * math.sin((t * d - s) * (2 * math.pi) / p)) + b
+
+       t -= 1
+       return a * pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p ) * 0.5 + c + b
+
+def easeInBack(t, b, c, d, s = 1.70158):
+       t /= d
+       return c * t * t * ((s + 1) * t - s) + b
+
+def easeOutBack(t, b, c, d, s = 1.70158):
+       t = t / d - 1
+       return c * (t * t * ((s + 1) * t + s) + 1) + b
+
+def easeInOutBack(t, b, c, d, s = 1.70158):
+       t /= d / 2
+       s *= 1.525
+       if t < 1:
+               return c / 2 * (t * t * ((s + 1) * t - s)) + b;
+
+       t -= 2
+       return c/2 * (t * t * ((s + 1) * t + s) + 2) + b;
+
+def easeInBounce(t, b, c, d):
+               return c - easeOutBounce(d-t, 0, c, d) + b;
+
+def easeOutBounce(t, b, c, d):
+       t /= d
+       if t < (1/2.75):
+               return c*(7.5625*t*t) + b;
+
+       elif t < (2/2.75):
+               t -= (1.5/2.75)
+               return c*(7.5625*t*t + 0.75) + b;
+
+       elif t < (2.5/2.75):
+               t -= (2.25/2.75)
+               return c*(7.5625*t*t + 0.9375) + b;
+
+       else:
+               t -= (2.625/2.75)
+               return c*(7.5625*t*t + 0.984375) + b;
+
+def easeInOutBounce(t, b, c, d):
+       if t < d/2:
+               return easeInBounce(t*2, 0, c, d) * .5 + b;
+
+       return easeOutBounce(t*2-d, 0, c, d) * .5 + c*.5 + b;
diff --git a/make-overlay.sh b/make-overlay.sh
new file mode 100755 (executable)
index 0000000..9dd1537
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+if ! pushd "$1/artwork/" >/dev/null 2>&1; then
+       echo "call with a project-name, eg. './make-snapshots sotmeu14'"
+       exit 1
+fi
+
+inkscape --export-width=1024 --export-height=576 --export-png=overlay-1024x576.png overlay.svg
+inkscape --export-width=720  --export-height=576 --export-png=overlay-720x576.png  overlay.svg
+
+popd >/dev/null
diff --git a/make-snapshots.sh b/make-snapshots.sh
new file mode 100755 (executable)
index 0000000..79de7a8
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/bash
+if ! pushd $1 >/dev/null 2>&1; then
+       echo "call with a project-name, eg. './make-snapshots sotmeu14' after you rendered your dv/ts-files."
+       exit 1
+fi
+
+ss=$2
+if [ -z $ss ]; then
+       # three seconds
+       ss=3
+fi
+
+for dv in *.dv; do
+       png="$dv.png"
+       echo "$dv @ second $ss -> $png"
+       ffmpeg -loglevel error -i $dv -ss $ss -frames:v 1 -vf scale='iw*sar:ih' -f image2 -c png $png;
+done
+
+for ts in *.ts; do
+        png="$ts.png"
+        echo "$ts @ second $ss -> $png"
+        ffmpeg -loglevel error -i $ts -ss $ss -frames:v 1 -vf scale='iw*sar:ih' -f image2 -c png $png;
+done
+
+popd >/dev/null 2>&1
+
diff --git a/make.py b/make.py
new file mode 100755 (executable)
index 0000000..0b9d06d
--- /dev/null
+++ b/make.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python3
+
+import sys
+import os
+import time
+import shutil
+from lxml import etree
+import tempfile
+import threading
+import multiprocessing
+from threading import Thread, Lock
+from queue import Queue
+import renderlib
+
+# Project-Name
+if len(sys.argv) < 2:
+       print("you must specify a project-name as first argument, eg. './make.py sotmeu14'")
+       sys.exit(1)
+
+args = sys.argv[1:]
+
+projectname = args.pop(0).strip('/')
+try:
+       project = renderlib.loadProject(projectname)
+except ImportError:
+       print("you must specify a project-name as first argument, eg. './make.py sotmeu14'. The supplied value '{0}' seems not to be a valid project (there is no '{0}/__init__.py').\n".format(projectname))
+       raise
+
+# using --debug skips the threading, the network fetching of the schedule and
+# just renders one type of video
+renderlib.debug = ('--debug' in sys.argv)
+
+def render(infile, outfile, sequence, parameters={}, workdir=os.path.join(projectname, 'artwork')):
+       task = renderlib.Rendertask(infile=infile, outfile=outfile, sequence=sequence, parameters=parameters, workdir=workdir)
+       return renderlib.rendertask(task)
+
+# debug-mode selected by --debug switch
+if renderlib.debug:
+       print("!!! DEBUG MODE !!!")
+
+       # expose debug-render method
+       project.render = render
+
+       # call into project which calls render as needed
+       project.debug()
+
+       # exit early
+       sys.exit(0)
+
+
+
+# threaded task queue
+tasks = Queue()
+
+# call into project which generates the tasks
+#project.tasks(tasks)
+project.tasks(tasks, args)
+
+# one working thread per cpu
+num_worker_threads = multiprocessing.cpu_count()
+print("{0} tasks in queue, starting {1} worker threads".format(tasks.qsize(), num_worker_threads))
+
+# put a sentinel for each thread into the queue to signal the end
+for _ in range(num_worker_threads):
+       tasks.put(None)
+
+# this lock ensures, that only one thread at a time is writing to stdout
+# and avoids output from multiple threads intermixing
+printLock = Lock() 
+def tprint(str):
+       # aquire lock
+       printLock.acquire()
+
+       # print thread-name and message
+       print(threading.current_thread().name+': '+str)
+
+       # release lock
+       printLock.release()
+
+
+# thread worker
+def worker():
+       # generate a tempdir for this worker-thread and use the artwork-subdir as temporary folder
+       tempdir = tempfile.mkdtemp()
+       workdir = os.path.join(tempdir, 'artwork')
+
+       # save the current working dir as output-dir
+       outdir = os.path.join(os.getcwd(), projectname)
+
+       # print a message that we're about to initialize our environment
+       tprint("initializing worker in {0}, writing result to {1}".format(tempdir, outdir))
+
+       # copy the artwork-dir into the tempdir
+       shutil.copytree(os.path.join(projectname, 'artwork'), workdir)
+
+       # loop until all tasks are done (when the thread fetches a sentinal from the queue)
+       while True:
+               # fetch a task from the queue
+               task = renderlib.Rendertask.ensure(tasks.get())
+
+               # if it is a stop-sentinal break out of the loop
+               if task == None:
+                       break
+
+               # print that we're about to render a task
+               tprint('rendering {0} from {1}'.format(task.outfile, task.infile))
+
+               # prepend workdir to input file
+               task.infile = os.path.join(workdir, task.infile)
+               task.outfile = os.path.join(outdir, task.outfile)
+               task.workdir = workdir
+
+               # render with these arguments
+               renderlib.rendertask(task)
+
+               # print that we're finished
+               tprint('finished {0}, {1} tasks left'.format(task.outfile, max(0, tasks.qsize() - num_worker_threads)))
+
+               # mark the task as finished
+               tasks.task_done()
+
+       # all tasks from the queue done, clean up
+       tprint("cleaning up worker")
+
+       # remove the tempdir
+       shutil.rmtree(tempdir)
+
+       # mark the sentinal as done
+       tasks.task_done()
+
+# List of running threads
+threads = []
+
+# generate and start the threads
+for i in range(num_worker_threads):
+       t = Thread(target=worker)
+       t.daemon = True
+       t.start()
+       threads.append(t)
+
+# wait until they finished doing the work
+# we're doing it the manual way because tasks.join() would wait until all tasks are done,
+# even if the worker threads crash due to broken svgs, Ctrl-C termination or whatnot
+while True:
+       if tasks.empty() == True:
+               break
+
+       # sleep while the workers work
+       time.sleep(1)
+
+print("all worker threads ended")
diff --git a/renderlib.py b/renderlib.py
new file mode 100644 (file)
index 0000000..9c6208b
--- /dev/null
@@ -0,0 +1,194 @@
+#!/usr/bin/python3
+
+import os
+import sys
+import glob
+import math
+import shutil
+import errno
+from lxml import etree
+from xml.sax.saxutils import escape as xmlescape
+import cssutils
+import logging
+import subprocess
+from urllib.request import urlopen
+
+# Frames per second. Increasing this renders more frames, the avconf-statements would still need modifications
+fps = 25
+debug = False
+
+cssutils.ser.prefs.lineSeparator = ' '
+cssutils.log.setLevel(logging.FATAL)
+
+def loadProject(projectname):
+       sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), projectname))
+       return __import__(projectname)
+
+def easeDelay(easer, delay, t, b, c, d, *args):
+       if t < delay:
+               return b
+
+       if t - delay > d:
+               return b+c
+
+       return easer(t - delay, b, c, d, *args)
+
+class Rendertask:
+       def __init__(self, infile, sequence, parameters={}, outfile=None, workdir='.'):
+               self.infile =  infile
+               self.sequence = sequence
+               self.parameters = parameters
+               self.outfile = outfile
+               self.workdir = workdir
+
+       def fromtupel(tuple):
+               return Rendertask(tuple[0], tuple[2], tuple[3], tuple[1])
+
+       def ensure(input):
+               if isinstance(input, tuple):
+                       return Rendertask.fromtupel(input)
+               elif isinstance(input, Rendertask):
+                       return input
+               else:
+                       return None
+
+# try to create all folders needed and skip, they already exist
+def ensurePathExists(path):
+       try:
+               os.makedirs(path)
+       except OSError as exception:
+               if exception.errno != errno.EEXIST:
+                       raise
+
+# remove the files matched by the pattern
+def ensureFilesRemoved(pattern):
+       for f in glob.glob(pattern):
+               os.unlink(f)
+
+def rendertask(task):
+       # in debug mode we have no thread-worker which prints its progress
+       if debug:
+               print("generating {0} from {1}".format(task.outfile, task.infile))
+
+       # make sure a .frames-directory exists in out workdir
+       ensurePathExists(os.path.join(task.workdir, '.frames'))
+
+       # open and parse the input file
+       with open(os.path.join(task.workdir, task.infile), 'r') as fp:
+               svgstr = fp.read()
+               for key in task.parameters.keys():
+                       svgstr = svgstr.replace(key, xmlescape(str(task.parameters[key])))
+
+               svg = etree.fromstring(svgstr.encode('utf-8'))
+
+       # frame-number counter
+       frameNr = 0
+
+       # iterate through the animation seqence frame by frame
+       # frame is a ... tbd
+       for frame in task.sequence(task.parameters):
+               # print a line for each and every frame generated
+               if debug:
+                       print("frameNr {0:3d} => {1}".format(frameNr, frame))
+
+               # open the output-file (named ".gen.svg" in the workdir)
+               with open(os.path.join(task.workdir, '.gen.svg'), 'w') as fp:
+                       # apply the replace-pairs to the input text, by finding the specified xml-elements by thier id and modify thier css-parameter the correct value
+                       for replaceinfo in frame:
+                               (id, type, key, value) = replaceinfo
+
+                               for el in svg.findall(".//*[@id='"+id.replace("'", "\\'")+"']"):
+                                       if type == 'style':
+                                               style = cssutils.parseStyle( el.attrib['style'] if 'style' in el.attrib else '' )
+                                               style[key] = str(value)
+                                               el.attrib['style'] = style.cssText
+
+                                       elif type == 'attr':
+                                               el.attrib[key] = str(value)
+
+                                       elif type == 'text':
+                                               el.text = str(value)
+
+                       # write the generated svg-text into the output-file
+                       fp.write( etree.tostring(svg, encoding='unicode') )
+
+               # invoke inkscape to convert the generated svg-file into a png inside the .frames-directory
+               errorReturn = subprocess.check_output('cd {0} && inkscape --export-background=white --export-png=.frames/{1:04d}.png .gen.svg 2>&1 >/dev/null'.format(task.workdir, frameNr), shell=True, universal_newlines=True)
+               if errorReturn != '':
+                       print("inkscape exitted with error\n"+errorReturn)
+                       sys.exit(42)
+
+               # increment frame-number
+               frameNr += 1
+
+
+
+       # remove the dv/ts we are about to (re-)generate
+       ensureFilesRemoved(os.path.join(task.workdir, task.outfile))
+
+       # invoke avconv aka ffmpeg and renerate a lossles-dv from the frames
+       #  if we're not in debug-mode, suppress all output
+       if task.outfile.endswith('.ts'):
+               cmd = 'cd {0} && ffmpeg -f image2 -i .frames/%04d.png -ar 48000 -ac 1 -f s16le -i /dev/zero -ar 48000 -ac 1 -f s16le -i /dev/zero -map 0:0 -c:v mpeg2video -q:v 0 -aspect 16:9 -map 1:0 -map 2:0 -shortest -f mpegts "{1}"'.format(task.workdir, task.outfile)
+       else:
+               cmd = 'cd {0} && ffmpeg -ar 48000 -ac 2 -f s16le -i /dev/zero -f image2 -i .frames/%04d.png -target pal-dv -aspect 16:9 -shortest "{1}"'.format(task.workdir, task.outfile)
+
+       if debug:
+               print(cmd)
+
+       r = os.system(cmd + ('' if debug else '>/dev/null 2>&1'))
+
+       # as before, in non-debug-mode the thread-worker does all progress messages
+       if debug:
+               if r != 0:
+                       sys.exit()
+
+               print("cleanup")
+
+       # remove the .frames-dir with all frames in it
+       shutil.rmtree(os.path.join(task.workdir, '.frames'))
+
+       # remove the generated svg
+       ensureFilesRemoved(os.path.join(task.workdir, '.gen.svg'))
+
+
+# Download the Events-Schedule and parse all Events out of it. Yield a tupel for each Event
+def events(scheduleUrl, titlemap={}):
+       print("downloading pentabarf schedule")
+
+       # download the schedule
+       response = urlopen(scheduleUrl)
+
+       # read xml-source
+       xml = response.read()
+
+       # parse into ElementTree
+       schedule = etree.fromstring(xml)
+
+       # iterate all days
+       for day in schedule.iter('day'):
+               # iterate all rooms
+               for room in day.iter('room'):
+                       # iterate events on that day in this room
+                       for event in room.iter('event'):
+                               # aggregate names of the persons holding this talk
+                               personnames = []
+                               if event.find('persons') is not None:
+                                       for person in event.find('persons').iter('person'):
+                                               personnames.append(person.text)
+
+                               # yield a tupel with the event-id, event-title and person-names
+                               yield {
+                                       'id': int(event.get('id')),
+                                       'title': titlemap[id] if id in titlemap else (event.find('title').text.strip() if event.find('title') is not None and event.find('title').text is not None else ''),
+                                       'subtitle': event.find('subtitle').text.strip() if event.find('subtitle') is not None and event.find('subtitle').text is not None else '',
+                                       'persons': personnames,
+                                       'personnames': ', '.join(personnames),
+                                       'room': room.attrib['name'],
+                               }
+
+try:
+       from termcolor import colored
+except ImportError:
+       def colored(str, col):
+               return str
diff --git a/script-Z-preroll-generator.py b/script-Z-preroll-generator.py
new file mode 100755 (executable)
index 0000000..e95f1ef
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+import xmlrpc.client
+import traceback
+import socket
+import time
+import sys
+import os
+
+import renderlib
+import c3t_rpc_client as rpc
+
+try:
+       from termcolor import colored
+except ImportError:
+       def colored(str, col):
+               return str
+
+print("C3TT preroll generator")
+renderlib.debug = True
+
+if os.environ.get('CRS_TOKEN') is None or os.environ.get('CRS_SECRET') is None:
+       print('CRS_TOKEN or CRS_SECRET is empty. did you source the tracker-scripts-profile?')
+       sys.exit(1)
+
+ticket_type = 'recording'
+ticket_state = 'generating'
+
+host = socket.getfqdn()
+url = os.environ['CRS_TRACKER']
+token = os.environ['CRS_TOKEN']
+secret = os.environ['CRS_SECRET']
+
+filter = {}
+if not os.environ.get('CRS_ROOM') is None:
+       filter['Fahrplan.Room'] = os.environ['CRS_ROOM']
+
+projects = {}
+def generatePreroll(ticket):
+       print(ticket)
+       projectname = ticket.get('Processing.Prerolls.Slug', ticket['Meta.Acronym'])
+       if not projectname in projects:
+               projects[projectname] = renderlib.loadProject(projectname)
+
+       project = projects[projectname]
+       task = project.ticket(ticket)
+       task.outfile = os.path.join(ticket['Processing.Path.Intros'], ticket['Fahrplan.ID'] + '.dv')
+       task.workdir = os.path.join(os.getcwd(), projectname, 'artwork')
+
+       print(colored("rendering", 'green'))
+       renderlib.rendertask(task)
+
+       if hasattr(project, 'deploy'):
+               print(colored("deploying", 'green'))
+               project.deploy(ticket, task)
+
+
+while True:
+       print(colored('Asking RPC for {0}-tickets which are ready for state {1}'.format(ticket_type, ticket_state), 'yellow'))
+
+       ticket_id = rpc.assignNextUnassignedForState(ticket_type, ticket_state, url, token, host, secret, filter)
+       if ticket_id != False:
+               ticket = rpc.getTicketProperties(str(ticket_id), url, token, host, secret)
+               try:
+                       generatePreroll(ticket)
+                       rpc.setTicketDone(str(ticket_id), url, token, host, secret)
+               except:
+                       error = str(traceback.format_exc())
+                       print(colored(error, 'red'))
+                       rpc.setTicketFailed(str(ticket_id), error, url, token, host, secret)
+       
+       else:
+               print('No ticket found')
+       
+       print('Sleeping for 30 seconds')
+       time.sleep(30);
+
diff --git a/video_hd.sh b/video_hd.sh
new file mode 100755 (executable)
index 0000000..5b48e2f
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+target=$(basename ${1%.*})-hd.mp4
+
+ffmpeg -y -nostdin -threads 4 -analyzeduration 20000000 \
+-i $1 -filter_complex "[0:0] hqdn3d,drawbox=0:0:720:1:black [vd]" \
+-map "[vd]" \
+-c:v:0 libx264 -bufsize:0 8192k -minrate:0 100k -maxrate:0 2000k \
+-crf:v 18 -profile:0 main \
+-map 0:1 \
+-c:a:0 aac -strict -2 -b:a:0 128k -ac:a:0 2 -ar:a:0 48000 \
+-aspect 16:9 -f mp4 \
+$target
+
diff --git a/video_sd.sh b/video_sd.sh
new file mode 100755 (executable)
index 0000000..9c5a5c4
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+out=${1%.*}-sd.mp4
+ffmpeg -threads 0 -analyzeduration 20000000 -i $1 \
+-filter_complex hqdn3d,scale=512:288 \
+-c:v:0 libx264 -bufsize:0 8192k -minrate:0 50k -maxrate:0 900k -crf:0 22 \
+-profile:0 baseline -c:a:0 aac -strict -2 -b:a:0 96k -ac:a:0 2 -ar:a:0 48000 \
+-aspect 16:9 -pix_fmt yuv420p -f mp4 $out
+