Compare commits
26 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bfbdda8ffe | ||
![]() |
21a8e014ef | ||
![]() |
a9cbfc5eb3 | ||
![]() |
41db29d24b | ||
![]() |
40eb76b968 | ||
![]() |
5661e690de | ||
![]() |
d8c198f984 | ||
![]() |
b3fb07a6e3 | ||
![]() |
2451c0f25f | ||
![]() |
ca224b9d84 | ||
![]() |
8933550f31 | ||
![]() |
31f01ca386 | ||
![]() |
6876f2cf44 | ||
![]() |
526ef6231a | ||
![]() |
9210d36248 | ||
![]() |
0bb26d6b25 | ||
![]() |
26c660a135 | ||
![]() |
8ca5d334cb | ||
![]() |
367e8ea094 | ||
![]() |
c94b840807 | ||
![]() |
471e0c38b7 | ||
![]() |
848b72b113 | ||
![]() |
3ae90b87c0 | ||
![]() |
1893beda4d | ||
![]() |
ec29473d53 | ||
![]() |
96f410ba6a |
|
@ -1,15 +1,13 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://pretalx.c3voc.de/camp2023/schedule/export/schedule.xml
|
||||
template = intro.mp4
|
||||
alpha = false
|
||||
prores = false
|
||||
fontfile = true
|
||||
inout = t
|
||||
inout_type = t
|
||||
|
||||
[title]
|
||||
in = 16
|
||||
out = 24
|
||||
fontfamily = BeonRegular
|
||||
fontfile = saira.ttf
|
||||
fontsize = 100
|
||||
fontcolor = #FB48C4
|
||||
|
@ -19,7 +17,6 @@ y = 100
|
|||
[speaker]
|
||||
in = 16
|
||||
out = 24
|
||||
fontfamily = BeonRegular
|
||||
fontfile = saira.ttf
|
||||
fontsize = 70
|
||||
fontcolor = #3FFF21
|
||||
|
@ -29,11 +26,10 @@ y = 800
|
|||
[text]
|
||||
in = 16
|
||||
out = 24
|
||||
fontfamily = BeonRegular
|
||||
fontfile = saira.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #FB48C4
|
||||
x = (w-text_w)/2
|
||||
y = 1000
|
||||
text = 'Chaos Communication Camp 2023'
|
||||
text = Chaos Communication Camp 2023
|
||||
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://fahrplan.events.ccc.de/camp/2019/Fahrplan/schedule.xml
|
||||
template = cccamp19_talks_intro_1080p.mov
|
||||
alpha = true
|
||||
prores = true
|
||||
fontfile = true
|
||||
inout = n
|
||||
inout_type = n
|
||||
|
||||
[title]
|
||||
in = 193
|
||||
out = 324
|
||||
fontfamily =
|
||||
fontfile = Marvel-Bold.ttf
|
||||
fontsize = 120
|
||||
fontcolor = #c68100
|
||||
|
@ -19,7 +17,6 @@ y = 480
|
|||
[speaker]
|
||||
in = 233
|
||||
out = 324
|
||||
fontfamily =
|
||||
fontfile = Marvel-Regular.ttf
|
||||
fontsize = 70
|
||||
fontcolor = #c68100
|
||||
|
@ -29,11 +26,10 @@ y = 845
|
|||
[text]
|
||||
in = 242
|
||||
out = 324
|
||||
fontfamily =
|
||||
fontfile = Marvel-Regular.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #c68100
|
||||
x = (w-text_w)/2
|
||||
y = 927
|
||||
text = 'chaos communication camp 2019'
|
||||
text = chaos communication camp 2019
|
||||
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://pretalx.denog.de/denog11/schedule/export/schedule.xml
|
||||
template = denog11_intro_template.ts
|
||||
alpha = false
|
||||
prores = false
|
||||
fontfile = true
|
||||
inout = n
|
||||
inout_type = n
|
||||
|
||||
[title]
|
||||
in = 1
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = DejaVuSans.ttf
|
||||
fontsize = 100
|
||||
fontcolor = #f9cc12
|
||||
|
@ -19,7 +17,6 @@ y = 200
|
|||
[speaker]
|
||||
in = 2
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = DejaVuSans.ttf
|
||||
fontsize = 60
|
||||
fontcolor = #ffffff
|
||||
|
@ -29,11 +26,10 @@ y = 900
|
|||
[text]
|
||||
in = 3
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = DejaVuSans.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #ffffff
|
||||
x = 640
|
||||
y = 1000
|
||||
text = ''
|
||||
; text =
|
||||
|
||||
|
|
|
@ -1,109 +0,0 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from renderlib import *
|
||||
from schedulelib import *
|
||||
from easing import *
|
||||
|
||||
# URL to Schedule-XML
|
||||
scheduleUrl = 'https://pretalx.linuxtage.at/glt24/schedule.xml'
|
||||
#scheduleUrl = 'file:/home/sophie/coding/voc/intro-outro-generator/glt24/schedule__2024-03-25_16-57-04.xml'
|
||||
|
||||
def introFrames(args):
|
||||
#fade in tux and set other opacities to 0
|
||||
frames = 1*fps
|
||||
for i in range(0, frames):
|
||||
yield (
|
||||
('tux', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
('title', 'style', 'opacity', 0),
|
||||
('persons', 'style', 'opacity', 0),
|
||||
)
|
||||
|
||||
#fade in title and persons
|
||||
frames = 2*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('title', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
('persons', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
)
|
||||
|
||||
#show whole image for 5 seconds
|
||||
frames = 5*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('title', 'style', 'opacity', 1),
|
||||
('persons', 'style', 'opacity', 1),
|
||||
)
|
||||
|
||||
|
||||
|
||||
def outroFrames(args):
|
||||
#fadein outro graphics
|
||||
frames = 3*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('tux', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
('cctext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
('logo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)),
|
||||
)
|
||||
frames = 3*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('tux', 'style', 'opacity', 1),
|
||||
('cctext', 'style', 'opacity', 1),
|
||||
('logo', 'style', 'opacity', 1),
|
||||
)
|
||||
|
||||
|
||||
def debug():
|
||||
render(
|
||||
'intro.svg',
|
||||
'../intro.ts',
|
||||
introFrames,
|
||||
{
|
||||
'$title': " Fully declarative Homelab on NixOS ❄️",
|
||||
'$persons': 'Long Name of Dr. Dr. Prof. Dr. Long Long'
|
||||
}
|
||||
)
|
||||
|
||||
#render('outro.svg',
|
||||
# '../outro.ts',
|
||||
# outroFrames
|
||||
#)
|
||||
|
||||
|
||||
def tasks(queue, args, idlist, skiplist):
|
||||
# iterate over all events extracted from the schedule xml-export
|
||||
for event in events(scheduleUrl):
|
||||
if event['room'] not in ('HS i1', 'HS i2', 'HS i7'):
|
||||
print("skipping room %s (%s)" % (event['room'], event['title']))
|
||||
continue
|
||||
if event['day'] not in ('2'):
|
||||
print("skipping day %s" % (event['day']))
|
||||
continue
|
||||
if not (idlist==[]):
|
||||
if 000000 in idlist:
|
||||
print("skipping id (%s [%s])" % (event['title'], event['id']))
|
||||
continue
|
||||
if int(event['id']) not in idlist:
|
||||
print("skipping id (%s [%s])" % (event['title'], event['id']))
|
||||
continue
|
||||
|
||||
# generate a task description and put it into the queue
|
||||
queue.put(Rendertask(
|
||||
infile = 'intro.svg',
|
||||
outfile = str(event['id'])+".ts",
|
||||
sequence = introFrames,
|
||||
parameters = {
|
||||
'$title': event['title'],
|
||||
'$persons': event['personnames']
|
||||
}
|
||||
))
|
||||
|
||||
# place a task for the outro into the queue
|
||||
if not "out" in skiplist:
|
||||
queue.put(Rendertask(
|
||||
infile = 'outro.svg',
|
||||
outfile = 'outro.ts',
|
||||
sequence = outroFrames
|
||||
))
|
||||
|
Before Width: | Height: | Size: 56 KiB |
|
@ -1,714 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1920"
|
||||
height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="outro.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title
|
||||
id="title4199">Intro GLT Talk $id</title>
|
||||
<defs
|
||||
id="defs4">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4215">
|
||||
<rect
|
||||
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4217"
|
||||
width="598.23157"
|
||||
height="820.54736"
|
||||
x="1321.2684"
|
||||
y="111.3658" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4313">
|
||||
<stop
|
||||
style="stop-color:#ffdf00;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4315" />
|
||||
<stop
|
||||
style="stop-color:#e1ecff;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop4317" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4313"
|
||||
id="linearGradient4159"
|
||||
x1="1157.7411"
|
||||
y1="845.13428"
|
||||
x2="1019.1442"
|
||||
y2="-16.928713"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.111049,0,0,1.7357139,42.487372,-407.41737)" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4215-3">
|
||||
<rect
|
||||
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4217-6"
|
||||
width="598.23157"
|
||||
height="820.54736"
|
||||
x="1321.2684"
|
||||
y="111.3658" />
|
||||
</clipPath>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4796"
|
||||
x="-0.049440418"
|
||||
width="1.0988808"
|
||||
y="-0.16957685"
|
||||
height="1.3391537">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="11.131234"
|
||||
id="feGaussianBlur4798" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4960"
|
||||
x="-0.36060125"
|
||||
width="1.7212025"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4962" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4964"
|
||||
x="-0.30700116"
|
||||
width="1.614199"
|
||||
y="-0.1355156"
|
||||
height="1.2710312">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4966" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4968"
|
||||
x="-0.28789104"
|
||||
width="1.5756436"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4970" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4972"
|
||||
x="-0.37996282"
|
||||
width="1.7267602"
|
||||
y="-0.13578054"
|
||||
height="1.2715611">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4974" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4976"
|
||||
x="-0.31503033"
|
||||
width="1.629559"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4978" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4980"
|
||||
x="-0.30618454"
|
||||
width="1.6123691"
|
||||
y="-0.13404269"
|
||||
height="1.2680854">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4982" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4984"
|
||||
x="-0.28443687"
|
||||
width="1.5688737"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4986" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4988"
|
||||
x="-1.2896075"
|
||||
width="3.579215"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4990" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4992"
|
||||
x="-0.4079725"
|
||||
width="1.815945"
|
||||
y="-0.13578601"
|
||||
height="1.271572">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7383836"
|
||||
id="feGaussianBlur4994" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5630"
|
||||
x="-1.1136467"
|
||||
width="3.2324538"
|
||||
y="-0.62079014"
|
||||
height="2.2415803">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5632" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5634"
|
||||
x="-0.72607727"
|
||||
width="2.4521545"
|
||||
y="-0.60484332"
|
||||
height="2.2096866">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5636" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5638"
|
||||
x="-0.8303261"
|
||||
width="2.6606522"
|
||||
y="-0.63392233"
|
||||
height="2.2678447">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5640" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5642"
|
||||
x="-0.81392521"
|
||||
width="2.6278504"
|
||||
y="-0.60595519"
|
||||
height="2.2119104">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5644" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5646"
|
||||
x="-1.1136475"
|
||||
width="3.2324552"
|
||||
y="-0.62079014"
|
||||
height="2.2415803">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5648" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter5650"
|
||||
x="-0.60153228"
|
||||
width="2.2030646"
|
||||
y="-0.45593307"
|
||||
height="1.9118661">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="6.613574"
|
||||
id="feGaussianBlur5652" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.52480581"
|
||||
inkscape:cx="989.88996"
|
||||
inkscape:cy="326.78754"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="1916"
|
||||
inkscape:window-height="1040"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<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>Intro GLT Talk $id</dc:title>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>meisterluk</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:identifier>$id</dc:identifier>
|
||||
<dc:language>$language</dc:language>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>CC-BY AT 4.0</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,27.63784)">
|
||||
<rect
|
||||
style="opacity:1;fill:#dd9640;fill-opacity:1;stroke:none;stroke-width:0.99601775;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.99601775, 2.98805323;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4332"
|
||||
width="1920"
|
||||
height="1080"
|
||||
x="0"
|
||||
y="-27.63784" />
|
||||
<g
|
||||
transform="matrix(0.83983181,0,0,0.83983181,767.53662,66.962691)"
|
||||
style="display:inline"
|
||||
id="tux">
|
||||
<path
|
||||
id="path5578"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:32;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 302.39927,158.25906 c 4.95972,27.22874 1.0154,56.17731 12.50548,82.12068 12.59936,23.52316 26.6976,46.41063 44.72227,66.66421 18.80391,23.2771 30.30057,51.16114 34.63712,80.04146 3.47677,15.36121 5.54615,34.0451 -7.98699,45.84849 4.09204,7.00434 16.02765,8.84112 14.42729,17.32327 -0.41492,17.07705 16.61211,27.42692 30.17191,35.50021 7.89896,3.73334 12.48974,14.81843 4.0584,20.44735 -13.07656,10.07265 -28.28654,16.91132 -43.49079,23.55278 -14.42168,6.89378 -25.88389,17.63719 -37.27092,28.16718 -13.11299,10.23041 -32.50543,9.0026 -47.64415,3.95549 -8.57147,-3.09835 -11.09801,-11.99098 -16.7305,-17.72675 -31.55954,-2.45964 -72.48996,-4.3004 -100.05912,0.39664 -15.33226,2.0838 -23.87824,16.07462 -37.54869,21.0067 -16.41847,2.61149 -31.4464,-7.03163 -46.48659,-11.75918 -25.212812,-9.97879 -53.01561,-11.32554 -78.712766,-19.6238 -8.948525,-2.81699 -9.394291,-12.89251 -5.401021,-19.61121 5.498182,-10.94002 5.315258,-23.5007 0.521375,-34.61977 -2.867591,-8.78669 -0.938595,-23.05432 11.278204,-23.61968 11.239188,-0.26876 26.6409,2.21336 32.639358,-9.47048 3.083812,-4.48378 2.938329,-11.16296 7.389143,-14.5755 7.395926,-1.93238 2.729126,-14.92366 2.413592,-22.80524 -0.674048,-16.83673 12.886852,-29.82931 18.52497,-44.98683 9.515295,-19.95436 14.430415,-42.30263 30.252535,-59.09709 12.15921,-14.84682 23.07189,-30.60364 34.03076,-46.20927 3.34849,-10.50708 -0.47655,-21.85396 0.0335,-32.70971 -0.79498,-16.30099 -1.42519,-33.0826 -2.02144,-47.75136 l 2.95966,-17.54244 c -16.6897,-7.27789 -34.24246,-33.56744 -16.44443,-47.03439 14.09142,-3.16724 20.77367,-4.84393 23.76492,-20.642574 3.99544,-21.10253 13.82487,-43.1248 32.08351,-57.09464 18.07979,-9.5916 20.26033,28.01404 32.68472,4.33361 15.25333,-21.43753 39.38222,-6.61056 44.05893,14.89553 -10.87707,-29.023396 8.70854,-14.810027 6.69365,-36.934081 32.14094,-3.075196 68.01,6.11296 88.88342,30.52034 -20.17114,16.186215 -39.78936,33.59352 -55.32554,53.818925 -11.27302,10.09573 0.98494,15.06509 0.98494,15.06509 7.73205,16.87569 -4.16878,26.43789 -14.59671,40.15604 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccccccccscccccccscccccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5580"
|
||||
d="m 190.64953,200.73493 c 21.1249,-9.68557 44.52455,2.23507 64.79428,8.53199 11.09401,2.35619 19.02666,7.39285 18.75785,18.69403 0.12067,14.13474 -28.98641,17.28417 -38.96944,28.16856 -17.73072,12.14113 -43.33213,10.63659 -57.96702,-5.22547 -19.47628,-10.91984 -13.79198,-34.68293 4.60816,-43.5826 2.88288,-2.24519 5.81977,-4.42807 8.77617,-6.5865"
|
||||
style="display:inline;fill:#f8c200;fill-rule:evenodd;stroke:none" />
|
||||
<path
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 201.03939,203.38446 c -3.58171,-1.49763 -12.58395,1.40768 -7.94981,5.61535 3.46697,-0.18093 5.10755,-5.15101 7.94981,-5.61535 z"
|
||||
id="path5582"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 215.94525,203.9193 c 2.08632,4.09932 14.28325,3.45115 6.9563,-0.93603 -1.66897,0.47167 -6.71314,-0.88117 -6.9563,0.93603 z"
|
||||
id="path5584"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 169.0979,230.25872 c 9.53709,2.48878 11.38486,14.93391 22.24539,15.03042 21.61843,1.60545 42.1343,-6.95013 61.7959,-14.22809 1.4348,-3.5524 8.35574,-7.95405 8.94367,-1.6045 -5.91924,7.19895 -17.39371,7.67049 -25.85587,11.36253 -13.15975,5.7875 -27.03515,12.36695 -42.08843,9.78535 -2.60893,-0.13323 -14.5588,-2.29892 -8.24728,3.1651 7.03153,7.39136 18.01397,10.58315 28.06661,7.10743 14.12696,-4.44006 27.45763,-11.10186 40.72346,-17.13058 8.36013,-0.51548 2.53243,7.95095 -2.3938,8.57356 -15.08193,5.38056 -27.85293,15.17646 -40.03327,24.86877 -9.09713,4.49169 -20.6032,1.87351 -26.12102,-6.41779 -6.05872,-5.12938 -7.79844,-14.55251 -15.47364,-17.64888 -1.79367,-7.96162 -6.986,-20.85113 -1.56172,-22.86332 z"
|
||||
id="path5586"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccscccccscccccccccccccc"
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 511.40907,651.8895 c -3.81532,-4.78934 -10.13414,-7.11259 -15.33744,-9.59965 2.30202,-12.52248 7.01262,-25.1968 5.04847,-38.21511 -2.16137,-21.87 -14.32051,-41.98289 -28.7453,-58.79093 -2.62421,-2.73048 -8.73719,-8.77742 -11.65136,-6.88161 16.30392,21.65596 32.70499,45.24438 34.57979,72.52686 0.46573,11.74421 0.49787,27.39 -11.7241,34.03495 -5.99389,1.66394 -16.81296,2.78663 -16.60946,-5.74921 -0.34464,-22.43388 1.25476,-46.35207 -11.30802,-66.49236 -7.14168,-13.26959 -16.17872,-25.8642 -18.64585,-40.87166 -3.55964,-12.66517 -10.26702,-24.16753 -18.88096,-34.36185 -7.3109,-8.72912 -4.60929,-19.97448 -1.07232,-29.52283 3.52499,-8.08996 -5.22804,-13.36139 -12.58437,-14.41397 -9.89629,-3.24322 -25.40292,-5.92182 -26.09246,-18.10164 -1.38142,-8.83584 5.53151,-20.02158 16.2918,-17.11791 10.57919,0.79152 14.70046,12.21226 10.48644,20.40447 -3.95905,4.89468 0.27693,10.14486 6.2866,9.46086 7.8762,-2.04071 6.63047,-12.50202 6.11653,-18.63027 -2.20963,-10.70274 -4.98628,-25.62682 -18.88095,-27.543 -8.96236,-2.3978 -20.12449,-1.44896 -24.73445,7.34389 -6.36375,8.62749 -6.45662,19.61884 -5.21939,29.55824 -6.05912,-0.78781 -13.09034,-2.58248 -19.73284,-1.73815 -4.83073,-2.75032 -0.86227,-9.95548 -2.83908,-14.43988 -0.23034,-9.68585 -8.05088,-22.08609 -19.965,-18.56056 -14.68354,4.59163 -14.1766,21.98042 -11.65851,33.69818 1.20292,4.1656 2.40446,13.11421 8.62568,11.87048 5.49701,-4.21628 3.43643,-7.56077 -1.84549,-10.16128 -4.81923,-7.05191 -5.70263,-20.871 6.10434,-21.79373 8.8868,-0.0196 13.2223,10.89843 12.39516,18.01787 -1.23073,7.68368 -11.1149,9.62965 -15.60772,15.41161 -6.15392,3.52876 -14.73413,11.07513 -9.42209,18.17991 2.33156,8.90786 4.84784,17.94697 1.56172,22.86332 -3.05798,13.5649 -11.40017,25.50586 -17.31921,38.10568 -3.79561,8.87603 -0.36666,18.54331 -2.56326,27.45343 -12.32734,16.53359 -21.2438,35.58022 -25.64701,55.38046 -2.407,12.51354 -2.67412,25.25507 -2.59557,37.90035 -1.7857,6.93255 -9.541,-0.40385 -12.06678,-3.34265 -11.19452,-11.76883 -6.38251,-28.69017 -4.11671,-42.38406 -5.64115,3.30146 -6.16939,12.12181 -7.17578,18.17347 -2.02742,16.26902 6.61987,32.00041 20.11585,41.85477 16.96278,15.38569 35.75518,28.82623 53.81464,42.95462 8.16682,5.91339 10.25021,18.87535 0.50626,24.43148 -4.06382,2.71521 -9.48369,4.31218 -8.83669,7.32459 0.2421,1.12723 1.33369,2.45265 3.6637,4.10901 l -11.72975,-9.53528 c -1.62155,-2.39931 -3.29406,-4.72669 -4.94523,-6.96896 -16.40404,-22.13097 -30.3375,-46.58884 -51.80142,-64.85118 -6.28565,-5.58611 -15.33608,-4.94951 -22.28782,-0.93605 -6.72477,0.16472 -4.54697,-11.28231 -4.6406,-13.46061 -0.73683,-17.14153 13.12175,-30.37303 18.86265,-45.80686 9.68875,-20.31807 14.69346,-43.07372 30.80398,-60.1743 12.38084,-15.11746 23.49244,-31.16149 34.65109,-47.05157 3.40953,-10.69862 -0.48525,-22.25233 0.0341,-33.30596 -0.81189,-16.20257 -1.39425,-32.4135 -2.05831,-48.62178 h 2e-5 c -0.56641,-24.19405 2.77653,-52.95259 25.77385,-67.8525 21.59677,-12.67894 49.32924,-12.32766 73.24689,-6.41186 25.82378,6.60253 46.98823,27.93022 49.38305,53.43286 5.05013,27.72506 1.0339,57.2013 12.73343,83.61757 12.82902,23.95195 27.18424,47.25661 45.53748,67.87937 19.14667,23.70141 30.8529,52.09373 35.26849,81.50047 3.54015,15.64122 5.64725,34.66568 -8.13258,46.68421 z"
|
||||
id="path5588"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccccc"
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 326.56973,781.34152 c 13.02664,-6.78672 10.0856,-25.268 -0.80527,-32.54657 -2.9699,-6.336 7.89961,-2.5876 9.55567,0.69945 13.12158,10.92111 32.22597,6.97917 48.12175,6.02246 17.60208,-1.3639 34.9205,-9.5678 44.10169,-24.17183 2.27383,-3.69641 9.71717,-7.52753 10.73933,-0.98391 2.73802,15.13733 -10.47328,29.82698 -4.98608,44.82643 2.96954,2.67573 4.74315,1.94565 5.67297,0.0729 2.9245,4.91899 0.79588,8.95917 0.11902,13.25183 -0.72831,-0.95628 -1.66576,-2.04363 -2.49901,-2.89216 -10.38716,-2.80837 -21.8866,-1.29462 -32.719,-1.95363 -23.02775,0.67509 -46.41921,-1.75934 -69.16402,2.3575 -4.30191,0.58468 -8.07914,2.08994 -11.58544,4.06914 z"
|
||||
id="path5590"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke:none"
|
||||
d="m 446.051,494.82468 c -2.02429,-0.36568 -9.25652,-7.47605 -10.9217,-10.73764 -1.63059,-3.19389 -1.84902,-7.39086 -0.41209,-7.91766 0.61922,-0.227 1.87261,0.48668 3.51511,2.00148 1.4041,1.29485 4.65893,3.27294 7.23304,4.39579 5.70256,2.48751 6.94106,3.98717 6.35833,7.69929 -0.28474,1.81431 -0.89185,2.97493 -1.98602,3.79716 -0.86667,0.65129 -1.74502,1.14836 -1.9519,1.10462 -0.20681,-0.0438 -1.03247,-0.1981 -1.83477,-0.34304 z"
|
||||
id="path5592" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke:none"
|
||||
d="m 261.36105,572.40414 c 0,-0.60552 1.23622,-2.53546 2.74712,-4.28876 1.51094,-1.75332 2.91993,-4.08304 3.13114,-5.17721 0.47513,-2.4616 1.83159,-4.61745 2.90532,-4.61745 1.26985,0 2.83161,1.99025 2.83161,3.60844 0,1.65786 -2.34634,4.98157 -6.29802,8.92149 -2.82271,2.8144 -5.31717,3.54316 -5.31717,1.55349 z"
|
||||
id="path5594" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 392.15582,423.95204 c 5.89646,0.85476 5.43298,8.60913 8.3758,11.09749 5.43472,-3.01937 0.67143,-12.60031 -5.12545,-13.71153 -2.44009,-1.89797 -8.17716,1.40675 -3.25035,2.61404 z"
|
||||
id="path5596" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 329.69284,422.61503 c -5.35938,2.55745 3.54968,6.4248 2.69712,10.56252 0.96421,8.11847 5.73813,-1.36523 2.09524,-4.76233 -0.70141,-1.84312 -2.07474,-6.71607 -4.79236,-5.80019 z"
|
||||
id="path5598" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke:none"
|
||||
d="m 399.13738,432.31981 c -2.58114,-6.06398 -3.30178,-7.03323 -6.19548,-8.33266 -2.67498,-1.20124 -2.78093,-1.33265 -1.68874,-2.0956 1.60706,-1.12259 3.13158,-1.02048 5.74946,0.38514 4.12866,2.21675 6.72843,7.91442 5.01049,10.98095 -1.01432,1.81065 -1.81728,1.54878 -2.87567,-0.93783 z"
|
||||
id="path5600" />
|
||||
<path
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke:none"
|
||||
d="m 332.59333,433.0656 c -0.33934,-1.47634 -1.53458,-3.97448 -2.65605,-5.55142 -1.80813,-2.54245 -1.89302,-3.00684 -0.74861,-4.10011 1.13262,-1.082 1.43038,-1.08489 2.43298,-0.0235 2.19051,2.31894 4.27234,8.0774 3.70328,10.24338 -0.7639,2.90767 -1.99139,2.65233 -2.7316,-0.56831 z"
|
||||
id="path5602" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5604"
|
||||
d="m 107.47335,426.57322 c 16.97018,16.80535 38.91986,44.13651 51.95284,65.39796 11.23055,18.32105 23.73527,35.55008 12.88255,53.92275 -2.43239,22.90516 -30.47675,14.42756 -46.28163,11.31035 -29.58883,-7.78398 -59.32627,-15.1352 -89.01179,-22.58147 -4.60691,-3.17663 -17.9842,-2.25449 -15.82797,-8.59183 2.74572,-9.46094 7.49606,-18.93996 9.03988,-28.39006 -2.94161,-11.05345 -10.69462,-21.57622 -8.88773,-33.20719 8.81448,-10.20366 26.32568,0.0121 37.75431,-7.6135 8.55049,-0.5412 6.7685,-9.76499 9.25162,-15.40471 2.23193,-9.54402 1.939408,-16.91009 12.368675,-21.67403 8.491568,-3.87883 21.041475,0.60647 26.759245,6.83173 z"
|
||||
style="display:inline;fill:#f8c200;fill-rule:evenodd;stroke:none"
|
||||
sodipodi:nodetypes="csccccccccsc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 177.43252,550.94063 c -9.21814,5.20334 -16.5637,13.68233 -26.6477,17.32047 -16.71775,2.65909 -32.0196,-7.1598 -47.33396,-11.97351 -25.67239,-10.1607 -53.98199,-11.532 -80.14755,-19.9815 -9.11164,-2.86836 -9.56553,-13.12754 -5.49947,-19.96869 5.59839,-11.13944 5.41215,-23.9291 0.53088,-35.25084 -2.91987,-8.94684 -0.95571,-23.47456 11.48378,-24.05022 11.44406,-0.27366 27.12651,2.25372 33.23432,-9.64311 3.14003,-4.56551 2.99189,-11.36642 7.52382,-14.84117 3.84319,7.36363 -0.68436,16.75103 -4.40071,23.66571 -8.80585,10.73778 -24.35547,4.77617 -36.31344,5.303 -9.6553,1.11194 -6.50756,12.04903 -3.00832,17.42406 7.12515,11.88369 9.35132,28.10752 -1.42127,38.77655 -5.76834,4.4693 -3.60748,12.33492 4.15886,12.60579 35.4094,8.49526 70.89049,16.90418 106.51262,24.47934 12.12974,2.44969 26.5556,-2.21826 30.28201,-14.32198 4.96342,-11.2195 4.50071,-24.9346 -0.65234,-36.29023 -1.15911,-2.5543 -4.279,-8.03783 -6.63133,-12.86335 l 9.33634,13.75224 c 7.76099,10.51045 22.17757,28.75139 14.03745,41.7217 -1.39471,2.22231 -3.07735,3.11656 -5.04399,4.13574 z"
|
||||
id="path5606"
|
||||
sodipodi:nodetypes="ccccccccccccccccsccsc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5608"
|
||||
d="m 403.42269,445.86199 c -0.0791,7.6043 -0.15834,15.20863 -0.23752,22.81295 10.15616,6.92292 21.45557,12.89719 30.90745,20.4045 9.50928,9.90014 3.576,18.3032 -8.86782,22.98162 -15.88865,6.63518 -30.67103,15.01808 -44.24564,25.23572 -9.35623,5.95675 -18.12228,13.41929 -27.83705,18.46124 -12.05285,0.86765 -24.10571,1.73532 -36.15857,2.60298 -5.63667,-9.79681 -12.91585,-19.20212 -17.53297,-29.24196 1.17409,-31.33085 2.34817,-62.66169 3.52227,-93.99254 7.63652,-4.02219 13.91036,-12.46791 23.55796,-9.96174 20.30327,-0.95476 38.88471,9.25625 59.05053,9.16864 7.13716,1.08705 16.82329,3.47534 17.84136,11.52857 z"
|
||||
style="display:inline;fill:#f8c200;fill-rule:evenodd;stroke:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 293.11001,536.27895 c 1.26709,-2.55201 1.28471,-7.5434 1.80927,-10.1122 4.87353,-23.27603 4.1822,-47.14156 4.44316,-70.74223 -0.27022,-9.99394 -2.93767,-25.00712 9.5676,-29.42379 4.86683,-0.58759 13.63422,-3.26946 16.04178,2.00538 -3.7037,5.45766 -14.24357,0.39989 -17.23497,7.70243 -5.17962,10.87427 -3.61455,23.68757 -1.84403,35.1868 4.20685,15.26633 5.23332,31.1349 1.70421,46.62065 -2.5576,11.22504 -2.02896,24.89298 9.14163,31.94692 13.38949,9.79666 32.67077,4.22297 43.39965,-6.5753 13.27213,-10.55679 28.06845,-19.76448 45.25684,-23.37087 12.01199,-4.0197 27.47823,-7.8082 32.15208,-20.38031 -0.0651,-9.88956 -13.51058,-11.96057 -21.52644,-13.7957 -15.29895,-3.74589 -19.26448,-21.4007 -18.15172,-34.31073 -0.27716,-7.75082 7.5891,-8.80695 5.95958,-0.17019 -0.42248,17.38833 16.91492,27.92686 30.72188,36.14731 8.04297,3.8014 12.71743,15.08855 4.1324,20.82005 -13.31493,10.25627 -28.80215,17.21959 -44.28357,23.98214 -14.68454,7.01943 -26.35569,17.95867 -37.9503,28.68059 -13.35202,10.4169 -33.09793,9.16671 -48.51262,4.02759 -7.45967,-2.69646 -10.42284,-9.70298 -14.70741,-15.32867"
|
||||
id="path5610" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#000000;fill-rule:nonzero;stroke:none"
|
||||
d="m 389.13838,433.22076 c -12.16955,11.55576 -26.89029,26.89709 -45.99538,23.79918 -14.82985,-4.78899 -24.76624,-20.97397 -22.85602,-35.43151 3.46121,-12.90886 21.15219,-13.92849 32.55537,-11.47442 3.25291,-0.0697 14.44936,7.93863 12.8779,2.62299 10.58873,0.64418 18.90024,6.34883 23.41813,20.48376 z"
|
||||
id="path5612"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccssccsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5614"
|
||||
d="m 289.88849,103.24784 c 24.9636,-0.49799 36.64782,21.81701 21.99644,42.53264 -12.79239,20.09626 -40.6322,20.42579 -62.60862,23.36844 -29.88638,1.73177 -61.55246,3.27129 -89.66445,-7.97371 -16.6897,-7.27789 -37.15611,-38.71843 -16.44443,-47.03439 21.89678,-8.79179 20.77367,-4.84393 23.76492,-20.642574 3.99544,-21.10253 13.82487,-43.1248 32.08351,-57.09464 18.07979,-9.5916 20.26033,28.01404 32.68472,4.33361 15.25333,-21.43753 39.38222,-6.61056 44.05893,14.89553 3.52927,16.22952 9.92567,31.62192 14.12898,47.615094 z"
|
||||
style="display:inline;fill:#006c34;fill-rule:evenodd;stroke:#000000;stroke-width:6.57600021;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5616"
|
||||
d="m 139.46118,117.14937 c 33.62867,45.49425 159.89149,33.56521 178.34525,2.84522"
|
||||
style="display:inline;fill:none;stroke:#000000;stroke-width:6.57633829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5618"
|
||||
d="m 159.54841,106.89551 c 37.36717,10.26274 79.3151,17.18779 116.77335,3.58875 9.47785,-3.23766 16.34199,-14.762433 16.75462,4.34473 0.24653,11.41565 8.53529,19.30305 1.69723,22.65883 -40.44952,15.93698 -101.9237,15.01864 -136.25135,-1.80879 -5.15636,-6.86691 0.7629,-20.13781 1.02615,-28.78352 z"
|
||||
style="display:inline;fill:#000000;fill-rule:evenodd;stroke:none" />
|
||||
<g
|
||||
transform="translate(-145.68882,-239.1525)"
|
||||
style="display:inline"
|
||||
id="g5620">
|
||||
<path
|
||||
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:6.57633829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 517.02542,288.78824 c -28.76116,23.07925 -56.39823,48.64105 -72.6807,81.31492 -18.78146,-0.49478 -11.03643,-18.05637 -11.64245,-30.61129 0.69491,-27.13576 -0.96154,-54.29894 -4.56026,-81.22397 32.14094,-3.0752 68.01,6.11296 88.88341,30.52034 z"
|
||||
id="path5622"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:6.57633829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 430.45667,278.97813 c 24.11568,4.78447 47.03876,11.62624 68.3531,23.44545 -19.27943,17.39006 -32.80723,34.21969 -32.80723,34.21969 -12.89435,-11.14801 -32.50544,-13.91412 -32.50544,-13.91412 0,0 -2.30645,-33.34508 -3.04043,-43.75102 z"
|
||||
id="path5624"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="959.36597"
|
||||
y="677.32166"
|
||||
id="cctext"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5631"
|
||||
x="959.36597"
|
||||
y="677.32166"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Titillium Web';-inkscape-font-specification:'Titillium Web, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1">Content released under CC-BY AT 3.0</tspan></text>
|
||||
<g
|
||||
id="logo"
|
||||
transform="translate(209.24617,40)">
|
||||
<rect
|
||||
style="display:inline;opacity:0.5;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:14.74640846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4796)"
|
||||
id="rect5522"
|
||||
width="689.47974"
|
||||
height="201.01898"
|
||||
x="406.01398"
|
||||
y="687.32812"
|
||||
inkscape:export-filename="/home/flo/Documents/projects/linuxtage/gltgit/glt12/grafiken/shirts/linuxtage2012-hinten_10jahre_v2.png"
|
||||
inkscape:export-xdpi="80.963211"
|
||||
inkscape:export-ydpi="80.963211" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
d="M 529.0372,834.41418 H 498.25177 V 721.50906 H 484.3564 v 134.24459 h 44.6808 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4992)"
|
||||
id="path5524"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
d="M 558.84478,855.75365 V 721.50906 h -14.13495 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4988)"
|
||||
id="path5526"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="m 591.61606,855.75365 v -110.5772 h 1.67703 l 25.2752,110.5772 h 23.11902 V 721.50906 h -14.13495 v 110.57719 h -1.67703 L 601.19908,721.50906 H 577.6009 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4984)"
|
||||
id="path5528"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsssccsscc"
|
||||
d="m 674.18158,721.50906 h -14.01516 v 90.98369 c 0,31.81516 9.10389,45.00685 29.70735,45.00685 20.84303,0 29.82713,-13.19169 29.82713,-45.00685 v -90.98369 h -14.01516 v 90.98369 c 0,16.87755 -5.03109,23.2794 -15.81197,23.2794 -10.6611,0 -15.69219,-6.20786 -15.69219,-23.2794 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4980)"
|
||||
id="path5530"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="m 731.50374,721.50906 23.11902,67.70427 -23.11902,66.54032 h 15.69218 l 16.17133,-50.24473 16.05155,50.24473 h 15.69219 l -22.75966,-66.54032 22.75966,-67.70427 H 779.4188 l -16.05155,51.2147 -16.17133,-51.2147 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4976)"
|
||||
id="path5532"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4972)"
|
||||
d="m 809.81806,721.50709 -7.375,21.9375 h 17.84375 v 112.3125 h 13.875 v -112.3125 h 20.84375 v -21.9375 z"
|
||||
id="path5534"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccccc"
|
||||
d="m 873.50641,855.75365 4.07278,-26.77132 h 28.86883 l 4.55193,26.77132 h 14.13494 L 905.6095,721.50906 h -26.47307 l -19.76497,134.24459 z m 20.96284,-114.26311 9.34344,66.34632 H 880.4541 l 9.7028,-66.34632 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4968)"
|
||||
id="path5536"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 966.35098,799.76297 h 13.34345 v 35.42719 c -0.11979,0 -7.06748,1.35797 -11.73919,1.35797 -15.33281,0 -19.04624,-13.96767 -19.04624,-48.11078 0,-35.11307 4.55193,-47.72279 19.40559,-47.72279 9.94238,0 25.38098,0.0342 25.38098,0.0342 l -0.0283,-19.33797 c 0,0 -15.76972,-0.0356 -27.38911,-0.0356 -23.47837,0 -31.86353,20.50347 -31.86353,67.06223 0,44.23084 7.66644,67.45024 32.34268,67.45024 9.46321,0 26.83243,-0.24407 26.83243,-0.24407 l 0.20101,-76.79701 h -27.23881"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4964)"
|
||||
id="path5538"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccsssccsssccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="m 1060.7439,855.75365 v -20.95147 h -36.655 v -35.50111 h 29.4677 v -20.36948 h -29.4677 v -36.47106 h 36.655 v -20.95147 h -50.5504 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';display:inline;opacity:0.4;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter4960)"
|
||||
id="path5540"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
transform="translate(0,-80)"
|
||||
id="g5654">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5544"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5650)"
|
||||
d="m -609.9432,74.185678 h 4.8178 v 16.092469 c -0.39737,0.132449 -0.97683,0.281453 -1.73838,0.447013 -0.72849,0.165561 -1.58941,0.331121 -2.58274,0.496681 -0.96028,0.165561 -2.01986,0.298009 -3.17876,0.397345 -1.15894,0.132448 -2.33442,0.198672 -3.52644,0.198673 -2.41719,-10e-7 -4.61915,-0.397345 -6.60586,-1.192035 -1.98673,-0.794688 -3.692,-1.95361 -5.11581,-3.476768 -1.42383,-1.52315 -2.53308,-3.39398 -3.32776,-5.612497 -0.76159,-2.218497 -1.14237,-4.768124 -1.14237,-7.648889 0,-2.880731 0.43045,-5.430358 1.29137,-7.64889 0.89402,-2.251594 2.08605,-4.13898 3.5761,-5.662165 1.49004,-1.523123 3.22842,-2.682045 5.21516,-3.476768 2.01982,-0.794655 4.1721,-1.191999 6.45685,-1.192034 1.55625,3.5e-5 2.9304,0.09937 4.12245,0.298008 1.22513,0.198707 2.26816,0.430492 3.12909,0.695354 0.86089,0.26493 1.55624,0.529827 2.08607,0.79469 0.56287,0.264929 0.94366,0.463602 1.14236,0.596017 l -1.53971,4.023117 c -0.96028,-0.6291 -2.23509,-1.142336 -3.82444,-1.539711 -1.58941,-0.430426 -3.2119,-0.645655 -4.86748,-0.645686 -1.75496,3.1e-5 -3.36089,0.314596 -4.81781,0.943694 -1.42383,0.629159 -2.64897,1.53974 -3.67544,2.731747 -0.99337,1.192061 -1.7715,2.64899 -2.3344,4.370794 -0.56291,1.688737 -0.84436,3.592679 -0.84436,5.711833 0,2.052964 0.23178,3.923794 0.69536,5.612497 0.49667,1.688725 1.22513,3.145655 2.18539,4.370794 0.99336,1.19204 2.20194,2.119178 3.62578,2.781414 1.45691,0.662245 3.16218,0.993366 5.11581,0.993362 1.39069,4e-6 2.56617,-0.06622 3.52644,-0.198672 0.99334,-0.165557 1.70525,-0.314561 2.13573,-0.447013 V 74.185678"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5546"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5646)"
|
||||
d="m -588.14976,64.748737 c 0.39733,2.6e-5 0.84434,0.03314 1.34104,0.09934 0.52977,0.03314 1.04301,0.09936 1.53971,0.198672 0.49666,0.06625 0.94367,0.149031 1.34104,0.248341 0.43043,0.06625 0.745,0.132474 0.94369,0.198673 l -0.79469,4.023117 c -0.36425,-0.132427 -0.97682,-0.281431 -1.83772,-0.447013 -0.82782,-0.198651 -1.90396,-0.297987 -3.22843,-0.298009 -0.86092,2.2e-5 -1.72184,0.09936 -2.58274,0.298009 -0.82781,0.165582 -1.37416,0.281474 -1.63905,0.347676 v 21.704966 h -4.61913 v -24.73472 c 1.09269,-0.39732 2.45029,-0.761553 4.07278,-1.092699 1.62249,-0.364207 3.44365,-0.546323 5.4635,-0.546349"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5548"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5642)"
|
||||
d="m -569.54285,87.794742 c 1.09269,3e-6 2.05294,-0.01655 2.88075,-0.04967 0.8609,-0.06622 1.57281,-0.165556 2.13573,-0.298008 v -7.698558 c -0.33114,-0.165549 -0.87748,-0.297997 -1.63904,-0.397345 -0.72849,-0.132436 -1.62251,-0.19866 -2.68208,-0.198672 -0.69537,1.2e-5 -1.44039,0.04968 -2.23507,0.149004 -0.76159,0.09935 -1.4735,0.314576 -2.13573,0.645686 -0.62913,0.298019 -1.15893,0.728476 -1.58938,1.291371 -0.43046,0.529802 -0.64569,1.241711 -0.64568,2.135728 -10e-6,1.65561 0.52978,2.814532 1.58938,3.476768 1.05957,0.629133 2.49995,0.943698 4.32112,0.943695 M -569.94019,64.6494 c 1.85426,2.6e-5 3.41053,0.248366 4.6688,0.745021 1.29135,0.463595 2.31783,1.142391 3.07942,2.036393 0.79467,0.860937 1.35758,1.903966 1.68872,3.129091 0.3311,1.192054 0.49666,2.516536 0.49668,3.973449 v 16.142137 c -0.39737,0.06622 -0.96027,0.165561 -1.68871,0.298009 -0.69538,0.09934 -1.49007,0.198672 -2.38407,0.298009 -0.89405,0.09934 -1.87085,0.182116 -2.93042,0.24834 -1.02649,0.09934 -2.05296,0.149004 -3.07943,0.149004 -1.45694,0 -2.79798,-0.149004 -4.02311,-0.447013 -1.22516,-0.298008 -2.28474,-0.761577 -3.17876,-1.390707 -0.89403,-0.662239 -1.58939,-1.523152 -2.08606,-2.582742 -0.49669,-1.059581 -0.74503,-2.334395 -0.74502,-3.824444 -10e-6,-1.423811 0.28145,-2.648956 0.84435,-3.675441 0.59602,-1.026462 1.39071,-1.854263 2.38407,-2.483406 0.99336,-0.629114 2.15228,-1.092683 3.47677,-1.390707 1.32447,-0.297993 2.71518,-0.446997 4.17212,-0.447013 0.46356,1.6e-5 0.94368,0.03313 1.44038,0.09934 0.49666,0.03313 0.96023,0.09935 1.3907,0.198673 0.46356,0.06624 0.8609,0.132464 1.19204,0.198672 0.3311,0.06624 0.56289,0.115908 0.69535,0.149005 v -1.291371 c -10e-6,-0.761561 -0.0828,-1.506582 -0.24834,-2.235065 -0.16558,-0.761559 -0.46358,-1.4238 -0.89402,-1.986725 -0.43048,-0.595996 -1.02649,-1.059565 -1.78806,-1.390707 -0.72848,-0.364211 -1.68872,-0.546327 -2.88075,-0.546349 -1.52316,2.2e-5 -2.8642,0.115914 -4.02311,0.347676 -1.12582,0.198695 -1.97018,0.413923 -2.53308,0.645686 l -0.54635,-3.824445 c 0.59602,-0.264871 1.58938,-0.513211 2.98009,-0.745022 1.3907,-0.26487 2.8973,-0.397318 4.5198,-0.397344"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5550"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5638)"
|
||||
d="m -535.05377,68.771854 c -0.69537,0.761599 -1.62251,1.837741 -2.78141,3.228427 -1.12583,1.390725 -2.35098,2.930435 -3.67544,4.619135 -1.29139,1.688729 -2.59931,3.460223 -3.92379,5.314488 -1.29138,1.854284 -2.43374,3.625778 -3.4271,5.314488 h 14.20509 v 3.874113 h -19.71825 v -3.079423 c 0.79469,-1.456927 1.7715,-3.062861 2.93042,-4.817807 1.15892,-1.75493 2.36751,-3.493312 3.62577,-5.215152 1.29137,-1.754925 2.53307,-3.393971 3.72511,-4.917143 1.22514,-1.556248 2.28472,-2.864174 3.17876,-3.923781 h -12.7647 v -3.874113 h 18.62554 v 3.476768"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5552"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5634)"
|
||||
d="m -531.02678,78.258464 c 0,-2.284718 0.33112,-4.271441 0.99336,-5.960174 0.66224,-1.721807 1.53971,-3.145625 2.63242,-4.271458 1.09269,-1.125786 2.35094,-1.970143 3.77477,-2.533073 1.42381,-0.56288 2.88074,-0.844332 4.3708,-0.844358 3.47675,2.6e-5 6.14227,1.092723 7.99656,3.278095 1.85425,2.152306 2.78139,5.446954 2.78142,9.883955 -3e-5,0.198685 -3e-5,0.463582 0,0.79469 -3e-5,0.29802 -0.0166,0.579473 -0.0497,0.844357 H -526.209 c 0.19866,2.682088 0.9768,4.718478 2.3344,6.109178 1.35759,1.390712 3.47676,2.086065 6.35752,2.086061 1.62247,4e-6 2.98007,-0.132444 4.07278,-0.397345 1.12579,-0.298004 1.97015,-0.579457 2.53308,-0.844358 l 0.64568,3.874113 c -0.56292,0.298009 -1.55629,0.612574 -2.98008,0.943694 -1.39073,0.331121 -2.98011,0.496681 -4.76814,0.496682 -2.25164,-1e-6 -4.20525,-0.331121 -5.86084,-0.993363 -1.6225,-0.695352 -2.96354,-1.639045 -4.02312,-2.831082 -1.05959,-1.192031 -1.85428,-2.599292 -2.38407,-4.22179 -0.49668,-1.655595 -0.74502,-3.460201 -0.74502,-5.413824 m 17.73152,-2.533074 c 0.0331,-2.086043 -0.4967,-3.791314 -1.58938,-5.115816 -1.0596,-1.357573 -2.53309,-2.03637 -4.42046,-2.036392 -1.0596,2.2e-5 -2.0033,0.21525 -2.83108,0.645685 -0.79471,0.397366 -1.4735,0.927159 -2.0364,1.58938 -0.56291,0.662261 -1.00992,1.423838 -1.34104,2.284733 -0.29801,0.860931 -0.49669,1.7384 -0.59601,2.63241 h 12.81437"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5554"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;filter:url(#filter5630)"
|
||||
d="m -492.11181,64.748737 c 0.39733,2.6e-5 0.84435,0.03314 1.34104,0.09934 0.52978,0.03314 1.04302,0.09936 1.53971,0.198672 0.49667,0.06625 0.94368,0.149031 1.34104,0.248341 0.43044,0.06625 0.745,0.132474 0.9437,0.198673 l -0.79469,4.023117 c -0.36425,-0.132427 -0.97683,-0.281431 -1.83772,-0.447013 -0.82782,-0.198651 -1.90396,-0.297987 -3.22843,-0.298009 -0.86093,2.2e-5 -1.72184,0.09936 -2.58274,0.298009 -0.82781,0.165582 -1.37416,0.281474 -1.63905,0.347676 v 21.704966 h -4.61914 v -24.73472 c 1.0927,-0.39732 2.45029,-0.761553 4.07279,-1.092699 1.62248,-0.364207 3.44364,-0.546323 5.46349,-0.546349"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,375.75386,335.47542)" />
|
||||
</g>
|
||||
<g
|
||||
id="g2994"
|
||||
style="display:inline"
|
||||
transform="translate(375.75386,255.47823)">
|
||||
<rect
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#f3f3f3;stroke-width:14.74640846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4170"
|
||||
width="689.47974"
|
||||
height="201.01898"
|
||||
x="30.260132"
|
||||
y="431.85269"
|
||||
inkscape:export-filename="/home/flo/Documents/projects/linuxtage/gltgit/glt12/grafiken/shirts/linuxtage2012-hinten_10jahre_v2.png"
|
||||
inkscape:export-xdpi="80.963211"
|
||||
inkscape:export-ydpi="80.963211" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
d="M 153.28335,578.93876 H 122.49792 V 466.03364 h -13.89538 v 134.24459 h 44.68081 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4843"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
d="M 183.09093,600.27823 V 466.03364 h -14.13495 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4845"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="m 215.86221,600.27823 v -110.5772 h 1.67703 l 25.2752,110.5772 h 23.11902 V 466.03364 h -14.13495 v 110.57719 h -1.67703 L 225.44523,466.03364 h -23.59818 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4847"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsssccsscc"
|
||||
d="m 298.42773,466.03364 h -14.01516 v 90.98369 c 0,31.81516 9.10389,45.00685 29.70735,45.00685 20.84303,0 29.82713,-13.19169 29.82713,-45.00685 v -90.98369 h -14.01516 v 90.98369 c 0,16.87755 -5.03109,23.2794 -15.81197,23.2794 -10.6611,0 -15.69219,-6.20786 -15.69219,-23.2794 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4849"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="m 355.74989,466.03364 23.11902,67.70427 -23.11902,66.54032 h 15.69218 l 16.17133,-50.24473 16.05155,50.24473 h 15.69219 l -22.75966,-66.54032 22.75966,-67.70427 h -15.69219 l -16.05155,51.2147 -16.17133,-51.2147 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4851"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
d="m 434.06421,466.03167 -7.375,21.9375 h 17.84375 v 112.3125 h 13.875 v -112.3125 h 20.84375 v -21.9375 z"
|
||||
id="path4853"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccccc"
|
||||
d="m 497.75256,600.27823 4.07278,-26.77132 h 28.86883 l 4.55193,26.77132 h 14.13494 L 529.85565,466.03364 h -26.47307 l -19.76497,134.24459 z m 20.96284,-114.26311 9.34344,66.34632 h -23.35859 l 9.7028,-66.34632 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4855"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 590.59713,544.28755 h 13.34345 v 35.42719 c -0.11979,0 -7.06748,1.35797 -11.73919,1.35797 -15.33281,0 -19.04624,-13.96767 -19.04624,-48.11078 0,-35.11307 4.55193,-47.72279 19.40559,-47.72279 9.94238,0 25.38098,0.0342 25.38098,0.0342 l -0.0283,-19.33797 c 0,0 -15.76972,-0.0356 -27.38911,-0.0356 -23.47837,0 -31.86353,20.50347 -31.86353,67.06223 0,44.23084 7.66644,67.45024 32.34268,67.45024 9.46321,0 26.83243,-0.24407 26.83243,-0.24407 l 0.20101,-76.79701 h -27.23881"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4857"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccsssccsssccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
d="M 684.99002,600.27823 V 579.32676 H 648.335 v -35.50111 h 29.46776 V 523.45617 H 648.335 v -36.47106 h 36.65502 v -20.95147 h -50.5504 v 134.24459 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:121.95269012px;font-family:TitilliumMaps29L;-inkscape-font-specification:'TitilliumMaps29L Ultra-Bold';fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-width:8.91283321;stroke-miterlimit:4;stroke-opacity:1"
|
||||
id="path4859"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="text4861"
|
||||
style="font-style:normal;font-weight:normal;font-size:39.40029526px;line-height:125%;font-family:'Bitstream Vera Sans';display:inline;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
transform="matrix(0,-0.95410843,1.0480989,0,0,0)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2996"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -609.9432,74.185678 h 4.8178 v 16.092469 c -0.39737,0.132449 -0.97683,0.281453 -1.73838,0.447013 -0.72849,0.165561 -1.58941,0.331121 -2.58274,0.496681 -0.96028,0.165561 -2.01986,0.298009 -3.17876,0.397345 -1.15894,0.132448 -2.33442,0.198672 -3.52644,0.198673 -2.41719,-10e-7 -4.61915,-0.397345 -6.60586,-1.192035 -1.98673,-0.794688 -3.692,-1.95361 -5.11581,-3.476768 -1.42383,-1.52315 -2.53308,-3.39398 -3.32776,-5.612497 -0.76159,-2.218497 -1.14237,-4.768124 -1.14237,-7.648889 0,-2.880731 0.43045,-5.430358 1.29137,-7.64889 0.89402,-2.251594 2.08605,-4.13898 3.5761,-5.662165 1.49004,-1.523123 3.22842,-2.682045 5.21516,-3.476768 2.01982,-0.794655 4.1721,-1.191999 6.45685,-1.192034 1.55625,3.5e-5 2.9304,0.09937 4.12245,0.298008 1.22513,0.198707 2.26816,0.430492 3.12909,0.695354 0.86089,0.26493 1.55624,0.529827 2.08607,0.79469 0.56287,0.264929 0.94366,0.463602 1.14236,0.596017 l -1.53971,4.023117 c -0.96028,-0.6291 -2.23509,-1.142336 -3.82444,-1.539711 -1.58941,-0.430426 -3.2119,-0.645655 -4.86748,-0.645686 -1.75496,3.1e-5 -3.36089,0.314596 -4.81781,0.943694 -1.42383,0.629159 -2.64897,1.53974 -3.67544,2.731747 -0.99337,1.192061 -1.7715,2.64899 -2.3344,4.370794 -0.56291,1.688737 -0.84436,3.592679 -0.84436,5.711833 0,2.052964 0.23178,3.923794 0.69536,5.612497 0.49667,1.688725 1.22513,3.145655 2.18539,4.370794 0.99336,1.19204 2.20194,2.119178 3.62578,2.781414 1.45691,0.662245 3.16218,0.993366 5.11581,0.993362 1.39069,4e-6 2.56617,-0.06622 3.52644,-0.198672 0.99334,-0.165557 1.70525,-0.314561 2.13573,-0.447013 V 74.185678" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2998"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -588.14976,64.748737 c 0.39733,2.6e-5 0.84434,0.03314 1.34104,0.09934 0.52977,0.03314 1.04301,0.09936 1.53971,0.198672 0.49666,0.06625 0.94367,0.149031 1.34104,0.248341 0.43043,0.06625 0.745,0.132474 0.94369,0.198673 l -0.79469,4.023117 c -0.36425,-0.132427 -0.97682,-0.281431 -1.83772,-0.447013 -0.82782,-0.198651 -1.90396,-0.297987 -3.22843,-0.298009 -0.86092,2.2e-5 -1.72184,0.09936 -2.58274,0.298009 -0.82781,0.165582 -1.37416,0.281474 -1.63905,0.347676 v 21.704966 h -4.61913 v -24.73472 c 1.09269,-0.39732 2.45029,-0.761553 4.07278,-1.092699 1.62249,-0.364207 3.44365,-0.546323 5.4635,-0.546349" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3000"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -569.54285,87.794742 c 1.09269,3e-6 2.05294,-0.01655 2.88075,-0.04967 0.8609,-0.06622 1.57281,-0.165556 2.13573,-0.298008 v -7.698558 c -0.33114,-0.165549 -0.87748,-0.297997 -1.63904,-0.397345 -0.72849,-0.132436 -1.62251,-0.19866 -2.68208,-0.198672 -0.69537,1.2e-5 -1.44039,0.04968 -2.23507,0.149004 -0.76159,0.09935 -1.4735,0.314576 -2.13573,0.645686 -0.62913,0.298019 -1.15893,0.728476 -1.58938,1.291371 -0.43046,0.529802 -0.64569,1.241711 -0.64568,2.135728 -10e-6,1.65561 0.52978,2.814532 1.58938,3.476768 1.05957,0.629133 2.49995,0.943698 4.32112,0.943695 M -569.94019,64.6494 c 1.85426,2.6e-5 3.41053,0.248366 4.6688,0.745021 1.29135,0.463595 2.31783,1.142391 3.07942,2.036393 0.79467,0.860937 1.35758,1.903966 1.68872,3.129091 0.3311,1.192054 0.49666,2.516536 0.49668,3.973449 v 16.142137 c -0.39737,0.06622 -0.96027,0.165561 -1.68871,0.298009 -0.69538,0.09934 -1.49007,0.198672 -2.38407,0.298009 -0.89405,0.09934 -1.87085,0.182116 -2.93042,0.24834 -1.02649,0.09934 -2.05296,0.149004 -3.07943,0.149004 -1.45694,0 -2.79798,-0.149004 -4.02311,-0.447013 -1.22516,-0.298008 -2.28474,-0.761577 -3.17876,-1.390707 -0.89403,-0.662239 -1.58939,-1.523152 -2.08606,-2.582742 -0.49669,-1.059581 -0.74503,-2.334395 -0.74502,-3.824444 -10e-6,-1.423811 0.28145,-2.648956 0.84435,-3.675441 0.59602,-1.026462 1.39071,-1.854263 2.38407,-2.483406 0.99336,-0.629114 2.15228,-1.092683 3.47677,-1.390707 1.32447,-0.297993 2.71518,-0.446997 4.17212,-0.447013 0.46356,1.6e-5 0.94368,0.03313 1.44038,0.09934 0.49666,0.03313 0.96023,0.09935 1.3907,0.198673 0.46356,0.06624 0.8609,0.132464 1.19204,0.198672 0.3311,0.06624 0.56289,0.115908 0.69535,0.149005 v -1.291371 c -10e-6,-0.761561 -0.0828,-1.506582 -0.24834,-2.235065 -0.16558,-0.761559 -0.46358,-1.4238 -0.89402,-1.986725 -0.43048,-0.595996 -1.02649,-1.059565 -1.78806,-1.390707 -0.72848,-0.364211 -1.68872,-0.546327 -2.88075,-0.546349 -1.52316,2.2e-5 -2.8642,0.115914 -4.02311,0.347676 -1.12582,0.198695 -1.97018,0.413923 -2.53308,0.645686 l -0.54635,-3.824445 c 0.59602,-0.264871 1.58938,-0.513211 2.98009,-0.745022 1.3907,-0.26487 2.8973,-0.397318 4.5198,-0.397344" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3002"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -535.05377,68.771854 c -0.69537,0.761599 -1.62251,1.837741 -2.78141,3.228427 -1.12583,1.390725 -2.35098,2.930435 -3.67544,4.619135 -1.29139,1.688729 -2.59931,3.460223 -3.92379,5.314488 -1.29138,1.854284 -2.43374,3.625778 -3.4271,5.314488 h 14.20509 v 3.874113 h -19.71825 v -3.079423 c 0.79469,-1.456927 1.7715,-3.062861 2.93042,-4.817807 1.15892,-1.75493 2.36751,-3.493312 3.62577,-5.215152 1.29137,-1.754925 2.53307,-3.393971 3.72511,-4.917143 1.22514,-1.556248 2.28472,-2.864174 3.17876,-3.923781 h -12.7647 v -3.874113 h 18.62554 v 3.476768" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3004"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -531.02678,78.258464 c 0,-2.284718 0.33112,-4.271441 0.99336,-5.960174 0.66224,-1.721807 1.53971,-3.145625 2.63242,-4.271458 1.09269,-1.125786 2.35094,-1.970143 3.77477,-2.533073 1.42381,-0.56288 2.88074,-0.844332 4.3708,-0.844358 3.47675,2.6e-5 6.14227,1.092723 7.99656,3.278095 1.85425,2.152306 2.78139,5.446954 2.78142,9.883955 -3e-5,0.198685 -3e-5,0.463582 0,0.79469 -3e-5,0.29802 -0.0166,0.579473 -0.0497,0.844357 H -526.209 c 0.19866,2.682088 0.9768,4.718478 2.3344,6.109178 1.35759,1.390712 3.47676,2.086065 6.35752,2.086061 1.62247,4e-6 2.98007,-0.132444 4.07278,-0.397345 1.12579,-0.298004 1.97015,-0.579457 2.53308,-0.844358 l 0.64568,3.874113 c -0.56292,0.298009 -1.55629,0.612574 -2.98008,0.943694 -1.39073,0.331121 -2.98011,0.496681 -4.76814,0.496682 -2.25164,-1e-6 -4.20525,-0.331121 -5.86084,-0.993363 -1.6225,-0.695352 -2.96354,-1.639045 -4.02312,-2.831082 -1.05959,-1.192031 -1.85428,-2.599292 -2.38407,-4.22179 -0.49668,-1.655595 -0.74502,-3.460201 -0.74502,-5.413824 m 17.73152,-2.533074 c 0.0331,-2.086043 -0.4967,-3.791314 -1.58938,-5.115816 -1.0596,-1.357573 -2.53309,-2.03637 -4.42046,-2.036392 -1.0596,2.2e-5 -2.0033,0.21525 -2.83108,0.645685 -0.79471,0.397366 -1.4735,0.927159 -2.0364,1.58938 -0.56291,0.662261 -1.00992,1.423838 -1.34104,2.284733 -0.29801,0.860931 -0.49669,1.7384 -0.59601,2.63241 h 12.81437" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3006"
|
||||
style="font-variant:normal;font-stretch:normal;font-size:49.66811371px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f3f3f3;fill-opacity:1;stroke:#f3f3f3;stroke-opacity:1"
|
||||
d="m -492.11181,64.748737 c 0.39733,2.6e-5 0.84435,0.03314 1.34104,0.09934 0.52978,0.03314 1.04302,0.09936 1.53971,0.198672 0.49667,0.06625 0.94368,0.149031 1.34104,0.248341 0.43044,0.06625 0.745,0.132474 0.9437,0.198673 l -0.79469,4.023117 c -0.36425,-0.132427 -0.97683,-0.281431 -1.83772,-0.447013 -0.82782,-0.198651 -1.90396,-0.297987 -3.22843,-0.298009 -0.86093,2.2e-5 -1.72184,0.09936 -2.58274,0.298009 -0.82781,0.165582 -1.37416,0.281474 -1.63905,0.347676 v 21.704966 h -4.61914 v -24.73472 c 1.0927,-0.39732 2.45029,-0.761553 4.07279,-1.092699 1.62248,-0.364207 3.44364,-0.546323 5.46349,-0.546349" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 62 KiB |
145
god2024/__init__.py
Normal file
|
@ -0,0 +1,145 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from renderlib import *
|
||||
from schedulelib import *
|
||||
from easing import *
|
||||
|
||||
# URL to Schedule-XML
|
||||
scheduleUrl = 'https://import.c3voc.de/schedule/god2024.xml?showall=yes'
|
||||
|
||||
titlemap = {
|
||||
|
||||
}
|
||||
|
||||
def introFrames(p):
|
||||
givenFrame = 0
|
||||
|
||||
nr = p['$id'];
|
||||
|
||||
# 1 Sekunden nix
|
||||
frames = 1*fps
|
||||
for i in range(0, frames):
|
||||
givenFrame += 1
|
||||
yield (
|
||||
('bg', 'attr', '{http://www.w3.org/1999/xlink}href', "given-frames/frame%04d.png" % (givenFrame)),
|
||||
('layer1', 'style', 'opacity', "%.4f" % 0), # nix
|
||||
# ('text', 'attr', 'transform', 'translate(%.4f, 0)' % easeOutQuad(i, move, -move, frames)),
|
||||
)
|
||||
|
||||
# 1 Sekunde Text Fadein
|
||||
frames = 1*fps
|
||||
for i in range(0, frames):
|
||||
givenFrame += 1
|
||||
yield (
|
||||
('bg', 'attr', '{http://www.w3.org/1999/xlink}href', "given-frames/frame%04d.png" % (givenFrame)),
|
||||
('layer1', 'style', 'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
|
||||
# ('text', 'attr', 'transform', 'translate(%.4f, 0)' % easeOutQuad(i, move, -move, frames)),
|
||||
)
|
||||
|
||||
# 5 Sekunden Text
|
||||
frames = 5*fps
|
||||
for i in range(0, frames):
|
||||
givenFrame += 1
|
||||
yield (
|
||||
('bg', 'attr', '{http://www.w3.org/1999/xlink}href', "given-frames/frame%04d.png" % (givenFrame)),
|
||||
('layer1', 'style', 'opacity', "%.4f" %1),
|
||||
# ('text', 'attr', 'transform', 'translate(%.4f, 0)' % easeOutQuad(i, move, -move, frames)),
|
||||
)
|
||||
|
||||
def outroFrames(p):
|
||||
xml = etree.parse('god2024/artwork/outro.svg').getroot()
|
||||
|
||||
frames = int(5*fps)
|
||||
for i in range(0, frames):
|
||||
yield ()
|
||||
|
||||
def pauseFrames(p):
|
||||
# 1 sekunden fade in
|
||||
frames = 1*fps
|
||||
for i in range(0, frames):
|
||||
yield (
|
||||
('text1', 'style', 'opacity', "%.4f" % easeLinear(i, 0, 1, frames)),
|
||||
)
|
||||
|
||||
# 1 sekunde sehen
|
||||
for i in range(0, frames):
|
||||
yield (
|
||||
('text1', 'style', 'opacity', "%.4f" % 1),
|
||||
)
|
||||
|
||||
# 1 sekunde fadeout
|
||||
for i in range(0, frames):
|
||||
yield (
|
||||
('text1', 'style', 'opacity', "%.4f" % easeLinear(i, 1, -1, frames)),
|
||||
)
|
||||
|
||||
# 1 sekunde bild
|
||||
for i in range(0, frames):
|
||||
yield (
|
||||
('text1', 'style', 'opacity', "%.4f" % 0),
|
||||
)
|
||||
|
||||
def debug():
|
||||
render(
|
||||
'intro.svg',
|
||||
'../intro.ts',
|
||||
introFrames,
|
||||
{
|
||||
'$id': 65,
|
||||
'$title': 'OWASP Juice Shop 10th anniversary: Is it still fresh?'.upper(),
|
||||
'$subtitle': '',
|
||||
'$personnames': 'Jannik Hollenbach'.upper(),
|
||||
#'only_render_frame': 353
|
||||
'only_rerender_frames_after': 225
|
||||
}
|
||||
)
|
||||
|
||||
# render(
|
||||
# 'pause.svg',
|
||||
# '../pause.ts',
|
||||
# pauseFrames
|
||||
# )
|
||||
|
||||
def tasks(queue, args, id_list, skip_list):
|
||||
if not 'outro' in skip_list:
|
||||
# place a task for the outro into the queue
|
||||
queue.put(Rendertask(
|
||||
infile = 'outro.svg',
|
||||
outfile = 'outro.ts',
|
||||
sequence = outroFrames
|
||||
))
|
||||
|
||||
if not 'pause' in skip_list:
|
||||
# place the pause-sequence into the queue
|
||||
queue.put(Rendertask(
|
||||
infile = 'pause.svg',
|
||||
outfile = 'pause.ts',
|
||||
sequence = pauseFrames
|
||||
))
|
||||
|
||||
# iterate over all events extracted from the schedule xml-export
|
||||
for event in events(scheduleUrl, titlemap):
|
||||
|
||||
# skip events which will not be recorded
|
||||
if event['room'] not in ('Da Capo',) or event['track'] == 'Nomnom':
|
||||
print("skipping room %s (%s [%s])" % (event['room'], event['title'], event['id']))
|
||||
continue
|
||||
|
||||
# when id_list is not empty, only render events which are in id_list
|
||||
if id_list and int(event['id']) not in id_list:
|
||||
print("skipping id (%s [%s])" % (event['title'], event['id']))
|
||||
continue
|
||||
|
||||
# generate a task description and put them into the queue
|
||||
queue.put(Rendertask(
|
||||
infile = 'intro.svg',
|
||||
outfile = str(event['id']) + ".ts",
|
||||
sequence = introFrames,
|
||||
parameters = {
|
||||
'$id': event['id'],
|
||||
'$title': event['title'].upper(),
|
||||
'$subtitle': event['subtitle'],
|
||||
'$personnames': event['personnames'].upper(),
|
||||
}
|
||||
))
|
||||
|
101
god2024/artwork/intro.svg
Normal file
After Width: | Height: | Size: 1.9 MiB |
131
god2024/artwork/outro.svg
Normal file
After Width: | Height: | Size: 2.4 MiB |
78
god2024/artwork/pause.svg
Normal file
After Width: | Height: | Size: 1.9 MiB |
|
@ -1,15 +1,13 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://projects.alpaka.space/media/jhber19-schedule.xml
|
||||
template = intro-alpha.mov
|
||||
alpha = true
|
||||
prores = true
|
||||
fontfile = true
|
||||
inout = n
|
||||
inout_type = n
|
||||
|
||||
[title]
|
||||
in = 175
|
||||
out = 260
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Bold.otf
|
||||
fontsize = 90
|
||||
fontcolor = #ffffff
|
||||
|
@ -19,7 +17,6 @@ y = 450
|
|||
[speaker]
|
||||
in = 175
|
||||
out = 260
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Regular.otf
|
||||
fontsize = 36
|
||||
fontcolor = #ffffff
|
||||
|
@ -29,11 +26,10 @@ y = 900
|
|||
[text]
|
||||
in = 200
|
||||
out = 250
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Regular.otf
|
||||
fontsize = 45
|
||||
fontcolor = #c68100
|
||||
x = (w-text_w)/2
|
||||
y = 927
|
||||
text = ''
|
||||
; text =
|
||||
|
||||
|
|
|
@ -1,37 +1,35 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://releasing.c3voc.de/releases/jhjue2020/schedule-jhjue20.xml
|
||||
; intro_template.ts was derived from a png which was derived from jhjue-20-intro.svg
|
||||
; ffmpeg -loop 1 -i jh20-jue/jh20-jue-intro.png -ar 48000 -ac 2 -f s16le -i /dev/zero -c:v mpeg2video -pix_fmt:v yuv420p -qscale:v 2 -qmin:v 2 -qmax:v 7 -keyint_min 0 -bf 0 -g 0 -intra:0 -maxrate:0 90M -c:a mp2 -b:a 384k -t 5 jh20-jue/jh20-jue_intro_template.ts
|
||||
template = jh20-jue_intro_template.ts
|
||||
alpha = false
|
||||
prores = false
|
||||
; enable using a font file
|
||||
fontfile = true
|
||||
; in and out time format: t for seconds, n for frame number
|
||||
inout = n
|
||||
|
||||
; fields for title and speaker names are empty in the template.ts, so we'll render them in via ffmpeg
|
||||
;; Some font settings can have defaults, which can be overridden in the
|
||||
;; 'title', 'speaker' and 'text' sections below.
|
||||
[default]
|
||||
;; default font
|
||||
fontfile = ebisu.ttf
|
||||
;; default font color
|
||||
fontcolor = #ffffff
|
||||
|
||||
;; fields for title and speaker names are empty in the template.ts, so we'll render them in via ffmpeg
|
||||
[title]
|
||||
; inframe for title
|
||||
in = 20
|
||||
; outframe for totle
|
||||
; outframe for title
|
||||
out = 225
|
||||
; title font (either font family or file, see default setting above)
|
||||
fontfamily =
|
||||
fontfile = ebisu.ttf
|
||||
; title font size
|
||||
fontsize = 70
|
||||
; title color
|
||||
fontcolor = #ffffff
|
||||
; title position from upper left corner
|
||||
x = 600
|
||||
y = 865
|
||||
|
||||
[speaker]
|
||||
in = 40
|
||||
out = 225
|
||||
fontfamily =
|
||||
fontfile = ebisu.ttf
|
||||
fontsize = 40
|
||||
fontcolor = #eeeeee
|
||||
x = 600
|
||||
|
@ -41,13 +39,10 @@ y = 950
|
|||
[text]
|
||||
in = 3
|
||||
out = 4
|
||||
fontfamily =
|
||||
fontfile = ebisu.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #ffffff
|
||||
x = 640
|
||||
y = 1000
|
||||
text = ''
|
||||
; text =
|
||||
|
||||
|
||||
; build intros via
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://pretalx.c3voc.de/jugend-hackt-rhein-neckar-2021/schedule/export/schedule.xml
|
||||
template = jh21-rn-template.ts
|
||||
alpha = false
|
||||
prores = false
|
||||
fontfile = true
|
||||
inout = t
|
||||
inout_type = t
|
||||
|
||||
[title]
|
||||
in = 1
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 85
|
||||
fontcolor = #ffffff
|
||||
|
@ -19,7 +17,6 @@ y = 877
|
|||
[speaker]
|
||||
in = 2
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #ffffff
|
||||
|
@ -29,11 +26,10 @@ y = 954
|
|||
[text]
|
||||
in = 3
|
||||
out = 6.5
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #ffffff
|
||||
x = 1920
|
||||
y = 1080
|
||||
text = ''
|
||||
; text =
|
||||
|
||||
|
|
|
@ -1,39 +1,52 @@
|
|||
[default]
|
||||
[meta]
|
||||
schedule = https://pretalx.c3voc.de/jhhh23/schedule/export/schedule.xml
|
||||
;; path to background video
|
||||
template = intro-background.ts
|
||||
;; whether background video uses transparency (needs to be .mov)
|
||||
alpha = false
|
||||
;; whether background video is prores 4444
|
||||
prores = false
|
||||
fontfile = true
|
||||
inout = t
|
||||
;; in and out time format: t for seconds, n for frame number
|
||||
inout_type = t
|
||||
;; fade-in duration (seconds), leave out or set to zero to disable
|
||||
;fade_duration = 0.5
|
||||
|
||||
;; Some font settings can have defaults, which can be overridden in the
|
||||
;; 'title', 'speaker' and 'text' sections below.
|
||||
[default]
|
||||
;; default font
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
;; default font color
|
||||
fontcolor = #ffffff
|
||||
|
||||
;; fields for title and speaker names are empty in the template.ts, so we'll render them in via ffmpeg
|
||||
;; parameters are:
|
||||
;; - in: start frame/ time
|
||||
;; - out: end frame/ time
|
||||
;; - fontfile: font file
|
||||
;; - fontcolor: font color
|
||||
;; - fontsize: font size (pixel)
|
||||
;; - x: horizontal position (top left corner)
|
||||
;; - y: vertical position (top left corner)
|
||||
[title]
|
||||
in = 1
|
||||
out = 9.5
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 67
|
||||
fontcolor = #ffffff
|
||||
x = 400
|
||||
y = 870
|
||||
|
||||
[speaker]
|
||||
in = 2
|
||||
out = 9
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 50
|
||||
fontcolor = #ffffff
|
||||
x = 400
|
||||
y = 950
|
||||
|
||||
|
||||
;; optional extra text, comment out "text" field to disable
|
||||
[text]
|
||||
in = 0
|
||||
out = 0
|
||||
fontfamily =
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 0
|
||||
fontcolor = #ffffff
|
||||
x = 0
|
||||
y = 0
|
||||
text = ''
|
||||
;text = some additional text
|
||||
|
|
BIN
jugendhackt/source.xcf
Normal file
|
@ -11,8 +11,6 @@ import sys
|
|||
import os
|
||||
import re
|
||||
|
||||
from xml.sax.saxutils import escape as xmlescape
|
||||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser(
|
||||
description='C3VOC Intro-Outro-Generator - Variant to use with apple Motion Files',
|
||||
|
@ -57,6 +55,20 @@ parser.add_argument('--num-audio-streams', dest='naudio', type=int, default=1, h
|
|||
number of audio-streams to generate. defaults to 1
|
||||
''')
|
||||
|
||||
parser.add_argument('--no-cleanup', action='store_true', help='''
|
||||
keep temp-dir for debugging purposes
|
||||
''')
|
||||
|
||||
parser.add_argument('--snapshot-sec', type=int, default=3, help='''
|
||||
number of seconds into the final clip when to take a snapshot (for inspection purposes or as thumbnail)
|
||||
''')
|
||||
|
||||
parser.add_argument('--setting-path', default='hd1080p.compressorsetting', help='''
|
||||
filename in the script-dir (where this python script resides),
|
||||
the work-dir (where the .motn-file resides) or absolute path to
|
||||
a .compressorsetting file
|
||||
''')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
|
@ -101,9 +113,22 @@ def describe_event(event):
|
|||
def event_print(event, message):
|
||||
print("{} – {}".format(describe_event(event), message))
|
||||
|
||||
def find_settingpath():
|
||||
artwork_dir = os.path.dirname(args.motn)
|
||||
setting_path = os.path.join(artwork_dir, args.setting_path)
|
||||
if os.path.exists(setting_path):
|
||||
return setting_path
|
||||
|
||||
setting_path = os.path.join(os.path.dirname(__file__), args.setting_path)
|
||||
if os.path.exists(setting_path):
|
||||
return setting_path
|
||||
|
||||
return args.setting_path
|
||||
|
||||
|
||||
tempdir = tempfile.TemporaryDirectory()
|
||||
print('working in ' + tempdir.name)
|
||||
settingpath = find_settingpath()
|
||||
|
||||
|
||||
def fmt_command(command, **kwargs):
|
||||
|
@ -128,6 +153,13 @@ def run_output(command, **kwargs):
|
|||
os.system(f'{cmd} >{t.name} 2>&1')
|
||||
return t.read().decode('utf-8')
|
||||
|
||||
def xmlescape(xml):
|
||||
xml = xml.replace("&", "&")
|
||||
xml = xml.replace("<", "<")
|
||||
xml = xml.replace(">", ">")
|
||||
xml = xml.replace("\"", """)
|
||||
xml = xml.replace("'", "'")
|
||||
return xml
|
||||
|
||||
def enqueue_job(event):
|
||||
event_id = str(event['id'])
|
||||
|
@ -144,10 +176,11 @@ def enqueue_job(event):
|
|||
fp.write(xmlstr)
|
||||
|
||||
compressor_info = run_output(
|
||||
'/Applications/Compressor.app/Contents/MacOS/Compressor -batchname {batchname} -jobpath {jobpath} -settingpath hd1080p.compressorsetting -locationpath {locationpath}',
|
||||
'/Applications/Compressor.app/Contents/MacOS/Compressor -batchname {batchname} -jobpath {jobpath} -settingpath {settingpath} -locationpath {locationpath}',
|
||||
batchname=describe_event(event),
|
||||
jobpath=work_doc,
|
||||
locationpath=intermediate_clip)
|
||||
locationpath=intermediate_clip,
|
||||
settingpath=settingpath)
|
||||
|
||||
match = re.search(r"<jobID ([A-Z0-9\-]+) ?\/>", compressor_info)
|
||||
if not match:
|
||||
|
@ -202,6 +235,7 @@ def finalize_job(job_id, event):
|
|||
intermediate_clip = os.path.join(tempdir.name, event_id + '.mov')
|
||||
final_clip = os.path.join(os.path.dirname(args.motn), event_id + '.ts')
|
||||
copy_clip = os.path.join(os.path.dirname(args.motn), event_id + '.mov')
|
||||
snapshot_file = os.path.join(os.path.dirname(args.motn), event_id + '.png')
|
||||
|
||||
shutil.copy(intermediate_clip, copy_clip)
|
||||
|
||||
|
@ -211,6 +245,11 @@ def finalize_job(job_id, event):
|
|||
vcodec=args.vcodec,
|
||||
acodec=args.acodec)
|
||||
|
||||
run('ffmpeg -y -hide_banner -loglevel error -i {input} -ss {snapshot_sec} -frames:v 1 -vf scale="iw*sar:ih" -f image2 -y -c png {output}',
|
||||
input=intermediate_clip,
|
||||
output=snapshot_file,
|
||||
snapshot_sec=str(args.snapshot_sec))
|
||||
|
||||
event_print(event, "finalized intro to " + final_clip)
|
||||
|
||||
|
||||
|
@ -250,5 +289,9 @@ while len(active_jobs) > 0:
|
|||
finalize_job(job_id, event)
|
||||
|
||||
|
||||
print('all done, cleaning up ' + tempdir.name)
|
||||
tempdir.cleanup()
|
||||
if args.no_cleanup:
|
||||
print('all done, *NOT* cleaning up, *TEMPFILES REMAIN* in ' + tempdir.name)
|
||||
|
||||
else:
|
||||
print('all done, cleaning up ' + tempdir.name)
|
||||
tempdir.cleanup()
|
||||
|
|
|
@ -1,329 +1,5 @@
|
|||
#!/usr/bin/env python3
|
||||
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import renderlib
|
||||
import argparse
|
||||
import shlex
|
||||
from PIL import ImageFont
|
||||
from configparser import ConfigParser
|
||||
import json
|
||||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser(
|
||||
description='C3VOC Intro-Outro-Generator - Variant which renders only using video filters in ffmpeg',
|
||||
usage="./make-ffmpeg.py yourproject/",
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
|
||||
parser.add_argument('project', action="store", metavar='Project folder', type=str, help='''
|
||||
Path to your project folder
|
||||
''')
|
||||
|
||||
parser.add_argument('--debug', action="store_true", default=False, help='''
|
||||
Run script in debug mode and render with placeholder texts,
|
||||
not parsing or accessing a schedule.
|
||||
This argument must not be used together with --id
|
||||
Usage: ./make-ffmpeg.py yourproject/ --debug
|
||||
''')
|
||||
|
||||
parser.add_argument('--id', dest='ids', nargs='+', action="store", type=int, help='''
|
||||
Only render the given ID(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --id 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--room', dest='rooms', nargs='+', action="store", type=str, help='''
|
||||
Only render the given room(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --room "HfG_Studio" "ZKM_Vortragssaal"
|
||||
''')
|
||||
|
||||
parser.add_argument('--skip', nargs='+', action="store", type=str, help='''
|
||||
Skip ID(s) not needed to be rendered.
|
||||
Usage: ./make-ffmpeg.py yourproject/ --skip 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--force', action="store_true", default=False, help='''
|
||||
Force render if file exists.
|
||||
''')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if (args.skip is None):
|
||||
args.skip = []
|
||||
|
||||
|
||||
def headline(str):
|
||||
print("##################################################")
|
||||
print(str)
|
||||
print("##################################################")
|
||||
print()
|
||||
|
||||
|
||||
def error(str):
|
||||
headline(str)
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
cparser = ConfigParser()
|
||||
cparser.read(os.path.join(os.path.dirname(args.project), 'config.ini'))
|
||||
template = cparser['default']['template']
|
||||
alpha = cparser['default']['alpha']
|
||||
prores = cparser['default']['prores']
|
||||
|
||||
fade_duration = 0.5
|
||||
|
||||
title_in = float(cparser['title']['in'])
|
||||
title_out = float(cparser['title']['out'])
|
||||
title_duration = title_out - title_in
|
||||
title_font = cparser['title']['font']
|
||||
title_fontsize = int(cparser['title']['fontsize'])
|
||||
title_fontcolor = cparser['title']['fontcolor']
|
||||
title_x = int(cparser['title']['x'])
|
||||
title_y = int(cparser['title']['y'])
|
||||
|
||||
speaker_in = float(cparser['speaker']['in'])
|
||||
speaker_out = float(cparser['speaker']['out'])
|
||||
speaker_duration = speaker_out - speaker_in
|
||||
speaker_font = cparser['speaker']['font']
|
||||
speaker_fontsize = int(cparser['speaker']['fontsize'])
|
||||
speaker_fontcolor = cparser['speaker']['fontcolor']
|
||||
speaker_x = int(cparser['speaker']['x'])
|
||||
speaker_y = int(cparser['speaker']['y'])
|
||||
|
||||
text_in = float(cparser['text']['in'])
|
||||
text_out = float(cparser['text']['out'])
|
||||
text_duration = text_out - text_in
|
||||
text_font = cparser['text']['font']
|
||||
text_fontsize = int(cparser['text']['fontsize'])
|
||||
text_fontcolor = cparser['text']['fontcolor']
|
||||
text_x = int(cparser['text']['x'])
|
||||
text_y = int(cparser['text']['y'])
|
||||
text_text = cparser['text']['text']
|
||||
|
||||
font_t = os.path.join(os.path.dirname(args.project), title_font)
|
||||
font_s = os.path.join(os.path.dirname(args.project), speaker_font)
|
||||
font_tt = os.path.join(os.path.dirname(args.project), text_font)
|
||||
|
||||
fileformat = os.path.splitext(template)[1]
|
||||
infile = os.path.join(os.path.dirname(args.project), template)
|
||||
|
||||
schedule = cparser['default']['schedule']
|
||||
|
||||
if not (os.path.exists(os.path.join(args.project, template))):
|
||||
error("Template file {} in Project Path is missing".format(template))
|
||||
|
||||
for ffile in (title_font, speaker_font, text_font):
|
||||
if not (os.path.exists(os.path.join(args.project, ffile))):
|
||||
error("Font file {} in Project Path is missing".format(ffile))
|
||||
|
||||
if not (os.path.exists(os.path.join(args.project, 'config.ini'))):
|
||||
error("config.ini file in Project Path is missing")
|
||||
|
||||
if alpha == 'true' and not fileformat == '.mov':
|
||||
error("Alpha can only be rendered with .mov source files")
|
||||
|
||||
if not args.project:
|
||||
error("The Project Path is a required argument")
|
||||
|
||||
if not args.debug and not schedule:
|
||||
error("Either specify --debug or supply a schedule in config.ini")
|
||||
|
||||
if args.debug:
|
||||
persons = ['Thomas Roth', 'Dmitry Nedospasov', 'Josh Datko']
|
||||
events = [{
|
||||
'id': 'debug',
|
||||
'title': 'wallet.fail',
|
||||
'subtitle': 'Hacking the most popular cryptocurrency hardware wallets',
|
||||
'persons': persons,
|
||||
'personnames': ', '.join(persons),
|
||||
'room': 'Borg',
|
||||
}]
|
||||
|
||||
else:
|
||||
events = list(schedulelib.events(schedule))
|
||||
|
||||
|
||||
def describe_event(event):
|
||||
return "#{}: {}".format(event['id'], event['title'])
|
||||
|
||||
|
||||
def event_print(event, message):
|
||||
print("{} – {}".format(describe_event(event), message))
|
||||
|
||||
|
||||
def fmt_command(command, **kwargs):
|
||||
args = {}
|
||||
for key, value in kwargs.items():
|
||||
args[key] = shlex.quote(value)
|
||||
|
||||
command = command.format(**args)
|
||||
return shlex.split(command)
|
||||
|
||||
|
||||
def run(command, **kwargs):
|
||||
return subprocess.check_call(
|
||||
fmt_command(command, **kwargs),
|
||||
stderr=subprocess.STDOUT,
|
||||
stdout=subprocess.DEVNULL)
|
||||
|
||||
|
||||
def fit_text(string: str, frame_width):
|
||||
split_line = [x.strip() for x in string.split()]
|
||||
lines = ""
|
||||
w = 0
|
||||
line_num = 0
|
||||
line = ""
|
||||
for word in split_line:
|
||||
w, _ = translation_font.getsize(" ".join([line, word]))
|
||||
print("{}, {}".format(w, line))
|
||||
if w > (frame_width):
|
||||
print("too wide, breaking")
|
||||
lines += line.strip() + "\n"
|
||||
line = ""
|
||||
|
||||
line += word + " "
|
||||
|
||||
lines += line.strip()
|
||||
return lines
|
||||
|
||||
|
||||
def fit_title(string: str):
|
||||
global translation_font
|
||||
translation_font = ImageFont.truetype(font_t, size=title_fontsize-10, encoding="unic")
|
||||
title = fit_text(string, 1080)
|
||||
|
||||
return title
|
||||
|
||||
|
||||
def fit_speaker(string: str):
|
||||
global translation_font
|
||||
translation_font = ImageFont.truetype(font_s, size=speaker_fontsize-10, encoding="unic")
|
||||
speaker = fit_text(string, 1080)
|
||||
|
||||
return speaker
|
||||
|
||||
|
||||
def enqueue_job(event):
|
||||
event_id = str(event['id'])
|
||||
if event_id in args.skip:
|
||||
event_print(event, "skipping " + str(event['id']))
|
||||
return
|
||||
if (os.path.exists(os.path.join(args.project, event_id + '.ts')) or os.path.exists(os.path.join(args.project, event_id + '.mov'))) and not args.force:
|
||||
event_print(event, "file exist, skipping " + str(event['id']))
|
||||
return
|
||||
|
||||
event_title = str(event['title'])
|
||||
event_personnames = str(event['personnames'])
|
||||
event_title = event_title.replace('"', '')
|
||||
event_title = event_title.replace('\'', '')
|
||||
event_personnames = event_personnames.replace('"', '')
|
||||
|
||||
t = fit_title(event_title)
|
||||
s = fit_speaker(event_personnames)
|
||||
print(s)
|
||||
|
||||
if args.debug:
|
||||
print('Title: ', t)
|
||||
print('Speaker: ', s)
|
||||
|
||||
outfile = os.path.join(os.path.dirname(args.project), event_id + '.ts')
|
||||
|
||||
videofilter = "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format(
|
||||
fontfile=font_t,
|
||||
fontsize=title_fontsize,
|
||||
fontcolor=title_fontcolor,
|
||||
x=title_x,
|
||||
y=title_y,
|
||||
text=t)
|
||||
videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format(
|
||||
fade_in_start_time=title_in,
|
||||
fade_in_end_time=title_in + fade_duration,
|
||||
fade_out_start_time=title_in + fade_duration + title_duration,
|
||||
fade_out_end_time=title_in + fade_duration + title_duration + fade_duration,
|
||||
fade_duration=fade_duration
|
||||
)
|
||||
videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format(
|
||||
fontfile=font_s,
|
||||
fontsize=speaker_fontsize,
|
||||
fontcolor=speaker_fontcolor,
|
||||
x=speaker_x,
|
||||
y=speaker_y,
|
||||
text=s)
|
||||
videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format(
|
||||
fade_in_start_time=speaker_in,
|
||||
fade_in_end_time=speaker_in + fade_duration,
|
||||
fade_out_start_time=speaker_in + fade_duration + speaker_duration,
|
||||
fade_out_end_time=speaker_in + fade_duration + speaker_duration + fade_duration,
|
||||
fade_duration=fade_duration
|
||||
)
|
||||
videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text={text}:".format(
|
||||
fontfile=font_tt,
|
||||
fontsize=text_fontsize,
|
||||
fontcolor=text_fontcolor,
|
||||
x=text_x,
|
||||
y=text_y,
|
||||
text=text_text)
|
||||
videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))'".format(
|
||||
fade_in_start_time=text_in,
|
||||
fade_in_end_time=text_in + fade_duration,
|
||||
fade_out_start_time=text_in + fade_duration + text_duration,
|
||||
fade_out_end_time=text_in + fade_duration + text_duration + fade_duration,
|
||||
fade_duration=fade_duration
|
||||
)
|
||||
|
||||
if fileformat == '.mov':
|
||||
if alpha == 'true':
|
||||
if prores == 'true':
|
||||
cmd = 'ffmpeg -y -i "{0}" -vf "{1}" -vcodec prores_ks -pix_fmt yuva444p10le -profile:v 4444 -shortest -movflags faststart -f mov "{2}"'.format(
|
||||
infile, videofilter, outfile)
|
||||
else:
|
||||
cmd = 'ffmpeg -y -i "{0}" -vf "{1}" -shortest -c:v qtrle -movflags faststart -f mov "{2}"'.format(
|
||||
infile, videofilter, outfile)
|
||||
else:
|
||||
cmd = 'ffmpeg -y -i "{0}" -vf "{1}" -map 0:0 -c:v mpeg2video -q:v 2 -aspect 16:9 -map 0:1 -c:a mp2 -b:a 384k -shortest -f mpegts "{2}"'.format(
|
||||
infile, videofilter, outfile)
|
||||
else:
|
||||
cmd = 'ffmpeg -y -i "{0}" -vf "{1}" -map 0:0 -c:v mpeg2video -pix_fmt:v yuv420p -qscale:v 2 -qmin:v 2 -qmax:v 7 -keyint_min 0 -bf 0 -g 0 -maxrate:0 90M -aspect 16:9 -map 0:1 -c:a mp2 -b:a 384k -shortest -f mpegts "{2}"'.format(
|
||||
infile, videofilter, outfile)
|
||||
|
||||
if args.debug:
|
||||
print(cmd)
|
||||
|
||||
run(cmd)
|
||||
|
||||
return event_id
|
||||
|
||||
|
||||
if args.ids:
|
||||
if len(args.ids) == 1:
|
||||
print("enqueuing {} job".format(len(args.ids)))
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(args.ids)))
|
||||
else:
|
||||
if len(events) == 1:
|
||||
print("enqueuing {} job".format(len(events)))
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(events)))
|
||||
|
||||
|
||||
for event in events:
|
||||
if args.ids and event['id'] not in args.ids:
|
||||
continue
|
||||
|
||||
if args.rooms and event['room'] not in args.rooms:
|
||||
print("skipping room %s (%s)" % (event['room'], event['title']))
|
||||
continue
|
||||
|
||||
event_print(event, "enqueued as " + str(event['id']))
|
||||
|
||||
job_id = enqueue_job(event)
|
||||
if not job_id:
|
||||
event_print(event, "job was not enqueued successfully, skipping postprocessing")
|
||||
continue
|
||||
|
||||
|
||||
print('all done')
|
||||
print("ERROR: The functionality of this script was added to 'make-ffmpeg.py'!")
|
||||
print("Specify meta.fade_duration = 0.5 in the config.ini for the same effect.")
|
||||
|
|
524
make-ffmpeg.py
|
@ -1,155 +1,167 @@
|
|||
#!/usr/bin/env python3
|
||||
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||
|
||||
"""See jugendhackt/config.ini for some config file documentation."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import schedulelib
|
||||
import argparse
|
||||
import shlex
|
||||
from PIL import ImageFont
|
||||
from configparser import ConfigParser
|
||||
import json
|
||||
import platform
|
||||
import ssl
|
||||
from configparser import ConfigParser
|
||||
from pathlib import PurePath
|
||||
import platform
|
||||
|
||||
from PIL import ImageFont
|
||||
import schedulelib
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser(
|
||||
description='C3VOC Intro-Outro-Generator - Variant which renders only using video filters in ffmpeg',
|
||||
usage="./make-ffmpeg.py yourproject/",
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
|
||||
parser.add_argument('project', action="store", metavar='Project folder', type=str, help='''
|
||||
Path to your project folder
|
||||
''')
|
||||
|
||||
parser.add_argument('--debug', action="store_true", default=False, help='''
|
||||
Run script in debug mode and render with placeholder texts,
|
||||
not parsing or accessing a schedule.
|
||||
This argument must not be used together with --id
|
||||
Usage: ./make-ffmpeg.py yourproject/ --debug
|
||||
''')
|
||||
|
||||
parser.add_argument('--id', dest='ids', nargs='+', action="store", type=int, help='''
|
||||
Only render the given ID(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --id 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--room', dest='rooms', nargs='+', action="store", type=str, help='''
|
||||
Only render the given room(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --room "HfG_Studio" "ZKM_Vortragssaal"
|
||||
''')
|
||||
|
||||
parser.add_argument('--skip', nargs='+', action="store", type=str, help='''
|
||||
Skip ID(s) not needed to be rendered.
|
||||
Usage: ./make-ffmpeg.py yourproject/ --skip 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--force', action="store_true", default=False, help='''
|
||||
Force render if file exists.
|
||||
''')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if (args.skip is None):
|
||||
args.skip = []
|
||||
FRAME_WIDTH = 1920
|
||||
|
||||
|
||||
def headline(str):
|
||||
class TextConfig:
|
||||
inpoint: float
|
||||
outpoint: float
|
||||
x: int
|
||||
y: int
|
||||
|
||||
fontfile_path: str
|
||||
fontsize: int
|
||||
fontcolor: str
|
||||
bordercolor: str = None # border is added, if a color is set
|
||||
|
||||
def uses_fontfile(self):
|
||||
return self.fontfile_path is not None
|
||||
|
||||
def parse(self, cparser_sect, default_fontfile, default_fontcolor):
|
||||
self.inpoint = cparser_sect.getfloat('in')
|
||||
self.outpoint = cparser_sect.getfloat('out')
|
||||
self.x = cparser_sect.getint('x')
|
||||
self.y = cparser_sect.getint('y')
|
||||
|
||||
self.fontcolor = cparser_sect.get('fontcolor', default_fontcolor)
|
||||
|
||||
fontfile = cparser_sect.get('fontfile', default_fontfile)
|
||||
self.fontfile_path = str(PurePath(args.project, fontfile).as_posix())
|
||||
|
||||
if not os.path.exists(self.fontfile_path):
|
||||
error("Font file {} in Project Path is missing".format(self.fontfile_path))
|
||||
|
||||
self.fontsize = cparser_sect.getint('fontsize')
|
||||
self.bordercolor = cparser_sect.get('bordercolor', None)
|
||||
|
||||
def fit_text(self, text: str) -> list[str]:
|
||||
if not text:
|
||||
return [""]
|
||||
|
||||
font = ImageFont.truetype(
|
||||
self.fontfile_path, size=self.fontsize, encoding="unic")
|
||||
|
||||
return fit_text(text, (FRAME_WIDTH-self.x-100), font)
|
||||
|
||||
def get_ffmpeg_filter(self, inout_type: str, fade_time: float, text: list[str]):
|
||||
if not text:
|
||||
return ""
|
||||
|
||||
text_duration = self.outpoint - self.inpoint
|
||||
filter_str = ""
|
||||
for idx, line in enumerate(text):
|
||||
filter_str += "drawtext=enable='between({},{},{})':x={}:y={}".format(
|
||||
inout_type, self.inpoint, self.outpoint, self.x, self.y + (idx*self.fontsize))
|
||||
|
||||
filter_str += ":fontfile='{}':fontsize={}:fontcolor={}:text={}".format(
|
||||
self.fontfile_path, self.fontsize, self.fontcolor, ffmpeg_escape_str(line))
|
||||
|
||||
if self.bordercolor is not None:
|
||||
filter_str += ":borderw={}:bordercolor={}".format(
|
||||
self.fontsize / 30, self.bordercolor)
|
||||
|
||||
if fade_time > 0:
|
||||
filter_str += ":alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))'".format(
|
||||
fade_in_start_time=self.inpoint,
|
||||
fade_in_end_time=self.inpoint + fade_time,
|
||||
fade_out_start_time=self.inpoint + fade_time + text_duration,
|
||||
fade_out_end_time=self.inpoint + fade_time + text_duration + fade_time,
|
||||
fade_duration=fade_time)
|
||||
|
||||
filter_str += ","
|
||||
|
||||
return filter_str[:-1]
|
||||
|
||||
|
||||
class Config:
|
||||
schedule: str
|
||||
template_file: str # video background
|
||||
alpha: bool = False
|
||||
prores: bool = False
|
||||
inout_type: str = "t" # in and out time format: t for seconds, n for frame number
|
||||
fade_duration: float = 0 # fade duration in seconds, 0 to disable
|
||||
|
||||
fileext: str
|
||||
|
||||
title: TextConfig
|
||||
speaker: TextConfig
|
||||
text: TextConfig
|
||||
extra_text: str = "" # additional text
|
||||
|
||||
|
||||
def parse_config(filename) -> Config:
|
||||
if not os.path.exists(filename):
|
||||
error("config.ini file in Project Path is missing")
|
||||
|
||||
conf = Config()
|
||||
|
||||
cparser = ConfigParser()
|
||||
cparser.read(filename)
|
||||
|
||||
meta = cparser['meta']
|
||||
conf.schedule = meta.get('schedule')
|
||||
infile = PurePath(args.project, meta.get('template'))
|
||||
conf.template_file = str(infile)
|
||||
conf.alpha = meta.getboolean('alpha', conf.alpha)
|
||||
conf.prores = meta.getboolean('prores', conf.prores)
|
||||
conf.inout_type = meta.get('inout_type', conf.inout_type)
|
||||
conf.fade_duration = meta.getfloat('fade_duration', conf.fade_duration)
|
||||
|
||||
defaults = cparser['default']
|
||||
default_fontfile = defaults.get('fontfile', None)
|
||||
default_fontcolor = defaults.get('fontcolor', "#ffffff")
|
||||
|
||||
conf.title = TextConfig()
|
||||
conf.title.parse(cparser['title'], default_fontfile, default_fontcolor)
|
||||
conf.speaker = TextConfig()
|
||||
conf.speaker.parse(cparser['speaker'], default_fontfile, default_fontcolor)
|
||||
conf.text = TextConfig()
|
||||
conf.text.parse(cparser['text'], default_fontfile, default_fontcolor)
|
||||
|
||||
conf.extra_text = cparser['text'].get('text', '')
|
||||
|
||||
conf.fileext = infile.suffix
|
||||
|
||||
if not os.path.exists(conf.template_file):
|
||||
error("Template file {} in Project Path is missing".format(conf.template_file))
|
||||
|
||||
if conf.alpha and conf.fileext != '.mov':
|
||||
error("Alpha can only be rendered with .mov source files")
|
||||
|
||||
if not args.project:
|
||||
error("The Project Path is a required argument")
|
||||
|
||||
if not args.debug and not conf.schedule:
|
||||
error("Either specify --debug or supply a schedule in config.ini")
|
||||
|
||||
return conf
|
||||
|
||||
|
||||
def error(err_str):
|
||||
print("##################################################")
|
||||
print(str)
|
||||
print(err_str)
|
||||
print("##################################################")
|
||||
print()
|
||||
|
||||
|
||||
def error(str):
|
||||
headline(str)
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
cparser = ConfigParser()
|
||||
cparser.read(os.path.join(os.path.dirname(args.project), 'config.ini'))
|
||||
template = cparser['default']['template']
|
||||
alpha = cparser['default']['alpha']
|
||||
prores = cparser['default']['prores']
|
||||
fontfile = cparser['default']['fontfile'] # use a font file instead of a font family
|
||||
inout = cparser['default']['inout'] # in and out time format: t for seconds, n for frame number
|
||||
|
||||
title_in = cparser['title']['in']
|
||||
title_out = cparser['title']['out']
|
||||
title_fontfamily = cparser['title']['fontfamily']
|
||||
title_fontfile = cparser['title']['fontfile']
|
||||
title_fontsize = cparser['title']['fontsize']
|
||||
title_fontcolor = cparser['title']['fontcolor']
|
||||
title_x = cparser['title']['x']
|
||||
title_y = cparser['title']['y']
|
||||
|
||||
speaker_in = cparser['speaker']['in']
|
||||
speaker_out = cparser['speaker']['out']
|
||||
speaker_fontfamily = cparser['speaker']['fontfamily']
|
||||
speaker_fontfile = cparser['speaker']['fontfile']
|
||||
speaker_fontsize = cparser['speaker']['fontsize']
|
||||
speaker_fontcolor = cparser['speaker']['fontcolor']
|
||||
speaker_x = cparser['speaker']['x']
|
||||
speaker_y = cparser['speaker']['y']
|
||||
|
||||
text_in = cparser['text']['in']
|
||||
text_out = cparser['text']['out']
|
||||
text_fontfamily = cparser['text']['fontfamily']
|
||||
text_fontfile = cparser['text']['fontfile']
|
||||
text_fontsize = cparser['text']['fontsize']
|
||||
text_fontcolor = cparser['text']['fontcolor']
|
||||
text_x = cparser['text']['x']
|
||||
text_y = cparser['text']['y']
|
||||
text_text = cparser['text']['text']
|
||||
|
||||
font_t = os.path.join(os.path.dirname(args.project), title_fontfile)
|
||||
font_s = os.path.join(os.path.dirname(args.project), speaker_fontfile)
|
||||
font_tt = os.path.join(os.path.dirname(args.project), text_fontfile)
|
||||
|
||||
fileformat = os.path.splitext(template)[1]
|
||||
infile = os.path.join(os.path.dirname(args.project), template)
|
||||
|
||||
schedule = cparser['default']['schedule']
|
||||
|
||||
if not (os.path.exists(os.path.join(args.project, template))):
|
||||
error("Template file {} in Project Path is missing".format(template))
|
||||
|
||||
for ffile in (title_fontfile, speaker_fontfile, text_fontfile):
|
||||
if not (os.path.exists(os.path.join(args.project, ffile))):
|
||||
error("Font file {} in Project Path is missing".format(ffile))
|
||||
|
||||
if not (os.path.exists(os.path.join(args.project, 'config.ini'))):
|
||||
error("config.ini file in Project Path is missing")
|
||||
|
||||
if alpha == 'true' and not fileformat == '.mov':
|
||||
error("Alpha can only be rendered with .mov source files")
|
||||
|
||||
if not args.project:
|
||||
error("The Project Path is a required argument")
|
||||
|
||||
if not args.debug and not schedule:
|
||||
error("Either specify --debug or supply a schedule in config.ini")
|
||||
|
||||
if args.debug:
|
||||
persons = ['Thomas Roth', 'Dmitry Nedospasov', 'Josh Datko',]
|
||||
events = [{
|
||||
'id': 'debug',
|
||||
'title': 'wallet.fail',
|
||||
'subtitle': 'Hacking the most popular cryptocurrency hardware wallets',
|
||||
'persons': persons,
|
||||
'personnames': ', '.join(persons),
|
||||
'room': 'Borg',
|
||||
}]
|
||||
|
||||
else:
|
||||
events = list(schedulelib.events(schedule))
|
||||
|
||||
|
||||
def describe_event(event):
|
||||
return "#{}: {}".format(event['id'], event['title'])
|
||||
|
||||
|
@ -158,164 +170,184 @@ def event_print(event, message):
|
|||
print("{} – {}".format(describe_event(event), message))
|
||||
|
||||
|
||||
def fmt_command(command, **kwargs):
|
||||
args = {}
|
||||
for key, value in kwargs.items():
|
||||
args[key] = shlex.quote(value)
|
||||
def fit_text(string: str, max_width: int, font: ImageFont) -> list[str]:
|
||||
"""Break text into array of strings which fit certain a width (in pixels) for the specified font."""
|
||||
|
||||
command = command.format(**args)
|
||||
return shlex.split(command)
|
||||
|
||||
|
||||
def run(command, **kwargs):
|
||||
return subprocess.check_call(
|
||||
fmt_command(command, **kwargs),
|
||||
stderr=subprocess.STDOUT,
|
||||
stdout=subprocess.DEVNULL)
|
||||
|
||||
|
||||
def fit_text(string: str, frame_width):
|
||||
split_line = [x.strip() for x in string.split()]
|
||||
lines = ""
|
||||
lines = []
|
||||
w = 0
|
||||
line_num = 0
|
||||
line = ""
|
||||
line = []
|
||||
for word in split_line:
|
||||
left, top, right, bottom = translation_font.getbbox(" ".join([line, word]))
|
||||
width, height = right - left, bottom - top
|
||||
if width > (frame_width - (2 * 6)):
|
||||
lines += line.strip() + "\n"
|
||||
line = ""
|
||||
new_line = line + [word.rstrip(':')]
|
||||
w = font.getlength(" ".join(new_line))
|
||||
if w > max_width:
|
||||
lines.append(' '.join(line))
|
||||
line = []
|
||||
|
||||
line += word + " "
|
||||
line.append(word.rstrip(':'))
|
||||
|
||||
if word.endswith(':'):
|
||||
lines.append(' '.join(line))
|
||||
line = []
|
||||
|
||||
if line:
|
||||
lines.append(' '.join(line))
|
||||
|
||||
lines += line.strip()
|
||||
return lines
|
||||
|
||||
|
||||
def fit_title(string: str, fontsize: int, x_offset: int):
|
||||
global translation_font
|
||||
translation_font = ImageFont.truetype(
|
||||
font_t, size=fontsize, encoding="unic")
|
||||
title = fit_text(string, (1920-x_offset-100))
|
||||
def ffmpeg_escape_str(text: str) -> str:
|
||||
# Escape according to https://ffmpeg.org/ffmpeg-filters.html#Notes-on-filtergraph-escaping
|
||||
# and don't put the string in quotes afterwards!
|
||||
text = text.replace(",", r"\,")
|
||||
text = text.replace(':', r"\\:")
|
||||
text = text.replace("'", r"\\\'")
|
||||
|
||||
return title
|
||||
return text
|
||||
|
||||
|
||||
def fit_speaker(string: str, fontsize: int, x_offset: int):
|
||||
global translation_font
|
||||
translation_font = ImageFont.truetype(
|
||||
font_s, size=fontsize, encoding="unic")
|
||||
speaker = fit_text(string, (1920-x_offset-100))
|
||||
|
||||
return speaker
|
||||
|
||||
|
||||
def enqueue_job(event):
|
||||
def enqueue_job(conf: Config, event):
|
||||
event_id = str(event['id'])
|
||||
|
||||
outfile = str(PurePath(args.project, event_id + '.ts'))
|
||||
outfile_mov = str(PurePath(args.project, event_id + '.mov'))
|
||||
|
||||
if event_id in args.skip:
|
||||
event_print(event, "skipping " + str(event['id']))
|
||||
return
|
||||
if (os.path.exists(os.path.join(args.project, event_id + '.ts')) or os.path.exists(os.path.join(args.project, event_id + '.mov'))) and not args.force:
|
||||
if (os.path.exists(outfile) or os.path.exists(outfile_mov)) and not args.force:
|
||||
event_print(event, "file exist, skipping " + str(event['id']))
|
||||
return
|
||||
|
||||
event_title = str(event['title'])
|
||||
event_personnames = str(event['personnames'])
|
||||
event_title = event_title.replace('"', '\\"')
|
||||
event_title = event_title.replace('\'', '')
|
||||
event_personnames = event_personnames.replace('"', '\\"')
|
||||
|
||||
t = fit_title(event_title, int(title_fontsize), int(title_x))
|
||||
t = t.replace(':', "\:") # the ffmpeg command needs colons to be escaped
|
||||
s = fit_speaker(event_personnames, int(speaker_fontsize), int(speaker_x))
|
||||
title = conf.title.fit_text(event_title)
|
||||
speakers = conf.speaker.fit_text(event_personnames)
|
||||
extra_text = conf.text.fit_text(conf.extra_text)
|
||||
|
||||
if args.debug:
|
||||
print('Title: ', t)
|
||||
print('Speaker: ', s)
|
||||
|
||||
outfile = os.path.join(os.path.dirname(args.project), event_id + '.ts')
|
||||
print('Title: ', title)
|
||||
print('Speaker: ', speakers)
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
ffmpeg_path = './ffmpeg.exe'
|
||||
font_t_win = "/".join(font_t.split("\\"))
|
||||
font_s_win = "/".join(font_s.split("\\"))
|
||||
font_tt_win = "/".join(font_tt.split("\\"))
|
||||
else:
|
||||
ffmpeg_path = 'ffmpeg'
|
||||
|
||||
if fontfile == 'true':
|
||||
if platform.system() == 'Windows':
|
||||
videofilter = "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
title_in, title_out, font_t_win, title_fontsize, title_fontcolor, title_x, title_y, t, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
speaker_in, speaker_out, font_s_win, speaker_fontsize, speaker_fontcolor, speaker_x, speaker_y, s, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}'".format(
|
||||
text_in, text_out, font_tt_win, text_fontsize, text_fontcolor, text_x, text_y, text_text, inout)
|
||||
else:
|
||||
videofilter = "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
title_in, title_out, font_t, title_fontsize, title_fontcolor, title_x, title_y, t, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
speaker_in, speaker_out, font_s, speaker_fontsize, speaker_fontcolor, speaker_x, speaker_y, s, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':fontfile='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}'".format(
|
||||
text_in, text_out, font_tt, text_fontsize, text_fontcolor, text_x, text_y, text_text, inout)
|
||||
else:
|
||||
videofilter = "drawtext=enable='between({8},{0},{1})':font='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
title_in, title_out, title_fontfamily, title_fontsize, title_fontcolor, title_x, title_y, t, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':font='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}',".format(
|
||||
speaker_in, speaker_out, speaker_fontfamily, speaker_fontsize, speaker_fontcolor, speaker_x, speaker_y, s, inout)
|
||||
videofilter += "drawtext=enable='between({8},{0},{1})':font='{2}':fontsize={3}:fontcolor={4}:x={5}:y={6}:text='{7}'".format(
|
||||
text_in, text_out, text_fontfamily, text_fontsize, text_fontcolor, text_x, text_y, text_text, inout)
|
||||
videofilter = conf.title.get_ffmpeg_filter(conf.inout_type, conf.fade_duration, title) + ","
|
||||
videofilter += conf.speaker.get_ffmpeg_filter(conf.inout_type,
|
||||
conf.fade_duration, speakers) + ","
|
||||
videofilter += conf.text.get_ffmpeg_filter(conf.inout_type, conf.fade_duration, extra_text)
|
||||
|
||||
if fileformat == '.mov':
|
||||
if alpha == 'true':
|
||||
if prores == 'true':
|
||||
cmd = '{3} -y -i "{0}" -vf "{1}" -vcodec prores_ks -pix_fmt yuva444p10le -profile:v 4444 -shortest -movflags faststart -f mov "{2}"'.format(
|
||||
infile, videofilter, outfile, ffmpeg_path)
|
||||
else:
|
||||
cmd = '{3} -y -i "{0}" -vf "{1}" -shortest -c:v qtrle -movflags faststart -f mov "{2}"'.format(
|
||||
infile, videofilter, outfile, ffmpeg_path)
|
||||
cmd = [ffmpeg_path, '-y', '-i', conf.template_file, '-vf', videofilter]
|
||||
|
||||
if conf.fileext == '.mov' and conf.alpha:
|
||||
if conf.prores:
|
||||
cmd += ['-vcodec', 'prores_ks', '-pix_fmt', 'yuva444p10le', '-profile:v',
|
||||
'4444', '-shortest', '-movflags', 'faststart', '-f', 'mov', outfile_mov]
|
||||
else:
|
||||
cmd = '{3} -y -i "{0}" -vf "{1}" -map 0:0 -c:v mpeg2video -q:v 2 -aspect 16:9 -map 0:1 -c:a mp2 -b:a 384k -shortest -f mpegts "{2}"'.format(
|
||||
infile, videofilter, outfile, ffmpeg_path)
|
||||
cmd += ['-shortest', '-c:v', 'qtrle', '-movflags',
|
||||
'faststart', '-f', 'mov', outfile_mov]
|
||||
else:
|
||||
cmd = '{3} -y -i "{0}" -vf "{1}" -map 0:0 -c:v mpeg2video -q:v 2 -aspect 16:9 -map 0:1 -c:a mp2 -b:a 384k -shortest -f mpegts "{2}"'.format(
|
||||
infile, videofilter, outfile, ffmpeg_path)
|
||||
cmd += ['-map', '0:0', '-c:v', 'mpeg2video', '-q:v', '2', '-aspect', '16:9', '-map',
|
||||
'0:1', '-c:a', 'mp2', '-b:a', '384k', '-shortest', '-f', 'mpegts', outfile]
|
||||
|
||||
if args.debug:
|
||||
print(cmd)
|
||||
|
||||
run(cmd)
|
||||
subprocess.check_call(cmd,
|
||||
stderr=subprocess.STDOUT,
|
||||
stdout=subprocess.DEVNULL
|
||||
)
|
||||
|
||||
return event_id
|
||||
|
||||
|
||||
if args.ids:
|
||||
if len(args.ids) == 1:
|
||||
print("enqueuing {} job".format(len(args.ids)))
|
||||
if __name__ == "__main__":
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser(
|
||||
description='C3VOC Intro-Outro-Generator - Variant which renders only using video filters in ffmpeg',
|
||||
usage="./make-ffmpeg.py yourproject/",
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
|
||||
parser.add_argument('project', action="store", metavar='Project folder', type=str, help='''
|
||||
Path to your project folder
|
||||
''')
|
||||
|
||||
parser.add_argument('--debug', action="store_true", default=False, help='''
|
||||
Run script in debug mode and render with placeholder texts,
|
||||
not parsing or accessing a schedule.
|
||||
This argument must not be used together with --id
|
||||
Usage: ./make-ffmpeg.py yourproject/ --debug
|
||||
''')
|
||||
|
||||
parser.add_argument('--id', dest='ids', nargs='+', action="store", type=int, help='''
|
||||
Only render the given ID(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --id 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--room', dest='rooms', nargs='+', action="store", type=str, help='''
|
||||
Only render the given room(s) from your projects schedule.
|
||||
This argument must not be used together with --debug
|
||||
Usage: ./make-adobe-after-effects.py yourproject/ --room "HfG_Studio" "ZKM_Vortragssaal"
|
||||
''')
|
||||
|
||||
parser.add_argument('--skip', nargs='+', action="store", type=str, help='''
|
||||
Skip ID(s) not needed to be rendered.
|
||||
Usage: ./make-ffmpeg.py yourproject/ --skip 4711 0815 4223 1337
|
||||
''')
|
||||
|
||||
parser.add_argument('--force', action="store_true", default=False, help='''
|
||||
Force render if file exists.
|
||||
''')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if (args.skip is None):
|
||||
args.skip = []
|
||||
|
||||
config = parse_config(PurePath(args.project, 'config.ini'))
|
||||
|
||||
if args.debug:
|
||||
persons = ['Thomas Roth', 'Dmitry Nedospasov', 'Josh Datko',]
|
||||
events = [{
|
||||
'id': 'debug',
|
||||
'title': 'wallet.fail and the longest talk title to test if the template is big enough',
|
||||
'subtitle': 'Hacking the most popular cryptocurrency hardware wallets',
|
||||
'persons': persons,
|
||||
'personnames': ', '.join(persons),
|
||||
'room': 'Borg',
|
||||
}]
|
||||
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(args.ids)))
|
||||
else:
|
||||
if len(events) == 1:
|
||||
print("enqueuing {} job".format(len(events)))
|
||||
events = list(schedulelib.events(config.schedule))
|
||||
|
||||
if args.ids:
|
||||
if len(args.ids) == 1:
|
||||
print("enqueuing {} job".format(len(args.ids)))
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(args.ids)))
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(events)))
|
||||
if len(events) == 1:
|
||||
print("enqueuing {} job".format(len(events)))
|
||||
else:
|
||||
print("enqueuing {} jobs".format(len(events)))
|
||||
|
||||
for event in events:
|
||||
if args.ids and event['id'] not in args.ids:
|
||||
continue
|
||||
|
||||
for event in events:
|
||||
if args.ids and event['id'] not in args.ids:
|
||||
continue
|
||||
if args.rooms and event['room'] not in args.rooms:
|
||||
print("skipping room %s (%s)" % (event['room'], event['title']))
|
||||
continue
|
||||
|
||||
if args.rooms and event['room'] not in args.rooms:
|
||||
print("skipping room %s (%s)" % (event['room'], event['title']))
|
||||
continue
|
||||
event_print(event, "enqueued as " + str(event['id']))
|
||||
|
||||
event_print(event, "enqueued as " + str(event['id']))
|
||||
job_id = enqueue_job(config, event)
|
||||
if not job_id:
|
||||
event_print(event, "job was not enqueued successfully, skipping postprocessing")
|
||||
continue
|
||||
|
||||
job_id = enqueue_job(event)
|
||||
if not job_id:
|
||||
event_print(event, "job was not enqueued successfully, skipping postprocessing")
|
||||
continue
|
||||
|
||||
|
||||
print('all done')
|
||||
print('all done')
|
||||
|
|
4
make.py
|
@ -99,9 +99,7 @@ renderlib.args = args
|
|||
# sys.exit(1)
|
||||
|
||||
|
||||
cwd = os.getcwd()
|
||||
|
||||
def render(infile, outfile, sequence, parameters={}, workdir=os.path.join(cwd, projectname, 'artwork')):
|
||||
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)
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
[default]
|
||||
[meta]
|
||||
#schedule = https://talks.mrmcd.net/2019/schedule/export/schedule.xml
|
||||
schedule = file:///home/thorti/git/c3voc/intro-outro-generator/mrmcd2019/schedule.xml
|
||||
template = mrmcd2019.mov
|
||||
alpha = false
|
||||
prores = false
|
||||
fontfile = true
|
||||
inout = n
|
||||
inout_type = n
|
||||
|
||||
[title]
|
||||
in = 50
|
||||
out = 225
|
||||
fontfamily =
|
||||
fontfile = Jura-Bold.ttf
|
||||
fontsize = 80
|
||||
fontcolor = #47acda
|
||||
|
@ -20,7 +18,6 @@ y = 540
|
|||
[speaker]
|
||||
in = 75
|
||||
out = 225
|
||||
fontfamily =
|
||||
fontfile = Jura-Regular.ttf
|
||||
fontsize = 50
|
||||
fontcolor = #094762
|
||||
|
@ -30,10 +27,9 @@ y = 950
|
|||
[text]
|
||||
in = 242
|
||||
out = 324
|
||||
fontfamily =
|
||||
fontfile = Jura-Regular.ttf
|
||||
fontsize = 45
|
||||
fontcolor = #c68100
|
||||
x = (w-text_w)/2
|
||||
y = 927
|
||||
text = ''
|
||||
; text =
|
||||
|
|
148
osmodevcon24/__init__.py
Normal file
|
@ -0,0 +1,148 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from renderlib import *
|
||||
from schedulelib import *
|
||||
from easing import *
|
||||
|
||||
# URL to Schedule-XML
|
||||
scheduleUrl = 'https://pretalx.sysmocom.de/osmodevcon2024/schedule/export/schedule.xml'
|
||||
|
||||
def introFrames(args):
|
||||
#fade in title
|
||||
frames = 3*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('title', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
|
||||
)
|
||||
# fade in subtitle and names
|
||||
frames = 1*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('title', 'style', 'opacity', 1),
|
||||
('subtitle', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
|
||||
('personnames', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
|
||||
)
|
||||
#show whole image for 2 seconds
|
||||
frames = 2*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('title', 'style', 'opacity', 1),
|
||||
('personnames', 'style', 'opacity', 1),
|
||||
('subtitle', 'style', 'opacity', 1),
|
||||
)
|
||||
|
||||
def backgroundFrames(parameters):
|
||||
frames = 5*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('logo', 'style', 'opacity', 1),
|
||||
)
|
||||
|
||||
def outroFrames(args):
|
||||
frames = 2*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('logo', 'style', 'opacity', 1),
|
||||
('sublogo', 'style', 'opacity', 1),
|
||||
('cclogo', 'style', 'opacity', 1),
|
||||
)
|
||||
# fade out
|
||||
frames = 3*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('logo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
|
||||
('sublogo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
|
||||
('cclogo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
|
||||
)
|
||||
|
||||
def pauseFrames(args):
|
||||
#fade in pause
|
||||
frames = 4*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('pause', 'style', 'opacity', "%.4f" % easeInCubic(i, 0.2, 1, frames)),
|
||||
)
|
||||
|
||||
# fade out
|
||||
frames = 4*fps
|
||||
for i in range(0, frames):
|
||||
yield(
|
||||
('pause', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -0.8, frames)),
|
||||
)
|
||||
|
||||
def debug():
|
||||
render('intro.svg',
|
||||
'../intro.ts',
|
||||
introFrames,
|
||||
{
|
||||
'$id': 7776,
|
||||
'$title': 'Configuring + running GPRS/EDGE data services with OsmoPCU, OsmoSGSN and OpenGGSN',
|
||||
'$subtitle': 'With some subtitle!',
|
||||
'$personnames': 'Alexander Chemeris + Harald Welte'
|
||||
}
|
||||
)
|
||||
|
||||
render('outro.svg',
|
||||
'../outro.ts',
|
||||
outroFrames
|
||||
)
|
||||
|
||||
render(
|
||||
'background.svg',
|
||||
'../background.ts',
|
||||
backgroundFrames
|
||||
)
|
||||
|
||||
render('pause.svg',
|
||||
'../pause.ts',
|
||||
pauseFrames
|
||||
)
|
||||
|
||||
|
||||
def tasks(queue, args, idlist, skiplist):
|
||||
# iterate over all events extracted from the schedule xml-export
|
||||
for event in events(scheduleUrl):
|
||||
if not (idlist==[]):
|
||||
if 000000 in idlist:
|
||||
print("skipping id (%s [%s])" % (event['title'], event['id']))
|
||||
continue
|
||||
if int(event['id']) not in idlist:
|
||||
print("skipping id (%s [%s])" % (event['title'], event['id']))
|
||||
continue
|
||||
|
||||
# generate a task description and put them into the queue
|
||||
queue.put(Rendertask(
|
||||
infile = 'intro.svg',
|
||||
outfile = str(event['id'])+".ts",
|
||||
sequence = introFrames,
|
||||
parameters = {
|
||||
'$id': event['id'],
|
||||
'$title': event['title'],
|
||||
'$subtitle': event['subtitle'],
|
||||
'$personnames': event['personnames']
|
||||
}
|
||||
))
|
||||
|
||||
# place a task for the outro into the queue
|
||||
if not "out" in skiplist:
|
||||
queue.put(Rendertask(
|
||||
infile = 'outro.svg',
|
||||
outfile = 'outro.ts',
|
||||
sequence = outroFrames
|
||||
))
|
||||
|
||||
# place the pause-sequence into the queue
|
||||
if not "pause" in skiplist:
|
||||
queue.put(Rendertask(
|
||||
infile = 'pause.svg',
|
||||
outfile = 'pause.ts',
|
||||
sequence = pauseFrames
|
||||
))
|
||||
|
||||
# place the background-sequence into the queue
|
||||
if not "bg" in skiplist:
|
||||
queue.put(Rendertask(
|
||||
infile = 'background.svg',
|
||||
outfile = 'background.ts',
|
||||
sequence = backgroundFrames
|
||||
))
|
946
osmodevcon24/artwork/background.svg
Normal file
|
@ -0,0 +1,946 @@
|
|||
<?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="508mm"
|
||||
height="285.74997mm"
|
||||
viewBox="0 0 1800 1012.4999"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="background.svg"
|
||||
inkscape:export-filename="background.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient3374-5-7-7-0">
|
||||
<stop
|
||||
id="stop3376-8-6-4-2"
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3378-6-7-4-9"
|
||||
style="stop-color:#729fcf;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3362-8-6-0-9">
|
||||
<stop
|
||||
id="stop3364-4-5-78-9"
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3366-7-6-6-4"
|
||||
style="stop-color:#3465a4;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="24.837126"
|
||||
y1="44.528019"
|
||||
x2="21.036427"
|
||||
y2="21.041553"
|
||||
id="linearGradient3991-3-88-5"
|
||||
xlink:href="#linearGradient7101-4-9-4-1"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient7101-4-9-4-1">
|
||||
<stop
|
||||
id="stop7103-0-4-31-0"
|
||||
style="stop-color:#babdb6;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop7105-6-8-4-3"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="39.06765"
|
||||
y1="28.5"
|
||||
x2="39.421204"
|
||||
y2="10.934953"
|
||||
id="linearGradient3993-1-9-7"
|
||||
xlink:href="#linearGradient6979-9-2-2-8"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient6979-9-2-2-8">
|
||||
<stop
|
||||
id="stop6981-9-9-0-8"
|
||||
style="stop-color:#888a85;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop6983-0-3-6-6"
|
||||
style="stop-color:#555753;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<linearGradient
|
||||
id="linearGradient7131-6-1-5-7">
|
||||
<stop
|
||||
id="stop7133-4-5-2-6"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop7135-6-9-5-0"
|
||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<linearGradient
|
||||
id="linearGradient7153-0-1-9-75">
|
||||
<stop
|
||||
id="stop7155-8-7-3-9"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop7157-5-7-7-7"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="24.837126"
|
||||
y1="44.528019"
|
||||
x2="21.036427"
|
||||
y2="21.041553"
|
||||
id="linearGradient3991-3-88-5-3"
|
||||
xlink:href="#linearGradient7101-4-9-4-1"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
x1="39.06765"
|
||||
y1="28.5"
|
||||
x2="39.421204"
|
||||
y2="10.934953"
|
||||
id="linearGradient3993-1-9-7-2"
|
||||
xlink:href="#linearGradient6979-9-2-2-8"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<linearGradient
|
||||
x1="24.837126"
|
||||
y1="44.528019"
|
||||
x2="21.036427"
|
||||
y2="21.041553"
|
||||
id="linearGradient3991-3-88-5-3-4"
|
||||
xlink:href="#linearGradient7101-4-9-4-1"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
x1="39.06765"
|
||||
y1="28.5"
|
||||
x2="39.421204"
|
||||
y2="10.934953"
|
||||
id="linearGradient3993-1-9-7-2-4"
|
||||
xlink:href="#linearGradient6979-9-2-2-8"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-3"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-1"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-7"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-6"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-2"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-7"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-0"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-60"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-2-0"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-7-6"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-0-3"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-60-6"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-2-0-4"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-7-6-7"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-0-3-4"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-60-6-0"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
r="4.5250292"
|
||||
fy="8.0709476"
|
||||
fx="10.28125"
|
||||
cy="8.0709476"
|
||||
cx="10.28125"
|
||||
gradientTransform="matrix(4.9499444,0,0,4.9510321,-11.38809,35.312197)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3637-3"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="4.5250292"
|
||||
fy="9.8424416"
|
||||
fx="10.28125"
|
||||
cy="9.8424416"
|
||||
cx="10.28125"
|
||||
gradientTransform="matrix(23.169932,0,0,7.6402677,-198.71238,8.843597)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3639-5"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-2-0-9"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-7-6-1"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-0-3-2"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-60-6-9"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-2-2-0-9-7"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-7-7-6-1-5"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-0-0-3-2-9"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-6-60-6-9-8"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="7.8249326"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="7.8249326"
|
||||
id="radialGradient3995-7-4-0-9"
|
||||
xlink:href="#linearGradient3374-5-7-7-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2651111,0,0,2.2923498,16.215361,52.593597)" />
|
||||
<radialGradient
|
||||
cx="10.28125"
|
||||
cy="9.8424416"
|
||||
r="4.5250292"
|
||||
fx="10.28125"
|
||||
fy="9.8424416"
|
||||
id="radialGradient3997-3-3-4-1"
|
||||
xlink:href="#linearGradient3362-8-6-0-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(15.1803,0,0,5.0647752,-116.56897,28.614297)" />
|
||||
<radialGradient
|
||||
cx="8.9057236"
|
||||
cy="1.7286602"
|
||||
r="1.9952321"
|
||||
fx="8.9057236"
|
||||
fy="1.7286602"
|
||||
id="radialGradient3999-1-4-6-2"
|
||||
xlink:href="#linearGradient7131-6-1-5-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7375073,0,0,0.7201806,2.4345312,0.6617371)" />
|
||||
<radialGradient
|
||||
cx="8.3046875"
|
||||
cy="1.1256332"
|
||||
r="2.0507698"
|
||||
fx="8.3046875"
|
||||
fy="1.1256332"
|
||||
id="radialGradient4001-9-6-9-9"
|
||||
xlink:href="#linearGradient7153-0-1-9-75"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(5.2943491,0,0,5.2881329,-7.02204,58.291497)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.49497476"
|
||||
inkscape:cx="-330.66755"
|
||||
inkscape:cy="386.73989"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
units="mm"
|
||||
inkscape:window-width="956"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="960"
|
||||
inkscape:window-y="37"
|
||||
inkscape:window-maximized="0"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:measure-start="63.3968,-113.628"
|
||||
inkscape:measure-end="34.3452,-129.3"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:pagecheckerboard="true"
|
||||
gridtolerance="5"
|
||||
objecttolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:lockguides="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid20483"
|
||||
originx="0"
|
||||
originy="-0.00012144696" />
|
||||
</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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Background"
|
||||
transform="translate(0,-67.5)"
|
||||
style="display:inline">
|
||||
<rect
|
||||
style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:none;stroke-width:1.00031257;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect20497"
|
||||
width="1800"
|
||||
height="1012.4999"
|
||||
x="0"
|
||||
y="67.5"
|
||||
inkscape:label="bg color" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Text"
|
||||
style="display:inline"
|
||||
transform="translate(0,-67.5)">
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="title"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;opacity:0;fill:#555555;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.9375,0,0,0.9375,596.82417,403.33401)"
|
||||
inkscape:label="title"
|
||||
inkscape:transform-center-x="4.0178571"
|
||||
inkscape:transform-center-y="-24.107143"><flowRegion
|
||||
id="flowRegion20435"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#555555;fill-opacity:1"><rect
|
||||
id="rect20437"
|
||||
width="604.28571"
|
||||
height="189.99998"
|
||||
x="61.42857"
|
||||
y="67.714287"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#555555;fill-opacity:1" /></flowRegion><flowPara
|
||||
id="flowPara24792"
|
||||
style="font-size:192px">Pause</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot25337"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;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"><flowRegion
|
||||
id="flowRegion25339"><rect
|
||||
id="rect25341"
|
||||
width="14.285714"
|
||||
height="90"
|
||||
x="902.85712"
|
||||
y="472.85715" /></flowRegion><flowPara
|
||||
id="flowPara25343" /></flowRoot> <flowRoot
|
||||
inkscape:transform-center-y="-24.107143"
|
||||
inkscape:transform-center-x="4.0178571"
|
||||
inkscape:label="title"
|
||||
transform="matrix(0.9375,0,0,0.9375,604.85988,449.04839)"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;opacity:0;fill:#555555;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="pause"
|
||||
xml:space="preserve"><flowRegion
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#555555;fill-opacity:1"
|
||||
id="flowRegion25395"><rect
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:'Trebuchet MS';-inkscape-font-specification:'Trebuchet MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#555555;fill-opacity:1"
|
||||
y="67.714287"
|
||||
x="61.42857"
|
||||
height="189.99998"
|
||||
width="604.28571"
|
||||
id="rect25393" /></flowRegion><flowPara
|
||||
style="font-size:192px"
|
||||
id="flowPara25397">Pause</flowPara></flowRoot> <g
|
||||
id="g441"
|
||||
transform="matrix(0.84639363,0,0,0.84639363,37.064912,38.785126)">
|
||||
<text
|
||||
id="text3760-7"
|
||||
y="243.6349"
|
||||
x="277.56836"
|
||||
style="font-style:normal;font-weight:normal;font-size:81.56085968px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:2.03902125"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:130.49736023px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';fill:#a00000;fill-opacity:1;stroke-width:2.03902125"
|
||||
y="243.6349"
|
||||
x="277.56836"
|
||||
id="tspan3762-0"
|
||||
sodipodi:role="line">o</tspan></text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3959-9-26-3"
|
||||
d="m 221.54901,178.00783 -8.8372,15.20901 -4.0423,-6.95739 1.1988,54.79873 c 3.8707,-2.70354 5.2943,1.46986 5.3524,-0.6173 l 1.4178,-50.79232 c 3.0015,-1.56596 6.002,-2.21826 8.8729,-2.21826 5.22,0 7.2929,1.82538 7.4234,6.52328 l 0.5775,46.96519 c 3.6204,-1.02991 6.8905,0.79083 6.9055,-0.35065 l 0.6452,-48.85683 c 2.8709,-1.82699 7.1579,-4.15375 10.1592,-4.15375 5.22,0 6.2837,2.61406 6.3918,8.87693 l 0.7847,45.42003 c 2.4547,-0.3861 5.9417,1.23813 5.9736,-0.39459 l 0.9002,-45.80627 c 0.2308,-11.74253 1.3452,-17.49097 -11.7046,-17.49097 -5.3503,0 -11.6124,1.56672 -16.0494,4.04615 -2.4795,-2.60972 -6.1326,-4.04615 -11.7441,-4.04615 -1.5299,0 -2.9125,-0.0694 -4.2254,-0.15573 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Andale Mono';writing-mode:lr-tb;display:inline;fill:#a00000;fill-opacity:1;stroke:#a00000;stroke-width:2.03902125;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;fill-opacity:1;stroke:#e19c9c;stroke-width:10.19510746;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3981-0-4-1"
|
||||
d="m 212.71081,193.21678 -9.1897,-15.80983 -9.1896,-15.80995 h 18.3793 18.3792 l -9.1896,15.80995 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:10.24006462;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3983-4-9-2"
|
||||
d="M 261.34211,239.81102 V 183.28218" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:10.19510746;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3985-4-0-9"
|
||||
d="M 236.92411,239.78722 V 199.37075" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:9.52051163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3951-0-4-91-2"
|
||||
d="m 212.70941,240.14133 -0.022,-23.96402" />
|
||||
<g
|
||||
id="text5473"
|
||||
style="font-style:normal;font-weight:normal;font-size:16.93333244px;line-height:125%;font-family:Sans;letter-spacing:0.03704167px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
transform="matrix(7.7065378,0,0,7.7065378,-370.09593,-1045.102)"
|
||||
aria-label="Os">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5483"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';letter-spacing:0.03704167px;fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
d="m 60.829899,161.23206 c 0,4.8768 0.8636,6.1468 3.048,6.1468 2.2352,0 3.2004,-1.54094 3.2004,-6.1976 0,-4.572 -0.8128,-5.96054 -3.014133,-5.96054 -2.1844,0 -3.234267,1.50707 -3.234267,6.01134 z m 1.540934,0.33866 c 0,-3.6576 0.474133,-4.94453 1.659466,-4.94453 1.2192,0 1.557867,1.20227 1.557867,4.58893 0,3.4544 -0.423334,4.75827 -1.642533,4.75827 -1.202267,0 -1.5748,-1.25307 -1.5748,-4.40267 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5485"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';letter-spacing:0.03704167px;fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
d="m 70.886976,158.59046 c -1.896533,0 -2.760133,0.8128 -2.760133,1.99813 0,0.5588 0.2032,1.1684 0.9652,1.79493 l 1.642533,1.40547 c 0.508,0.4572 0.677333,0.8636 0.677333,1.3208 0,0.67733 -0.508,1.04987 -1.371599,1.04987 -0.6604,0 -1.202267,-0.13547 -1.693334,-0.42334 -0.186266,0.3048 -0.237066,0.59267 -0.237066,0.79587 0,0.59267 0.8636,0.8636 2.065866,0.8636 1.7272,0 2.794,-0.84667 2.794,-2.35373 0,-0.84667 -0.270933,-1.40547 -0.999067,-2.11667 l -1.5748,-1.27 c -0.575733,-0.47413 -0.677333,-0.74507 -0.677333,-1.04987 0,-0.52493 0.541867,-0.8128 1.337733,-0.8128 0.643467,0 1.151467,0.13547 1.659467,0.44027 0.186267,-0.2032 0.3048,-0.47413 0.3048,-0.69427 0,-0.33866 -0.389467,-0.94826 -2.1336,-0.94826 z" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
aria-label="DevCon"
|
||||
transform="matrix(6.5227642,0,0,6.5227642,-489.80588,-735.6063)"
|
||||
style="font-style:normal;font-weight:bold;font-size:16.93333244px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Yanone Kaffeesatz Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
id="text5477">
|
||||
<path
|
||||
d="m 91.538186,154.66105 c -0.372533,0 -0.474133,0.11853 -0.474133,0.33867 v 11.51466 h 2.1844 c 2.286,0 3.234267,-1.99813 3.234267,-6.51933 0,-4.35187 -1.0668,-5.334 -3.318934,-5.334 z m 2.760134,5.1308 c 0,4.30107 -0.474134,4.9276 -0.999067,4.9276 h -0.338667 v -8.3312 h 0.321734 c 0.6096,0 1.016,0.37253 1.016,3.4036 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5488"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 100.15963,157.87838 c -1.591729,0 -2.980262,0.7112 -2.980262,4.80907 0,3.21733 1.083733,3.99627 2.624666,3.99627 1.320796,0 2.404536,-0.37254 2.404536,-1.04987 0,-0.38947 -0.0508,-0.93133 -0.1524,-1.27 -0.59267,0.28787 -1.18534,0.47413 -1.79494,0.47413 -0.812796,0 -1.049863,-0.47413 -1.100663,-1.54093 0.829734,-0.0169 2.099733,-0.0847 2.929463,-0.254 0.16934,-0.6604 0.23707,-1.59173 0.23707,-2.40453 0,-1.96427 -0.8128,-2.76014 -2.16747,-2.76014 z m -0.253996,1.64254 c 0.423336,0 0.575736,0.16933 0.575736,1.25306 0,0.27094 -0.0169,0.67734 -0.0847,0.88054 -0.254,0.11853 -0.778933,0.1524 -1.253066,0.1524 0.0508,-1.54094 0.237067,-2.286 0.762,-2.286 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5490"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 104.26941,165.75238 c 0.1016,0.47414 0.3048,0.84667 0.79586,0.84667 0.3556,0 0.98214,-0.0169 1.3716,-0.0847 l 1.69334,-8.46666 c -1.94734,0 -1.94734,0 -1.99814,0.37253 l -0.23706,2.06587 c -0.16934,1.45626 -0.32174,4.04706 -0.32174,4.04706 h -0.0339 c 0,0 -0.1524,-2.5908 -0.33867,-4.04706 l -0.3048,-2.4384 c -2.16747,0 -2.1844,0 -2.06587,0.5588 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5492"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 112.00926,154.40705 c -1.524,0 -3.38666,1.016 -3.38666,6.57013 0,4.74134 0.9144,5.7912 2.82786,5.7912 1.28694,0 2.06587,-0.4572 2.06587,-1.25306 0,-0.4064 -0.11853,-0.82974 -0.254,-1.1176 -0.32173,0.16933 -0.79587,0.254 -1.3208,0.254 -0.94827,0 -1.3208,-0.88054 -1.3208,-3.82694 0,-3.69146 0.88053,-4.572 1.84573,-4.572 0.37254,0 0.67734,0.13547 0.88054,0.28787 0.13546,-0.28787 0.27093,-0.67733 0.27093,-1.13453 0,-0.508 -0.16933,-0.99907 -1.60867,-0.99907 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5494"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 113.8288,162.26412 c 0,3.79306 0.84667,4.4196 2.67547,4.4196 1.8288,0 2.77707,-1.2192 2.77707,-4.48734 0,-3.42053 -0.82974,-4.318 -2.6416,-4.318 -1.79494,0 -2.81094,1.3208 -2.81094,4.38574 z m 2.0828,-0.0169 c 0,-2.40453 0.28787,-2.7432 0.6604,-2.7432 0.49107,0 0.62654,0.3048 0.62654,2.7432 0,2.60774 -0.32174,2.86174 -0.64347,2.86174 -0.42333,0 -0.64347,-0.22014 -0.64347,-2.86174 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5496"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 120.08673,166.51438 c 1.86266,0 1.89653,0 1.89653,-0.33866 v -6.46854 c 0.18627,-0.13546 0.42333,-0.2032 0.64347,-0.2032 0.47413,0 0.5588,0.27094 0.5588,1.15147 v 5.85893 c 1.91346,0 1.96426,0 1.96426,-0.33866 v -6.11294 c 0,-1.69333 -0.72813,-2.1844 -2.4384,-2.1844 -0.84666,0 -2.09973,0.3048 -2.62466,0.5588 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.93333244px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path5498"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
aria-label="2019"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:135.91038513px;line-height:101.93280029px;font-family:Galette;-inkscape-font-specification:'Galette Bold';letter-spacing:0px;word-spacing:0px;fill:#3566a5;fill-opacity:1;stroke:none;stroke-width:4.07731199px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text1093"
|
||||
transform="matrix(0.84639363,0,0,0.84639363,-1098.677,81.683415)">
|
||||
<path
|
||||
d="m 1450.8965,383.02967 c 4.6209,-2.44639 13.4551,-4.07731 17.8042,-4.07731 4.8928,0 8.0188,2.58229 8.0188,7.20325 0,11.28056 -15.3579,23.51249 -26.7744,43.49132 -2.99,5.30051 -3.5337,7.20325 -3.5337,12.09602 0,0.40774 0,2.5823 0.5437,4.21323 h 44.8504 c 3.3978,0 3.5337,-3.12594 3.5337,-15.76561 0,0 -7.3392,1.49502 -18.6197,1.49502 h -10.0574 c 12.5037,-20.25065 27.5898,-31.80303 27.5898,-48.11228 0,-12.36785 -5.4364,-19.16336 -20.7943,-19.16336 -12.2319,0 -24.4639,3.39776 -24.4639,7.61098 0,2.31047 0.136,7.20325 1.9028,11.14465 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#3566a5;fill-opacity:1;stroke-width:4.07731199px"
|
||||
id="path1095"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 1500.8287,405.7267 c 0,25.82298 4.2132,41.45267 24.0561,41.45267 19.5711,0 24.8716,-15.49378 24.8716,-46.48135 0,-23.78432 -7.2032,-36.28807 -24.5998,-36.28807 -17.1247,0 -24.3279,14.13468 -24.3279,41.31675 z m 16.5811,0.54364 c 0,-17.39652 1.2231,-28.54118 8.5623,-28.54118 6.2519,0 7.7469,8.42645 7.7469,22.96886 0,24.46387 -2.7182,32.89031 -8.2905,32.89031 -7.0674,0 -8.0187,-6.79552 -8.0187,-27.31799 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#3566a5;fill-opacity:1;stroke-width:4.07731199px"
|
||||
id="path1097"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 1560.6823,381.53465 c 0,0 5.8442,-1.3591 12.9115,-1.63092 l -1.2232,51.78186 c -12.6396,0 -17.2606,0.81546 -17.2606,4.21322 0,3.53367 0.1359,6.65961 0.4078,10.05737 h 45.2581 c 3.3978,0 3.3978,-3.26185 3.3978,-14.81424 0,0 -4.0773,0.54365 -8.2906,0.54365 h -7.6109 l 1.6309,-66.46018 c -0.6796,-0.54364 -2.7182,-0.81546 -3.9414,-0.81546 -7.2033,0 -27.5898,4.62095 -27.5898,7.74689 0,3.66958 0.6795,6.5237 2.3104,9.37781 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#3566a5;fill-opacity:1;stroke-width:4.07731199px"
|
||||
id="path1099"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 1622.7106,445.68436 c -3.3978,0 -6.9314,-0.67956 -9.6497,-1.49502 -0.8154,2.85412 -1.3591,7.47507 -1.3591,10.05737 0,4.48504 5.7083,5.84415 13.0474,5.84415 24.1921,0 33.434,-17.39653 33.8417,-53.27687 -0.6795,-34.79306 -4.0773,-43.62724 -23.6484,-43.62724 -16.3092,0 -25.5511,10.05737 -25.5511,33.9776 0,17.39653 7.6109,27.86163 18.4838,27.86163 7.7469,0 12.096,-2.31048 15.7656,-6.93143 -0.9514,14.95014 -5.0287,27.58981 -20.9302,27.58981 z m 9.9214,-34.65715 c -5.5723,0 -8.2905,-6.11597 -8.2905,-15.49379 0,-12.77557 4.621,-18.89154 10.8728,-18.89154 6.9315,0 8.8342,6.38779 8.8342,27.31799 v 0.81546 c -3.6696,4.75686 -7.4751,6.25188 -11.4165,6.25188 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#3566a5;fill-opacity:1;stroke-width:4.07731199px"
|
||||
id="path1101"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="title"
|
||||
style="display:none">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g3732-6"
|
||||
transform="matrix(2.0475567,0,0,2.0475567,979.07911,-71.674635)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 60.69548,67.493897 c 0,11.5675 -9.48796,20.9448 -21.19195,20.9448 -11.703989,0 -21.191949,-9.3773 -21.191949,-20.9448 0,-11.5674 9.48796,-20.9447 21.191949,-20.9447 11.70399,0 21.19195,9.3773 21.19195,20.9447 z"
|
||||
id="path3544-1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;opacity:0.8;fill:url(#radialGradient3637-3);fill-opacity:1;stroke:url(#radialGradient3639-5);stroke-width:1.46151388;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<g
|
||||
transform="matrix(1.4615138,0,0,2.5218672,4.4272,31.547917)"
|
||||
id="g3546-8"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:#000000;fill-opacity:1;stroke:none">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 24,13 -8.1875,15.225744 c 11.445471,0 5.976697,0 16.34375,0 z m 0,4.96875 4,7.421875 h -7.953125 z"
|
||||
id="path3548-79"
|
||||
style="fill:url(#linearGradient3991-3-88-5);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3993-1-9-7);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 26.355979,42.522608 20,21.277828 13.644021,42.522609"
|
||||
transform="matrix(1,0,0,0.57953638,4,2.7937247)"
|
||||
id="path3550-2"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.31358945px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 53.38791,67.493897 c 0,7.6681 -6.21625,13.8844 -13.88438,13.8844 -7.66813,0 -13.884379,-6.2163 -13.884379,-13.8844 0,-7.6681 6.216249,-13.8844 13.884379,-13.8844 7.66813,0 13.88438,6.2163 13.88438,13.8844 z"
|
||||
id="path3552-0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:url(#radialGradient3995-7-4-0-2-2-0-9);fill-opacity:1;stroke:url(#radialGradient3997-3-3-4-7-7-6-1);stroke-width:1.46151388;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<g
|
||||
transform="matrix(3.2735609,0,0,3.2593101,-24.33091,59.292917)"
|
||||
id="g3554-2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:#000000;fill-opacity:1;stroke:none">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 11,2.25 C 11,3.2164983 10.195512,4 9.203125,4 8.2107383,4 7.40625,3.2164983 7.40625,2.25 7.40625,1.2835017 8.2107383,0.5 9.203125,0.5 10.195512,0.5 11,1.2835017 11,2.25 Z"
|
||||
transform="matrix(1.1130433,0,0,1.1428572,9.2565233,-0.07142864)"
|
||||
id="path3556-3"
|
||||
style="fill:url(#radialGradient3999-1-4-6-0-0-3-2);fill-opacity:1;stroke:#555753;stroke-width:0.39671427;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 20,1.5 C 20,1.7761424 19.776142,2 19.5,2 19.223858,2 19,1.7761424 19,1.5 19,1.2238576 19.223858,1 19.5,1 19.776142,1 20,1.2238576 20,1.5 Z"
|
||||
transform="matrix(1.8125,0,0,1.8125,-16.465404,-0.9288198)"
|
||||
id="path3558-7"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 44.61882,67.441097 c 0,2.8124 -2.2902,5.0924 -5.1153,5.0924 -2.8251,0 -5.1153,-2.28 -5.1153,-5.0924 0,-2.8125 2.2902,-5.0924 5.1153,-5.0924 2.8251,0 5.1153,2.2799 5.1153,5.0924 z"
|
||||
id="path3560-5"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:url(#radialGradient4001-9-6-9-6-60-6-9);stroke-width:1.46151364;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:131.04367065px;line-height:125%;font-family:Sans;letter-spacing:0.28665793px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:2.04755735"
|
||||
x="1104.8673"
|
||||
y="136.28465"
|
||||
id="text3743-6-9"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3745-0-2"
|
||||
x="1104.8673"
|
||||
y="136.28465"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:131.04367065px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';letter-spacing:0.28665793px;fill:#a00000;fill-opacity:1;stroke-width:2.04755735"
|
||||
dx="0 0">Os</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:81.90226746px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:2.04755735"
|
||||
x="1288.4238"
|
||||
y="136.28465"
|
||||
id="text3760-7-2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3762-0-8"
|
||||
x="1288.4238"
|
||||
y="136.28465"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:131.04367065px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';fill:#a00000;fill-opacity:1;stroke-width:2.04755735">o</tspan></text>
|
||||
<text
|
||||
id="text4707-97"
|
||||
y="137.59502"
|
||||
x="1338.8434"
|
||||
style="font-style:normal;font-weight:bold;font-size:131.04367065px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Yanone Kaffeesatz Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#a00000;fill-opacity:1;stroke:none;stroke-width:2.04755735"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:131.04367065px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';fill:#a00000;fill-opacity:1;stroke-width:2.04755735"
|
||||
y="137.59502"
|
||||
x="1338.8434"
|
||||
id="tspan4705-36"
|
||||
sodipodi:role="line">Con</tspan></text>
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Andale Mono';writing-mode:lr-tb;display:inline;fill:#a00000;fill-opacity:1;stroke:#a00000;stroke-width:2.04755735;stroke-opacity:1"
|
||||
d="m 1232.1703,70.382814 -8.8741,15.272702 -4.0593,-6.9865 1.2039,55.028084 c 3.887,-2.71488 5.3164,1.47605 5.3748,-0.61985 l 1.4237,-51.004974 c 3.0141,-1.57252 6.0272,-2.227521 8.9101,-2.227521 5.2418,0 7.3232,1.833021 7.4545,6.550591 l 0.5798,47.161764 c 3.6356,-1.03422 6.9193,0.79411 6.9344,-0.35191 l 0.6478,-49.061364 c 2.883,-1.834611 7.188,-4.171091 10.202,-4.171091 5.2417,0 6.3099,2.625001 6.4185,8.914071 l 0.7878,45.610104 c 2.4651,-0.38781 5.9664,1.24339 5.9987,-0.39591 l 0.9038,-45.998034 c 0.2319,-11.791681 1.3508,-17.564192 -11.7533,-17.564192 -5.3728,0 -11.6612,1.57328 -16.1166,4.063111 -2.4899,-2.620651 -6.1586,-4.063111 -11.7935,-4.063111 -1.5361,0 -2.9245,-0.0721 -4.243,-0.15595 z"
|
||||
id="path3959-9-26-3-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 1223.2952,85.655406 -9.2281,-15.875942 -9.2281,-15.876132 h 18.4562 18.4561 l -9.2281,15.876132 z"
|
||||
id="path3981-0-4-1-2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;fill-opacity:1;stroke:#e19c9c;stroke-width:10.23778343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 1272.1299,132.44473 V 75.679295"
|
||||
id="path3983-4-9-2-9"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:10.28292942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 1247.6099,132.4208 V 91.835136"
|
||||
id="path3985-4-0-9-3"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:10.23778343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 1223.2938,132.77645 -0.022,-24.06433"
|
||||
id="path3951-0-4-91-2-1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;stroke:#e19c9c;stroke-width:9.56036377;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
id="text4707-9"
|
||||
y="138.64339"
|
||||
x="1700.7795"
|
||||
style="font-style:normal;font-weight:bold;font-size:131.04367065px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Yanone Kaffeesatz Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#3566a5;fill-opacity:1;stroke:none;stroke-width:2.04755735"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:131.04367065px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz Bold';text-align:end;text-anchor:end;fill:#3566a5;fill-opacity:1;stroke-width:2.04755735"
|
||||
y="138.64339"
|
||||
x="1700.7795"
|
||||
id="tspan4705-3"
|
||||
sodipodi:role="line">2018</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="subtitle"
|
||||
style="display:none">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g1750"
|
||||
transform="matrix(19.592171,0,0,19.592171,-1582.9761,-2384.3012)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.16364908px;line-height:100%;font-family:Galette;-inkscape-font-specification:'Galette Bold';letter-spacing:0px;word-spacing:0px;fill:#3465a4;fill-opacity:1;stroke:none;stroke-width:0.02372737px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="167.53929"
|
||||
y="132.21951"
|
||||
id="text1124"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1122"
|
||||
x="167.53929"
|
||||
y="132.21951"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:100%;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';text-align:end;letter-spacing:0px;text-anchor:end;fill:#3465a4;fill-opacity:1;stroke-width:0.02372737px">0x2B || <tspan
|
||||
style="letter-spacing:0px;fill:#a00000;fill-opacity:1"
|
||||
id="tspan1454">!</tspan>0x2B</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="167.53929"
|
||||
y="135.49736"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:100%;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';text-align:end;letter-spacing:0px;text-anchor:end;fill:#3465a4;fill-opacity:1;stroke-width:0.02372737px"
|
||||
id="tspan1126">18-19 Oct. 2018</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="167.53929"
|
||||
y="138.77521"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:100%;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';text-align:end;letter-spacing:0px;text-anchor:end;fill:#3465a4;fill-opacity:1;stroke-width:0.02372737px"
|
||||
id="tspan1128">Berl n</tspan></text>
|
||||
<g
|
||||
transform="matrix(0.20459945,0,0,0.20459945,152.35276,113.27741)"
|
||||
id="g27740">
|
||||
<g
|
||||
id="g28309">
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:normal;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6.24451828;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 3820.6562,472.26172 c -40.3422,0 -73.1445,32.3975 -73.1445,72.32812 0,30.32091 18.9212,56.28015 45.6875,67.02735 l 1.8555,-5.95508 c -24.2644,-9.91834 -41.2988,-33.51066 -41.2988,-61.07227 0,-36.51604 29.8935,-66.08398 66.9003,-66.08398 37.0069,0 66.8985,29.56794 66.8985,66.08398 0,24.66524 -13.6587,46.14338 -33.918,57.50977 -2.3907,1.34129 -4.8745,2.53952 -7.4355,3.58594 l 1.8535,5.96875 c 2.9828,-1.19355 5.8704,-2.56971 8.6426,-4.125 22.1465,-12.42531 37.1035,-35.96788 37.1035,-62.93946 0,-39.93062 -32.8023,-72.32812 -73.1446,-72.32812 z m 7.5,137.99414 c -2.4618,0.2706 -4.962,0.41602 -7.5,0.41602 -2.5028,0 -4.9696,-0.14473 -7.4003,-0.40821 l -1.8633,6.05469 c 3.0363,0.3807 6.1241,0.59767 9.2636,0.59766 3.182,0 6.3161,-0.2044 9.3926,-0.59571 z"
|
||||
id="path3544-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ssccsssscccsscsccccc"
|
||||
transform="matrix(0.04785074,0,0,0.04785074,-118.05951,92.995687)" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#a00000;stroke-width:6.34386444px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 3811.3887,563.87891 -30.2735,97.13867 h 78.9297 l -30.1523,-97.125 c -2.8017,1.31925 -5.9315,2.05859 -9.2364,2.05859 -3.3169,0 -6.4581,-0.74396 -9.2675,-2.07226 z m 9.2675,11.66406 19.3165,61.84961 h -38.4082 z"
|
||||
transform="matrix(0.04785074,0,0,0.04785074,-118.05951,92.995687)"
|
||||
id="path3548-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;fill-opacity:1;stroke:#a00000;stroke-width:0.3038334;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3556-1"
|
||||
d="m 65.796938,119.04618 c 0,0.56924 -0.463484,1.03071 -1.035215,1.03071 -0.571734,0 -1.035215,-0.46147 -1.035215,-1.03071 0,-0.56925 0.463481,-1.03071 1.035215,-1.03071 0.571731,0 1.035215,0.46146 1.035215,1.03071 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:'Yanone Kaffeesatz';-inkscape-font-specification:'Yanone Kaffeesatz';display:inline;fill:none;fill-opacity:1;stroke:#3465a4;stroke-width:0.29880485;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3552-8"
|
||||
d="m 66.957088,119.05451 c 0,1.21246 -0.982899,2.19537 -2.195365,2.19537 -1.212466,0 -2.195365,-0.98291 -2.195365,-2.19537 0,-1.21246 0.982899,-2.19537 2.195365,-2.19537 1.212466,0 2.195365,0.98291 2.195365,2.19537 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 55 KiB |
1372
osmodevcon24/artwork/intro.svg
Normal file
After Width: | Height: | Size: 113 KiB |
1479
osmodevcon24/artwork/outro.svg
Normal file
After Width: | Height: | Size: 123 KiB |
1208
osmodevcon24/artwork/pause.svg
Normal file
After Width: | Height: | Size: 68 KiB |
15
renderlib.py
|
@ -97,7 +97,7 @@ def renderFrame(infile, task, outfile):
|
|||
converted.save(filename=outfile)
|
||||
elif args.resvg:
|
||||
# invoke inkscape to convert the generated svg-file into a png inside the .frames-directory
|
||||
cmd = 'resvg --use-fonts-dir ~/.local/share/fonts/ --background white --width={1} --height={2} "{4}" "{3}" 2>&1 >/dev/null'.format(
|
||||
cmd = 'resvg --background white --width={1} --height={2} "{4}" "{3}" 2>&1 >/dev/null'.format(
|
||||
task.workdir, width, height, outfile, infile)
|
||||
errorReturn = subprocess.check_output(
|
||||
cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT, cwd=task.workdir)
|
||||
|
@ -107,15 +107,12 @@ def renderFrame(infile, task, outfile):
|
|||
|
||||
else:
|
||||
# invoke inkscape to convert the generated svg-file into a png inside the .frames-directory
|
||||
cmd = 'inkscape --export-background=white --export-background-opacity=0 --export-width={1} --export-height={2} --export-filename="{3}" "{4}"'.format(
|
||||
cmd = 'inkscape --export-background=white --export-background-opacity=0 --export-width={1} --export-height={2} --export-filename="{3}" "{4}" --pipe 2>&1 >/dev/null'.format(
|
||||
task.workdir, width, height, os.path.abspath(outfile), os.path.abspath(infile))
|
||||
try:
|
||||
errorReturn = subprocess.check_output(
|
||||
cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT, cwd=task.workdir)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"inkscape exited with error")
|
||||
print(f"returncode={e.returncode}")
|
||||
print(f"output={e.output}")
|
||||
errorReturn = subprocess.check_output(
|
||||
cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT, cwd=task.workdir)
|
||||
if errorReturn != '':
|
||||
print("inkscape exited with error\n" + errorReturn)
|
||||
# sys.exit(42)
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
pillow
|
||||
pillow>=8.0.0
|
||||
cssutils==1.0.2
|
||||
lxml==4.9.1
|
||||
svg.path==4.0.2
|
||||
Wand==0.6.5
|
||||
lxml~=5.3
|
||||
svg.path~=6.0
|
||||
Wand~=0.6.5
|
||||
|
|
|
@ -100,6 +100,12 @@ def events(scheduleUrl, titlemap={}):
|
|||
url = event.find('url').text.strip()
|
||||
else:
|
||||
url = ''
|
||||
|
||||
if event.find('track') is not None and event.find('track').text is not None:
|
||||
track = event.find('track').text
|
||||
else:
|
||||
track = ''
|
||||
|
||||
# yield a tupel with the event-id, event-title and person-names
|
||||
yield {
|
||||
'day': day.get('index'),
|
||||
|
@ -109,7 +115,7 @@ def events(scheduleUrl, titlemap={}):
|
|||
'persons': personnames,
|
||||
'personnames': ', '.join(personnames),
|
||||
'room': room.attrib['name'],
|
||||
'track': event.find('track').text,
|
||||
'track': track,
|
||||
'url': url
|
||||
}
|
||||
|
||||
|
|
BIN
vcfb24/Computerfont.ttf
Normal file
BIN
vcfb24/SourceSansPro-Semibold.ttf
Normal file
37
vcfb24/config.ini
Normal file
|
@ -0,0 +1,37 @@
|
|||
[meta]
|
||||
schedule = http://vcfb.de/2024/schedule.xml
|
||||
# ffmpeg -loop 1 -i intro.png -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -c:v libx264 -tune stillimage -pix_fmt yuv420p -c:a aac -r 25 -t 10 intro.mp4
|
||||
template = intro.mp4
|
||||
alpha = false
|
||||
prores = false
|
||||
inout_type = t
|
||||
fade_duration = 0.5
|
||||
|
||||
[title]
|
||||
in = 1
|
||||
out = 9.5
|
||||
fontfile = Computerfont.ttf
|
||||
fontsize = 100
|
||||
fontcolor = #ffffff
|
||||
x = 85
|
||||
y = 122
|
||||
|
||||
[speaker]
|
||||
in = 2
|
||||
out = 9
|
||||
fontfile = SourceSansPro-Semibold.ttf
|
||||
fontsize = 65
|
||||
fontcolor = #ffffff
|
||||
x = 85
|
||||
y = 861
|
||||
|
||||
|
||||
[text]
|
||||
in = 0
|
||||
out = 0
|
||||
fontfile = Computerfont.ttf
|
||||
fontsize = 0
|
||||
fontcolor = #ffffff
|
||||
x = 0
|
||||
y = 0
|
||||
; text =
|
15584
vcfb24/intro.svg
Normal file
After Width: | Height: | Size: 2.1 MiB |
6231
vcfb24/lower-third.svg
Normal file
After Width: | Height: | Size: 1 MiB |
1668
vcfb24/outro.svg
Normal file
After Width: | Height: | Size: 935 KiB |
6626
vcfb24/pause.svg
Normal file
After Width: | Height: | Size: 1,015 KiB |