1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/ihatemoney_ynh.git synced 2024-09-03 19:26:15 +02:00

Remove now useless source files

This commit is contained in:
Jocelyn Delalande 2017-06-17 00:44:49 +02:00
parent c114aa6ac8
commit f65c46a410
89 changed files with 0 additions and 9128 deletions

View file

@ -1,7 +0,0 @@
language: python
python:
- "2.7"
# command to install dependencies
install: "pip install -r budget/requirements.txt"
# command to run tests
script: cd budget && python tests.py

View file

@ -1,2 +0,0 @@
The project has been started by Alexis Métaireau and Frédéric Sureau. Friends are
helping since that in the persons of Arnaud Bos and Quentin Roy.

View file

@ -1,37 +0,0 @@
Copyright (c) 2011 by Alexis Métaireau and contributors. See AUTHORS
for more details.
Some rights reserved.
Redistribution and use in source and binary forms of the software as well
as documentation, with or without modification, are permitted provided
that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.
* If you meet the authors of this software in person and you want to
pay them a beer, you're encouraged to do so. Please, do. If you have
homebrewed beer, this works as well (may even be better).
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

View file

@ -1 +0,0 @@
web: python budget/run.py

View file

@ -1,100 +0,0 @@
Budget-manager
##############
.. image:: https://travis-ci.org/spiral-project/ihatemoney.svg?branch=master
:target: https://travis-ci.org/spiral-project/ihatemoney
:alt: Travis CI Build Status
This is a really tiny app to ease the shared houses budget management. Keep
track of who bought what, when, and for who to then compute the balance of each
person.
The code is distributed under a BSD beerware derivative: if you meet the people
in person and you want to pay them a beer, you are encouraged to do so (see
LICENSE for more details).
Make it run!
============
To make it run, you just have to do something like::
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r budget/requirements.txt
$ cd budget
$ python run.py
It is also better to actually turn the debugging mode on when you're
developing. You can create a `settings.py` file in the `budget` directory, with
the following content::
DEBUG = True
SQLACHEMY_ECHO = DEBUG
You can also set the `TESTING` flag to `True` so no mails are sent
(and no exception is raised) while you're on development mode.
Deploy it
=========
To deploy it, I'm using gunicorn and supervisord::
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
1. Add the lines in conf/supervisord.conf to your supervisord.conf file.
**adapt them to your paths!**
2. Copy and paste the content of conf/nginx.conf in your nginx conf file.
**adapt them to your paths!**
3. reload both nginx and supervisord. It should be working ;)
Don't forget to set the right permission for your files !
Also, create a `settings.py` file with the appropriate values if you need to
use a different database for instance. You can also set `APPLICATION_ROOT` if
you want to prefix your URLs to serve ihatemonney in the *folder* of a domain,
e.g:
APPLICATION_ROOT='/budget'
How about the REST API?
=======================
Yep, you're right, there is a REST API with this. Head to the `api
documentation <https://ihatemoney.readthedocs.io/en/latest/api.html>`_ to know more.
How to contribute
=================
There are different ways to help us, regarding if you are a designer,
a developer or just an user.
As a developer
--------------
The best way to contribute code is to write it and to make a pull request on
github. Please, think about updating and running the tests before asking for
a pull request as it will help us to maintain the code clean and running.
To do so::
$ workon budget
(budget) $ python tests.py
before pushing anything to master :)
As a designer / Front-end developer
-----------------------------------
Feel free to provide us mockups or to involve yourself into the discussions
hapenning on the github issue tracker. All ideas are welcome. Of course, if you
know how to implement them, feel free to fork and make a pull request.
End-user
--------
You just wanted to have a look at the application and found a bug? Please tell
us and go fill a new issue:
https://github.com/spiral-project/ihatemoney/issues

View file

@ -1,154 +0,0 @@
# -*- coding: utf-8 -*-
from flask import Blueprint, request
from flask_rest import RESTResource, need_auth
from models import db, Project, Person, Bill
from forms import (ProjectForm, EditProjectForm, MemberForm,
get_billform_for)
api = Blueprint("api", __name__, url_prefix="/api")
def check_project(*args, **kwargs):
"""Check the request for basic authentication for a given project.
Return the project if the authorization is good, False otherwise
"""
auth = request.authorization
# project_id should be contained in kwargs and equal to the username
if auth and "project_id" in kwargs and \
auth.username == kwargs["project_id"]:
project = Project.query.get(auth.username)
if project and project.password == auth.password:
return project
return False
class ProjectHandler(object):
def add(self):
form = ProjectForm(csrf_enabled=False)
if form.validate():
project = form.save()
db.session.add(project)
db.session.commit()
return 201, project.id
return 400, form.errors
@need_auth(check_project, "project")
def get(self, project):
return 200, project
@need_auth(check_project, "project")
def delete(self, project):
db.session.delete(project)
db.session.commit()
return 200, "DELETED"
@need_auth(check_project, "project")
def update(self, project):
form = EditProjectForm(csrf_enabled=False)
if form.validate():
form.update(project)
db.session.commit()
return 200, "UPDATED"
return 400, form.errors
class MemberHandler(object):
def get(self, project, member_id):
member = Person.query.get(member_id, project)
if not member or member.project != project:
return 404, "Not Found"
return 200, member
def list(self, project):
return 200, project.members
def add(self, project):
form = MemberForm(project, csrf_enabled=False)
if form.validate():
member = Person()
form.save(project, member)
db.session.commit()
return 201, member.id
return 400, form.errors
def update(self, project, member_id):
form = MemberForm(project, csrf_enabled=False)
if form.validate():
member = Person.query.get(member_id, project)
form.save(project, member)
db.session.commit()
return 200, member
return 400, form.errors
def delete(self, project, member_id):
if project.remove_member(member_id):
return 200, "OK"
return 404, "Not Found"
class BillHandler(object):
def get(self, project, bill_id):
bill = Bill.query.get(project, bill_id)
if not bill:
return 404, "Not Found"
return 200, bill
def list(self, project):
return project.get_bills().all()
def add(self, project):
form = get_billform_for(project, True, csrf_enabled=False)
if form.validate():
bill = Bill()
form.save(bill, project)
db.session.add(bill)
db.session.commit()
return 201, bill.id
return 400, form.errors
def update(self, project, bill_id):
form = get_billform_for(project, True, csrf_enabled=False)
if form.validate():
bill = Bill.query.get(project, bill_id)
form.save(bill, project)
db.session.commit()
return 200, bill.id
return 400, form.errors
def delete(self, project, bill_id):
bill = Bill.query.delete(project, bill_id)
db.session.commit()
if not bill:
return 404, "Not Found"
return 200, "OK"
project_resource = RESTResource(
name="project",
route="/projects",
app=api,
actions=["add", "update", "delete", "get"],
handler=ProjectHandler())
member_resource = RESTResource(
name="member",
inject_name="project",
route="/projects/<project_id>/members",
app=api,
handler=MemberHandler(),
authentifier=check_project)
bill_resource = RESTResource(
name="bill",
inject_name="project",
route="/projects/<project_id>/bills",
app=api,
handler=BillHandler(),
authentifier=check_project)

View file

@ -1,3 +0,0 @@
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

View file

@ -1,6 +0,0 @@
DEBUG = False
SQLALCHEMY_DATABASE_URI = 'sqlite:///budget.db'
SQLACHEMY_ECHO = DEBUG
SECRET_KEY = "tralala"
MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org")

View file

@ -1,189 +0,0 @@
from flask_wtf import DateField, DecimalField, Email, Form, PasswordField, \
Required, SelectField, SelectMultipleField, SubmitField, TextAreaField, \
TextField, ValidationError
from flask_babel import lazy_gettext as _
from flask import request
from wtforms.widgets import html_params
from models import Project, Person
from datetime import datetime
from jinja2 import Markup
from utils import slugify
def get_billform_for(project, set_default=True, **kwargs):
"""Return an instance of BillForm configured for a particular project.
:set_default: if set to True, on GET methods (usually when we want to
display the default form, it will call set_default on it.
"""
form = BillForm(**kwargs)
form.payed_for.choices = form.payer.choices = [(m.id, m.name)
for m in project.active_members]
form.payed_for.default = [m.id for m in project.active_members]
if set_default and request.method == "GET":
form.set_default()
return form
class CommaDecimalField(DecimalField):
"""A class to deal with comma in Decimal Field"""
def process_formdata(self, value):
if value:
value[0] = str(value[0]).replace(',', '.')
return super(CommaDecimalField, self).process_formdata(value)
class EditProjectForm(Form):
name = TextField(_("Project name"), validators=[Required()])
password = TextField(_("Private code"), validators=[Required()])
contact_email = TextField(_("Email"), validators=[Required(), Email()])
def save(self):
"""Create a new project with the information given by this form.
Returns the created instance
"""
project = Project(name=self.name.data, id=self.id.data,
password=self.password.data,
contact_email=self.contact_email.data)
return project
def update(self, project):
"""Update the project with the information from the form"""
project.name = self.name.data
project.password = self.password.data
project.contact_email = self.contact_email.data
return project
class ProjectForm(EditProjectForm):
id = TextField(_("Project identifier"), validators=[Required()])
password = PasswordField(_("Private code"), validators=[Required()])
submit = SubmitField(_("Create the project"))
def validate_id(form, field):
form.id.data = slugify(field.data)
if (form.id.data == "dashboard") or Project.query.get(form.id.data):
raise ValidationError(Markup(_("The project identifier is used "
"to log in and for the URL of the project. "
"We tried to generate an identifier for you but a project "
"with this identifier already exists. "
"Please create a new identifier "
"that you will be able to remember.")))
class AuthenticationForm(Form):
id = TextField(_("Project identifier"), validators=[Required()])
password = PasswordField(_("Private code"), validators=[Required()])
submit = SubmitField(_("Get in"))
class PasswordReminder(Form):
id = TextField(_("Project identifier"), validators=[Required()])
submit = SubmitField(_("Send me the code by email"))
def validate_id(form, field):
if not Project.query.get(field.data):
raise ValidationError(_("This project does not exists"))
class BillForm(Form):
date = DateField(_("Date"), validators=[Required()], default=datetime.now)
what = TextField(_("What?"), validators=[Required()])
payer = SelectField(_("Payer"), validators=[Required()], coerce=int)
amount = CommaDecimalField(_("Amount paid"), validators=[Required()])
payed_for = SelectMultipleField(_("For whom?"),
validators=[Required()], coerce=int)
submit = SubmitField(_("Submit"))
submit2 = SubmitField(_("Submit and add a new one"))
def save(self, bill, project):
bill.payer_id = self.payer.data
bill.amount = self.amount.data
bill.what = self.what.data
bill.date = self.date.data
bill.owers = [Person.query.get(ower, project)
for ower in self.payed_for.data]
return bill
def fill(self, bill):
self.payer.data = bill.payer_id
self.amount.data = bill.amount
self.what.data = bill.what
self.date.data = bill.date
self.payed_for.data = [int(ower.id) for ower in bill.owers]
def set_default(self):
self.payed_for.data = self.payed_for.default
def validate_amount(self, field):
if field.data == 0:
raise ValidationError(_("Bills can't be null"))
class MemberForm(Form):
name = TextField(_("Name"), validators=[Required()])
weight = CommaDecimalField(_("Weight"), default=1)
submit = SubmitField(_("Add"))
def __init__(self, project, edit=False, *args, **kwargs):
super(MemberForm, self).__init__(*args, **kwargs)
self.project = project
self.edit = edit
def validate_name(form, field):
if field.data == form.name.default:
raise ValidationError(_("User name incorrect"))
if (not form.edit and Person.query.filter(
Person.name == field.data,
Person.project == form.project,
Person.activated == True).all()):
raise ValidationError(_("This project already have this member"))
def save(self, project, person):
# if the user is already bound to the project, just reactivate him
person.name = self.name.data
person.project = project
person.weight = self.weight.data
return person
def fill(self, member):
self.name.data = member.name
self.weight.data = member.weight
class InviteForm(Form):
emails = TextAreaField(_("People to notify"))
submit = SubmitField(_("Send invites"))
def validate_emails(form, field):
validator = Email()
for email in [email.strip() for email in form.emails.data.split(",")]:
if not validator.regex.match(email):
raise ValidationError(_("The email %(email)s is not valid",
email=email))
class CreateArchiveForm(Form):
name = TextField(_("Name for this archive (optional)"), validators=[])
start_date = DateField(_("Start date"), validators=[Required()])
end_date = DateField(_("End date"), validators=[Required()], default=datetime.now)
class ExportForm(Form):
export_type = SelectField(_("What do you want to download ?"),
validators=[Required()],
coerce=str,
choices=[("bills", _("bills")), ("transactions", _("transactions"))]
)
export_format = SelectField(_("Export file format"),
validators=[Required()],
coerce=str,
choices=[("csv", "csv"), ("json", "json")]
)

View file

@ -1,16 +0,0 @@
#!/usr/bin/env python
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from run import app
from models import db
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()

View file

@ -1,10 +0,0 @@
"""
Merges default settings with user-defined settings
"""
from default_settings import *
try:
from settings import *
except ImportError:
pass

View file

@ -1,492 +0,0 @@
# Translations template for PROJECT.
# Copyright (C) 2013 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2013-10-13 21:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
#: forms.py:22
msgid "Select all"
msgstr ""
#: forms.py:22
msgid "Select none"
msgstr ""
#: forms.py:61
msgid "Project name"
msgstr ""
#: forms.py:62 forms.py:86 forms.py:102
msgid "Private code"
msgstr ""
#: forms.py:63
msgid "Email"
msgstr ""
#: forms.py:85 forms.py:101 forms.py:107
msgid "Project identifier"
msgstr ""
#: forms.py:87 templates/send_invites.html:5
msgid "Create the project"
msgstr ""
#: forms.py:92
msgid ""
"The project identifier is used to log in and for the URL of the project. "
"We tried to generate an identifier for you but a project with this "
"identifier already exists. Please create a new identifier that you will "
"be able to remember."
msgstr ""
#: forms.py:103
msgid "Get in"
msgstr ""
#: forms.py:108
msgid "Send me the code by email"
msgstr ""
#: forms.py:112
msgid "This project does not exists"
msgstr ""
#: forms.py:116
msgid "Date"
msgstr ""
#: forms.py:117
msgid "What?"
msgstr ""
#: forms.py:118
msgid "Payer"
msgstr ""
#: forms.py:119
msgid "Amount paid"
msgstr ""
#: forms.py:120 templates/list_bills.html:103
msgid "For whom?"
msgstr ""
#: forms.py:122
msgid "Submit"
msgstr ""
#: forms.py:123
msgid "Submit and add a new one"
msgstr ""
#: forms.py:149
msgid "Bills can't be null"
msgstr ""
#: forms.py:154
msgid "Name"
msgstr ""
#: forms.py:155 templates/forms.html:95
msgid "Add"
msgstr ""
#: forms.py:163
msgid "User name incorrect"
msgstr ""
#: forms.py:167
msgid "This project already have this member"
msgstr ""
#: forms.py:178
msgid "People to notify"
msgstr ""
#: forms.py:179
msgid "Send invites"
msgstr ""
#: forms.py:185
#, python-format
msgid "The email %(email)s is not valid"
msgstr ""
#: forms.py:190
msgid "Name for this archive (optional)"
msgstr ""
#: forms.py:191
msgid "Start date"
msgstr ""
#: forms.py:192
msgid "End date"
msgstr ""
#: web.py:95
msgid "This private code is not the right one"
msgstr ""
#: web.py:147
#, python-format
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
#: web.py:165
#, python-format
msgid "%(msg_compl)sThe project identifier is %(project)s"
msgstr ""
#: web.py:185
msgid "a mail has been sent to you with the password"
msgstr ""
#: web.py:211
msgid "Project successfully deleted"
msgstr ""
#: web.py:254
#, python-format
msgid "You have been invited to share your expenses for %(project)s"
msgstr ""
#: web.py:261
msgid "Your invitations have been sent"
msgstr ""
#: web.py:290
#, python-format
msgid "%(member)s had been added"
msgstr ""
#: web.py:303
#, python-format
msgid "%(name)s is part of this project again"
msgstr ""
#: web.py:312
#, python-format
msgid "User '%(name)s' has been deactivated"
msgstr ""
#: web.py:314
#, python-format
msgid "User '%(name)s' has been removed"
msgstr ""
#: web.py:331
msgid "The bill has been added"
msgstr ""
#: web.py:351
msgid "The bill has been deleted"
msgstr ""
#: web.py:369
msgid "The bill has been modified"
msgstr ""
#: web.py:399
msgid "The data from XX to XX has been archived"
msgstr ""
#: templates/add_bill.html:9
msgid "Back to the list"
msgstr ""
#: templates/authenticate.html:6
msgid ""
"The project you are trying to access do not exist, do you want \n"
"to"
msgstr ""
#: templates/authenticate.html:7
msgid "create it"
msgstr ""
#: templates/authenticate.html:7
msgid "?"
msgstr ""
#: templates/create_project.html:4
msgid "Create a new project"
msgstr ""
#: templates/dashboard.html:5
msgid "Project"
msgstr ""
#: templates/dashboard.html:5
msgid "Number of members"
msgstr ""
#: templates/dashboard.html:5
msgid "Number of bills"
msgstr ""
#: templates/dashboard.html:5
msgid "Newest bill"
msgstr ""
#: templates/dashboard.html:5
msgid "Oldest bill"
msgstr ""
#: templates/edit_project.html:6 templates/list_bills.html:24
msgid "you sure?"
msgstr ""
#: templates/edit_project.html:11
msgid "Edit this project"
msgstr ""
#: templates/forms.html:23
msgid "Can't remember the password?"
msgstr ""
#: templates/forms.html:26
msgid "Cancel"
msgstr ""
#: templates/forms.html:68
msgid "Edit the project"
msgstr ""
#: templates/forms.html:69 templates/list_bills.html:70
#: templates/list_bills.html:114
msgid "delete"
msgstr ""
#: templates/forms.html:77
msgid "Edit this bill"
msgstr ""
#: templates/forms.html:77 templates/list_bills.html:94
msgid "Add a bill"
msgstr ""
#: templates/forms.html:95
msgid "Type user name here"
msgstr ""
#: templates/forms.html:102
msgid "Send the invitations"
msgstr ""
#: templates/forms.html:103
msgid "No, thanks"
msgstr ""
#: templates/forms.html:109
msgid "Create an archive"
msgstr ""
#: templates/forms.html:116
msgid "Create the archive"
msgstr ""
#: templates/home.html:8
msgid "Manage your shared <br>expenses, easily"
msgstr ""
#: templates/home.html:9
msgid "Try out the demo"
msgstr ""
#: templates/home.html:12
msgid "You're sharing a house?"
msgstr ""
#: templates/home.html:12
msgid "Going on holidays with friends?"
msgstr ""
#: templates/home.html:12
msgid "Simply sharing money with others?"
msgstr ""
#: templates/home.html:12
msgid "We can help!"
msgstr ""
#: templates/home.html:24
msgid "Log to an existing project"
msgstr ""
#: templates/home.html:28
msgid "log in"
msgstr ""
#: templates/home.html:29
msgid "can't remember your password?"
msgstr ""
#: templates/home.html:36
msgid "or create a new one"
msgstr ""
#: templates/home.html:40
msgid "let's get started"
msgstr ""
#: templates/home.html:51
msgid ""
"This access code will be sent to your friends. It is stored as-is by the "
"server, so don\\'t reuse a personal password!"
msgstr ""
#: templates/layout.html:5
msgid "Account manager"
msgstr ""
#: templates/layout.html:45 templates/settle_bills.html:4
msgid "Bills"
msgstr ""
#: templates/layout.html:46 templates/settle_bills.html:5
msgid "Settle"
msgstr ""
#: templates/layout.html:53
msgid "options"
msgstr ""
#: templates/layout.html:55
msgid "Project settings"
msgstr ""
#: templates/layout.html:59
msgid "switch to"
msgstr ""
#: templates/layout.html:62
msgid "Start a new project"
msgstr ""
#: templates/layout.html:64
msgid "Logout"
msgstr ""
#: templates/layout.html:92
msgid "This is a free software"
msgstr ""
#: templates/layout.html:92
msgid "you can contribute and improve it!"
msgstr ""
#: templates/list_bills.html:74
msgid "reactivate"
msgstr ""
#: templates/list_bills.html:88
msgid "The project identifier is"
msgstr ""
#: templates/list_bills.html:88
msgid "remember it!"
msgstr ""
#: templates/list_bills.html:89
msgid "Add a new bill"
msgstr ""
#: templates/list_bills.html:103
msgid "When?"
msgstr ""
#: templates/list_bills.html:103
msgid "Who paid?"
msgstr ""
#: templates/list_bills.html:103
msgid "For what?"
msgstr ""
#: templates/list_bills.html:103 templates/settle_bills.html:31
msgid "How much?"
msgstr ""
#: templates/list_bills.html:103
msgid "Actions"
msgstr ""
#: templates/list_bills.html:111
msgid "each"
msgstr ""
#: templates/list_bills.html:113
msgid "edit"
msgstr ""
#: templates/list_bills.html:122
msgid "Nothing to list yet. You probably want to"
msgstr ""
#: templates/list_bills.html:122
msgid "add a bill"
msgstr ""
#: templates/password_reminder.html:4
msgid "Password reminder"
msgstr ""
#: templates/recent_projects.html:2
msgid "Your projects"
msgstr ""
#: templates/send_invites.html:6
msgid "Invite people"
msgstr ""
#: templates/send_invites.html:7
msgid "Use it!"
msgstr ""
#: templates/send_invites.html:11
msgid "Invite people to join this project"
msgstr ""
#: templates/send_invites.html:12
msgid ""
"Specify a (coma separated) list of email adresses you want to notify "
"about the \n"
"creation of this budget management project and we will send them an email"
" for you."
msgstr ""
#: templates/send_invites.html:14
msgid "If you prefer, you can"
msgstr ""
#: templates/send_invites.html:14
msgid "skip this step"
msgstr ""
#: templates/send_invites.html:14
msgid "and notify them yourself"
msgstr ""
#: templates/settle_bills.html:31
msgid "Who pays?"
msgstr ""
#: templates/settle_bills.html:31
msgid "To whom?"
msgstr ""

View file

@ -1 +0,0 @@
Generic single-database configuration.

View file

@ -1,45 +0,0 @@
# A generic, single database configuration.
[alembic]
# template used to generate migration files
# file_template = %%(rev)s_%%(slug)s
# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

View file

@ -1,85 +0,0 @@
from __future__ import with_statement
from alembic import context
from sqlalchemy import engine_from_config, pool
from logging.config import fileConfig
import logging
# This is the Alembic Config object, which provides access to the values within
# the .ini file in use.
config = context.config
# Interpret the config file for Python logging. This line sets up loggers
# basically.
fileConfig(config.config_file_name)
logger = logging.getLogger('alembic.env')
# Add your model's MetaData object here for 'autogenerate' support from myapp
# import mymodel target_metadata = mymodel.Base.metadata.
from flask import current_app
config.set_main_option('sqlalchemy.url',
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
target_metadata = current_app.extensions['migrate'].db.metadata
# Other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.
def run_migrations_offline():
"""Run migrations in 'offline' mode.
This configures the context with just a URL
and not an Engine, though an Engine is acceptable
here as well. By skipping the Engine creation
we don't even need a DBAPI to be available.
Calls to context.execute() here emit the given string to the
script output.
"""
url = config.get_main_option("sqlalchemy.url")
context.configure(url=url)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online():
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
# This callback is used to prevent an auto-migration from being generated
# when there are no changes to the schema.
# reference: https://alembic.readthedocs.io/en/latest/cookbook.html
def process_revision_directives(context, revision, directives):
if getattr(config.cmd_opts, 'autogenerate', False):
script = directives[0]
if script.upgrade_ops.is_empty():
directives[:] = []
logger.info('No changes in schema detected.')
engine = engine_from_config(config.get_section(config.config_ini_section),
prefix='sqlalchemy.',
poolclass=pool.NullPool)
connection = engine.connect()
context.configure(connection=connection,
target_metadata=target_metadata,
process_revision_directives=process_revision_directives,
**current_app.extensions['migrate'].configure_args)
try:
with context.begin_transaction():
context.run_migrations()
finally:
connection.close()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()

View file

@ -1,22 +0,0 @@
"""${message}
Revision ID: ${up_revision}
Revises: ${down_revision}
Create Date: ${create_date}
"""
# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}
def upgrade():
${upgrades if upgrades else "pass"}
def downgrade():
${downgrades if downgrades else "pass"}

View file

@ -1,26 +0,0 @@
"""Add Person.weight column
Revision ID: 26d6a218c329
Revises: b9a10d5d63ce
Create Date: 2016-06-15 09:22:04.069447
"""
# revision identifiers, used by Alembic.
revision = '26d6a218c329'
down_revision = 'b9a10d5d63ce'
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('person', sa.Column('weight', sa.Float(), nullable=True))
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_column('person', 'weight')
### end Alembic commands ###

View file

@ -1,68 +0,0 @@
"""Initial migration
Revision ID: b9a10d5d63ce
Revises: None
Create Date: 2016-05-21 23:21:21.605076
"""
# revision identifiers, used by Alembic.
revision = 'b9a10d5d63ce'
down_revision = None
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('project',
sa.Column('id', sa.String(length=64), nullable=False),
sa.Column('name', sa.UnicodeText(), nullable=True),
sa.Column('password', sa.String(length=128), nullable=True),
sa.Column('contact_email', sa.String(length=128), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.create_table('archive',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('project_id', sa.String(length=64), nullable=True),
sa.Column('name', sa.UnicodeText(), nullable=True),
sa.ForeignKeyConstraint(['project_id'], ['project.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('person',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('project_id', sa.String(length=64), nullable=True),
sa.Column('name', sa.UnicodeText(), nullable=True),
sa.Column('activated', sa.Boolean(), nullable=True),
sa.ForeignKeyConstraint(['project_id'], ['project.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('bill',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('payer_id', sa.Integer(), nullable=True),
sa.Column('amount', sa.Float(), nullable=True),
sa.Column('date', sa.Date(), nullable=True),
sa.Column('what', sa.UnicodeText(), nullable=True),
sa.Column('archive', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['archive'], ['archive.id'], ),
sa.ForeignKeyConstraint(['payer_id'], ['person.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('billowers',
sa.Column('bill_id', sa.Integer(), nullable=True),
sa.Column('person_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['bill_id'], ['bill.id'], ),
sa.ForeignKeyConstraint(['person_id'], ['person.id'], )
)
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_table('billowers')
op.drop_table('bill')
op.drop_table('person')
op.drop_table('archive')
op.drop_table('project')
### end Alembic commands ###

View file

@ -1,39 +0,0 @@
"""Initialize all members weights to 1
Revision ID: f629c8ef4ab0
Revises: 26d6a218c329
Create Date: 2016-06-15 09:40:30.400862
"""
# revision identifiers, used by Alembic.
revision = 'f629c8ef4ab0'
down_revision = '26d6a218c329'
from alembic import op
import sqlalchemy as sa
# Snapshot of the person table
person_helper = sa.Table(
'person', sa.MetaData(),
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('project_id', sa.String(length=64), nullable=True),
sa.Column('name', sa.UnicodeText(), nullable=True),
sa.Column('activated', sa.Boolean(), nullable=True),
sa.Column('weight', sa.Float(), nullable=True),
sa.ForeignKeyConstraint(['project_id'], ['project.id'], ),
sa.PrimaryKeyConstraint('id')
)
def upgrade():
op.execute(
person_helper.update()
.where(person_helper.c.weight == None)
.values(weight=1)
)
def downgrade():
# Downgrade path is not possible, because information has been lost.
pass

View file

@ -1,283 +0,0 @@
from collections import defaultdict
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy, BaseQuery
from flask import g
from sqlalchemy import orm
db = SQLAlchemy()
# define models
class Project(db.Model):
_to_serialize = ("id", "name", "password", "contact_email",
"members", "active_members", "balance")
id = db.Column(db.String(64), primary_key=True)
name = db.Column(db.UnicodeText)
password = db.Column(db.String(128))
contact_email = db.Column(db.String(128))
members = db.relationship("Person", backref="project")
@property
def active_members(self):
return [m for m in self.members if m.activated]
@property
def balance(self):
balances, should_pay, should_receive = (defaultdict(int)
for time in (1, 2, 3))
# for each person
for person in self.members:
# get the list of bills he has to pay
bills = Bill.query.options(orm.subqueryload(Bill.owers)).filter(Bill.owers.contains(person))
for bill in bills.all():
if person != bill.payer:
share = bill.pay_each() * person.weight
should_pay[person] += share
should_receive[bill.payer] += share
for person in self.members:
balance = should_receive[person] - should_pay[person]
balances[person.id] = balance
return balances
@property
def uses_weights(self):
return len([i for i in self.members if i.weight != 1]) > 0
def get_transactions_to_settle_bill(self, pretty_output=False):
"""Return a list of transactions that could be made to settle the bill"""
def prettify(transactions, pretty_output):
""" Return pretty transactions
"""
if not pretty_output:
return transactions
pretty_transactions = []
for transaction in transactions:
pretty_transactions.append({'ower': transaction['ower'].name,
'receiver': transaction['receiver'].name,
'amount': round(transaction['amount'], 2)})
return pretty_transactions
#cache value for better performance
balance = self.balance
credits, debts, transactions = [],[],[]
# Create lists of credits and debts
for person in self.members:
if round(balance[person.id], 2) > 0:
credits.append({"person": person, "balance": balance[person.id]})
elif round(balance[person.id], 2) < 0:
debts.append({"person": person, "balance": -balance[person.id]})
# Try and find exact matches
for credit in credits:
match = self.exactmatch(round(credit["balance"], 2), debts)
if match:
for m in match:
transactions.append({"ower": m["person"], "receiver": credit["person"], "amount": m["balance"]})
debts.remove(m)
credits.remove(credit)
# Split any remaining debts & credits
while credits and debts:
if credits[0]["balance"] > debts[0]["balance"]:
transactions.append({"ower": debts[0]["person"], "receiver": credits[0]["person"], "amount": debts[0]["balance"]})
credits[0]["balance"] = credits[0]["balance"] - debts[0]["balance"]
del debts[0]
else:
transactions.append({"ower": debts[0]["person"], "receiver": credits[0]["person"], "amount": credits[0]["balance"]})
debts[0]["balance"] = debts[0]["balance"] - credits[0]["balance"]
del credits[0]
return prettify(transactions, pretty_output)
def exactmatch(self, credit, debts):
"""Recursively try and find subsets of 'debts' whose sum is equal to credit"""
if not debts:
return None
if debts[0]["balance"] > credit:
return self.exactmatch(credit, debts[1:])
elif debts[0]["balance"] == credit:
return [debts[0]]
else:
match = self.exactmatch(credit-debts[0]["balance"], debts[1:])
if match:
match.append(debts[0])
else:
match = self.exactmatch(credit, debts[1:])
return match
def has_bills(self):
"""return if the project do have bills or not"""
return self.get_bills().count() > 0
def get_bills(self):
"""Return the list of bills related to this project"""
return Bill.query.join(Person, Project)\
.filter(Bill.payer_id == Person.id)\
.filter(Person.project_id == Project.id)\
.filter(Project.id == self.id)\
.order_by(Bill.date.desc())\
.order_by(Bill.id.desc())
def get_pretty_bills(self, export_format="json"):
"""Return a list of project's bills with pretty formatting"""
bills = self.get_bills()
pretty_bills = []
for bill in bills:
if export_format == "json":
owers = [ower.name for ower in bill.owers]
else:
owers = ', '.join([ower.name for ower in bill.owers])
pretty_bills.append({"what": bill.what,
"amount": round(bill.amount, 2),
"date": str(bill.date),
"payer_name": Person.query.get(bill.payer_id).name,
"payer_weight": Person.query.get(bill.payer_id).weight,
"owers": owers})
return pretty_bills
def remove_member(self, member_id):
"""Remove a member from the project.
If the member is not bound to a bill, then he is deleted, otherwise
he is only deactivated.
This method returns the status DELETED or DEACTIVATED regarding the
changes made.
"""
try:
person = Person.query.get(member_id, self)
except orm.exc.NoResultFound:
return None
if not person.has_bills():
db.session.delete(person)
db.session.commit()
else:
person.activated = False
db.session.commit()
return person
def remove_project(self):
db.session.delete(self)
db.session.commit()
def __repr__(self):
return "<Project %s>" % self.name
class Person(db.Model):
class PersonQuery(BaseQuery):
def get_by_name(self, name, project):
return Person.query.filter(Person.name == name)\
.filter(Project.id == project.id).one()
def get(self, id, project=None):
if not project:
project = g.project
return Person.query.filter(Person.id == id)\
.filter(Project.id == project.id).one()
query_class = PersonQuery
_to_serialize = ("id", "name", "weight", "activated")
id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.String(64), db.ForeignKey("project.id"))
bills = db.relationship("Bill", backref="payer")
name = db.Column(db.UnicodeText)
weight = db.Column(db.Float, default=1)
activated = db.Column(db.Boolean, default=True)
def has_bills(self):
"""return if the user do have bills or not"""
bills_as_ower_number = db.session.query(billowers)\
.filter(billowers.columns.get("person_id") == self.id)\
.count()
return bills_as_ower_number != 0 or len(self.bills) != 0
def __str__(self):
return self.name
def __repr__(self):
return "<Person %s for project %s>" % (self.name, self.project.name)
# We need to manually define a join table for m2m relations
billowers = db.Table('billowers',
db.Column('bill_id', db.Integer, db.ForeignKey('bill.id')),
db.Column('person_id', db.Integer, db.ForeignKey('person.id')),
)
class Bill(db.Model):
class BillQuery(BaseQuery):
def get(self, project, id):
try:
return self.join(Person, Project)\
.filter(Bill.payer_id == Person.id)\
.filter(Person.project_id == Project.id)\
.filter(Project.id == project.id)\
.filter(Bill.id == id).one()
except orm.exc.NoResultFound:
return None
def delete(self, project, id):
bill = self.get(project, id)
if bill:
db.session.delete(bill)
return bill
query_class = BillQuery
_to_serialize = ("id", "payer_id", "owers", "amount", "date", "what")
id = db.Column(db.Integer, primary_key=True)
payer_id = db.Column(db.Integer, db.ForeignKey("person.id"))
owers = db.relationship(Person, secondary=billowers)
amount = db.Column(db.Float)
date = db.Column(db.Date, default=datetime.now)
what = db.Column(db.UnicodeText)
archive = db.Column(db.Integer, db.ForeignKey("archive.id"))
def pay_each(self):
"""Compute what each share has to pay"""
if self.owers:
# FIXME: SQL might dot that more efficiently
return self.amount / sum(i.weight for i in self.owers)
else:
return 0
def __repr__(self):
return "<Bill of %s from %s for %s>" % (self.amount,
self.payer, ", ".join([o.name for o in self.owers]))
class Archive(db.Model):
id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.String(64), db.ForeignKey("project.id"))
name = db.Column(db.UnicodeText)
@property
def start_date(self):
pass
@property
def end_date(self):
pass
def __repr__(self):
return "<Archive>"

View file

@ -1,10 +0,0 @@
flask>=0.9
flask-wtf==0.8
flask-sqlalchemy
flask-mail>=0.8
Flask-Migrate==1.8.0
flask-babel
flask-rest
jinja2==2.6
raven
blinker

View file

@ -1,90 +0,0 @@
import os
import warnings
from flask import Flask, g, request, session
from flask_babel import Babel
from flask_migrate import Migrate, upgrade, stamp
from raven.contrib.flask import Sentry
from web import main, db, mail
from api import api
from utils import PrefixedWSGI
from utils import minimal_round
app = Flask(__name__)
def pre_alembic_db():
""" Checks if we are migrating from a pre-alembic ihatemoney
"""
con = db.engine.connect()
tables_exist = db.engine.dialect.has_table(con, 'project')
alembic_setup = db.engine.dialect.has_table(con, 'alembic_version')
return tables_exist and not alembic_setup
def configure():
""" A way to (re)configure the app, specially reset the settings
"""
config_obj = os.environ.get('FLASK_SETTINGS_MODULE', 'merged_settings')
app.config.from_object(config_obj)
app.wsgi_app = PrefixedWSGI(app)
# Deprecations
if 'DEFAULT_MAIL_SENDER' in app.config:
# Since flask-mail 0.8
warnings.warn(
"DEFAULT_MAIL_SENDER is deprecated in favor of MAIL_DEFAULT_SENDER"
+" and will be removed in further version",
UserWarning
)
if not 'MAIL_DEFAULT_SENDER' in app.config:
app.config['MAIL_DEFAULT_SENDER'] = DEFAULT_MAIL_SENDER
configure()
app.register_blueprint(main)
app.register_blueprint(api)
# custom jinja2 filters
app.jinja_env.filters['minimal_round'] = minimal_round
# db
db.init_app(app)
db.app = app
# db migrations
migrate = Migrate(app, db)
if pre_alembic_db():
with app.app_context():
# fake the first migration
stamp(revision='b9a10d5d63ce')
# auto-execute migrations on runtime
with app.app_context():
upgrade()
# mail
mail.init_app(app)
# translations
babel = Babel(app)
# sentry
sentry = Sentry(app)
@babel.localeselector
def get_locale():
# get the lang from the session if defined, fallback on the browser "accept
# languages" header.
lang = session.get('lang', request.accept_languages.best_match(['fr', 'en']))
setattr(g, 'lang', lang)
return lang
def main():
app.run(host="0.0.0.0", debug=True)
if __name__ == '__main__':
main()

View file

@ -1,707 +0,0 @@
/*!
* Datepicker for Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker)
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/
.datepicker {
border-radius: 4px;
direction: ltr;
}
.datepicker-inline {
width: 220px;
}
.datepicker.datepicker-rtl {
direction: rtl;
}
.datepicker.datepicker-rtl table tr td span {
float: right;
}
.datepicker-dropdown {
top: 0;
left: 0;
padding: 4px;
}
.datepicker-dropdown:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid rgba(0, 0, 0, 0.15);
border-top: 0;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
}
.datepicker-dropdown:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-top: 0;
position: absolute;
}
.datepicker-dropdown.datepicker-orient-left:before {
left: 6px;
}
.datepicker-dropdown.datepicker-orient-left:after {
left: 7px;
}
.datepicker-dropdown.datepicker-orient-right:before {
right: 6px;
}
.datepicker-dropdown.datepicker-orient-right:after {
right: 7px;
}
.datepicker-dropdown.datepicker-orient-bottom:before {
top: -7px;
}
.datepicker-dropdown.datepicker-orient-bottom:after {
top: -6px;
}
.datepicker-dropdown.datepicker-orient-top:before {
bottom: -7px;
border-bottom: 0;
border-top: 7px solid rgba(0, 0, 0, 0.15);
}
.datepicker-dropdown.datepicker-orient-top:after {
bottom: -6px;
border-bottom: 0;
border-top: 6px solid #fff;
}
.datepicker table {
margin: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.datepicker table tr td,
.datepicker table tr th {
text-align: center;
width: 30px;
height: 30px;
border-radius: 4px;
border: none;
}
.table-striped .datepicker table tr td,
.table-striped .datepicker table tr th {
background-color: transparent;
}
.datepicker table tr td.old,
.datepicker table tr td.new {
color: #777777;
}
.datepicker table tr td.day:hover,
.datepicker table tr td.focused {
background: #eeeeee;
cursor: pointer;
}
.datepicker table tr td.disabled,
.datepicker table tr td.disabled:hover {
background: none;
color: #777777;
cursor: default;
}
.datepicker table tr td.highlighted {
color: #000;
background-color: #d9edf7;
border-color: #85c5e5;
border-radius: 0;
}
.datepicker table tr td.highlighted:focus,
.datepicker table tr td.highlighted.focus {
color: #000;
background-color: #afd9ee;
border-color: #298fc2;
}
.datepicker table tr td.highlighted:hover {
color: #000;
background-color: #afd9ee;
border-color: #52addb;
}
.datepicker table tr td.highlighted:active,
.datepicker table tr td.highlighted.active {
color: #000;
background-color: #afd9ee;
border-color: #52addb;
}
.datepicker table tr td.highlighted:active:hover,
.datepicker table tr td.highlighted.active:hover,
.datepicker table tr td.highlighted:active:focus,
.datepicker table tr td.highlighted.active:focus,
.datepicker table tr td.highlighted:active.focus,
.datepicker table tr td.highlighted.active.focus {
color: #000;
background-color: #91cbe8;
border-color: #298fc2;
}
.datepicker table tr td.highlighted.disabled:hover,
.datepicker table tr td.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.highlighted:hover,
.datepicker table tr td.highlighted.disabled:focus,
.datepicker table tr td.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.highlighted:focus,
.datepicker table tr td.highlighted.disabled.focus,
.datepicker table tr td.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.highlighted.focus {
background-color: #d9edf7;
border-color: #85c5e5;
}
.datepicker table tr td.highlighted.focused {
background: #afd9ee;
}
.datepicker table tr td.highlighted.disabled,
.datepicker table tr td.highlighted.disabled:active {
background: #d9edf7;
color: #777777;
}
.datepicker table tr td.today {
color: #000;
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today:focus,
.datepicker table tr td.today.focus {
color: #000;
background-color: #ffc966;
border-color: #b37400;
}
.datepicker table tr td.today:hover {
color: #000;
background-color: #ffc966;
border-color: #f59e00;
}
.datepicker table tr td.today:active,
.datepicker table tr td.today.active {
color: #000;
background-color: #ffc966;
border-color: #f59e00;
}
.datepicker table tr td.today:active:hover,
.datepicker table tr td.today.active:hover,
.datepicker table tr td.today:active:focus,
.datepicker table tr td.today.active:focus,
.datepicker table tr td.today:active.focus,
.datepicker table tr td.today.active.focus {
color: #000;
background-color: #ffbc42;
border-color: #b37400;
}
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today[disabled]:hover,
fieldset[disabled] .datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled:focus,
.datepicker table tr td.today[disabled]:focus,
fieldset[disabled] .datepicker table tr td.today:focus,
.datepicker table tr td.today.disabled.focus,
.datepicker table tr td.today[disabled].focus,
fieldset[disabled] .datepicker table tr td.today.focus {
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today.focused {
background: #ffc966;
}
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:active {
background: #ffdb99;
color: #777777;
}
.datepicker table tr td.range {
color: #000;
background-color: #eeeeee;
border-color: #bbbbbb;
border-radius: 0;
}
.datepicker table tr td.range:focus,
.datepicker table tr td.range.focus {
color: #000;
background-color: #d5d5d5;
border-color: #7c7c7c;
}
.datepicker table tr td.range:hover {
color: #000;
background-color: #d5d5d5;
border-color: #9d9d9d;
}
.datepicker table tr td.range:active,
.datepicker table tr td.range.active {
color: #000;
background-color: #d5d5d5;
border-color: #9d9d9d;
}
.datepicker table tr td.range:active:hover,
.datepicker table tr td.range.active:hover,
.datepicker table tr td.range:active:focus,
.datepicker table tr td.range.active:focus,
.datepicker table tr td.range:active.focus,
.datepicker table tr td.range.active.focus {
color: #000;
background-color: #c3c3c3;
border-color: #7c7c7c;
}
.datepicker table tr td.range.disabled:hover,
.datepicker table tr td.range[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range:hover,
.datepicker table tr td.range.disabled:focus,
.datepicker table tr td.range[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range:focus,
.datepicker table tr td.range.disabled.focus,
.datepicker table tr td.range[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.focus {
background-color: #eeeeee;
border-color: #bbbbbb;
}
.datepicker table tr td.range.focused {
background: #d5d5d5;
}
.datepicker table tr td.range.disabled,
.datepicker table tr td.range.disabled:active {
background: #eeeeee;
color: #777777;
}
.datepicker table tr td.range.highlighted {
color: #000;
background-color: #e4eef3;
border-color: #9dc1d3;
}
.datepicker table tr td.range.highlighted:focus,
.datepicker table tr td.range.highlighted.focus {
color: #000;
background-color: #c1d7e3;
border-color: #4b88a6;
}
.datepicker table tr td.range.highlighted:hover {
color: #000;
background-color: #c1d7e3;
border-color: #73a6c0;
}
.datepicker table tr td.range.highlighted:active,
.datepicker table tr td.range.highlighted.active {
color: #000;
background-color: #c1d7e3;
border-color: #73a6c0;
}
.datepicker table tr td.range.highlighted:active:hover,
.datepicker table tr td.range.highlighted.active:hover,
.datepicker table tr td.range.highlighted:active:focus,
.datepicker table tr td.range.highlighted.active:focus,
.datepicker table tr td.range.highlighted:active.focus,
.datepicker table tr td.range.highlighted.active.focus {
color: #000;
background-color: #a8c8d8;
border-color: #4b88a6;
}
.datepicker table tr td.range.highlighted.disabled:hover,
.datepicker table tr td.range.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range.highlighted:hover,
.datepicker table tr td.range.highlighted.disabled:focus,
.datepicker table tr td.range.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range.highlighted:focus,
.datepicker table tr td.range.highlighted.disabled.focus,
.datepicker table tr td.range.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.highlighted.focus {
background-color: #e4eef3;
border-color: #9dc1d3;
}
.datepicker table tr td.range.highlighted.focused {
background: #c1d7e3;
}
.datepicker table tr td.range.highlighted.disabled,
.datepicker table tr td.range.highlighted.disabled:active {
background: #e4eef3;
color: #777777;
}
.datepicker table tr td.range.today {
color: #000;
background-color: #f7ca77;
border-color: #f1a417;
}
.datepicker table tr td.range.today:focus,
.datepicker table tr td.range.today.focus {
color: #000;
background-color: #f4b747;
border-color: #815608;
}
.datepicker table tr td.range.today:hover {
color: #000;
background-color: #f4b747;
border-color: #bf800c;
}
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today.active {
color: #000;
background-color: #f4b747;
border-color: #bf800c;
}
.datepicker table tr td.range.today:active:hover,
.datepicker table tr td.range.today.active:hover,
.datepicker table tr td.range.today:active:focus,
.datepicker table tr td.range.today.active:focus,
.datepicker table tr td.range.today:active.focus,
.datepicker table tr td.range.today.active.focus {
color: #000;
background-color: #f2aa25;
border-color: #815608;
}
.datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today.disabled:focus,
.datepicker table tr td.range.today[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range.today:focus,
.datepicker table tr td.range.today.disabled.focus,
.datepicker table tr td.range.today[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.today.focus {
background-color: #f7ca77;
border-color: #f1a417;
}
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today.disabled:active {
background: #f7ca77;
color: #777777;
}
.datepicker table tr td.selected,
.datepicker table tr td.selected.highlighted {
color: #fff;
background-color: #777777;
border-color: #555555;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.selected:focus,
.datepicker table tr td.selected.highlighted:focus,
.datepicker table tr td.selected.focus,
.datepicker table tr td.selected.highlighted.focus {
color: #fff;
background-color: #5e5e5e;
border-color: #161616;
}
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected.highlighted:hover {
color: #fff;
background-color: #5e5e5e;
border-color: #373737;
}
.datepicker table tr td.selected:active,
.datepicker table tr td.selected.highlighted:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected.highlighted.active {
color: #fff;
background-color: #5e5e5e;
border-color: #373737;
}
.datepicker table tr td.selected:active:hover,
.datepicker table tr td.selected.highlighted:active:hover,
.datepicker table tr td.selected.active:hover,
.datepicker table tr td.selected.highlighted.active:hover,
.datepicker table tr td.selected:active:focus,
.datepicker table tr td.selected.highlighted:active:focus,
.datepicker table tr td.selected.active:focus,
.datepicker table tr td.selected.highlighted.active:focus,
.datepicker table tr td.selected:active.focus,
.datepicker table tr td.selected.highlighted:active.focus,
.datepicker table tr td.selected.active.focus,
.datepicker table tr td.selected.highlighted.active.focus {
color: #fff;
background-color: #4c4c4c;
border-color: #161616;
}
.datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected.highlighted.disabled:hover,
.datepicker table tr td.selected[disabled]:hover,
.datepicker table tr td.selected.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.selected:hover,
fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,
.datepicker table tr td.selected.disabled:focus,
.datepicker table tr td.selected.highlighted.disabled:focus,
.datepicker table tr td.selected[disabled]:focus,
.datepicker table tr td.selected.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.selected:focus,
fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,
.datepicker table tr td.selected.disabled.focus,
.datepicker table tr td.selected.highlighted.disabled.focus,
.datepicker table tr td.selected[disabled].focus,
.datepicker table tr td.selected.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.selected.focus,
fieldset[disabled] .datepicker table tr td.selected.highlighted.focus {
background-color: #777777;
border-color: #555555;
}
.datepicker table tr td.active,
.datepicker table tr td.active.highlighted {
color: #fff;
background-color: #337ab7;
border-color: #2e6da4;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:focus,
.datepicker table tr td.active.highlighted:focus,
.datepicker table tr td.active.focus,
.datepicker table tr td.active.highlighted.focus {
color: #fff;
background-color: #286090;
border-color: #122b40;
}
.datepicker table tr td.active:hover,
.datepicker table tr td.active.highlighted:hover {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active.highlighted:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active.highlighted.active {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td.active:active:hover,
.datepicker table tr td.active.highlighted:active:hover,
.datepicker table tr td.active.active:hover,
.datepicker table tr td.active.highlighted.active:hover,
.datepicker table tr td.active:active:focus,
.datepicker table tr td.active.highlighted:active:focus,
.datepicker table tr td.active.active:focus,
.datepicker table tr td.active.highlighted.active:focus,
.datepicker table tr td.active:active.focus,
.datepicker table tr td.active.highlighted:active.focus,
.datepicker table tr td.active.active.focus,
.datepicker table tr td.active.highlighted.active.focus {
color: #fff;
background-color: #204d74;
border-color: #122b40;
}
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.highlighted.disabled:hover,
.datepicker table tr td.active[disabled]:hover,
.datepicker table tr td.active.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.active:hover,
fieldset[disabled] .datepicker table tr td.active.highlighted:hover,
.datepicker table tr td.active.disabled:focus,
.datepicker table tr td.active.highlighted.disabled:focus,
.datepicker table tr td.active[disabled]:focus,
.datepicker table tr td.active.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.active:focus,
fieldset[disabled] .datepicker table tr td.active.highlighted:focus,
.datepicker table tr td.active.disabled.focus,
.datepicker table tr td.active.highlighted.disabled.focus,
.datepicker table tr td.active[disabled].focus,
.datepicker table tr td.active.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.active.focus,
fieldset[disabled] .datepicker table tr td.active.highlighted.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.datepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
border-radius: 4px;
}
.datepicker table tr td span:hover,
.datepicker table tr td span.focused {
background: #eeeeee;
}
.datepicker table tr td span.disabled,
.datepicker table tr td span.disabled:hover {
background: none;
color: #777777;
cursor: default;
}
.datepicker table tr td span.active,
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
color: #fff;
background-color: #337ab7;
border-color: #2e6da4;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:focus,
.datepicker table tr td span.active:hover:focus,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active.focus,
.datepicker table tr td span.active:hover.focus,
.datepicker table tr td span.active.disabled.focus,
.datepicker table tr td span.active.disabled:hover.focus {
color: #fff;
background-color: #286090;
border-color: #122b40;
}
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td span.active:active:hover,
.datepicker table tr td span.active:hover:active:hover,
.datepicker table tr td span.active.disabled:active:hover,
.datepicker table tr td span.active.disabled:hover:active:hover,
.datepicker table tr td span.active.active:hover,
.datepicker table tr td span.active:hover.active:hover,
.datepicker table tr td span.active.disabled.active:hover,
.datepicker table tr td span.active.disabled:hover.active:hover,
.datepicker table tr td span.active:active:focus,
.datepicker table tr td span.active:hover:active:focus,
.datepicker table tr td span.active.disabled:active:focus,
.datepicker table tr td span.active.disabled:hover:active:focus,
.datepicker table tr td span.active.active:focus,
.datepicker table tr td span.active:hover.active:focus,
.datepicker table tr td span.active.disabled.active:focus,
.datepicker table tr td span.active.disabled:hover.active:focus,
.datepicker table tr td span.active:active.focus,
.datepicker table tr td span.active:hover:active.focus,
.datepicker table tr td span.active.disabled:active.focus,
.datepicker table tr td span.active.disabled:hover:active.focus,
.datepicker table tr td span.active.active.focus,
.datepicker table tr td span.active:hover.active.focus,
.datepicker table tr td span.active.disabled.active.focus,
.datepicker table tr td span.active.disabled:hover.active.focus {
color: #fff;
background-color: #204d74;
border-color: #122b40;
}
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active:hover.disabled:hover,
.datepicker table tr td span.active.disabled.disabled:hover,
.datepicker table tr td span.active.disabled:hover.disabled:hover,
.datepicker table tr td span.active[disabled]:hover,
.datepicker table tr td span.active:hover[disabled]:hover,
.datepicker table tr td span.active.disabled[disabled]:hover,
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td span.active:hover,
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active:hover.disabled:focus,
.datepicker table tr td span.active.disabled.disabled:focus,
.datepicker table tr td span.active.disabled:hover.disabled:focus,
.datepicker table tr td span.active[disabled]:focus,
.datepicker table tr td span.active:hover[disabled]:focus,
.datepicker table tr td span.active.disabled[disabled]:focus,
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td span.active:focus,
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active.disabled.focus,
.datepicker table tr td span.active:hover.disabled.focus,
.datepicker table tr td span.active.disabled.disabled.focus,
.datepicker table tr td span.active.disabled:hover.disabled.focus,
.datepicker table tr td span.active[disabled].focus,
.datepicker table tr td span.active:hover[disabled].focus,
.datepicker table tr td span.active.disabled[disabled].focus,
.datepicker table tr td span.active.disabled:hover[disabled].focus,
fieldset[disabled] .datepicker table tr td span.active.focus,
fieldset[disabled] .datepicker table tr td span.active:hover.focus,
fieldset[disabled] .datepicker table tr td span.active.disabled.focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.datepicker table tr td span.old,
.datepicker table tr td span.new {
color: #777777;
}
.datepicker .datepicker-switch {
width: 145px;
}
.datepicker .datepicker-switch,
.datepicker .prev,
.datepicker .next,
.datepicker tfoot tr th {
cursor: pointer;
}
.datepicker .datepicker-switch:hover,
.datepicker .prev:hover,
.datepicker .next:hover,
.datepicker tfoot tr th:hover {
background: #eeeeee;
}
.datepicker .cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
.input-group.date .input-group-addon {
cursor: pointer;
}
.input-daterange {
width: 100%;
}
.input-daterange input {
text-align: center;
}
.input-daterange input:first-child {
border-radius: 3px 0 0 3px;
}
.input-daterange input:last-child {
border-radius: 0 3px 3px 0;
}
.input-daterange .input-group-addon {
width: auto;
min-width: 16px;
padding: 4px 5px;
line-height: 1.42857143;
text-shadow: 0 1px 0 #fff;
border-width: 1px 0;
margin-left: -5px;
margin-right: -5px;
}
.datepicker.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
list-style: none;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
color: #333333;
font-size: 13px;
line-height: 1.42857143;
}
.datepicker.dropdown-menu th,
.datepicker.datepicker-inline th,
.datepicker.dropdown-menu td,
.datepicker.datepicker-inline td {
padding: 0px 5px;
}
/*# sourceMappingURL=bootstrap-datepicker3.standalone.css.map */

File diff suppressed because one or more lines are too long

View file

@ -1,249 +0,0 @@
@import "bootstrap.min.css";
@import "bootstrap-datepicker3.standalone.css";
@import "../fonts/fontfaces.css";
/* General */
body {
/* For fixed navbar */
padding-top: 3.5rem;
padding-bottom: 2rem;
}
/* Navbar */
.navbar h1 {
font-size: 1rem;
margin: 0;
padding: 0;
}
.navbar .primary-nav { padding-left: 75px; }
.navbar .secondary-nav {
text-align: right;
flex-direction: row-reverse;
}
.navbar-brand{ font-family: 'Lobster', arial, serif; }
/* Header */
#header {
padding-bottom: 2em;
margin-bottom: 1em;
background-color: #ABE128;
background-image: url("../images/gradient.png");
background-position: center top;
background-repeat: no-repeat;
}
#header h2 {
font-family: 'Comfortaa', arial, serif;
margin-top: 1em;
margin-bottom: 0.5em;
color: #000;
font-size: 2.4em;
}
#header .tryout {
margin-right: 10em;
color: #fff;
background-color: #414141;
border-color: #414141;
}
#header .tryout:hover {
background-color: #606060;
border-color: #606060;
}
#header .additional-content {
margin-top: 5em;
font-family: 'Comfortaa', arial, serif;
color: #000;
}
/* Sidebar */
.balance tr td { font-weight: bold; }
.positive { color: green; }
.negative { color: red; }
.sidebar {
background-color: #ABE128;
background-position: center bottom;
background-repeat: no-repeat;
height: 100%;
color: black;
position: fixed;
}
#add-member-form { padding-top: 1em; padding-bottom: 1em; }
#add-member-form input[type="text"] { width: 60%; }
#table_overflow { overflow-y: auto; overflow-x: hidden;}
/* Content */
.content {
margin-top: 1rem;
}
/* Home */
#authentication-form legend {
text-align: right;
}
/* Other */
#bills { color: black; }
.invites textarea{
width: 800px;
height: 100px;
}
footer{
margin-left: -15px;
margin-right: -15px;
margin-top: 30px;
position: fixed;
bottom: 0px;
height: 20px;
width: 100%;
text-align: center;
background-color: #fff;
opacity: 0.8;
}
.identifier{
float: right;
}
#new-bill, .identifier {
margin-top: 16px;
margin-bottom: 16px;
}
/* Avoid text color flickering when it loose focus as the modal appears */
.btn-primary[data-toggle="modal"] {
color: #fff;
}
.password-reminder{
float: right;
margin-right: 20px;
margin-top: 5px;
}
.confirm, .confirm:hover {
color: red;
}
.bill-actions {
padding-top: 10px;
text-align: center;
}
.bill-actions > .delete, .bill-actions > .edit {
font-size: 0px;
display: block;
width: 16px;
height: 16px;
margin: 2px;
margin-left: 5px;
float: left;
}
.bill-actions > .delete{
background: url('../images/delete.png') no-repeat right;
}
.bill-actions > .edit{
background: url('../images/edit.png') no-repeat right;
}
.balance .balance-value{
text-align:right;
}
#sidebar .balance tr:hover td {
background-color: #9BD118;
}
tr.ower_line {
background-color: #CBEF68;
}
tr.payer_line .balance-name{
color:green;
text-indent:5px;
}
.action {
margin: 0;
padding: 0;
}
.action button, .action button:hover {
border-width: 0;
width: auto;
margin: 0;
padding: 0 0 0 20px;
}
.delete button, .delete button:hover {
background: url('../images/deleter.png') left no-repeat;
color: red;
}
.edit button, .edit button:hover {
background: url('../images/edit.png') left no-repeat;
}
.reactivate button, .reactivate button:hover {
background: url('../images/reactivate.png') left no-repeat;
color: white;
}
.balance.table {
table-layout: fixed;
}
#bill-form > fieldset {
margin-top: 10px;
}
.flash {
position: absolute;
}
.light {
opacity: 0.3;
}
.extra-info {
display: none;
}
tr:hover .extra-info {
display: inline;
}
/* Fluid Offsets for Boostrap */
.row-fluid > [class*="span"]:not([class*="offset"]):first-child{margin-left:0;}
.row-fluid > .offset12{margin-left:100%;}
.row-fluid > .offset11{margin-left:93.5%;}
.row-fluid > .offset10{margin-left:85%;}
.row-fluid > .offset9{margin-left:76.5%;}
.row-fluid > .offset8{margin-left:68%;}
.row-fluid > .offset7{margin-left:59.5%;}
.row-fluid > .offset6{margin-left:51%;}
.row-fluid > .offset5{margin-left:42.5%;}
.row-fluid > .offset4{margin-left:34%;}
.row-fluid > .offset3{margin-left:25.5%;}
.row-fluid > .offset2{margin-left:17%;}
.row-fluid > .offset1{margin-left:8.5%;}

View file

@ -1,95 +0,0 @@
Copyright (c) 2010, Pablo Impallari (www.impallari.com|impallari@gmail.com),
Copyright (c) 2010, 2011, Alexei Vanyashin (www.cyreal.org|a@cyreal.org),
with Reserved Font Name Lobster.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View file

@ -1,253 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : Copyright c 20072010 Johan Aakerlund aajohangmailcom with Reserved Font Name Comfortaa This Font Software is licensed under the SIL Open Font License Version 11 httpscriptssilorgOFL
Designer : Johan Aakerlund aajohan
Foundry : Johan Aakerlund
</metadata>
<defs>
<font id="ComfortaaRegular" horiz-adv-x="1280" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="560" />
<glyph unicode=" " horiz-adv-x="560" />
<glyph unicode="&#x09;" horiz-adv-x="560" />
<glyph unicode="&#xa0;" horiz-adv-x="560" />
<glyph unicode="!" horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85zM120 399v1121q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1121q0 -32 -23 -55q-24 -24 -57 -24t-56 24q-24 23 -24 55z" />
<glyph unicode="&#x22;" horiz-adv-x="560" d="M80 1512v8q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-8l-20 -292q0 -25 -17.5 -42.5t-42.5 -17.5t-42.5 17.5t-17.5 42.5zM320 1512v8q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-8l-20 -292q0 -25 -17.5 -42.5t-42.5 -17.5t-42.5 17.5t-17.5 42.5z" />
<glyph unicode="#" d="M73 545q0 7 1 15q6 33 33.5 56.5t60.5 23.5h160l56 320h-160q-33 0 -52 23.5t-14 56.5q6 33 34 56.5t61 23.5h160l70 400q6 33 33.5 56.5t60.5 23.5t52.5 -23.5t13.5 -56.5l-70 -400h240l70 400q6 33 33.5 56.5t60.5 23.5t52.5 -23.5t13.5 -56.5l-70 -400h160 q33 0 52 -23q14 -18 14 -42q0 -7 -1 -15q-5 -33 -33 -56.5t-61 -23.5h-160l-56 -320h160q33 0 52.5 -23.5t13.5 -56.5t-33.5 -56.5t-60.5 -23.5h-160l-71 -400q-6 -33 -33.5 -56.5t-60.5 -23.5t-52.5 23.5t-13.5 56.5l71 400h-240l-71 -400q-6 -33 -33.5 -56.5t-60.5 -23.5 t-52.5 23.5t-13.5 56.5l71 400h-160q-33 0 -52 24q-15 17 -15 41zM488 640h240l56 320h-240z" />
<glyph unicode="$" horiz-adv-x="1060" d="M80 267q0 33 23.5 56.5t56.5 23.5q43 0 68 -37q12 -19 28 -36q85 -102 224 -113v644q-134 26 -226 134q-107 126 -94 292q14 165 140 272q82 69 180 88v89q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-90q133 -26 224 -133q22 -26 39 -54q12 -19 12 -43 q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24q-9 8 -14 17q-10 16 -23 32q-44 51 -102 71v-484q132 -38 227 -149q113 -134 113 -304q0 -23 -2 -46q-16 -198 -167 -326q-79 -67 -171 -95v-100q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v81q-10 0 -20 1 q-198 16 -326 168q-21 23 -38 49q-16 21 -16 48zM320 1218q-8 -99 57 -175q43 -52 103 -72v454q-41 -14 -76 -44q-76 -65 -84 -163zM640 192q35 17 67 45q101 85 112 217q11 133 -74 234q-46 53 -105 81v-577z" />
<glyph unicode="%" horiz-adv-x="1760" d="M80 1200q0 166 117 283t283 117t283 -117t117 -283t-117 -283t-283 -117t-283 117t-117 283zM240 80q0 31 20 54l1115 1433q28 33 65 33q33 0 56.5 -23.5t23.5 -56.5q0 -27 -16 -48l-1123 -1445q-28 -27 -61 -27t-56.5 23.5t-23.5 56.5zM240 1200q0 -99 70.5 -169.5 t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5t-70.5 -169.5zM880 400q0 166 117 283t283 117t283 -117t117 -283t-117 -283t-283 -117t-283 117t-117 283zM1040 400q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5 t-169.5 70.5t-169.5 -70.5t-70.5 -169.5z" />
<glyph unicode="&#x26;" horiz-adv-x="1440" d="M80 460q0 182 189 331l106 83l-110 111q-105 106 -105 255t105.5 254.5t254.5 105.5t254.5 -105.5t105.5 -254.5q0 -159 -146 -285l-121 -92l354 -355l177 189q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -31 -20 -54l-180 -191l258 -261q22 -22 22 -54q0 -33 -23.5 -56.5 t-56.5 -23.5q-32 0 -56 22l-254 255l-139 -148q-129 -129 -311 -129t-311 129t-129 331zM240 460q0 -136 82 -218t198 -82t198 82l139 149l-372 373l-113 -86q-132 -102 -132 -218zM320 1240q0 -83 58 -141l124 -125l119 94q99 79 99 172q0 83 -58.5 141.5t-141.5 58.5 t-141.5 -58.5t-58.5 -141.5z" />
<glyph unicode="'" horiz-adv-x="320" d="M80 1512v8q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-8l-20 -292q0 -25 -17.5 -42.5t-42.5 -17.5t-42.5 17.5t-17.5 42.5z" />
<glyph unicode="(" horiz-adv-x="560" d="M80 562q0 493 243 985q6 16 19 30q24 23 57 23t56.5 -23.5t23.5 -56.5q-2 -24 -13 -43q-228 -458 -228 -916q0 -460 230 -920q11 -18 11 -41q0 -33 -23.5 -56.5t-56.5 -23.5t-57 24q-12 14 -19 30q-243 495 -243 988z" />
<glyph unicode=")" horiz-adv-x="560" d="M80 -400q0 23 11 41q230 460 230 920q0 458 -228 916q-11 19 -13 43q0 33 23.5 56.5t56.5 23.5t57 -23q13 -14 19 -30q244 -492 244 -985t-244 -988q-8 -16 -19 -30q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="*" horiz-adv-x="780" d="M85 1360q0 13 5 26q11 32 41 46t61 3q14 -5 24 -13l157 -117l-58 188q-4 13 -4 27q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -14 -4 -27l-58 -189l158 118q11 8 24 13q31 11 61 -3t41 -46q5 -14 5 -27q0 -17 -8 -34q-14 -30 -45 -41q-14 -4 -27 -5l-196 -8 l161 -112q11 -7 20 -19q20 -26 16 -59t-30 -53q-22 -17 -59 -16q-33 4 -53 30q-9 11 -13 24l-72 181l-73 -181q-4 -13 -13 -24q-20 -31 -64 -31q-26 0 -48 17q-26 20 -30 53t16 59q9 12 20 19l161 112l-195 8q-14 1 -27 5q-31 11 -45 41q-9 17 -9 35z" />
<glyph unicode="+" horiz-adv-x="1120" d="M80 800q0 33 23.5 56.5t56.5 23.5h320v320q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-320h320q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-320v-320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v320h-320q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="," horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85q0 -196 -87 -328q-18 -32 -53 -32q-25 0 -42.5 17.5t-17.5 42.5t17 42q70 78 -22 173q-35 35 -35 85z" />
<glyph unicode="-" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-480q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="." horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="/" horiz-adv-x="960" d="M80 -80q0 18 7 34l640 1600q6 12 17 23q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -18 -7 -34l-640 -1600q-6 -12 -16 -22q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="0" horiz-adv-x="1120" d="M80 800q0 480 197 683q117 117 283 117t283 -117q197 -203 197 -683t-197 -683q-117 -117 -283 -117t-283 117q-197 203 -197 683zM240 800q0 -400 150 -569q71 -71 170 -71t170 71q150 169 150 569t-150 569q-71 71 -170 71t-170 -71q-150 -169 -150 -569z" />
<glyph unicode="1" horiz-adv-x="560" d="M80 1440q0 33 24 57q12 12 27 18l240 80q13 5 29 5q33 0 56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v1329l-129 -43q-15 -6 -31 -6q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="2" horiz-adv-x="1120" d="M80 80q0 33 23 57l683 756q94 94 94 227t-93.5 226.5t-226.5 93.5t-226.5 -93.5t-93.5 -226.5q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5q0 199 140.5 339.5t339.5 140.5t339.5 -140.5t140.5 -339.5t-141 -340l-558 -620h619q33 0 56.5 -23.5t23.5 -56.5 t-23.5 -56.5t-56.5 -23.5h-800q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="3" horiz-adv-x="1120" d="M80 480q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5q99 0 169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5 t-70.5 -169.5q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5q0 166 117 283t283 117t283 -117t117 -283q0 -176 -147 -311q46 -29 87 -69q140 -141 140 -340t-140.5 -339.5t-339.5 -140.5t-339.5 140.5t-140.5 339.5z" />
<glyph unicode="4" d="M80 480q0 26 15 47l720 1040q22 33 65 33q33 0 56.5 -23.5t23.5 -56.5v-960h160q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-160v-320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v320h-640q-33 0 -56.5 23.5t-23.5 56.5zM313 560h487v704z" />
<glyph unicode="5" horiz-adv-x="1200" d="M80 520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5t-105.5 254.5t-254.5 105.5h-360q-33 0 -56.5 23.5t-23.5 56.5v560q0 33 23.5 56.5t56.5 23.5h720q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5 t-56.5 -23.5h-640v-400h280q215 0 367.5 -152.5t152.5 -367.5t-152.5 -367.5t-367.5 -152.5t-367.5 152.5t-152.5 367.5z" />
<glyph unicode="6" horiz-adv-x="1120" d="M80 480q0 147 77 262l491 814q6 11 16 21q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -23 -11 -41l-318 -527q43 8 89 8q199 0 339.5 -140.5t140.5 -339.5t-140.5 -339.5t-339.5 -140.5t-339.5 140.5t-140.5 339.5zM240 480q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 t93.5 226.5t-93.5 226.5t-226.5 93.5t-226.5 -93.5t-93.5 -226.5z" />
<glyph unicode="7" horiz-adv-x="1120" d="M80 80q0 24 16 48l729 1312h-665q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5q0 -24 -12 -43l-796 -1432q-7 -13 -15 -21q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="8" horiz-adv-x="1120" d="M80 480q0 199 141 340q40 40 86 69q-15 13 -30 28q-117 117 -117 283t117 283t283 117t283 -117t117 -283t-117 -283q-15 -15 -30 -28q46 -29 87 -69q140 -141 140 -340t-140.5 -339.5t-339.5 -140.5t-339.5 140.5t-140.5 339.5zM240 480q0 -133 93.5 -226.5t226.5 -93.5 t226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5t-226.5 -93.5t-93.5 -226.5zM320 1200q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5t-70.5 -169.5z" />
<glyph unicode="9" horiz-adv-x="1120" d="M80 1120q0 199 140.5 339.5t339.5 140.5t339.5 -140.5t140.5 -339.5q0 -147 -77 -262l-491 -814q-6 -11 -15 -20q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5q0 23 11 41l318 527q-43 -8 -89 -8q-199 0 -339.5 140.5t-140.5 339.5zM240 1120q0 -133 93.5 -226.5t226.5 -93.5 t226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5t-226.5 -93.5t-93.5 -226.5z" />
<glyph unicode=":" horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85zM80 1001q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode=";" horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85q0 -196 -87 -328q-22 -32 -53 -32q-25 0 -42.5 17.5t-17.5 42.5t17 42q70 78 -22 173q-35 35 -35 85zM80 1001q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#x37e;" horiz-adv-x="400" d="M80 120q0 50 35 85t85 35t85 -35t35 -85q0 -196 -87 -328q-22 -32 -53 -32q-25 0 -42.5 17.5t-17.5 42.5t17 42q70 78 -22 173q-35 35 -35 85zM80 1001q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#x3c;" horiz-adv-x="1120" d="M80 720q0 44 44 72l796 478q18 10 40 10q33 0 56.5 -23.5t23.5 -56.5q0 -43 -41 -70l-684 -410l684 -410q41 -27 41 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-22 0 -40 10l-796 478q-44 28 -44 72z" />
<glyph unicode="=" horiz-adv-x="1040" d="M80 480q0 33 23.5 56.5t56.5 23.5h720q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -24.5h-720q-33 1 -56.5 24.5t-23.5 56.5zM80 960q0 33 23.5 56.5t56.5 23.5h720q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-720q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x3e;" horiz-adv-x="1120" d="M80 240q0 43 41 70l684 410l-684 410q-41 27 -41 70q0 33 23.5 56.5t56.5 23.5q22 0 40 -10l796 -478q44 -28 44 -72t-44 -72l-796 -478q-18 -10 -40 -10q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="?" horiz-adv-x="1120" d="M80 1120q0 199 140.5 339.5t339.5 140.5t339.5 -140.5t140.5 -339.5t-141 -340l-165 -153q-94 -94 -94 -227q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5q0 199 141 340l165 153q94 94 94 227t-93.5 226.5t-226.5 93.5t-226.5 -93.5t-93.5 -226.5 q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM440 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="@" horiz-adv-x="2240" d="M80 560q0 431 304.5 735.5t735.5 304.5t735.5 -304.5t304.5 -735.5q0 -640 -400 -640q-240 0 -240 247q-168 -167 -400 -167t-396 164t-164 396t164 396t396 164t396 -164t164 -396v-400q0 -80 80 -80q240 0 240 480q0 365 -257.5 622.5t-622.5 257.5t-622.5 -257.5 t-257.5 -622.5t257.5 -622.5t622.5 -257.5q196 0 362 74q18 11 40 11q33 0 56.5 -23.5t23.5 -56.5t-23 -56q-13 -13 -28 -19q-197 -90 -431 -90q-431 0 -735.5 304.5t-304.5 735.5zM720 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117 t-117 -283z" />
<glyph unicode="A" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579z" />
<glyph unicode="B" horiz-adv-x="1120" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h320q166 0 283 -117t117 -283t-117 -283q74 -35 137 -97q140 -141 140 -340t-140.5 -339.5t-339.5 -140.5h-400q-33 0 -56.5 23.5t-23.5 56.5zM240 160h320q133 0 226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5h-320v-640z M240 960h240q99 0 169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5h-240v-480z" />
<glyph unicode="C" horiz-adv-x="1480" d="M80 800q0 331 234.5 565.5t565.5 234.5q286 0 509 -183q23 -24 23 -57t-23.5 -56.5t-56.5 -23.5t-57 24q-169 136 -395 136q-265 0 -452.5 -187.5t-187.5 -452.5t187.5 -452.5t452.5 -187.5q229 0 400 140q20 14 46 14q33 0 56.5 -23.5t23.5 -56.5t-23 -56 q-223 -178 -503 -178q-331 0 -565.5 234.5t-234.5 565.5z" />
<glyph unicode="D" horiz-adv-x="1360" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h320q331 0 565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5h-320q-33 0 -56.5 23.5t-23.5 56.5zM240 160h240q265 0 452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5h-240v-1280z" />
<glyph unicode="E" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-560h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5 t-23.5 56.5z" />
<glyph unicode="F" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-640q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="G" horiz-adv-x="1500" d="M80 800q0 331 234.5 565.5t565.5 234.5q286 0 509 -183q23 -24 23 -57t-23.5 -56.5t-56.5 -23.5t-57 24q-169 136 -395 136q-265 0 -452.5 -187.5t-187.5 -452.5t187.5 -452.5t452.5 -187.5q207 0 366 114v366h-316q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h397 q32 0 56 -23q23 -24 23 -57v-486q0 -33 -23 -56q-223 -178 -503 -178q-331 0 -565.5 234.5t-234.5 565.5z" />
<glyph unicode="H" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-640h800v640q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v640h-800v-640q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="I" horiz-adv-x="480" d="M160 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="J" horiz-adv-x="1120" d="M80 480q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5v1040q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1040q0 -199 -140.5 -339.5t-339.5 -140.5t-339.5 140.5t-140.5 339.5z" />
<glyph unicode="K" horiz-adv-x="1200" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-686l741 741q26 25 59 25t56.5 -23.5t23.5 -56.5t-23 -57l-562 -562l570 -773q15 -21 15 -45q0 -42 -32 -67q-22 -16 -46 -16q-44 0 -68 34l-554 752l-180 -180v-526q0 -33 -23.5 -56.5t-56.5 -23.5 t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="L" horiz-adv-x="1200" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1360h800q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="M" horiz-adv-x="1760" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5q48 0 71 -42l649 -1299l649 1299q23 42 71 42q33 0 56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v1101l-571 -1142q-21 -39 -69 -39q-50 0 -74 49l-566 1132v-1101q0 -33 -23.5 -56.5 t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="N" horiz-adv-x="1440" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5q36 0 62 -29l978 -1258v1207q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5q-35 0 -60 26l-980 1260v-1206q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="O" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5z" />
<glyph unicode="P" horiz-adv-x="1080" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h320q215 0 367.5 -152.5t152.5 -367.5t-152.5 -367.5t-367.5 -152.5h-240v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM240 720h240q149 0 254.5 105.5t105.5 254.5t-105.5 254.5t-254.5 105.5h-240v-720z" />
<glyph unicode="Q" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5q0 -290 -180 -506l158 -158q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5t-58 24l-156 156q-216 -180 -506 -180q-331 0 -565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5 q224 0 392 134l-169 169q-23 24 -23 57t23.5 56.5t56.5 23.5t57 -23l169 -169q134 168 134 392q0 265 -187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5z" />
<glyph unicode="R" horiz-adv-x="1200" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5h400q199 0 339.5 -140.5t140.5 -339.5t-140 -339q-65 -65 -141 -99l348 -558q13 -19 13 -44q0 -33 -23.5 -56.5t-56.5 -23.5q-43 0 -70 41l-375 600q-17 -1 -35 -1h-320v-560q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z M240 800h320q133 0 226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5h-320v-640z" />
<glyph unicode="S" horiz-adv-x="1060" d="M80 267q0 33 23.5 56.5t56.5 23.5q43 0 68 -37q12 -19 28 -36q85 -102 218 -113q14 -1 27 -1q115 0 206 76q101 86 112 218q1 15 1 30q0 116 -76 204q-86 100 -218 111q-165 14 -272 140q-95 112 -95 257q0 18 1 35q14 165 140 272q113 97 260 97q174 0 304 -143 q22 -26 39 -54q12 -19 12 -43q0 -33 -23.5 -56.5t-56.5 -23.5q-38 0 -56 24t-37 49q-65 76 -163 84q-11 1 -22 1q-86 0 -153 -58q-76 -64 -84 -162q-1 -11 0 -22q0 -86 56 -153q64 -76 163 -84q199 -17 328 -168q113 -134 113 -304q0 -23 -2 -46q-16 -198 -167 -326 q-135 -115 -307 -115q-215 0 -370 170q-21 23 -38 49q-16 21 -16 48z" />
<glyph unicode="T" horiz-adv-x="1360" d="M80 1520q0 33 23.5 56.5t56.5 23.5h1040q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-440v-1360q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v1360h-440q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="U" d="M80 560v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -166 117 -283t283 -117t283 117t117 283v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -232 -164 -396t-396 -164t-396 164t-164 396z" />
<glyph unicode="V" horiz-adv-x="1440" d="M80 1520q0 33 23.5 56.5t56.5 23.5q53 0 73 -46l487 -1253l487 1253q20 46 73 46q33 0 56.5 -23.5t23.5 -56.5q0 -22 -10 -45l-557 -1425q-6 -16 -16 -26q-24 -24 -57 -24t-56 24q-11 10 -17 26l-557 1425q-10 23 -10 45z" />
<glyph unicode="W" horiz-adv-x="1920" d="M80 1520q0 33 23.5 56.5t56.5 23.5t57 -23q13 -14 19 -30l324 -1168l324 1168q4 15 20 30q23 23 56 23t57 -23q13 -14 19 -30l324 -1168l324 1168q6 16 20 30q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -17 -6 -35l-392 -1418q-8 -25 -25 -43q-24 -24 -57 -24t-56 24 q-18 18 -25 42l-319 1152l-318 -1151q-8 -25 -25 -43q-24 -24 -57 -24t-56 24q-18 18 -25 42l-393 1419q-6 18 -6 35z" />
<glyph unicode="X" horiz-adv-x="1440" d="M80 80q0 28 17 50l521 670l-524 674q-14 20 -14 46q0 33 23.5 56.5t56.5 23.5q38 0 66 -34l494 -635l494 635q28 34 66 34q33 0 56.5 -23.5t23.5 -56.5q0 -26 -14 -46l-524 -674l521 -670q17 -22 17 -50q0 -33 -23.5 -56.5t-56.5 -23.5q-38 0 -61 28l-499 641l-499 -641 q-23 -28 -61 -28q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="Y" d="M80 1520q0 33 23.5 56.5t56.5 23.5q41 0 65 -33l415 -622l415 622q24 33 65 33q33 0 56.5 -23.5t23.5 -56.5q0 -25 -13 -45l-467 -699v-696q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v696l-467 699q-13 20 -13 45z" />
<glyph unicode="Z" horiz-adv-x="1440" d="M80 80q0 28 17 50l1019 1310h-956q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h1120q33 0 56.5 -23.5t23.5 -56.5q0 -26 -14 -46l-1022 -1314h956q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-1120q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="[" horiz-adv-x="640" d="M80 -400v1920q0 33 23.5 56.5t56.5 23.5h320q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-240v-1760h240q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-320q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="\" horiz-adv-x="960" d="M80 1520q0 33 23.5 56.5t56.5 23.5t57 -23q10 -11 16 -23l640 -1600q7 -16 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-57 24q-10 10 -16 22l-640 1600q-7 16 -7 34z" />
<glyph unicode="]" horiz-adv-x="640" d="M80 -400q0 33 23.5 56.5t56.5 23.5h240v1760h-240q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h320q33 0 56.5 -23.5t23.5 -56.5v-1920q0 -33 -23.5 -56.5t-56.5 -23.5h-320q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="^" horiz-adv-x="960" d="M80 1040q0 23 11 41l324 486q22 33 65 33t65 -33l324 -486q11 -18 11 -41q0 -33 -23.5 -56.5t-56.5 -23.5q-40 0 -64 31l-256 384l-256 -384q-24 -31 -64 -31q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="_" horiz-adv-x="960" d="M-80 -80q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="`" horiz-adv-x="560" d="M80 1520q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="a" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="b" d="M80 560v962q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-570l4 4q164 164 396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="c" horiz-adv-x="1120" d="M80 560q0 232 164 396t396 164q210 0 365 -135q28 -25 28 -62q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -51 18q-112 99 -262 99q-166 0 -283 -117t-117 -283t117 -283t283 -117q150 0 261 98q21 16 49 16q33 0 56.5 -23.5t23.5 -56.5t-25 -59q-155 -135 -365 -135 q-232 0 -396 164t-164 396z" />
<glyph unicode="d" d="M80 560q0 232 164 396t396 164t396 -164l4 -4v570q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-962q0 -232 -164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="e" d="M80 560q0 232 164 396t396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135q-232 0 -396 164t-164 396zM247 640h786 q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203z" />
<glyph unicode="f" horiz-adv-x="800" d="M80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80 q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="g" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-560q0 -175 -126 -304q-176 -176 -425 -176t-424 176q-65 64 -106 139q-12 18 -12 42q0 33 23.5 56.5t56.5 23.5t57 -23q10 -11 17 -24q30 -54 77 -101q129 -129 311 -129t311 129q80 96 80 191v168l-4 -4 q-164 -164 -396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="h" horiz-adv-x="1200" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-545q150 145 360 145q215 0 367.5 -152.5t152.5 -367.5v-520q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v520q0 149 -105.5 254.5t-254.5 105.5t-254.5 -105.5t-105.5 -254.5v-520 q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="i" horiz-adv-x="480" d="M140 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM160 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="j" horiz-adv-x="656" d="M0 -400q0 33 23.5 56.5t56.5 23.5q133 0 226.5 93.5t93.5 226.5v1040q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1040q0 -199 -140.5 -339.5t-339.5 -140.5q-33 0 -56.5 23.5t-23.5 56.5zM380 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5 t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="k" horiz-adv-x="1120" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-852l677 440q19 12 43 12q33 0 56.5 -23.5t23.5 -56.5t-23 -56q-6 -6 -11 -10l-464 -302l476 -536q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5t-58 24l-497 560l-165 -107v-397q0 -33 -23.5 -56.5 t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="l" horiz-adv-x="480" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1360h80q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-160q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="m" horiz-adv-x="1760" d="M80 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-21q119 101 280 101q182 0 311 -129q27 -27 49 -57q22 30 49 57q129 129 311 129t311 -129t129 -311v-600q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v600q0 116 -82 198t-198 82t-198 -82 t-82 -198v-600q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v600q0 116 -82 198t-198 82t-198 -82t-82 -198v-600q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="n" horiz-adv-x="1200" d="M80 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-65q150 145 360 145q215 0 367.5 -152.5t152.5 -367.5v-520q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v520q0 149 -105.5 254.5t-254.5 105.5t-254.5 -105.5t-105.5 -254.5v-520 q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="o" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="p" d="M80 -400v960q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164l-4 4v-568q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="q" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v568l-4 -4q-164 -164 -396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="r" horiz-adv-x="960" d="M80 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-88q168 168 400 168q117 0 215 -40q18 -7 33 -21q23 -24 23 -57t-23.5 -56.5t-56.5 -23.5q-19 0 -35 8q-71 30 -156 30q-166 0 -283 -117t-117 -283v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5 t-23.5 56.5z" />
<glyph unicode="s" horiz-adv-x="1060" d="M80 800q0 99 74 173q144 147 376 147q251 0 430 -201q16 -19 15 -47q0 -33 -23.5 -56.5t-56.5 -23.5t-53 21t-29 30q-117 117 -283 117t-265 -104q-24 -29 -24 -69q3 -47 49 -64l492 -163q91 -34 127 -71q71 -70 71 -169t-74 -173q-144 -147 -376 -147q-252 0 -430 201 q-15 21 -15 47q0 33 23.5 56.5t56.5 23.5t53 -21t29 -30q117 -117 283 -117t265 104q24 29 24 69q-3 47 -49 64l-492 163q-91 34 -127 71q-71 70 -71 169z" />
<glyph unicode="t" horiz-adv-x="800" d="M80 1040q0 33 23.5 56.5t56.5 23.5h80v400q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-400h161q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-161v-560q0 -240 240 -240q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-400 0 -400 400v560h-80 q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="u" horiz-adv-x="1200" d="M80 520v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65q-150 -145 -360 -145 q-215 0 -367.5 152.5t-152.5 367.5z" />
<glyph unicode="v" horiz-adv-x="1200" d="M80 1040q0 33 23.5 56.5t56.5 23.5t57 -23q8 -8 15 -21l368 -804l368 804q7 13 16 21q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -17 -6 -31l-444 -967q-6 -13 -13 -20q-22 -22 -57 -22t-57 23q-7 6 -13 19l-444 967q-6 14 -6 31z" />
<glyph unicode="w" horiz-adv-x="1600" d="M80 1040q0 33 23.5 56.5t56.5 23.5t57 -23q10 -11 16 -23l247 -741l242 727q7 21 22 37q23 23 56 23t57 -23q15 -16 21 -37l242 -727l247 741q6 12 17 23q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -16 -6 -31l-319 -958q-6 -15 -18 -29q-24 -22 -57 -22t-56 22 q-13 14 -19 29l-245 736l-245 -736q-6 -15 -18 -29q-24 -22 -57 -22t-56 22q-13 14 -19 29l-319 958q-6 15 -6 31z" />
<glyph unicode="x" horiz-adv-x="1120" d="M80 80q0 28 16 49l360 432l-357 427q-19 22 -19 52q0 33 23.5 56.5t56.5 23.5t59 -25l341 -409l341 409q26 25 59 25t56.5 -23.5t23.5 -56.5q0 -30 -19 -52l-357 -427l360 -432q16 -21 16 -49q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24l-344 412l-344 -412q-23 -24 -56 -24 t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="y" horiz-adv-x="1120" d="M80 1040q0 33 23.5 56.5t56.5 23.5t57 -23q13 -14 19 -30l324 -777l324 777q6 16 20 30q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -20 -9 -37l-596 -1430q-6 -16 -19 -29q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5q0 20 9 37l185 444l-384 922q-9 17 -9 37z" />
<glyph unicode="z" horiz-adv-x="1120" d="M80 80q0 28 16 49l693 831h-629q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5q0 -30 -19 -52l-691 -828h630q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-800q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="{" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5q160 0 160 160v480q0 320 320 320q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-160 0 -160 -160v-480q0 -160 -80 -240q80 -80 80 -240v-480q0 -160 160 -160q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5 q-320 0 -320 320v480q0 160 -160 160q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="|" horiz-adv-x="800" d="M320 -400v1920q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1920q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="}" horiz-adv-x="800" d="M80 -400q0 33 23.5 56.5t56.5 23.5q160 0 160 160v480q0 160 80 240q-80 80 -80 240v480q0 160 -160 160q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5q320 0 320 -320v-480q0 -160 160 -160q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-160 0 -160 -160 v-480q0 -320 -320 -320q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="~" horiz-adv-x="960" d="M71 757q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xa1;" horiz-adv-x="400" d="M80 999q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85zM120 -400v1120q0 32 24 55q23 24 56 24t57 -24q23 -23 23 -55v-1120q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xa2;" horiz-adv-x="1120" d="M87 560q0 232 164 396t396 164q25 0 49 -2l109 272q13 31 44 44q13 6 31 6q15 0 29 -5q31 -12 44 -42.5t1 -61.5l-99 -249q84 -34 157 -97q28 -25 28 -62q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -51 18q-53 47 -114 71l-298 -744q69 -28 150 -28q150 0 261 98q21 16 49 16 q33 0 56.5 -23.5t23.5 -56.5t-25 -59q-155 -135 -365 -135q-113 0 -209 39l-123 -308q-12 -31 -42 -44q-16 -7 -32 -7q-15 0 -30 6q-31 12 -44 42.5t-1 61.5l132 331q-24 20 -47 43q-164 164 -164 396zM247 560q0 -164 114 -280l272 680q-157 -5 -269 -117 q-117 -117 -117 -283z" />
<glyph unicode="&#xa3;" horiz-adv-x="1040" d="M80 720q0 33 23.5 56.5t56.5 23.5h105q-22 127 -75 250h1q-31 75 -31 150q0 166 117 283t283 117t283 -117q29 -29 51 -61q16 -22 16 -50q0 -33 -23.5 -56.5t-56.5 -23.5q-37 0 -56 24q-17 25 -44 54q-71 70 -170 70t-169.5 -70.5t-70.5 -169.5q0 -45 19 -90 q65 -151 88 -310h293q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-281q2 -232 -83 -480h394l60 120q21 40 70 40q33 0 56.5 -23.5t23.5 -56.5q0 -21 -9 -38l-77 -154q-6 -13 -17 -24q-24 -24 -57 -24h-560q-33 0 -56.5 23.5t-23.5 56.5q0 17 6 32q117 273 113 528 h-119q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xa4;" horiz-adv-x="960" d="M110 460q0 33 24 57l72 67q-46 73 -46 166q0 89 42 161l-68 73q-24 23 -24 56t23.5 56.5t56.5 23.5q32 0 55 -21l69 -74q74 45 166 45q89 0 161 -42l73 69q23 23 56 23t56.5 -23.5t23.5 -56.5t-24 -58l-71 -66q45 -74 45 -166q0 -89 -42 -161l69 -72q23 -24 23 -57 t-23.5 -56.5t-56.5 -23.5q-32 0 -54 22l-1 -1l-69 74q-74 -45 -166 -45q-89 0 -160 42l-77 -72q-22 -20 -53 -20q-33 0 -56.5 23.5t-23.5 56.5zM320 750q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113z" />
<glyph unicode="&#xa5;" d="M80 560q0 33 23.5 56.5t56.5 23.5h400v136l-69 104h-331q-33 0 -56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5h224l-291 435q-13 20 -13 45q0 33 23.5 56.5t56.5 23.5q41 0 65 -33l415 -622l415 622q24 33 65 33q33 0 56.5 -23.5t23.5 -56.5q0 -25 -13 -45l-291 -435h225 q32 0 56 -23q23 -24 23 -57t-23 -56q-24 -24 -56 -24h-332l-69 -104v-136h400q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-400v-400q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v400h-400q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xa6;" horiz-adv-x="480" d="M160 320q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-720q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v720zM160 960v720q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-720q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xa7;" horiz-adv-x="960" d="M80 -80q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5q-166 0 -283 117t-117 283t117 283q20 20 42 37q-22 17 -42 37q-117 117 -117 283t117 283t283 117t283 -117t117 -283 q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5q0 99 -70.5 169.5t-169.5 70.5t-169.5 -70.5t-70.5 -169.5t70.5 -169.5t169.5 -70.5q166 0 283 -117t117 -283t-117 -283q-20 -20 -42 -37q22 -17 42 -37q117 -117 117 -283t-117 -283t-283 -117t-283 117t-117 283z M240 560q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5t-70.5 -169.5z" />
<glyph unicode="&#xa8;" horiz-adv-x="960" d="M139 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM619 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xa9;" horiz-adv-x="1760" d="M80 798q0 330 233.5 563.5t564.5 233.5q330 0 563.5 -233.5t233.5 -563.5q0 -331 -233.5 -564.5t-563.5 -233.5q-331 0 -564.5 233.5t-233.5 564.5zM203 798q0 -280 197.5 -477.5t477.5 -197.5q279 0 476.5 197.5t197.5 477.5q0 279 -197.5 476.5t-476.5 197.5 q-280 0 -477.5 -197.5t-197.5 -476.5zM320 800q0 232 164 396t396 164q210 0 365 -135q28 -25 28 -62q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -51 18q-112 99 -262 99q-166 0 -283 -117t-117 -283t117 -283t283 -117q150 0 261 98q21 16 49 16q33 0 56.5 -23.5t23.5 -56.5 t-25 -59q-155 -135 -365 -135q-232 0 -396 164t-164 396z" />
<glyph unicode="&#xaa;" horiz-adv-x="960" d="M80 1200q0 166 117 283t283 117t283 -117t117 -283v-320q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24q-24 23 -24 55q-103 -79 -240 -79q-166 0 -283 117t-117 283zM240 1200q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5 t-70.5 -169.5z" />
<glyph unicode="&#xab;" horiz-adv-x="960" d="M80 559q0 20 10 39l236 472q6 14 18 26q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -18 -7 -34l-223 -445l223 -446q7 -16 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24q-12 11 -18 25l-234 467q-12 22 -12 43zM480 559q0 20 10 39l236 472q6 14 18 26q23 23 56 23t56.5 -23.5 t23.5 -56.5q0 -18 -7 -34l-223 -445l223 -446q7 -16 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24q-12 11 -18 25l-234 467q-12 22 -12 43z" />
<glyph unicode="&#xac;" horiz-adv-x="1120" d="M80 1040q0 33 23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5v-320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v240h-720q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xad;" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-480q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xae;" horiz-adv-x="1760" d="M80 798q0 330 233.5 563.5t564.5 233.5q330 0 563.5 -233.5t233.5 -563.5q0 -331 -233.5 -564.5t-563.5 -233.5q-331 0 -564.5 233.5t-233.5 564.5zM203 798q0 -280 197.5 -477.5t477.5 -197.5q279 0 476.5 197.5t197.5 477.5q0 279 -197.5 476.5t-476.5 197.5 q-280 0 -477.5 -197.5t-197.5 -476.5zM560 326v944q0 22 15.5 37t36.5 15h263q130 0 222.5 -92t92.5 -222q0 -131 -93 -223q-42 -42 -92 -65l228 -366q9 -12 9 -28q0 -22 -15.5 -37.5t-36.5 -15.5q-29 0 -46 27l-246 394q-12 -1 -23 -1h-210v-367q0 -22 -15.5 -37.5 t-37.5 -15.5q-21 0 -36.5 15.5t-15.5 37.5zM665 798h210q87 0 148.5 61t61.5 149q0 87 -61.5 148t-148.5 61h-210v-419z" />
<glyph unicode="&#xaf;" horiz-adv-x="1120" d="M80 1840q0 33 23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-800q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xb0;" horiz-adv-x="960" d="M80 1200q0 166 117 283t283 117t283 -117t117 -283t-117 -283t-283 -117t-283 117t-117 283zM240 1200q0 -99 70.5 -169.5t169.5 -70.5t169.5 70.5t70.5 169.5t-70.5 169.5t-169.5 70.5t-169.5 -70.5t-70.5 -169.5z" />
<glyph unicode="&#xb1;" horiz-adv-x="1120" d="M80 80q0 33 23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-800q-33 0 -56.5 23.5t-23.5 56.5zM80 800q0 33 23.5 56.5t56.5 23.5h320v320q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-320h320q33 0 56.5 -23.5t23.5 -56.5 t-23.5 -56.5t-56.5 -23.5h-320v-320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v320h-320q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xb2;" horiz-adv-x="640" d="M80 848q0 16 11 28l338 374q47 47 47 112q0 66 -46.5 112.5t-111.5 46.5q-66 0 -112.5 -46.5t-46.5 -112.5q0 -16 -11.5 -27.5t-27.5 -11.5q-17 0 -28.5 11.5t-11.5 27.5q0 99 69.5 168.5t168.5 69.5q98 0 167.5 -69.5t69.5 -168.5q0 -98 -70 -168l-276 -307h307 q16 0 27.5 -11.5t11.5 -27.5q0 -17 -11.5 -28.5t-27.5 -11.5h-396q-17 0 -28.5 11.5t-11.5 28.5z" />
<glyph unicode="&#xb3;" horiz-adv-x="640" d="M80 1041q0 17 11.5 28.5t28.5 11.5q16 0 28 -11.5t12 -28.5q0 -66 46.5 -112.5t113.5 -46.5q66 0 112.5 46.5t46.5 112.5q0 67 -46.5 113.5t-112.5 46.5q-17 0 -28.5 11.5t-11.5 28.5q0 16 11.5 28t28.5 12q49 0 84 35t35 84q0 50 -35 85t-84 35q-50 0 -85 -35t-35 -85 q0 -16 -12 -27.5t-28 -11.5q-17 0 -28.5 11.5t-11.5 27.5q0 83 58.5 141.5t141.5 58.5q82 0 140.5 -58.5t58.5 -141.5q0 -92 -73 -155q23 -14 43 -34q70 -71 70 -170t-70 -169t-169 -70q-100 0 -170 70t-70 169z" />
<glyph unicode="&#xb4;" horiz-adv-x="560" d="M80 1280q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xb5;" horiz-adv-x="1200" d="M80 -400v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65 q-150 -145 -360 -145t-360 145v-545q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xb6;" horiz-adv-x="1120" d="M80 1200q0 166 117 283t283 117h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5v-1360q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v1360h-160v-1360q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v720q-166 0 -283 117t-117 283z" />
<glyph unicode="&#xb7;" horiz-adv-x="400" d="M80 760q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#x2219;" horiz-adv-x="400" d="M80 760q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#xb8;" horiz-adv-x="640" d="M80 -330q0 33 23.5 56.5t56.5 23.5q24 0 43 -12l78 -48q19 -10 39 -10q33 0 56.5 13.5t23.5 36.5t-23.5 36.5t-56.5 13.5t-56.5 23.5t-23.5 56.5q0 14 4 26l39 137q6 19 21 34q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -10 -2 -19l-17 -60q37 -15 69 -41q70 -61 70 -150 t-70.5 -149.5t-169.5 -60.5q-59 0 -114 29l-91 54q-35 29 -35 67z" />
<glyph unicode="&#xb9;" horiz-adv-x="480" d="M120 1521q0 16 12 28q6 6 13 9l120 40q6 2 14 2q16 0 28 -11.5t12 -28.5v-715q0 -17 -12 -28.5t-28 -11.5t-28 11.5t-12 28.5v660l-64 -21q-7 -3 -15 -3q-17 0 -28.5 11.5t-11.5 28.5z" />
<glyph unicode="&#xba;" horiz-adv-x="640" d="M80 1203q0 238 98 339q58 58 141 58q82 0 140 -58q98 -101 98 -339q0 -239 -98 -340q-58 -58 -140 -58q-83 0 -141 58q-98 101 -98 340zM160 1203q0 -199 74 -283q35 -35 85 -35q49 0 84 35q75 84 75 283q0 198 -75 282q-35 36 -84 36q-50 0 -85 -36q-74 -84 -74 -282z " />
<glyph unicode="&#xbb;" horiz-adv-x="960" d="M80 80q0 18 7 34l223 446l-223 445q-7 16 -7 34q0 33 23.5 56.5t56.5 23.5t56 -23q12 -12 18 -26l236 -472q10 -19 10 -39q0 -21 -12 -43l-234 -467q-6 -14 -18 -25q-23 -24 -56 -24t-56.5 23.5t-23.5 56.5zM480 80q0 18 7 34l223 446l-223 445q-7 16 -7 34 q0 33 23.5 56.5t56.5 23.5t56 -23q12 -12 18 -26l236 -472q10 -19 10 -39q0 -21 -12 -43l-234 -467q-6 -14 -18 -25q-23 -24 -56 -24t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xbc;" horiz-adv-x="1440" d="M80 1505q0 20 14 34q8 7 17 11l144 48q8 3 17 3q20 0 34 -14t14 -34v-865q0 -20 -14 -34t-34 -14t-34 14t-14 34v798l-77 -26q-9 -3 -19 -3q-20 0 -34 14t-14 34zM160 80q0 24 12 43l964 1446q21 31 64 31q33 0 56.5 -23.5t23.5 -56.5q0 -24 -12 -43l-958 -1436 q-27 -41 -70 -41q-33 0 -56.5 23.5t-23.5 56.5zM688 288q0 16 9 28l432 624q2 3 5 6q14 14 34 14t34 -14t14 -34v-576h96q20 0 34 -14t14 -34t-14 -34t-34 -14h-96v-192q0 -20 -14 -34t-34 -14t-34 14t-14 34v192h-384q-20 0 -34 14t-14 34zM828 336h292v422z" />
<glyph unicode="&#xbd;" horiz-adv-x="1600" d="M80 1505q0 20 14 34q8 7 17 11l144 48q8 3 17 3q20 0 34 -14t14 -34v-865q0 -20 -14 -34t-34 -14t-34 14t-14 34v798l-77 -26q-9 -3 -19 -3q-20 0 -34 14t-14 34zM160 80q0 24 12 43l964 1446q21 31 64 31q33 0 56.5 -23.5t23.5 -56.5q0 -24 -12 -43l-958 -1436 q-27 -41 -70 -41q-33 0 -56.5 23.5t-23.5 56.5zM943 48q0 20 14 34l410 454q57 57 57 137t-56.5 136t-136.5 56t-136 -56t-56 -136q0 -20 -14 -34t-34 -14t-34 14t-14 34q0 119 84.5 203.5t203.5 84.5q120 0 204.5 -84.5t84.5 -203.5q0 -120 -85 -205l-335 -372h372 q19 0 33.5 -14t14.5 -34t-14.5 -34t-33.5 -14h-481q-20 0 -34 14t-14 34z" />
<glyph unicode="&#xbe;" horiz-adv-x="1600" d="M80 927q0 20 14 34t34 14t34 -14t14 -34q0 -79 55.5 -135t135.5 -56t135.5 56t55.5 135q0 80 -55.5 136t-135.5 56q-20 0 -34 14t-14 34q0 19 14 33t34 14q59 0 101.5 42.5t42.5 101.5t-42.5 101t-101.5 42t-101 -42t-42 -101q0 -20 -14.5 -34t-33.5 -14q-20 0 -34 14 t-14 34q0 99 70 169t169 70t169 -70t70 -169t-70 -169q-9 -9 -18 -17q28 -17 52 -41q84 -85 84 -204t-84 -203t-203 -84t-203 84t-84 203zM320 80q0 24 12 43l964 1446q21 31 64 31q33 0 56.5 -23.5t23.5 -56.5q0 -24 -12 -43l-958 -1436q-27 -41 -70 -41q-33 0 -56.5 23.5 t-23.5 56.5zM848 288q0 16 9 28l432 624q2 3 5 6q14 14 34 14t34 -14t14 -34v-576h96q20 0 34 -14t14 -34t-14 -34t-34 -14h-96v-192q0 -20 -14 -34t-34 -14t-34 14t-14 34v192h-384q-20 0 -34 14t-14 34zM988 336h292v422z" />
<glyph unicode="&#xbf;" horiz-adv-x="1120" d="M80 0q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5t-94 227l-165 153q-141 141 -141 340q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5q0 -133 94 -227l165 -153q141 -141 141 -340t-140.5 -339.5 t-339.5 -140.5t-339.5 140.5t-140.5 339.5zM440 999q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#xc0;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM453 2000 q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xc1;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM587 1760 q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xc2;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM400 1800 q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xc3;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM308 1871 q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xc4;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM380 1840 q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM860 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xc5;" horiz-adv-x="1440" d="M80 80q0 19 7 34l556 1430q6 18 21 33q23 23 56 23t57 -23q14 -15 20 -33l556 -1430q7 -15 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 23q-12 12 -18 26l-199 511h-574l-199 -511q-6 -14 -17 -26q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5zM495 720h450l-225 579zM518 1879 q0 83 59 142t143 59q83 0 142 -59t59 -142q0 -84 -59 -143t-142 -59q-84 0 -143 59t-59 143zM619 1879q0 -42 29.5 -71.5t71.5 -29.5q41 0 70.5 29.5t29.5 71.5q0 41 -29.5 70.5t-70.5 29.5q-42 0 -71.5 -29.5t-29.5 -70.5z" />
<glyph unicode="&#xc6;" horiz-adv-x="1760" d="M80 80q0 22 10 39l802 1444q23 37 68 37h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-560v-640h400q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-400v-480h560q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640q-33 0 -56.5 23.5 t-23.5 56.5v560h-317l-335 -603q-25 -37 -68 -37q-33 0 -56.5 23.5t-23.5 56.5zM652 800h228v410z" />
<glyph unicode="&#xc7;" horiz-adv-x="1480" d="M80 800q0 331 234.5 565.5t565.5 234.5q286 0 509 -183q23 -24 23 -57t-23.5 -56.5t-56.5 -23.5t-57 24q-169 136 -395 136q-265 0 -452.5 -187.5t-187.5 -452.5t187.5 -452.5t452.5 -187.5q229 0 400 140q20 14 46 14q33 0 56.5 -23.5t23.5 -56.5t-23 -56 q-223 -178 -503 -178q-331 0 -565.5 234.5t-234.5 565.5zM506 -330q0 33 23.5 56.5t56.5 23.5q24 0 43 -12l78 -48q19 -10 39 -10q33 0 56.5 13.5t23.5 36.5t-23.5 36.5t-56.5 13.5t-56.5 23.5t-23.5 56.5q0 14 4 26l39 137q6 19 21 34q23 23 56 23t56.5 -23.5t23.5 -56.5 q0 -10 -2 -19l-17 -60q37 -15 69 -41q70 -61 70 -150t-70.5 -149.5t-169.5 -60.5q-59 0 -114 29l-91 54q-35 29 -35 67z" />
<glyph unicode="&#xc8;" d="M81 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-560h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5 t-23.5 56.5zM375 2000q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xc9;" d="M81 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-560h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5 t-23.5 56.5zM509 1760q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xca;" d="M81 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-560h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5 t-23.5 56.5zM320 1800q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xcb;" d="M81 80v1440q0 33 23.5 56.5t56.5 23.5h960q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-880v-560h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640v-560h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-960q-33 0 -56.5 23.5 t-23.5 56.5zM302 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM782 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xcc;" horiz-adv-x="480" d="M160 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM-27 2000q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z " />
<glyph unicode="&#xcd;" horiz-adv-x="480" d="M160 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM107 1760q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z " />
<glyph unicode="&#xce;" horiz-adv-x="480" d="M160 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM-80 1800q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126 q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xcf;" horiz-adv-x="480" d="M160 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM-100 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM380 1840q0 41 29.5 70.5 t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xd0;" horiz-adv-x="1520" d="M0 800q0 33 23.5 56.5t56.5 23.5h159v640q0 33 23.5 56.5t56.5 23.5h320q331 0 565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5h-320q-33 0 -56.5 23.5t-23.5 56.5v640h-159q-33 0 -56.5 23.5t-23.5 56.5zM399 160h240q265 0 452.5 187.5t187.5 452.5 t-187.5 452.5t-452.5 187.5h-240v-560h320q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-320v-560z" />
<glyph unicode="&#xd1;" horiz-adv-x="1440" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5q36 0 62 -29l978 -1258v1207q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1440q0 -33 -23.5 -56.5t-56.5 -23.5q-35 0 -60 26l-980 1260v-1206q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM308 1871 q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xd2;" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5zM693 2000 q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xd3;" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5zM677 1760 q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xd4;" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5zM560 1800 q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xd5;" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5zM468 1871 q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xd6;" horiz-adv-x="1760" d="M80 800q0 331 234.5 565.5t565.5 234.5t565.5 -234.5t234.5 -565.5t-234.5 -565.5t-565.5 -234.5t-565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5t452.5 187.5t187.5 452.5t-187.5 452.5t-452.5 187.5t-452.5 -187.5t-187.5 -452.5zM540 1840 q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM1020 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xd7;" horiz-adv-x="960" d="M80 400q0 32 22 56l264 264l-264 264q-22 24 -22 56q0 33 23.5 56.5t56.5 23.5t58 -24l262 -262l262 262q25 24 58 24t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-264 -264l264 -264q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-265 265l-265 -265 q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xd8;" horiz-adv-x="1760" d="M80 80q0 32 21 55l159 159q-180 216 -180 506q0 331 234.5 565.5t565.5 234.5q290 0 506 -180l157 157q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -29 -18 -51l-162 -163q180 -216 180 -506q0 -331 -234.5 -565.5t-565.5 -234.5q-290 0 -506 180l-157 -157q-24 -23 -57 -23 t-56.5 23.5t-23.5 56.5zM240 800q0 -224 134 -392l898 898q-168 134 -392 134q-265 0 -452.5 -187.5t-187.5 -452.5zM488 294q168 -134 392 -134q265 0 452.5 187.5t187.5 452.5q0 224 -134 393z" />
<glyph unicode="&#xd9;" d="M80 560v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -166 117 -283t283 -117t283 117t117 283v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -232 -164 -396t-396 -164t-396 164t-164 396zM373 2000q0 33 23.5 56.5t56.5 23.5t57 -23 l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xda;" d="M80 560v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -166 117 -283t283 -117t283 117t117 283v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -232 -164 -396t-396 -164t-396 164t-164 396zM507 1760q0 31 20 54l243 243q24 23 57 23 t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xdb;" d="M80 560v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -166 117 -283t283 -117t283 117t117 283v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -232 -164 -396t-396 -164t-396 164t-164 396zM320 1800q0 40 40 70l239 159q18 11 41 11 t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xdc;" d="M80 560v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -166 117 -283t283 -117t283 117t117 283v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -232 -164 -396t-396 -164t-396 164t-164 396zM300 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5 t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM780 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xdd;" d="M80 1520q0 33 23.5 56.5t56.5 23.5q41 0 65 -33l415 -622l415 622q24 33 65 33q33 0 56.5 -23.5t23.5 -56.5q0 -25 -13 -45l-467 -699v-696q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v696l-467 699q-13 20 -13 45zM507 1760q0 31 20 54l243 243q24 23 57 23 t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xde;" d="M80 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-240h480q199 0 339.5 -140.5t140.5 -339.5t-140.5 -339.5t-339.5 -140.5h-480v-240q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM240 480h480q133 0 226.5 93.5t93.5 226.5t-93.5 226.5 t-226.5 93.5h-480v-640z" />
<glyph unicode="&#xdf;" horiz-adv-x="1120" d="M80 80v1120q0 166 117 283t283 117t283 -117t117 -283q0 -147 -92 -255q-25 -34 -25 -78q0 -77 56 -108q56 -28 104 -76q117 -117 117 -283t-117 -283t-283 -117t-283 117q-26 26 -26 59t23.5 56.5t56.5 23.5t60 -25q70 -71 169 -71t169.5 70.5t70.5 169.5t-70 170 q-29 28 -62.5 47t-63.5 50q-84 83 -84 201q0 107 72 188q48 62 48 144q0 99 -70.5 169.5t-169.5 70.5t-169 -70q-71 -71 -71 -170v-1120q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xe0;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM400 1520 q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xe1;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM480 1280 q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xe2;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM320 1320 q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xe3;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM235 1391 q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xe4;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM300 1360 q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM780 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe5;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396v-480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM439 1399 q0 83 59 142t143 59q83 0 142 -59t59 -142q0 -84 -59 -143t-142 -59q-84 0 -143 59t-59 143zM540 1399q0 -42 29.5 -71.5t71.5 -29.5q41 0 70.5 29.5t29.5 71.5q0 41 -29.5 70.5t-70.5 29.5q-42 0 -71.5 -29.5t-29.5 -70.5z" />
<glyph unicode="&#xe6;" horiz-adv-x="2240" d="M80 560q0 232 164 396t396 164t396 -164q49 -49 84 -105q35 56 84 105q164 164 396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135 q-232 0 -400 168v-88q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v88q-168 -168 -400 -168t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM1207 640h786q-22 115 -110 203q-117 117 -283 117 t-283 -117q-88 -88 -110 -203z" />
<glyph unicode="&#xe7;" horiz-adv-x="1120" d="M80 560q0 232 164 396t396 164q210 0 365 -135q28 -25 28 -62q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -51 18q-112 99 -262 99q-166 0 -283 -117t-117 -283t117 -283t283 -117q150 0 261 98q21 16 49 16q33 0 56.5 -23.5t23.5 -56.5t-25 -59q-155 -135 -365 -135 q-232 0 -396 164t-164 396zM317 -330q0 33 23.5 56.5t56.5 23.5q24 0 43 -12l78 -48q19 -10 39 -10q33 0 56.5 13.5t23.5 36.5t-23.5 36.5t-56.5 13.5t-56.5 23.5t-23.5 56.5q0 14 4 26l39 137q6 19 21 34q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -10 -2 -19l-17 -60 q37 -15 69 -41q70 -61 70 -150t-70.5 -149.5t-169.5 -60.5q-59 0 -114 29l-91 54q-35 29 -35 67z" />
<glyph unicode="&#xe8;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135q-232 0 -396 164t-164 396zM247 640h786 q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203zM400 1520q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xe9;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135q-232 0 -396 164t-164 396zM247 640h786 q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203zM480 1280q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xea;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135q-232 0 -396 164t-164 396zM247 640h786 q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203zM320 1320q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xeb;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135q-232 0 -396 164t-164 396zM247 640h786 q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203zM300 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM780 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5 t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xec;" horiz-adv-x="480" d="M160 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM0 1520q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xed;" horiz-adv-x="480" d="M160 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM82 1280q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xee;" horiz-adv-x="560" d="M201 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM-40 1320q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126 q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xef;" horiz-adv-x="600" d="M220 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM-39 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM441 1360q0 41 29.5 70.5 t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xf0;" d="M80 560q0 232 164 396t396 164q79 0 150 -19l-104 179l-139 -81q-28 -17 -60.5 -8.5t-48.5 36.5q-17 29 -8.5 61t36.5 49l140 81l-34 58q-12 22 -12 44q0 33 23.5 56.5t56.5 23.5q46 0 68 -37l37 -63l136 79q28 17 60.5 8.5t48.5 -36.5q17 -29 8.5 -61t-36.5 -49 l-137 -80l308 -532q67 -121 67 -269q0 -232 -164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283z" />
<glyph unicode="&#xf1;" horiz-adv-x="1200" d="M80 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-65q150 145 360 145q215 0 367.5 -152.5t152.5 -367.5v-520q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v520q0 149 -105.5 254.5t-254.5 105.5t-254.5 -105.5t-105.5 -254.5v-520 q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM200 1391q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35 q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xf2;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM400 1520q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54 q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xf3;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM480 1280q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56 l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xf4;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM320 1320q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70 q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xf5;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM235 1391q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35 q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#xf6;" d="M80 560q0 232 164 396t396 164t396 -164t164 -396t-164 -396t-396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM300 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5 t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM780 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xf7;" horiz-adv-x="960" d="M80 720q0 33 23.5 56.5t56.5 23.5h640q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-640q-33 0 -56.5 23.5t-23.5 56.5zM380 420q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM380 1020q0 41 29.5 70.5 t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xf8;" d="M80 80q0 32 22 56l89 89q-111 144 -111 335q0 232 164 396t396 164q191 0 336 -111l85 85q26 26 59 26t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-89 -89q111 -144 111 -335q0 -232 -164 -396t-396 -164q-191 0 -335 111l-88 -88q-24 -23 -57 -23t-56.5 23.5t-23.5 56.5z M240 560q0 -124 65 -221l556 555q-97 66 -221 66q-166 0 -283 -117t-117 -283zM419 225q97 -65 221 -65q166 0 283 117t117 283q0 124 -65 221z" />
<glyph unicode="&#xf9;" horiz-adv-x="1200" d="M80 520v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65q-150 -145 -360 -145 q-215 0 -367.5 152.5t-152.5 367.5zM400 1520q0 33 23.5 56.5t56.5 23.5t57 -23l243 -243q20 -23 20 -54q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -55 21l-243 243q-22 24 -22 56z" />
<glyph unicode="&#xfa;" horiz-adv-x="1200" d="M80 520v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65q-150 -145 -360 -145 q-215 0 -367.5 152.5t-152.5 367.5zM400 1280q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfb;" horiz-adv-x="1200" d="M80 520v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65q-150 -145 -360 -145 q-215 0 -367.5 152.5t-152.5 367.5zM280 1320q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfc;" horiz-adv-x="1200" d="M80 520v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-520q0 -149 105.5 -254.5t254.5 -105.5t254.5 105.5t105.5 254.5v520q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v65q-150 -145 -360 -145 q-215 0 -367.5 152.5t-152.5 367.5zM260 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM740 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xfd;" horiz-adv-x="1120" d="M80 1040q0 33 23.5 56.5t56.5 23.5t57 -23q13 -14 19 -30l324 -777l324 777q6 16 20 30q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -20 -9 -37l-596 -1430q-6 -16 -19 -29q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5q0 20 9 37l185 444l-384 922q-9 17 -9 37zM427 1280 q0 31 20 54l243 243q24 23 57 23t56.5 -23.5t23.5 -56.5q0 -32 -22 -56l-243 -243q-23 -21 -55 -21q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfe;" d="M80 -400v1922q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-568q168 168 400 168t396 -164t164 -396t-164 -396t-396 -164t-400 168v-570q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM240 562q0 -166 117 -283t283 -117t283 117t117 283t-117 283 t-283 117t-283 -117t-117 -283z" />
<glyph unicode="&#xff;" horiz-adv-x="1120" d="M80 1040q0 33 23.5 56.5t56.5 23.5t57 -23q13 -14 19 -30l324 -777l324 777q6 16 20 30q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -20 -9 -37l-596 -1430q-6 -16 -19 -29q-24 -24 -57 -24t-56.5 23.5t-23.5 56.5q0 20 9 37l185 444l-384 922q-9 17 -9 37zM220 1360 q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM700 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#x131;" horiz-adv-x="480" d="M160 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x152;" horiz-adv-x="2160" d="M80 800q0 331 234.5 565.5t565.5 234.5h1121q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-881v-560h641q33 0 56.5 -23.5t23.5 -56.5q0 -34 -23.5 -57.5t-56.5 -23.5h-641v-559h880q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-1120 q-331 0 -565.5 234.5t-234.5 565.5zM240 800q0 -265 187.5 -452.5t452.5 -187.5h80v1280h-80q-265 0 -452.5 -187.5t-187.5 -452.5z" />
<glyph unicode="&#x153;" horiz-adv-x="2240" d="M80 560q0 232 164 396t396 164t396 -164q49 -49 84 -105q35 56 84 105q164 164 396 164t396 -164t164 -396q0 -33 -23.5 -56.5t-56.5 -23.5h-873q22 -115 110 -203q117 -117 283 -117q150 0 258 95q22 17 50 17q33 0 56.5 -23.5t23.5 -56.5t-23 -57q-155 -135 -365 -135 q-232 0 -396 164q-49 49 -84 105q-35 -56 -84 -105q-164 -164 -396 -164t-396 164t-164 396zM240 560q0 -166 117 -283t283 -117t283 117t117 283t-117 283t-283 117t-283 -117t-117 -283zM1207 640h786q-22 115 -110 203q-117 117 -283 117t-283 -117q-88 -88 -110 -203z " />
<glyph unicode="&#x178;" d="M80 1520q0 33 23.5 56.5t56.5 23.5q41 0 65 -33l415 -622l415 622q24 33 65 33q33 0 56.5 -23.5t23.5 -56.5q0 -25 -13 -45l-467 -699v-696q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v696l-467 699q-13 20 -13 45zM300 1840q0 41 29.5 70.5t70.5 29.5 t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM780 1840q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#x2c6;" horiz-adv-x="800" d="M80 1320q0 40 40 70l239 159q18 11 41 11t41 -11l239 -159q40 -30 40 -70q0 -33 -23.5 -56.5t-56.5 -23.5q-29 0 -50 17l-190 126l-190 -126q-21 -17 -50 -17q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2da;" horiz-adv-x="560" d="M80 1399q0 83 59 142t143 59q83 0 142 -59t59 -142q0 -84 -59 -143t-142 -59q-84 0 -143 59t-59 143zM181 1399q0 -42 29.5 -71.5t71.5 -29.5q41 0 70.5 29.5t29.5 71.5q0 41 -29.5 70.5t-70.5 29.5q-42 0 -71.5 -29.5t-29.5 -70.5z" />
<glyph unicode="&#x2dc;" horiz-adv-x="960" d="M71 1391q0 33 23.5 56.5t56.5 23.5q32 0 56 -22q47 -48 113 -48q56 0 100 35q89 80 212 80q133 0 227 -94q22 -24 22 -56q0 -33 -23.5 -56.5t-56.5 -23.5q-32 0 -56 22q-47 48 -113 48q-57 0 -100 -35q-90 -80 -212 -80q-133 0 -227 94q-22 24 -22 56z" />
<glyph unicode="&#x2000;" horiz-adv-x="1040" />
<glyph unicode="&#x2001;" horiz-adv-x="2080" />
<glyph unicode="&#x2002;" horiz-adv-x="1040" />
<glyph unicode="&#x2003;" horiz-adv-x="2080" />
<glyph unicode="&#x2004;" horiz-adv-x="693" />
<glyph unicode="&#x2005;" horiz-adv-x="520" />
<glyph unicode="&#x2006;" horiz-adv-x="346" />
<glyph unicode="&#x2007;" horiz-adv-x="346" />
<glyph unicode="&#x2008;" horiz-adv-x="260" />
<glyph unicode="&#x2009;" horiz-adv-x="416" />
<glyph unicode="&#x200a;" horiz-adv-x="115" />
<glyph unicode="&#x2010;" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-480q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2011;" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-480q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2012;" horiz-adv-x="800" d="M80 560q0 33 23.5 56.5t56.5 23.5h480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-480q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2013;" horiz-adv-x="800" d="M-80 560q0 33 23.5 56.5t56.5 23.5h800q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-800q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2014;" horiz-adv-x="1920" d="M-80 560q0 33 23.5 56.5t56.5 23.5h1920q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-1920q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x2018;" horiz-adv-x="480" d="M120 1225q0 175 152 358q17 17 42 17q24 0 41.5 -17.5t17.5 -41.5q0 -14 -5 -26q-98 -237 -3 -435q8 -18 8 -40q0 -41 -29.5 -70.5t-70.5 -29.5q-62 0 -90 58q-63 112 -63 227z" />
<glyph unicode="&#x2019;" horiz-adv-x="480" d="M120 999q0 14 5 26q98 237 3 435q-8 18 -8 40q0 41 29.5 70.5t70.5 29.5q62 0 90 -58q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17q-24 0 -41.5 17.5t-17.5 41.5z" />
<glyph unicode="&#x201a;" horiz-adv-x="480" d="M120 219q0 41 29.5 70.5t70.5 29.5q62 0 90 -58q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17q-24 0 -41.5 17.5t-17.5 41.5q0 14 5 26q98 237 3 435q-8 18 -8 40z" />
<glyph unicode="&#x201c;" horiz-adv-x="760" d="M80 1227q0 175 152 358q17 17 42 17q24 0 41.5 -17.5t17.5 -41.5q0 -14 -5 -26q-98 -237 -3 -435q8 -18 8 -40q0 -41 -29.5 -70.5t-70.5 -29.5q-62 0 -90 58q-63 112 -63 227zM427 1227q0 175 152 358q17 17 42 17q24 0 41.5 -17.5t17.5 -41.5q0 -14 -5 -26 q-98 -237 -3 -435q8 -18 8 -40q0 -41 -29.5 -70.5t-70.5 -29.5q-62 0 -90 58q-63 112 -63 227z" />
<glyph unicode="&#x201d;" horiz-adv-x="760" d="M80 1001q0 14 5 26q98 237 3 435q-8 18 -8 40q0 41 29.5 70.5t70.5 29.5q62 0 90 -58q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17q-24 0 -41.5 17.5t-17.5 41.5zM427 1001q0 14 5 26q98 237 3 435q-8 18 -8 40q0 41 29.5 70.5t70.5 29.5q62 0 90 -58 q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17q-24 0 -41.5 17.5t-17.5 41.5z" />
<glyph unicode="&#x201e;" horiz-adv-x="760" d="M80 220q0 41 29.5 70.5t70.5 29.5q62 0 90 -58q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17q-24 0 -41.5 17.5t-17.5 41.5q0 14 5 26q98 237 3 435q-8 18 -8 40zM427 220q0 41 29.5 70.5t70.5 29.5q62 0 90 -58q63 -112 63 -227q0 -175 -152 -358q-17 -17 -42 -17 q-24 0 -41.5 17.5t-17.5 41.5q0 14 5 26q98 237 3 435q-8 18 -8 40z" />
<glyph unicode="&#x2022;" horiz-adv-x="800" d="M160 800q0 99 70.5 169.5t169.5 70.5t169.5 -70.5t70.5 -169.5t-70.5 -169.5t-169.5 -70.5t-169.5 70.5t-70.5 169.5z" />
<glyph unicode="&#x2026;" horiz-adv-x="1440" d="M80 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85zM560 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85zM1040 120q0 50 35 85t85 35t85 -35t35 -85t-35 -85t-85 -35t-85 35t-35 85z" />
<glyph unicode="&#x202f;" horiz-adv-x="416" />
<glyph unicode="&#x2039;" horiz-adv-x="560" d="M80 559q0 20 10 39l236 472q6 14 18 26q23 23 56 23t56.5 -23.5t23.5 -56.5q0 -18 -7 -34l-223 -445l223 -446q7 -16 7 -34q0 -33 -23.5 -56.5t-56.5 -23.5t-56 24q-12 11 -18 25l-234 467q-12 22 -12 43z" />
<glyph unicode="&#x203a;" horiz-adv-x="560" d="M80 80q0 18 7 34l223 446l-223 445q-7 16 -7 34q0 33 23.5 56.5t56.5 23.5t56 -23q12 -12 18 -26l236 -472q10 -19 10 -39q0 -21 -12 -43l-234 -467q-6 -14 -18 -25q-23 -24 -56 -24t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#x205f;" horiz-adv-x="520" />
<glyph unicode="&#x20ac;" horiz-adv-x="1480" d="M80 800q0 331 234.5 565.5t565.5 234.5q286 0 509 -183q23 -24 23 -57t-23.5 -56.5t-56.5 -23.5t-57 24q-169 136 -395 136q-265 0 -452 -187q-97 -97 -143 -213h915q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-956q-4 -39 -4 -80t4 -80h956q33 0 56.5 -23.5 t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-915q46 -116 143 -212q187 -188 452 -188q229 0 400 140q20 14 46 14q33 0 56.5 -23.5t23.5 -56.5t-23 -56q-223 -178 -503 -178q-331 0 -565.5 234.5t-234.5 565.5z" />
<glyph unicode="&#x2122;" horiz-adv-x="1500" d="M80.001 1568.04q0 13.2012 10.5752 22.6016t25.4258 9.40039h468.013q14.8506 0 25.4258 -9.40039t10.5752 -22.6016t-10.5752 -22.6016t-25.4258 -9.40039h-198.005v-544.033q0 -13.2012 -10.5762 -22.6016q-10.5752 -9.40039 -25.4258 -9.40039 q-14.8496 0 -25.4248 9.40039t-10.5752 22.6016v544.033h-198.006q-14.8506 0 -25.4258 9.40039t-10.5752 22.6016zM680.001 992.002v576.035q0 13.2012 10.5752 22.6016t25.4258 9.40039q21.6006 0 31.9512 -16.8008l292.058 -519.632l292.058 519.632 q10.3506 16.8008 31.9512 16.8008q14.8506 0 25.4258 -9.40039t10.5752 -22.6016v-576.035q0 -13.2012 -10.5752 -22.6016t-25.4258 -9.40039t-25.4258 9.40039t-10.5752 22.6016v440.427l-256.957 -456.828q-9.4502 -15.6006 -31.0508 -15.6006q-22.501 0 -33.3008 19.6016 l-254.707 452.827v-440.427q0 -13.2012 -10.5752 -22.6016t-25.4258 -9.40039t-25.4258 9.40039t-10.5752 22.6016z" />
<glyph unicode="&#xe000;" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" />
<glyph unicode="&#xf001;" horiz-adv-x="1120" d="M80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 440 480q380 0 380 -240q0 -41 -29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5q0 80 -180 80q-280 0 -280 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5 t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5zM880 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1120" d="M80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 440 480q380 0 380 -240q0 -41 -29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5q0 80 -180 80q-280 0 -280 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5 t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5zM880 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xf002;" horiz-adv-x="1200" d="M80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480q240 0 240 -240v-1200h80q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-160q-33 0 -56.5 23.5t-23.5 56.5v1280q0 80 -80 80q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5 t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1200" d="M80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480q240 0 240 -240v-1200h80q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-160q-33 0 -56.5 23.5t-23.5 56.5v1280q0 80 -80 80q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5 t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfb03;" horiz-adv-x="2080" d="M1740 1360q0 41 29.5 70.5t70.5 29.5t70.5 -29.5t29.5 -70.5t-29.5 -70.5t-70.5 -29.5t-70.5 29.5t-29.5 70.5zM1760 80v960q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-960q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM880 980q0 33 23.5 56.5 t56.5 23.5h80v60q0 480 480 480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5 t-23.5 56.5zM80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5 v820h-80q-33 0 -56.5 23.5t-23.5 56.5z" />
<glyph unicode="&#xfb04;" horiz-adv-x="2080" d="M1680 80v1440q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5v-1360h80q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-160q-33 0 -56.5 23.5t-23.5 56.5zM880 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5 t-56.5 -23.5q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5zM80 980q0 33 23.5 56.5t56.5 23.5h80v60q0 480 480 480 q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5q-320 0 -320 -320v-60h241q33 0 56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5h-241v-820q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5v820h-80q-33 0 -56.5 23.5t-23.5 56.5z" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 80 KiB

View file

@ -1,26 +0,0 @@
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on February 9, 2012 */
@font-face {
font-family: 'Comfortaa';
src: url('comfortaa-regular-webfont.eot');
src: url('comfortaa-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('comfortaa-regular-webfont.woff') format('woff'),
url('comfortaa-regular-webfont.svg#ComfortaaRegular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Lobster';
src: url('lobster-webfont.eot');
src: url('lobster-webfont.eot?#iefix') format('embedded-opentype'),
url('lobster-webfont.woff') format('woff'),
url('lobster-webfont.svg#Lobster1.4Regular') format('svg');
font-weight: normal;
font-style: normal;
}

View file

@ -1,247 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : Copyright c 2010 by Pablo Impallari wwwimpallaricom All rights reserved
Designer : Pablo Impallari
Foundry : Pablo Impallari wwwimpallaricom
Foundry URL : wwwimpallaricom
</metadata>
<defs>
<font id="Lobster1.4Regular" horiz-adv-x="1034" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="444" />
<glyph unicode=" " horiz-adv-x="444" />
<glyph unicode="&#x09;" horiz-adv-x="444" />
<glyph unicode="&#xa0;" horiz-adv-x="444" />
<glyph unicode="!" horiz-adv-x="526" d="M70 163.5q0 67.5 48 115t115.5 47.5t114.5 -47.5t47 -114.5t-47 -115.5t-114.5 -48.5t-115.5 48t-48 115.5zM201 473l145 961h295l-266 -961h-174z" />
<glyph unicode="&#x22;" horiz-adv-x="860" d="M127 1149l125 387h215l-186 -387h-154zM449 1149l124 387h215l-186 -387h-153z" />
<glyph unicode="#" horiz-adv-x="1350" d="M92 227l43 209h213l43 232h-209l43 209h203l107 593h180l-133 -593h215l106 593h180l-133 -593h213l-41 -209h-217l-51 -232h219l-41 -209h-225l-62 -282h-116l51 282h-242l-61 -282h-117l51 282h-219zM485 436h232l43 232h-223z" />
<glyph unicode="$" horiz-adv-x="825" d="M49 455q0 79 43.5 127.5t95.5 48.5t74.5 -15.5t22.5 -35.5q-82 -17 -82 -152q0 -45 25.5 -77t60.5 -48l73 402l-76 59q-87 67 -114 119.5t-27 105.5q0 104 98 182t218 82l39 217h118l-51 -223q80 -14 113 -41q65 -50 65 -126q0 -158 -98 -158q-41 0 -80 47q49 29 49 106 q0 23 -15 49.5t-50 40.5l-74 -329l80 -58q152 -105 152 -251.5t-101.5 -225t-267.5 -82.5l-59 -274h-56l49 276q-94 7 -160 60q-65 53 -65 174zM340 1013.5q0 -55.5 57 -114.5l49 277q-60 -14 -83 -60.5t-23 -102zM358 295q73 10 105 63q31 53 31 128.5t-60 148.5z" />
<glyph unicode="%" horiz-adv-x="1319" d="M219 986q0 200 90 326t242 126q90 0 129 -59.5t39 -189t-83 -276.5t-226 -147q-109 0 -150 58t-41 162zM248 0l790 1536h148l-791 -1536h-147zM367 1016q0 -92 10 -133t47 -41q76 0 124 117.5t48 277.5q0 53 -9 91t-42 38q-51 0 -103 -78q-75 -114 -75 -272zM727 218 q0 202 90 328t242 126q91 0 139.5 -59t48.5 -194.5t-73 -263.5q-87 -155 -251 -155q-114 0 -155 57t-41 161zM864 209q0 -51 10 -92t48 -41q74 0 119.5 109t45.5 260t-57 151q-49 0 -96 -76q-70 -110 -70 -311z" />
<glyph unicode="&#x26;" horiz-adv-x="1397" d="M23 394q0 164 97 294t273 166q-203 109 -203 311q0 148 124 259.5t331 111.5q157 0 267 -68.5t110 -205.5q0 -189 -143 -189q-72 0 -117 53q34 11 62 68.5t28 85.5q0 166 -135 166q-109 0 -179.5 -74t-70.5 -170.5t62 -188.5q63 -91 208 -157q-184 -77 -270 -185.5 t-86 -223.5t70.5 -195t169.5 -80q195 0 305 199q41 74 65 186l-75 8q-35 4 -70 4q-134 0 -193 -92l-14 2q31 127 133 208t262 81l156 -10q55 0 111.5 20.5t82.5 67.5h13q0 -89 -94 -177.5t-218 -107.5q-123 -443 -389 -542q-83 -31 -219.5 -31t-215.5 35t-132 93 q-106 114 -106 278z" />
<glyph unicode="'" horiz-adv-x="549" d="M209 1149l125 387h215l-187 -387h-153z" />
<glyph unicode="(" horiz-adv-x="895" d="M283 205q0 196 47 403q97 432 345 713q127 143 275 215l27 -82q-225 -111 -387 -510q-99 -240 -138 -523q-20 -138 -20 -271q0 -376 150 -603l-68 -59q-231 254 -231 717z" />
<glyph unicode=")" horiz-adv-x="846" d="M-59 -430q115 57 213 193q202 270 289 703q42 208 42 408q0 378 -149 603l67 59q120 -132 176 -320t56 -392q0 -423 -181 -799q-87 -182 -211.5 -323t-275.5 -214z" />
<glyph unicode="*" horiz-adv-x="1055" d="M176 1026l223 129l-223 129l62 107l219 -127v276h131v-276l219 127l61 -107l-223 -129l223 -129l-61 -106l-219 127v-277h-131v277l-219 -127z" />
<glyph unicode="+" horiz-adv-x="1055" d="M109 420l49 229h262l55 250h232l-56 -250h260l-47 -229h-262l-55 -252h-232l56 252h-262z" />
<glyph unicode="," horiz-adv-x="442" d="M49 143q0 77 46.5 125.5t115.5 48.5q100 0 130 -93q9 -29 9 -68q0 -91 -72.5 -211.5t-193.5 -202.5q-18 12 -18 37q0 33 53 89t53 87t-34 53q-89 58 -89 135z" />
<glyph unicode="-" horiz-adv-x="594" d="M39 455l37 161h409l-34 -161h-412z" />
<glyph unicode="." horiz-adv-x="539" d="M63 153q0 67 47 116q48 48 115.5 48t115.5 -48t48 -116t-48.5 -114.5t-115 -46.5t-115.5 47q-47 47 -47 114z" />
<glyph unicode="/" horiz-adv-x="637" d="M23 -512l434 2048h147l-434 -2048h-147z" />
<glyph unicode="0" horiz-adv-x="1118" d="M61 486q0 588 293 876q177 174 418 174q365 0 365 -521q0 -360 -169 -676q-190 -357 -496 -357q-236 0 -332 141q-79 118 -79 363zM375 463q0 -309 121 -309q88 0 156 86q135 168 190 539q26 176 26 297q0 204 -18 268q-25 86 -90.5 86t-145.5 -96q-134 -162 -198 -452 q-41 -180 -41 -419z" />
<glyph unicode="1" horiz-adv-x="649" d="M43 0l270 1278h-194l24 94q115 0 194 20q166 43 327 140l-326 -1532h-295z" />
<glyph unicode="2" horiz-adv-x="1008" d="M-23 27v34q0 112 49 204q81 152 284 353.5t291 389.5q50 111 50 247q0 76 -40 122t-88 46q-94 0 -128.5 -40t-34.5 -119t42 -124q15 -16 36 -22q-78 -69 -148.5 -69t-112.5 47t-42 118q0 138 104 229t318 91q389 0 389 -330q0 -281 -300 -534l-164 -136 q-81 -65 -151.5 -129.5t-113.5 -134.5h10q92 0 184.5 -18.5t176 -18.5t119.5 9q64 17 123 72l63 61q2 -25 2 -47v-43q0 -163 -49.5 -235.5t-179.5 -72.5t-229.5 25.5t-157 37t-105.5 11.5q-63 0 -114 -23l-78 -34q-5 16 -5 33z" />
<glyph unicode="3" horiz-adv-x="1053" d="M12 343q0 123 62 206q63 82 194 82t152 -105q-180 -12 -180 -221q0 -152 98 -175q28 -7 75.5 -7t100.5 28.5t90 76.5q76 99 76 241q0 198 -150 320q-51 42 -122 67q162 47 256 164.5t94 234.5q0 168 -174 168q-57 0 -100.5 -43.5t-43.5 -99.5q0 -140 78 -162 q-77 -69 -156 -69q-100 0 -136 99q-11 33 -11 88.5t33 113t90 98.5q120 86 300.5 86t281 -87t100.5 -201t-69.5 -217t-211.5 -175q135 -45 196.5 -136.5t61.5 -201.5q0 -197 -157 -356q-167 -169 -412 -169q-58 0 -122 9q-161 26 -247 150q-47 70 -47 193z" />
<glyph unicode="4" horiz-adv-x="975" d="M16 563q18 56 47 120l129 277q123 271 123 453q0 64 -14 123q152 0 209 -110q18 -37 18 -109.5t-31.5 -155t-78 -157.5t-98 -145.5t-91.5 -143.5h320l166 780l303 41l-176 -821h131l-41 -152h-123l-119 -563h-295l121 563h-500z" />
<glyph unicode="5" horiz-adv-x="1059" d="M31 285q0 147 79 218.5t195.5 71.5t136.5 -104q-80 -11 -132 -57t-52 -133.5t56 -124.5q42 -29 109 -29q122 0 192.5 115t70.5 262.5t-60 222t-154.5 74.5t-155.5 -29q-113 -55 -160 -86l168 817q54 -6 102 -12l93 -11q94 -12 173 -12q164 0 332 66q4 -32 4 -74 q0 -98 -55.5 -164.5t-179.5 -66.5q-80 0 -196 23.5t-146 27.5l-82 -371q132 64 241 64q191 0 283 -121t92 -303q0 -234 -140 -386q-160 -173 -454 -173q-360 0 -360 295z" />
<glyph unicode="6" horiz-adv-x="1018" d="M33 395v37q0 137 32 304t75 286q90 242 248 378t378 136q108 0 171.5 -51t63.5 -110.5t-44 -100.5t-138 -45q33 31 33 72.5t-29 76.5t-73 35q-100 0 -202 -121.5t-172 -401.5q-38 -149 -54.5 -308.5t-16.5 -221.5q0 -126 40 -168t107 -42q118 0 206 134q92 136 92 282 q0 214 -107 214t-182 -155q-41 59 -41 111q0 96 85 154t181 58t148.5 -30.5t85.5 -78.5q65 -92 65 -227q0 -265 -165 -443.5t-388 -178.5q-326 0 -382 250q-17 73 -17 155z" />
<glyph unicode="7" horiz-adv-x="950" d="M68 246q0 136 52 266q98 240 347 542l246 292q-90 12 -174 12q-295 0 -424 -146q-17 74 -17 122q0 101 65 151.5t214 50.5h672l-195 -298l-260 -414q-143 -239 -162 -281q-65 -151 -65 -264q0 -62 22.5 -107t77.5 -92q-30 -80 -179 -80q-113 0 -166.5 55t-53.5 191z" />
<glyph unicode="8" horiz-adv-x="1022" d="M-16 392.5q0 159.5 95.5 284.5t272.5 177q-174 101 -174 279q0 153 130.5 277t320.5 124t291.5 -85t101.5 -200.5t-71 -219.5t-216 -175q130 -40 189 -128t59 -170.5t-19 -147.5t-54 -126q-77 -130 -206.5 -211t-287.5 -81q-202 0 -317 121.5t-115 281zM281 340 q0 -95 37.5 -149t98.5 -54q108 0 176.5 103.5t68.5 240.5q0 190 -130 303q-183 -125 -236 -334q-15 -61 -15 -110zM446 1188q0 -169 109 -264q145 94 193 274q14 50 14 103.5t-25.5 94t-76.5 40.5q-96 0 -155 -80.5t-59 -167.5z" />
<glyph unicode="9" horiz-adv-x="1001" d="M59 184q0 152 177 152q-29 -29 -29 -72t31.5 -77.5t64.5 -34.5t51.5 2t59.5 19t74 47q88 78 157.5 261t93.5 516q4 78 4 107q0 176 -44 236.5t-139 60.5t-176 -141.5t-81 -303.5q0 -84 25.5 -147.5t89.5 -63.5q125 0 172 123q43 -51 43 -102q0 -78 -81 -133t-208 -55 t-200.5 108.5t-73.5 249.5q0 254 153.5 427t376.5 173q395 0 395 -481q0 -310 -83 -549.5t-241.5 -377.5t-369.5 -138q-111 0 -176.5 59.5t-65.5 134.5z" />
<glyph unicode=":" horiz-adv-x="547" d="M84 276q0 67 46.5 115.5t114.5 48.5t116.5 -48t48.5 -116t-49 -114.5t-116 -46.5t-114 47t-47 114zM186 767.5q0 67.5 47 116.5q48 48 115.5 48t115.5 -48t48 -116.5t-48.5 -115t-115 -46.5t-115.5 47q-47 47 -47 114.5z" />
<glyph unicode=";" horiz-adv-x="565" d="M94 176q0 77 46.5 125.5t115.5 48.5q100 0 130 -94q9 -28 9 -68q0 -91 -73 -212t-193 -201q-18 12 -18 37q0 33 53 89t53 86t-27 50q-96 62 -96 139zM193 677q0 67 46.5 116t114.5 49t116 -48.5t48 -116.5t-48.5 -114.5t-115.5 -46.5t-114 47t-47 114z" />
<glyph unicode="&#x3c;" horiz-adv-x="735" d="M41 487l18 84l629 308l-20 -113l-494 -246l397 -196l-24 -117z" />
<glyph unicode="=" horiz-adv-x="1055" d="M66 207l49 229h753l-47 -229h-755zM156 647l49 230h753l-47 -230h-755z" />
<glyph unicode="&#x3e;" horiz-adv-x="705" d="M31 207l28 117l492 196l-397 246l18 113l504 -308l-23 -110z" />
<glyph unicode="?" horiz-adv-x="903" d="M98 163.5q0 67.5 48.5 115t116 47.5t114.5 -47.5t47 -114.5t-47 -115.5t-114.5 -48.5t-116.5 48q-48 48 -48 115.5zM113 1087q0 141 99 234q118 113 331 113q275 0 316 -152q12 -43 12 -80t-1 -40q0 -207 -208 -364l-111 -90q-132 -111 -172 -233h-135q0 120 96 243 q42 52 90 102t90 104q96 127 96 246q0 153 -116 153q-57 0 -108.5 -49t-51.5 -120.5t41 -113.5q15 -16 37 -22q-54 -86 -150 -86q-60 0 -107.5 43t-47.5 112z" />
<glyph unicode="@" horiz-adv-x="1151" d="M-16 336q0 335 206 570q130 149 308 206q90 28 162 28t126 -10q126 -23 187 -141q33 -64 33 -167t-30 -199.5t-79 -173t-111.5 -123.5t-127 -47t-91.5 47q-53 -80 -121 -80q-131 0 -131 136.5t60 279t131 195.5q37 27 83 27l1 1q45 0 74 -37l8 33l112 -13l-92 -393 q-8 -26 -8 -56t29 -30q80 0 142 339q13 74 13 110q0 79 -34 118q-44 54 -132.5 54t-153.5 -27.5t-118 -74.5q-104 -94 -162.5 -247t-58.5 -297t53 -201t180.5 -57t198.5 32.5t125 103.5q47 -19 47 -80q0 -112 -111 -174q-114 -66 -310.5 -66t-302 94.5t-105.5 319.5z M449 434q0 -63 36 -63q26 0 68 28q0 20 6 43l88 340q-14 17 -48 17t-65 -46q-67 -99 -83 -281q-2 -22 -2 -38z" />
<glyph unicode="A" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486z" />
<glyph unicode="B" horiz-adv-x="1313" d="M25 993q0 108 61 204.5t164 172.5q229 166 518 166q214 0 325 -94.5t111 -231.5q0 -92 -52 -180t-153 -145q124 -25 183 -115t59 -215q0 -73 -21 -175q-48 -226 -212 -351q-85 -64 -217.5 -64t-180.5 75q-20 30 -20 78.5t26 117.5q69 -74 132 -74q108 0 163 126 q45 102 45 242q0 261 -194 261q-45 0 -94 -7l-168 -784h-295l278 1303l303 40l-96 -454h12q118 0 206.5 106t88.5 226q0 150 -145 203q-52 18 -118.5 18t-128 -13.5t-117.5 -40.5q-125 -61 -199 -173.5t-74 -270.5q0 -81 25 -125q4 -8 4 -14q-162 0 -204 100q-15 36 -15 88z " />
<glyph unicode="C" horiz-adv-x="1018" d="M39 457q0 257 85 513q99 302 292 452q148 114 338 114q238 0 315 -149q27 -52 27 -125q0 -189 -144 -189q-72 0 -116 53q37 20 65.5 75t28.5 109.5t-28.5 92t-91 37.5t-116 -42t-100.5 -114q-95 -144 -155 -368t-60 -406.5t53.5 -264t183.5 -81.5q256 0 408 205l47 -21 q-98 -248 -373 -344q-108 -38 -212 -38h-6q-227 2 -334 118t-107 373z" />
<glyph unicode="D" horiz-adv-x="1358" d="M12 1004q0 61 27.5 128.5t77.5 127.5q102 123 278 199.5t379 76.5q369 0 494 -298q53 -127 53 -298.5t-47 -345.5q-97 -363 -305 -535q-104 -86 -221.5 -86t-243.5 109l-17 -82h-294l278 1303l303 40l-246 -1148q56 -41 117 -41q92 0 165 82q141 159 200 503 q28 158 28 316q0 387 -299 387q-234 0 -385 -135t-151 -363q0 -83 23 -125q5 -8 5 -14q-162 0 -204 101q-15 37 -15 98z" />
<glyph unicode="E" horiz-adv-x="940" d="M14 332q0 162 105 321t274 201q-125 91 -125 251t130 297.5t319 137.5q127 0 210 -66.5t83 -174t-45 -168t-104 -60.5t-99 55q36 14 63 68t27 113.5t-36 85.5q-37 26 -80 26q-86 0 -146 -88.5t-60 -200.5q0 -154 112 -232q40 -28 95 -42q-156 -34 -261 -187t-105 -302 q0 -86 45 -146.5t148 -60.5t213.5 55t166.5 154l47 -21q-81 -178 -246.5 -281.5t-353 -103.5t-282.5 103.5t-95 265.5z" />
<glyph unicode="F" horiz-adv-x="940" d="M18 1027q0 79 38 175t122 170q185 164 539 164q67 0 154 -12.5t190 -12.5t180 25l-19 -69q-37 -147 -175 -177q-111 0 -287 39l-86 -407h299l-33 -152h-299l-166 -770h-295l295 1368q-130 -4 -198 -98q-68 -93 -68 -326q0 -81 25 -125q4 -8 4 -14q-165 0 -206 105 q-14 38 -14 117z" />
<glyph unicode="G" horiz-adv-x="1184" d="M39 748q0 148 49 290q75 213 251.5 355.5t428 142.5t344.5 -149q33 -52 33 -125q0 -189 -144 -189q-95 0 -141 53q34 13 62 69t28 84q0 161 -141 161q-83 0 -166.5 -65t-147 -166t-102.5 -228t-39 -222q0 -174 59 -270t177 -96t176 76l88 389l264 -2l-168 -770 q-52 -253 -169 -381.5t-355 -128.5q-136 0 -210.5 83t-74.5 197t67.5 198.5t169 84.5t137.5 -17q77 -34 77 -120q0 -37 -12 -82q-63 53 -129 53t-102 -49.5t-36 -104t31.5 -98t82.5 -43.5t81 10q92 29 139 242l82 367q-136 -74 -256 -74q-229 0 -340 156q-94 133 -94 369z " />
<glyph unicode="H" horiz-adv-x="1362" d="M25 1004q0 103 65 198q131 195 396 289q127 45 257 45q42 0 82 -4l-131 -610h301l131 610h295l-325 -1532h-295l164 770h-301l-164 -770h-295l297 1393q-136 -58 -211.5 -171t-75.5 -278q0 -81 25 -125q4 -8 4 -14q-166 0 -205 105q-14 38 -14 94z" />
<glyph unicode="I" horiz-adv-x="768" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-326 -1532h-294l296 1391q-286 -120 -286 -447q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="J" horiz-adv-x="1098" d="M35 -144.5q0 119.5 67 201.5t168.5 82t137.5 -17q77 -34 77 -120q0 -37 -12 -82q-57 46 -82.5 49.5t-40.5 3.5q-71 0 -107 -47t-36 -96q0 -82 42.5 -117t86.5 -35q83 0 126 49.5t79 202.5l321 1463q-135 -56 -212 -169.5t-77 -279.5q0 -81 25 -125q4 -8 4 -14 q-164 0 -204 105q-15 38 -15 94q0 103 64.5 198.5t166.5 169.5q233 164 488 164h82l-307 -1454q-54 -250 -176.5 -378t-362.5 -128q-148 0 -226 80q-77 80 -77 199.5z" />
<glyph unicode="K" horiz-adv-x="1231" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-133 -627l450 603l15 18h215l-569 -656l71 2q205 0 242 -132q12 -40 12 -95q0 -83 -50 -265t-50 -237q0 -113 80 -143q-128 -35 -203 -35q-160 0 -160 137q1 72 54.5 262.5t54.5 276.5q0 139 -123 139 q-28 0 -68 -8l-164 -772h-294l296 1393q-136 -58 -211 -171t-75 -278q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="L" horiz-adv-x="776" d="M12 983q0 200 231 368q234 165 488 165q32 0 82 -5l-315 -1470q84 -19 177 -69l149 -81q207 -114 362 -114q94 0 172 33q-16 -146 -72.5 -234t-140.5 -88q-132 0 -313 140l-234 180q-198 145 -367 145h-23q-11 0 -24 -2l305 1419q-136 -55 -211 -167t-75 -279 q0 -83 23 -125q5 -8 5 -15q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="M" horiz-adv-x="1612" d="M137 0l520 1407q-153 -51 -239 -168t-86 -293q0 -88 24 -128q4 -7 4 -13q-219 0 -219 186q0 194 209 371q91 78 208.5 126t214.5 48t175 -29l-47 -1079l451 1079h295l-215 -1507h-295l131 920l-385 -920h-281l41 924l-342 -924h-164z" />
<glyph unicode="N" horiz-adv-x="1368" d="M12 1005.5q0 57.5 18.5 119.5t53.5 121q76 129 208 209.5t300 80.5q48 0 96.5 -3t93.5 -26l162 -1085l223 1110h295l-325 -1532h-248l-174 1071l-228 -1071h-294l294 1391q-136 -57 -210 -169.5t-74 -277.5q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 95.5z " />
<glyph unicode="O" horiz-adv-x="1362" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139z" />
<glyph unicode="P" horiz-adv-x="1174" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 479 164t369 -116t123 -287q0 -98 -40.5 -196t-117.5 -177q-172 -176 -433 -176h-11l-125 -584h-294l278 1303l303 40l-145 -684q150 14 254 172t104 342t-139 247q-48 22 -115 22q-250 0 -390 -131t-140 -367 q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="Q" horiz-adv-x="1362" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -240 -98.5 -502t-292.5 -404q55 -79 94 -109q73 -56 162 -56q21 0 45 4q-41 -107 -93.5 -141.5t-119.5 -34.5q-120 0 -184 79q-38 47 -78 168q-88 -28 -180 -28q-180 0 -278.5 98.5t-98.5 311 t79 450.5q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552q-14 -94 -14 -173v-46q0 -21 4 -42q72 19 144.5 19t146.5 -56q106 132 179 364.5t73 441.5v11q0 191 -54 275t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5 t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM545 238q28 -84 98 -84q43 0 78 22q-43 70 -117 70q-27 0 -59 -8z" />
<glyph unicode="R" horiz-adv-x="1231" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 474.5 164t360 -94.5t118.5 -233.5q0 -95 -57.5 -190.5t-163.5 -159.5q141 -40 141 -201q0 -95 -50 -277t-50 -237q0 -113 80 -143q-128 -35 -203 -35q-160 0 -160 137q1 72 54.5 262.5t54.5 276.5q0 139 -123 139 q-26 0 -68 -8l-164 -772h-294l278 1303l303 40l-100 -473h16q122 0 206.5 115.5t84.5 252t-123 186.5q-42 18 -134 18t-194 -34t-174 -98q-153 -136 -153 -366q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="S" horiz-adv-x="1167" d="M55 304q0 161 92 251t206 90t163 -69q19 -26 21 -66q-157 0 -218 -103q-22 -37 -22 -83q0 -87 51.5 -145t150.5 -58t165.5 71t66.5 180t-31 179.5t-78 131.5t-101 116.5t-101 112.5q-109 132 -109 257q0 158 136.5 262.5t336.5 104.5q247 0 312 -150q18 -40 18 -113.5 t-45 -131.5t-112.5 -58t-104.5 43q92 53 92 190q0 40 -32.5 82t-119 42t-137.5 -46.5t-51 -121.5t20 -120q36 -83 126 -162l84 -76q112 -100 152 -166q79 -133 79 -270q0 -255 -176 -394q-159 -127 -400 -127q-298 0 -399 191q-35 67 -35 156z" />
<glyph unicode="T" horiz-adv-x="985" d="M12 1025q0 79 38 175t122 170q185 164 539 164q145 0 230.5 -15t148.5 -23q64 -9 170.5 -9t212.5 43q-10 -260 -256 -260q-93 0 -318 45l-283 -1315h-294l290 1356h-24q-181 0 -274 -84q-111 -100 -111 -330q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 117z " />
<glyph unicode="U" horiz-adv-x="1466" d="M0 993q0 109 65 207q137 203 420 292q141 44 289 44q45 0 98 -10l-209 -778q-67 -259 -67 -362t31.5 -151.5t120.5 -48.5t129 30q73 55 127 199.5t129 483.5l137 633h289l-136 -639q-78 -381 -160 -561q-98 -215 -263 -292q-118 -54 -258 -54t-215.5 21.5t-122.5 62.5 q-87 79 -87 237t51 368l185 742q-169 -45 -266 -164t-97 -307q0 -87 24 -128q5 -7 5 -13q-162 0 -204 100q-15 36 -15 88z" />
<glyph unicode="V" horiz-adv-x="1260" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l18 -1260l431 1254h143l-569 -1526h-295l-33 1399q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="W" horiz-adv-x="1970" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l18 -1260l431 1254h260l18 -1254l430 1254h144l-570 -1526h-295l-24 1042l-389 -1042h-295l-33 1399q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="X" horiz-adv-x="1270" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l88 -426l238 420h143l-344 -596l192 -930h-325l-109 512l-297 -512h-125l385 680l-151 719q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="Y" horiz-adv-x="1270" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l178 -733l303 727h136l-398 -895l-135 -631h-328l136 631l-197 768q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="Z" horiz-adv-x="1110" d="M23 0l716 1425l-184 5q-188 0 -188 -46q10 0 22 -14t12 -50q0 -61 -37.5 -89.5t-90.5 -28.5t-75 38.5t-22 79.5q0 86 67 151t185 65h702l-706 -1403l197 -4q71 0 131 7.5t82 37.5q-11 0 -24 13.5t-13 48.5q0 61 37 90.5t90 29.5t76.5 -38t23.5 -78q0 -88 -74 -164 t-188 -76h-739z" />
<glyph unicode="[" horiz-adv-x="819" d="M-49 -512l434 2048h395l-26 -127h-248l-381 -1794h248l-27 -127h-395z" />
<glyph unicode="\" horiz-adv-x="741" d="M86 1536h147l435 -2048h-148z" />
<glyph unicode="]" horiz-adv-x="819" d="M-49 -512l26 127h248l381 1794h-248l27 127h395l-434 -2048h-395z" />
<glyph unicode="^" horiz-adv-x="862" d="M102 1149l435 387h43l122 -387h-65l-123 164l-321 -164h-91z" />
<glyph unicode="_" horiz-adv-x="909" d="M74 0l37 162h716l-34 -162h-719z" />
<glyph unicode="`" horiz-adv-x="412" d="M49 1536h215l60 -387h-154z" />
<glyph unicode="a" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89z" />
<glyph unicode="b" horiz-adv-x="909" d="M-14 250q0 55 14 117l219 1026l303 41l-98 -461q92 57 168 57q242 0 242 -350q0 -236 -118 -436q-92 -156 -251 -222q-84 -34 -209.5 -34t-197.5 69t-72 193zM279 281q0 -95 108 -95q90 0 170 170q70 159 70 311t-61 201q-21 17 -40 17q-39 0 -76 -9.5t-53 -27.5 l-112 -520q-6 -26 -6 -47z" />
<glyph unicode="c" horiz-adv-x="786" d="M-27 313q0 235 119 454q90 165 247 237q81 38 167 38q246 0 246 -186q0 -78 -32 -114.5t-72 -36.5t-77 24q25 66 25 121q0 84 -58.5 84t-123.5 -106q-93 -150 -128 -373q-10 -67 -10 -147q0 -148 141 -148q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379 q-146 0 -233 75.5t-87 249.5z" />
<glyph unicode="d" horiz-adv-x="1075" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-8l100 471l303 41l-235 -1106q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-128 -367 -411 -367q-177 0 -201 176q-124 -188 -306.5 -188t-246.5 175q-23 63 -23 143.5zM276 335 q0 -149 102 -149q43 0 95.5 41.5t73.5 128.5v11l100 469q-19 71 -84 71t-119 -61q-130 -147 -163 -422q-5 -42 -5 -89z" />
<glyph unicode="e" horiz-adv-x="786" d="M-27 313q0 234 119 453q91 167 248 238q81 38 168 38q142 0 193 -53.5t51 -142.5q0 -175 -141 -297.5t-330 -134.5q-5 -58 -5 -82q0 -105 37 -138.5t104 -33.5q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379q-146 0 -233 75.5t-87 249.5zM297 512 q118 8 207.5 110t89.5 238q0 74 -51 74q-75 -2 -145 -132.5t-101 -289.5z" />
<glyph unicode="f" horiz-adv-x="547" d="M-426 -304q0 83 28 132t76 84q70 49 248 104l248 1170q73 348 373 348q95 0 168 -62t73 -159q0 -47 -6 -84h-96q4 32 4 61t-23.5 46.5t-46.5 17.5q-50 0 -91.5 -38.5t-59.5 -129.5l-35 -162h150l-15 -82h-151l-236 -1106q-70 -348 -366 -348q-95 0 -168.5 62.5 t-73.5 145.5zM-313 -262q0 -40 49 -62q15 -6 40.5 -6t57.5 35t51 125l27 119q-109 -38 -150 -71q-75 -62 -75 -140z" />
<glyph unicode="g" horiz-adv-x="1038" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-12l22 106h295l-203 -950q93 31 153.5 94.5t104.5 198.5h86q-78 -264 -264 -348q-51 -23 -98 -35l-31 -148q-39 -197 -156 -284q-86 -64 -197 -64t-178 49t-67 157q0 187 334 298 l25 108q-107 -112 -246 -112q-186 0 -250 175q-23 63 -23 143.5zM246 -285q0 -41 39 -61q13 -6 38 -6t58 44.5t53 137.5l12 59q-200 -72 -200 -174zM276 335q0 -91 38 -127q22 -22 54 -22q57 0 106 43.5t69 116.5l104 485q0 46 -43 67q-16 9 -41 9q-65 0 -119 -61 q-130 -147 -163 -422q-5 -42 -5 -89z" />
<glyph unicode="h" d="M-78 0l297 1393l303 41l-110 -516q100 114 239 114q98 0 163 -54t65 -160t-34 -240l-49 -198q-16 -65 -16 -106q0 -88 75 -88q69 0 106 44t73 137h86q-119 -345 -322 -375q-32 -4 -79 -4t-93 20q-128 54 -128 211q0 84 46 268t46 254q0 105 -74 105t-132 -117 q-17 -33 -28 -72l-139 -657h-295z" />
<glyph unicode="i" horiz-adv-x="547" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187zM180 1296q0 67 46.5 115.5t115 48.5t116.5 -48t48 -116t-48.5 -114.5t-116 -46.5t-114.5 47t-47 114z" />
<glyph unicode="j" horiz-adv-x="492" d="M-414 -313q0 166 218 260q60 26 118 45l219 1032h295l-203 -950q95 32 155 95t104 198h86q-80 -263 -264 -347q-51 -24 -99 -36l-31 -148q-39 -197 -156 -284q-86 -64 -196.5 -64t-178 49.5t-67.5 149.5zM-301 -285q0 -41 39 -61q13 -6 38 -6t58 44.5t53 137.5l13 59 q-201 -70 -201 -174zM164 1298q0 67 46.5 115.5t114.5 48.5t116 -48t48 -116t-48.5 -114.5t-115.5 -46.5t-114 47t-47 114z" />
<glyph unicode="k" horiz-adv-x="1061" d="M-78 0l297 1393l303 41l-153 -721l395 311h203l-410 -285q36 9 68 9q113 0 169 -71t56 -169q0 -36 -8 -78l-23 -102q-10 -42 -10 -66q0 -76 83 -76t136 108q16 33 33 73h86q-128 -379 -377 -379q-128 0 -193 60.5t-65 172.5q0 47 12 107l17 80q8 43 8 75q0 99 -74 99 q-58 0 -151 -76l-107 -506h-295z" />
<glyph unicode="l" horiz-adv-x="547" d="M-16 233q0 58 16 134l219 1026l303 41l-235 -1106q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187z" />
<glyph unicode="m" horiz-adv-x="1540" d="M-78 0l217 1024h295l-22 -106q102 116 250 116q181 0 210 -176q113 174 285 174q97 0 162 -54t65 -158t-34 -240l-48 -200q-16 -65 -16 -106q0 -88 75 -88q69 0 106 44t73 137h86q-76 -226 -192 -317q-80 -62 -168 -62q-262 0 -262 231q0 84 46 268t46 254q0 105 -74 105 t-132 -117q-17 -33 -28 -72l-139 -657h-295l150 707q6 24 6 51q0 90 -60.5 90t-103 -56.5t-64.5 -134.5l-139 -657h-295z" />
<glyph unicode="n" d="M-78 0l217 1024h295l-22 -106q100 114 239 114q98 0 163 -54t65 -160t-34 -240l-49 -198q-16 -65 -16 -106q0 -88 75 -88q69 0 106 44t73 137h86q-119 -345 -322 -375q-32 -4 -79 -4t-93 20q-128 54 -128 211q0 84 46 268t46 254q0 105 -74 105t-132 -117 q-17 -33 -28 -72l-139 -657h-295z" />
<glyph unicode="o" horiz-adv-x="899" d="M-29 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM276 342q0 -99 18 -125.5t38 -33.5t54 -7 q70 0 139 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5z" />
<glyph unicode="p" horiz-adv-x="958" d="M-186 -512l342 1612h295l-33 -154q102 88 239 88q177 0 231 -170q19 -62 19 -142.5t-9.5 -161t-32.5 -161t-60.5 -154.5t-93.5 -131.5t-132.5 -91.5t-191 -34t-158.5 73l-106 -499zM262 213q18 -47 87.5 -47t124.5 58q107 114 138 326q15 94 15 167q0 170 -103 170 q-35 0 -73.5 -25t-67.5 -76z" />
<glyph unicode="q" horiz-adv-x="995" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-4l20 98h295l-311 -1462l-310 -74l129 612q-105 -112 -243 -112q-186 0 -250 175q-23 63 -23 143.5zM276 335q0 -149 102 -149q43 0 89.5 37.5t71.5 108.5l108 506q-5 18 -22 43.5 t-72 25.5t-109 -61q-130 -147 -163 -422q-5 -42 -5 -89z" />
<glyph unicode="r" horiz-adv-x="770" d="M-78 0l217 1024h295l-26 -127q51 45 112.5 86t133 41t107.5 -47t36 -90q0 -74 -39.5 -120t-95.5 -46t-74 25.5t-22 52t-10.5 42t-27.5 15.5q-42 0 -74 -19.5t-73 -58.5l-164 -778h-295z" />
<glyph unicode="s" horiz-adv-x="782" d="M-66 233.5q0 88.5 34 137.5t75 69q144 258 252 607l303 40q8 -192 16 -321l25 -325q4 -48 4 -95t-8 -82q90 52 147 103h86q-127 -148 -313 -256q-116 -123 -322 -123q-144 0 -221.5 78.5t-77.5 167zM43 293q0 -143 107 -143q196 0 196 190q0 53 -8 125l-12 117 q-11 112 -19 243q-52 -168 -166 -387q47 -22 47 -65.5t-24.5 -75t-66 -31.5t-54.5 27z" />
<glyph unicode="t" horiz-adv-x="547" d="M-16 233q0 58 16 134l123 575h-68l17 82h67l62 283l303 41l-70 -324h123l-16 -82h-123l-131 -614q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187z" />
<glyph unicode="u" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -32 -6 -58q0 -84 61 -84q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-130 -379 -411 -379q-183 0 -203 194q-120 -194 -303 -194q-92 0 -156 58q-63 58 -63 187z" />
<glyph unicode="v" horiz-adv-x="848" d="M-18 229q0 51 10 99l147 696h295l-147 -696q-11 -49 -11 -74q0 -68 70 -68q95 0 181 128q116 171 161 428q12 72 12 128q-5 -11 -29 -15l-21 -4q-9 -1 -15 -1q-36 0 -55 34.5t-19 75.5t31 73t82 32q81 0 112 -51.5t31 -130t-14 -177t-44 -198.5q-67 -225 -199.5 -372.5 t-326.5 -147.5q-116 0 -183.5 59t-67.5 182z" />
<glyph unicode="w" horiz-adv-x="1354" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -26 -6 -52q0 -90 61 -90q108 0 164 181l139 657h295l-147 -696q-11 -49 -11 -74q0 -68 70 -68q95 0 181 128q116 171 161 428q12 72 12 128q-5 -11 -29 -15l-21 -4q-9 -1 -15 -1q-36 0 -55 34.5t-19 76t30.5 73t82.5 31.5 q81 0 112 -51.5t31 -130t-14 -177t-44 -198.5q-67 -225 -188 -360q-144 -160 -345.5 -160t-237.5 172q-114 -172 -291 -172q-92 0 -156 58q-63 58 -63 187z" />
<glyph unicode="x" horiz-adv-x="1069" d="M0 367q49 214 91 306t71 141q64 103 143 161.5t160 58.5t121.5 -23.5t73 -71t45.5 -148.5l18 -156q171 191 178 295q-17 -4 -35 -4q-96 0 -96 114q0 54 42 77.5t84 23.5q66 0 97 -56t31 -117.5t-18 -107.5q-33 -88 -142 -212l-125 -140l19 -143q12 -98 35 -129.5 t44 -40.5t48 -9q59 0 110 51t74 130h86q-76 -214 -205 -309q-95 -70 -205 -70h-8q-193 0 -250 356l-282 -344h-148l414 467l-33 229q-17 104 -33.5 137t-45.5 33q-65 0 -143.5 -130.5t-129.5 -368.5h-86z" />
<glyph unicode="y" horiz-adv-x="995" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -26 -6 -52q0 -90 58.5 -90t99.5 48q40 49 63 120l143 670h295l-203 -950q93 31 153.5 94.5t104.5 198.5h86q-78 -264 -264 -348q-51 -23 -98 -35l-31 -148q-39 -197 -156 -284q-86 -64 -197 -64t-178 49t-67 157 q0 187 334 298l25 110q-106 -114 -246 -114q-92 0 -156 58q-63 58 -63 187zM203 -285q0 -41 39 -61q13 -6 38 -6t58 44.5t53 137.5l12 59q-200 -72 -200 -174z" />
<glyph unicode="z" horiz-adv-x="877" d="M0 0l522 913h-114q-48 0 -80.5 -5t-32.5 -27q0 -5 3.5 -6t11 -6.5t7.5 -48t-34.5 -68t-64.5 -25.5q-49 0 -77 24t-28 61q0 79 68 145.5t169 66.5h527l-502 -866q13 -1 31 -3l39 -5q46 -5 84 -5q91 0 98 41q-39 4 -39 43q0 30 28 59t86 29q91 0 91 -98q0 -79 -70 -149 t-180 -70h-543z" />
<glyph unicode="{" horiz-adv-x="721" d="M61 -290.5q0 75.5 30 152.5t70 158l80 166q66 140 66 217q0 64 -84 64q-26 0 -65 -6l24 117q35 -7 74 -7q75 0 108 77q19 49 19 151l-14 325q0 142 72 264q87 148 255 148h88l-18 -102q-107 0 -138 -18t-48 -36q-56 -61 -74.5 -129.5t-20.5 -152.5l13 -350 q-7 -165 -82 -228q24 -29 24 -84.5t-28 -123.5l-101 -220q-114 -234 -114 -346q0 -164 174 -164l-19 -92h-18q-103 0 -149 14.5t-85 72t-39 133z" />
<glyph unicode="|" horiz-adv-x="1090" d="M449 -512v2050h190v-2050h-190z" />
<glyph unicode="}" horiz-adv-x="721" d="M61 -510l19 102q104 0 136 18q138 78 144 318l-12 351q7 164 82 227q-24 28 -24 85.5t43 156.5t83.5 183.5t78.5 178t38 170.5q0 164 -174 164l19 92h18q101 0 148 -13.5t85.5 -71t38.5 -122t-14 -115.5q-25 -91 -86 -208l-54 -110q-91 -192 -91 -273q0 -64 84 -64 q24 0 65 6l-24 -116q-38 6 -76 6q-73 0 -106 -77q-19 -49 -19 -151l14 -325q0 -142 -72 -264q-87 -148 -255 -148h-89z" />
<glyph unicode="~" horiz-adv-x="883" d="M100 1192q104 201 342 201q82 0 150.5 -23.5t106 -34t81.5 -10.5q82 0 129 47l13 -2q-19 -76 -118 -140q-100 -65 -190 -65q-91 0 -167 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#xa1;" horiz-adv-x="449" d="M-125 -508l266 961h174l-145 -961h-295zM121 761q0 67 46.5 116t114.5 49t116 -48.5t48 -116.5t-48.5 -114.5t-115.5 -46.5t-114 47t-47 114z" />
<glyph unicode="&#xa2;" horiz-adv-x="825" d="M63 647q0 218 113.5 380.5t312.5 191.5l46 251h118l-55 -249q126 -7 168 -77q16 -26 16 -61.5t-10 -68.5h-117q11 39 11 57q0 70 -76 70h-10l-156 -703q10 -2 31 -2q82 0 130 32q87 59 140 107q-23 -129 -101.5 -200.5t-230.5 -77.5l-78 -352h-55l64 354 q-114 17 -187.5 107t-73.5 241zM279 672q0 -148 75 -203l113 625q-128 -103 -174 -314q-14 -64 -14 -108z" />
<glyph unicode="&#xa3;" horiz-adv-x="952" d="M51 686q70 138 215 182l148 605l307 63l-164 -678l84 -26q41 -13 106.5 -13t112.5 47l12 -2q-17 -75 -116 -140t-213 -65h-33l-115 -473q36 5 70.5 6t69.5 2q85 4 161.5 29.5t177.5 100.5q-16 -148 -72 -236t-140 -88h-605l176 733l-34 2q-77 0 -136 -53z" />
<glyph unicode="&#xa4;" horiz-adv-x="1024" d="M139 1008l78 73l115 -114q83 61 185.5 61t182.5 -59l115 114l74 -73l-113 -113q62 -85 62 -187.5t-62 -187.5l113 -112l-74 -74l-113 113q-78 -60 -182.5 -60t-189.5 62l-115 -115l-74 74l115 114q-59 79 -59 183.5t59 183.5zM313 709.5q0 -85.5 59 -146.5 q61 -59 146.5 -59t145 59.5t59.5 145.5t-59.5 145t-145 59t-145.5 -59t-60 -144.5z" />
<glyph unicode="&#xa5;" horiz-adv-x="971" d="M39 291l29 102h196l29 133h-203l29 103h196v2l-229 905h336l180 -739l307 739h135l-401 -905v-2h268l-28 -103h-262l-29 -133h268l-29 -102h-262l-61 -291h-328l62 291h-203z" />
<glyph unicode="&#xa6;" horiz-adv-x="1090" d="M449 455h190v-967h-190v967zM449 616v922h190v-922h-190z" />
<glyph unicode="&#xa7;" horiz-adv-x="1110" d="M16 158q0 111 56 182q57 70 129.5 70t109 -33.5t64.5 -69.5q-134 -12 -157 -89q-9 -27 -9 -86.5t38 -99.5t122 -40q172 0 172 198q-3 158 -118 276l-134 124q-117 104 -117 213.5t61.5 184t151.5 108.5q-11 47 -11 110.5t40 133.5q74 129 238 174q87 23 167.5 23 t151.5 -31q104 -44 104 -161t-78 -157q-25 -12 -64 -12t-69 32q35 21 54.5 60.5t19.5 71.5q0 58 -29.5 89t-78.5 31q-89 0 -144 -66t-55 -153q0 -117 127 -221q36 -30 75 -59q93 -69 148 -147t55 -197.5t-63 -217t-174 -120.5v-7q0 -176 -117.5 -279.5t-327.5 -103.5 q-256 0 -321 165q-17 44 -17 104zM389 926q0 -45 25 -82.5t63.5 -74.5t86.5 -77q185 -154 222 -317q39 49 39 133q0 136 -138 248l-147 117q-66 51 -112 122q-39 -24 -39 -69z" />
<glyph unicode="&#xa8;" horiz-adv-x="803" d="M115 1297q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-66 0 -101.5 35.5t-35.5 87.5zM483 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#xa9;" horiz-adv-x="1202" d="M104 678q0 220 146 372t350 152t350 -152.5t146 -369.5t-146 -370.5t-350.5 -153.5t-350 152t-145.5 370zM199 678q0 -183 117.5 -309.5t286.5 -126.5t287 126t118 310t-118.5 310t-287 126t-286 -126.5t-117.5 -309.5zM311 689q0 129 88.5 215.5t214.5 86.5 q98 -5 166.5 -59t87.5 -135l-96 -37l-14 40q-31 85 -140 85q-78 0 -136 -46t-58 -140.5t57 -157t137 -62.5q48 0 90 24.5t64 67.5l90 -59q-43 -66 -109.5 -102.5t-135.5 -36.5q-129 0 -217.5 93.5t-88.5 222.5z" />
<glyph unicode="&#xaa;" horiz-adv-x="707" d="M88 1120q0 47 15 121t51 134.5t96 99t126 38.5t103 -28l6 31h170l-86 -377q-2 -11 -4 -19t-2 -18q0 -41 43 -41h14q9 0 17 4q-26 -73 -59 -87.5t-64 -14.5q-94 0 -119 81q-72 -88 -173 -88q-134 0 -134 164zM248 1126q0 -49 24 -63t45 -14q37 0 74 53l76 330 q-23 20 -58 20q-67 0 -114 -103t-47 -223z" />
<glyph unicode="&#xab;" horiz-adv-x="1206" d="M41 487l18 84l629 308l-20 -113l-494 -246l397 -196l-24 -117zM471 487l18 84l629 308l-20 -113l-494 -246l397 -196l-24 -117z" />
<glyph unicode="&#xac;" horiz-adv-x="909" d="M39 455l37 161h741l-104 -512h-232l72 351h-514z" />
<glyph unicode="&#xad;" horiz-adv-x="594" d="M39 455l37 161h409l-34 -161h-412z" />
<glyph unicode="&#xae;" horiz-adv-x="1133" d="M70 684.5q0 217.5 144 370.5t349.5 153t351.5 -152.5t146 -369.5t-146 -370.5t-350.5 -153.5t-349.5 152q-145 153 -145 370.5zM164 684q0 -183 117.5 -309.5t286.5 -126.5t287 126t118 310t-118.5 310t-287 126t-286 -126.5t-117.5 -309.5zM360 393l2 596h193 q109 0 177.5 -44t68.5 -128q0 -57 -33.5 -99t-87.5 -59l133 -256l-96 -14l-127 256h-135v-252h-95zM455 723h106q146 0 146 90q0 71 -99 87q-26 5 -51 5h-102v-182z" />
<glyph unicode="&#xb0;" horiz-adv-x="643" d="M76 984q0 202 90 328t242 126q90 0 128.5 -59.5t38.5 -190t-82.5 -276.5t-226.5 -146q-107 0 -148.5 57t-41.5 161zM223 1016.5q0 -92.5 10 -133.5t48 -41q75 0 123.5 117.5t48.5 277.5q0 55 -9.5 92t-42.5 37q-50 0 -102 -78q-26 -38 -51 -108.5t-25 -163z" />
<glyph unicode="&#xb1;" horiz-adv-x="1092" d="M63 139l37 162h752l-35 -162h-754zM170 633l49 229h262l56 250h231l-55 -250h260l-47 -229h-262l-56 -252h-231l55 252h-262z" />
<glyph unicode="&#xb2;" horiz-adv-x="614" d="M6 760.5q0 38.5 29 89t72.5 98t94 94t94.5 98.5q101 120 101 244q0 62 -45 84q-13 7 -34 7q-49 0 -69 -22t-20 -49q0 -82 45 -93q-45 -39 -86 -39t-65.5 25.5t-24.5 64.5q0 74 60 123t186 49q225 0 225 -176q0 -92 -51 -161t-124 -129l-141 -110q-71 -51 -108 -106h9 q57 0 114.5 -10.5t115 -10.5t78.5 15q45 33 77 63q0 -123 -16 -155q-30 -60 -126 -60q-64 0 -149 20.5t-120 20.5t-48 -4t-25.5 -9t-24 -11t-20.5 -9q-4 20 -4 58.5z" />
<glyph unicode="&#xb3;" horiz-adv-x="647" d="M27 888q0 69 35.5 114t111.5 45t90 -56q-93 -10 -102 -87q-2 -22 -2 -46q0 -88 95 -88q71 0 113 57.5t42 127.5t-36.5 129.5t-117.5 84.5q94 24 148.5 89t54.5 116q0 101 -76 101q-107 0 -107 -89q0 -40 17 -56t29 -19q-47 -39 -87 -39t-65 25.5t-25 64.5q0 73 66 122.5 t180 49.5t166.5 -48t52.5 -108q0 -135 -161 -211q78 -22 112.5 -71t34.5 -104q0 -108 -89.5 -200t-215.5 -92q-172 0 -237 84q-27 35 -27 104z" />
<glyph unicode="&#xb4;" horiz-adv-x="647" d="M246 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xb5;" d="M-150 -340l289 1364h295l-147 -696q-6 -26 -6 -52q0 -90 61 -90q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-128 -367 -411 -367q-181 0 -201 184q-114 -184 -293 -184l-55 -266z" />
<glyph unicode="&#xb6;" horiz-adv-x="1110" d="M147 1006q0 205 136 366q136 162 387 162t338 -182q30 -64 30 -142q0 -77 -16 -161l-260 -1215h-193l166 778q-35 -13 -88 -22l-158 -756h-192l158 756q-149 27 -229 146q-79 118 -79 270zM670 694h12q38 0 72 8l98 465q12 58 12 103q0 84 -47 127z" />
<glyph unicode="&#xb7;" horiz-adv-x="889" d="M246 546q0 82 57 140q57 59 139 59t140 -59q59 -58 59 -139q0 -82 -59 -139q-59 -58 -140.5 -58t-138.5 58q-57 57 -57 138z" />
<glyph unicode="&#xb8;" horiz-adv-x="465" d="M0 -389q38 65 76 65q53 0 91.5 -27.5t65.5 -27.5t44.5 26.5t17.5 57.5t-18.5 53.5t-68 22.5t-99.5 -25l108 303l72 -47l-60 -147q64 16 109 16q127 0 127 -103t-74.5 -163.5t-161.5 -60.5t-123.5 12.5t-59.5 23.5z" />
<glyph unicode="&#xb9;" horiz-adv-x="444" d="M45 707l158 690h-113l14 51q108 0 177.5 28.5t124.5 57.5l-189 -827h-172z" />
<glyph unicode="&#xba;" horiz-adv-x="674" d="M86 1138q0 189 89 288.5t222 99.5q42 0 77.5 -14t35.5 -37t-17.5 -34t-35.5 -18q-17 39 -50 39t-56 -17t-41 -45q-33 -54 -49.5 -126t-16.5 -127q0 -84 84 -84q92 0 121 221q-31 7 -31 41t25 61t51 27t34.5 -8t8.5 -31q28 18 49 45l18 21l12 -23q-32 -89 -79 -117 q-9 -159 -90.5 -252.5t-176 -93.5t-139.5 42t-45 142z" />
<glyph unicode="&#xbb;" horiz-adv-x="1200" d="M31 207l28 117l492 196l-397 246l18 113l504 -308l-23 -110zM485 207l29 117l492 196l-398 246l19 113l503 -308l-22 -110z" />
<glyph unicode="&#xbc;" horiz-adv-x="1411" d="M143 461l158 690h-113l14 51q108 0 177.5 28.5t124.5 57.5l-189 -827h-172zM285 -338l540 1874h148l-541 -1874h-147zM766 307q15 45 44 99q128 241 128 358q0 35 -8 67q52 0 92.5 -25.5t40.5 -78.5q0 -108 -122 -263q-30 -38 -52 -77h184l96 422l177 22l-103 -444h78 l-25 -80h-71l-70 -305h-170l70 305h-289z" />
<glyph unicode="&#xbd;" horiz-adv-x="1382" d="M143 461l158 690h-113l14 51q108 0 177.5 28.5t124.5 57.5l-189 -827h-172zM274 -338l541 1874h148l-541 -1874h-148zM749 64.5q0 38.5 29 89t72.5 98t93.5 94.5q196 180 196 342q0 62 -45 84q-13 7 -35 7q-47 0 -67.5 -22t-20.5 -49q0 -82 45 -93q-45 -39 -86 -39 t-65.5 25.5t-24.5 64.5q0 74 60 123t186 49q225 0 225 -176q0 -92 -51 -161t-124 -129l-141 -110q-71 -51 -108 -106h9q57 0 114.5 -10.5t115 -10.5t79.5 15q44 33 76 63q0 -123 -16 -155q-30 -60 -126 -60q-64 0 -148 20.5t-120.5 20.5t-56 -6t-36.5 -15t-26 -12 q-4 20 -4 58.5z" />
<glyph unicode="&#xbe;" horiz-adv-x="1677" d="M125 642q0 69 35.5 114t111.5 45t90 -56q-93 -10 -102 -87q-2 -22 -2 -46q0 -88 95 -88q71 0 113 57.5t42 127.5t-36.5 129.5t-117.5 84.5q94 24 148.5 89t54.5 116q0 101 -76 101q-107 0 -107 -89q0 -40 17 -56t29 -19q-47 -39 -87 -39t-65 25.5t-25 64.5q0 73 66 122.5 t180 49.5t166.5 -48t52.5 -108q0 -135 -161 -211q78 -22 112.5 -71t34.5 -104q0 -108 -89.5 -200t-215.5 -92q-172 0 -237 84q-27 35 -27 104zM522 -338l541 1874h147l-540 -1874h-148zM1010 307q15 45 44 99l56 114q72 148 72 244q0 35 -8 67q52 0 92.5 -25.5t40.5 -78.5 q0 -108 -122 -263q-30 -38 -52 -77h184l96 422l176 22l-102 -444h78l-25 -80h-72l-69 -305h-170l69 305h-288z" />
<glyph unicode="&#xbf;" horiz-adv-x="899" d="M25 -238.5q0 70.5 27 138.5q48 120 170 221l110 93q135 117 186 239h135q0 -120 -97 -243q-41 -53 -89 -103t-89 -104q-97 -126 -97 -244q0 -154 115 -154q61 0 111 48.5t50 120t-42 114.5q-15 16 -36 22q54 86 150 86q60 0 107.5 -43.5t47.5 -112.5q0 -139 -98 -233 q-119 -113 -332 -113q-262 0 -314 153q-15 44 -15 114.5zM473 762v2q0 66 46.5 115t114.5 49t116.5 -48.5t48.5 -115.5v-2q0 -69 -49 -115.5t-116 -46.5t-114 47t-47 115z" />
<glyph unicode="&#xc0;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM895 2048h215l60 -387h-154z" />
<glyph unicode="&#xc1;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM996 1661l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xc2;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM834 1661l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xc3;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM838 1704q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2 q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#xc4;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM881 1809q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35 q-66 0 -101.5 35.5t-35.5 87.5zM1249 1809q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#xc5;" horiz-adv-x="1368" d="M18 684q0 106 119 180q121 74 299 74q41 0 107 -6q166 261 352.5 432.5t359.5 171.5q104 0 162 -29l-321 -1507h-295l157 743q-136 62 -274 74q-184 -407 -246 -747q-20 -109 -20 -186.5t28 -116.5q-121 0 -170 25q-104 52 -104 192q0 212 178 596q56 120 123 237 q-96 -6 -157.5 -29.5t-82.5 -76.5q9 0 18 -20.5t9 -50.5t-33.5 -51.5t-70.5 -21.5q-67 0 -102.5 31.5t-35.5 85.5zM727 905q143 -28 250 -71l119 557q-176 -96 -369 -486zM993 1770q0 129 94 183q33 19 94.5 19t97.5 -46.5t36 -112.5t-40.5 -118.5t-122 -52.5t-120.5 42 t-39 86zM1075 1790q0 -76 70 -76q94 0 94 94q0 67 -30 88q-14 9 -38 9q-52 0 -74 -38t-22 -77z" />
<glyph unicode="&#xc6;" horiz-adv-x="1565" d="M18 685q0 105 121 176t279 71q53 0 121 -6q258 421 530 563q94 49 184 49q42 0 85 -6l88 -14q124 -21 196 -21q123 0 240 39l-23 -74q-46 -151 -197 -151q-78 0 -136 21l-117 44l-111 -518h317l-41 -151h-309l-104 -490h458l-43 -217h-755l157 743q-148 66 -276 74 q-180 -394 -244 -744q-20 -109 -20 -169t4.5 -80.5t9.5 -30.5t9.5 -14t4.5 -10q-139 5 -183 31q-91 53 -91 198q0 204 178 584q56 118 123 235q-92 -6 -154.5 -28.5t-85.5 -77.5q9 0 18 -20.5t9 -48.5t-29.5 -51.5t-85 -23.5t-91.5 30t-36 88zM723 903q131 -24 254 -69 l119 557q-184 -102 -373 -488z" />
<glyph unicode="&#xc7;" horiz-adv-x="1018" d="M39 457q0 257 85 513q99 302 292 452q148 114 338 114q238 0 315 -149q27 -52 27 -125q0 -189 -144 -189q-72 0 -116 53q37 20 65.5 75t28.5 109.5t-28.5 92t-91 37.5t-116 -42t-100.5 -114q-95 -144 -155 -368t-60 -406.5t53.5 -264t183.5 -81.5q256 0 408 205l47 -21 q-98 -248 -373 -344q-74 -26 -151 -34l-42 -105q64 16 109 16q127 0 127 -103t-74.5 -163.5t-161.5 -60.5t-123.5 12.5t-59.5 23.5l-46 21q38 65 76 65q53 0 91.5 -27.5t65.5 -27.5t44.5 26.5t17.5 57.5t-18.5 53.5t-68 22.5t-99.5 -25l75 212q-210 4 -315.5 118t-105.5 371 z" />
<glyph unicode="&#xc8;" horiz-adv-x="940" d="M14 332q0 162 105 321t274 201q-125 91 -125 251t130 297.5t319 137.5q127 0 210 -66.5t83 -174t-45 -168t-104 -60.5t-99 55q36 14 63 68t27 113.5t-36 85.5q-37 26 -80 26q-86 0 -146 -88.5t-60 -200.5q0 -154 112 -232q40 -28 95 -42q-156 -34 -261 -187t-105 -302 q0 -86 45 -146.5t148 -60.5t213.5 55t166.5 154l47 -21q-81 -178 -246.5 -281.5t-353 -103.5t-282.5 103.5t-95 265.5zM516 2048h215l60 -387h-154z" />
<glyph unicode="&#xc9;" horiz-adv-x="940" d="M14 332q0 162 105 321t274 201q-125 91 -125 251t130 297.5t319 137.5q127 0 210 -66.5t83 -174t-45 -168t-104 -60.5t-99 55q36 14 63 68t27 113.5t-36 85.5q-37 26 -80 26q-86 0 -146 -88.5t-60 -200.5q0 -154 112 -232q40 -28 95 -42q-156 -34 -261 -187t-105 -302 q0 -86 45 -146.5t148 -60.5t213.5 55t166.5 154l47 -21q-81 -178 -246.5 -281.5t-353 -103.5t-282.5 103.5t-95 265.5zM676 1661l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xca;" horiz-adv-x="940" d="M14 332q0 162 105 321t274 201q-125 91 -125 251t130 297.5t319 137.5q127 0 210 -66.5t83 -174t-45 -168t-104 -60.5t-99 55q36 14 63 68t27 113.5t-36 85.5q-37 26 -80 26q-86 0 -146 -88.5t-60 -200.5q0 -154 112 -232q40 -28 95 -42q-156 -34 -261 -187t-105 -302 q0 -86 45 -146.5t148 -60.5t213.5 55t166.5 154l47 -21q-81 -178 -246.5 -281.5t-353 -103.5t-282.5 103.5t-95 265.5zM414 1661l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xcb;" horiz-adv-x="940" d="M14 332q0 162 105 321t274 201q-125 91 -125 251t130 297.5t319 137.5q127 0 210 -66.5t83 -174t-45 -168t-104 -60.5t-99 55q36 14 63 68t27 113.5t-36 85.5q-37 26 -80 26q-86 0 -146 -88.5t-60 -200.5q0 -154 112 -232q40 -28 95 -42q-156 -34 -261 -187t-105 -302 q0 -86 45 -146.5t148 -60.5t213.5 55t166.5 154l47 -21q-81 -178 -246.5 -281.5t-353 -103.5t-282.5 103.5t-95 265.5zM488 1809q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-66 0 -101 35.5t-35 87.5zM856 1809q0 53 36 89.5t88 36.5t89 -36.5 t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#xcc;" horiz-adv-x="768" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-326 -1532h-294l296 1391q-286 -120 -286 -447q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM350 2048h215l60 -387h-154z" />
<glyph unicode="&#xcd;" horiz-adv-x="768" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-326 -1532h-294l296 1391q-286 -120 -286 -447q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM551 1661l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xce;" horiz-adv-x="768" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-326 -1532h-294l296 1391q-286 -120 -286 -447q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM309 1661l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xcf;" horiz-adv-x="768" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l-326 -1532h-294l296 1391q-286 -120 -286 -447q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM342 1809q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35 q-66 0 -101 35.5t-35 87.5zM710 1809q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#xd0;" horiz-adv-x="1358" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q590 0 590 -553q0 -201 -46 -381q-97 -379 -307 -546q-103 -83 -220.5 -83t-243.5 109l-17 -82h-294l151 707h-80l41 151h72l94 445l303 40l-104 -485h161l-40 -151h-154l-109 -512q56 -41 117 -41q92 0 165 82 q140 157 200 500q28 155 28 278t-11 198t-42 126q-63 104 -229 104q-252 0 -402 -134q-151 -134 -151 -364q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94z" />
<glyph unicode="&#xd1;" horiz-adv-x="1405" d="M12 1005.5q0 57.5 18.5 119.5t53.5 121q76 129 208 209.5t300 80.5q48 0 96.5 -3t93.5 -26l162 -1085l223 1110h295l-325 -1532h-248l-174 1071l-228 -1071h-294l294 1391q-136 -57 -210 -169.5t-74 -277.5q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 95.5z M631 1704q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#xd2;" horiz-adv-x="1348" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM598 2048h215l60 -387h-154z" />
<glyph unicode="&#xd3;" horiz-adv-x="1348" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM813 1661l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xd4;" horiz-adv-x="1348" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM557 1661l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xd5;" horiz-adv-x="1348" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM561 1704q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2 q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#xd6;" horiz-adv-x="1348" d="M33 983q0 100 68 201q145 212 447 306q150 46 310 46q485 0 485 -524q0 -353 -177 -660q-126 -221 -336 -316q-108 -48 -215.5 -48t-174.5 22q-219 74 -219 389q0 211 79 449q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552 q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139zM590 1809q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35 q-66 0 -101 35.5t-35 87.5zM958 1809q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#xd7;" horiz-adv-x="1055" d="M201 338l194 194l-194 195l133 131l192 -194l197 196l131 -133l-195 -195l195 -194l-131 -133l-197 194l-192 -192z" />
<glyph unicode="&#xd8;" horiz-adv-x="1348" d="M31 913q0 101 65 196q137 196 432 285q146 44 299 44h25q12 0 25 -2l22 100h107l-25 -115q313 -73 313 -475q0 -120 -35 -278q-74 -333 -301 -537q-117 -105 -278 -133l-31 -143h-106l28 133h-4q-254 0 -328 208q-26 74 -26 165t15 188t44 197q67 224 180 364 q131 164 296 164q47 0 92 -14l18 83q-32 7 -112 7t-183 -34.5t-181 -98.5q-171 -140 -171 -361q0 -55 10 -73t10 -29q-97 0 -135 27t-51.5 57.5t-13.5 74.5zM506 374q0 -211 98 -231l234 1106q-66 -44 -110 -121q-138 -239 -195 -518q-27 -135 -27 -236zM719 180 q126 94 219.5 344t93.5 490q0 102 -15.5 172.5t-62.5 111.5z" />
<glyph unicode="&#xd9;" horiz-adv-x="1473" d="M0 993q0 109 65 207q137 203 420 292q141 44 289 44q45 0 98 -10l-209 -778q-67 -259 -67 -362t31.5 -151.5t120.5 -48.5t129 30q73 55 127 199.5t129 483.5l137 633h289l-136 -639q-78 -381 -160 -561q-98 -215 -263 -292q-118 -54 -258 -54t-215.5 21.5t-122.5 62.5 q-87 79 -87 237t51 368l185 742q-169 -45 -266 -164t-97 -307q0 -87 24 -128q5 -7 5 -13q-162 0 -204 100q-15 36 -15 88zM840 2048h215l60 -387h-154z" />
<glyph unicode="&#xda;" horiz-adv-x="1473" d="M0 993q0 109 65 207q137 203 420 292q141 44 289 44q45 0 98 -10l-209 -778q-67 -259 -67 -362t31.5 -151.5t120.5 -48.5t129 30q73 55 127 199.5t129 483.5l137 633h289l-136 -639q-78 -381 -160 -561q-98 -215 -263 -292q-118 -54 -258 -54t-215.5 21.5t-122.5 62.5 q-87 79 -87 237t51 368l185 742q-169 -45 -266 -164t-97 -307q0 -87 24 -128q5 -7 5 -13q-162 0 -204 100q-15 36 -15 88zM924 1661l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xdb;" horiz-adv-x="1473" d="M0 993q0 109 65 207q137 203 420 292q141 44 289 44q45 0 98 -10l-209 -778q-67 -259 -67 -362t31.5 -151.5t120.5 -48.5t129 30q73 55 127 199.5t129 483.5l137 633h289l-136 -639q-78 -381 -160 -561q-98 -215 -263 -292q-118 -54 -258 -54t-215.5 21.5t-122.5 62.5 q-87 79 -87 237t51 368l185 742q-169 -45 -266 -164t-97 -307q0 -87 24 -128q5 -7 5 -13q-162 0 -204 100q-15 36 -15 88zM743 1661l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xdc;" horiz-adv-x="1473" d="M0 993q0 109 65 207q137 203 420 292q141 44 289 44q45 0 98 -10l-209 -778q-67 -259 -67 -362t31.5 -151.5t120.5 -48.5t129 30q73 55 127 199.5t129 483.5l137 633h289l-136 -639q-78 -381 -160 -561q-98 -215 -263 -292q-118 -54 -258 -54t-215.5 21.5t-122.5 62.5 q-87 79 -87 237t51 368l185 742q-169 -45 -266 -164t-97 -307q0 -87 24 -128q5 -7 5 -13q-162 0 -204 100q-15 36 -15 88zM764 1809q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-66 0 -101 35.5t-35 87.5zM1132 1809q0 53 36 89.5t88 36.5 t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#xdd;" horiz-adv-x="1270" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l178 -733l303 727h136l-398 -895l-135 -631h-328l136 631l-197 768q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM928 1661l186 387h215l-248 -387h-153 z" />
<glyph unicode="&#xde;" horiz-adv-x="1194" d="M12 788q0 65 36 138t98 136q127 132 315 200l51 233l303 41l-49 -225q222 -11 335 -125t113 -279q0 -208 -164 -378.5t-427 -170.5h-60l-76 -358h-294l245 1151q-235 -123 -235 -432q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 103zM580 434h28q102 0 194 81 q129 114 172 308q13 59 13 115q0 119 -59.5 196t-179.5 83z" />
<glyph unicode="&#xdf;" horiz-adv-x="922" d="M-174 -512l340 1597q39 197 158 284q89 65 219.5 65t203 -76t72.5 -174.5t-48.5 -182.5t-139.5 -127q108 -36 153 -117t45 -179.5t-18.5 -182.5t-48.5 -149q-57 -118 -146.5 -181t-175.5 -65q-35 0 -67 4l26 121q137 0 197 260q27 111 27 241q0 68 -32 112t-116 67 l37 119q64 26 117 81t53 130t-18.5 96.5t-47.5 21.5q-54 0 -95.5 -38t-59.5 -130l-326 -1523z" />
<glyph unicode="&#xe0;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89zM442 1536h215l60 -387h-154z" />
<glyph unicode="&#xe1;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89zM502 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xe2;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89zM299 1149l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xe3;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM209 1192 q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53zM276 335q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61 q-130 -147 -163 -422q-5 -42 -5 -89z" />
<glyph unicode="&#xe4;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89zM369 1297q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-66 0 -101.5 35.5t-35.5 87.5zM737 1297 q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#xe5;" horiz-adv-x="1077" d="M-27 306.5q0 80.5 14 161t43 160.5q64 176 183 291t287 115q88 0 127 -29.5t39 -74.5v-15l22 109h295l-147 -696q-9 -35 -9 -66q0 -88 84 -88q109 0 166 193h86q-130 -379 -411 -379q-181 0 -201 188q-134 -188 -312.5 -188t-242.5 175q-23 63 -23 143.5zM276 335 q0 -91 38 -127q22 -22 55 -22q61 0 111 48.5t69 132.5l98 462q0 19 -17.5 48.5t-74.5 29.5t-111 -61q-130 -147 -163 -422q-5 -42 -5 -89zM479 1258q0 129 94 183q33 19 94.5 19t97.5 -46.5t36 -112.5t-40.5 -118.5t-122 -52.5t-120.5 42t-39 86zM561 1278q0 -76 70 -76 q94 0 94 94q0 67 -30 88q-14 9 -38 9q-52 0 -74 -38t-22 -77z" />
<glyph unicode="&#xe6;" horiz-adv-x="1331" d="M-16 261q0 172 122.5 252.5t331.5 80.5q69 0 107 -8q43 92 43 186t-68 128q-24 11 -87 11q-111 0 -218 -96l-57 59q144 147 287 157q42 3 85 3q164 0 267 -82q118 90 288.5 90t201.5 -124q9 -37 9 -100.5t-39 -138.5t-104 -132q-138 -121 -328 -133q-4 -34 -4 -66 q0 -115 34 -151.5t99 -36.5q126 0 201 47t176 160h70q-228 -375 -565 -375q-248 0 -301 192q-50 -92 -95 -128q-85 -68 -196 -68q-176 0 -236 134q-24 51 -24 139zM272 300q0 -71 31.5 -92.5t60.5 -21.5q58 0 97 61t69 220q-10 2 -17 2h-17q-102 0 -163 -49t-61 -120z M840 512q117 8 208 108.5t91 207t-49 106.5q-75 0 -144 -126.5t-106 -295.5z" />
<glyph unicode="&#xe7;" horiz-adv-x="786" d="M-27 313q0 235 119 454q90 165 247 237q81 38 167 38q246 0 246 -186q0 -78 -32 -114.5t-72 -36.5t-77 24q25 66 25 121q0 84 -58.5 84t-123.5 -106q-93 -150 -128 -373q-10 -67 -10 -147q0 -148 141 -148q118 0 198.5 52.5t170.5 154.5h70q-159 -262 -378 -347 q-15 -6 -30 -10l-59 -145q64 16 109 16q127 0 127 -103t-74.5 -163.5t-161.5 -60.5t-123.5 12.5t-59.5 23.5l-46 21q38 65 76 65q53 0 91.5 -27.5t65.5 -27.5t44.5 26.5t17.5 57.5t-18.5 53.5t-68 22.5t-99.5 -25l84 235q-29 -3 -60 -3q-146 0 -233 75.5t-87 249.5z" />
<glyph unicode="&#xe8;" horiz-adv-x="786" d="M-27 313q0 234 119 453q91 167 248 238q81 38 168 38q142 0 193 -53.5t51 -142.5q0 -175 -141 -297.5t-330 -134.5q-5 -58 -5 -82q0 -105 37 -138.5t104 -33.5q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379q-146 0 -233 75.5t-87 249.5zM297 512 q118 8 207.5 110t89.5 238q0 74 -51 74q-75 -2 -145 -132.5t-101 -289.5zM354 1536h215l60 -387h-154z" />
<glyph unicode="&#xe9;" horiz-adv-x="786" d="M-27 313q0 234 119 453q91 167 248 238q81 38 168 38q142 0 193 -53.5t51 -142.5q0 -175 -141 -297.5t-330 -134.5q-5 -58 -5 -82q0 -105 37 -138.5t104 -33.5q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379q-146 0 -233 75.5t-87 249.5zM297 512 q118 8 207.5 110t89.5 238q0 74 -51 74q-75 -2 -145 -132.5t-101 -289.5zM398 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xea;" horiz-adv-x="786" d="M-27 313q0 234 119 453q91 167 248 238q81 38 168 38q142 0 193 -53.5t51 -142.5q0 -175 -141 -297.5t-330 -134.5q-5 -58 -5 -82q0 -105 37 -138.5t104 -33.5q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379q-146 0 -233 75.5t-87 249.5zM215 1149l434 387h43 l123 -387h-65l-123 164l-322 -164h-90zM297 512q118 8 207.5 110t89.5 238q0 74 -51 74q-75 -2 -145 -132.5t-101 -289.5z" />
<glyph unicode="&#xeb;" horiz-adv-x="786" d="M-27 313q0 234 119 453q91 167 248 238q81 38 168 38q142 0 193 -53.5t51 -142.5q0 -175 -141 -297.5t-330 -134.5q-5 -58 -5 -82q0 -105 37 -138.5t104 -33.5q118 0 198.5 52.5t170.5 154.5h70q-230 -379 -563 -379q-146 0 -233 75.5t-87 249.5zM244 1297q0 52 35 89 q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-66 0 -101 35.5t-35 87.5zM297 512q118 8 207.5 110t89.5 238q0 74 -51 74q-75 -2 -145 -132.5t-101 -289.5zM612 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88 z" />
<glyph unicode="&#xec;" horiz-adv-x="547" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187zM135 1536h215l60 -387h-154z" />
<glyph unicode="&#xed;" horiz-adv-x="547" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187zM248 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xee;" horiz-adv-x="547" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187zM12 1149l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xef;" horiz-adv-x="547" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187zM36 1297q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-66 0 -101 35.5t-35 87.5z M404 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#xf0;" horiz-adv-x="1102" d="M-2 306.5q0 80.5 14.5 161t43.5 160.5q63 177 174 282q127 124 294 124q88 0 127 -29.5t39 -74.5v-12l17 75q17 75 22 156h-158l17 82h141q-12 103 -86 203h92q74 -43 129 -86t90 -117h129l-16 -82h-86q12 -50 12 -117.5t-22 -181.5l-111 -522q-8 -37 -8 -73 q0 -69 84 -69q110 0 166 181h86q-128 -367 -412 -367q-175 0 -201 178q-121 -190 -305.5 -190t-248.5 175q-23 63 -23 143.5zM301 335q0 -90 29.5 -119.5t62.5 -29.5q61 0 111 48t69 133l99 462q0 45 -44 69q-16 9 -40 9q-67 0 -120 -61q-130 -149 -162 -422q-5 -42 -5 -89z " />
<glyph unicode="&#xf1;" d="M-78 0l217 1024h295l-22 -106q100 114 239 114q98 0 163 -54t65 -160t-34 -240l-49 -198q-16 -65 -16 -106q0 -88 75 -88q69 0 106 44t73 137h86q-119 -345 -322 -375q-32 -4 -79 -4t-93 20q-128 54 -128 211q0 84 46 268t46 254q0 105 -74 105t-132 -117 q-17 -33 -28 -72l-139 -657h-295zM180 1192q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#xf2;" horiz-adv-x="887" d="M-40 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM265 342q0 -99 18 -125.5t38 -33.5t53 -7 q71 0 140 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5zM366 1536h215l60 -387h-154z" />
<glyph unicode="&#xf3;" horiz-adv-x="887" d="M-40 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM265 342q0 -99 18 -125.5t38 -33.5t53 -7 q71 0 140 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5zM449 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xf4;" horiz-adv-x="887" d="M-40 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM195 1149l434 387h43l123 -387h-65l-123 164 l-322 -164h-90zM265 342q0 -99 18 -125.5t38 -33.5t53 -7q71 0 140 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5z" />
<glyph unicode="&#xf5;" horiz-adv-x="887" d="M-40 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM82 1192q99 201 342 201q79 0 148.5 -23.5 t107.5 -34t100 -10.5t111 47l12 -2q-17 -74 -117.5 -139.5t-212.5 -65.5q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53zM265 342q0 -99 18 -125.5t38 -33.5t53 -7q71 0 140 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5z" />
<glyph unicode="&#xf6;" horiz-adv-x="887" d="M-40 301q0 74 12.5 150.5t39.5 157.5q61 183 177 297q138 136 332 136q263 0 263 -327v-2q10 -2 34 -2q55 0 141.5 35t162.5 88l18 -56q-124 -130 -363 -170q-24 -280 -161 -448t-328 -168q-236 0 -304 174q-24 61 -24 135zM215 1297q0 52 35 89q36 37 88.5 37 t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-66 0 -101.5 35.5t-35.5 87.5zM265 342q0 -99 18 -125.5t38 -33.5t53 -7q71 0 140 123t93 303q-55 14 -55 91t64 106q-4 65 -20.5 92t-64.5 27q-94 0 -180 -207.5t-86 -368.5zM583 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89 t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#xf7;" horiz-adv-x="967" d="M105 422l37 161h717l-35 -161h-719zM301 163q0 67 46.5 116t114.5 49t116.5 -48.5t48.5 -116.5t-49 -114.5t-116 -46.5t-114 47t-47 114zM424 849.5q0 67.5 46.5 116t114.5 48.5t116.5 -48t48.5 -116.5t-49 -115t-116 -46.5t-114 47t-47 114.5z" />
<glyph unicode="&#xf8;" horiz-adv-x="877" d="M-29 301q0 72 11.5 147.5t37.5 154.5q60 182 180.5 306t307.5 131l41 199h106l-43 -209q170 -45 176 -299q143 7 304 123h65q-42 -64 -149.5 -131.5t-223.5 -95.5q-16 -251 -122 -415.5t-269 -207.5l-45 -215h-106l43 203q-226 7 -291 177q-23 60 -23 132zM276 354 q0 -111 22.5 -144.5t71.5 -33.5q86 0 153 123t91 309q-57 16 -57 98.5t64 104.5q-5 60 -23 83.5t-64.5 23.5t-94.5 -62q-94 -122 -142 -339q-21 -99 -21 -163z" />
<glyph unicode="&#xf9;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -32 -6 -58q0 -84 61 -84q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-130 -379 -411 -379q-183 0 -203 194q-120 -194 -303 -194q-92 0 -156 58q-63 58 -63 187zM379 1536h215 l60 -387h-154z" />
<glyph unicode="&#xfa;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -32 -6 -58q0 -84 61 -84q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-130 -379 -411 -379q-183 0 -203 194q-120 -194 -303 -194q-92 0 -156 58q-63 58 -63 187zM490 1149 l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xfb;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -32 -6 -58q0 -84 61 -84q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-130 -379 -411 -379q-183 0 -203 194q-120 -194 -303 -194q-92 0 -156 58q-63 58 -63 187zM258 1149 l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#xfc;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -32 -6 -58q0 -84 61 -84q108 0 164 181l139 657h295l-147 -696q-9 -35 -9 -72q0 -70 84 -70q115 0 166 181h86q-130 -379 -411 -379q-183 0 -203 194q-120 -194 -303 -194q-92 0 -156 58q-63 58 -63 187zM279 1297 q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-66 0 -101.5 35.5t-35.5 87.5zM647 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#xfd;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -26 -6 -52q0 -90 58.5 -90t99.5 48q40 49 63 120l143 670h295l-203 -950q93 31 153.5 94.5t104.5 198.5h86q-78 -264 -264 -348q-51 -23 -98 -35l-31 -148q-39 -197 -156 -284q-86 -64 -197 -64t-178 49t-67 157 q0 187 334 298l25 110q-106 -114 -246 -114q-92 0 -156 58q-63 58 -63 187zM203 -285q0 -41 39 -61q13 -6 38 -6t58 44.5t53 137.5l12 59q-200 -72 -200 -174zM488 1149l186 387h215l-248 -387h-153z" />
<glyph unicode="&#xfe;" horiz-adv-x="969" d="M-188 -512l319 1505q25 109 25 191q0 134 -88 250h92q127 -75 170 -129q88 -108 88 -265q0 -42 -8 -100q101 94 247 94q177 0 231 -170q19 -62 19 -142.5t-9.5 -161t-32.5 -161t-60.5 -154.5t-93.5 -131.5t-132.5 -91.5t-192.5 -34t-159 75l-106 -501zM260 217 q17 -51 88 -51t126 58q107 114 138 326q15 94 15 167q0 170 -103 170q-35 0 -74.5 -26.5t-68.5 -80.5z" />
<glyph unicode="&#xff;" d="M-16 233q0 58 16 134l139 657h295l-147 -696q-6 -26 -6 -52q0 -90 58.5 -90t99.5 48q40 49 63 120l143 670h295l-203 -950q93 31 153.5 94.5t104.5 198.5h86q-78 -264 -264 -348q-51 -23 -98 -35l-31 -148q-39 -197 -156 -284q-86 -64 -197 -64t-178 49t-67 157 q0 187 334 298l25 110q-106 -114 -246 -114q-92 0 -156 58q-63 58 -63 187zM203 -285q0 -41 39 -61q13 -6 38 -6t58 44.5t53 137.5l12 59q-200 -72 -200 -174zM252 1297q0 52 35 89q36 37 88.5 37t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-66 0 -101 35.5t-35 87.5z M620 1297q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -77 -35q-64 0 -100 35t-36 88z" />
<glyph unicode="&#x152;" horiz-adv-x="1733" d="M33 983q0 100 68 201q145 212 447 306q150 46 296.5 46t238.5 -38q118 38 225 38t194 -12.5t190 -12.5t180 25l-19 -70q-39 -146 -176 -176q-98 0 -232 34t-192 40q90 -128 90 -352q0 -73 -10 -154h273l-41 -151h-259q-44 -189 -140 -356q-42 -73 -95 -134h498l-43 -217 h-793q-67 -12 -147 -12q-168 0 -266.5 98.5t-98.5 311t79 450.5q126 384 346 484q61 28 126.5 28t110.5 -17q-89 -53 -176 -227q-126 -249 -169 -552q-14 -94 -14 -173q0 -237 119 -237h2q99 0 198 144t163.5 363.5t64.5 416t-54 280.5t-208 84q-246 0 -418 -145.5 t-172 -381.5q0 -60 10.5 -79.5t10.5 -30.5q-100 0 -153.5 39t-53.5 139z" />
<glyph unicode="&#x153;" horiz-adv-x="1358" d="M-14 326q0 353 162 546q146 172 376 172q104 0 156 -49t74 -125q126 172 327 172q262 0 262 -213q0 -175 -159 -294q-140 -106 -303 -123q-7 -44 -7 -92q0 -91 49 -132t103 -41q95 0 202.5 79.5t157.5 191.5h93q-157 -285 -393 -382q-86 -35 -188 -36h-2 q-100 0 -169.5 50t-101.5 128q-135 -190 -326 -190q-164 0 -239 76q-74 77 -74 262zM258 326q0 -77 39.5 -108.5t92.5 -31.5q94 0 152 124q49 101 72 272q-45 0 -65.5 27.5t-20.5 56.5q0 54 25.5 94.5t64.5 56.5q-8 107 -86 107q-71 0 -124 -68q-96 -126 -135 -355 q-15 -98 -15 -175zM897 510q133 0 228.5 97.5t95.5 211.5q0 72 -36 103q-14 12 -46.5 12t-70.5 -39q-110 -111 -171 -385z" />
<glyph unicode="&#x178;" horiz-adv-x="1270" d="M12 1004q0 103 64.5 198.5t166.5 169.5q233 164 488 164q42 0 82 -4l178 -733l303 727h136l-398 -895l-135 -631h-328l136 631l-197 768q-144 -54 -224.5 -169t-80.5 -286q0 -83 23 -125q5 -8 5 -14q-164 0 -205 105q-14 38 -14 94zM777 1809q0 52 35 89q36 37 88.5 37 t89.5 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-66 0 -101.5 35.5t-35.5 87.5zM1145 1809q0 53 36 89.5t88 36.5t89 -36.5t37 -89t-37 -88.5q-38 -35 -76 -35q-65 0 -101 35t-36 88z" />
<glyph unicode="&#x2c6;" horiz-adv-x="600" d="M0 1149l434 387h43l123 -387h-65l-123 164l-322 -164h-90z" />
<glyph unicode="&#x2dc;" horiz-adv-x="825" d="M78 1192q99 201 342 201q79 0 148.5 -23.5t107.5 -34t100 -10.5t111 47l12 -2q-17 -74 -117 -140q-101 -65 -213 -65q-69 0 -145 26t-116 38t-83 12q-77 0 -135 -53z" />
<glyph unicode="&#x2000;" horiz-adv-x="1024" />
<glyph unicode="&#x2001;" horiz-adv-x="2048" />
<glyph unicode="&#x2002;" horiz-adv-x="1024" />
<glyph unicode="&#x2003;" horiz-adv-x="2048" />
<glyph unicode="&#x2004;" horiz-adv-x="682" />
<glyph unicode="&#x2005;" horiz-adv-x="512" />
<glyph unicode="&#x2006;" horiz-adv-x="341" />
<glyph unicode="&#x2007;" horiz-adv-x="341" />
<glyph unicode="&#x2008;" horiz-adv-x="256" />
<glyph unicode="&#x2009;" horiz-adv-x="409" />
<glyph unicode="&#x200a;" horiz-adv-x="113" />
<glyph unicode="&#x2010;" horiz-adv-x="594" d="M39 455l37 161h409l-34 -161h-412z" />
<glyph unicode="&#x2011;" horiz-adv-x="594" d="M39 455l37 161h409l-34 -161h-412z" />
<glyph unicode="&#x2012;" horiz-adv-x="594" d="M39 455l37 161h409l-34 -161h-412z" />
<glyph unicode="&#x2013;" horiz-adv-x="721" d="M39 455l37 161h532l-35 -161h-534z" />
<glyph unicode="&#x2014;" horiz-adv-x="909" d="M39 455l37 161h717l-35 -161h-719z" />
<glyph unicode="&#x2018;" horiz-adv-x="625" d="M172 1387q0 70 34 107.5t97 37.5t106.5 -42t43.5 -93q0 -86 -91 -137q-24 -17 -24 -35l100 -144q0 -18 -18 -28q-118 75 -183 169.5t-65 164.5z" />
<glyph unicode="&#x2019;" horiz-adv-x="625" d="M172 1379.5q0 68.5 43 110.5t106.5 42t97.5 -37.5t34 -108t-65 -164t-183 -169.5q-19 10 -19 28l101 144q0 19 -25 35q-90 51 -90 119.5z" />
<glyph unicode="&#x201a;" horiz-adv-x="580" d="M156 146.5q0 68.5 43 110.5t106.5 42t97 -37.5t33.5 -107.5t-64 -163t-184 -171q-18 10 -18 28l100 144q0 18 -24 35q-90 51 -90 119.5z" />
<glyph unicode="&#x201c;" horiz-adv-x="1042" d="M156 1198q0 70 65 164t182 170q19 -10 19 -28l-100 -144q0 -18 24 -35q90 -51 90 -137q0 -51 -43.5 -93t-105.5 -42q-131 0 -131 145zM606 1198q0 70 65 164.5t183 169.5q18 -10 18 -28l-100 -144q0 -19 25 -35q90 -51 90 -137q0 -51 -43.5 -93t-106.5 -42t-97 37.5 t-34 107.5z" />
<glyph unicode="&#x201d;" horiz-adv-x="1042" d="M156 1379.5q0 68.5 43 110.5t106.5 42t97 -37.5t33.5 -108t-65 -164t-183 -169.5q-18 10 -18 28l100 144q0 18 -24 35q-90 51 -90 119.5zM606 1379.5q0 68.5 43 110.5t106.5 42t97.5 -37.5t34 -108t-65 -164t-183 -169.5q-18 10 -18 28l100 144q0 19 -25 35 q-90 51 -90 119.5z" />
<glyph unicode="&#x201e;" horiz-adv-x="1042" d="M156 146.5q0 68.5 43 110.5t106.5 42t97 -37.5t33.5 -107.5t-64 -163t-184 -171q-18 10 -18 28l100 144q0 18 -24 35q-90 51 -90 119.5zM606 146.5q0 68.5 43 110.5t106.5 42t97.5 -37.5t34 -107.5t-64 -163t-184 -171q-18 10 -18 28l100 144q0 19 -25 35 q-90 51 -90 119.5z" />
<glyph unicode="&#x2022;" horiz-adv-x="889" d="M246 546q0 82 57 140q57 59 139 59t140 -59q59 -58 59 -139q0 -82 -59 -139q-59 -58 -140.5 -58t-138.5 58q-57 57 -57 138z" />
<glyph unicode="&#x2026;" horiz-adv-x="1438" d="M63 153q0 67 47 116q48 48 115.5 48t115.5 -48t48 -116t-48.5 -114.5t-115 -46.5t-115.5 47q-47 47 -47 114zM545 153q0 67 46.5 115.5t114.5 48.5t116 -48t48 -116t-48.5 -114.5t-115.5 -46.5t-114 47t-47 114zM1047 153q0 67 46.5 115.5t114.5 48.5t116 -48t48 -116 t-48.5 -114.5t-115.5 -46.5t-114 47t-47 114z" />
<glyph unicode="&#x202f;" horiz-adv-x="409" />
<glyph unicode="&#x2039;" horiz-adv-x="735" d="M41 487l18 84l629 349l-20 -113l-494 -287l397 -237l-24 -117z" />
<glyph unicode="&#x203a;" horiz-adv-x="705" d="M31 166l28 117l492 237l-397 287l18 113l504 -349l-23 -110z" />
<glyph unicode="&#x205f;" horiz-adv-x="512" />
<glyph unicode="&#x20ac;" horiz-adv-x="1174" d="M-6 582l29 102h151q12 102 16 133h-145l29 103h137q101 429 394 566q108 50 253 50q246 0 328 -149q28 -52 28 -125q0 -189 -143 -189q-72 0 -117 53q55 20 83 123q7 26 7 42q0 53 -21 89q-35 60 -110 60q-132 0 -228.5 -148.5t-149.5 -371.5h413l-28 -103h-408 q-6 -35 -9 -67.5t-7 -65.5h401l-29 -102h-379v-27q0 -211 55 -297t222 -86t248 42q31 16 61 40l4 -59q-90 -120 -203.5 -163.5t-278 -43.5t-282.5 104q-147 128 -147 418v72h-174z" />
<glyph unicode="&#x2122;" horiz-adv-x="776" d="M-47 1188q0 109 111 146q40 14 98 14l153 -11q54 0 76 11q-16 -80 -51 -80q-25 0 -55.5 7t-65.5 11l-86 -399h-88l88 407q-123 -2 -123 -125q0 -21 8 -41q-65 0 -65 60zM305 887l139 430l84 12v-346l136 356h96l-78 -452h-88l55 319l-129 -319h-84v268l-82 -268h-49z" />
<glyph unicode="&#xe000;" horiz-adv-x="1140" d="M0 1140h1140v-1140h-1140v1140z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1094" d="M-424 -283q0 172 226 255q63 24 128 44l228 1078q94 440 479 440q286 0 351 -150q16 -37 16 -86q0 -91 -50 -128t-112 -37q-123 0 -123 110q0 35 18.5 67.5t50.5 32.5h10q5 0 7 -2q-4 82 -113 82q-135 0 -192 -145q-17 -42 -25 -86l-35 -168h164l-16 -82h-164l-234 -1106 q-40 -192 -154 -280q-88 -68 -203 -68t-186 62t-71 167zM-311 -248q0 -45 28 -63.5t57 -18.5t64 36.5t53 123.5l25 119q-227 -74 -227 -197zM531 233q0 58 16 134l139 657h295l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -442 -379 q-80 0 -144 58q-63 58 -63 187z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1122" d="M-428 -304q0 83 27.5 131.5t88 92t238.5 96.5l246 1170q72 348 381 348q133 0 231 -32l166 -57q67 -24 137 -52l-225 -1065q-8 -37 -8 -73q0 -69 84 -69q59 0 110 51t74 130h86q-133 -379 -441 -379q-81 0 -145 58q-63 58 -63 187q0 58 16 134l213 1005q-82 33 -167 33 q-105 0 -140 -162l-45 -219h191l-17 -82h-190l-234 -1106q-70 -348 -372 -348q-95 0 -168.5 62.5t-73.5 145.5zM-315 -262q0 -40 49 -62q15 -6 39.5 -6t60 34t53.5 126l25 119q-110 -39 -151 -72q-76 -61 -76 -139z" />
<glyph unicode="&#xfb03;" horiz-adv-x="1565" d="M-428 -304q0 83 27.5 131.5t88 92t238.5 96.5l246 1170q73 348 373 348q169 0 252 -107q113 107 309 107q286 0 351 -150q16 -37 16 -86q0 -91 -50 -128t-112 -37q-123 0 -123 110q0 35 18.5 67.5t50.5 32.5h10q5 0 7 -2q-4 82 -113 82q-175 0 -217 -231l-35 -168h543 l-147 -696q-8 -37 -8 -73q0 -69 83 -69q60 0 111.5 52t73.5 129h86q-132 -379 -441 -379q-81 0 -145 58q-63 58 -63 187q0 58 16 134l121 575h-246l-234 -1106q-40 -192 -154 -280q-88 -68 -206 -68q-160 0 -223 109q-99 -109 -262 -109q-95 0 -168.5 62.5t-73.5 145.5z M-303 -262q0 -40 49 -62q15 -6 40 -6t60 34q34 34 54 126l24 119q-110 -39 -151 -72q-76 -61 -76 -139zM145 -293q13 -65 79 -65q42 0 78.5 45t57.5 143l48 223l-183 -37l-39 -180q-13 -67 -41 -129zM238 74l180 30l176 838h-172zM438 1024h174l15 70q28 148 102 256 q-30 34 -77 34q-148 0 -181 -192z" />
<glyph unicode="&#xfb04;" horiz-adv-x="1597" d="M-428 -304q0 83 27.5 131.5t88 92t238.5 96.5l246 1170q42 199 158 284q89 64 227.5 64t222.5 -86q96 86 238.5 86t240.5 -32l166 -57q68 -24 138 -52l-226 -1065q-8 -37 -8 -73q0 -69 84 -69q60 0 111 51q50 52 73 130h86q-133 -379 -441 -379q-81 0 -145 58 q-63 58 -63 187q0 54 17 134l213 1005q-82 33 -168 33q-105 0 -140 -162l-45 -219h191l-17 -82h-190l-236 -1106q-40 -192 -154 -280q-88 -68 -206 -68q-161 0 -223 111q-101 -111 -262 -111q-95 0 -168.5 62.5t-73.5 145.5zM-303 -262q0 -40 49 -62q15 -6 40 -6t60 34 q34 34 54 126l24 119q-110 -39 -151 -72q-76 -61 -76 -139zM145 -291q6 -67 76 -67q99 0 139 188l48 223l-183 -37l-39 -180q-13 -65 -41 -127zM238 74l180 30l178 838h-174zM438 1024h174l35 162q18 98 66 178q-28 20 -69 20q-74 0 -116.5 -55t-56.5 -137z" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,18 +0,0 @@
// Add scripts to select all or non of the checkboxes in the add_bill form
function selectall()
{
var els = document.getElementsByName('payed_for');
for(var i =0;i<els.length;i++)
{
els[i].checked=true;
}
}
function selectnone()
{
var els = document.getElementsByName('payed_for');
for(var i =0;i<els.length;i++)
{
els[i].checked=false;
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
!function(a){a.fn.datepicker.dates.fr={days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],daysShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],daysMin:["d","l","ma","me","j","v","s"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthsShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}(jQuery);
console.log("foo", jQuery.fn.datepicker.dates);

File diff suppressed because one or more lines are too long

View file

@ -1,17 +0,0 @@
{% extends "layout.html" %}
{% block js %}
$('#cancel-form').click(function(){location.href={{ url_for(".list_bills") }};});
{% endblock %}
{% block top_menu %}
<a href="{{ url_for(".list_bills") }}">{{ _("Back to the list") }}</a>
{% endblock %}
{% block content %}
<form class="form-horizontal" method="post">
{{ forms.add_bill(form, edit) }}
</form>
{% endblock %}

View file

@ -1,9 +0,0 @@
{% extends "layout.html" %}
{% block js %}
auto_hide_default_text('#name');
{% endblock %}
{% block content %}
<form class="form-horizontal" action="{{ url_for(".add_member") }}" method="post">
{{ forms.add_member(form) }}
</form>
{% endblock %}

View file

@ -1,13 +0,0 @@
{% extends "layout.html" %}
{% block content %}
<h2>Authentication</h2>
{% if create_project %}
<p class="info">{{ _("The project you are trying to access do not exist, do you want
to") }} <a href="{{ url_for(".create_project", project_id=create_project) }}">{{ _("create it") }}</a>{{ _("?") }}
</p>
{% endif %}
<form class="form-horizontal" method="POST" accept-charset="utf-8">
{{ forms.authenticate(form) }}
</form>
{% endblock %}

View file

@ -1,7 +0,0 @@
{% extends "layout.html" %}
{% block content %}
<form class="form-horizontal" method="post" accept-charset="utf-8">
{{ forms.create_archive(form) }}
</form>
{% endblock %}

View file

@ -1,8 +0,0 @@
{% extends "layout.html" %}
{% block content %}
<h2>{{ _("Create a new project") }}</h2>
<form class="form-horizontal" method="post">
{{ forms.create_project(form) }}
</form>
{% endblock %}

View file

@ -1,21 +0,0 @@
{% extends "layout.html" %}
{% block content %}
<table id="bill_table" class="table table-striped">
<thead><tr><th>{{ _("Project") }}</th><th>{{ _("Number of members") }}</th><th>{{ _("Number of bills") }}</th><th>{{_("Newest bill")}}</th><th>{{_("Oldest bill")}}</th></tr></thead>
<tbody>{% for project in projects|sort(attribute='name') %}
<tr class="{{ loop.cycle("odd", "even") }}">
<td>{{ project.name }}</td><td>{{ project.members | count }}</td><td>{{ project.get_bills().count() }}</td>
{% if project.has_bills() %}
<td>{{ project.get_bills().all()[0].date }}</td>
<td>{{ project.get_bills().all()[-1].date }}</td>
{% else %}
<td></td>
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View file

@ -1 +0,0 @@
Yeah

View file

@ -1,5 +0,0 @@
{% for field_name, field_errors in form.errors.items() if field_errors %}
{% for error in field_errors %}
<p class="alert alert-danger"><strong>{{ form[field_name].label.text }}:</strong> {{ error }}</p>
{% endfor %}
{% endfor %}

View file

@ -1,17 +0,0 @@
{% extends "layout.html" %}
{% block js %}
$('#cancel-form').click(function(){location.href={{ url_for(".list_bills") }};});
{% endblock %}
{% block top_menu %}
<a href="{{ url_for(".list_bills") }}">{{ _("Back to the list") }}</a>
{% endblock %}
{% block content %}
<form class="form-horizontal" method="post">
{{ forms.edit_member(form, edit) }}
</form>
{% endblock %}

View file

@ -1,19 +0,0 @@
{% extends "layout.html" %}
{% block js %}
$('#delete-project').click(function ()
{
$(this).html("<a style='color:red; ' href='{{ url_for('.delete_project') }}' >{{_("you sure?")}}</a>");
});
{% endblock %}
{% block content %}
<h2>{{ _("Edit this project") }}</h2>
<form class="form-horizontal" method="post">
{{ forms.edit_project(edit_form) }}
</form></br>
<h2>{{ _("Download this project's data") }}</h2>
<form class="form-horizontal" method="post">
{{ forms.export_project(export_form) }}
</form>
{% endblock %}

View file

@ -1,171 +0,0 @@
{% macro input(field, multiple=False, class='form-control', inline=False) -%}
<div class="form-group{% if inline %} row{% endif %}">
{% if field.type != "SubmitField" %}
{% if inline %}
{{ field.label(class="col-3") }}
{% else %}
{{ field.label() }}
{% endif %}
{% endif %}
<div class="controls{% if inline %} col-9{% endif %}">
{% if multiple == True %}
{{ field(multiple=True, class=class) }}
{% else %}
{{ field(class=class) | safe }}
{% endif %}
{% if field.description %}
<p class="help-inline">{{ field.description }}</p>
{% endif %}
</div>
</div>
{% endmacro %}
{% macro submit(field, cancel=False, home=False) -%}
<div class="actions">
<button type="submit" class="btn btn-primary">{{ field.name }}</button>
{% if home %}
<a href="{{ url_for(".remind_password") }}">{{ _("Can't remember the password?") }}</a>
{% endif %}
{% if cancel %}
<button type="reset" class="btn">{{ _("Cancel") }}</button>
{% endif %}
</div>
{% endmacro %}
{% macro authenticate(form, home=False) %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{{ input(form.id) }}
{{ input(form.password) }}
{% if not home %}
{{ submit(form.submit, home=True) }}
{% endif %}
{% endmacro %}
{% macro create_project(form, home=False) %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{% if not home %}
{{ input(form.id) }}
{% endif %}
{{ input(form.name) }}
{{ input(form.password) }}
{{ input(form.contact_email) }}
{% if not home %}
{{ submit(form.submit, home=True) }}
{% endif %}
{% endmacro %}
{% macro edit_project(form) %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{{ input(form.name) }}
{{ input(form.password) }}
{{ input(form.contact_email) }}
<div class="actions">
<button class="btn btn-primary">{{ _("Edit the project") }}</button>
<a id="delete-project" style="color:red; margin-left:10px; cursor:pointer; ">{{ _("delete") }}</a>
</div>
{% endmacro %}
{% macro add_bill(form, edit=False, title=True) %}
<fieldset>
{% if title %}<legend>{% if edit %}{{ _("Edit this bill") }} {% else %}{{ _("Add a bill") }} {% endif %}</legend>{% endif %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{{ input(form.date, class="form-control datepicker", inline=True) }}
{{ input(form.what, inline=True) }}
{{ input(form.payer, inline=True, class="form-control custom-select") }}
{{ input(form.amount, inline=True) }}
<div class="form-group row">
<label class="col-3" for="payed_for">{{ _("For whom?") }}</label>
<div class="controls col-9">
<ul id="payed_for" class="inputs-list">
<p><a href="#" id="selectall" onclick="selectall()">{{ _("Select all") }}</a> | <a href="#" id="selectnone" onclick="selectnone()">{{_("Select none")}}</a></p>
{% for key, value, checked in form.payed_for.iter_choices() %}
<p class="form-check"><label for="payed_for-{{key}}" class="form-check-label"><input name="payed_for" type="checkbox" {% if checked %}checked{% endif %} class="form-check-input" value="{{key}}" id="payed_for-{{key}}"/><span>{{value}}</span></label></p>
{% endfor %}
</ul>
</div>
</div>
</fieldset>
<div class="actions">
{{ form.submit(class="btn btn-primary") }}
{% if not edit %} {{ form.submit2(class="btn") }}{% endif %}
</div>
{% endmacro %}
{% macro add_member(form) %}
{{ form.hidden_tag() }}
<div class="input-group">
<label class="sr-only" for="name">_("Type user name here")</label>
{{ form.name(placeholder=_("Type user name here"), class="form-control") }}
<button class=" input-group-addon btn">{{ _("Add") }}</button>
</div>
{% endmacro %}
{% macro edit_member(form, title=True) %}
<fieldset>
{% if title %}<legend>{{ _("Edit this member") }}</legend>{% endif %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{{ input(form.name) }}
{{ input(form.weight) }}
</fieldset>
<div class="actions">
{{ form.submit(class="btn btn-primary") }}
</div>
{% endmacro %}
{% macro invites(form) %}
{{ form.hidden_tag() }}
{{ input(form.emails) }}
<div class="actions">
<button class="btn btn-primary">{{ _("Send the invitations") }}</button>
<a href="{{ url_for(".list_bills") }}">{{ _("No, thanks") }}</a>
</div>
{% endmacro %}
{% macro create_archive(form) %}
<fieldset>
<legend>{{ _("Create an archive") }}</legend>
{{ form.hidden_tag() }}
{{ input(form.name) }}
{{ input(form.start_date) }}
{{ input(form.end_date) }}
</fieldset>
<div class="actions">
<button class="btn">{{ _("Create the archive") }}</button>
</div>
{% endmacro %}
{% macro export_project(form) %}
<fieldset>
{{ form.hidden_tag() }}
{{ input(form.export_type) }}
{{ input(form.export_format) }}
</fieldset>
<div class="actions">
<button class="btn btn-primary">{{ _("Download") }}</button>
</div>
{% endmacro %}
{% macro remind_password(form) %}
{% include "display_errors.html" %}
{{ form.hidden_tag() }}
{{ input(form.id) }}
{{ submit(form.submit) }}
{% endmacro %}

View file

@ -1,50 +0,0 @@
{% extends "layout.html" %}
{% block body %}
<header id="header" class="row">
<div class="col-5 offset-md-2">
<h2>{{ _("Manage your shared <br>expenses, easily") }}</h2>
<a href="{{ url_for(".demo") }}" class="tryout btn">{{ _("Try out the demo") }}</a>
</div>
<div class="col-4">
<p class="additional-content">{{ _("You're sharing a house?") }}<br /> {{ _("Going on holidays with friends?") }}<br /> {{ _("Simply sharing money with others?") }} <br /><strong>{{ _("We can help!") }}</strong></p>
</div>
</header>
<main class="row home">
<div class="col-4 offset-md-2">
<form id="authentication-form" class="form-horizontal" action="{{ url_for(".authenticate") }}" method="post">
<fieldset class="form-group">
<legend>{{ _("Log to an existing project") }}...</legend>
{{ forms.authenticate(auth_form, home=True) }}
</fieldset>
<div class="controls">
<button class="btn" type="submit">{{ _("log in") }}</button>
<a class="password-reminder" href="{{ url_for(".remind_password") }}">{{ _("can't remember your password?") }}</a>
</div>
</form>
</div>
<div class="col-3 offset-md-1">
<form id="creation-form" class="form-horizontal" action="{{ url_for(".create_project") }}" method="post">
<fieldset class="form-group">
<legend>...{{ _("or create a new one") }}</legend>
{{ forms.create_project(project_form, home=True) }}
</fieldset>
<div class="controls">
<button class="btn" type="submit">{{ _("let's get started") }}</button>
</div>
</form>
</main>
</div>
{% endblock %}
{% block js %}
$('#creation-form #password').tooltip({
title: '{{ _("This access code will be sent to your friends. It is stored as-is by the server, so don\\'t reuse a personal password!") }}',
trigger: 'focus',
placement: 'right'
});
{% endblock %}

View file

@ -1,10 +0,0 @@
Hi,
Someone using the email address {{ g.project.contact_email }} invited you to share your expenses for "{{ g.project.name }}".
It's as simple as saying what did you paid for, for who, and how much did it cost you, we are caring about the rest.
You can access it here: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }} and the private code is "{{ g.project.password }}".
Enjoy,
Some weird guys (with beards)

View file

@ -1,9 +0,0 @@
Salut,
Quelqu'un avec l'addresse email "{{ g.project.contact_email }}" vous à invité à partager vos dépenses pour "{{ g.project.name }}".
C'est aussi simple que de dire qui à payé pour quoi, pour qui, et combien celà à coûté, on s'occuppe du reste.
Vous pouvez accéder à la page ici: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }} et le code est "{{ g.project.password }}".
Have fun,

View file

@ -1,93 +0,0 @@
{% import "forms.html" as forms %}
<!DOCTYPE html>
<html>
<head>
<title>{{ _("Account manager") }}{% block title %}{% endblock %}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel=stylesheet type=text/css href="{{ url_for("static", filename='css/main.css') }}">
<script src="{{ url_for("static", filename="js/jquery-3.1.1.min.js") }}"></script>
<script src="{{ url_for("static", filename="js/ihatemoney.js") }}"></script>
<script src="{{ url_for("static", filename="js/tether.min.js") }}"></script>
<script src="{{ url_for("static", filename="js/bootstrap.min.js") }}"></script>
{% block head %}{% endblock %}
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
var left = window.innerWidth/2-$('.flash').width()/2;
$(".flash").css({ "left": left+"px", "top":"0.6rem" });
setTimeout(function(){
$(".flash").fadeOut("slow", function () {
$(".flash").remove();
});
}, 4000);
$('.datepicker').datepicker({
format: 'yyyy-mm-dd',
weekStart: 1,
autoclose: true,
language: '{{ g.lang }}'
});
$('.dropdown-toggle').dropdown();
{% block js %}{% endblock %}
});
</script>
</head>
<body>
<nav class="navbar navbar-toggleable-md navbar fixed-top navbar-inverse bg-inverse">
<h1 class="col-2"><a class="navbar-brand" href="{{ url_for(".home") }}">#! money?</a></h1>
<ul class="navbar-nav col-5 offset-md-1">
{% if g.project %}
{% block navbar %}
<li class="nav-item{% if current_view == 'list_bills' %} active{% endif %}"><a class="nav-link" href="{{ url_for(".list_bills") }}">{{ _("Bills") }}</a></li>
<li class="nav-item{% if current_view == 'settle_bill' %} active{% endif %}"><a class="nav-link" href="{{ url_for(".settle_bill") }}">{{ _("Settle") }}</a></li>
{% endblock %}
{% endif %}
</ul>
<ul class="navbar-nav secondary-nav col-4">
{% if g.project %}
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><strong>{{ g.project.name }}</strong> {{ _("options") }} <b class="caret"></b></a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<li><a class="dropdown-item" href="{{ url_for(".edit_project") }}">{{ _("Project settings") }}</a></li>
<li class="dropdown-divider"></li>
{% for id, name in session['projects'] %}
{% if id != g.project.id %}
<li><a class="dropdown-item" href="{{ url_for(".list_bills", project_id=id) }}">{{ _("switch to") }} {{ name }}</a></li>
{% endif %}
{% endfor %}
<li><a class="dropdown-item" href="{{ url_for(".create_project") }}">{{ _("Start a new project") }}</a></li>
<li class="dropdown-divider"></li>
<li><a class="dropdown-item" href="{{ url_for(".exit") }}">{{ _("Logout") }}</a></li>
</ul>
</li>
{% endif %}
<li class="nav-item{% if g.lang == "fr" %} active{% endif %}"><a class="nav-link" href="{{ url_for(".change_lang", lang="fr") }}">fr</a></li>
<li class="nav-item{% if g.lang == "en" %} active{% endif %}"><a class="nav-link" href="{{ url_for(".change_lang", lang="en") }}">en</a></li>
</ul>
</nav>
<div class="container-fluid">
{% block body %}
{% block sidebar %}{% endblock %}
<main class="content offset-1 col-10">
{% block content %}{% endblock %}
</main>
</div>
{% endblock %}
{% for message in get_flashed_messages() %}
<div class="flash alert alert-success">{{ message }}</div>
{% endfor %}
{% block footer %}
<footer>
<p><a href="https://github.com/spiral-project/ihatemoney">{{ _("This is a free software") }}</a>, {{ _("you can contribute and improve it!") }}</p>
</footer>
{% endblock %}
</body>
</html>

View file

@ -1,128 +0,0 @@
{% extends "sidebar_table_layout.html" %}
{% block title %} - {{ g.project.name }}{% endblock %}
{% block head %}
<script src="{{ url_for("static", filename="js/bootstrap-datepicker.js") }}"></script>
<script src="{{ url_for("static", filename="js/locales/bootstrap-datepicker.fr.min.js") }}" charset="utf-8"></script>
{% endblock %}
{% block js %}
{% if add_bill %} $('#new-bill').click(); {% endif %}
// Hide all members actions
$('.action').each(function(){
$(this).hide();
});
// ask for confirmation before removing an user
$('.action.delete').each(function(){
var link = $(this).find('button');
link.click(function(){
if ($(this).hasClass("confirm")){
return true;
}
$(this).html("{{_("you sure?")}}");
$(this).addClass("confirm");
return false;
});
});
// display the remove button on mouse over (and hide them per default)
$('.balance tr').hover(function(){
$(this).find('.action').show();
}, function(){
$(this).find('.action').hide();
});
var highlight_owers = function(){
var ower_ids = $(this).attr("owers").split(',');
var payer_id = $(this).attr("payer");
$.each(ower_ids, function(i, val){
$('#bal-member-'+val).addClass("ower_line");
});
$("#bal-member-"+payer_id).addClass("payer_line");
};
var unhighlight_owers = function(){
$('[id^="bal-member-"]').removeClass("ower_line payer_line");
};
$('#bill_table tbody tr').hover(highlight_owers, unhighlight_owers);
{% endblock %}
{% block sidebar %}
<form id="add-member-form" action="{{ url_for(".add_member") }}" method="post" class="form-inline">
{{ forms.add_member(member_form) }}
</form>
<div id="table_overflow">
<table class="balance table">
{% set balance = g.project.balance %}
{% for member in g.project.members | sort(attribute='name') if member.activated or balance[member.id]|round(2) != 0 %}
<tr id="bal-member-{{ member.id }}" action={% if member.activated %}delete{% else %}reactivate{% endif %}>
<td class="balance-name">{{ member.name }}
<span class="light{% if not g.project.uses_weights %} extra-info{% endif %}">(x{{ member.weight|minimal_round(1) }})</span>
</td>
{% if member.activated %}
<td>
<form class="action delete" action="{{ url_for(".remove_member", member_id=member.id) }}" method="POST">
<button type="submit">{{ _("delete") }}</button></form>
<form class="action edit" action="{{ url_for(".edit_member", member_id=member.id) }}" method="GET">
<button type="submit">{{ _("edit") }}</button></form>
</td>
{% else %}
<td>
<form class="action reactivate" action="{{ url_for(".reactivate", member_id=member.id) }}" method="POST">
<button type="submit">{{ _("reactivate") }}</button></form></td>
{% endif %}
<td class="balance-value {% if balance[member.id]|round(2) > 0 %}positive{% elif balance[member.id]|round(2) < 0 %}negative{% endif %}">
{% if balance[member.id]|round(2) > 0 %}+{% endif %}{{ "%.2f" | format(balance[member.id]) }}
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}
{% block content %}
<div class="identifier">{{ _("The project identifier is") }} <a href="{{ url_for(".list_bills") }}">{{ g.project.id }}</a>, {{ _("remember it!") }}</div>
<a id="new-bill" href="{{ url_for(".add_bill") }}" class="btn btn-primary" data-toggle="modal" data-target="#bill-form">{{ _("Add a new bill") }}</a>
<div id="bill-form" class="modal fade show" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">{{ _('Add a bill') }}</h3>
<a href="#" class="close" data-dismiss="modal">&times;</a>
</div>
<form action="{{ url_for(".add_bill") }}" method="post" class="modal-body container">
{{ forms.add_bill(bill_form, title=False) }}
</form>
</div>
</div>
</div>
{% if bills.count() > 0 %}
<table id="bill_table" class="col table table-striped table-hover">
<thead><tr><th>{{ _("When?") }}</th><th>{{ _("Who paid?") }}</th><th>{{ _("For what?") }}</th><th>{{ _("For whom?") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Actions") }}</th></tr></thead>
<tbody>
{% for bill in bills %}
<tr owers="{{bill.owers|join(',','id')}}" payer="{{bill.payer.id}}">
<td>{{ bill.date }}</td>
<td>{{ bill.payer }}</td>
<td>{{ bill.what }}</td>
<td>{{ bill.owers|join(', ', 'name') }} </td>
<td>{{ "%0.2f"|format(bill.amount) }} ({{ "%0.2f"|format(bill.pay_each()) }} {{ _("each") }})</td>
<td class="bill-actions">
<a class="edit" href="{{ url_for(".edit_bill", bill_id=bill.id) }}" title="{{ _("edit") }}">{{ _('edit') }}</a>
<a class="delete" href="{{ url_for(".delete_bill", bill_id=bill.id) }}" title="{{ _("delete") }}">{{ _('delete') }}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{{ _("Nothing to list yet. You probably want to") }} <a href="{{ url_for(".add_bill") }}" data-toggle="modal" data-target="#bill-form">{{ _("add a bill") }}</a> ?</p>
{% endif %}
{% endblock %}

View file

@ -1,8 +0,0 @@
Hi,
You requested to be reminded about your password for "{{ project.name }}".
You can access it here: {{ config['SITE_URL'] }}{{ url_for(".list_bills", project_id=project.id) }}, the private code is "{{ project.password }}".
Hope this helps,
Some weird guys (with beards)

View file

@ -1,7 +0,0 @@
Salut,
Vous avez demandez des informations sur votre mot de passe pour "{{ project.name }}".
Vous pouvez y accéder ici {{ config['SITE_URL'] }}{{ url_for(".list_bills", project_id=project.id) }}, le code d'accès est "{{ project.password }}".
Faites en bon usage !

View file

@ -1,8 +0,0 @@
{% extends "layout.html" %}
{% block content %}
<h2>{{ _("Password reminder") }}</h2>
<form class="form-horizontal" method="post">
{{ forms.remind_password(form) }}
</form>
{% endblock %}

View file

@ -1,8 +0,0 @@
{% if 'projects' in session %}
<h3>{{ _("Your projects") }}</h3>
<ul>
{% for id, name in session['projects'] %}
<li><a href="{{ url_for("list_bills", project_id=id) }}">{{ name }}</a></li>
{% endfor %}
</ul>
{% endif %}

View file

@ -1,9 +0,0 @@
Hi,
You have just (or someone else using your email address) created the project "{{ g.project.name }}" to share your expenses.
You can access it here: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }} (the identifier is {{ g.project.id }}),
and the private code is "{{ g.project.password }}".
Enjoy,
Some weird guys (with beards)

View file

@ -1,8 +0,0 @@
Hey,
Vous venez de créer le projet "{{ g.project.name }}" pour partager vos dépenses.
Vous pouvez y accéder ici: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }} (l'identifieur est {{ g.project.id }}),
et le code d'accès "{{ g.project.password }}".
Faites en bon usage !

View file

@ -1,20 +0,0 @@
{% extends "layout.html" %}
{% block sidebar %}
<ol>
<li>{{ _("Create the project") }}</li>
<li><strong>{{ _("Invite people") }}</strong></li>
<li><a href="{{ url_for(".list_bills") }}">{{ _("Use it!") }}</a></li>
</ol>
{% endblock %}
{% block content %}
<h2>{{ _("Invite people to join this project") }}</h2>
<p>{{ _("Specify a (comma separated) list of email adresses you want to notify about the
creation of this budget management project and we will send them an email for you.") }}</p>
<p>{{ _("If you prefer, you can") }} <a href="{{ url_for(".list_bills") }}">{{ _("skip this step") }}</a> {{ _("and notify them yourself") }}</p>
{% include "display_errors.html" %}
<form class="invites form-horizontal" method="post" accept-charset="utf-8">
{{ forms.invites(form) }}
</form>
{% endblock %}

View file

@ -1,34 +0,0 @@
{% extends "sidebar_table_layout.html" %}
{% block sidebar %}
<div id="table_overflow">
<table class="balance table">
{% set balance = g.project.balance %}
{% for member in g.project.members | sort(attribute='name') if member.activated or balance[member.id]|round(2) != 0 %}
<tr id="bal-member-{{ member.id }}" action={% if member.activated %}delete{% else %}reactivate{% endif %}>
<td class="balance-name">{{ member.name }}</td>
<td class="balance-value {% if balance[member.id]|round(2) > 0 %}positive{% elif balance[member.id]|round(2) < 0 %}negative{% endif %}">
{% if balance[member.id]|round(2) > 0 %}+{% endif %}{{ "%.2f" | format(balance[member.id]) }}
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}
{% block content %}
<table id="bill_table" class="split_bills table table-striped">
<thead><tr><th>{{ _("Who pays?") }}</th><th>{{ _("To whom?") }}</th><th>{{ _("How much?") }}</th></tr></thead>
<tbody>
{% for bill in bills %}
<tr class="{{ loop.cycle("odd", "even") }}" receiver={{bill.receiver.id}}>
<td>{{ bill.ower }}</td>
<td>{{ bill.receiver }}</td>
<td>{{ "%0.2f"|format(bill.amount) }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View file

@ -1,14 +0,0 @@
{% extends "layout.html" %}
{% block body %}
<div class="row" style="height: 100%">
<aside id="sidebar" class="sidebar col-3 " style="height: 100%">
{% block sidebar %}{% endblock %}
</aside>
<main class="offset-md-3 col-9">
{% block content %}{% endblock %}
</main>
</div>
{% endblock %}

File diff suppressed because it is too large Load diff

View file

@ -1,531 +0,0 @@
# French translations for PROJECT.
# Copyright (C) 2011 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# Alexis Métaireau <alexis@notmyidea.org>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2013-10-13 21:32+0200\n"
"PO-Revision-Date: 2011-10-14 23:51+0200\n"
"Last-Translator: Quentin Roy <royque@gmail.com>\n"
"Language-Team: fr <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
#: forms.py:22
msgid "Select all"
msgstr "Tout cocher"
#: forms.py:22
msgid "Select none"
msgstr "Tout décocher"
#: forms.py:61
msgid "Project name"
msgstr "Nom de projet"
#: forms.py:62 forms.py:86 forms.py:102
msgid "Private code"
msgstr "Code d'accès"
#: forms.py:63
msgid "Email"
msgstr "Email"
#: forms.py:85 forms.py:101 forms.py:107
msgid "Project identifier"
msgstr "Identifiant du projet"
#: forms.py:87 templates/send_invites.html:5
msgid "Create the project"
msgstr "Créer le projet"
#: forms.py:92
msgid ""
"The project identifier is used to log in and for the URL of the project. "
"We tried to generate an identifier for you but a project with this "
"identifier already exists. Please create a new identifier that you will "
"be able to remember."
msgstr ""
"L'identifiant du projet est utilisé pour se connecter."
"Nous avons essayé de générer un identifiant mais "
"celui ci existe déjà. Merci de créer un nouvel identifiant que vous serez"
" capable de retenir"
#: forms.py:103
msgid "Get in"
msgstr "Entrer"
#: forms.py:108
msgid "Send me the code by email"
msgstr "Envoyez moi le code par email"
#: forms.py:112
msgid "This project does not exists"
msgstr "Ce projet n'existe pas"
#: forms.py:116
msgid "Date"
msgstr "Date"
#: forms.py:117
msgid "What?"
msgstr "Quoi ?"
#: forms.py:118
msgid "Payer"
msgstr "Payeur"
#: forms.py:119
msgid "Amount paid"
msgstr "Montant"
#: forms.py:120 templates/list_bills.html:103
msgid "For whom?"
msgstr "Pour qui ?"
#: forms.py:122
msgid "Submit"
msgstr "Valider"
#: forms.py:123
msgid "Submit and add a new one"
msgstr "Valider et ajouter une autre facture"
#: forms.py:149
msgid "Bills can't be null"
msgstr "Le montant d'une facture ne peut pas être nul."
#: forms.py:154
msgid "Name"
msgstr "Nom"
#: forms.py:155
msgid "Weight"
msgstr "Parts"
#: forms.py:155 templates/forms.html:95
msgid "Add"
msgstr "Ajouter"
#: forms.py:163
msgid "User name incorrect"
msgstr "Nom d'utilisateur incorrect"
#: forms.py:167
msgid "This project already have this member"
msgstr "Ce membre existe déjà pour ce projet"
#: forms.py:178
msgid "People to notify"
msgstr "Personnes à prévenir"
#: forms.py:179
msgid "Send invites"
msgstr "Envoyer les invitations"
#: forms.py:185
#, python-format
msgid "The email %(email)s is not valid"
msgstr "L'email %(email)s est invalide"
#: forms.py:190
msgid "Name for this archive (optional)"
msgstr "Nom pour cette archive (optionnel)"
#: forms.py:191
msgid "Start date"
msgstr "Date de départ"
#: forms.py:192
msgid "End date"
msgstr "Date de fin"
#: forms.py:202
msgid "What do you want to download ?"
msgstr "Que voulez-vous télécharger ?"
#: forms.py:205
msgid "bills"
msgstr "factures"
#: forms.py:205
msgid "transactions"
msgstr "remboursements"
#: forms.py:206
msgid "Export file format"
msgstr "Format du fichier d'export"
#: web.py:95
msgid "This private code is not the right one"
msgstr "Le code que vous avez entré n'est pas correct"
#: web.py:147
#, python-format
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Vous venez de créer '%(project)s' pour partager vos dépenses"
#: web.py:165
#, python-format
msgid "%(msg_compl)sThe project identifier is %(project)s"
msgstr "L'identifiant de ce projet est '%(project)s'"
#: web.py:185
msgid "a mail has been sent to you with the password"
msgstr "Un email vous a été envoyé avec le mot de passe"
#: web.py:211
msgid "Project successfully deleted"
msgstr "Projet supprimé"
#: web.py:254
#, python-format
msgid "You have been invited to share your expenses for %(project)s"
msgstr "Vous avez été invité à partager vos dépenses pour %(project)s"
#: web.py:261
msgid "Your invitations have been sent"
msgstr "Vos invitations ont bien été envoyées"
#: web.py:290
#, python-format
msgid "%(member)s had been added"
msgstr "%(member)s a bien été ajouté"
#: web.py:303
#, python-format
msgid "%(name)s is part of this project again"
msgstr "%(name)s a rejoint le projet"
#: web.py:312
#, python-format
msgid "User '%(name)s' has been deactivated"
msgstr "Le membre '%(name)s' a été désactivé"
#: web.py:314
#, python-format
msgid "User '%(name)s' has been removed"
msgstr "Le membre '%(name)s' a été supprimé"
#: web.py:331
msgid "The bill has been added"
msgstr "La facture a bien été ajoutée"
#: web.py:351
msgid "The bill has been deleted"
msgstr "La facture a été supprimée"
#: web.py:369
msgid "The bill has been modified"
msgstr "La facture a été modifiée"
#: web.py:399
msgid "The data from XX to XX has been archived"
msgstr "Les données de XX à XX ont été archivées"
#: templates/add_bill.html:9
msgid "Back to the list"
msgstr "Retourner à la liste"
#: templates/authenticate.html:6
msgid ""
"The project you are trying to access do not exist, do you want \n"
"to"
msgstr "Le projet auquel vous essayez d'acceder n'existe pas. Souhaitez vous"
#: templates/authenticate.html:7
msgid "create it"
msgstr "le créer"
#: templates/authenticate.html:7
msgid "?"
msgstr " ?"
#: templates/create_project.html:4
msgid "Create a new project"
msgstr "Créer un nouveau projet"
#: templates/dashboard.html:5
msgid "Project"
msgstr "Projets"
#: templates/dashboard.html:5
msgid "Number of members"
msgstr "Nombre de membres"
#: templates/dashboard.html:5
msgid "Number of bills"
msgstr "Nombre de factures"
#: templates/dashboard.html:5
msgid "Newest bill"
msgstr "Facture la plus récente"
#: templates/dashboard.html:5
msgid "Oldest bill"
msgstr "Facture la plus ancienne"
#: templates/edit_project.html:6 templates/list_bills.html:24
msgid "you sure?"
msgstr "c'est sûr ?"
#: templates/edit_project.html:11
msgid "Edit this project"
msgstr "Éditer ce projet"
#: templates/forms.html:23
msgid "Can't remember the password?"
msgstr "Vous ne vous souvenez plus du code d'accès ?"
#: templates/forms.html:26
msgid "Cancel"
msgstr "Annuler"
#: templates/forms.html:68
msgid "Edit the project"
msgstr "Éditer le projet"
#: templates/forms.html:69 templates/list_bills.html:70
#: templates/list_bills.html:114
msgid "delete"
msgstr "supprimer"
#: templates/forms.html:77
msgid "Edit this bill"
msgstr "Éditer cette facture"
#: templates/forms.html:77 templates/list_bills.html:94
msgid "Add a bill"
msgstr "Ajouter une facture"
#: templates/forms.html:95
msgid "Type user name here"
msgstr "Nouveau participant"
#: templates/forms.html:100
msgid "Edit this member"
msgstr "Éditer ce participant"
#: templates/forms.html:102
msgid "Send the invitations"
msgstr "Envoyer les invitations"
#: templates/forms.html:103
msgid "No, thanks"
msgstr "Non merci"
#: templates/forms.html:109
msgid "Create an archive"
msgstr "Créer une archive"
#: templates/forms.html:116
msgid "Create the archive"
msgstr "Créer l'archive"
#: templates/forms.html:136
msgid "Download this project's data"
msgstr "Télécharger les données de ce projet"
#: templates/forms.html:136
msgid "Download"
msgstr "Télécharger"
#: templates/home.html:8
msgid "Manage your shared <br>expenses, easily"
msgstr "Gérez vos dépenses<br> partagées, facilement"
#: templates/home.html:9
msgid "Try out the demo"
msgstr "Essayez la démo"
#: templates/home.html:12
msgid "You're sharing a house?"
msgstr "Vous êtes en colocation ?"
#: templates/home.html:12
msgid "Going on holidays with friends?"
msgstr "Partez en vacances avec des amis ?"
#: templates/home.html:12
msgid "Simply sharing money with others?"
msgstr "Ça vous arrive de partager de l'argent avec d'autres ?"
#: templates/home.html:12
msgid "We can help!"
msgstr "On peut vous aider !"
#: templates/home.html:24
msgid "Log to an existing project"
msgstr "Se connecter à un projet existant"
#: templates/home.html:28
msgid "log in"
msgstr "se connecter"
#: templates/home.html:29
msgid "can't remember your password?"
msgstr "vous ne vous souvenez plus du code d'accès ?"
#: templates/home.html:36
msgid "or create a new one"
msgstr "ou créez en un nouveau"
#: templates/home.html:40
msgid "let's get started"
msgstr "c'est parti !"
#: templates/home.html:51
msgid ""
"This access code will be sent to your friends. It is stored as-is by the "
"server, so don\\'t reuse a personal password!"
msgstr ""
"Ce code d\\'accès va être envoyé à vos amis et stocké en clair sur le "
"serveur.N\\'utilisez pas un mot de passe personnel !"
#: templates/layout.html:5
msgid "Account manager"
msgstr "Gestion de comptes"
#: templates/layout.html:45 templates/settle_bills.html:4
msgid "Bills"
msgstr "Factures"
#: templates/layout.html:46 templates/settle_bills.html:5
msgid "Settle"
msgstr "Remboursements"
#: templates/layout.html:53
msgid "options"
msgstr "options"
#: templates/layout.html:55
msgid "Project settings"
msgstr "Options du projet"
#: templates/layout.html:59
msgid "switch to"
msgstr "aller à"
#: templates/layout.html:62
msgid "Start a new project"
msgstr "Nouveau projet"
#: templates/layout.html:64
msgid "Logout"
msgstr "Se déconnecter"
#: templates/layout.html:92
msgid "This is a free software"
msgstr "Ceci est un logiciel libre"
#: templates/layout.html:92
msgid "you can contribute and improve it!"
msgstr "vous pouvez y contribuer et l'améliorer"
#: templates/list_bills.html:74
msgid "reactivate"
msgstr "ré-activer"
#: templates/list_bills.html:88
msgid "The project identifier is"
msgstr "L'identifiant de ce projet est"
#: templates/list_bills.html:88
msgid "remember it!"
msgstr "souvenez vous en !"
#: templates/list_bills.html:89
msgid "Add a new bill"
msgstr "Nouvelle facture"
#: templates/list_bills.html:103
msgid "When?"
msgstr "Quand ?"
#: templates/list_bills.html:103
msgid "Who paid?"
msgstr "Qui a payé ?"
#: templates/list_bills.html:103
msgid "For what?"
msgstr "Pour quoi ?"
#: templates/list_bills.html:103 templates/settle_bills.html:31
msgid "How much?"
msgstr "Combien ?"
#: templates/list_bills.html:103
msgid "Actions"
msgstr "Actions"
#: templates/list_bills.html:111
msgid "each"
msgstr "chacun"
#: templates/list_bills.html:113
msgid "edit"
msgstr "éditer"
#: templates/list_bills.html:122
msgid "Nothing to list yet. You probably want to"
msgstr "Rien à lister pour l'instant. Vous voulez surement"
#: templates/list_bills.html:122
msgid "add a bill"
msgstr "ajouter une facture"
#: templates/password_reminder.html:4
msgid "Password reminder"
msgstr "Rappel du code d'accès"
#: templates/recent_projects.html:2
msgid "Your projects"
msgstr "Vos projets"
#: templates/send_invites.html:6
msgid "Invite people"
msgstr "Invitez des gens"
#: templates/send_invites.html:7
msgid "Use it!"
msgstr "Utilisez le !"
#: templates/send_invites.html:11
msgid "Invite people to join this project"
msgstr "Invitez des personnes à rejoindre ce projet"
#: templates/send_invites.html:12
msgid ""
"Specify a (comma separated) list of email adresses you want to notify "
"about the \n"
"creation of this budget management project and we will send them an email"
" for you."
msgstr ""
"Entrez les addresses des personnes que vous souhaitez inviter, séparées "
"par des virgules. On s'occupe de leur envoyer un email."
#: templates/send_invites.html:14
msgid "If you prefer, you can"
msgstr "Si vous préférez vous pouvez"
#: templates/send_invites.html:14
msgid "skip this step"
msgstr "sauter cette étape"
#: templates/send_invites.html:14
msgid "and notify them yourself"
msgstr "et les avertir vous même"
#: templates/settle_bills.html:31
msgid "Who pays?"
msgstr "Qui doit payer ?"
#: templates/settle_bills.html:31
msgid "To whom?"
msgstr "Pour qui ?"

View file

@ -1,110 +0,0 @@
import re
import inspect
from jinja2 import filters
from json import dumps
from flask import redirect
from werkzeug.routing import HTTPException, RoutingException
from io import BytesIO
import csv
def slugify(value):
"""Normalizes string, converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
Copy/Pasted from ametaireau/pelican/utils itself took from django sources.
"""
if type(value) == unicode:
import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
return re.sub('[-\s]+', '-', value)
class Redirect303(HTTPException, RoutingException):
"""Raise if the map requests a redirect. This is for example the case if
`strict_slashes` are activated and an url that requires a trailing slash.
The attribute `new_url` contains the absolute destination url.
"""
code = 303
def __init__(self, new_url):
RoutingException.__init__(self, new_url)
self.new_url = new_url
def get_response(self, environ):
return redirect(self.new_url, 303)
class PrefixedWSGI(object):
'''
Wrap the application in this middleware and configure the
front-end server to add these headers, to let you quietly bind
this to a URL other than / and to an HTTP scheme that is
different than what is used locally.
It relies on "APPLICATION_ROOT" app setting.
Inspired from http://flask.pocoo.org/snippets/35/
:param app: the WSGI application
'''
def __init__(self, app):
self.app = app
self.wsgi_app = app.wsgi_app
def __call__(self, environ, start_response):
script_name = self.app.config['APPLICATION_ROOT']
if script_name:
environ['SCRIPT_NAME'] = script_name
path_info = environ['PATH_INFO']
if path_info.startswith(script_name):
environ['PATH_INFO'] = path_info[len(script_name):]
scheme = environ.get('HTTP_X_SCHEME', '')
if scheme:
environ['wsgi.url_scheme'] = scheme
return self.wsgi_app(environ, start_response)
def minimal_round(*args, **kw):
""" Jinja2 filter: rounds, but display only non-zero decimals
from http://stackoverflow.com/questions/28458524/
"""
# Use the original round filter, to deal with the extra arguments
res = filters.do_round(*args, **kw)
# Test if the result is equivalent to an integer and
# return depending on it
ires = int(res)
return (res if res != ires else ires)
def list_of_dicts2json(dict_to_convert):
"""Take a list of dictionnaries and turns it into
a json in-memory file
"""
bytes_io = BytesIO()
bytes_io.write(dumps(dict_to_convert))
bytes_io.seek(0)
return bytes_io
def list_of_dicts2csv(dict_to_convert):
"""Take a list of dictionnaries and turns it into
a csv in-memory file, assume all dict have the same keys
"""
bytes_io = BytesIO()
try:
csv_data = [dict_to_convert[0].keys()]
for dic in dict_to_convert:
csv_data.append([dic[h].encode('utf8')
if isinstance(dic[h], unicode) else str(dic[h]).encode('utf8')
for h in dict_to_convert[0].keys()])
except (KeyError, IndexError):
csv_data = []
writer = csv.writer(bytes_io)
writer.writerows(csv_data)
bytes_io.seek(0)
return bytes_io

View file

@ -1,461 +0,0 @@
"""
The blueprint for the web interface.
Contains all the interaction logic with the end user (except forms which
are directly handled in the forms module.
Basically, this blueprint takes care of the authentication and provides
some shortcuts to make your life better when coding (see `pull_project`
and `add_project_id` for a quick overview)
"""
from flask import Blueprint, current_app, flash, g, redirect, \
render_template, request, session, url_for, send_file
from flask_mail import Mail, Message
from flask_babel import get_locale, gettext as _
from smtplib import SMTPRecipientsRefused
import werkzeug
from sqlalchemy import orm
# local modules
from models import db, Project, Person, Bill
from forms import AuthenticationForm, CreateArchiveForm, EditProjectForm, \
InviteForm, MemberForm, PasswordReminder, ProjectForm, get_billform_for, \
ExportForm
from utils import Redirect303, list_of_dicts2json, list_of_dicts2csv
main = Blueprint("main", __name__)
mail = Mail()
@main.url_defaults
def add_project_id(endpoint, values):
"""Add the project id to the url calls if it is expected.
This is to not carry it everywhere in the templates.
"""
if 'project_id' in values or not hasattr(g, 'project'):
return
if current_app.url_map.is_endpoint_expecting(endpoint, 'project_id'):
values['project_id'] = g.project.id
@main.url_value_preprocessor
def pull_project(endpoint, values):
"""When a request contains a project_id value, transform it directly
into a project by checking the credentials are stored in session.
If not, redirect the user to an authentication form
"""
if endpoint == "authenticate":
return
if not values:
values = {}
project_id = values.pop('project_id', None)
if project_id:
project = Project.query.get(project_id)
if not project:
raise Redirect303(url_for(".create_project",
project_id=project_id))
if project.id in session and session[project.id] == project.password:
# add project into kwargs and call the original function
g.project = project
else:
# redirect to authentication page
raise Redirect303(
url_for(".authenticate", project_id=project_id))
@main.route("/authenticate", methods=["GET", "POST"])
def authenticate(project_id=None):
"""Authentication form"""
form = AuthenticationForm()
if not form.id.data and request.args.get('project_id'):
form.id.data = request.args['project_id']
project_id = form.id.data
if project_id is None:
#User doesn't provide project identifier, return to authenticate form
msg = _("You need to enter a project identifier")
form.errors["id"] = [msg]
return render_template("authenticate.html", form=form)
else:
project = Project.query.get(project_id)
create_project = False # We don't want to create the project by default
if not project:
# But if the user try to connect to an unexisting project, we will
# propose him a link to the creation form.
if request.method == "POST":
form.validate()
else:
create_project = project_id
else:
# if credentials are already in session, redirect
if project_id in session and project.password == session[project_id]:
setattr(g, 'project', project)
return redirect(url_for(".list_bills"))
# else process the form
if request.method == "POST":
if form.validate():
if not form.password.data == project.password:
msg = _("This private code is not the right one")
form.errors['password'] = [msg]
else:
# maintain a list of visited projects
if "projects" not in session:
session["projects"] = []
# add the project on the top of the list
session["projects"].insert(0, (project_id, project.name))
session[project_id] = form.password.data
session.update()
setattr(g, 'project', project)
return redirect(url_for(".list_bills"))
return render_template("authenticate.html", form=form,
create_project=create_project)
@main.route("/")
def home():
project_form = ProjectForm()
auth_form = AuthenticationForm()
return render_template("home.html", project_form=project_form,
auth_form=auth_form, session=session)
@main.route("/create", methods=["GET", "POST"])
def create_project():
form = ProjectForm()
if request.method == "GET" and 'project_id' in request.values:
form.name.data = request.values['project_id']
if request.method == "POST":
# At first, we don't want the user to bother with the identifier
# so it will automatically be missing because not displayed into
# the form
# Thus we fill it with the same value as the filled name,
# the validation will take care of the slug
if not form.id.data:
form.id.data = form.name.data
if form.validate():
# save the object in the db
project = form.save()
db.session.add(project)
db.session.commit()
# create the session object (authenticate)
session[project.id] = project.password
session.update()
# send reminder email
g.project = project
message_title = _("You have just created '%(project)s' "
"to share your expenses", project=g.project.name)
message_body = render_template("reminder_mail.%s" %
get_locale().language)
msg = Message(message_title,
body=message_body,
recipients=[project.contact_email])
try:
mail.send(msg)
except SMTPRecipientsRefused:
msg_compl = 'Problem sending mail. '
# TODO: destroy the project and cancel instead?
else:
msg_compl = ''
# redirect the user to the next step (invite)
flash(_("%(msg_compl)sThe project identifier is %(project)s",
msg_compl=msg_compl, project=project.id))
return redirect(url_for(".invite", project_id=project.id))
return render_template("create_project.html", form=form)
@main.route("/password-reminder", methods=["GET", "POST"])
def remind_password():
form = PasswordReminder()
if request.method == "POST":
if form.validate():
# get the project
project = Project.query.get(form.id.data)
# send the password reminder
password_reminder = "password_reminder.%s" % get_locale().language
mail.send(Message("password recovery",
body=render_template(password_reminder, project=project),
recipients=[project.contact_email]))
flash(_("a mail has been sent to you with the password"))
return render_template("password_reminder.html", form=form)
@main.route("/<project_id>/edit", methods=["GET", "POST"])
def edit_project():
edit_form = EditProjectForm()
export_form = ExportForm()
if request.method == "POST":
if edit_form.validate():
project = edit_form.update(g.project)
db.session.commit()
session[project.id] = project.password
return redirect(url_for(".list_bills"))
if export_form.validate():
export_format = export_form.export_format.data
export_type = export_form.export_type.data
if export_type == 'transactions':
export = g.project.get_transactions_to_settle_bill(
pretty_output=True)
if export_type == "bills":
export = g.project.get_pretty_bills(
export_format=export_format)
if export_format == "json":
file2export = list_of_dicts2json(export)
if export_format == "csv":
file2export = list_of_dicts2csv(export)
return send_file(file2export,
attachment_filename="%s-%s.%s" %
(g.project.name, export_type, export_format),
as_attachment=True
)
else:
edit_form.name.data = g.project.name
edit_form.password.data = g.project.password
edit_form.contact_email.data = g.project.contact_email
return render_template("edit_project.html", edit_form=edit_form, export_form=export_form)
@main.route("/<project_id>/delete")
def delete_project():
g.project.remove_project()
flash(_('Project successfully deleted'))
return redirect(url_for(".home"))
@main.route("/exit")
def exit():
# delete the session
session.clear()
return redirect(url_for(".home"))
@main.route("/demo")
def demo():
"""
Authenticate the user for the demonstration project and redirect him to
the bills list for this project.
Create a demo project if it doesnt exists yet (or has been deleted)
"""
project = Project.query.get("demo")
if not project:
project = Project(id="demo", name=u"demonstration", password="demo",
contact_email="demo@notmyidea.org")
db.session.add(project)
db.session.commit()
session[project.id] = project.password
return redirect(url_for(".list_bills", project_id=project.id))
@main.route("/<project_id>/invite", methods=["GET", "POST"])
def invite():
"""Send invitations for this particular project"""
form = InviteForm()
if request.method == "POST":
if form.validate():
# send the email
message_body = render_template("invitation_mail.%s" %
get_locale().language)
message_title = _("You have been invited to share your "
"expenses for %(project)s", project=g.project.name)
msg = Message(message_title,
body=message_body,
recipients=[email.strip()
for email in form.emails.data.split(",")])
mail.send(msg)
flash(_("Your invitations have been sent"))
return redirect(url_for(".list_bills"))
return render_template("send_invites.html", form=form)
@main.route("/<project_id>/")
def list_bills():
bill_form = get_billform_for(g.project)
# set the last selected payer as default choice if exists
if 'last_selected_payer' in session:
bill_form.payer.data = session['last_selected_payer']
# Preload the "owers" relationship for all bills
bills = g.project.get_bills().options(orm.subqueryload(Bill.owers))
return render_template("list_bills.html",
bills=bills, member_form=MemberForm(g.project),
bill_form=bill_form,
add_bill=request.values.get('add_bill', False),
current_view="list_bills",
)
@main.route("/<project_id>/members/add", methods=["GET", "POST"])
def add_member():
# FIXME manage form errors on the list_bills page
form = MemberForm(g.project)
if request.method == "POST":
if form.validate():
member = form.save(g.project, Person())
db.session.commit()
flash(_("%(member)s had been added", member=member.name))
return redirect(url_for(".list_bills"))
return render_template("add_member.html", form=form)
@main.route("/<project_id>/members/<member_id>/reactivate", methods=["POST"])
def reactivate(member_id):
person = Person.query.filter(Person.id == member_id)\
.filter(Project.id == g.project.id).all()
if person:
person[0].activated = True
db.session.commit()
flash(_("%(name)s is part of this project again", name=person[0].name))
return redirect(url_for(".list_bills"))
@main.route("/<project_id>/members/<member_id>/delete", methods=["POST"])
def remove_member(member_id):
member = g.project.remove_member(member_id)
if member:
if member.activated == False:
flash(_("User '%(name)s' has been deactivated", name=member.name))
else:
flash(_("User '%(name)s' has been removed", name=member.name))
return redirect(url_for(".list_bills"))
@main.route("/<project_id>/members/<member_id>/edit",
methods=["POST", "GET"])
def edit_member(member_id):
member = Person.query.get(member_id, g.project)
if not member:
raise werkzeug.exceptions.NotFound()
form = MemberForm(g.project, edit=True)
if request.method == 'POST' and form.validate():
form.save(g.project, member)
db.session.commit()
flash(_("User '%(name)s' has been edited", name=member.name))
return redirect(url_for(".list_bills"))
form.fill(member)
return render_template("edit_member.html", form=form, edit=True)
@main.route("/<project_id>/add", methods=["GET", "POST"])
def add_bill():
form = get_billform_for(g.project)
if request.method == 'POST':
if form.validate():
# save last selected payer in session
session['last_selected_payer'] = form.payer.data
session.update()
bill = Bill()
db.session.add(form.save(bill, g.project))
db.session.commit()
flash(_("The bill has been added"))
args = {}
if form.submit2.data:
args['add_bill'] = True
return redirect(url_for('.list_bills', **args))
return render_template("add_bill.html", form=form)
@main.route("/<project_id>/delete/<int:bill_id>")
def delete_bill(bill_id):
# fixme: everyone is able to delete a bill
bill = Bill.query.get(g.project, bill_id)
if not bill:
raise werkzeug.exceptions.NotFound()
db.session.delete(bill)
db.session.commit()
flash(_("The bill has been deleted"))
return redirect(url_for('.list_bills'))
@main.route("/<project_id>/edit/<int:bill_id>", methods=["GET", "POST"])
def edit_bill(bill_id):
# FIXME: Test this bill belongs to this project !
bill = Bill.query.get(g.project, bill_id)
if not bill:
raise werkzeug.exceptions.NotFound()
form = get_billform_for(g.project, set_default=False)
if request.method == 'POST' and form.validate():
form.save(bill, g.project)
db.session.commit()
flash(_("The bill has been modified"))
return redirect(url_for('.list_bills'))
if not form.errors:
form.fill(bill)
return render_template("add_bill.html", form=form, edit=True)
@main.route("/lang/<lang>")
def change_lang(lang):
session['lang'] = lang
session.update()
return redirect(request.headers.get('Referer') or url_for('.home'))
@main.route("/<project_id>/settle_bills")
def settle_bill():
"""Compute the sum each one have to pay to each other and display it"""
bills = g.project.get_transactions_to_settle_bill()
return render_template(
"settle_bills.html",
bills=bills,
current_view='settle_bill',
)
@main.route("/<project_id>/archives/create", methods=["GET", "POST"])
def create_archive():
form = CreateArchiveForm()
if request.method == "POST":
if form.validate():
pass
flash(_("The data from XX to XX has been archived"))
return render_template("create_archive.html", form=form)
@main.route("/dashboard")
def dashboard():
return render_template("dashboard.html", projects=Project.query.all())

View file

@ -1,7 +0,0 @@
backlog = 2048
daemon = False
debug = True
workers = 3
logfile = "/path/to/your/app/budget.gunicorn.log"
loglevel = "info"
bind = "unix:/path/to/your/app/budget.gunicorn.sock"

View file

@ -1,28 +0,0 @@
server {
server_name yourur;
keepalive_timeout 5;
location /static/ {
alias /path/to/app/budget/static/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 90;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_buffer_size 16k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
proxy_intercept_errors on;
if (!-f $request_filename) {
proxy_pass http://budget_backend;
break;
}
}
}
upstream budget_backend {
server unix:/path/to/app/budget.gunicorn.sock;
}

View file

@ -1,7 +0,0 @@
[program:budget]
command=/path/to/your/app/venv/bin/gunicorn -c /path/to/your/app/conf/gunicorn.conf.py run:app
directory=/path/to/your/app/budget/
user=www
autostart=true
autorestart=true
redirect_stderr=True

View file

@ -1,130 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Ihatemoney.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Ihatemoney.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Ihatemoney"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Ihatemoney"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
make -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."

View file

@ -1,22 +0,0 @@
{% extends "basic/layout.html" %}
{% block header %}
{{ super() }}
{% if pagename == 'index' %}
<div class=indexwrapper>
{% endif %}
{% endblock %}
{% block footer %}
{% if pagename == 'index' %}
</div>
{% endif %}
{% endblock %}
{# do not display relbars #}
{% block relbar1 %}{% endblock %}
{% block relbar2 %}
{% if theme_github_fork %}
<a href="http://github.com/{{ theme_github_fork }}"><img style="position: fixed; top: 0; right: 0; border: 0;"
src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
{% endif %}
{% endblock %}
{% block sidebar1 %}{% endblock %}
{% block sidebar2 %}{% endblock %}

View file

@ -1,254 +0,0 @@
/*
* pelican.css_t
* ~~~~~~~~~~~~
*
* Sphinx stylesheet -- pelican theme, based on the nature theme
*
* :copyright: Copyright 2011 by Alexis Metaireau.
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Arial, sans-serif;
font-size: 100%;
background-color: white;
color: #555;
margin: 0;
padding: 0;
}
div.documentwrapper {
width: 70%;
margin: auto;
}
div.bodywrapper {
margin: 0 0 0 230px;
}
hr {
border: 1px solid #B1B4B6;
}
div.document {
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 30px 30px;
font-size: 0.9em;
}
div.footer {
color: #555;
width: 100%;
padding: 13px 0;
text-align: center;
font-size: 75%;
}
div.footer a {
color: #444;
text-decoration: underline;
}
div.related {
background-color: #6BA81E;
line-height: 32px;
color: #fff;
text-shadow: 0px 1px 0 #444;
font-size: 0.9em;
}
div.related a {
color: #E2F3CC;
}
div.sphinxsidebar {
font-size: 0.75em;
line-height: 1.5em;
}
div.sphinxsidebarwrapper{
padding: 20px 0;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Arial, sans-serif;
color: #222;
font-size: 1.2em;
font-weight: normal;
margin: 0;
padding: 5px 10px;
background-color: #ddd;
text-shadow: 1px 1px 0 white
}
div.sphinxsidebar h4{
font-size: 1.1em;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p {
color: #888;
padding: 5px 20px;
}
div.sphinxsidebar p.topless {
}
div.sphinxsidebar ul {
margin: 10px 20px;
padding: 0;
color: #000;
}
div.sphinxsidebar a {
color: #444;
}
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar input[type=text]{
margin-left: 20px;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #005B81;
text-decoration: none;
}
a:hover {
color: #E32E00;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Arial, sans-serif;
font-weight: normal;
color: #212224;
margin: 30px 0px 10px 0px;
padding: 5px 0 5px 10px;
text-shadow: 0px 1px 0 white
}
{% if theme_index_logo %}
div.indexwrapper h1 {
text-indent: -999999px;
background: url({{ theme_index_logo }}) no-repeat center center;
height: {{ theme_index_logo_height }};
}
{% endif %}
div.body h1 {
border-top: 20px solid white;
margin-top: 0;
font-size: 250%;
text-align: center;
}
div.body h2 { font-size: 150%; background-color: #C8D5E3; }
div.body h3 { font-size: 120%; background-color: #D8DEE3; }
div.body h4 { font-size: 110%; background-color: #D8DEE3; }
div.body h5 { font-size: 100%; background-color: #D8DEE3; }
div.body h6 { font-size: 100%; background-color: #D8DEE3; }
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
a.headerlink:hover {
background-color: #c60f0f;
color: white;
}
div.body p, div.body dd, div.body li {
line-height: 1.5em;
}
div.admonition p.admonition-title + p {
display: inline;
}
div.highlight{
background-color: #111;
}
div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
div.warning {
background-color: #ffe4e4;
border: 1px solid #f66;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre {
padding: 10px;
background-color: #111;
color: #fff;
line-height: 1.2em;
border: 1px solid #C6C9CB;
font-size: 1.1em;
margin: 1.5em 0 1.5em 0;
-webkit-box-shadow: 1px 1px 1px #d8d8d8;
-moz-box-shadow: 1px 1px 1px #d8d8d8;
}
tt {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
font-size: 1.1em;
font-family: monospace;
}
.viewcode-back {
font-family: Arial, sans-serif;
}
div.viewcode-block:target {
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}

View file

@ -1,10 +0,0 @@
[theme]
inherit = basic
stylesheet = pelican.css
nosidebar = true
pygments_style = fruity
[options]
index_logo_height = 120px
index_logo =
github_fork =

View file

@ -1,160 +0,0 @@
The REST API
############
All of what's possible to do with the website is also possible via a web API.
This document explains how the API is organized and how you can query it.
By default, the API talks JSON. There is no other way to speak with it
currently.
Overall organisation
====================
You can access three different things: projects, members and bills. You can
also get the balance for a project.
For the examples, I'm using curl, feel free to use whatever you want to do the
same thing, curl is not a requirement.
Authentication
--------------
To interact with bills and members, and to do something else than creating
a project, you need to be authenticated. The only way to authenticate yourself
currently is using the "basic" HTTP authentication.
For instance, here is how to see the what's in a project, using curl::
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo
Projects
--------
You can't list projects, for security reasons. But you can create, update and
delete one directly from the API.
The URLs are `/api/projects` and `/api/projects/<identifier>`.
Creating a project
~~~~~~~~~~~~~~~~~~
A project needs the following arguments:
* `name`: The project name (string)
* `id`: the project identifier (string without special chars or spaces)
* `password`: the project password / secret code (string)
* `contact_email`: the contact email
::
$ curl -X POST https://ihatemoney.org/api/projects \
-d 'name=yay&id=yay&password=yay&contact_email=yay@notmyidea.org'
"yay"
As you can see, the API retuns the identifier of the project
Getting information about the project
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Getting information about the project::
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo
{
"name": "demonstration",
"contact_email": "demo@notmyidea.org",
"password": "demo",
"id": "demo",
"active_members": [{"activated": true, "id": 31, "name": "Arnaud"},
{"activated": true, "id": 32, "name": "Alexis"},
{"activated": true, "id": 33, "name": "Olivier"},
{"activated": true, "id": 34, "name": "Fred"}],
"members": [{"activated": true, "id": 31, "name": "Arnaud"},
{"activated": true, "id": 32, "name": "Alexis"},
{"activated": true, "id": 33, "name": "Olivier"},
{"activated": true, "id": 34, "name": "Fred"}],
}
Updating a project
~~~~~~~~~~~~~~~~~~
Updating a project is done with the `PUT` verb::
$ curl --basic -u yay:yay -X PUT\
https://ihatemoney.org/api/projects/yay -d\
'name=yay&id=yay&password=yay&contact_email=youpi@notmyidea.org'
Deleting a project
~~~~~~~~~~~~~~~~~~
Just send a DELETE request ont the project URI ::
$ curl --basic -u demo:demo -X DELETE https://ihatemoney.org/api/projects/demo
Members
-------
You can get all the members with a `GET` on `/api/projects/<id>/members`::
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/members\
[{"activated": true, "id": 31, "name": "Arnaud"},
{"activated": true, "id": 32, "name": "Alexis"},
{"activated": true, "id": 33, "name": "Olivier"},
{"activated": true, "id": 34, "name": "Fred"}]
Add a member with a `POST` request on `/api/projects/<id>/members`::
$ curl --basic -u demo:demo -X POST\
https://ihatemoney.org/api/projects/demo/members -d 'name=tatayoyo'
35
You can also `PUT` a new version of a member (changing its name)::
$ curl --basic -u demo:demo -X PUT\
https://ihatemoney.org/api/projects/demo/members/36\
-d 'name=yeaaaaah'
{"activated": true, "id": 36, "name": "yeaaaaah"}
Delete a member with a `DELETE` request on `/api/projects/<id>/members/<member-id>`::
$ curl --basic -u demo:demo -X DELETE\
https://ihatemoney.org/api/projects/demo/members/35
"OK
Bills
-----
You can get the list of bills by doing a `GET` on `/api/projects/<id>/bills` ::
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/bills
Add a bill with a `POST` query on `/api/projects/<id>/bills`. you need the
following params:
* `date`: the date of the bill; defaults to current date if not provided. (yy-mm-dd)
* `what`: what have been payed
* `payer`: by who ? (id)
* `payed_for`: for who ? (id, repeat the parameter to set multiple id)
* `amount`: amount payed
Returns the id of the created bill ::
$ curl --basic -u demo:demo -X POST\
https://ihatemoney.org/api/projects/demo/bills\
-d "date=2011-09-10&what=raclette&payer=31&payed_for=31&amount=200"
80
You can also `PUT` a new version of the bill at
`/api/projects/<id>/bills/<bill-id>`::
$ curl --basic -u demo:demo -X PUT\
https://ihatemoney.org/api/projects/demo/bills/80\
-d "date=2011-09-10&what=raclette&payer=31&payed_for=31&amount=250"
80
And you can of course `DELETE` them at `/api/projects/<id>/bills/<bill-id>`::
$ curl --basic -u demo:demo -X DELETE\
https://ihatemoney.org/api/projects/demo/bills/80\
"OK"

View file

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
import sys, os
templates_path = ['_templates']
source_suffix = '.rst'
master_doc = 'index'
project = u'I hate money'
copyright = u'2011, The \'I hate money\' team'
version = '1.0'
release = '1.0'
exclude_patterns = ['_build']
pygments_style = 'sphinx'
sys.path.append(os.path.abspath('_themes'))
html_theme_path = ['_themes']
html_theme = 'pelican'
html_static_path = ['_static']
html_theme_options = { 'nosidebar': True }

View file

@ -1 +0,0 @@
../README.rst

View file

@ -1,170 +0,0 @@
@ECHO OFF
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set BUILDDIR=_build
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
if NOT "%PAPER%" == "" (
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
)
if "%1" == "" goto help
if "%1" == "help" (
:help
echo.Please use `make ^<target^>` where ^<target^> is one of
echo. html to make standalone HTML files
echo. dirhtml to make HTML files named index.html in directories
echo. singlehtml to make a single large HTML file
echo. pickle to make pickle files
echo. json to make JSON files
echo. htmlhelp to make HTML files and a HTML help project
echo. qthelp to make HTML files and a qthelp project
echo. devhelp to make HTML files and a Devhelp project
echo. epub to make an epub
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
echo. text to make text files
echo. man to make manual pages
echo. changes to make an overview over all changed/added/deprecated items
echo. linkcheck to check all external links for integrity
echo. doctest to run all doctests embedded in the documentation if enabled
goto end
)
if "%1" == "clean" (
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
del /q /s %BUILDDIR%\*
goto end
)
if "%1" == "html" (
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
goto end
)
if "%1" == "dirhtml" (
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
goto end
)
if "%1" == "singlehtml" (
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
goto end
)
if "%1" == "pickle" (
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can process the pickle files.
goto end
)
if "%1" == "json" (
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can process the JSON files.
goto end
)
if "%1" == "htmlhelp" (
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can run HTML Help Workshop with the ^
.hhp project file in %BUILDDIR%/htmlhelp.
goto end
)
if "%1" == "qthelp" (
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %BUILDDIR%/qthelp, like this:
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Ihatemoney.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Ihatemoney.ghc
goto end
)
if "%1" == "devhelp" (
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished.
goto end
)
if "%1" == "epub" (
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The epub file is in %BUILDDIR%/epub.
goto end
)
if "%1" == "latex" (
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
if errorlevel 1 exit /b 1
echo.
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
goto end
)
if "%1" == "text" (
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The text files are in %BUILDDIR%/text.
goto end
)
if "%1" == "man" (
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The manual pages are in %BUILDDIR%/man.
goto end
)
if "%1" == "changes" (
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
if errorlevel 1 exit /b 1
echo.
echo.The overview file is in %BUILDDIR%/changes.
goto end
)
if "%1" == "linkcheck" (
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
if errorlevel 1 exit /b 1
echo.
echo.Link check complete; look for any errors in the above output ^
or in %BUILDDIR%/linkcheck/output.txt.
goto end
)
if "%1" == "doctest" (
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
if errorlevel 1 exit /b 1
echo.
echo.Testing of doctests in the sources finished, look at the ^
results in %BUILDDIR%/doctest/output.txt.
goto end
)
:end

13
sources/fabfile.py vendored
View file

@ -1,13 +0,0 @@
from fabric.api import env, cd, sudo, run
env.hosts = ['sites.lolnet.lan']
def deploy():
with cd('/home//www/ihatemoney.org/code'):
sudo('git pull', user="www-data")
sudo('supervisorctl restart ihatemoney.org')
def whoami():
run('/usr/bin/whoami')