Author | SHA1 | Message | Date |
---|---|---|---|
|
b7e2ea559e | Latest fix on thumbnail generation | 3 years ago |
|
e62ff8b5b7 | Fixed map to list | 3 years ago |
|
ce61e2c258 | Fixed home page | 3 years ago |
|
a8399d0646 | wsgi for python3 | 3 years ago |
|
3e22a6a890 | Latest fixes for python 3 branch | 3 years ago |
|
be2441096d | Latest Fixes | 3 years ago |
|
442d18ab3b | Added Images file | 3 years ago |
|
2b3e8116d5 | Fixing python3 issues | 3 years ago |
|
588ce76eee | Misc Fixes | 3 years ago |
|
ad9883ae09 | Migration to python 3 | 3 years ago |
@@ -35,4 +35,15 @@ If no error occurs, the webserver should be available on http://localhost:8080/ | |||
cd jm2l | |||
pserve development.ini | |||
Enjoy ! | |||
Enjoy ! | |||
sudo apt install virtualenv git python3-virtualenv imagemagick | |||
sudo mkdir -p /srv/jm2l | |||
cd /srv/jm2l/ | |||
cd /srv | |||
sudo chown luna jm2l | |||
cd jm2l/ | |||
virtualenv -p python3 .venv_jm2l | |||
@@ -15,7 +15,6 @@ pyramid.debug_notfound = false | |||
pyramid.debug_routematch = false | |||
pyramid.default_locale_name = en | |||
pyramid.includes = | |||
pyramid_mailer.testing | |||
pyramid_debugtoolbar | |||
pyramid_tm | |||
pyramid_mako | |||
@@ -3,10 +3,12 @@ try: | |||
except ImportError: | |||
from cgi import escape | |||
#from wtforms import widgets | |||
from wtforms.widgets import HTMLString, html_params | |||
# from wtforms import widgets | |||
from wtforms.widgets import html_params | |||
from wtforms.fields.core import Field | |||
from wtforms.compat import text_type, izip | |||
from markupsafe import Markup | |||
class MySelect(object): | |||
""" | |||
@@ -19,6 +21,7 @@ class MySelect(object): | |||
call on rendering; this method must yield tuples of | |||
`(value, label, selected)`. | |||
""" | |||
def __init__(self, multiple=False): | |||
self.multiple = multiple | |||
@@ -34,13 +37,13 @@ class MySelect(object): | |||
elif last_group != group: | |||
html.append(self.render_optgroup(last_group, group)) | |||
html.append(self.render_option(val, label, selected)) | |||
last_group=group | |||
last_group = group | |||
else: | |||
html.append(self.render_option(val, label, selected)) | |||
if last_group: | |||
html.append(self.render_optgroup(last_group, None)) | |||
html.append('</select>') | |||
return HTMLString(''.join(html)) | |||
return Markup(''.join(html)) | |||
@classmethod | |||
def render_option(cls, value, label, selected, **kwargs): | |||
@@ -51,17 +54,19 @@ class MySelect(object): | |||
options = dict(kwargs, value=value) | |||
if selected: | |||
options['selected'] = True | |||
return HTMLString('<option %s>%s</option>' % (html_params(**options), escape(text_type(label), quote=False))) | |||
return Markup('<option %s>%s</option>' % (html_params(**options), escape(text_type(label), quote=False))) | |||
@classmethod | |||
def render_optgroup(cls, previous_label, label, **kwargs): | |||
options = dict(kwargs) | |||
if previous_label is None: | |||
return HTMLString('<optgroup %s label="%s">' % (html_params(**options), escape(text_type(label), quote=False))) | |||
return Markup( | |||
'<optgroup %s label="%s">' % (html_params(**options), escape(text_type(label), quote=False))) | |||
elif label is None: | |||
return HTMLString('</optgroup>') | |||
return Markup('</optgroup>') | |||
else: | |||
return HTMLString('</optgroup><optgroup %s label="%s">' % (html_params(**options), escape(text_type(label), quote=False))) | |||
return Markup( | |||
'</optgroup><optgroup %s label="%s">' % (html_params(**options), escape(text_type(label), quote=False))) | |||
class MyOption(object): | |||
@@ -71,12 +76,13 @@ class MyOption(object): | |||
This is just a convenience for various custom rendering situations, and an | |||
option by itself does not constitute an entire field. | |||
""" | |||
def __call__(self, field, **kwargs): | |||
return MySelect.render_option(field._value(), field.label.text, field.checked, **kwargs) | |||
class MySelectFieldBase(Field): | |||
#option_widget = widgets.Option() | |||
# option_widget = widgets.Option() | |||
option_widget = MyOption() | |||
""" | |||
@@ -85,6 +91,7 @@ class MySelectFieldBase(Field): | |||
This isn't a field, but an abstract base class for fields which want to | |||
provide this functionality. | |||
""" | |||
def __init__(self, label=None, validators=None, option_widget=None, **kwargs): | |||
super(MySelectFieldBase, self).__init__(label, validators, **kwargs) | |||
@@ -114,7 +121,7 @@ class MySelectFieldBase(Field): | |||
class MySelectField(MySelectFieldBase): | |||
#widget = widgets.Select() | |||
# widget = widgets.Select() | |||
widget = MySelect() | |||
def __init__(self, label=None, validators=None, coerce=text_type, choices=None, **kwargs): | |||
@@ -128,15 +135,15 @@ class MySelectField(MySelectFieldBase): | |||
# We should consider choiceA as an optgroup label | |||
group_label = choiceA | |||
for value, label in choiceB: | |||
yield (group_label, value, label, self.coerce(value) == self.data) | |||
yield group_label, value, label, self.coerce(value) == self.data | |||
else: | |||
value, label = choiceA, choiceB | |||
# Not an optgroup, let's fallback to classic usage | |||
yield (None, value, label, self.coerce(value) == self.data) | |||
yield None, value, label, self.coerce(value) == self.data | |||
def process_data(self, value): | |||
def process_data(self, value): | |||
try: | |||
self.data = self.coerce(value) | |||
self.data = self.coerce(value) | |||
except (ValueError, TypeError): | |||
self.data = None | |||
@@ -149,7 +156,7 @@ class MySelectField(MySelectFieldBase): | |||
def pre_validate(self, form): | |||
for choiceA, choiceB in self.choices: | |||
if isinstance(choiceB, (tuple, list)): | |||
if isinstance(choiceB, (tuple, list)): | |||
for value, label in choiceB: | |||
if self.data == value: | |||
break | |||
@@ -19,51 +19,53 @@ from pyramid.request import Request | |||
from mako.template import Template | |||
from .models import User | |||
from jm2l.const import CurrentYear | |||
from models import JM2L_Year | |||
from .models import JM2L_Year | |||
import logging | |||
def add_renderer_globals(event): | |||
event['mytrip'] = Sejour_helpers(event) | |||
event['myorga'] = Orga_helpers(event) | |||
event['SelectedYear'] = CurrentYear | |||
event['CurrentYear'] = CurrentYear | |||
#@sched.scheduled_job('cron', day_of_week='sun', hour=22, minute=07) | |||
# @sched.scheduled_job('cron', day_of_week='sun', hour=22, minute=7) | |||
def mailer_tasks(config): | |||
# Send the Welcome Mail | |||
mailer = config.registry['mailer'] | |||
Contact = DBSession.query(User).filter(User.uid==1).one() | |||
contact = DBSession.query(User).filter(User.uid == 1).one() | |||
request = Request.blank('/', base_url='http://jm2l.linux-azur.org') | |||
request.registry = config.registry | |||
for StaffUser in DBSession.query(User).filter(User.Staff == True): | |||
mailer = request.mailer | |||
for staff_user in DBSession.query(User).filter(User.Staff is True): | |||
# Skip mail to contact | |||
if StaffUser==Contact: | |||
if staff_user == contact: | |||
continue | |||
# Skip those that have no task assigned | |||
if len(filter(lambda k:not k.closed, StaffUser.task_assoc))==0: | |||
if len(filter(lambda k: not k.closed, staff_user.task_assoc)) == 0: | |||
continue | |||
# Prepare Plain Text Message : | |||
Mail_template = Template(filename='jm2l/templates/mail_plain.mako') | |||
mail_plain = Mail_template.render(request=request, User=StaffUser, Contact=Contact, action="Tasks") | |||
mail_template = Template(filename='jm2l/templates/mail_plain.mako') | |||
mail_plain = mail_template.render(request=request, User=staff_user, Contact=contact, action="Tasks") | |||
# Prepare HTML Message : | |||
Mail_template = Template(filename='jm2l/templates/mail_html.mako') | |||
mail_html = Mail_template.render(request=request, User=StaffUser, Contact=Contact, action="Tasks") | |||
mail_template = Template(filename='jm2l/templates/mail_html.mako') | |||
mail_html = mail_template.render(request=request, User=staff_user, Contact=contact, action="Tasks") | |||
# Prepare Message | |||
message = Message(subject="[JM2L] Le mail de rappel pour les JM2L !", | |||
sender="contact@jm2l.linux-azur.org", | |||
recipients=[StaffUser.mail], | |||
recipients=[staff_user.mail], | |||
body=mail_plain, html=mail_html) | |||
message.add_bcc("spam@style-python.fr") | |||
mailer.send_immediately(message) | |||
def main(global_config, **settings): | |||
""" This function returns a Pyramid WSGI application. | |||
""" | |||
#locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") | |||
# locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") | |||
locale.setlocale(locale.LC_ALL, "fr_FR.utf8") | |||
engine = engine_from_config(settings, 'sqlalchemy.') | |||
DBSession.configure(bind=engine) | |||
@@ -72,19 +74,21 @@ def main(global_config, **settings): | |||
AuthTktPasswd = settings.get('secret_AuthTkt', 'itsthesecondseekreet') | |||
my_session_factory = SignedCookieSessionFactory(CookiesPasswd) | |||
authentication_policy = AuthTktAuthenticationPolicy(AuthTktPasswd, | |||
callback=groupfinder, hashalg='sha512', debug=True) | |||
callback=groupfinder, hashalg='sha512', debug=True) | |||
authorization_policy = ACLAuthorizationPolicy() | |||
config = Configurator(settings=settings, | |||
root_factory='.security.RootFactory', | |||
authentication_policy=authentication_policy, | |||
authorization_policy=authorization_policy | |||
) | |||
config.add_subscriber(add_renderer_globals, BeforeRender) | |||
config.registry['mailer'] = mailer_factory_from_settings(settings) | |||
config.include('pyramid_mailer') | |||
config.add_subscriber(add_renderer_globals, BeforeRender) | |||
print(settings) | |||
# config.registry['mailer'] = mailer_factory_from_settings(settings) | |||
config.registry['event_date'] = JM2L_Year.get_latest_jm2l_startdate() | |||
sched = BackgroundScheduler() | |||
sched.add_job(mailer_tasks, 'cron', day_of_week='fri', hour=18, args=[ config ]) | |||
sched.start() # start the scheduler | |||
sched.add_job(mailer_tasks, 'cron', day_of_week='fri', hour=18, args=[config]) | |||
sched.start() # start the scheduler | |||
config.add_renderer('json', JSON(indent=4)) | |||
config.add_renderer('jsonp', JSONP(param_name='callback')) | |||
config.set_session_factory(my_session_factory) | |||
@@ -98,98 +102,96 @@ def main(global_config, **settings): | |||
config.add_static_view('vendor', 'static/vendor', cache_max_age=3600) | |||
config.add_static_view('upload', 'upload', cache_max_age=3600) | |||
config.add_static_view('resources', 'resources', cache_max_age=3600) | |||
# ICal Routes | |||
config.add_route('progr_iCal', '/{year:\d+}/JM2L.ics') | |||
config.add_route('progr_dyn_iCal', '/{year:\d+}/JM2L_dyn.ics') | |||
config.add_route('progr_iCal', r'/{year:\d+}/JM2L.ics') | |||
config.add_route('progr_dyn_iCal', r'/{year:\d+}/JM2L_dyn.ics') | |||
# JSON Routes | |||
config.add_route('users_json', '/json-users') | |||
config.add_route('tiers_json', '/json-tiers') | |||
config.add_route('progr_json', '/{year:\d+}/le-prog-json') | |||
config.add_route('timeline_json', '/{year:\d+}/timeline-json') | |||
config.add_route('progr_json', r'/{year:\d+}/le-prog-json') | |||
config.add_route('timeline_json', r'/{year:\d+}/timeline-json') | |||
# Session setting Routes | |||
config.add_route('year', '/year/{year:\d+}') | |||
config.add_route('vote_logo', '/vote_logo/{num:\d+}') | |||
config.add_route('year', r'/year/{year:\d+}') | |||
config.add_route('vote_logo', r'/vote_logo/{num:\d+}') | |||
# HTML Routes - Staff | |||
config.add_route('Live', '/Live') | |||
config.add_route('list_expenses', '/{year:\d+}/Staff/compta') | |||
config.add_route('list_task', '/{year:\d+}/Staff') | |||
config.add_route('handle_pole', '/{year:\d+}/Staff/poles{sep:/*}{pole_id:(\d+)?}') | |||
config.add_route('handle_task', '/{year:\d+}/Staff/tasks{sep:/*}{task_id:(\d+)?}') | |||
config.add_route('action_task', '/{year:\d+}/Staff/{action:(\w+)}/{task_id:(\d+)}') | |||
config.add_route('action_task_area', '/{year:\d+}/Staff/pole/{action:(\w+)}/{pole_id:(\d+)}') | |||
config.add_route('list_salles', '/ListSalles') | |||
config.add_route('list_salles_phy', '/ListSallesPhy') | |||
config.add_route('handle_salle', '/Salles{sep:/*}{salle_id:(\d+)?}') | |||
config.add_route('handle_salle_phy', '/PhySalles{sep:/*}{salle_id:(\d+)?}') | |||
config.add_route('action_salle', '/Salles/{action:(\w+)}/{salle_id:(\d+)}') | |||
config.add_route('pict_salle', '/salle_picture/{salle_id:(\d+)}') | |||
config.add_route('list_users', '/{year:\d+}/ListParticipant') | |||
config.add_route('list_users_csv', '/{year:\d+}/ListParticipant.csv') | |||
config.add_route('list_orga', '/{year:\d+}/ListOrga') | |||
config.add_route('Live', '/Live') | |||
config.add_route('list_expenses', r'/{year:\d+}/Staff/compta') | |||
config.add_route('list_task', r'/{year:\d+}/Staff') | |||
config.add_route('handle_pole', r'/{year:\d+}/Staff/poles{sep:/*}{pole_id:(\d+)?}') | |||
config.add_route('handle_task', r'/{year:\d+}/Staff/tasks{sep:/*}{task_id:(\d+)?}') | |||
config.add_route('action_task', r'/{year:\d+}/Staff/{action:(\w+)}/{task_id:(\d+)}') | |||
config.add_route('action_task_area', r'/{year:\d+}/Staff/pole/{action:(\w+)}/{pole_id:(\d+)}') | |||
config.add_route('list_salles', '/ListSalles') | |||
config.add_route('list_salles_phy', '/ListSallesPhy') | |||
config.add_route('handle_salle', r'/Salles{sep:/*}{salle_id:(\d+)?}') | |||
config.add_route('handle_salle_phy', r'/PhySalles{sep:/*}{salle_id:(\d+)?}') | |||
config.add_route('action_salle', r'/Salles/{action:(\w+)}/{salle_id:(\d+)}') | |||
config.add_route('pict_salle', r'/salle_picture/{salle_id:(\d+)}') | |||
config.add_route('list_users', r'/{year:\d+}/ListParticipant') | |||
config.add_route('list_users_csv', r'/{year:\d+}/ListParticipant.csv') | |||
config.add_route('list_orga', r'/{year:\d+}/ListOrga') | |||
# HTML Routes - Public | |||
config.add_route('home', '/{year:(\d+/)?}') | |||
config.add_route('edit_index', '/{year:\d+}/edit') | |||
config.add_route('presse', '/{year:\d+}/dossier-de-presse') | |||
config.add_route('edit_presse', '/{year:\d+}/dossier-de-presse/edit') | |||
config.add_route('programme', '/{year:\d+}/le-programme') | |||
config.add_route('home', r'/{year:(\d+/)?}') | |||
config.add_route('edit_index', r'/{year:\d+}/edit') | |||
config.add_route('presse', r'/{year:\d+}/dossier-de-presse') | |||
config.add_route('edit_presse', r'/{year:\d+}/dossier-de-presse/edit') | |||
config.add_route('programme', r'/{year:\d+}/le-programme') | |||
config.add_route('plan', 'nous-rejoindre') | |||
config.add_route('participer', 'participer-l-evenement') | |||
config.add_route('captcha', '/captcha') | |||
## Events | |||
config.add_route('event', '/event/{year:\d+}/{event_id:([\w-]+)?}') | |||
config.add_route('link_event_user', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/link_user') | |||
config.add_route('delete_link_u', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/delete_link_user') | |||
config.add_route('link_event_tiers', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/link_tiers') | |||
config.add_route('delete_link_t', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/delete_link_tiers') | |||
config.add_route('edit_event', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}{sep:/*}{event_id:([\w-]+)?}') | |||
config.add_route('delete_event', '/MesJM2L/{year:\d+}/{intervention:[\s\w]+}{sep:/*}{event_id:([\w-]+)?}/delete') | |||
## Entities | |||
config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}') | |||
config.add_route('add_entity', '/entity') | |||
config.add_route('delete_entity', '/entity/{entity_id:(\d+)}/delete') | |||
config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | |||
config.add_route('edit_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)}/edit') | |||
config.add_route('event', r'/event/{year:\d+}/{event_id:([\w-]+)?}') | |||
config.add_route('link_event_user', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/link_user') | |||
config.add_route('delete_link_u', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/delete_link_user') | |||
config.add_route('link_event_tiers', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/link_tiers') | |||
config.add_route('delete_link_t', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}/delete_link_tiers') | |||
config.add_route('edit_event', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}{sep:/*}{event_id:([\w-]+)?}') | |||
config.add_route('delete_event', r'/MesJM2L/{year:\d+}/{intervention:[\s\w]+}{sep:/*}{event_id:([\w-]+)?}/delete') | |||
# Entities | |||
config.add_route('entities', '/entities') # {sep:/*}{Nature:\w+?}') | |||
config.add_route('add_entity', '/entity') | |||
config.add_route('delete_entity', r'/entity/{entity_id:(\d+)}/delete') | |||
config.add_route('show_entity', r'/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | |||
config.add_route('edit_entity', r'/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)}/edit') | |||
config.add_route('edit_entity_cat', '/categorie/entity') | |||
## Users | |||
# Users | |||
config.add_route('pict_user', '/user_picture') | |||
config.add_route('show_user', '/user/{user_slug:([\w-]+)?}') | |||
config.add_route('badge_user', '/user/{user_slug:([\w-]+)?}/badge') | |||
config.add_route('show_user', r'/user/{user_slug:([\w-]+)?}') | |||
config.add_route('badge_user', r'/user/{user_slug:([\w-]+)?}/badge') | |||
config.add_route('all_badges', '/badges') | |||
config.add_route('place_print', '/place_print') | |||
config.add_route('stand_print', '/stand_print') | |||
config.add_route('stand_print', '/stand_print') | |||
# HTML Routes - Logged | |||
#config.add_route('profil', 'MesJM2L') | |||
# config.add_route('profil', 'MesJM2L') | |||
config.add_route('jm2l', '/MesJM2L') | |||
config.add_route('drop_sejour', '/DropSejour') | |||
config.add_route('miam', '/MonMiam') | |||
config.add_route('sejour', '/MonSejour') | |||
config.add_route('orga', '/MonOrga') | |||
config.add_route('modal', '/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}') | |||
config.add_route('modal', r'/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}') | |||
# Handle exchanges | |||
config.add_route('exchange', '/{year:\d+}/exchange/{modtype:\w+}/{id:(\d+)}/{action:\w+}') | |||
config.add_route('exchange', r'/{year:\d+}/exchange/{modtype:\w+}/{id:(\d+)}/{action:\w+}') | |||
# Handle authentication | |||
config.add_route('register', '/register') | |||
config.add_route('auth', '/sign/{action}') | |||
config.add_route('bymail', '/sign/jm2l/{hash}') | |||
# Handle Multimedia and Uploads | |||
config.add_route('media_view', '/image/{media_table:\w+}/{uid:\d+}/{name:.+}') | |||
config.add_route('media_upload', '/uploader/{media_table:\w+}/{uid:\d+}/proceed{sep:/*}{name:.*}') | |||
config.add_route('media_view', r'/image/{media_table:\w+}/{uid:\d+}/{name:.+}') | |||
config.add_route('media_upload', r'/uploader/{media_table:\w+}/{uid:\d+}/proceed{sep:/*}{name:.*}') | |||
config.scan() | |||
return config.make_wsgi_app() | |||
@@ -8,14 +8,16 @@ from pyramid_mailer import get_mailer | |||
from pyramid_mailer.message import Attachment, Message | |||
from .forms import UserPasswordForm | |||
from passlib.hash import argon2 | |||
from security import check_logged | |||
from .security import check_logged | |||
import datetime | |||
import re | |||
@view_config(route_name='auth', match_param="action=login", renderer="jm2l:templates/login.mako") | |||
def login(request): | |||
return {"comefrom":request.GET.get('from', "")} | |||
@view_config(route_name='auth', match_param="action=forgot", renderer="jm2l:templates/login.mako") | |||
def forgot(request): | |||
if request.method == 'POST' and request.POST: | |||
@@ -31,7 +33,7 @@ def forgot(request): | |||
return { 'forgot': True } | |||
else: | |||
# Send the Forgot Mail | |||
mailer = request.registry['mailer'] | |||
mailer = request.mailer | |||
# Prepare Plain Text Message : | |||
Mail_template = Template(filename='jm2l/templates/mail_plain.mako') | |||
mail_plain = Mail_template.render(request=request, User=UserFound, action="Forgot") | |||
@@ -1,7 +1,12 @@ | |||
# -*- coding: utf8 -*- | |||
from pyramid.httpexceptions import HTTPNotFound, HTTPForbidden | |||
from pyramid.response import Response | |||
import cStringIO as StringIO | |||
try: | |||
from StringIO import StringIO | |||
except ImportError: | |||
from io import StringIO | |||
import io | |||
from pyramid.view import view_config | |||
from .models import DBSession, User | |||
from reportlab.pdfgen import canvas | |||
@@ -12,78 +17,86 @@ import qrcode | |||
import subprocess | |||
from .upload import MediaPath | |||
from jm2l.const import CurrentYear | |||
# Create PDF container | |||
EXPIRATION_TIME = 300 # seconds | |||
EXPIRATION_TIME = 300 # seconds | |||
WIDTH = 85 * mm | |||
HEIGHT = 60 * mm | |||
ICONSIZE = 10 * mm | |||
def JM2L_Logo(canvas, Offset=(0,0)): | |||
OffX, OffY = Offset | |||
logoobject = canvas.beginText() | |||
logoobject.setFont('Logo', 32) | |||
logoobject.setFillColorRGB(.83,0,.33) | |||
logoobject.setTextOrigin(OffX+5, OffY+17) | |||
logoobject.textLines("JM2L") | |||
canvas.drawText(logoobject) | |||
yearobject = canvas.beginText() | |||
yearobject.setFont("Helvetica-Bold", 10) | |||
yearobject.setFillColorRGB(1,1,1) | |||
yearobject.setTextRenderMode(0) | |||
yearobject.setTextOrigin(OffX+12 , OffY+35) | |||
yearobject.setWordSpace(13) | |||
yearobject.textLines(" ".join(str(CurrentYear))) | |||
canvas.drawText(yearobject) | |||
def Tiers_Logo(canvas, DispUser, StartPos=None, Offset=(0,0)): | |||
Border = 0 | |||
OffX, OffY = Offset | |||
if StartPos is None: | |||
StartPos = ( 30 * mm, 2 ) | |||
StartX, StartY = StartPos | |||
MaxX, MaxY = 34*mm, 18*mm | |||
def JM2L_Logo(canvas, Offset=(0, 0)): | |||
off_x, off_y = Offset | |||
logo_object = canvas.beginText() | |||
logo_object.setFont('Logo', 32) | |||
logo_object.setFillColorRGB(.83, 0, .33) | |||
logo_object.setTextOrigin(off_x + 5, off_y + 17) | |||
logo_object.textLines("JM2L") | |||
canvas.drawText(logo_object) | |||
year_object = canvas.beginText() | |||
year_object.setFont("Helvetica-Bold", 10) | |||
year_object.setFillColorRGB(1, 1, 1) | |||
year_object.setTextRenderMode(0) | |||
year_object.setTextOrigin(off_x + 12, off_y + 35) | |||
year_object.setWordSpace(13) | |||
year_object.textLines(" ".join(str(CurrentYear))) | |||
canvas.drawText(year_object) | |||
def Tiers_Logo(canvas, DispUser, start_pos=None, Offset=(0, 0)): | |||
border = 0 | |||
off_x, off_y = Offset | |||
if start_pos is None: | |||
start_pos = (30 * mm, 2) | |||
start_x, start_y = start_pos | |||
max_x, max_y = 34 * mm, 18 * mm | |||
num = 0 | |||
canvas.setStrokeColorRGB(0.5,0.5,0.5) | |||
Logos = filter(lambda x:x.ThumbLinks, DispUser.tiers)[:3] | |||
canvas.setStrokeColorRGB(0.5, 0.5, 0.5) | |||
list_logos = list() | |||
for thumb in DispUser.tiers: | |||
if thumb.ThumbLinks: | |||
list_logos.append(thumb.ThumbLinks[:3]) | |||
# list_logos = list(filter(lambda x: x.ThumbLinks, DispUser.tiers)[:3]) | |||
# Should We compute a better positionning for logos ? | |||
DicPos = {} | |||
DicPos[1] = { 0:(1./2, 1./2) } | |||
DicPos[2] = { 0:(1./3, 1./2), 1:(2./3, 1./2) } | |||
DicPos[3] = { 0:(1./2, 1./4), 1:(1./3, 3./4), 2:(2./3, 3./4) } | |||
DicPos[4] = { 0:(1./3, 1./4), 1:(2./3, 1./4), 2:(1./3, 3./4), | |||
3:(2./3, 3./4) } | |||
DicPos[5] = { 0:(1./3, 1./4), 1:(2./3, 1./4), 2:(1./6, 3./4), | |||
3:(3./6, 3./4), 4:(5./6, 3./4) } | |||
DicPos[6] = { 0:(1./6, 1./4), 1:(3./6, 1./4), 2:(5./6, 1./4), | |||
3:(1./6, 3./4), 4:(3./6, 3./4), 5:(5./6, 3./4) } | |||
DicPos[7] = { 0:(1./6, 1./4), 1:(3./6, 1./4), 2:(5./6, 1./4), | |||
3:(1./8, 3./4), 4:(3./8, 3./4), 5:(5./8, 3./4), | |||
6:(7./8, 3./4) } | |||
DicPos[8] = { 0:(1./8, 1./4), 1:(3./8, 1./4), 2:(5./8, 1./4), | |||
3:(7./8, 1./4), 4:(1./8, 3./4), 5:(3./8, 3./4), | |||
6:(5./8, 3./4), 7:(7./8, 3./4) } | |||
DicPos[1] = {0: (1. / 2, 1. / 2)} | |||
DicPos[2] = {0: (1. / 3, 1. / 2), 1: (2. / 3, 1. / 2)} | |||
DicPos[3] = {0: (1. / 2, 1. / 4), 1: (1. / 3, 3. / 4), 2: (2. / 3, 3. / 4)} | |||
DicPos[4] = {0: (1. / 3, 1. / 4), 1: (2. / 3, 1. / 4), 2: (1. / 3, 3. / 4), | |||
3: (2. / 3, 3. / 4)} | |||
DicPos[5] = {0: (1. / 3, 1. / 4), 1: (2. / 3, 1. / 4), 2: (1. / 6, 3. / 4), | |||
3: (3. / 6, 3. / 4), 4: (5. / 6, 3. / 4)} | |||
DicPos[6] = {0: (1. / 6, 1. / 4), 1: (3. / 6, 1. / 4), 2: (5. / 6, 1. / 4), | |||
3: (1. / 6, 3. / 4), 4: (3. / 6, 3. / 4), 5: (5. / 6, 3. / 4)} | |||
DicPos[7] = {0: (1. / 6, 1. / 4), 1: (3. / 6, 1. / 4), 2: (5. / 6, 1. / 4), | |||
3: (1. / 8, 3. / 4), 4: (3. / 8, 3. / 4), 5: (5. / 8, 3. / 4), | |||
6: (7. / 8, 3. / 4)} | |||
DicPos[8] = {0: (1. / 8, 1. / 4), 1: (3. / 8, 1. / 4), 2: (5. / 8, 1. / 4), | |||
3: (7. / 8, 1. / 4), 4: (1. / 8, 3. / 4), 5: (3. / 8, 3. / 4), | |||
6: (5. / 8, 3. / 4), 7: (7. / 8, 3. / 4)} | |||
# draw overall border | |||
# canvas.roundRect(StartX, StartY, MaxX, MaxY, radius=2, stroke=True) | |||
for tiers in Logos: | |||
FileName = tiers.ThumbLinks.pop().split("/")[-1] | |||
ImagePath = "jm2l/upload/images/tiers/%s/%s" % (tiers.slug, FileName) | |||
PosX = OffX+StartX + DicPos[len(Logos)][num][0] * MaxX - (ICONSIZE+Border)/2 | |||
PosY = OffY+StartY + DicPos[len(Logos)][num][1] * MaxY - (ICONSIZE+Border)/2 | |||
# canvas.roundRect(start_x, start_y, max_x, max_y, radius=2, stroke=True) | |||
for tiers in list_logos: | |||
file_name = tiers.ThumbLinks.pop().split("/")[-1] | |||
image_path = "jm2l/upload/images/tiers/%s/%s" % (tiers.slug, file_name) | |||
pos_x = off_x + start_x + DicPos[len(list_logos)][num][0] * max_x - (ICONSIZE + border) / 2 | |||
pos_y = off_y + start_y + DicPos[len(list_logos)][num][1] * max_y - (ICONSIZE + border) / 2 | |||
canvas.setLineWidth(.1) | |||
if len(Logos)>1: | |||
if len(list_logos) > 1: | |||
size = ICONSIZE | |||
else: | |||
size = ICONSIZE*1.5 | |||
canvas.drawImage(ImagePath, | |||
PosX, PosY, size, size,\ | |||
preserveAspectRatio=True, | |||
anchor='c', | |||
mask='auto' | |||
) | |||
size = ICONSIZE * 1.5 | |||
canvas.drawImage(image_path, | |||
pos_x, pos_y, size, size, | |||
preserveAspectRatio=True, | |||
anchor='c', | |||
mask='auto' | |||
) | |||
# draw icon border | |||
# canvas.roundRect(PosX, PosY, ICONSIZE, ICONSIZE, radius=2, stroke=True) | |||
num+=1 | |||
# canvas.roundRect(pos_x, pos_y, ICONSIZE, ICONSIZE, radius=2, stroke=True) | |||
num += 1 | |||
def QRCode(DispUser): | |||
qr = qrcode.QRCode( | |||
@@ -98,78 +111,79 @@ def QRCode(DispUser): | |||
return qr.make_image() | |||
def one_badge(c, DispUser, Offset=(0,0)): | |||
def one_badge(c, DispUser, Offset=(0, 0)): | |||
# Logo on Top | |||
JM2L_Logo(c, Offset) | |||
OffX, OffY = Offset | |||
c.rect(OffX-3, OffY-3, WIDTH+6, HEIGHT+6, fill=0, stroke=1) | |||
off_x, off_y = Offset | |||
c.rect(off_x - 3, off_y - 3, WIDTH + 6, HEIGHT + 6, fill=0, stroke=1) | |||
if DispUser.Staff: | |||
# Staff | |||
c.setFillColorRGB(.83,0,.33) | |||
c.rect(OffX-3, OffY+HEIGHT-30, WIDTH+6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1,1,1) | |||
c.setFillColorRGB(.83, 0, .33) | |||
c.rect(off_x - 3, off_y + HEIGHT - 30, WIDTH + 6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1, 1, 1) | |||
c.setFont('Liberation', 30) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT-24, "STAFF") | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT - 24, "STAFF") | |||
elif DispUser.is_Intervenant: | |||
# Intervenant | |||
c.setFillColorRGB(.21,.67,.78) | |||
c.rect(OffX-3, OffY+HEIGHT-30, WIDTH+6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1,1,1) | |||
c.setFillColorRGB(.21, .67, .78) | |||
c.rect(off_x - 3, off_y + HEIGHT - 30, WIDTH + 6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1, 1, 1) | |||
c.setFont('Liberation', 30) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT-24, "Intervenant") | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT - 24, "Intervenant") | |||
elif DispUser.is_crew: | |||
# Benevole | |||
c.setFillColorRGB(.18,.76,.23) | |||
c.rect(OffX-3, OffY+HEIGHT-30, WIDTH+6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1,1,1) | |||
c.setFillColorRGB(.18, .76, .23) | |||
c.rect(off_x - 3, off_y + HEIGHT - 30, WIDTH + 6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1, 1, 1) | |||
c.setFont('Liberation', 30) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT-24, "Bénévole") | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT - 24, "Bénévole") | |||
else: | |||
# Visiteur | |||
c.setFillColorRGB(.8,.8,.8) | |||
c.rect(OffX-3, OffY+HEIGHT-30, WIDTH+6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1,1,1) | |||
c.setFillColorRGB(.8, .8, .8) | |||
c.rect(off_x - 3, off_y + HEIGHT - 30, WIDTH + 6, 33, fill=1, stroke=0) | |||
c.setFillColorRGB(1, 1, 1) | |||
c.setFont('Liberation', 30) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT-24, "Visiteur") | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT - 24, "Visiteur") | |||
c.restoreState() | |||
c.setFont('Liberation', 18) | |||
c.setStrokeColorRGB(0,0,0) | |||
c.setFillColorRGB(0,0,0) | |||
c.setStrokeColorRGB(0, 0, 0) | |||
c.setFillColorRGB(0, 0, 0) | |||
# Feed Name and SurName | |||
if DispUser.prenom and DispUser.nom and len(DispUser.prenom) + len(DispUser.nom)>18: | |||
if DispUser.prenom and DispUser.nom and len(DispUser.prenom) + len(DispUser.nom) > 18: | |||
if DispUser.pseudo: | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 + 0 * mm , "%s" % DispUser.prenom ) | |||
#c.setFont('Courier', 17) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 - 8 * mm , "%s" % DispUser.nom ) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 + 0 * mm, "%s" % DispUser.prenom) | |||
# c.setFont('Courier', 17) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 - 8 * mm, "%s" % DispUser.nom) | |||
else: | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 + 4 * mm , "%s" % DispUser.prenom ) | |||
#c.setFont('Courier', 17) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 - 8 * mm , "%s" % DispUser.nom ) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 + 4 * mm, "%s" % DispUser.prenom) | |||
# c.setFont('Courier', 17) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 - 8 * mm, "%s" % DispUser.nom) | |||
else: | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 + 0 * mm , "%s %s" % (DispUser.prenom, DispUser.nom) ) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 + 0 * mm, "%s %s" % (DispUser.prenom, DispUser.nom)) | |||
if DispUser.pseudo: | |||
c.setFont("Helvetica-Oblique", 18) | |||
c.drawCentredString(OffX+WIDTH/2, OffY+HEIGHT/2 + 10 * mm , "%s" % DispUser.pseudo ) | |||
#Â Put QR code to user profile | |||
c.drawInlineImage(QRCode(DispUser), \ | |||
OffX+WIDTH - 20 * mm -5, OffY+5, \ | |||
20 * mm, 20 * mm, \ | |||
preserveAspectRatio=True, \ | |||
anchor='s') | |||
Tiers_Logo(c, DispUser, None, Offset) | |||
@view_config(route_name='badge_user', http_cache = (EXPIRATION_TIME, {'public':True})) | |||
c.drawCentredString(off_x + WIDTH / 2, off_y + HEIGHT / 2 + 10 * mm, "%s" % DispUser.pseudo) | |||
# Â Put QR code to user profile | |||
c.drawInlineImage(QRCode(DispUser), | |||
off_x + WIDTH - 20 * mm - 5, off_y + 5, | |||
20 * mm, 20 * mm, | |||
preserveAspectRatio=True, | |||
anchor='s') | |||
Tiers_Logo(c, DispUser, None, Offset) | |||
@view_config(route_name='badge_user') # , http_cache=(EXPIRATION_TIME, {'public': True})) | |||
def badge_user(request): | |||
isoutpng = request.params.get('png') | |||
user_slug = request.matchdict.get('user_slug', None) | |||
if user_slug is None or len(user_slug)==0: | |||
if user_slug is None or len(user_slug) == 0: | |||
raise HTTPNotFound(u"Cet utilisateur n'a pas été reconnu") | |||
# Query database | |||
DispUser = User.by_slug(user_slug) | |||
@@ -177,48 +191,47 @@ def badge_user(request): | |||
raise HTTPNotFound() | |||
# Ok let's generate a PDF Badge | |||
# Register LiberationMono font | |||
ttfFile = "jm2l/static/fonts/LiberationMono-Regular.ttf" | |||
pdfmetrics.registerFont(TTFont("Liberation", ttfFile)) | |||
#Â Import font | |||
ttfFile_Logo = "jm2l/static/fonts/PWTinselLetters.ttf" | |||
pdfmetrics.registerFont(TTFont("Logo", ttfFile_Logo)) | |||
pdf = StringIO.StringIO() | |||
out_img = StringIO.StringIO() | |||
c = canvas.Canvas( pdf, pagesize=(WIDTH, HEIGHT) ) | |||
ttf_file = "jm2l/static/fonts/LiberationMono-Regular.ttf" | |||
pdfmetrics.registerFont(TTFont("Liberation", ttf_file)) | |||
# Â Import font | |||
ttf_file_logo = "jm2l/static/fonts/PWTinselLetters.ttf" | |||
pdfmetrics.registerFont(TTFont("Logo", ttf_file_logo)) | |||
pdf = io.BytesIO() | |||
out_img = io.BytesIO() | |||
c = canvas.Canvas(pdf, pagesize=(WIDTH, HEIGHT)) | |||
c.translate(mm, mm) | |||
# Feed some metadata | |||
c.setCreator("linux-azur.org") | |||
c.setTitle("Badge") | |||
c.saveState() | |||
one_badge(c, DispUser) | |||
one_badge(c, DispUser) | |||
out_pdf = MediaPath().get_mediapath("badge", DispUser.uid, 'badge.pdf') | |||
c.showPage() | |||
c.save() | |||
pdf.seek(0) | |||
if isoutpng: | |||
OutPDF = MediaPath().get_mediapath("badge", DispUser.uid, 'badge.pdf') | |||
OutPNG = MediaPath().get_mediapath("badge", DispUser.uid, 'badge.png') | |||
#Â Let's generate a png file for website | |||
with open( OutPDF ,'wb') as pdff: | |||
out_png = MediaPath().get_mediapath("badge", DispUser.uid, 'badge.png') | |||
# Â Let's generate a png file for website | |||
with open("./%s" % out_pdf, 'wb') as pdff: | |||
pdff.write(pdf.read()) | |||
Command = ["convert","-density","150x150", OutPDF, OutPNG] | |||
Command = ["convert", "-density", "150x150", out_pdf, out_png] | |||
subprocess.call(Command) | |||
with open( OutPNG, 'rb') as pngfile: | |||
out_img.write(pngfile.read()) | |||
with open("./%s" % out_png, 'rb') as pngfile: | |||
out_img.write(pngfile.read()) # pngfile.read(), "utf8")) | |||
out_img.seek(0) | |||
return Response(app_iter=out_img, content_type = 'image/png' ) | |||
return Response(app_iter=out_img, content_type='image/png') | |||
else: | |||
return Response(app_iter=pdf, content_type = 'application/pdf' ) | |||
return Response(app_iter=pdf, content_type='application/pdf') | |||
@view_config(route_name='all_badges') | |||
@@ -232,34 +245,34 @@ def planche_badge(request): | |||
# .filter(User_Event.year_uid == year) | |||
# Register LiberationMono font | |||
ttfFile = "jm2l/static/fonts/LiberationMono-Regular.ttf" | |||
pdfmetrics.registerFont(TTFont("Liberation", ttfFile)) | |||
#Â Import font | |||
ttfFile_Logo = "jm2l/static/fonts/PWTinselLetters.ttf" | |||
pdfmetrics.registerFont(TTFont("Logo", ttfFile_Logo)) | |||
pdf = StringIO.StringIO() | |||
ttf_file = "jm2l/static/fonts/LiberationMono-Regular.ttf" | |||
pdfmetrics.registerFont(TTFont("Liberation", ttf_file)) | |||
# Â Import font | |||
ttf_file_logo = "jm2l/static/fonts/PWTinselLetters.ttf" | |||
pdfmetrics.registerFont(TTFont("Logo", ttf_file_logo)) | |||
pdf = io.BytesIO() | |||
FULLWIDTH = 210 * mm | |||
FULLHEIGHT = 297 * mm | |||
c = canvas.Canvas( pdf, pagesize=(FULLWIDTH, FULLHEIGHT) ) | |||
c = canvas.Canvas(pdf, pagesize=(FULLWIDTH, FULLHEIGHT)) | |||
c.translate(mm, mm) | |||
# Feed some metadata | |||
c.setCreator("linux-azur.org") | |||
c.setTitle("Badge") | |||
t=0 | |||
ListUser = filter(lambda x: x.is_Intervenant or x.Staff or x.is_crew, Users) | |||
for num, DispUser in enumerate(ListUser): | |||
t = 0 | |||
list_user = filter(lambda x: x.is_Intervenant or x.Staff or x.is_crew, Users) | |||
for num, disp_user in enumerate(list_user): | |||
c.saveState() | |||
Offsets = (((num-t)%2)*(WIDTH+40)+40, ((num-t)/2)*(HEIGHT+25)+40) | |||
one_badge(c, DispUser, Offsets) | |||
if num%8==7: | |||
t=num+1 | |||
offsets = (((num - t) % 2) * (WIDTH + 40) + 40, int(((num - t) / 2)) * (HEIGHT + 25) + 40) | |||
one_badge(c, disp_user, offsets) | |||
if num % 8 == 7: | |||
t = num + 1 | |||
c.showPage() | |||
c.showPage() | |||
c.save() | |||
pdf.seek(0) | |||
return Response(app_iter=pdf, content_type = 'application/pdf' ) | |||
return Response(app_iter=pdf, content_type='application/pdf') |
@@ -3,20 +3,22 @@ | |||
import random | |||
from PIL import Image, ImageDraw, ImageFont, ImageFilter | |||
import cStringIO as StringIO | |||
import io | |||
# from io import StringIO | |||
import math | |||
from pyramid.view import view_config | |||
from .words import TabMots | |||
from pyramid.response import Response | |||
class Captcha_Img(object): | |||
def __init__( self, width, height): | |||
def __init__(self, width, height): | |||
self.width = width | |||
self.height = height | |||
self._layers = [ | |||
_PyCaptcha_SineWarp(amplitudeRange = (4, 8) , periodRange=(0.65,0.73) ), | |||
_PyCaptcha_SineWarp(amplitudeRange=(4, 8), periodRange=(0.65, 0.73)), | |||
] | |||
def getImg(self): | |||
"""Get a PIL image representing this CAPTCHA test, creating it if necessary""" | |||
if not self._image: | |||
@@ -25,14 +27,15 @@ class Captcha_Img(object): | |||
def render(self): | |||
"""Render this CAPTCHA, returning a PIL image""" | |||
size = (self.width,self.height) | |||
#img = Image.new("RGB", size ) | |||
size = (self.width, self.height) | |||
# img = Image.new("RGB", size ) | |||
img = self._image | |||
for layer in self._layers: | |||
img = layer.render( img ) or img | |||
img = layer.render(img) or img | |||
self._image = img | |||
return self._image | |||
class _PyCaptcha_WarpBase(object): | |||
"""Abstract base class for image warping. Subclasses define a | |||
function that maps points in the output image to points in the input image. | |||
@@ -55,15 +58,15 @@ class _PyCaptcha_WarpBase(object): | |||
# Create a list of arrays with transformed points | |||
xRows = [] | |||
yRows = [] | |||
for j in xrange(yPoints): | |||
for j in range(int(yPoints)): | |||
xRow = [] | |||
yRow = [] | |||
for i in xrange(xPoints): | |||
x, y = f(i*r, j*r) | |||
for i in range(int(xPoints)): | |||
x, y = f(i * r, j * r) | |||
# Clamp the edges so we don't get black undefined areas | |||
x = max(0, min(image.size[0]-1, x)) | |||
y = max(0, min(image.size[1]-1, y)) | |||
x = max(0, min(image.size[0] - 1, x)) | |||
y = max(0, min(image.size[1] - 1, y)) | |||
xRow.append(x) | |||
yRow.append(y) | |||
@@ -73,79 +76,81 @@ class _PyCaptcha_WarpBase(object): | |||
# Create the mesh list, with a transformation for | |||
# each square between points on the grid | |||
mesh = [] | |||
for j in xrange(yPoints-1): | |||
for i in xrange(xPoints-1): | |||
for j in range(int(yPoints - 1)): | |||
for i in range(int(xPoints - 1)): | |||
mesh.append(( | |||
# Destination rectangle | |||
(i*r, j*r, | |||
(i+1)*r, (j+1)*r), | |||
(i * r, j * r, | |||
(i + 1) * r, (j + 1) * r), | |||
# Source quadrilateral | |||
(xRows[j ][i ], yRows[j ][i ], | |||
xRows[j+1][i ], yRows[j+1][i ], | |||
xRows[j+1][i+1], yRows[j+1][i+1], | |||
xRows[j ][i+1], yRows[j ][i+1]), | |||
)) | |||
(xRows[j][i], yRows[j][i], | |||
xRows[j + 1][i], yRows[j + 1][i], | |||
xRows[j + 1][i + 1], yRows[j + 1][i + 1], | |||
xRows[j][i + 1], yRows[j][i + 1]), | |||
)) | |||
return image.transform(image.size, Image.MESH, mesh, self.filtering) | |||
class _PyCaptcha_SineWarp(_PyCaptcha_WarpBase): | |||
"""Warp the image using a random composition of sine waves""" | |||
def __init__(self, | |||
amplitudeRange = (1,1),#(2, 6), | |||
periodRange = (1,1)#(0.65, 0.73), | |||
amplitudeRange=(1, 1), # (2, 6), | |||
periodRange=(1, 1) # (0.65, 0.73), | |||
): | |||
self.amplitude = random.uniform(*amplitudeRange) | |||
self.period = random.uniform(*periodRange) | |||
self.offset = (random.uniform(0, math.pi * 2 / self.period), | |||
random.uniform(0, math.pi * 2 / self.period)) | |||
def get_transform(self, image): | |||
return (lambda x, y, | |||
a = self.amplitude, | |||
p = self.period, | |||
o = self.offset: | |||
(math.sin( (y+o[0])*p )*a + x, | |||
math.sin( (x+o[1])*p )*a + y)) | |||
a=self.amplitude, | |||
p=self.period, | |||
o=self.offset: | |||
(math.sin((y + o[0]) * p) * a + x, | |||
math.sin((x + o[1]) * p) * a + y)) | |||
@view_config(route_name='captcha') | |||
def DoCaptcha(request): | |||
ImgSize = (230,100) | |||
WorkImg = Image.new( 'RGBA', ImgSize, (255, 255, 255, 0) ) | |||
Xmax, Ymax = WorkImg.size | |||
img_size = (230, 100) | |||
work_img = Image.new('RGBA', img_size, (255, 255, 255, 0)) | |||
Xmax, Ymax = work_img.size | |||
# Write something on it | |||
draw = ImageDraw.Draw(WorkImg) | |||
draw = ImageDraw.Draw(work_img) | |||
# use a truetype font | |||
#font = ImageFont.truetype("/var/lib/defoma/gs.d/dirs/fonts/LiberationMono-Regular.ttf", 40) | |||
# font = ImageFont.truetype("/var/lib/defoma/gs.d/dirs/fonts/LiberationMono-Regular.ttf", 40) | |||
# use it | |||
font = ImageFont.truetype("jm2l/static/fonts/LiberationMono-Regular.ttf",40) | |||
font = ImageFont.truetype("jm2l/static/fonts/LiberationMono-Regular.ttf", 40) | |||
# Re-position | |||
# Choose a word for captcha | |||
text = random.choice(TabMots) | |||
Xt, Yt = font.getsize(text) | |||
OrX, OrY = (ImgSize[0]-Xt)/2, (ImgSize[1]-Yt)/2 | |||
OrX, OrY = (img_size[0] - Xt) / 2, (img_size[1] - Yt) / 2 | |||
draw.text((OrX, OrY), text, font=font, fill="#000000") | |||
# Apply a Blur | |||
# WorkImg=WorkImg.filter(ImageFilter.BLUR) | |||
# work_img=work_img.filter(ImageFilter.BLUR) | |||
# Apply a DETAIL | |||
WorkImg=WorkImg.filter(ImageFilter.DETAIL) | |||
work_img = work_img.filter(ImageFilter.DETAIL) | |||
# randomize parameters for perspective | |||
ax, ay = (random.uniform(0.9,1.2) , random.uniform(0.9,1.2)) | |||
tx, ty = (random.uniform(0,0.0003),random.uniform(0,0.0003)) | |||
bx, by = (random.uniform(0.5,0.8),random.uniform(0,0.2)) | |||
ax, ay = (random.uniform(0.9, 1.2), random.uniform(0.9, 1.2)) | |||
tx, ty = (random.uniform(0, 0.0003), random.uniform(0, 0.0003)) | |||
bx, by = (random.uniform(0.5, 0.8), random.uniform(0, 0.2)) | |||
# Apply perspective to Captcha | |||
WorkImg= WorkImg.transform(ImgSize, Image.PERSPECTIVE, (ax, bx, -25, by, ay, -10, tx, ty)) | |||
work_img = work_img.transform(img_size, Image.PERSPECTIVE, (ax, bx, -25, by, ay, -10, tx, ty)) | |||
# Apply SinWarp to Captcha | |||
tr = Captcha_Img(Xmax, Ymax) | |||
tr._image = WorkImg | |||
WorkImg = tr.render() | |||
tr._image = work_img | |||
work_img = tr.render() | |||
# Apply a Smooth on it | |||
WorkImg=WorkImg.filter(random.choice([ImageFilter.SMOOTH, ImageFilter.SMOOTH_MORE])) | |||
work_img = work_img.filter(random.choice([ImageFilter.SMOOTH, ImageFilter.SMOOTH_MORE])) | |||
# Save Result | |||
request.session['Captcha'] = text | |||
#session.save() | |||
ImgHandle = StringIO.StringIO() | |||
WorkImg.save(ImgHandle,'png') | |||
# session.save() | |||
ImgHandle = io.BytesIO() | |||
work_img.save(ImgHandle, 'png') | |||
ImgHandle.seek(0) | |||
return Response(app_iter=ImgHandle, content_type = 'image/png') | |||
return Response(app_iter=ImgHandle, content_type='image/png') |
@@ -1 +1 @@ | |||
CurrentYear = 2018 | |||
CurrentYear = 2020 |
@@ -4,101 +4,108 @@ from datetime import timedelta, datetime | |||
import itertools | |||
from jm2l.const import CurrentYear | |||
def get_current_year(): | |||
""" This function is intended to return the year of the next edition """ | |||
return CurrentYear | |||
class DummySejour(object): | |||
def __init__(self, event): | |||
self.Me = event['request'].user | |||
self.CurrentEventYear = DBSession.query(JM2L_Year).filter(JM2L_Year.state=='Ongoing').first() | |||
self.CurrentEventYear = DBSession.query(JM2L_Year).filter(JM2L_Year.state == 'Ongoing').first() | |||
self.Sejour = None | |||
if self.Me: | |||
self.Sejour = DBSession.query(Sejour)\ | |||
.filter(Sejour.user_id==self.Me.uid)\ | |||
.filter(Sejour.for_year==self.CurrentEventYear.year_uid)\ | |||
self.Sejour = DBSession.query(Sejour) \ | |||
.filter(Sejour.user_id == self.Me.uid) \ | |||
.filter(Sejour.for_year == self.CurrentEventYear.year_uid) \ | |||
.first() | |||
class Sejour_helpers(DummySejour): | |||
def __init__(self, event): | |||
super(Sejour_helpers, self).__init__(event) | |||
if self.Sejour and self.Sejour.arrival_time is None: | |||
self.Sejour = None | |||
def StartEvent(self): | |||
# This function return the start of the event | |||
return self.CurrentYear | |||
def PossibleDate(self, typedate="arrival"): | |||
def PossibleDate(self, type_date="arrival"): | |||
arrival, departure = False, False | |||
TabResult = list() | |||
if typedate == "arrival": | |||
tab_result = list() | |||
if type_date == "arrival": | |||
# Let's say people should arrive until 2 day before | |||
arrival = True | |||
myDayRange = xrange(2,-1,-1) | |||
elif typedate == "departure": | |||
my_day_range = range(2, -1, -1) | |||
elif type_date == "departure": | |||
# Let's say people should go back home until 2 day after | |||
departure = True | |||
myDayRange = xrange(3) | |||
departure = True | |||
my_day_range = range(3) | |||
else: | |||
return TabResult | |||
return tab_result | |||
if self.Sejour: | |||
ArrDate = datetime.strftime(self.Sejour.arrival_time,"%d %B %Y").decode('utf-8') | |||
DepDate = datetime.strftime(self.Sejour.depart_time,"%d %B %Y").decode('utf-8') | |||
arr_date = datetime.strftime(self.Sejour.arrival_time, "%d %B %Y") | |||
dep_date = datetime.strftime(self.Sejour.depart_time, "%d %B %Y") | |||
else: | |||
ArrDate = datetime.strftime( self.CurrentEventYear.start_time,"%d %B %Y" ).decode('utf-8') | |||
DepDate = datetime.strftime( self.CurrentEventYear.end_time,"%d %B %Y" ).decode('utf-8') | |||
for oneday in myDayRange: | |||
arr_date = datetime.strftime(self.CurrentEventYear.start_time, "%d %B %Y") | |||
dep_date = datetime.strftime(self.CurrentEventYear.end_time, "%d %B %Y") | |||
for one_day in my_day_range: | |||
if arrival: | |||
TmpDay = self.CurrentEventYear.end_time - timedelta(days=oneday) | |||
tmp_day = self.CurrentEventYear.end_time - timedelta(days=one_day) | |||
elif departure: | |||
TmpDay = self.CurrentEventYear.start_time + timedelta(days=oneday) | |||
DayName = datetime.strftime(TmpDay,"%A") | |||
DayNum = datetime.strftime(TmpDay,"%d/%m/%y") | |||
DayString = datetime.strftime(TmpDay,"%d %B %Y").decode('utf-8') | |||
if arrival and ArrDate==DayString: | |||
TabResult.append((DayNum, DayName, 'selected="selected"')) | |||
elif departure and DepDate==DayString: | |||
TabResult.append((DayNum, DayName, 'selected="selected"')) | |||
tmp_day = self.CurrentEventYear.start_time + timedelta(days=one_day) | |||
day_name = datetime.strftime(tmp_day, "%A") | |||
day_num = datetime.strftime(tmp_day, "%d/%m/%y") | |||
day_string = datetime.strftime(tmp_day, "%d %B %Y") | |||
if arrival and arr_date == day_string: | |||
tab_result.append((day_num, day_name, 'selected="selected"')) | |||
elif departure and dep_date == day_string: | |||
tab_result.append((day_num, day_name, 'selected="selected"')) | |||
else: | |||
TabResult.append((DayNum, DayName, "")) | |||
return TabResult | |||
tab_result.append((day_num, day_name, "")) | |||
return tab_result | |||
def PossibleTime(self, type_date="arrival"): | |||
arr_time, dep_time = "10:00", "19:00" | |||
tab_result = list() | |||
def PossibleTime(self, typedate="arrival"): | |||
ArrTime, DepTime = "10:00", "19:00" | |||
TabResult = list() | |||
if self.Sejour: | |||
ArrTime = datetime.strftime(self.Sejour.arrival_time,"%H:%M") | |||
DepTime = datetime.strftime(self.Sejour.depart_time,"%H:%M") | |||
arr_time = datetime.strftime(self.Sejour.arrival_time, "%H:%M") | |||
dep_time = datetime.strftime(self.Sejour.depart_time, "%H:%M") | |||
for hour in range(24): | |||
for minutes in range(0,60,10): | |||
StrTime = "%.2d:%.2d" % (hour, minutes) | |||
DispTime = "%dh%.2d" % (hour, minutes) | |||
if typedate == "arrival" and StrTime==ArrTime: | |||
TabResult.append( (StrTime, DispTime, 'selected="selected"') ) | |||
elif typedate == "departure" and StrTime==DepTime: | |||
TabResult.append( (StrTime, DispTime, 'selected="selected"') ) | |||
for minutes in range(0, 60, 10): | |||
str_time = "%.2d:%.2d" % (hour, minutes) | |||
disp_time = "%dh%.2d" % (hour, minutes) | |||
if type_date == "arrival" and str_time == arr_time: | |||
tab_result.append((str_time, disp_time, 'selected="selected"')) | |||
elif type_date == "departure" and str_time == dep_time: | |||
tab_result.append((str_time, disp_time, 'selected="selected"')) | |||
else: | |||
TabResult.append( (StrTime, DispTime, "") ) | |||
return TabResult | |||
tab_result.append((str_time, disp_time, "")) | |||
return tab_result | |||
def IsCheck(self, InputControl): | |||
ListControlA = ['Arrival', 'Departure'] | |||
ListControlB = ['PMR', 'Cov', 'Bras', 'Other'] | |||
if InputControl not in map(':'.join, itertools.product(ListControlA, ListControlB)): | |||
list_control_a = ['Arrival', 'Departure'] | |||
list_control_b = ['PMR', 'Cov', 'Bras', 'Other'] | |||
if InputControl not in map(':'.join, itertools.product(list_control_a, list_control_b)): | |||
return "" | |||
if self.Sejour: | |||
if InputControl.startswith('Arrival'): | |||
CtrlVal = 2**ListControlB.index(InputControl[8:]) | |||
if self.Sejour.arrival_check & CtrlVal == CtrlVal: | |||
ctrl_val = 2 ** list_control_b.index(InputControl[8:]) | |||
if self.Sejour.arrival_check & ctrl_val == ctrl_val: | |||
return "checked=\"checked\"" | |||
else: | |||
return "" | |||
elif InputControl.startswith('Departure'): | |||
CtrlVal = 2**ListControlB.index(InputControl[10:]) | |||
if self.Sejour.depart_check & CtrlVal == CtrlVal: | |||
ctrl_val = 2 ** list_control_b.index(InputControl[10:]) | |||
if self.Sejour.depart_check & ctrl_val == ctrl_val: | |||
return "checked=\"checked\"" | |||
else: | |||
return "" | |||
@@ -107,6 +114,7 @@ class Sejour_helpers(DummySejour): | |||
else: | |||
return "" | |||
class Orga_helpers(DummySejour): | |||
def __init__(self, event): | |||
@@ -129,10 +137,10 @@ class Orga_helpers(DummySejour): | |||
u"Faire du café et s'assurer de sa disponibilité.", | |||
u"Participer à la publication / au montage des vidéos des conférenciers.", | |||
u"Autres" | |||
] | |||
] | |||
def IsChecked(self, nb): | |||
nb = 2**nb | |||
nb = 2 ** nb | |||
if self.Sejour and self.Sejour.orga_part: | |||
if self.Sejour.orga_part & nb == nb: | |||
return "checked=\"checked\"" | |||
@@ -140,12 +148,12 @@ class Orga_helpers(DummySejour): | |||
return "" | |||
else: | |||
return "" | |||
def ChoosedList(self): | |||
""" Return choice validated by user """ | |||
ListOrga = [] | |||
for num in range(0,len(self.Orga_tasks)): | |||
curs = 2**num | |||
list_orga = [] | |||
for num in range(0, len(self.Orga_tasks)): | |||
curs = 2 ** num | |||
if self.Sejour.orga_part & curs == curs: | |||
ListOrga.append(self.Orga_tasks[num]) | |||
return ListOrga | |||
list_orga.append(self.Orga_tasks[num]) | |||
return list_orga |
@@ -48,14 +48,14 @@ def pull_data(from_db, to_db, tables): | |||
destination, dengine = make_session(to_db) | |||
for table_name in tables: | |||
print 'Processing', table_name | |||
print 'Pulling schema from source server' | |||
print('Processing', table_name) | |||
print('Pulling schema from source server') | |||
table = Table(table_name, smeta, autoload=True) | |||
print 'Creating table on destination server' | |||
print('Creating table on destination server') | |||
table.metadata.create_all(dengine) | |||
NewRecord = quick_mapper(table) | |||
columns = table.columns.keys() | |||
print 'Transferring records' | |||
print('Transferring records') | |||
for record in source.query(table).all(): | |||
data = dict( | |||
[(str(column), getattr(record, column)) for column in columns] | |||
@@ -69,20 +69,20 @@ def pull_data(from_db, to_db, tables): | |||
try: | |||
destination.merge(NewRecord(**data)) | |||
except: | |||
print data | |||
print(data) | |||
pass | |||
print 'Committing changes' | |||
print('Committing changes') | |||
destination.commit() | |||
def main(argv=sys.argv): | |||
connection_string = "sqlite:////home/tr4ck3ur/Dev/jm2l/JM2L.sqlite" | |||
connection_string = "sqlite:////home/tr4ck3ur/git_repository/jm2l/JM2L.sqlite" | |||
engine = create_engine(connection_string, echo=False, convert_unicode=True) | |||
DBSession.configure(bind=engine) | |||
Users = DBSession.query(User) | |||
ListUser = filter(lambda x: x.is_Intervenant, Users) | |||
for i in ListUser: | |||
print i.mail | |||
print(i.mail) | |||
def main4(argv=sys.argv): | |||
import csv | |||
@@ -116,7 +116,7 @@ def main4(argv=sys.argv): | |||
u.wifi_user = w_user | |||
u.wifi_pass = w_pass | |||
DBSession.merge(u) | |||
print row, u | |||
print(row, u) | |||
finally: | |||
f.close() | |||
@@ -130,7 +130,7 @@ def main_3(argv=sys.argv): | |||
connection_string = "sqlite:////home/tr4ck3ur/Dev/jm2l/JM2L.sqlite" | |||
engine = create_engine(connection_string, echo=True, convert_unicode=True) | |||
DBSession.configure(bind=engine) | |||
p0, p1 = orm.aliased(User,name="p0"), orm.aliased(User ,name="p1") | |||
p0, p1 = orm.aliased(User, name="p0"), orm.aliased(User , name="p1") | |||
import pprint | |||
## permtation | |||
@@ -141,7 +141,7 @@ def main_3(argv=sys.argv): | |||
.filter(p0.last_logged<p1.last_logged)\ | |||
.with_entities(p0.slug,p0.uid,p1.uid).all() | |||
for slug, idsrc, iddst in Datas: | |||
print slug | |||
print(slug) | |||
# Events | |||
Events = DBSession.query(User_Event)\ | |||
.filter(User_Event.user_uid==idsrc) | |||
@@ -238,5 +238,4 @@ def Initialize(): | |||
u.password = password | |||
u.Staff = 0 | |||
DBSession.merge(u) | |||
print u.nom, u.prenom, u.Staff | |||
print(u.nom, u.prenom, u.Staff) |
@@ -15,6 +15,7 @@ def check_logged(request): | |||
# Don't answer to users that aren't logged | |||
raise HTTPForbidden(u'Vous devez vous identifier pour obtenir une réponse.') | |||
def check_staff(request): | |||
""" This function is intended to raise an exception if the user is not a Staff member""" | |||
check_logged(request) | |||
@@ -0,0 +1,10 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1224px" height="792px" viewBox="0 0 1224 792" enable-background="new 0 0 1224 792" xml:space="preserve"> | |||
<g> | |||
<path d="M833.556,367.574c-7.753-7.955-18.586-12.155-29.656-11.549l-133.981,7.458l73.733-83.975 c10.504-11.962,13.505-27.908,9.444-42.157c-2.143-9.764-8.056-18.648-17.14-24.324c-0.279-0.199-176.247-102.423-176.247-102.423 c-14.369-8.347-32.475-6.508-44.875,4.552l-85.958,76.676c-15.837,14.126-17.224,38.416-3.097,54.254 c14.128,15.836,38.419,17.227,54.255,3.096l65.168-58.131l53.874,31.285l-95.096,108.305 c-39.433,6.431-74.913,24.602-102.765,50.801l49.66,49.66c22.449-20.412,52.256-32.871,84.918-32.871 c69.667,0,126.346,56.68,126.346,126.348c0,32.662-12.459,62.467-32.869,84.916l49.657,49.66 c33.08-35.166,53.382-82.484,53.382-134.576c0-31.035-7.205-60.384-20.016-86.482l51.861-2.889l-12.616,154.75 c-1.725,21.152,14.027,39.695,35.18,41.422c1.059,0.086,2.116,0.127,3.163,0.127c19.806,0,36.621-15.219,38.257-35.306 l16.193-198.685C845.235,386.445,841.305,375.527,833.556,367.574z"/> | |||
<path d="M762.384,202.965c35.523,0,64.317-28.797,64.317-64.322c0-35.523-28.794-64.323-64.317-64.323 c-35.527,0-64.323,28.8-64.323,64.323C698.061,174.168,726.856,202.965,762.384,202.965z"/> | |||
<path d="M535.794,650.926c-69.668,0-126.348-56.68-126.348-126.348c0-26.256,8.056-50.66,21.817-70.887l-50.196-50.195 c-26.155,33.377-41.791,75.393-41.791,121.082c0,108.535,87.983,196.517,196.518,196.517c45.691,0,87.703-15.636,121.079-41.792 l-50.195-50.193C586.452,642.867,562.048,650.926,535.794,650.926z"/> | |||
</g> | |||
</svg> |
@@ -0,0 +1,58 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" viewBox="0 0 325.9702 172.35009" id="Layer_1" xml:space="preserve" inkscape:version="0.48.5 r10040" sodipodi:docname="Gamepad White.svg"> | |||
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1088" inkscape:window-height="1061" id="namedview30" showgrid="false" inkscape:zoom="1" inkscape:cx="92.633449" inkscape:cy="40.468773" inkscape:window-x="1920" inkscape:window-y="139" inkscape:window-maximized="0" inkscape:current-layer="Layer_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0"/> | |||
<defs id="defs3059"/> | |||
<metadata id="metadata3055"> | |||
<rdf:RDF> | |||
<cc:Work> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> | |||
<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> | |||
<dc:publisher> | |||
<cc:Agent rdf:about="http://openclipart.org/"> | |||
<dc:title>Openclipart</dc:title> | |||
</cc:Agent> | |||
</dc:publisher> | |||
<dc:title/> | |||
</cc:Work> | |||
<cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> | |||
<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> | |||
<path style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#1d1d1d;stroke-width:3.00000024;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path5307" d="m 52.919904,8.1875 c -6.031842,0 -11.470893,2.407417 -15.4375,6.3125 -0.04088,0.04024 -0.08444,0.08444 -0.125,0.125 -4.29211,3.308693 -7.596781,7.816291 -9.15625,13.4375 l -25.0312496,90.25 c -4.73921,17.08279 0.48564,36.23227 17.3124996,41.8125 l 26.65625,8.8125 c 16.82685,5.58022 34.179421,-1.29707 41.78125,-17.3125 l 21.031246,-44.28125 106.0625,0 21.03125,44.28125 c 7.60183,16.01543 24.9544,22.89272 41.78125,17.3125 l 26.65625,-8.8125 c 16.82686,-5.58023 22.05171,-24.72971 17.3125,-41.8125 l -25.03125,-90.25 c -2.7742,-9.999793 -11.01427,-16.522009 -20.65625,-18.875 -0.13603,-0.042133 -0.26909,-0.085439 -0.40625,-0.125 -0.01,-0.00229 -0.0213,0.00228 -0.0312,0 -1.94068,-0.5568486 -4.00056,-0.875 -6.125,-0.875 l -1.8125,0 -211.499996,0 -4.3125,0 z" inkscape:connector-curvature="0"/> | |||
<rect width="62.578949" height="31.466251" rx="8" ry="8" x="41.378765" y="0.73722839" id="rect4249" style="fill:#5e5e5e;fill-opacity:1;fill-rule:nonzero;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"/> | |||
<rect width="62.578949" height="31.466251" rx="8" ry="8" x="219.53084" y="0.73722839" id="rect4267" style="fill:#5e5e5e;fill-opacity:1;fill-rule:nonzero;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"/> | |||
<path d="m 52.919904,8.1875 c -6.031842,0 -11.470893,2.407417 -15.4375,6.3125 -0.04088,0.04024 -0.08444,0.08444 -0.125,0.125 -4.29211,3.308693 -7.596781,7.816291 -9.15625,13.4375 l -25.0312496,90.25 c -4.73921,17.08279 0.48564,36.23227 17.3124996,41.8125 l 26.65625,8.8125 c 16.82685,5.58022 34.179421,-1.29707 41.78125,-17.3125 l 21.031246,-44.28125 106.0625,0 21.03125,44.28125 c 7.60183,16.01543 24.9544,22.89272 41.78125,17.3125 l 26.65625,-8.8125 c 16.82686,-5.58023 22.05171,-24.72971 17.3125,-41.8125 l -25.03125,-90.25 c -2.7742,-9.999793 -11.01427,-16.522009 -20.65625,-18.875 -0.13603,-0.042133 -0.26909,-0.085439 -0.40625,-0.125 -0.01,-0.00229 -0.0213,0.00228 -0.0312,0 -1.94068,-0.5568486 -4.00056,-0.875 -6.125,-0.875 l -1.8125,0 -211.499996,0 -4.3125,0 z" id="rect4151" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" inkscape:connector-curvature="0"/> | |||
<g id="g4358" style="fill:#bdbdbd;fill-opacity:1" transform="translate(1.5007304,0)"> | |||
<path d="m 238.20531,32.84774 c -2.18572,0 -3.97143,1.78571 -3.97143,3.97143 v 20.94285 h -20.98571 c -2.18572,0 -3.92858,1.78572 -3.92858,3.97143 v 22.27143 c 0,2.2 1.74286,3.98571 3.92858,3.98571 h 20.98571 v 20.92858 c 0,2.2 1.78571,3.97142 3.97143,3.97142 h 22.28571 c 2.18572,0 3.92857,-1.77142 3.92857,-3.97142 V 87.99059 h 20.97143 c 2.2,0 3.92857,-1.78571 3.92857,-3.98571 V 61.73345 c 0,-2.18571 -1.72857,-3.97143 -3.92857,-3.97143 H 264.41959 V 36.81917 c 0,-2.18572 -1.74285,-3.97143 -3.92857,-3.97143 h -22.28571 z" id="path3219" style="fill:#bdbdbd;fill-opacity:1;fill-rule:evenodd" inkscape:connector-curvature="0"/> | |||
</g> | |||
<g id="g4361" style="fill:#bdbdbd;fill-opacity:1" transform="translate(1.5007304,0)"> | |||
<path d="m 60.053224,32.84773 c -2.185714,0 -3.971428,1.78571 -3.971428,3.97143 V 57.76202 H 35.110367 c -2.2,0 -3.942857,1.77142 -3.942857,3.97142 v 22.27143 c 0,2.2 1.742857,3.97143 3.942857,3.97143 h 20.971429 v 20.94286 c 0,2.2 1.785714,3.97143 3.971428,3.97143 h 22.285714 c 2.185714,0 3.928568,-1.77143 3.928568,-3.97143 V 87.9763 h 20.985714 c 2.18572,0 3.91429,-1.77143 3.91429,-3.97143 V 61.73344 c 0,-2.2 -1.72857,-3.97142 -3.91429,-3.97142 H 86.267506 V 36.81916 c 0,-2.18572 -1.742854,-3.97143 -3.928568,-3.97143 H 60.053224 z" id="rect3214" style="fill:#bdbdbd;fill-opacity:1;fill-rule:evenodd" inkscape:connector-curvature="0"/> | |||
</g> | |||
<g transform="matrix(1.4285714,0,0,1.4285714,-369.64604,-683.22368)" id="g3289" style="fill:#3f3f3f"/> | |||
<g id="g5309" style="fill:#e9e9e9;fill-opacity:1" transform="translate(1.5007304,0)"> | |||
<path inkscape:connector-curvature="0" style="fill:#e9e9e9;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3273" d="m 71.235854,36.203603 -6.448691,5.915291 12.897383,0 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#e9e9e9;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3295" d="m 71.107253,109.53472 -6.448691,-5.91529 12.897382,0 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#e9e9e9;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3303" d="m 107.88086,72.933449 -5.96234,-6.500001 0,13.000001 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#e9e9e9;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3305" d="m 34.45415,72.806518 5.962355,-6.500001 0,13.000001 z"/> | |||
</g> | |||
<path inkscape:connector-curvature="0" d="m 135.05424,57.754875 c -2.18571,0 -3.92857,1.78572 -3.92857,3.97143 l 0,22.27143 c 0,2.2 1.74286,3.98571 3.92857,3.98571 l 56.14286,0 c 2.2,0 3.92857,-1.78571 3.92857,-3.98571 l 0,-22.27143 c 0,-2.18571 -1.72857,-3.97143 -3.92857,-3.97143 z" id="path4221" style="fill:#bdbdbd;fill-opacity:1;fill-rule:evenodd"/> | |||
<rect style="fill:#ff4872;fill-opacity:1;fill-rule:nonzero;stroke:none" id="rect3804" width="13.258252" height="4.9497476" x="141.42738" y="45.693382" rx="2" ry="2"/> | |||
<rect ry="2" rx="2" y="45.693382" x="171.56569" height="4.9497476" width="13.258252" id="rect3806" style="fill:#84f446;fill-opacity:1;fill-rule:nonzero;stroke:none"/> | |||
<g id="g3810" style="fill:#bdbdbd;fill-opacity:1" transform="translate(1.5007304,0)"> | |||
<path inkscape:connector-curvature="0" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3244" d="m 261.0903,49.663078 a 11.76471,11.76471 0 0 1 -23.52942,0 11.76471,11.76471 0 1 1 23.52942,0 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3246" d="m 261.0903,96.270368 a 11.76471,11.76471 0 0 1 -23.52942,0 11.76471,11.76471 0 1 1 23.52942,0 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3248" d="m 260.8644,73.000822 a 11.76471,11.76471 0 1 1 23.52942,0 11.76471,11.76471 0 0 1 -23.52942,0 z"/> | |||
<path inkscape:connector-curvature="0" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3250" d="m 214.2644,73.000822 a 11.76471,11.76471 0 1 1 23.52942,0 11.76471,11.76471 0 0 1 -23.52942,0 z"/> | |||
<path d="m 84.480854,64.854219 a 1.6842051,1.6842056 0 0 0 -1.205367,0.669649 l -5.000042,6.339341 a 1.6842051,1.6842056 0 0 0 0,2.053589 l 5.000042,6.383984 a 1.6842051,1.6842056 0 0 0 1.339297,0.669649 l 11.607241,0.04457 a 1.6842051,1.6842056 0 0 0 1.696443,-1.696372 l 0,-12.544752 a 1.6842051,1.6842056 0 0 0 -1.6518,-1.696444 L 84.659427,64.854219 a 1.6842051,1.6842056 0 0 0 -0.178573,0 z" id="path3322" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
<path d="m 57.854166,64.727289 a 1.6842051,1.6842056 0 0 1 1.205367,0.669649 l 5.000042,6.339341 a 1.6842051,1.6842056 0 0 1 0,2.053589 l -5.000042,6.383984 a 1.6842051,1.6842056 0 0 1 -1.339297,0.669649 l -11.607241,0.04457 a 1.6842051,1.6842056 0 0 1 -1.696443,-1.696372 l 0,-12.544752 a 1.6842051,1.6842056 0 0 1 1.6518,-1.696444 l 11.607241,-0.223216 a 1.6842051,1.6842056 0 0 1 0.178573,0 z" id="path3324" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
<path d="m 79.18648,86.181762 a 1.6842051,1.6842056 0 0 0 -0.669648,-1.205368 l -6.339339,-5.000043 a 1.6842051,1.6842056 0 0 0 -2.053589,0 l -6.383983,5.000043 a 1.6842051,1.6842056 0 0 0 -0.669648,1.339298 l -0.04457,11.607244 a 1.6842051,1.6842056 0 0 0 1.696371,1.696443 l 12.544749,0 a 1.6842051,1.6842056 0 0 0 1.696443,-1.6518 L 79.18648,86.360335 a 1.6842051,1.6842056 0 0 0 0,-0.178573 z" id="path3332" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
<path d="m 79.31508,59.556558 a 1.6842051,1.6842056 0 0 1 -0.669648,1.205368 l -6.339339,5.000043 a 1.6842051,1.6842056 0 0 1 -2.053589,0 l -6.383983,-5.000043 a 1.6842051,1.6842056 0 0 1 -0.669648,-1.339298 l -0.04457,-11.607244 a 1.6842051,1.6842056 0 0 1 1.696371,-1.696443 l 12.544749,0 a 1.6842051,1.6842056 0 0 1 1.696443,1.6518 l 0.223216,11.607244 a 1.6842051,1.6842056 0 0 1 0,0.178573 z" id="path3334" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
<path d="m 181.49066,64.984512 c 0.46409,0.03977 0.90674,0.285619 1.18563,0.658684 l 4.91818,6.235545 c 0.44145,0.573965 0.44145,1.446 0,2.019966 l -4.91818,6.279457 c -0.30647,0.406087 -0.80862,0.657167 -1.31737,0.658684 l -14.22758,0.04384 c -0.87542,0.007 -1.67502,-0.793175 -1.66867,-1.668596 l 0,-12.339354 c -0.007,-0.860892 0.764,-1.652128 1.62476,-1.668667 l 14.22758,-0.219561 c 0.0584,-0.0028 0.11719,-0.0028 0.17565,0 z" id="path4289" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
<path d="m 141.75921,64.859662 c -0.46409,0.03977 -0.90674,0.285619 -1.18563,0.658684 l -4.91818,6.235545 c -0.44145,0.573965 -0.44145,1.446 0,2.019966 l 4.91818,6.279457 c 0.30647,0.406087 0.80862,0.657167 1.31737,0.658684 l 14.22758,0.04384 c 0.87542,0.007 1.67502,-0.793175 1.66867,-1.668596 l 0,-12.339354 c 0.007,-0.860892 -0.764,-1.652128 -1.62476,-1.668667 L 141.93486,64.85966 c -0.0584,-0.0028 -0.11719,-0.0028 -0.17565,0 z" id="path4291" style="fill:#5e5e5e;fill-opacity:1;fill-rule:evenodd;stroke:#1d1d1d;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0"/> | |||
</g> | |||
</svg> |
@@ -0,0 +1,812 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="0 0 1920 1920" enable-background="new 0 0 1920 1920" xml:space="preserve"> | |||
<g id="_x23_000000ff"> | |||
<path stroke="#000000" stroke-width="0.0938" d="M1698.9879,12.1671c11.09-4.64,23.5599-2.62,34.89,0.1 | |||
c2.8099,0.87,6.13,1.12,8.23,3.46c2.5599,2.35,5.1699,4.8,6.5499,8.08c7.77,1.18,14.1901-4.6,21.8101-4.77 | |||
c2.6699,3.37,5.6699,6.73,6.41,11.13c-6.91,4.62-15.67,2.78-23.1101,5.82c8.64,3.21,17.4601-2.02,26.2401-0.31 | |||
c3.6599,0.72,6.74,3.01,9.5099,5.42c-1.5599,3.97-5.23,6.38-7.99,9.43c3.2301,2.22,7.49,3.18,9.5801,6.79 | |||
c-4.0901,5.09-5.85,12.08-2.87,18.17c-2.6801,1.13-5.49,2.22-7.38,4.54c2.51,1.14,6.4199,0.64,7.5599,3.76 | |||
c-1.33,4.12-3.95,7.63-6.0599,11.35c2.1699,2.21,4.6699,4.16,6.3199,6.85c-2.15,2.3-4.4399,4.45-6.49,6.82 | |||
c2.05,2.84,4.6901,5.22,6.61,8.18c-3.3099,4.91-9.52,5.26-14.78,6.17c5.26,1.72,11.03,2.63,15.2301,6.59 | |||
c-1.65,1.88-3.6101,3.75-4.03,6.32c-0.71,4.02,0.6799,7.95,1.5499,11.82c-3.5,3.77-8.6899,4.24-13.47,4.86 | |||
c5.39,3.12,13.1,2.91,16.26,9.13c-2.29,5.87-9.15,5.45-14.2,6.85c3.58,3.71,9.76,2.69,13.08,6.96 | |||
c-4.5699,5.95-1.62,13.45,1.6901,19.18c-6.01,3.7-13.3201,1.68-19.7201,3.97c3.2101,1.97,6.9701,2.01,10.61,2.37 | |||
c3.2101,0.22,5.4601,2.78,7.5901,4.91c-1.03,4.6-5.5,6.63-9.36,8.38c3.5699,0.72,9.49,0.56,10.0299,5.34 | |||
c0.5601,4.8-4.25,6.99-7.08,9.84c0.91,2.93,4.89,2.52,7.21,3.93c-0.3199,3.94-1.74,8.04-5.5399,9.88c2.24,2.15,3.96,4.74,5.51,7.42 | |||
c-2.39,2.78-5.1001,5.58-8.77,6.5c-4.9301,1.15-9.98-0.27-14.9501,0.26c-0.76,2.49-0.23,5.75-2.46,7.52 | |||
c-3.62,2.55-7.8199-0.6-11.74-0.41c-1.87,4.96,0.09,10.05-0.1,15.1c-0.17,4.59-4.61,6.92-6.87,10.41 | |||
c-4.39,7.04-6.5901,15.39-6.4,23.68c0.13,10.52,3.46,20.61,6.1,30.69c6.35,22.84,6.75,46.77,6.5,70.31 | |||
c-0.26,13.33-0.62,26.66-0.9,39.99c0.3,26.01-1.6799,51.98-1.6699,77.99c-0.8101,14.33-2.7001,28.59-3.05,42.95 | |||
c-0.71,7.77-0.61,16.29-5.22,22.96c-5.51,6.68-14.51,9.12-22.8,9.89c-7.97,0.62-17.11,0.09-23.1-5.91 | |||
c-7.45-6.77-9.47-17.32-9.74-26.95c0.0599-23.96-0.27-47.93,0.03-71.9c0.11-32.35-1.11-64.71,0.0499-97.05 | |||
c0.53-13.11-1.47-26.76,3.25-39.33c2.6-7.33,2.3-15.26,4.25-22.74c2.9301-11.82,7.0701-23.61,6.74-35.94 | |||
c-0.1-6.29-2.01-12.6-5.88-17.6c-3.59-4.77-8.38-9.26-9.09-15.51c-1.12-5.29,3.84-9.72,2.59-15.01c-0.7-1.49-2.73-1.41-4.0499-1.86 | |||
c-9.73-2.14-19.3,2.05-29.01,1.82c-5.35-3.81-8.5601-10.96-6.48-17.42c0.99-3.26,3.75-5.44,6.25-7.56 | |||
c-1.49-1.94-3.62-3.19-5.35-4.87c-0.0601-4.35,0.2999-9.12,3.7899-12.21c-2.23-2.04-4.39-4.19-5.96-6.79 | |||
c1.95-3.35,4.64-6.38,8.52-7.44c-2.2201-2.77-5.23-5.72-4.8201-9.57c0.55-2.54,2.92-3.99,4.77-5.57 | |||
c-3.0599-1.83-6.13-3.96-7.5499-7.38c1.9099-2.34,4.4099-4.54,7.6699-4.32c3.28,0.16,6.6-0.68,8.76-3.34 | |||
c-3.74-3.53-9.63-0.44-13.1799-4.08c-2.4901-1.72-0.79-5.16,0.9099-6.83c4.04-3.14,9.55-2.49,14.1901-4.22 | |||
c-3.61-3.82-9.6-1.33-13.55-4.45c-0.74-0.55-1.4399-1.12-2.11-1.71c0.4-3.03,1.26-6.01,1.41-9.07c0.11-2.67-1.85-4.71-2.9401-6.96 | |||
c3.3101-5.7,10.66-5.09,16.14-7.04c-4.6-3.01-10.7999-1.17-15.09-4.72c-2.26-1.41-0.8-4.68,0.5-6.33 | |||
c3.47-3.14,8.5599-2.77,12.85-3.97c-4.3-3.29-11.65-3.1-13.42-9.13c-1.1399-4.44,4.8401-4.77,7.38-6.8 | |||
c-2.14-1.53-4.83-2.34-6.5399-4.4c-0.04-2.34,0.5699-4.63,0.7899-6.95c2.54-3.28,6.74-3.39,10.55-3.36 | |||
c-3.13-1.95-6.96-1.46-10.27-2.79c-2.1899-0.99-4.11-4.27-1.86-6.18c3.83-3.83,9.99-2.35,14.42-5.14 | |||
c-2.42-4.18-7.36-2.16-11.1801-2.95c-2.3099-0.63-5.21-2.86-4.0599-5.55c1.1599-2.27,3.2799-3.84,4.88-5.79 | |||
c-2.14-2.26-4.28-4.79-4.7201-7.99c-0.9399-6.66,1.63-13.08,2.9601-19.5c11.0499-4.77,24.2699-6.08,35.1399-0.09 | |||
C1687.6678,21.3471,1692.2079,14.9471,1698.9879,12.1671 M1704.4579,569.4371c-1.51,2.24-1.54,5.02-1.83,7.61 | |||
c2.3099,2.69,4.8199,5.61,8.3999,6.56c7.17,2.37,15.39-5.47,13.4701-12.69 | |||
C1721.3079,563.2671,1708.7778,562.3671,1704.4579,569.4371z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M40.8578,32.8271c15.2-3.81,31.07-2.27,46.51-1.16c4.55,0.3,9.84,0.93,12.49,5.18 | |||
c-1.83,1.17-3.8,2.26-6.02,2.43c-8.95,0.81-17.96,0.57-26.95,0.83c-5.31,0.2-10.84,0.45-15.65,2.98 | |||
c10.24,1.14,20.5-0.66,30.73-1.06c1.45-0.16,2.27,1.24,3.29,1.98c-8.04,1.29-16.17,2.36-24.33,2.04c-3.28-0.27-6.43,0.78-9.27,2.34 | |||
c11.78-0.02,23.54-1.14,35.32-1.44c4.65,0.02,9.87-1.86,13.94,1.27c-16.05,2.83-32.57,1.17-48.62,4.11 | |||
c6.13,1.26,12.43,1.13,18.64,0.73c5.16-0.44,11.01-2.48,15.57,1c-11.31,2.36-23.1,0.43-34.33,3.33 | |||
c16.18,2.38,32.48-2.02,48.68-0.04c-1.52,0.8-2.99,2.02-4.8,1.97c-10.72-0.34-21.33,1.67-32.03,1.88 | |||
c-3.69-0.12-7.62-0.54-10.9,1.53c10.62,0.07,21.28-0.28,31.87-0.98c0.22,0.52,0.66,1.55,0.88,2.06 | |||
c-10.63,2.75-21.85,0.67-32.47,3.52c16,1.88,32.07-1.85,48.06-0.15c-1.68,1.05-3.46,2.32-5.56,2.1 | |||
c-9.67-0.44-19.28,1.19-28.94,1.44c-4.71,0.33-9.83-0.88-14.08,1.78c10.38,0.84,20.8-1.11,31.18-0.13c1,0.19,1.93,0.57,2.8,1.11 | |||
c-4.74,1.94-10.01,1.12-14.98,1.9c-6.15,0.91-13.55-2.22-18.61,2.62c16.26-0.49,32.51-1.5,48.78-1.14 | |||
c-3.62,3.88-9.09,1.74-13.69,2.22c-11.3,0.69-22.73,0.54-33.9,2.66c10.98,1.57,22.1-1.14,33.03,0.83 | |||
c-6.25,3.43-13.66,2.83-20.54,2.88c-4.11-0.12-8.49-0.62-12.23,1.5c15.66,0.9,31.33-0.55,46.99-0.38 | |||
c-3.28,3.69-8.46,1.67-12.72,2.09c-9.01,0.57-18.05,0.66-27.06,1.24c-2.62,0.04-5.04,1.07-7.27,2.37 | |||
c10.84,0.56,21.75-1.77,32.55,0.1c-9.98,5.44-21.83,0.52-32.2,4.05c11.61,0.77,23.31,0.13,34.96,0.38 | |||
c4.24,0.42,9.54-2.85,12.7,1.34c-15.79,1.99-31.93-0.22-47.57,3.18c10.84,1.43,21.8-1.26,32.6,0.71c-2.58,1.71-5.66,2.44-8.74,2.2 | |||
c-7.84-0.43-15.77-0.29-23.48,1.33c15.71,2.31,31.63-0.3,47.41,0.71c-1.47,1.02-2.98,2.35-4.89,2.24 | |||
c-12.03-0.73-24.02,1.25-36.05,0.65c-2.42-0.25-4.7,0.67-6.75,1.86c10.98,1.48,22.11-0.84,33.07,0.9 | |||
c-10.06,4.98-21.82-0.69-32.1,3.47c11.21,0.79,22.48,0.58,33.72,0.9c4.44,0.4,9.47-2.33,13.22,1.13 | |||
c-15.44,2.43-31.3-0.22-46.68,2.84c8.42,1.63,17.03,0.49,25.52,0.21c2.44-0.18,4.73,0.77,6.77,2.02 | |||
c-10.79,2.73-22.32-0.85-32.94,2.71c14.02,1.78,28.14-0.78,42.2,0.02c2.08,0.04,3.9,1.14,5.68,2.1c-15.19,2.4-30.79-0.67-45.89,2.6 | |||
c6.67,0.22,13.37,1.38,20.04,0.53c3.64-0.39,7.78-1.03,10.75,1.66c-10.46,2.45-21.39-0.5-31.83,2.16 | |||
c11.31,1.51,22.76,1.24,34.15,1.47c4.22,0.34,9.11-2.19,12.6,1.28c-15.16,2.16-30.58-0.13-45.73,1.99 | |||
c10.44,2.11,21.19-0.69,31.63,1.46c-1.95,1.16-4,2.36-6.36,2.29c-8.52,0.06-17.4-1.61-25.65,1.28c13.81,1.44,27.71,0.03,41.56,0.56 | |||
c1.94-0.04,3.44,1.32,4.93,2.35c-13.62,0.72-27.28,0.62-40.92,0.56c-1.7,0.02-3.34,0.49-4.96,0.95 | |||
c10.52,1.72,21.27,0.25,31.83,1.69c-9.9,5.57-21.78-0.92-31.91,3.7c15.31,0.96,30.67,0.32,46,1c-1.24,0.8-2.31,2.14-3.9,2.26 | |||
c-14.04,1.01-28.31-1.79-42.19,1.26c10.55,1.56,21.32-0.78,31.8,1.51c-10.06,4.64-21.54-0.34-31.92,2.81 | |||
c15.49,2.24,31.23,0.5,46.77,2.13c-3.91,3.24-8.99,0.83-13.51,1.27c-11.13,0.46-22.37-0.06-33.42,1.51 | |||
c10.69,2.04,22.3-2.21,32.51,2.74c-10.72,2.18-21.88-1.01-32.5,1.99c15.51,1.96,31.26-0.1,46.73,2.25 | |||
c-4.29,3.08-9.56,0.72-14.36,1.11c-10.79,0.28-21.71-0.95-32.38,1.16c10.78,1.94,21.83,0.15,32.67,1.72 | |||
c-1.64,0.89-3.26,2.01-5.16,2.22c-9.04,0.83-18.7-2.48-27.33,1.36c13.75,1.24,27.57-0.06,41.33,0.69c2.02,0.12,3.81,1.12,5.48,2.16 | |||
c-11.19,0.64-22.41,0.67-33.61,0.68c-4.44,0.11-9.16-1.58-13.29,0.82c10.98,0.83,22.1-0.1,32.97,1.95 | |||
c-8.1,3.36-17.08,1.64-25.54,1.17c-2.54-0.25-5,0.45-7.35,1.34c15.59,1.42,31.28,1.16,46.9,2c-1.38,1.08-2.78,2.43-4.68,2.33 | |||
c-12,0.31-24.01-0.43-35.99-0.98c-1.93-0.1-3.77,0.53-5.59,1.04c9.06,1.77,18.34,0.47,27.49,1.12c1.72-0.12,3.2,0.71,4.51,1.73 | |||
c-2.49,1.68-5.62,1.4-8.47,1.28c-7.8-0.46-15.81-1.46-23.42,0.88c1.82,0.31,3.65,0.63,5.51,0.7c13.78,0.33,27.56,0.72,41.3,1.82 | |||
c-3.57,3.06-8.18,1.16-12.34,1.27c-7,0.05-13.99,0.41-20.99,0.33c-4.33,0.07-8.9-1.39-12.96,0.74c10.63,0.5,21.33,0.37,31.9,1.81 | |||
c-4.85,2.72-10.58,2.1-15.92,1.96c-5.59-0.29-11.55-2.23-16.87,0.48c15.52,2.14,31.36,0.56,46.84,3.18 | |||
c-2.2,0.9-4.54,1.63-6.95,1.39c-11.01-0.59-22.05-0.44-33.04-1.3c-2.09-0.34-4.07,0.5-5.92,1.37c10.55,1.15,21.29,0.34,31.72,2.56 | |||
c-6.19,3.31-13.18,0.4-19.77,0.96c-4.43,0.51-9.02-1.3-13.27,0.53c15.72,3.79,32.11,1.19,48.03,3.45 | |||
c-4.04,3.2-9.18,0.89-13.79,1.13c-11.04,0.01-22.1-0.69-33.11,0.17c10.76,2.18,21.84,1.01,32.65,2.74 | |||
c-1.98,1.11-4.1,2.14-6.43,2.08c-5.7,0.11-11.38-0.48-17.07-0.41c-3.54,0.18-7.36-1.51-10.57,0.66c15.94,2.21,32.4-0.16,48.07,4.14 | |||
c-8.12,0.69-16.27,0.25-24.4-0.01c-0.7,0.6-1.4,1.2-2.11,1.79c4.14,0.18,8.31,0.49,12.34,1.5c-6.73,3.53-14.24,0.05-21.37,0.88 | |||
c-3.9,0.62-8.27-2.12-11.69,0.69c14.62,1.23,29.28,2.28,43.93,2.74c1.39,0.21,2.44,1.25,3.6,1.95c-15.5,1.71-31.13-2.65-46.6-0.04 | |||
c10.56,1.8,21.36,0.81,31.94,2.45c-5.11,3.8-11.43,0.89-17.14,0.98c-5.31,0.17-10.99-0.98-15.96,1.38 | |||
c15.86,1.39,31.88,1.27,47.69,3.42c-1.75,0.96-3.65,1.84-5.7,1.56c-10.09-0.73-20.22-0.53-30.32-1.11 | |||
c-3.53-0.41-7.33-1.29-10.57,0.75c8.33,0.44,16.62,1.47,24.98,1.31c2.69-0.1,5.25,0.86,7.5,2.28c-10.93,1.86-21.98-1.84-32.9,0.14 | |||
c13.94,2.54,28.18,2.55,42.28,3.34c1.77-0.03,3.2,1.09,4.62,1.98c-11.21,0.9-22.42-0.62-33.62-0.99 | |||
c-4.44-0.06-9.29-1.77-13.31,0.94c11.01,0.49,22.01,1.25,32.94,2.69c-2.07,1.11-4.27,2.2-6.7,1.89 | |||
c-8.57-0.54-17.32-2.46-25.83-0.36c15.41,2.78,31.4,0.91,46.65,4.9c-15.13,1.85-30.29-2.27-45.44-0.47c0,0.13,0,0.38,0,0.51 | |||
c9.51,0.99,19.1,0.89,28.61,1.88c1.02,0.39,1.71,1.31,2.55,1.98c-10.67,1.79-21.48-2.02-32.11,0.23 | |||
c11.48,1.15,23.01,1.96,34.49,3.23c4.05,0.55,8.73-1.03,12.04,2.12c-7.66,0.18-15.34,0.08-23.01-0.14 | |||
c-7.5-0.2-15.18-2.85-22.59-0.57c10.39,1.54,21.34,0.25,31.29,4.2c-10.59,1.85-21.28-2.12-31.85,0.11 | |||
c15.32,2.09,30.84,2.49,46.16,4.67c-4.6,2.38-9.87,1.28-14.81,1.16c-10.27-0.88-20.53-2.23-30.86-1.7 | |||
c10.27,2.88,21.24,1.46,31.67,3.74c-1.81,0.95-3.71,1.86-5.79,1.9c-8.41-0.04-16.9-2.39-25.28-0.78 | |||
c14.87,2.4,29.97,2.76,44.92,4.51c-3.31,3.11-7.86,1.35-11.82,1.15c-9.68-0.46-19.31-1.69-29-1.84c-1.94-0.14-3.81,0.44-5.62,1.09 | |||
c10.84,0.49,21.62,1.74,32.41,2.85c-1.98,1.3-4.27,2.25-6.69,1.99c-8.43-0.64-16.92-2.28-25.38-1.11 | |||
c15.21,3.09,31.28,1.2,46.07,6.48c-15.03,0.59-29.95-3.06-44.97-1.71c10.17,2.26,20.87,0.97,30.89,4.02 | |||
c-2.46,0.99-5.09,1.77-7.76,1.2c-7.39-1.19-14.97-1.69-22.38-0.38c14.62,2.25,29.79,1.16,44.02,5.64 | |||
c-14.68,1.26-29.23-3.02-43.92-1.7c9.93,1.64,20.05,2.01,29.91,4.07c-1.76,0.74-3.58,1.57-5.55,1.4 | |||
c-7.68-0.42-15.29-1.65-22.97-2.13c-1.69-0.27-3.17,0.62-4.6,1.35c16.04,1.57,32.13,3.08,48.08,5.36c-1.36,0.78-2.76,1.7-4.42,1.54 | |||
c-10.4-0.01-20.71-1.65-31.06-2.5c-4.42-0.17-8.96-2.2-13.27-0.23c11.19,1.55,22.5,2.21,33.63,4.14c-9.65,3.81-19.8-1.7-29.64,0.39 | |||
c14.44,3.42,29.76,1.78,43.88,6.79c-3.06,4.9-9.17,4.25-14.13,4.86c-10.03,1.96-20.19,5.97-27.13,13.75 | |||
c-5.39,5.9-8.1,13.76-8.99,21.6c-2.44,19.92-2.45,40.01-3.32,60.03c-3.03,53.66-5.55,107.34-7.92,161.03 | |||
c-1.01,16.6801-2.04,33.4-4.98,49.8701c-5.56-3.42-3.99-10.41-3.74-15.82c-0.48-24.67-0.34-49.34-0.23-74 | |||
c0.51-155.36,0.23-310.78-6.55-466.02c-0.49-13.56-3.85-27.21-1.21-40.73C28.6578,41.1071,33.6378,34.5071,40.8578,32.8271 | |||
M58.5178,232.4071c6,1.02,12.11,0.74,18.16,1.25c0.79-0.59,1.59-1.17,2.39-1.75 | |||
C72.2178,232.5071,65.1678,230.1671,58.5178,232.4071z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M1479.7878,41.2271c0.03-3.7-0.0399-7.56,1.75-10.93 | |||
c2.62,0.25,5.55,0.53,7.51,2.55c3.25,3.26,4.48,7.87,6.88,11.72c8.98,0.84,15.6901,7.7,20.8,14.53 | |||
c9.11,12.61,14.9399,27.51,17.37,42.84c1.63,11.19,1.26,23.57-5.4501,33.16c0.99,5.95,2.7201,11.89,1.88,17.98 | |||
c-2.34,0.63-5.01,1.98-7.2799,0.45c-2.03-1.53-2.8601-4.04-4.12-6.15c-1.66,3.46-1.77,7.65-4.29,10.66 | |||
c-5.48,1.41-7.26-5.32-11.3101-7.42c-0.21,3.5,0.4501,7.08-0.36,10.53c-1.13,3.77-6.83,2.95-8.46,0.01 | |||
c-2.05-3.53-2.4401-8.04-5.92-10.65c-2.7,5.69,3.51,11.11,0.73,16.82c-2.3999,0.16-5.1599,0.91-7.23-0.66 | |||
c-3.5299-2.93-3.2999-9.13-8.34-10.42c0.4399,5.59,4.5699,10.6,2.8,16.41c-3,0.19-6.4301,0.46-8.74-1.84 | |||
c-2.9901-3.12-3.9501-7.52-6.1001-11.16c-3.1499,3.77-0.2799,8.25,0.3101,12.36c0.46,2.16,0.0599,5.09-2.21,6.07 | |||
c-2.7401,0.58-5.9801-0.54-7.05-3.28c-1.91-4.1-2.1-9.92-7.2-11.5c-0.2101,4.72,1.73,9.02,2.96,13.46c0.98,2.72-1.01,5-2.63,6.91 | |||
c-2.4401-0.35-5.2001-0.97-6.37-3.39c-2.0801-3.98-2.5-9.14-6.6801-11.68c-3.88,6.12,4.2001,11.88,1.8201,18.14 | |||
c-1.1801,3.69-6.64,2.21-8.39-0.32c-2.8101-4.31-2.6801-9.87-5.6901-14.11c-1.1699,0.94-3.1599,1.68-2.7799,3.56 | |||
c0.2,4.96,4.1899,9.58,2.38,14.62c-1.2201,3.39-6.28,2.34-8.03-0.04c-2.38-3.54-2.62-8.38-6.3-11.04 | |||
c-1.36,2.67-1.24,5.71,0.13,8.34c1.39,3.11,3.05,7.59-0.11,10.19c-2.8199,0.54-6.24,0.34-8.04-2.19 | |||
c-2.21-3.26-2.64-7.32-4.33-10.83c-3.6,4.11-0.27,9.34-0.03,13.96c0.3101,2.87-3.12,5.37-5.6699,3.82 | |||
c-6.38-2.69-4.9401-11.84-10.76-15.13c-1.66-1-3.5901-0.06-5.25,0.32c-4.75,1.52-9.3201,3.59-14.2101,4.64 | |||
c0.01,4.15,0,8.3,0.02,12.45c-18.77,7.63-37.39,17.05-57.88,18.79c-9.89,1.06-19.97-1.14-28.61-6.01 | |||
c-19.08-2.33-38.11,2.87-55.75,9.76c-20.7999,8.14-41.98,15.25-62.91,23.03c-35.76,13.03-71.59,25.97-108.0699,36.85 | |||
c-5.59,1.42-12.09,3.93-17.3301,0.16c-7.46-5.1-10.34-14.33-12.59-22.64c-1.88-7.31-2.91-14.79-4.09-22.23 | |||
c45.08-20.78,91.7-37.97,138.3101-54.95c16.6499-6.06,33.3099-12.07,50.1-17.74c17.03-6.01,34.8199-13.19,46.6599-27.45 | |||
c1.39-4.48,3.3401-8.8,4.41-13.38c19.25-15.06,42.76-23.15,65.86-30.22c6.1801-1.78,7.0901,7.8,12.99,7.12 | |||
c6.62,0.25,11.9401-4.39,18.2101-5.7c-0.4401-6.66-3.1901-13.09-2.01-19.84c2.14,0.74,4.49,1.37,6.1,3.11 | |||
c3.1,3.16,4.27,7.57,6.5,11.31c2.05-0.7,2.24-3.33,1.89-5.14c-0.58-4.07-3.15-8.05-1.9301-12.23c1.0601-2.35,4.6801-4.6,6.87-2.32 | |||
c3.3201,3.99,3.11,10.5,8.17,13.09c2.58-4.4-1.42-8.35-2.47-12.49c-0.79-2.24,0.5499-4.28,1.6699-6.09 | |||
c2.3601,0.22,5.4401-0.16,6.9,2.22c2.62,4.01,2.01,9.68,6.12,12.83c4.97-2.58,0.8301-8.01,0.0901-11.88 | |||
c-1.4701-3.24-0.3401-8.03,3.75-8.37c7.48,1.17,4.0599,11.77,10.25,14.58c1.21-1.24,2.23-3.06,1.37-4.8 | |||
c-1.8-4.06-4.4601-8.05-3.63-12.73c1.86-0.55,3.63-1.39,5.1599-2.62c7.74,1.14,5.9501,11.04,11.38,14.93 | |||
c4.53-5.65-3.85-12.16-0.4299-18.09c1.47-2.84,5.2999-2.05,7.1,0.02c3.25,3.66,3.15,9.2,6.7,12.69 | |||
c3.54-6.61-4.23-14.27,1.0901-20.42c2.13,0.57,4.72,0.95,5.9099,3.1c2.2101,3.7,2.66,8.17,4.99,11.84 | |||
c1.28-0.74,3.0801-1.39,3.0701-3.19c-0.0701-5.08-3.3201-10.61,0.1699-15.28c2.4,0.28,5.3501,0.14,7.03,2.27 | |||
c2.4601,3.1,2.8301,7.23,4.38,10.78c5.14-5.35-3.7899-12.95,1.42-18.17c2.36-0.52,5.24-0.25,6.9,1.74 | |||
c2.48,2.98,3.14,7.25,6.5499,9.5c0.8101-5.28-4.2-9.61-2.75-15.05c2.6901-0.15,5.6-0.62,8.12,0.71 | |||
C1475.8679,37.6371,1477.7579,39.5371,1479.7878,41.2271z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M193.4378,55.2971c5.26-3.95,12.09-5.14,18.52-4.48c14.77,1.45,29.15,5.64,44,6.51 | |||
c11.25,1.07,23.23,1.15,33.28,7c-8.17,3.83-17.33,4.87-26.25,4.72c-13.55-0.49-27.39-2.6-40.71,1.01 | |||
c18.55,5.34,37.89-1.54,56.6,2.35c3.58,0.69,7.02,1.93,10.36,3.38c-6.12,2.54-12.63,4.11-19.26,4.39 | |||
c-15.85,0.8-31.95-3.05-47.58,1.08c17.54,5.11,35.85-0.71,53.64,2.02c4.56,0.63,8.96,2.02,13.21,3.75 | |||
c-8.93,6.18-20.21,4.61-30.37,3.66c-13-0.37-26.19-0.69-38.98,2.07c9.13,5.37,20.04,2.42,29.99,2.3 | |||
c13.11-0.15,26.75-1.38,39.3,3.24c-10.37,5.92-22.73,4.9-34.21,4.65c-12.38,0.13-25.04-2.63-37.17,0.99 | |||
c23.15,8.28,48.35-2.66,71.49,5.75c-2.79,1.97-5.89,3.61-9.31,4.08c-8.97,1.42-17.96-0.82-26.96-0.7 | |||
c-11.86,0.16-23.85-0.05-35.51,2.39c1.81,1.25,3.68,2.55,5.91,2.9c21.88,1.85,44.47-4.2,65.88,2.59c-2.34,2.2-5.02,4.21-8.25,4.82 | |||
c-9.91,2.31-20-1.2-29.98-0.06c-11.97,1.37-24.07-0.76-36.01,1.03c1.78,2.67,4.82,3.46,7.87,2.79c4.32-0.93,8.63,0.39,12.96-0.12 | |||
c4.32-0.41,8.66,0.37,12.98-0.15c4.35-0.64,8.67,0.74,13.04,0.34c9.13-0.48,18.84-1.74,27.32,2.58c-3.36,3.09-7.68,4.96-12.21,5.4 | |||
c-9.72,0.98-19.39-1.26-29.11-0.79c-10.88,0.42-21.78,0.47-32.63,1.37c3.03,3.22,7.61,3.44,11.69,2.6 | |||
c9.61-1.83,19.26,1.05,28.92,0.4c8.3-0.34,16.75-2.13,24.97-0.13c3.22,0.71,5.97,2.63,8.37,4.82c-24.39,7.41-50.18-1.19-74.75,4.67 | |||
c18.72,4.23,37.86-0.32,56.78,0.84c6.25,0.37,14.16-0.29,18.05,5.74c-25.11,7.63-51.57-1.1-76.93,4.54 | |||
c12.98,4.67,27.02,3.19,40.55,3.34c12.05-0.21,25.59-4.08,36.33,3.36c-25.17,7.77-51.83-1.08-77.27,4.71 | |||
c2.94,3.5,7.8,3.54,11.94,2.75c9.95-1.87,19.95,1.25,29.96,0.36c11.75-0.76,24.66-3.11,35.27,3.49 | |||
c-25.19,7.96-51.96-1.41-77.37,4.87c3.22,3.15,7.87,3.45,12.06,2.59c9.98-1.9,20.01,1.25,30.05,0.34 | |||
c11.78-0.72,24.68-2.87,35.37,3.56c-25.24,7.88-51.98-1.37-77.47,4.73c5.52,5.61,13.45,1.62,20.13,1.98 | |||
c8.62,0.6,17.28,1.71,25.93,0.75c10.49-0.98,21.97-2.02,31.35,3.81c-25.01,9.7-52.19-0.16-77.79,5.67 | |||
c25.54,6.31,52.83-4.44,77.76,5.74c-8.36,3.19-17.31,4.58-26.24,4.52c-16.44,0.15-33.18-3.07-49.37,1.1 | |||
c24.86,6.13,51.38-4.4,75.62,5.63c-9.3,3.49-19.3,4.66-29.19,4.58c-15.2,0.07-30.5-2.43-45.63,0.05 | |||
c10.05,5.41,21.8,2.35,32.62,2.18c14.1-0.02,29.03-1.77,42.2,4.41c-24.21,10.18-50.84-0.54-75.69,5.75 | |||
c24.61,8.23,51.11-2.76,75.69,5.62c-10.83,4.39-22.72,5.01-34.27,4.5c-13.85-0.72-27.97-2.16-41.62,1.14 | |||
c24.71,8.2,51.28-2.64,75.99,5.67c-10.1,6.52-22.51,4.44-33.77,3.57c-13.36-0.12-26.91-0.65-40.05,2.21 | |||
c9.69,5.22,21.04,2.53,31.47,2.2c14.11-0.08,28.66-1.37,42.28,3.22c-5.73,6.01-14.6,6.22-22.3,5.63 | |||
c-16.83-1.81-33.77-0.5-50.62,0.28c23.7,7.92,49.34-2.85,72.96,5.59c-8.8,7.08-20.82,5.62-31.35,5.66 | |||
c-13.39,0.25-26.82-1.86-40.16-0.05c6.67,4.03,14.75,3.26,22.2,2.93c9.29-0.87,18.64-0.87,27.97-1.02 | |||
c7.43-0.01,15.53,0.8,21.35,5.94c-22.57,6.88-46.27,0.38-69.24,3.5c2.75,1.57,5.76,2.71,8.94,2.94c8.69,0.77,17.34-0.91,26.03-0.86 | |||
c11.46,0.01,23.25-0.39,34.23,3.43c-7.61,8.04-19.58,5.53-29.39,4.82c-13.48-0.3-27.18-0.75-40.46,2.02 | |||
c11.02,2.34,22.37,2.22,33.58,2.25c8.86,0.17,17.72-2.12,26.56-0.66c3.71,0.58,7,2.56,9.62,5.19c-20.9,6.86-42.99,0.32-64.3,3.5 | |||
c8.35,2.94,17.34,2.12,26,1.49c13.25-1.02,27.6-1.86,39.49,5.18c-9.35,5.14-20.25,6.35-30.75,5.71c0.02,0.35,0.07,1.06,0.1,1.41 | |||
c10.33-1.07,21.16-0.21,30.7,4.19c-2.25,2.63-4.99,5-8.42,5.87c-8.22,2.37-16.68-0.24-25.01-0.22 | |||
c-11.39,0.02-22.76,0.73-34.13,1.14c15.36,4.81,31.42-0.01,47.08,1.07c7.12,0.36,14.17,2.25,20.4,5.74 | |||
c-5.17,2.43-10.63,4.34-16.32,5.06c-17.48,2.68-35.2-2.83-52.61,0.66c11.95,3.52,24.4,0.79,36.58,0.94 | |||
c10.92-0.25,22.67-1.19,32.47,4.6c-5.41,5.89-13.94,6.3-21.38,5.53c-15.79-1.94-31.71-0.39-47.53,0.26 | |||
c11.85,3.8,24.35,0.48,36.48,0.92c10.91-0.14,24.14-2.22,32.35,6.77c-23.17,9.46-48.39,0.99-72.37,4.61 | |||
c19.46,5.52,39.71-1.78,59.33,2.26c4.55,0.87,8.92,2.5,13.07,4.55c-10.42,7.04-23.51,6.07-35.46,5.68 | |||
c-12.65,0.15-25.33-1.75-37.95-0.07c12.16,2.46,24.64,2.19,36.99,2.23c9.12,0.11,18.37-2.64,27.4-0.24 | |||
c3.59,0.85,6.51,3.22,8.98,5.86c-23.79,9.36-49.57,0.96-74.1,4.66c19.94,5.63,40.7-2.16,60.78,2.14c4.65,0.88,9.11,2.54,13.34,4.62 | |||
c-3.46,2.23-7.21,4.12-11.31,4.84c-9.32,1.88-18.75-0.42-28.13-0.31c-12.07,0.04-24.13,0.59-36.18,1.18 | |||
c24.91,5.93,51.41-4.43,75.67,5.56c-3,2.72-6.48,5.04-10.49,5.93c-9.84,2.35-19.99,0.68-29.97,0.8c-11.16-0.08-22.4-1.5-33.52,0.06 | |||
c11.97,2.5,24.3,2.09,36.46,2.21c9.44,0.11,18.94-2.59,28.32-0.51c3.51,0.68,6.55,2.7,9.14,5.09c-11.23,5.8-24.19,4.87-36.41,4.57 | |||
c-13.08,0.25-26.45-2.77-39.27,1.02c12.54,3.01,25.55,1.93,38.3,1.38c9.34-0.53,18.71-0.36,28.06-0.23 | |||
c3.69,0.02,6.82,2.33,8.35,5.63c-9.68,6.24-21.63,4.68-32.47,3.69c-14.07-0.6-28.16,0.46-42.22,0.98 | |||
c7.92,2.11,16.19,2.03,24.31,1.57c9.63-0.71,19.3-0.66,28.95-0.95c7.97-0.25,16.56,1.23,22.42,7.09 | |||
c-24.64,9.47-51.19,1.04-76.6,4.59c12.24,2.45,24.79,2.21,37.21,2.24c9.65-0.01,19.4-2.43,28.97-0.28 | |||
c3.71,0.86,7.28,2.45,10.23,4.88c-6.76,5.38-15.84,6.2-24.16,5.5c-17.03-1.94-34.18-0.41-51.24,0.23 | |||
c12.93,2.3,26.11,2.15,39.19,2.03c8.96-0.14,18.05-2.51,26.92-0.24c3.21,0.77,5.9,2.77,8.4,4.85c-6.17,6.14-15.38,6.09-23.45,5.46 | |||
c-16.35-1.75-32.82-0.41-49.18,0.35c11.23,2.54,22.85,1.94,34.29,2.07c9.53,0.08,19.11-2.48,28.59-0.51 | |||
c3.97,0.75,7.64,2.62,10.81,5.12c-3.31,2.15-6.88,3.98-10.78,4.74c-9.81,2.07-19.76-0.41-29.63-0.21 | |||
c-11.55,0.19-23.11,0.44-34.63,1.27c13.41,2.27,27.08,2.19,40.63,1.93c11.49-0.78,24.17-3.11,34.49,3.53 | |||
c-2.85,2.53-6.2,4.6-10.01,5.24c-9.13,1.66-18.3-0.75-27.45-0.68c-12.39,0.05-24.91-0.24-37.11,2.24 | |||
c12.88,2.61,26.09,2.07,39.15,2.12c8.76-0.03,17.58-2.36,26.28-0.4c3.45,0.71,6.39,2.73,9.06,4.94c-23.9,9.56-49.81,1-74.51,4.63 | |||
c18.09,5.05,36.81-0.53,55.16,1.38c6.72,0.61,13.32,2.47,19.38,5.45c-10.05,7-22.79,6.23-34.42,5.71 | |||
c-13.05,0.15-26.14-1.83-39.15-0.07c20.28,5.19,41.22-1.48,61.64,2.18c4.08,0.72,8.06,1.93,11.93,3.43 | |||
c-2.59,3.02-5.9,5.53-9.87,6.31c-8.82,2-17.73-0.75-26.6-0.64c-11.85,0.09-23.7,0.68-35.54,1.18c16.89,4.85,34.43-0.29,51.59,1.12 | |||
c7.07,0.49,14.06,2.34,20.36,5.63c-14.28,7.38-30.81,6.05-46.3,4.95c-8.27-0.5-16.61-0.68-24.83,0.58 | |||
c19.65,5.51,40.14-1.5099,59.99,2.38c3.84,0.72,7.56,1.93,11.21,3.34c-5.38,5.94-13.81,7.17-21.41,7.12 | |||
c-8.02-0.41-16.06-0.16-24.08-0.58c-8.13-0.31-16.33-0.94-24.41,0.31c14.17,4.09,29,1.06,43.44,0.77 | |||
c9.08,0.13,18.43,1.5,26.42,6.08c-5.66,3.81-12.63,5.02-19.34,4.37c-15.44-1.87-31.04-0.7-46.49,0.31 | |||
c9.73,5.38,20.97,1.92,31.43,1.93c11.6,0.03,24.31-1.76,34.68,4.75c-5.6,2.45-11.74,3.13-17.73,4.01 | |||
c-15.43,2.07-30.97,3.42-46.54,3.69c4.46,0.88,9.04,0.86,13.57,0.93c13.19,0.24,26.41-0.1,39.57,1.06 | |||
c3.84,0.47,8.03,0.77,11.11,3.42c-4.3,3.12-9.45,4.73-14.61,5.74c-14.18,2.74-28.8,2.17-42.93,5.26 | |||
c-11.35,2.15-23.42,5.01-34.73,1.19c-7.47-2.55-12.71-9.19-15.37-16.4c-4.81-12.7599-6.1-26.47-7.44-39.93 | |||
c-1.86-23.36-4.47-46.64-6.19-70.01c-9.6-122.45-8.92-245.88,5.23-367.96c2.08-17.37,1.67-35.15,6.44-52.11 | |||
C183.2078,68.1071,186.8078,60.2371,193.4378,55.2971 M225.7078,333.5371c10.15,3.14,20.89,1.82,31.3,1.22 | |||
c0.49-0.64,1-1.26,1.53-1.87c-2.19,0.7-4.5,0.24-6.73,0.19C243.1278,332.3671,234.2978,331.7471,225.7078,333.5371z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M375.5478,88.5971c6.09-4.49,13.94-5.82,21.35-5.14 | |||
c17.61,1.45,34.54,6.86,51.62,11.01c5.19,1.03,12.08,0.5,14.75,6.18c-2.21,1.89-4.81,3.3-7.73,3.66 | |||
c-17.88,2.33-36.15,0.14-53.88,3.85c19.82,3.55,40.35-0.36,59.96,4.62c-2.77,1.21-5.64,2.27-8.65,2.71 | |||
c-17.03,2.62-34.47-2.3-51.37,1.73c19.26,4.38,39.31-1.02,58.59,3.31c-1.52,1.69-2.99,3.71-5.32,4.29 | |||
c-7.19,2.07-14.68,0.22-21.99,0.29c-10.46,0.15-21.17-1.47-31.4,1.41c16.07,5.17,33.14-1.67,49.43,2.04 | |||
c2.89,0.59,5.41,2.2,7.58,4.14c-19.15,4.57-39.11-1.36-58.26,3.06c18.58,4.49,37.99-1.51,56.58,3.03c-2.43,1.81-5.23,3.08-8.2,3.69 | |||
c-15.94,3.31-32.51-1.63-48.32,2.49c18.59,4.56,38.05-1.6,56.67,2.97c-2.35,1.84-4.99,3.35-7.95,3.92 | |||
c-15.62,3.46-31.9-2.08-47.41,2.31c17.66,4.72,36.25-1.78,53.89,3.07c-4.19,4.58-10.86,4.17-16.52,4.6 | |||
c-13.54,1.1-27.1-0.73-40.65,0.01c6.6,3.57,14.33,3.54,21.62,3.42c11.8-0.18,23.95-2.3,35.48,1.15c-8,3.49-16.83,4.13-25.44,4.55 | |||
c-11.05,0.3-22.11-0.22-33.15,0.29c8.4,4.07,17.99,3.35,27.04,3c10.01-0.34,20.38-1.75,30.11,1.44 | |||
c-6.56,6.19-16.04,2.52-23.97,3.03c-11.46,1.07-22.94,2.28-34.46,1.83c7.85,3.52,16.64,3.25,25.06,2.99 | |||
c11.12-0.25,22.56-1.82,33.44,1.3c-2.26,2.06-5.1,3.47-8.21,3.52c-8.27,0.42-16.57-1-24.83-0.02c-7.94,0.95-15.92,1.85-23.93,1.39 | |||
c5.53,2.76,11.79,3.15,17.85,3.26c8.34-0.21,16.68-0.89,25.02-0.91c4.75,0.11,9.63,0.31,14.06,2.2 | |||
c-4.08,5.43-11.35,2.86-17.04,2.94c-13.26,0.27-26.53,0.56-39.76,1.57c5.52,2.64,11.71,3.19,17.74,3.34 | |||
c13.02,0.27,26.03-1.65,39.04-0.44c-1.01,1.91-2.07,4.18-4.41,4.7c-5.48,1.45-11.11-0.3-16.66,0.02 | |||
c-11.94,0.44-23.98-0.37-35.82,1.49c6.04,2.25,12.53,2.8,18.92,3.12c12.65,0.37,25.29-0.72,37.95-0.21 | |||
c-2.23,4.46-7.44,5.61-12,5.47c-6.7,0.03-13.36-0.91-20.06-0.71c-8.36-0.07-16.87-0.7-25.03,1.46c18.79,4.21,38.34-0.98,57.12,3.27 | |||
c-2.96,5.39-9.68,5.45-15.05,5.12c-8.66-0.67-17.34-0.74-26.02-0.83c-4.92-0.07-9.9,0.21-14.62,1.7 | |||
c15.5,4.79,31.87-1.31,47.57,1.95c3,0.61,5.68,2.19,8.04,4.1c-17.62,4.95-36.26-1.54-53.92,3.22c15.51,4.71,31.86-1.38,47.57,1.91 | |||
c2.98,0.59,5.59,2.24,7.91,4.15c-18.21,4.13-37.14-1.08-55.34,3.1c17.68,4.45,36.21-1.53,53.88,3.07 | |||
c-2.07,1.81-4.36,3.53-7.11,4.11c-13.97,3.18-28.62-2.57-42.4,1.96c16.67,4.65,34.3-1.55,50.99,3.05c-2.7,2.38-6.03,3.92-9.59,4.44 | |||
c-14.22,2.29-28.61-1.37-42.87,0.33c6.94,3.84,15.16,3.53,22.85,3.26c10.33-0.3,21.04-2.05,31.09,1.27 | |||
c-2.46,2.02-5.35,3.51-8.51,4.03c-13.06,2.19-26.55-1.62-39.46,1.95c16.12,4.82,33.28-1.53,49.45,3.11 | |||
c-16.53,7.02-34.92,3.29-52.3,4.94c7.58,4.05,16.45,3.23,24.73,2.98c9.19-0.32,18.74-1.7,27.62,1.42 | |||
c-16.1,6.89-34.06,3.58-51.04,4.71c2.28,1.36,4.7,2.61,7.37,2.95c12.01,1.74,24.1-1.96,36.12-0.26c3.51,0.4,6.67,2.15,9.15,4.63 | |||
c-16.99-0.13-33.99,0.58-50.93,1.91c2.1,1.05,4.25,2.09,6.58,2.54c14.71,2.53,29.96-2.65,44.43,1.83c-1.84,1.5-3.89,2.88-6.3,3.19 | |||
c-9.64,1.53-19.4-1.13-29.03,0.47c-4.54,0.8-9.09,1.41-13.68,1.77c16.2,6.38,33.95-1.29,50.38,3.76c-2.33,1.38-4.86,2.51-7.56,2.9 | |||
c-13.85,2.3-28.11-1.94-41.8,1.77c6.5,3.97,14.47,3.48,21.79,3.3c9.73-0.23,19.89-1.93,29.26,1.46c-3.63,2.38-7.95,3.3-12.23,3.42 | |||
c-9.01,0.22-18.01-1.41-27.01-0.59c-3.17,0.21-6.13,1.4-8.86,2.96c16.17,6.93,34.82-0.64,51.02,6.33c-4.25,4-9.6,6.49-15.13,8.15 | |||
c-13.59,3.79-23.71,15.22-29.5,27.65c-7.81,16.93-9.2,36-8.67,54.4c1.08,27.79,6.8,55.17,13.96,81.96 | |||
c4.6,16.66,9.39,33.31,15.71,49.41c2.52,6.8,5.11,14.42,2.2,21.53c-3.11,9.08-12.77,13.94-21.87,14.5 | |||
c-14.08,0.98-28.88-3.4-39.44-12.93c-8.37-8.32-12.12-19.9901-14.86-31.18c-4.89-21.72-5.35-44.17-4.3-66.32 | |||
c1.04-26,9.65-50.99,11.12-76.94c1.49-24.87-1.88-49.71-6.54-74.09c-6.03-31.57-14.28-62.8-17.35-94.88 | |||
c-1.72-19.96-2.12-40.01-1.66-60.04c0.73-20.16,1.94-40.65,8.42-59.92C361.6678,104.9871,366.7978,94.9471,375.5478,88.5971z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M573.9678,88.6071c18.35-0.51,36.63-2.86,55.01-2.59 | |||
c2.46,0.15,5.24-0.01,7.2599,1.68c1.51,2.13-0.48,4.35-2.7,4.51c-21.66,3.82-43.69,4.9-65.46,7.83c-0.08,1.85-0.13,3.7-0.16,5.56 | |||
c21.69-0.69,43.3101-3.98,65.05-2.87c2.07-0.18,4.38,1.79,3.71,3.98c-0.04,1.32-1.77,1.46-2.73,1.81 | |||
c-21.81,3.95-43.98,5.16-65.94,7.92c-0.03,1.92-0.02,3.84,0.02,5.76c13.25-0.89,26.54-1.32,39.77-2.6 | |||
c8.06-0.9,16.16,0.19,24.22-0.62c3-0.65,4.33,2.54,4.48,4.97c-4.62,1.85-9.65,2.14-14.49,3.11c-12.21,2.42-24.73,2.21-37.06,3.78 | |||
c-5.76,0.82-11.6,0.88-17.34,1.79c-0.06,1.92-0.08,3.83-0.06,5.75c21.81-0.8,43.55-3.46,65.4-3.18c1.83,0.17,2.81,2.01,3.05,3.65 | |||
c-0.22,1.8-2.11,1.99-3.52,2.3c-14.09,2.23-28.2401,4.18-42.45,5.48c-7.46,0.86-15,1.08-22.39,2.44c-0.08,1.76-0.11,3.51-0.08,5.27 | |||
c17.15-0.05,34.2-2.29,51.35-2.43c4.91,0.07,9.96-0.96,14.77,0.34c2.21,0.53,3.36,4.48,0.55,4.95 | |||
c-22.09,4.35-44.64,5.73-66.9901,8.25c-0.06,1.77-0.09,3.55-0.09,5.33c12.3,0.33,24.58-0.98,36.88-1.11 | |||
c8.31-0.18,16.6-0.94,24.91-1c2.25-0.01,4.94,0.12,6.31,2.23c0.81,2.22-1.24,3.68-3.2,3.88c-21.56,3.51-43.5,3.76-65.14,6.59 | |||
c-0.26,1.97-0.2,3.96-0.17,5.95c20.4-0.81,40.86-0.62,61.23-2.18c2.5-0.02,5.31-0.07,7.34,1.66c0.65,1.53,0.23,3.57-1.71,3.68 | |||
c-4.52,0.77-9.07,1.4-13.6,2.19c-17.86,1.44-35.74,3.04-53.57,4.81c-0.1,1.97-0.14,3.95-0.14,5.93 | |||
c22.5699,0.04,45.11-1.52,67.67-1.71c0.91,1.55,2.51,4.24,0.02,5.24c-3.94,1-8.09,0.62-12.09,1.25 | |||
c-18.47,2.18-37.02,3.52-55.5,5.55c-0.08,2-0.1,4.02-0.06,6.03c20.54-0.06,41.09-0.64,61.62-1.49c2.52-0.08,5.84-0.21,6.88,2.67 | |||
c1.27,1.58-0.74,3.34-2.33,3.3c-22.19,2.07-44.43,3.4-66.62,5.39c-0.05,2.18-0.03,4.37,0.13,6.55c21.64-0.7,43.31-0.59,64.93-1.87 | |||
c3.31-0.27,4.98,6.1,0.97,6.17c-21.91,2.22-43.97,3.24-65.83,5.94c-0.13,1.9-0.23,3.8-0.27,5.71c21.4,0.05,42.79-0.84,64.19-1.14 | |||
c2.89-0.33,4.29,2.63,4.5,5.05c-1.54,0.48-3.06,1.07-4.65,1.29c-21.4301,1.83-42.89,3.19-64.3,5.12c-0.06,2.06-0.06,4.13,0.01,6.19 | |||
c18.46,0.17,36.91-0.74,55.37-0.67c3.3,0.09,6.66-0.71,9.93-0.04c2.21,0.61,2.2401,3.26,2.56,5.1c-1.78,0.49-3.56,1.05-5.41,1.18 | |||
c-20.8,1.44-41.6,2.87-62.38,4.59c-0.13,1.96-0.21,3.93-0.21,5.9c20.8701,0.28,41.75-0.67,62.6201-0.53 | |||
c2.64-0.25,4.41,1.7,5.55,3.85c-0.93,1.25-2.06,2.48-3.75,2.44c-11.34,0.76-22.66,1.76-34.01,2.47c-10.24,0.64-20.5,1.05-30.7,2.22 | |||
c-0.03,1.97-0.02,3.94,0.04,5.91c20.26,0,40.54,0.12,60.8-0.16c2.99-0.28,5.52,1.32,6.59,4.11c-0.86,0.92-1.5,2.38-2.97,2.31 | |||
c-14.56,0.51-29.09,1.73-43.64,2.4c-7.07,0.48-14.18,0.48-21.21,1.46c-0.07,2.08-0.08,4.16,0,6.24c20.75,0.01,41.52-0.2,62.27-0.24 | |||
c2.89-0.05,5.48,1.95,5.58,4.98c-2.33,1.34-5.01,1.75-7.65,1.75c-13.35,0.46-26.63,1.98-39.97,2.41 | |||
c-6.57,0.35-13.17,0.5-19.67,1.55c-0.33,1.78-0.42,3.59-0.53,5.41c10.4,0.47,20.8-0.26,31.2-0.23c10.33,0.12,20.66-0.83,30.99-0.27 | |||
c2.2,0.06,5.56,1.16,4.84,4.01c0.2,1.65-1.91,1.45-2.95,1.82c-19.66,2.26-39.32,4.51-58.98,6.71c-2.18,0.19-4.47,1.05-5.57,3.07 | |||
c-2.37,4.04-1.7599,8.97-1.58,13.45c1.74,28.65,2.82,57.33,4.78,85.96c0.34,13.71,1.83,27.34,2.21,41.05 | |||
c1.01,12.71,1.46,25.46,2.57,38.16c1.71,14.59,2.66,29.25,3.77,43.9c0.12,4.03,0.51,8.63-2.0699,12.03 | |||
c-1.86,2.45-5.16,2.5-7.94,2.72c-10.4,0.76-20.73,2.38-31.13,3.1c-6.13,0.56-11.8-4.67-11.85-10.79 | |||
c-0.72-20.99-0.84-42.01-1.31-63.01c0.35-55.01-0.66-110.03,0.29-165.05c0.29-13.66-0.04-27.33,0.5099-40.99 | |||
c0.85-18,0.6-36.02,1.58-54.02c-0.03-15.02,0.74-30.03,1.3-45.04c0.02-22.34,1.86-44.62,2.36-66.94 | |||
c0.54-12.65,0.91-25.3,1.81-37.93c0.56-4.56,1.37-11.21,6.81-12.34C548.9378,91.3871,561.3578,88.9671,573.9678,88.6071z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M907.9178,176.1771c6.3-0.93,12.72-2.67,19.1-1.23 | |||
c7.43,1.59,14.83,3.64,21.76,6.83c-3.44,7.01-11.54,9.34-18.74,9.85c-11.28,0.76-22.38,2.95-33.54,4.65 | |||
c-4.79,0.85-10.07,1.11-14.11,4.1c-2.22,1.78-2.06,5.1-0.55,7.29c19.7,1.93,39.48-0.92,59.17-1.59c2.73,0.11,6.98,1.36,6.63,4.81 | |||
c0.04,3.79-3.74,5.93-7,6.58c-13.84,2.72-27.77,4.93-41.74,6.87c-5.83,0.6-12.01,0.49-17.17,3.71c-0.17,2.46-0.01,4.93,0.45,7.36 | |||
c16.57,1.5,33.19-0.06,49.77-0.53c5.5-0.23,12.03-1.7,16.58,2.31c0.36,1.95,0.15,4.35-1.51,5.68c-2.49,2.08-5.89,2.12-8.93,2.57 | |||
c-15.69,2.3-31.27,5.34-47.02,7.09c-2.7,0.42-5.62,0.94-7.71,2.83c-1.74,1.68-1.4,4.47-0.47,6.49c2.38,1.45,5.3,1.64,8.03,1.83 | |||
c17,0.47,33.96-1.39,50.96-1.22c2.86,0.19,6.37,1.22,7.4,4.25c0.07,3.44-2.87,5.95-6.08,6.36c-14.71,1.99-29.42,4.08-44.19,5.59 | |||
c-4.55,0.54-9.26,0.88-13.48,2.81c-2.41,1.05-3.95,3.82-3.41,6.42c0.92,2.33,3.71,2.91,5.91,3.34c6.6,1,13.26-0.16,19.9,0.04 | |||
c11.33-0.24,22.7,0.69,34.01-0.44c2.85-0.09,7.45,0.53,7.91,4.02c0.74,4.56-4.06,6.73-7.77,7.24c-16.77,2.84-33.82,3.61-50.62,6.19 | |||
c-2.91,0.57-6.87,1.15-7.82,4.5c-0.01,1.98,0.81,3.84,1.35,5.73c12.27,1.42,24.64,1.2,36.97,1.12c9.75-0.34,19.76-0.85,29.17,2.29 | |||
c0.17,3.48-1.7,7.07-5.43,7.57c-13.83,2.1-27.84,2.82-41.75,4.3c-5.79,0.68-11.97,0.14-17.31,2.83c-2.74,1.47-4.63,6.2-1.46,8.19 | |||
c3.85,2.13,8.49,1.75,12.74,1.64c15.35-1,30.7,1.71,46.03,0.45c2.57-0.1,4.94,1.04,7.21,2.13c0.52,6.08-5.59,8.78-10.12,10.98 | |||
c-6.1801,3.16-13.22,3.6-20.02,3.69c-7.51,0.02-14.54,3.04-21.96,3.7c-7.79,0.75-15.73,0.38-23.33,2.51 | |||
c1.65,63.64,2.68,127.31,4.9,190.94c0.14,9.39,1.77,18.86,0.12,28.2c-0.32,1.04-0.19,2.64-1.52,3c-9.11,3.77-18.98-0.85-28.35,1.23 | |||
c-1.94-3.09-2.22-6.71-2.08-10.25c-3.58-95.36-6.5-190.74-9.5099-286.12c-1.09-38.63-3.2-77.28-2.08-115.93 | |||
c4.99-1.93,10.32-2.63,15.65-2.77c11.73-0.39,23.34-3.57,35.13-2.43C894.5978,176.3371,901.2978,177.2171,907.9178,176.1771z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M777.1978,258.6471c2.4-0.28,4.8-0.48,7.22-0.63 | |||
c4.09,13.91,3.6801,28.54,5.17,42.83c1.95,19.82,2.61,39.74,4.6,59.55c1.67,19.46,1.66,39.02,2.83,58.51 | |||
c1.28,22.65,2.39,45.46-0.27,68.07c-3.29,26.7-7.96,53.24-10.61,80.02c-0.51,2.43-0.67,5.6-3.21,6.85 | |||
c-4.33,2.05-9.28,1.98-13.97,2.14c-15.99-0.13-32,0.4-47.97-0.75c-3.05-0.03-4.87-2.87-5.9-5.38c-3.26-7.83-3.51-16.46-5.75-24.57 | |||
c-6.21-22.66-12.44-45.36-16.76-68.47c-4.4-24.21-5.44-48.86-6.4-73.39c-1.33-36.18-4.22-72.33-3.5-108.55 | |||
c0.06-8.7-0.73-17.57,1.59-26.07c2.42-0.65,5.5-1.97,7.52,0.28c2.64,3.14,2.9,7.49,3.42,11.39c3.13,36.09,5.54,72.25,7.13,108.45 | |||
c0.18,4.79,1.11,9.54,2.7,14.07c0.49-1.33,0.89-2.69,1.19-4.07c-1.27-23.99-2.1201-48.02-2.6-72.05c-0.15-13.99-0.65-28,0.49-41.96 | |||
c0.5-5.46-1.37-11.09,0.49-16.4c0.9-3.26,5.86-3.45,7.22-0.45c2.09,4.61,1.21,9.86,1.75,14.77c2.91,33.3,5.53,66.64,7.03,100.04 | |||
c0.34,6.29-0.91,12.84,1.72,18.81c1.14-0.89,2.39-2.06,1.95-3.68c-1.07-6.29-0.88-12.68-1.24-19.02 | |||
c-1.23-25.32-1.9901-50.67-1.88-76.02c-0.01-9.73-0.02-19.46-0.77-29.16c-0.11-2.75-0.2-5.77,1.33-8.19 | |||
c1.76-2.45,6.19-1.54,7.03,1.33c1.76,4.74,1.04,9.93,1.54,14.88c3.17,36.66,7.08,73.29,8.29,110.09c0.14,3.1,0.93,6.12,2.04,9.01 | |||
c2.05-2.87,2.4-6.52,1.77-9.92c-1.12-5.96-1.39-12.02-1.74-18.06c-0.65-12.02-1.4-24.03-1.58-36.07 | |||
c-0.58-13.67,0.07-27.36-0.43-41.04c-0.33-7.99-0.46-15.98-0.83-23.97c0.06-2.88-0.05-6.04,1.54-8.56 | |||
c1.66-2.62,6.22-1.89,7.19,0.97c1.84,4.59,1.16,9.68,1.64,14.5c1.28,15.05,3.77,29.96,4.97,45.01c1.27,21.69,2.83,43.37,3.4,65.09 | |||
c0.07,3.99,0.76,7.97,2.31,11.66c2.11-3.55,2.41-7.73,1.9901-11.75c-1.9-21.92-3.21-43.92-2.73-65.93c0-17.34-0.22-34.69-0.9-52.02 | |||
c0.11-3.48-0.03-7.48,2.37-10.28c1.57-1.58,3.79-0.47,5.64-0.14c2.61,5.16,1.81,11.05,2.31,16.61 | |||
c3.03,34.93,6.91,69.81,8.2599,104.85c0.19,5.81-1.44,12.12,1.7401,17.42c4.16-6.15,1.1-13.58,1.17-20.34 | |||
c-0.68-16.05-1.81-32.08-2.14-48.14c-0.36-14.31-0.05-28.62-0.58-42.92C775.6478,278.1371,775.4478,268.2871,777.1978,258.6471z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M1420.7179,259.5871c0.4399-2.27,3.02-0.94,4.61-1.05 | |||
c1.26,6.29-1.6801,12.56-0.15,18.83c4.5,0.44,9.23,1.02,13.59-0.61c1.7201-0.95,3.4701,0.09,5.17,0.57c1.86-4.44,2.28-9.26,2.65-14 | |||
c0.25-1.24,0.02-2.82,1.14-3.68c1.6799-0.11,3.7999,0.44,4.25,2.34c-0.3401,0.94-0.76,1.85-1.25,2.71 | |||
c-2.6901,4.07-1.4401,9.17-1.5,13.73c3.76,1.19,8.39,1.26,10.9199-2.29c1.3,0.69,2.5801,1.4,3.9,2.09 | |||
c1.66-5.09,1.79-10.39,1.97-15.67c1.4401-0.08,2.91-0.12,4.39-0.11c0.8301,6.05-2.4199,11.65-2.3099,17.67 | |||
c4.8099,1.95,10.0399,2.14,15.15,2.56c2.0399-4.68,3.6-9.74,2.6599-14.89c-0.21-2.95,3.26-1.68,4.74-0.64 | |||
c0.0601,5.02-1.48,9.9-2.08,14.86c0.77,2.41,3.4,3.1,5.61,3.59c4.5801,0.88,9.0701,2.24,13.7001,2.92 | |||
c1.12-2.15,2.24-4.31,3.23-6.53c1.26-2.7,0.65-5.78,1.3099-8.62c1.28-0.25,2.61-0.22,3.9501-0.24 | |||
c1.64,6.12-4.28,10.67-4.1001,16.67c4.9801,2.27,10.3201,3.66,15.6101,5.04c2.75-2.46,3.6-6.34,3.6499-9.89 | |||
c0.02-1.68,1.67-2.95,3.3301-2.72c2.49-0.16,4.1,3.19,2.36,5c-2.01,2.62-3.3301,5.64-3.9301,8.87 | |||
c6.92,4.86,15.55,6.34,22.9401,10.4c1.09-1.33,2.0399-2.83,3.46-3.88c1.35,0.3,2.71,0.66,4.0701,1.09 | |||
c-0.16,1.9-0.88,3.67-1.7201,5.36c2.7201,2.21,5.7201,4.41,6.91,7.87c3.65,9.16,5.8199,19.04,5.74,28.92 | |||
c0.24,2.42,2.47,4,3.6901,5.97c-1,1.73-2.3401,3.28-3.0901,5.14c-0.59,4.29,0.48,8.63-0.1899,12.92 | |||
c-1.16,8.68-2.4301,17.67-6.73,25.43c-4.67,7.23-13.88,8.42-20.76,12.63c0.3099,2.16,1.1599,5.43-1.6901,6.26 | |||
c-2.34,0.53-3.48-1.79-4.77-3.21c-7.98,2.11-15.71,5.11-23.22,8.51c1.41,2.1,3.7001,3.76,4.28,6.34 | |||
c-0.23,2.67-3.6901,4.38-5.66,2.29c-0.7899-2.24-0.9299-4.63-1.38-6.94c-7.08-0.33-13.71,2.38-20.22,4.75 | |||
c1.12,1.97,2.5601,3.77,3.39,5.9c0.49,2.98-3.0601,4.57-5.41,3.23c-1.34-2.39-0.7-5.34-1.23-7.95c-6.65,0.04-13.14,1.68-19.52,3.34 | |||
c0.36,2.46,1.1901,4.93,0.85,7.45c-0.61,1.86-2.6599,1.38-4.11,1.15c-1.45-2.1-1.02-4.75-1.26-7.13 | |||
c-5.95-1.57-11.86,0.85-17.8099,1.11c0.2,1.6,0.51,3.21,0.5499,4.85c0.29,2.22-2.85,1.75-4.0299,2.51 | |||
c-0.65-2.07-0.8201-4.23-0.9401-6.37c-5.39-0.98-10.7999,0.26-16.1899,0.11c0.2799,2.4,2.0699,7.83-2.3101,7.05 | |||
c-3.08-0.8-2-4.43-1.8199-6.7c-5.79-1.18-11.6801-0.36-17.51-0.43c0.0499,2.49,0.26,4.98,0.22,7.48c-1.77,0.08-3.99,1.28-5.17-0.61 | |||
c-0.24-2.24,0.4701-4.45,0.6801-6.65c-5.6801-1.98-12-1.88-17.95-1.55c0.21,2.31,1.11,4.62,0.61,6.96 | |||
c-1.5601,1.28-3.8401,1.36-5.53,0.36c-0.3201-2.54,0.92-4.89,1.23-7.36c-1.59-1.79-4.09-2.02-6.28-2.44 | |||
c-4.87-0.66-9.6599-1.89-14.5699-2.04c-0.4,2.47-0.11,5.1-1,7.48c-1.0601,1.73-3.5701,1-4.98,0.18 | |||
c-1.3301-2.96,3.15-5.62,1.64-8.58c-3.24-2.55-7.62-2.47-11.4-3.67c-1.7101-0.33-3.36-1.45-5.11-1.07 | |||
c-3.66,1.7-0.0601,7.83-4.1001,9.17c-1.9299,1.35-3.99-0.87-3.48-2.82c0.8201-2.64,2.17-5.09,2.8201-7.8 | |||
c-8-3.68-16.67-5.66-24.55-9.62c-3.4399,2.09-6.3199,4.9-9.39,7.47c-0.62,1.35-0.49,3.56-2.36,3.85c-2.25,0.97-4.71-1.7-3.62-3.86 | |||
c0.38-1.57,2.23-1.64,3.4401-2.27c1.5299-2.61,3.1-5.21,4.23-8.02c-12.87-7.03-25.61-14.43-38.65-21.17 | |||
c-3.3-1.96-7.23-1.09-10.77-2.07c-5.1-1.45-10.4-0.2-15.5599,0.11c-23.8601,0.06-47.39,4.52-70.9701,7.55 | |||
c-29.62,3.97-59.5699,4.81-89.4199,4.42c-16.26-0.26-32.52-0.86-48.7101-2.39c-10.02-1.05-19.83-3.78-29.93-3.99 | |||
c-2.98,0-5.9-0.62-8.68-1.62c-2.42-0.81-5.33,0.41-7.35-1.49c-2.98-2.5-6.4-5.81-5.64-10.1c0.6801-7.01-0.41-14.01-0.23-21.03 | |||
c-0.05-4.34,0.49-8.66,0.49-13c-0.68-5.47,3.62-9.74,7.25-13.19c3.31-1.41,7.08-1.25,10.52-2.31c4.34-1.43,9.04-0.24,13.37-1.75 | |||
c7.57-2.29,15.5001-2.94,23.34-3.73c35.1801-3.58,70.63-4.52,105.9401-2.51c22.7999,0.94,45.35,4.65,68.01,7.09 | |||
c6.3099,0.64,12.64,1.32,19,1.26c1.71-0.08,3.34,0.56,4.96,1.1c8.63-1.94,17.73,1.77,26.13-1.55 | |||
c3.6801-1.24,7.6899-1.32,11.21-3.08c7.74-3.63,14.42-9.07,21.8101-13.3c-1.52-2.51-4.3201-3.92-5.79-6.4 | |||
c-0.89-2,1.34-3.29,2.67-4.25c2.51,1.78,3.71,4.68,5.63,6.99c1.6599,2,4.3199,0.18,6.21-0.54c5.5699-3.05,11.3-5.78,16.89-8.79 | |||
c-0.6801-3.46-2.39-6.5-4.5601-9.23c-1.7699-1.77,0.51-4.95,2.76-3.96c2.0601,0.3,2.65,2.42,2.86,4.18 | |||
c0.3,2.84,1.9801,5.22,3.63,7.45c6.9401-2.47,13.8401-5.08,20.8301-7.4c0.1799-5.44-2.22-10.55-2.0601-15.98 | |||
c1.66,0.07,3.3301,0.27,4.99,0.58c-0.6899,4.67-0.4099,9.46,1.41,13.86c5.34-0.98,10.9-1.67,15.6801-4.47 | |||
c-0.26-3.66,0.08-7.47-1.26-10.95c-0.5-1.57-1.4-3.22-0.62-4.86c1.4399-1.61,3.1699,0.01,4.74,0.54 | |||
c0.0399,4.26-0.37,9.1,2.45,12.67c3.5,3.53,8.7001,0.02,12.85-0.44c-0.02-3.3,0.12-6.61-0.0699-9.91 | |||
c-0.21-3.21-1.99-6.12-1.87-9.38c1.49,0.2,3.99-0.95,4.9299,0.81c1.1801,1.36,0.27,3.1,0.13,4.66 | |||
c-0.9399,4.43,1.02,8.74,2.2001,12.93c2.1799-1.01,4.38-3.14,6.89-1.66c2.88,1.46,6.0399,0.77,9.0499,0.12 | |||
c1.13-5.48,0.98-11.13,0.0701-16.63c-0.62-1.44,1.12-2.07,1.7999-3.02c0.9301,0.66,1.87,1.31,2.8301,1.97 | |||
c0.4299,6.01-1.39,12.45,1.3999,18.09c1.8101-0.77,3.4601-1.91,5.3-2.65c3.0601,0.35,5.87,1.98,9.05,1.86 | |||
C1422.6179,272.1071,1419.3679,265.6871,1420.7179,259.5871z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M1037.7379,448.7771c14.63-2.47,29.48-0.18,44.2-0.07 | |||
c24.6801,0.09,49.36,0.01,74.04,0.04c29.97-0.12,59.96-0.3,89.9099,0.99c12.54,0.51,25.2001-1.55,37.65,0.77 | |||
c12.65,2.24,24.8201,6.59,37.48,8.83c9.8301,1.92,19.9,2.02,29.89,2.12c30.12,0.27,59.98-4.3,90-5.89 | |||
c22.7101-1.07,45.6801-1,68.1001,3.21c7.1799,1.55,14.5399,3.32,20.7999,7.33c9.96,6.42,10.6901,23.6,0.34,29.99 | |||
c-7.6499,4.5-16.6,5.93-25.24,7.26c-25.1699,3.2-50.6799,2.35-75.85-0.42c-28.64-2.99-57.26-7.19-86.12-7.14 | |||
c-15.33,0.28-30.95,1.6-45.33,7.31c-2.51,5.84-6.5601,11.09-11.98,14.49c-5.2101,3.41-11.28,5.12-17.3201,6.31 | |||
c-1.37,6.55-0.6,13.26-0.99,19.89c-1.26,9.11-3.83,18.55-10.37,25.37c-1.02-1.08-2.46-2.02-2.45-3.65 | |||
c-0.4-5.65-1.24-11.45-3.87-16.53c-2.25,6.89-1.6101,14.32-3.7001,21.25c-5.3099-8.12-6.26-18.18-7.9399-27.52 | |||
c-0.86,9.16,0.37,18.54-2.05,27.51c-1.1-1.04-2.34-1.99-2.99-3.36c-3.58-7.5-3.66-16.07-6.62-23.76 | |||
c-2.02,8.98,1.6,18.31-1.0699,27.2c-6.55-5.41-5.63-14.91-9.1001-22.03c-1.5399,7.58,0.8401,15.4-1.08,22.93 | |||
c-5.73-7.11-4.45-16.95-8.22-24.92c-2.48,7.58,0.5299,15.91-2.28,23.38c-1.15,2.29-2.88-0.68-3.23-2 | |||
c-1.48-7.17-3.79-14.12-6.2101-21.01c-3.11,7.94,2.01,16.53-1.23,24.44c-1.34-1.09-2.7999-2.27-3.0599-4.09 | |||
c-1.14-4.92-2.1-9.9-3.74-14.68c-1.24-0.95-1.29,1.11-1.7201,1.78c-1.6,5.56,0.9501,11.5-1.23,17.02 | |||
c-6.45-6.34-3.46-16.39-6.7799-24.1c-1.63-0.44-1.64,1.41-2.02,2.47c-1.75,7.11,1.7999,15.1-2.38,21.67 | |||
c-4.35-8.13-5.05-17.49-5.8401-26.49c-4.22,8.27-0.47,18.02-3.8199,26.47c-6.99-5.69-1.88-16.56-8.4399-22.48 | |||
c-2.8,7.28,2.1499,15.94-2.77,22.51c-5.2001-7.15-2.3-16.84-6.5601-24.23c-4.8199,7.35,1.5,16.94-3.59,24.21 | |||
c-5.3201-7.35-1.9301-17.31-6.46-25.02c-2.64,8.09,0.6599,17.1-3.12,24.93c-6.7101-7.08-2.4-17.74-6.41-25.95 | |||
c-4.64,7.98,0.29,18.0099-4.59,25.9c-5.4901-6.48-1.4801-15.66-4.4801-23.01c-0.5399-1-1.0299-2.56-2.4399-1.94 | |||
c-2.54,8.13,2.3,17.92-3.48,25.05c-5.63-7.96-1.5701-18.27-4.72-26.9901c-6.26,7.34-0.6201,17.82-4.4501,26.1201 | |||
c-1.71-0.95-3.5699-2.1201-3.79-4.25c-1.5699-7.22,0.0801-14.78-2.0199-21.94c-6.5701,7.58-0.3501,18.65-5.3401,26.92 | |||
c-2.71-2.19-3.6499-5.63-3.6499-8.99c-0.4501-5.95,0.6699-12.28-2.16-17.8c-3.3201,8.59-1.63,18.03-3.8301,26.86 | |||
c-3.7699-2.45-4.47-7.03-4.47-11.17c-0.22-5.0099,0.5-10.17-0.99-15.04c-1.85-0.12-2.79,1.78-3.25,3.29 | |||
c-1.88,7.22,1.64,15.3-2.42,22.05c-6.7899-7.34-1.7599-18.15-4.87-26.8c-6.75,7.05,0.37,18.45-5.75,25.8701 | |||
c-6.5299-7.09-0.21-18.1-5.58-25.46c-3.17,8.16-0.92,17.21-3.59,25.49c-1.52-1.22-3.51-2.37-3.62-4.54 | |||
c-0.29-13.62-1.9401-27.21-3.8101-40.71c-4.99-0.13-10.1699-0.06-14.84-2.03c-4.1-8.78-7.7801-17.82-11.0801-26.95 | |||
c-3.35-10.74-2.62-22.84,2.53-32.89C1023.7478,455.4071,1030.1179,450.0171,1037.7379,448.7771z"/> | |||
<path stroke="#000000" stroke-width="0.0938" d="M1064.0979,626.1671c6.76-1.98,14.97-4.08,21.1699,0.47 | |||
c5.3601,4.11,5.88,11.38,8.9801,16.96c2.23,4.9,6.4399,10.03,12.4399,9.3c2.21,9.37,4.2,18.78,6.3201,28.17 | |||
c-3.9401,2.02-7.64,5.19-8.51,9.76c-1.53,7.82,1.1,16.18-2.04,23.74c-1.0701,2.64-3.75,4.09-6.42,4.6201 | |||
c-24.01,5.84-48.6599,8.1299-73.04,11.89c-21.67,3.64-43.3,7.51-65.01,10.92c-62.94,9.89-125.54,21.7599-188.08,33.86 | |||
c-14.35,3-28.96,4.95-43.02,9.24c-6.2,1.67-12.51,3.53-18.99,3.47c-4.73-0.47-6.94-5.36-9.93-8.39 | |||
c-9.05,2.59-18.57,5.56-28.04,3.79c-4.43-0.84-5.61-5.57-7.24-9.06c-1.05-2.39-3.83-3.24-6.23-2.67 | |||
c-8.9,1.49-17.69,3.51-26.46,5.62c-0.32,4.29,2.15,9.35-1.04,13.01c-0.42-0.04-1.25-0.12-1.67-0.16 | |||
c-1.6801-3.07-1.7-6.71-3.22-9.82c-1.77-2.55-5.09-0.77-7.48-0.37c-0.08,4.55,3.03,11.45-2.56,13.87 | |||
c-1.12-3.93-1.29-8.37-3.88-11.69c-1.84-2.35-4.7-0.44-6.59,0.78c-0.18,4.45,2.45,9.95-1.72,13.31c-2.9-2.87-2.6-7.12-4.02-10.66 | |||
c-1.22-2.74-5.08-1.7599-6.86-0.18c-1.77,2.64-0.28,6.01-0.37,8.96c0.35,1.95-1.03,4.7-3.33,3.78c-1.24-3.08-1.16-6.53-2.46-9.57 | |||
c-1.48-3.38-7.66-1.88-7.69,1.71c-0.18,3.96,1.86,9.33-2.81,11.38c-1.49-3.42-1.42-7.3-3.1-10.62c-1.42-2.39-4.95-1.76-6.76-0.19 | |||
c-1.96,2.51,0.02,5.74,0.03,8.56c0.57,2.34-1.43,4.63-3.79,4.5c-1.29-3.24-1-6.88-2.38-10.07c-1.37-2.7-6.87-3.12-7.24,0.49 | |||
c-0.66,4.21,1.51,9.9-3.23,12.41c-2.09-4.76-2.8-10.87-7.61-13.8c-3.62,3.31-2.43,8.21-2.52,12.55c0.1,1.87-1.77,2.86-2.86,4.07 | |||
c-2.43-4.03-2.09-9.56-5.83-12.76c-1.96-0.34-3.58,1.01-5.26,1.74c0.48,4.59,3.21,10.95-2.06,13.76 | |||
c-2.24-3.74-2.38-8.36-4.81-11.98c-1.81-2.7401-6.89-0.14-6.01,2.93c0.34,4.06,1.95,9.73-2.92,11.75c-1.94-3.84-2.01-8.49-4.55-12 | |||
c-1.84-2.17-4.44,0.26-6.3,1.18c0.98,4.49,3.15,11.31-2.51,13.54c-1.61-3.7-1.36-8.07-3.64-11.47c-1.91-1.54-4.7-0.62-6.3,0.92 | |||
c-1.24,2.97,1.16,6.11,0.36,9.13c-0.39,1.31-1.48,2.96-3.09,2.59c-2.07-3-2.29-6.9901-4.83-9.6801 | |||