diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8740838..fc3bd4b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,3 @@ repos: rev: 22.12.0 hooks: - id: black - - repo: https://github.com/hadialqattan/pycln - rev: 'v2.3.0' - hooks: - - id: pycln diff --git a/502.html b/502.html index a65c3cd..98f4dbb 100644 --- a/502.html +++ b/502.html @@ -49,7 +49,7 @@
diff --git a/README.md b/README.md index 81fe6e5..7087452 100644 --- a/README.md +++ b/README.md @@ -31,197 +31,6 @@ Support plagiarism detection via [Stanford MOSS](https://theory.stanford.edu/~ai Most of the setup are the same as DMOJ installations. You can view the installation guide of DMOJ here: https://docs.dmoj.ca/#/site/installation. There is one minor change: Instead of `git clone https://github.com/DMOJ/site.git`, you clone this repo `git clone https://github.com/LQDJudge/online-judge.git`. - -- Bước 1: cài các thư viện cần thiết - - $ ở đây nghĩa là sudo. Ví dụ dòng đầu nghĩa là chạy lệnh `sudo apt update` - -```jsx -$ apt update -$ apt install git gcc g++ make python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev gettext curl redis-server -$ curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - -$ apt install nodejs -$ npm install -g sass postcss-cli postcss autoprefixer -``` - -- Bước 2: tạo DB - - Server đang dùng MariaDB ≥ 10.5, các bạn cũng có thể dùng Mysql nếu bị conflict - - Nếu các bạn chạy lệnh dưới này xong mà version mariadb bị cũ (< 10.5) thì có thể tra google cách cài MariaDB mới nhất (10.5 hoặc 10.6). - - Các bạn có thể thấy version MariaDB bằng cách gõ lệnh `sudo mysql` (Ctrl + C để quit) - -```jsx -$ apt update -$ apt install mariadb-server libmysqlclient-dev -``` - -- Bước 3: tạo table trong DB - - Các bạn có thể thay tên table và password - -```jsx -$ sudo mysql -mariadb> CREATE DATABASE dmoj DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -mariadb> GRANT ALL PRIVILEGES ON dmoj.* TO 'dmoj'@'localhost' IDENTIFIED BY ''; -mariadb> exit -``` - -- Bước 4: Cài đặt môi trường ảo (virtual env) và pull code - - Nếu `pip3 install mysqlclient` bị lỗi thì thử chạy `pip3 install mysqlclient==2.1.1` - -```jsx -$ python3 -m venv dmojsite -$ . dmojsite/bin/activate - -(dmojsite) $ git clone https://github.com/LQDJudge/online-judge.git -(dmojsite) $ cd online-judge -(dmojsite) $ git submodule init -(dmojsite) $ git submodule update -(dmojsite) $ pip3 install -r requirements.txt -(dmojsite) $ pip3 install mysqlclient -(dmojsite) $ pre-commit install -``` - -- Bước 5: tạo local_settings.py. Đây là file để custom setting cho Django. Các bạn tạo file vào `online-judge/dmoj/local_settings.py` - - File mẫu: https://github.com/DMOJ/docs/blob/master/sample_files/local_settings.py - - Nếu bạn đổi tên hoặc mật khẩu table databases thì thay đổi thông tin tương ứng trong `Databases` - - Sau khi xong, chạy lệnh `(dmojsite) $ python3 manage.py check` để kiểm tra -- Bước 6: Compile CSS và translation - - Giải thích: - - Lệnh 1 và 2 gọi sau mỗi lần thay đổi 1 file css hoặc file js (file html thì không cần) - - Lệnh 3 và 4 gọi sau mỗi lần thay đổi file dịch - - Note: Sau khi chạy lệnh này, folder tương ứng với STATIC_ROOT trong local_settings phải được tạo. Nếu chưa được tạo thì mình cần tạo folder đó trước khi chạy 2 lệnh đầu. - -```jsx -(dmojsite) $ ./make_style.sh -(dmojsite) $ python3 manage.py collectstatic -(dmojsite) $ python3 manage.py compilemessages -(dmojsite) $ python3 manage.py compilejsi18n -``` - -- Bước 7: Thêm dữ liệu vào DB - -```jsx -(dmojsite) $ python3 manage.py migrate -(dmojsite) $ python3 manage.py loaddata navbar -(dmojsite) $ python3 manage.py loaddata language_small -(dmojsite) $ python3 manage.py loaddata demo -``` - -- Bước 8: Chạy site. Đến đây thì cơ bản đã hoàn thành (chưa có judge, websocket, celery). Các bạn có thể truy cập tại `localhost:8000` - -```jsx -python3 manage.py runserver 0.0.0.0:8000 -``` - -**Một số lưu ý:** - -1. (WSL) có thể tải ứng dụng Terminal trong Windows Store -2. (WSL) mỗi lần mở ubuntu, các bạn cần chạy lệnh sau để mariadb khởi động: `sudo service mysql restart` (tương tự cho một số service khác như memcached, celery) -3. Sau khi cài đặt, các bạn chỉ cần activate virtual env và chạy lệnh runserver là ok -```jsx -. dmojsite/bin/activate -python3 manage.py runserver -``` -5. Đối với nginx, sau khi config xong theo guide của DMOJ, bạn cần thêm location như sau để sử dụng được tính năng profile image, thay thế `path/to/oj` thành đường dẫn nơi bạn đã clone source code. - -``` -location /profile_images/ { - root /path/to/oj; -} -``` - -6. Quy trình dev: - 1. Sau khi thay đổi code thì django tự build lại, các bạn chỉ cần F5 - 2. Một số style nằm trong các file .scss. Các bạn cần recompile css thì mới thấy được thay đổi. - -**Optional:** - -************Alias:************ Các bạn có thể lưu các alias này để sau này dùng cho nhanh - -- mtrans: để generate translation khi các bạn add một string trong code -- trans: compile translation (sau khi bạn đã dịch tiếng Việt) -- cr: chuyển tới folder OJ -- pr: chạy server -- sm: restart service (chủ yếu dùng cho WSL) -- sd: activate virtual env -- css: compile các file css - -```jsx -alias mtrans='python3 manage.py makemessages -l vi && python3 manage.py makedmojmessages -l vi' -alias pr='python3 manage.py runserver' -alias sd='source ~/LQDOJ/dmojsite/bin/activate' -alias sm='sudo service mysql restart && sudo service redis-server start && sudo service memcached start' -alias trans='python3 manage.py compilemessages -l vi && python3 manage.py compilejsi18n -l vi' -alias cr='cd ~/LQDOJ/online-judge' -alias css='./make_style.sh && python3 manage.py collectstatic --noinput' -``` - -**Memcached:** dùng cho in-memory cache - -```jsx -$ sudo apt install memcached -``` - -**Websocket:** dùng để live update (như chat) - -- Tạo file online-judge/websocket/config.js - -```jsx -module.exports = { - get_host: '127.0.0.1', - get_port: 15100, - post_host: '127.0.0.1', - post_port: 15101, - http_host: '127.0.0.1', - http_port: 15102, - long_poll_timeout: 29000, -}; -``` - -- Cài các thư viện - -```jsx -(dmojsite) $ npm install qu ws simplesets -(dmojsite) $ pip3 install websocket-client -``` - -- Khởi động (trong 1 tab riêng) - -```jsx -(dmojsite) $ node websocket/daemon.js -``` - -**************Celery:************** (dùng cho một số task như batch rejudge_ - -```jsx -celery -A dmoj_celery worker -``` - -**************Judge:************** - -- Cài đặt ở 1 folder riêng bên ngoài site: - -```jsx -$ apt install python3-dev python3-pip build-essential libseccomp-dev -$ git clone https://github.com/LQDJudge/judge-server.git -$ cd judge-server -$ sudo pip3 install -e . -``` - -- Tạo một file judge.yml ở bên ngoài folder judge-server (file mẫu https://github.com/DMOJ/docs/blob/master/sample_files/judge_conf.yml) -- Thêm judge vào site bằng UI: Admin → Judge → Thêm Judge → nhập id và key (chỉ cần thêm 1 lần) hoặc dùng lệnh `(dmojsite) $ python3 managed.py addjudge `. -- Chạy Bridge (cầu nối giữa judge và site) trong 1 tab riêng trong folder online-judge: - -```jsx -(dmojsite) $ python3 managed.py runbridged -``` - -- Khởi động Judge (trong 1 tab riêng): - -```jsx -$ dmoj -c judge.yml localhost -``` - -- Lưu ý: mỗi lần sau này muốn chạy judge thì mở 1 tab cho bridge và n tab cho judge. Mỗi judge cần 1 file yml khác nhau (chứa authentication khác nhau) - ### Some frequent difficulties when installation: 1. Missing the `local_settings.py`. You need to copy the `local_settings.py` in order to pass the check. diff --git a/chat_box/apps.py b/chat_box/apps.py index e49c8ad..dd90bc1 100644 --- a/chat_box/apps.py +++ b/chat_box/apps.py @@ -3,6 +3,3 @@ from django.apps import AppConfig class ChatBoxConfig(AppConfig): name = "chat_box" - - def ready(self): - from . import models diff --git a/chat_box/migrations/0011_alter_message_hidden.py b/chat_box/migrations/0011_alter_message_hidden.py deleted file mode 100644 index 1393e82..0000000 --- a/chat_box/migrations/0011_alter_message_hidden.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.18 on 2023-02-18 21:10 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("chat_box", "0010_auto_20221028_0300"), - ] - - operations = [ - migrations.AlterField( - model_name="message", - name="hidden", - field=models.BooleanField( - db_index=True, default=False, verbose_name="is hidden" - ), - ), - ] diff --git a/chat_box/migrations/0012_auto_20230308_1417.py b/chat_box/migrations/0012_auto_20230308_1417.py deleted file mode 100644 index bd3ec5a..0000000 --- a/chat_box/migrations/0012_auto_20230308_1417.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 3.2.18 on 2023-03-08 07:17 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0154_add_submission_indexes"), - ("chat_box", "0011_alter_message_hidden"), - ] - - operations = [ - migrations.AlterModelOptions( - name="message", - options={ - "ordering": ("-id",), - "verbose_name": "message", - "verbose_name_plural": "messages", - }, - ), - migrations.AlterField( - model_name="message", - name="hidden", - field=models.BooleanField(default=False, verbose_name="is hidden"), - ), - migrations.AddIndex( - model_name="message", - index=models.Index( - fields=["hidden", "room", "-id"], name="chat_box_me_hidden_b2307a_idx" - ), - ), - ] diff --git a/chat_box/migrations/0013_alter_message_time.py b/chat_box/migrations/0013_alter_message_time.py deleted file mode 100644 index 0f4ddc3..0000000 --- a/chat_box/migrations/0013_alter_message_time.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-28 01:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("chat_box", "0012_auto_20230308_1417"), - ] - - operations = [ - migrations.AlterField( - model_name="message", - name="time", - field=models.DateTimeField( - auto_now_add=True, db_index=True, verbose_name="posted time" - ), - ), - ] diff --git a/chat_box/migrations/0014_userroom_unread_count.py b/chat_box/migrations/0014_userroom_unread_count.py deleted file mode 100644 index 8f407b3..0000000 --- a/chat_box/migrations/0014_userroom_unread_count.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-28 06:02 - -from django.db import migrations, models - - -def migrate(apps, schema_editor): - UserRoom = apps.get_model("chat_box", "UserRoom") - Message = apps.get_model("chat_box", "Message") - - for ur in UserRoom.objects.all(): - if not ur.room: - continue - messages = ur.room.message_set - last_msg = messages.first() - try: - if last_msg and last_msg.author != ur.user: - ur.unread_count = messages.filter(time__gte=ur.last_seen).count() - else: - ur.unread_count = 0 - ur.save() - except: - continue - - -class Migration(migrations.Migration): - - dependencies = [ - ("chat_box", "0013_alter_message_time"), - ] - - operations = [ - migrations.AddField( - model_name="userroom", - name="unread_count", - field=models.IntegerField(db_index=True, default=0), - ), - migrations.RunPython(migrate, migrations.RunPython.noop, atomic=True), - ] diff --git a/chat_box/migrations/0015_room_last_msg_time.py b/chat_box/migrations/0015_room_last_msg_time.py deleted file mode 100644 index a32f21b..0000000 --- a/chat_box/migrations/0015_room_last_msg_time.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.18 on 2023-11-02 01:41 - -from django.db import migrations, models - - -def migrate(apps, schema_editor): - Room = apps.get_model("chat_box", "Room") - Message = apps.get_model("chat_box", "Message") - - for room in Room.objects.all(): - messages = room.message_set - last_msg = messages.first() - if last_msg: - room.last_msg_time = last_msg.time - room.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("chat_box", "0014_userroom_unread_count"), - ] - - operations = [ - migrations.AddField( - model_name="room", - name="last_msg_time", - field=models.DateTimeField( - db_index=True, null=True, verbose_name="last seen" - ), - ), - migrations.RunPython(migrate, migrations.RunPython.noop, atomic=True), - ] diff --git a/chat_box/migrations/0016_alter_room_unique_together.py b/chat_box/migrations/0016_alter_room_unique_together.py deleted file mode 100644 index 14b784a..0000000 --- a/chat_box/migrations/0016_alter_room_unique_together.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.18 on 2024-08-22 03:12 - -from django.db import migrations, models - - -def remove_duplicates(apps, schema_editor): - Room = apps.get_model("chat_box", "Room") - seen = set() - - for room in Room.objects.all(): - pair = (room.user_one_id, room.user_two_id) - reverse_pair = (room.user_two_id, room.user_one_id) - - if pair in seen or reverse_pair in seen: - room.delete() - else: - seen.add(pair) - - -class Migration(migrations.Migration): - - dependencies = [ - ("chat_box", "0015_room_last_msg_time"), - ] - - operations = [ - migrations.RunPython(remove_duplicates), - migrations.AlterUniqueTogether( - name="room", - unique_together={("user_one", "user_two")}, - ), - ] diff --git a/chat_box/models.py b/chat_box/models.py index 6d86125..328e4c6 100644 --- a/chat_box/models.py +++ b/chat_box/models.py @@ -1,11 +1,9 @@ from django.db import models -from django.db.models import CASCADE, Q +from django.db.models import CASCADE from django.utils.translation import gettext_lazy as _ -from django.utils.functional import cached_property from judge.models.profile import Profile -from judge.caching import cache_wrapper __all__ = ["Message", "Room", "UserRoom", "Ignore"] @@ -18,44 +16,20 @@ class Room(models.Model): user_two = models.ForeignKey( Profile, related_name="user_two", verbose_name="user 2", on_delete=CASCADE ) - last_msg_time = models.DateTimeField( - verbose_name=_("last seen"), null=True, db_index=True - ) - - class Meta: - app_label = "chat_box" - unique_together = ("user_one", "user_two") - - @cached_property - def _cached_info(self): - return get_room_info(self.id) def contain(self, profile): - return profile.id in [self.user_one_id, self.user_two_id] + return self.user_one == profile or self.user_two == profile def other_user(self, profile): return self.user_one if profile == self.user_two else self.user_two - def other_user_id(self, profile): - user_ids = [self.user_one_id, self.user_two_id] - return sum(user_ids) - profile.id - def users(self): return [self.user_one, self.user_two] - def last_message_body(self): - return self._cached_info["last_message"] - - @classmethod - def prefetch_room_cache(self, room_ids): - get_room_info.prefetch_multi([(i,) for i in room_ids]) - class Message(models.Model): author = models.ForeignKey(Profile, verbose_name=_("user"), on_delete=CASCADE) - time = models.DateTimeField( - verbose_name=_("posted time"), auto_now_add=True, db_index=True - ) + time = models.DateTimeField(verbose_name=_("posted time"), auto_now_add=True) body = models.TextField(verbose_name=_("body of comment"), max_length=8192) hidden = models.BooleanField(verbose_name="is hidden", default=False) room = models.ForeignKey( @@ -63,17 +37,14 @@ class Message(models.Model): ) def save(self, *args, **kwargs): + new_message = self.id self.body = self.body.strip() super(Message, self).save(*args, **kwargs) class Meta: verbose_name = "message" verbose_name_plural = "messages" - ordering = ("-id",) - indexes = [ - models.Index(fields=["hidden", "room", "-id"]), - ] - app_label = "chat_box" + ordering = ("-time",) class UserRoom(models.Model): @@ -82,11 +53,9 @@ class UserRoom(models.Model): Room, verbose_name="room id", on_delete=CASCADE, default=None, null=True ) last_seen = models.DateTimeField(verbose_name=_("last seen"), auto_now_add=True) - unread_count = models.IntegerField(default=0, db_index=True) class Meta: unique_together = ("user", "room") - app_label = "chat_box" class Ignore(models.Model): @@ -99,15 +68,14 @@ class Ignore(models.Model): ) ignored_users = models.ManyToManyField(Profile) - class Meta: - app_label = "chat_box" - @classmethod def is_ignored(self, current_user, new_friend): try: - return current_user.ignored_chat_users.ignored_users.filter( - id=new_friend.id - ).exists() + return ( + current_user.ignored_chat_users.get() + .ignored_users.filter(id=new_friend.id) + .exists() + ) except: return False @@ -118,16 +86,6 @@ class Ignore(models.Model): except: return Profile.objects.none() - @classmethod - def get_ignored_rooms(self, user): - try: - ignored_users = self.objects.get(user=user).ignored_users.all() - return Room.objects.filter(Q(user_one=user) | Q(user_two=user)).filter( - Q(user_one__in=ignored_users) | Q(user_two__in=ignored_users) - ) - except: - return Room.objects.none() - @classmethod def add_ignore(self, current_user, friend): ignore, created = self.objects.get_or_create(user=current_user) @@ -144,11 +102,3 @@ class Ignore(models.Model): self.remove_ignore(current_user, friend) else: self.add_ignore(current_user, friend) - - -@cache_wrapper(prefix="Rinfo") -def get_room_info(room_id): - last_msg = Message.objects.filter(room_id=room_id).first() - return { - "last_message": last_msg.body if last_msg else None, - } diff --git a/chat_box/utils.py b/chat_box/utils.py index f3f27b4..e25e861 100644 --- a/chat_box/utils.py +++ b/chat_box/utils.py @@ -1,14 +1,10 @@ from cryptography.fernet import Fernet -import hmac -import hashlib from django.conf import settings -from django.db.models import OuterRef, Count, Subquery, IntegerField, Q +from django.db.models import OuterRef, Count, Subquery, IntegerField from django.db.models.functions import Coalesce -from chat_box.models import Ignore, Message, UserRoom, Room - -from judge.caching import cache_wrapper +from chat_box.models import Ignore, Message, UserRoom secret_key = settings.CHAT_SECRET_KEY fernet = Fernet(secret_key) @@ -28,23 +24,25 @@ def decrypt_url(message_encrypted): return None, None -def encrypt_channel(channel): - return ( - hmac.new( - settings.CHAT_SECRET_KEY.encode(), - channel.encode(), - hashlib.sha512, - ).hexdigest()[:16] - + "%s" % channel +def get_unread_boxes(profile): + ignored_users = Ignore.get_ignored_users(profile) + + mess = ( + Message.objects.filter(room=OuterRef("room"), time__gte=OuterRef("last_seen")) + .exclude(author=profile) + .exclude(author__in=ignored_users) + .order_by() + .values("room") + .annotate(unread_count=Count("pk")) + .values("unread_count") ) - -@cache_wrapper(prefix="gub") -def get_unread_boxes(profile): - ignored_rooms = Ignore.get_ignored_rooms(profile) unread_boxes = ( - UserRoom.objects.filter(user=profile, unread_count__gt=0) - .exclude(room__in=ignored_rooms) + UserRoom.objects.filter(user=profile, room__isnull=False) + .annotate( + unread_count=Coalesce(Subquery(mess, output_field=IntegerField()), 0), + ) + .filter(unread_count__gte=1) .count() ) diff --git a/chat_box/views.py b/chat_box/views.py index e3d1646..34b82bb 100644 --- a/chat_box/views.py +++ b/chat_box/views.py @@ -21,23 +21,22 @@ from django.db.models import ( Exists, Count, IntegerField, - F, - Max, ) from django.db.models.functions import Coalesce from django.utils import timezone from django.contrib.auth.decorators import login_required from django.urls import reverse +import datetime from judge import event_poster as event from judge.jinja2.gravatar import gravatar from judge.models import Friend -from chat_box.models import Message, Profile, Room, UserRoom, Ignore, get_room_info -from chat_box.utils import encrypt_url, decrypt_url, encrypt_channel, get_unread_boxes +from chat_box.models import Message, Profile, Room, UserRoom, Ignore +from chat_box.utils import encrypt_url, decrypt_url -from reversion import revisions +import json class ChatView(ListView): @@ -49,29 +48,16 @@ class ChatView(ListView): super().__init__() self.room_id = None self.room = None + self.paginate_by = 50 self.messages = None - self.first_page_size = 20 # only for first request - self.follow_up_page_size = 50 + self.paginator = None def get_queryset(self): return self.messages - def has_next(self): - try: - msg = Message.objects.filter(room=self.room_id).earliest("id") - except Exception as e: - return False - return msg not in self.messages - def get(self, request, *args, **kwargs): request_room = kwargs["room_id"] - page_size = self.follow_up_page_size - try: - last_id = int(request.GET.get("last_id")) - except Exception: - last_id = 1e15 - page_size = self.first_page_size - only_messages = request.GET.get("only_messages") + page = request.GET.get("page") if request_room: try: @@ -83,21 +69,23 @@ class ChatView(ListView): else: request_room = None - self.room_id = request_room - self.messages = ( - Message.objects.filter(hidden=False, room=self.room_id, id__lt=last_id) - .select_related("author") - .only("body", "time", "author__rating", "author__display_rank")[:page_size] - ) - if not only_messages: + if request_room != self.room_id or not self.messages: + self.room_id = request_room + self.messages = Message.objects.filter(hidden=False, room=self.room_id) + self.paginator = Paginator(self.messages, self.paginate_by) + + if page == None: + update_last_seen(request, **kwargs) return super().get(request, *args, **kwargs) + cur_page = self.paginator.get_page(page) + return render( request, "chat/message_list.html", { - "object_list": self.messages, - "has_next": self.has_next(), + "object_list": cur_page.object_list, + "num_pages": self.paginator.num_pages, }, ) @@ -106,14 +94,9 @@ class ChatView(ListView): context["title"] = self.title context["last_msg"] = event.last() - context["status_sections"] = get_status_context(self.request.profile) + context["status_sections"] = get_status_context(self.request) context["room"] = self.room_id - context["has_next"] = self.has_next() context["unread_count_lobby"] = get_unread_count(None, self.request.profile) - context["chat_channel"] = encrypt_channel( - "chat_" + str(self.request.profile.id) - ) - context["chat_lobby_channel"] = encrypt_channel("chat_lobby") if self.room: users_room = [self.room.user_one, self.room.user_two] users_room.remove(self.request.profile) @@ -137,89 +120,36 @@ def delete_message(request): ret = {"delete": "done"} if request.method == "GET": - return HttpResponseBadRequest() + return JsonResponse(ret) - try: - messid = int(request.POST.get("message")) - mess = Message.objects.get(id=messid) - except: - return HttpResponseBadRequest() + if request.user.is_staff: + try: + messid = int(request.POST.get("message")) + mess = Message.objects.get(id=messid) + except: + return HttpResponseBadRequest() - if not request.user.is_staff and request.profile != mess.author: - return HttpResponseBadRequest() + mess.hidden = True + mess.save() - mess.hidden = True - mess.save() + return JsonResponse(ret) return JsonResponse(ret) -def mute_message(request): - ret = {"mute": "done"} - - if request.method == "GET": - return HttpResponseBadRequest() - - if not request.user.is_staff: - return HttpResponseBadRequest() - - try: - messid = int(request.POST.get("message")) - mess = Message.objects.get(id=messid) - except: - return HttpResponseBadRequest() - - with revisions.create_revision(): - revisions.set_comment(_("Mute chat") + ": " + mess.body) - revisions.set_user(request.user) - mess.author.mute = True - mess.author.save() - - Message.objects.filter(room=None, author=mess.author).update(hidden=True) - - return JsonResponse(ret) - - -def check_valid_message(request, room): - if not room and len(request.POST["body"]) > 200: - return False - - if not can_access_room(request, room) or request.profile.mute: - return False - - last_msg = Message.objects.filter(room=room).first() - if ( - last_msg - and last_msg.author == request.profile - and last_msg.body == request.POST["body"].strip() - ): - return False - - if not room: - four_last_msg = Message.objects.filter(room=room).order_by("-id")[:4] - if len(four_last_msg) >= 4: - same_author = all(msg.author == request.profile for msg in four_last_msg) - time_diff = timezone.now() - four_last_msg[3].time - if same_author and time_diff.total_seconds() < 300: - return False - - return True - - @login_required def post_message(request): ret = {"msg": "posted"} - if request.method != "POST": return HttpResponseBadRequest() - if len(request.POST["body"]) > 5000 or len(request.POST["body"].strip()) == 0: + if len(request.POST["body"]) > 5000: return HttpResponseBadRequest() room = None if request.POST["room"]: room = Room.objects.get(id=request.POST["room"]) - if not check_valid_message(request, room): + if not can_access_room(request, room) or request.profile.mute: return HttpResponseBadRequest() new_message = Message(author=request.profile, body=request.POST["body"], room=room) @@ -227,7 +157,7 @@ def post_message(request): if not room: event.post( - encrypt_channel("chat_lobby"), + "chat_lobby", { "type": "lobby", "author_id": request.profile.id, @@ -237,13 +167,9 @@ def post_message(request): }, ) else: - get_room_info.dirty(room.id) - room.last_msg_time = new_message.time - room.save() - for user in room.users(): event.post( - encrypt_channel("chat_" + str(user.id)), + "chat_" + str(user.id), { "type": "private", "author_id": request.profile.id, @@ -252,17 +178,14 @@ def post_message(request): "tmp_id": request.POST.get("tmp_id"), }, ) - if user != request.profile: - UserRoom.objects.filter(user=user, room=room).update( - unread_count=F("unread_count") + 1 - ) - get_unread_boxes.dirty(user) return JsonResponse(ret) def can_access_room(request, room): - return not room or room.contain(request.profile) + return ( + not room or room.user_one == request.profile or room.user_two == request.profile + ) @login_required @@ -278,7 +201,7 @@ def chat_message_ajax(request): try: message = Message.objects.filter(hidden=False).get(id=message_id) room = message.room - if not can_access_room(request, room): + if room and not room.contain(request.profile): return HttpResponse("Unauthorized", status=401) except Message.DoesNotExist: return HttpResponseBadRequest() @@ -301,35 +224,35 @@ def update_last_seen(request, **kwargs): room_id = request.POST.get("room") else: return HttpResponseBadRequest() + try: profile = request.profile room = None if room_id: - room = Room.objects.filter(id=int(room_id)).first() + room = Room.objects.get(id=int(room_id)) except Room.DoesNotExist: return HttpResponseBadRequest() + except Exception as e: + return HttpResponseBadRequest() - if not can_access_room(request, room): + if room and not room.contain(profile): return HttpResponseBadRequest() user_room, _ = UserRoom.objects.get_or_create(user=profile, room=room) user_room.last_seen = timezone.now() - user_room.unread_count = 0 user_room.save() - get_unread_boxes.dirty(profile) - return JsonResponse({"msg": "updated"}) def get_online_count(): - last_5_minutes = timezone.now() - timezone.timedelta(minutes=5) - return Profile.objects.filter(last_access__gte=last_5_minutes).count() + last_two_minutes = timezone.now() - timezone.timedelta(minutes=2) + return Profile.objects.filter(last_access__gte=last_two_minutes).count() def get_user_online_status(user): time_diff = timezone.now() - user.last_access - is_online = time_diff <= timezone.timedelta(minutes=5) + is_online = time_diff <= timezone.timedelta(minutes=2) return is_online @@ -366,66 +289,47 @@ def user_online_status_ajax(request): ) -def get_online_status(profile, other_profile_ids, rooms=None): - if not other_profile_ids: +def get_online_status(request_user, queryset, rooms=None): + if not queryset: return None - Profile.prefetch_profile_cache(other_profile_ids) - - joined_ids = ",".join([str(id) for id in other_profile_ids]) - other_profiles = Profile.objects.raw( - f"SELECT * from judge_profile where id in ({joined_ids}) order by field(id,{joined_ids})" - ) - last_5_minutes = timezone.now() - timezone.timedelta(minutes=5) + last_two_minutes = timezone.now() - timezone.timedelta(minutes=2) ret = [] - if rooms: - unread_count = get_unread_count(rooms, profile) - count = {} - last_msg = {} - room_of_user = {} - for i in unread_count: - room = Room.objects.get(id=i["room"]) - other_profile = room.other_user(profile) - count[other_profile.id] = i["unread_count"] - rooms = Room.objects.filter(id__in=rooms) - for room in rooms: - other_profile_id = room.other_user_id(profile) - last_msg[other_profile_id] = room.last_message_body() - room_of_user[other_profile_id] = room.id - for other_profile in other_profiles: + if rooms: + unread_count = get_unread_count(rooms, request_user) + count = {} + for i in unread_count: + count[i["other_user"]] = i["unread_count"] + + for user in queryset: is_online = False - if other_profile.last_access >= last_5_minutes: + if user.last_access >= last_two_minutes: is_online = True - user_dict = {"user": other_profile, "is_online": is_online} - if rooms: - user_dict.update( - { - "unread_count": count.get(other_profile.id), - "last_msg": last_msg.get(other_profile.id), - "room": room_of_user.get(other_profile.id), - } - ) - user_dict["url"] = encrypt_url(profile.id, other_profile.id) + user_dict = {"user": user, "is_online": is_online} + if rooms and user.id in count: + user_dict["unread_count"] = count[user.id] + user_dict["url"] = encrypt_url(request_user.id, user.id) ret.append(user_dict) return ret -def get_status_context(profile, include_ignored=False): +def get_status_context(request, include_ignored=False): if include_ignored: - ignored_users = [] + ignored_users = Profile.objects.none() queryset = Profile.objects else: - ignored_users = list( - Ignore.get_ignored_users(profile).values_list("id", flat=True) - ) + ignored_users = Ignore.get_ignored_users(request.profile) queryset = Profile.objects.exclude(id__in=ignored_users) - last_5_minutes = timezone.now() - timezone.timedelta(minutes=5) + last_two_minutes = timezone.now() - timezone.timedelta(minutes=2) recent_profile = ( - Room.objects.filter(Q(user_one=profile) | Q(user_two=profile)) + Room.objects.filter(Q(user_one=request.profile) | Q(user_two=request.profile)) .annotate( + last_msg_time=Subquery( + Message.objects.filter(room=OuterRef("pk")).values("time")[:1] + ), other_user=Case( - When(user_one=profile, then="user_two"), + When(user_one=request.profile, then="user_two"), default="user_one", ), ) @@ -435,24 +339,50 @@ def get_status_context(profile, include_ignored=False): .values("other_user", "id")[:20] ) - recent_profile_ids = [str(i["other_user"]) for i in recent_profile] + recent_profile_id = [str(i["other_user"]) for i in recent_profile] + joined_id = ",".join(recent_profile_id) recent_rooms = [int(i["id"]) for i in recent_profile] - Room.prefetch_room_cache(recent_rooms) - + recent_list = None + if joined_id: + recent_list = Profile.objects.raw( + f"SELECT * from judge_profile where id in ({joined_id}) order by field(id,{joined_id})" + ) + friend_list = ( + Friend.get_friend_profiles(request.profile) + .exclude(id__in=recent_profile_id) + .exclude(id__in=ignored_users) + .order_by("-last_access") + ) admin_list = ( queryset.filter(display_rank="admin") - .exclude(id__in=recent_profile_ids) - .values_list("id", flat=True) + .exclude(id__in=friend_list) + .exclude(id__in=recent_profile_id) + ) + all_user_status = ( + queryset.filter(display_rank="user", last_access__gte=last_two_minutes) + .annotate(is_online=Case(default=True, output_field=BooleanField())) + .order_by("-rating") + .exclude(id__in=friend_list) + .exclude(id__in=admin_list) + .exclude(id__in=recent_profile_id)[:30] ) return [ { - "title": _("Recent"), - "user_list": get_online_status(profile, recent_profile_ids, recent_rooms), + "title": "Recent", + "user_list": get_online_status(request.profile, recent_list, recent_rooms), }, { - "title": _("Admin"), - "user_list": get_online_status(profile, admin_list), + "title": "Following", + "user_list": get_online_status(request.profile, friend_list), + }, + { + "title": "Admin", + "user_list": get_online_status(request.profile, admin_list), + }, + { + "title": "Other", + "user_list": get_online_status(request.profile, all_user_status), }, ] @@ -463,7 +393,7 @@ def online_status_ajax(request): request, "chat/online_status.html", { - "status_sections": get_status_context(request.profile), + "status_sections": get_status_context(request), "unread_count_lobby": get_unread_count(None, request.profile), }, ) @@ -487,6 +417,7 @@ def get_or_create_room(request): return HttpResponseBadRequest() request_id, other_id = decrypt_url(decrypted_other_id) + if not other_id or not request_id or request_id != request.profile.id: return HttpResponseBadRequest() @@ -507,36 +438,55 @@ def get_or_create_room(request): user_room.last_seen = timezone.now() user_room.save() - room_url = reverse("chat", kwargs={"room_id": room.id}) if request.method == "GET": - return JsonResponse( - { - "room": room.id, - "other_user_id": other_user.id, - "url": room_url, - } - ) - return HttpResponseRedirect(room_url) + return JsonResponse({"room": room.id, "other_user_id": other_user.id}) + return HttpResponseRedirect(reverse("chat", kwargs={"room_id": room.id})) def get_unread_count(rooms, user): if rooms: - return UserRoom.objects.filter( - user=user, room__in=rooms, unread_count__gt=0 - ).values("unread_count", "room") - else: # lobby - user_room = UserRoom.objects.filter(user=user, room__isnull=True).first() - if not user_room: - return 0 - last_seen = user_room.last_seen - res = ( - Message.objects.filter(room__isnull=True, time__gte=last_seen) + mess = ( + Message.objects.filter( + room=OuterRef("room"), time__gte=OuterRef("last_seen") + ) .exclude(author=user) - .exclude(hidden=True) - .count() + .order_by() + .values("room") + .annotate(unread_count=Count("pk")) + .values("unread_count") ) - return res + return ( + UserRoom.objects.filter(user=user, room__in=rooms) + .annotate( + unread_count=Coalesce(Subquery(mess, output_field=IntegerField()), 0), + other_user=Case( + When(room__user_one=user, then="room__user_two"), + default="room__user_one", + ), + ) + .filter(unread_count__gte=1) + .values("other_user", "unread_count") + ) + else: # lobby + mess = ( + Message.objects.filter(room__isnull=True, time__gte=OuterRef("last_seen")) + .exclude(author=user) + .order_by() + .values("room") + .annotate(unread_count=Count("pk")) + .values("unread_count") + ) + + res = ( + UserRoom.objects.filter(user=user, room__isnull=True) + .annotate( + unread_count=Coalesce(Subquery(mess, output_field=IntegerField()), 0), + ) + .values_list("unread_count", flat=True) + ) + + return res[0] if len(res) else 0 @login_required diff --git a/django_ace/static/django_ace/widget.js b/django_ace/static/django_ace/widget.js index d5226dd..8980ed7 100644 --- a/django_ace/static/django_ace/widget.js +++ b/django_ace/static/django_ace/widget.js @@ -162,7 +162,7 @@ ]); window[widget.id] = editor; - setTimeout(() => $(widget).trigger('ace_load', [editor]), 100); + $(widget).trigger('ace_load', [editor]); } function init() { diff --git a/django_ace/widgets.py b/django_ace/widgets.py index 659ec75..ec4df40 100644 --- a/django_ace/widgets.py +++ b/django_ace/widgets.py @@ -66,7 +66,7 @@ class AceWidget(forms.Textarea): if self.toolbar: toolbar = ( '
' - '' + '' "
" ).format(self.width) html = toolbar + html diff --git a/dmoj/settings.py b/dmoj/settings.py index 2867a2a..b445574 100644 --- a/dmoj/settings.py +++ b/dmoj/settings.py @@ -33,7 +33,6 @@ SITE_ID = 1 SITE_NAME = "LQDOJ" SITE_LONG_NAME = "LQDOJ: Le Quy Don Online Judge" SITE_ADMIN_EMAIL = False -SITE_DOMAIN = "lqdoj.edu.vn" DMOJ_REQUIRE_STAFF_2FA = True @@ -61,7 +60,6 @@ DMOJ_PROBLEM_MAX_TIME_LIMIT = 60 # seconds DMOJ_PROBLEM_MIN_MEMORY_LIMIT = 0 # kilobytes DMOJ_PROBLEM_MAX_MEMORY_LIMIT = 1048576 # kilobytes DMOJ_PROBLEM_MIN_PROBLEM_POINTS = 0 -DMOJ_SUBMISSION_ROOT = "/tmp" DMOJ_RATING_COLORS = True DMOJ_EMAIL_THROTTLING = (10, 60) DMOJ_STATS_LANGUAGE_THRESHOLD = 10 @@ -84,9 +82,6 @@ DMOJ_STATS_SUBMISSION_RESULT_COLORS = { "CE": "#42586d", "ERR": "#ffa71c", } -DMOJ_PROFILE_IMAGE_ROOT = "profile_images" -DMOJ_ORGANIZATION_IMAGE_ROOT = "organization_images" -DMOJ_TEST_FORMATTER_ROOT = "test_formatter" MARKDOWN_STYLES = {} MARKDOWN_DEFAULT_STYLE = {} @@ -132,10 +127,13 @@ USE_SELENIUM = False SELENIUM_CUSTOM_CHROME_PATH = None SELENIUM_CHROMEDRIVER_PATH = "chromedriver" +PYGMENT_THEME = "pygment-github.css" INLINE_JQUERY = True INLINE_FONTAWESOME = True JQUERY_JS = "//ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" -FONTAWESOME_CSS = "//cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" +FONTAWESOME_CSS = ( + "//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" +) DMOJ_CANONICAL = "" # Application definition @@ -169,7 +167,7 @@ else: }, { "model": "judge.Submission", - "icon": "fa-check-square", + "icon": "fa-check-square-o", "children": [ "judge.Language", "judge.Judge", @@ -249,7 +247,6 @@ INSTALLED_APPS += ( ) MIDDLEWARE = ( - "judge.middleware.SlowRequestMiddleware", "judge.middleware.ShortCircuitMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.locale.LocaleMiddleware", @@ -277,11 +274,8 @@ LANGUAGE_COOKIE_AGE = 8640000 FORM_RENDERER = "django.forms.renderers.TemplatesSetting" -IMPERSONATE = { - "REQUIRE_SUPERUSER": True, - "DISABLE_LOGGING": True, - "ADMIN_DELETE_PERMISSION": True, -} +IMPERSONATE_REQUIRE_SUPERUSER = True +IMPERSONATE_DISABLE_LOGGING = True ACCOUNT_ACTIVATION_DAYS = 7 @@ -325,6 +319,7 @@ TEMPLATES = [ "judge.template_context.site", "judge.template_context.site_name", "judge.template_context.misc_config", + "judge.template_context.math_setting", "social_django.context_processors.backends", "social_django.context_processors.login_redirect", ], @@ -384,7 +379,6 @@ BRIDGED_JUDGE_ADDRESS = [("localhost", 9999)] BRIDGED_JUDGE_PROXIES = None BRIDGED_DJANGO_ADDRESS = [("localhost", 9998)] BRIDGED_DJANGO_CONNECT = None -BRIDGED_AUTO_CREATE_JUDGE = False # Event Server configuration EVENT_DAEMON_USE = False @@ -432,7 +426,7 @@ AUTHENTICATION_BACKENDS = ( "social_core.backends.google.GoogleOAuth2", "social_core.backends.facebook.FacebookOAuth2", "judge.social_auth.GitHubSecureEmailOAuth2", - "judge.authentication.CustomModelBackend", + "django.contrib.auth.backends.ModelBackend", ) SOCIAL_AUTH_PIPELINE = ( @@ -478,24 +472,10 @@ ML_OUTPUT_PATH = None # Use subdomain for organizations USE_SUBDOMAIN = False -# Chat -CHAT_SECRET_KEY = "QUdVFsxk6f5-Hd8g9BXv81xMqvIZFRqMl-KbRzztW-U=" - -# Nginx -META_REMOTE_ADDRESS_KEY = "REMOTE_ADDR" - -DEFAULT_AUTO_FIELD = "django.db.models.AutoField" - -# Chunk upload -CHUNK_UPLOAD_DIR = "/tmp/chunk_upload_tmp" - -# Rate limit -RL_VOTE = "200/h" -RL_COMMENT = "30/h" - - try: with open(os.path.join(os.path.dirname(__file__), "local_settings.py")) as f: exec(f.read(), globals()) except IOError: pass + +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" diff --git a/dmoj/urls.py b/dmoj/urls.py index 1f077f4..0c8855e 100644 --- a/dmoj/urls.py +++ b/dmoj/urls.py @@ -15,6 +15,14 @@ from django.contrib.auth.decorators import login_required from django.conf.urls.static import static as url_static +from judge.feed import ( + AtomBlogFeed, + AtomCommentFeed, + AtomProblemFeed, + BlogFeed, + CommentFeed, + ProblemFeed, +) from judge.forms import CustomAuthenticationForm from judge.sitemap import ( BlogPostSitemap, @@ -36,8 +44,6 @@ from judge.views import ( language, license, mailgun, - markdown_editor, - test_formatter, notification, organization, preview, @@ -59,13 +65,7 @@ from judge.views import ( internal, resolver, course, - email, - custom_file_upload, ) -from judge import authentication - -from judge.views.test_formatter import test_formatter - from judge.views.problem_data import ( ProblemDataView, ProblemSubmissionDiff, @@ -77,6 +77,7 @@ from judge.views.register import ActivationView, RegistrationView from judge.views.select2 import ( AssigneeSelect2View, ChatUserSearchSelect2View, + CommentSelect2View, ContestSelect2View, ContestUserSearchSelect2View, OrganizationSelect2View, @@ -84,7 +85,6 @@ from judge.views.select2 import ( TicketUserSelect2View, UserSearchSelect2View, UserSelect2View, - ProblemAuthorSearchSelect2View, ) admin.autodiscover() @@ -104,19 +104,19 @@ register_patterns = [ # confusing 404. url( r"^activate/(?P\w+)/$", - ActivationView.as_view(title=_("Activation key invalid")), + ActivationView.as_view(title="Activation key invalid"), name="registration_activate", ), url( r"^register/$", - RegistrationView.as_view(title=_("Register")), + RegistrationView.as_view(title="Register"), name="registration_register", ), url( r"^register/complete/$", TitledTemplateView.as_view( template_name="registration/registration_complete.html", - title=_("Registration Completed"), + title="Registration Completed", ), name="registration_complete", ), @@ -124,7 +124,7 @@ register_patterns = [ r"^register/closed/$", TitledTemplateView.as_view( template_name="registration/registration_closed.html", - title=_("Registration not allowed"), + title="Registration not allowed", ), name="registration_disallowed", ), @@ -141,7 +141,9 @@ register_patterns = [ url(r"^logout/$", user.UserLogoutView.as_view(), name="auth_logout"), url( r"^password/change/$", - authentication.CustomPasswordChangeView.as_view(), + auth_views.PasswordChangeView.as_view( + template_name="registration/password_change_form.html", + ), name="password_change", ), url( @@ -181,17 +183,6 @@ register_patterns = [ ), name="password_reset_done", ), - url(r"^email/change/$", email.email_change_view, name="email_change"), - url( - r"^email/change/verify/(?P[0-9A-Za-z]+)-(?P.+)/$", - email.verify_email_view, - name="email_change_verify", - ), - url( - r"^email/change/pending$", - email.email_change_pending_view, - name="email_change_pending", - ), url(r"^social/error/$", register.social_auth_error, name="social_auth_error"), url(r"^2fa/$", totp.TOTPLoginView.as_view(), name="login_2fa"), url(r"^2fa/enable/$", totp.TOTPEnableView.as_view(), name="enable_2fa"), @@ -240,19 +231,18 @@ urlpatterns = [ url(r"^problems/", paged_list_view(problem.ProblemList, "problem_list")), url(r"^problems/random/$", problem.RandomProblem.as_view(), name="problem_random"), url( - r"^problems/feed/$", - problem.ProblemFeed.as_view(feed_type="for_you"), - name="problem_feed", + r"^problems/feed/", + paged_list_view(problem.ProblemFeed, "problem_feed", feed_type="for_you"), ), url( - r"^problems/feed/new/$", - problem.ProblemFeed.as_view(feed_type="new"), - name="problem_feed_new", + r"^problems/feed/new/", + paged_list_view(problem.ProblemFeed, "problem_feed_new", feed_type="new"), ), url( - r"^problems/feed/volunteer/$", - problem.ProblemFeed.as_view(feed_type="volunteer"), - name="problem_feed_volunteer", + r"^problems/feed/volunteer/", + paged_list_view( + problem.ProblemFeed, "problem_feed_volunteer", feed_type="volunteer" + ), ), url( r"^problem/(?P[^/]+)", @@ -379,10 +369,6 @@ urlpatterns = [ r"^submissions/user/(?P\w+)/", paged_list_view(submission.AllUserSubmissions, "all_user_submissions"), ), - url( - r"^submissions/friends/", - paged_list_view(submission.AllFriendSubmissions, "all_friend_submissions"), - ), url( r"^src/(?P\d+)/raw$", submission.SubmissionSourceRaw.as_view(), @@ -398,41 +384,10 @@ urlpatterns = [ name="submission_status", ), url(r"^/abort$", submission.abort_submission, name="submission_abort"), + url(r"^/html$", submission.single_submission), ] ), ), - url( - r"^test_formatter/", - include( - [ - url( - r"^$", - login_required(test_formatter.TestFormatter.as_view()), - name="test_formatter", - ), - url( - r"^edit_page$", - login_required(test_formatter.EditTestFormatter.as_view()), - name="test_formatter_edit", - ), - url( - r"^download_page$", - login_required(test_formatter.DownloadTestFormatter.as_view()), - name="test_formatter_download", - ), - ] - ), - ), - url( - r"^markdown_editor/", - markdown_editor.MarkdownEditor.as_view(), - name="markdown_editor", - ), - url( - r"^submission_source_file/(?P(\w|\.)+)", - submission.SubmissionSourceFileView.as_view(), - name="submission_source_file", - ), url( r"^users/", include( @@ -487,7 +442,6 @@ urlpatterns = [ reverse("all_user_submissions", args=[user]) ), ), - url(r"^/toggle_follow/", user.toggle_follow, name="user_toggle_follow"), url( r"^/$", lambda _, user: HttpResponsePermanentRedirect( @@ -504,8 +458,6 @@ urlpatterns = [ url(r"^comments/upvote/$", comment.upvote_comment, name="comment_upvote"), url(r"^comments/downvote/$", comment.downvote_comment, name="comment_downvote"), url(r"^comments/hide/$", comment.comment_hide, name="comment_hide"), - url(r"^comments/get_replies/$", comment.get_replies, name="comment_get_replies"), - url(r"^comments/show_more/$", comment.get_show_more, name="comment_show_more"), url( r"^comments/(?P\d+)/", include( @@ -535,58 +487,6 @@ urlpatterns = [ ), ), url(r"^contests/", paged_list_view(contests.ContestList, "contest_list")), - url( - r"^contests/summary/(?P\w+)/", - paged_list_view(contests.ContestsSummaryView, "contests_summary"), - ), - url( - r"^contests/official", - paged_list_view(contests.OfficialContestList, "official_contest_list"), - ), - url(r"^courses/", paged_list_view(course.CourseList, "course_list")), - url( - r"^course/(?P[\w-]*)", - include( - [ - url(r"^$", course.CourseDetail.as_view(), name="course_detail"), - url( - r"^/lesson/(?P\d+)$", - course.CourseLessonDetail.as_view(), - name="course_lesson_detail", - ), - url( - r"^/edit_lessons$", - course.EditCourseLessonsView.as_view(), - name="edit_course_lessons", - ), - url( - r"^/grades$", - course.CourseStudentResults.as_view(), - name="course_grades", - ), - url( - r"^/grades/lesson/(?P\d+)$", - course.CourseStudentResultsLesson.as_view(), - name="course_grades_lesson", - ), - url( - r"^/add_contest$", - course.AddCourseContest.as_view(), - name="add_course_contest", - ), - url( - r"^/edit_contest/(?P\w+)$", - course.EditCourseContest.as_view(), - name="edit_course_contest", - ), - url( - r"^/contests$", - course.CourseContestList.as_view(), - name="course_contest_list", - ), - ] - ), - ), url( r"^contests/(?P\d+)/(?P\d+)/$", contests.ContestCalendar.as_view(), @@ -629,9 +529,21 @@ urlpatterns = [ contests.ContestFinalRanking.as_view(), name="contest_final_ranking", ), + url( + r"^/ranking/ajax$", + contests.contest_ranking_ajax, + name="contest_ranking_ajax", + ), url(r"^/join$", contests.ContestJoin.as_view(), name="contest_join"), url(r"^/leave$", contests.ContestLeave.as_view(), name="contest_leave"), url(r"^/stats$", contests.ContestStats.as_view(), name="contest_stats"), + url( + r"^/rank/(?P\w+)/", + paged_list_view( + ranked_submission.ContestRankedSubmission, + "contest_ranked_submissions", + ), + ), url( r"^/submissions/(?P\w+)/(?P\w+)", paged_list_view( @@ -645,13 +557,6 @@ urlpatterns = [ "contest_user_submissions_ajax", ), ), - url( - r"^/submissions", - paged_list_view( - submission.ContestSubmissions, - "contest_submissions", - ), - ), url( r"^/participations$", contests.ContestParticipationList.as_view(), @@ -686,6 +591,24 @@ urlpatterns = [ ] ), ), + url(r"^courses/", paged_list_view(course.CourseList, "course_list" )), + url( + r"^courses/(?P[\w-]*)", + include( + [ + url( + r"^$", + course.CourseDetail.as_view(), + name="course_detail" + ), + url( + r"^/grades$", + course.CourseStudentResults.as_view(), + name="grades" + ), + ] + ) + ), url( r"^organizations/$", organization.OrganizationList.as_view(), @@ -847,7 +770,7 @@ urlpatterns = [ ] ), ), - url(r"^blog/", blog.PostList.as_view(), name="blog_post_list"), + url(r"^blog/", paged_list_view(blog.PostList, "blog_post_list")), url(r"^post/(?P\d+)-(?P.*)$", blog.PostView.as_view(), name="blog_post"), url(r"^license/(?P[-\w.]+)$", license.LicenseDetail.as_view(), name="license"), url( @@ -917,11 +840,6 @@ urlpatterns = [ AssigneeSelect2View.as_view(), name="ticket_assignee_select2_ajax", ), - url( - r"^problem_authors$", - ProblemAuthorSearchSelect2View.as_view(), - name="problem_authors_select2_ajax", - ), ] ), ), @@ -980,6 +898,19 @@ urlpatterns = [ ] ), ), + url( + r"^feed/", + include( + [ + url(r"^problems/rss/$", ProblemFeed(), name="problem_rss"), + url(r"^problems/atom/$", AtomProblemFeed(), name="problem_atom"), + url(r"^comment/rss/$", CommentFeed(), name="comment_rss"), + url(r"^comment/atom/$", AtomCommentFeed(), name="comment_atom"), + url(r"^blog/rss/$", BlogFeed(), name="blog_rss"), + url(r"^blog/atom/$", AtomBlogFeed(), name="blog_atom"), + ] + ), + ), url( r"^stats/", include( @@ -1080,6 +1011,9 @@ urlpatterns = [ url( r"^contest/$", ContestSelect2View.as_view(), name="contest_select2" ), + url( + r"^comment/$", CommentSelect2View.as_view(), name="comment_select2" + ), ] ), ), @@ -1115,7 +1049,6 @@ urlpatterns = [ name="chat", ), url(r"^delete/$", chat.delete_message, name="delete_chat_message"), - url(r"^mute/$", chat.mute_message, name="mute_chat_message"), url(r"^post/$", chat.post_message, name="post_chat_message"), url(r"^ajax$", chat.chat_message_ajax, name="chat_message_ajax"), url( @@ -1155,37 +1088,13 @@ urlpatterns = [ internal.InternalProblem.as_view(), name="internal_problem", ), - url( - r"^problem_votes$", - internal.get_problem_votes, - name="internal_problem_votes", - ), - url( - r"^request_time$", - internal.InternalRequestTime.as_view(), - name="internal_request_time", - ), - url( - r"^request_time_detail$", - internal.InternalRequestTimeDetail.as_view(), - name="internal_request_time_detail", - ), - url( - r"^internal_slow_request$", - internal.InternalSlowRequest.as_view(), - name="internal_slow_request", - ), - url( - r"^internal_slow_request_detail$", - internal.InternalSlowRequestDetail.as_view(), - name="internal_slow_request_detail", - ), ] ), ), url( r"^notifications/", - paged_list_view(notification.NotificationList, "notification"), + login_required(notification.NotificationList.as_view()), + name="notification", ), url( r"^import_users/", @@ -1215,7 +1124,6 @@ urlpatterns = [ ), ), url(r"^resolver/(?P\w+)", resolver.Resolver.as_view(), name="resolver"), - url(r"^upload/$", custom_file_upload.file_upload, name="custom_file_upload"), ] + url_static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # if hasattr(settings, "INTERNAL_IPS"): @@ -1243,7 +1151,6 @@ favicon_paths = [ "favicon-32x32.png", "favicon-16x16.png", "android-chrome-192x192.png", - "android-chrome-512x512.png", "android-chrome-48x48.png", "mstile-310x150.png", "apple-touch-icon-144x144.png", diff --git a/judge/admin/__init__.py b/judge/admin/__init__.py index d303048..7993af9 100644 --- a/judge/admin/__init__.py +++ b/judge/admin/__init__.py @@ -1,14 +1,8 @@ from django.contrib import admin from django.contrib.admin.models import LogEntry -from django.contrib.auth.models import User from judge.admin.comments import CommentAdmin -from judge.admin.contest import ( - ContestAdmin, - ContestParticipationAdmin, - ContestTagAdmin, - ContestsSummaryAdmin, -) +from judge.admin.contest import ContestAdmin, ContestParticipationAdmin, ContestTagAdmin from judge.admin.interface import ( BlogPostAdmin, LicenseAdmin, @@ -17,18 +11,12 @@ from judge.admin.interface import ( ) from judge.admin.organization import OrganizationAdmin, OrganizationRequestAdmin from judge.admin.problem import ProblemAdmin, ProblemPointsVoteAdmin -from judge.admin.profile import ProfileAdmin, UserAdmin +from judge.admin.profile import ProfileAdmin from judge.admin.runtime import JudgeAdmin, LanguageAdmin from judge.admin.submission import SubmissionAdmin -from judge.admin.taxon import ( - ProblemGroupAdmin, - ProblemTypeAdmin, - OfficialContestCategoryAdmin, - OfficialContestLocationAdmin, -) +from judge.admin.taxon import ProblemGroupAdmin, ProblemTypeAdmin from judge.admin.ticket import TicketAdmin from judge.admin.volunteer import VolunteerProblemVoteAdmin -from judge.admin.course import CourseAdmin from judge.models import ( BlogPost, Comment, @@ -52,9 +40,7 @@ from judge.models import ( Ticket, VolunteerProblemVote, Course, - ContestsSummary, - OfficialContestCategory, - OfficialContestLocation, + course, ) @@ -80,9 +66,5 @@ admin.site.register(Profile, ProfileAdmin) admin.site.register(Submission, SubmissionAdmin) admin.site.register(Ticket, TicketAdmin) admin.site.register(VolunteerProblemVote, VolunteerProblemVoteAdmin) -admin.site.register(Course, CourseAdmin) -admin.site.unregister(User) -admin.site.register(User, UserAdmin) -admin.site.register(ContestsSummary, ContestsSummaryAdmin) -admin.site.register(OfficialContestCategory, OfficialContestCategoryAdmin) -admin.site.register(OfficialContestLocation, OfficialContestLocationAdmin) +admin.site.register(course.Course) +admin.site.register(course.CourseAssignment) diff --git a/judge/admin/comments.py b/judge/admin/comments.py index c33b683..b9f63d6 100644 --- a/judge/admin/comments.py +++ b/judge/admin/comments.py @@ -12,6 +12,7 @@ class CommentForm(ModelForm): class Meta: widgets = { "author": AdminHeavySelect2Widget(data_view="profile_select2"), + "parent": AdminHeavySelect2Widget(data_view="comment_select2"), } if HeavyPreviewAdminPageDownWidget is not None: widgets["body"] = HeavyPreviewAdminPageDownWidget( @@ -21,24 +22,12 @@ class CommentForm(ModelForm): class CommentAdmin(VersionAdmin): fieldsets = ( - ( - None, - { - "fields": ( - "author", - "parent", - "score", - "hidden", - "content_type", - "object_id", - ) - }, - ), + (None, {"fields": ("author", "page", "parent", "score", "hidden")}), ("Content", {"fields": ("body",)}), ) - list_display = ["author", "linked_object", "time"] - search_fields = ["author__user__username", "body"] - readonly_fields = ["score", "parent"] + list_display = ["author", "linked_page", "time"] + search_fields = ["author__user__username", "page", "body"] + readonly_fields = ["score"] actions = ["hide_comment", "unhide_comment"] list_filter = ["hidden"] actions_on_top = True @@ -77,6 +66,16 @@ class CommentAdmin(VersionAdmin): unhide_comment.short_description = _("Unhide comments") + def linked_page(self, obj): + link = obj.link + if link is not None: + return format_html('{1}', link, obj.page) + else: + return format_html("{0}", obj.page) + + linked_page.short_description = _("Associated page") + linked_page.admin_order_field = "page" + def save_model(self, request, obj, form, change): super(CommentAdmin, self).save_model(request, obj, form, change) if obj.hidden: diff --git a/judge/admin/contest.py b/judge/admin/contest.py index 062d014..f183880 100644 --- a/judge/admin/contest.py +++ b/judge/admin/contest.py @@ -14,14 +14,7 @@ from reversion.admin import VersionAdmin from reversion_compare.admin import CompareVersionAdmin from django_ace import AceWidget -from judge.models import ( - Contest, - ContestProblem, - ContestSubmission, - Profile, - Rating, - OfficialContest, -) +from judge.models import Contest, ContestProblem, ContestSubmission, Profile, Rating from judge.ratings import rate_contest from judge.widgets import ( AdminHeavySelect2MultipleWidget, @@ -31,8 +24,6 @@ from judge.widgets import ( AdminSelect2Widget, HeavyPreviewAdminPageDownWidget, ) -from judge.views.contests import recalculate_contest_summary_result -from judge.utils.contest import maybe_trigger_contest_rescore class AdminHeavySelect2Widget(AdminHeavySelect2Widget): @@ -80,6 +71,7 @@ class ContestProblemInlineForm(ModelForm): "hidden_subtasks": TextInput(attrs={"size": "3"}), "points": TextInput(attrs={"size": "1"}), "order": TextInput(attrs={"size": "1"}), + "output_prefix_override": TextInput(attrs={"size": "1"}), } @@ -94,7 +86,7 @@ class ContestProblemInline(admin.TabularInline): "is_pretested", "max_submissions", "hidden_subtasks", - "show_testcases", + "output_prefix_override", "order", "rejudge_column", ) @@ -157,26 +149,6 @@ class ContestForm(ModelForm): ) -class OfficialContestInlineForm(ModelForm): - class Meta: - widgets = { - "category": AdminSelect2Widget, - "location": AdminSelect2Widget, - } - - -class OfficialContestInline(admin.StackedInline): - fields = ( - "category", - "year", - "location", - ) - model = OfficialContest - can_delete = True - form = OfficialContestInlineForm - extra = 0 - - class ContestAdmin(CompareVersionAdmin): fieldsets = ( (None, {"fields": ("key", "name", "authors", "curators", "testers")}), @@ -187,11 +159,9 @@ class ContestAdmin(CompareVersionAdmin): "is_visible", "use_clarifications", "hide_problem_tags", - "public_scoreboard", "scoreboard_visibility", "run_pretests_only", "points_precision", - "rate_limit", ) }, ), @@ -251,7 +221,7 @@ class ContestAdmin(CompareVersionAdmin): "user_count", ) search_fields = ("key", "name") - inlines = [ContestProblemInline, OfficialContestInline] + inlines = [ContestProblemInline] actions_on_top = True actions_on_bottom = True form = ContestForm @@ -311,14 +281,31 @@ class ContestAdmin(CompareVersionAdmin): super().save_model(request, obj, form, change) + # We need this flag because `save_related` deals with the inlines, but does not know if we have already rescored + self._rescored = False + if form.changed_data and any( + f in form.changed_data + for f in ( + "start_time", + "end_time", + "time_limit", + "format_config", + "format_name", + "freeze_after", + ) + ): + self._rescore(obj.key) + self._rescored = True + def save_related(self, request, form, formsets, change): super().save_related(request, form, formsets, change) # Only rescored if we did not already do so in `save_model` - formset_changed = False - if any(formset.has_changed() for formset in formsets): - formset_changed = True - - maybe_trigger_contest_rescore(form, form.instance, formset_changed) + if not self._rescored and any(formset.has_changed() for formset in formsets): + self._rescore(form.cleaned_data["key"]) + obj = form.instance + obj.is_organization_private = obj.organizations.count() > 0 + obj.is_private = obj.private_contestants.count() > 0 + obj.save() def has_change_permission(self, request, obj=None): if not request.user.has_perm("judge.edit_own_contest"): @@ -327,6 +314,11 @@ class ContestAdmin(CompareVersionAdmin): return True return obj.is_editable_by(request.user) + def _rescore(self, contest_key): + from judge.tasks import rescore_contest + + transaction.on_commit(rescore_contest.s(contest_key).delay) + def make_visible(self, request, queryset): if not request.user.has_perm("judge.change_contest_visibility"): queryset = queryset.filter( @@ -510,25 +502,3 @@ class ContestParticipationAdmin(admin.ModelAdmin): show_virtual.short_description = _("virtual") show_virtual.admin_order_field = "virtual" - - -class ContestsSummaryForm(ModelForm): - class Meta: - widgets = { - "contests": AdminHeavySelect2MultipleWidget( - data_view="contest_select2", attrs={"style": "width: 100%"} - ), - } - - -class ContestsSummaryAdmin(admin.ModelAdmin): - fields = ("key", "contests", "scores") - list_display = ("key",) - search_fields = ("key", "contests__key") - form = ContestsSummaryForm - - def save_model(self, request, obj, form, change): - super(ContestsSummaryAdmin, self).save_model(request, obj, form, change) - obj.refresh_from_db() - obj.results = recalculate_contest_summary_result(request, obj) - obj.save() diff --git a/judge/admin/course.py b/judge/admin/course.py deleted file mode 100644 index ac8c0fd..0000000 --- a/judge/admin/course.py +++ /dev/null @@ -1,52 +0,0 @@ -from django.contrib import admin -from django.utils.html import format_html -from django.urls import reverse, reverse_lazy -from django.utils.translation import gettext, gettext_lazy as _, ungettext -from django.forms import ModelForm - -from judge.models import Course, CourseRole -from judge.widgets import AdminSelect2MultipleWidget -from judge.widgets import ( - AdminHeavySelect2MultipleWidget, - AdminHeavySelect2Widget, - HeavyPreviewAdminPageDownWidget, - AdminSelect2Widget, -) - - -class CourseRoleInlineForm(ModelForm): - class Meta: - widgets = { - "user": AdminHeavySelect2Widget( - data_view="profile_select2", attrs={"style": "width: 100%"} - ), - "role": AdminSelect2Widget, - } - - -class CourseRoleInline(admin.TabularInline): - model = CourseRole - extra = 1 - form = CourseRoleInlineForm - - -class CourseForm(ModelForm): - class Meta: - widgets = { - "organizations": AdminHeavySelect2MultipleWidget( - data_view="organization_select2" - ), - "about": HeavyPreviewAdminPageDownWidget( - preview=reverse_lazy("blog_preview") - ), - } - - -class CourseAdmin(admin.ModelAdmin): - prepopulated_fields = {"slug": ("name",)} - inlines = [ - CourseRoleInline, - ] - list_display = ("name", "is_public", "is_open") - search_fields = ("name",) - form = CourseForm diff --git a/judge/admin/interface.py b/judge/admin/interface.py index b377212..e82bb55 100644 --- a/judge/admin/interface.py +++ b/judge/admin/interface.py @@ -53,8 +53,7 @@ class NavigationBarAdmin(DraggableMPTTAdmin): class BlogPostForm(ModelForm): def __init__(self, *args, **kwargs): super(BlogPostForm, self).__init__(*args, **kwargs) - if "authors" in self.fields: - self.fields["authors"].widget.can_add_related = False + self.fields["authors"].widget.can_add_related = False class Meta: widgets = { diff --git a/judge/admin/organization.py b/judge/admin/organization.py index 4ac7708..b9d1c0b 100644 --- a/judge/admin/organization.py +++ b/judge/admin/organization.py @@ -33,6 +33,7 @@ class OrganizationAdmin(VersionAdmin): "short_name", "is_open", "about", + "logo_override_image", "slots", "registrant", "creation_date", diff --git a/judge/admin/problem.py b/judge/admin/problem.py index bf590db..49a145d 100644 --- a/judge/admin/problem.py +++ b/judge/admin/problem.py @@ -1,8 +1,8 @@ from operator import attrgetter from django import forms -from django.contrib import admin, messages -from django.db import transaction, IntegrityError +from django.contrib import admin +from django.db import transaction from django.db.models import Q, Avg, Count from django.db.models.aggregates import StdDev from django.forms import ModelForm, TextInput @@ -11,7 +11,6 @@ from django.utils.html import format_html from django.utils.translation import gettext, gettext_lazy as _, ungettext from django_ace import AceWidget from django.utils import timezone -from django.core.exceptions import ValidationError from reversion.admin import VersionAdmin from reversion_compare.admin import CompareVersionAdmin @@ -26,7 +25,6 @@ from judge.models import ( Solution, Notification, ) -from judge.models.notification import make_notification from judge.widgets import ( AdminHeavySelect2MultipleWidget, AdminSelect2MultipleWidget, @@ -34,7 +32,6 @@ from judge.widgets import ( CheckboxSelectMultipleWithSelectAll, HeavyPreviewAdminPageDownWidget, ) -from judge.utils.problems import user_editable_ids, user_tester_ids MEMORY_UNITS = (("KB", "KB"), ("MB", "MB")) @@ -57,16 +54,6 @@ class ProblemForm(ModelForm): } ) - def clean_code(self): - code = self.cleaned_data.get("code") - if self.instance.pk: - return code - - if Problem.objects.filter(code=code).exists(): - raise ValidationError(_("A problem with this code already exists.")) - - return code - def clean(self): memory_unit = self.cleaned_data.get("memory_unit", "KB") if memory_unit == "MB": @@ -142,7 +129,6 @@ class LanguageLimitInline(admin.TabularInline): model = LanguageLimit fields = ("language", "time_limit", "memory_limit", "memory_unit") form = LanguageLimitInlineForm - extra = 0 class LanguageTemplateInlineForm(ModelForm): @@ -157,7 +143,6 @@ class LanguageTemplateInline(admin.TabularInline): model = LanguageTemplate fields = ("language", "source") form = LanguageTemplateInlineForm - extra = 0 class ProblemSolutionForm(ModelForm): @@ -373,29 +358,12 @@ class ProblemAdmin(CompareVersionAdmin): self._rescore(request, obj.id) def save_related(self, request, form, formsets, change): - editors = set() - testers = set() - if "curators" in form.changed_data or "authors" in form.changed_data: - editors = set(form.instance.editor_ids) - if "testers" in form.changed_data: - testers = set(form.instance.tester_ids) - super().save_related(request, form, formsets, change) + # Only rescored if we did not already do so in `save_model` obj = form.instance obj.curators.add(request.profile) - - if "curators" in form.changed_data or "authors" in form.changed_data: - del obj.editor_ids - editors = editors.union(set(obj.editor_ids)) - if "testers" in form.changed_data: - del obj.tester_ids - testers = testers.union(set(obj.tester_ids)) - - for editor in editors: - user_editable_ids.dirty(editor) - for tester in testers: - user_tester_ids.dirty(tester) - + obj.is_organization_private = obj.organizations.count() > 0 + obj.save() # Create notification if "is_public" in form.changed_data or "organizations" in form.changed_data: users = set(obj.authors.all()) @@ -413,7 +381,14 @@ class ProblemAdmin(CompareVersionAdmin): category = "Problem public: " + str(obj.is_public) if orgs: category += " (" + ", ".join(orgs) + ")" - make_notification(users, category, html, request.profile) + for user in users: + notification = Notification( + owner=user, + html_link=html, + category=category, + author=request.profile, + ) + notification.save() def construct_change_message(self, request, form, *args, **kwargs): if form.cleaned_data.get("change_message"): diff --git a/judge/admin/profile.py b/judge/admin/profile.py index 4c380c9..d19a80b 100644 --- a/judge/admin/profile.py +++ b/judge/admin/profile.py @@ -1,19 +1,12 @@ from django.contrib import admin -from django.forms import ModelForm, CharField, TextInput +from django.forms import ModelForm from django.utils.html import format_html from django.utils.translation import gettext, gettext_lazy as _, ungettext -from django.contrib.auth.admin import UserAdmin as OldUserAdmin -from django.core.exceptions import ValidationError -from django.contrib.auth.forms import UserChangeForm - -from django_ace import AceWidget - -from judge.models import Profile, ProfileInfo -from judge.widgets import AdminPagedownWidget, AdminSelect2Widget - from reversion.admin import VersionAdmin -import re +from django_ace import AceWidget +from judge.models import Profile +from judge.widgets import AdminPagedownWidget, AdminSelect2Widget class ProfileForm(ModelForm): @@ -60,13 +53,6 @@ class TimezoneFilter(admin.SimpleListFilter): return queryset.filter(timezone=self.value()) -class ProfileInfoInline(admin.StackedInline): - model = ProfileInfo - can_delete = False - verbose_name_plural = "profile info" - fk_name = "profile" - - class ProfileAdmin(VersionAdmin): fields = ( "user", @@ -76,12 +62,15 @@ class ProfileAdmin(VersionAdmin): "timezone", "language", "ace_theme", + "math_engine", "last_access", "ip", "mute", "is_unlisted", + "is_banned_problem_voting", "notes", "is_totp_enabled", + "user_script", "current_contest", ) readonly_fields = ("user",) @@ -102,7 +91,6 @@ class ProfileAdmin(VersionAdmin): actions_on_top = True actions_on_bottom = True form = ProfileForm - inlines = (ProfileInfoInline,) def get_queryset(self, request): return super(ProfileAdmin, self).get_queryset(request).select_related("user") @@ -137,7 +125,7 @@ class ProfileAdmin(VersionAdmin): admin_user_admin.short_description = _("User") def email(self, obj): - return obj.email + return obj.user.email email.admin_order_field = "user__email" email.short_description = _("Email") @@ -171,57 +159,11 @@ class ProfileAdmin(VersionAdmin): recalculate_points.short_description = _("Recalculate scores") - -class UserForm(UserChangeForm): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields["username"].help_text = _( - "Username can only contain letters, digits, and underscores." - ) - - def clean_username(self): - username = self.cleaned_data.get("username") - if not re.match(r"^\w+$", username): - raise ValidationError( - _("Username can only contain letters, digits, and underscores.") + def get_form(self, request, obj=None, **kwargs): + form = super(ProfileAdmin, self).get_form(request, obj, **kwargs) + if "user_script" in form.base_fields: + # form.base_fields['user_script'] does not exist when the user has only view permission on the model. + form.base_fields["user_script"].widget = AceWidget( + "javascript", request.profile.ace_theme ) - return username - - -class UserAdmin(OldUserAdmin): - # Customize the fieldsets for adding and editing users - form = UserForm - fieldsets = ( - (None, {"fields": ("username", "password")}), - ("Personal Info", {"fields": ("first_name", "last_name", "email")}), - ( - "Permissions", - { - "fields": ( - "is_active", - "is_staff", - "is_superuser", - "groups", - "user_permissions", - ) - }, - ), - ("Important dates", {"fields": ("last_login", "date_joined")}), - ) - - readonly_fields = ("last_login", "date_joined") - - def get_readonly_fields(self, request, obj=None): - fields = self.readonly_fields - if not request.user.is_superuser: - fields += ( - "is_staff", - "is_active", - "is_superuser", - "groups", - "user_permissions", - ) - return fields - - def has_add_permission(self, request): - return False + return form diff --git a/judge/admin/submission.py b/judge/admin/submission.py index 7218bb2..f621783 100644 --- a/judge/admin/submission.py +++ b/judge/admin/submission.py @@ -194,16 +194,18 @@ class SubmissionAdmin(admin.ModelAdmin): def has_add_permission(self, request): return False + def has_change_permission(self, request, obj=None): + if not request.user.has_perm("judge.edit_own_problem"): + return False + if request.user.has_perm("judge.edit_all_problem") or obj is None: + return True + return obj.problem.is_editor(request.profile) + def lookup_allowed(self, key, value): return super(SubmissionAdmin, self).lookup_allowed(key, value) or key in ( "problem__code", ) - def save_model(self, request, obj, form, change): - super().save_model(request, obj, form, change) - if "case_points" in form.changed_data or "case_total" in form.changed_data: - obj.update_contest() - def judge(self, request, queryset): if not request.user.has_perm( "judge.rejudge_submission" diff --git a/judge/admin/taxon.py b/judge/admin/taxon.py index dfdc622..4335efe 100644 --- a/judge/admin/taxon.py +++ b/judge/admin/taxon.py @@ -56,11 +56,3 @@ class ProblemTypeAdmin(admin.ModelAdmin): [o.pk for o in obj.problem_set.all()] if obj else [] ) return super(ProblemTypeAdmin, self).get_form(request, obj, **kwargs) - - -class OfficialContestCategoryAdmin(admin.ModelAdmin): - fields = ("name",) - - -class OfficialContestLocationAdmin(admin.ModelAdmin): - fields = ("name",) diff --git a/judge/apps.py b/judge/apps.py index 4df4c5a..f223d52 100644 --- a/judge/apps.py +++ b/judge/apps.py @@ -12,7 +12,7 @@ class JudgeAppConfig(AppConfig): # OPERATIONS MAY HAVE SIDE EFFECTS. # DO NOT REMOVE THINKING THE IMPORT IS UNUSED. # noinspection PyUnresolvedReferences - from . import models, signals, jinja2 # noqa: F401, imported for side effects + from . import signals, jinja2 # noqa: F401, imported for side effects from django.contrib.flatpages.models import FlatPage from django.contrib.flatpages.admin import FlatPageAdmin diff --git a/judge/authentication.py b/judge/authentication.py deleted file mode 100644 index c7ae7d6..0000000 --- a/judge/authentication.py +++ /dev/null @@ -1,48 +0,0 @@ -from django.contrib.auth.backends import ModelBackend -from django.contrib.auth.models import User -from django.contrib.auth.forms import PasswordChangeForm -from django.contrib.auth.views import PasswordChangeView -from django.urls import reverse_lazy -from django.utils.translation import gettext_lazy as _ - - -class CustomModelBackend(ModelBackend): - def authenticate(self, request, username=None, password=None, **kwargs): - try: - # Check if the username is an email - user = User.objects.get(username=username) - except User.DoesNotExist: - # If the username is not an email, try authenticating with the username field - user = User.objects.filter(email=username).first() - - if user and user.check_password(password): - return user - - -class CustomPasswordChangeForm(PasswordChangeForm): - def __init__(self, *args, **kwargs): - super(CustomPasswordChangeForm, self).__init__(*args, **kwargs) - if not self.user.has_usable_password(): - self.fields.pop("old_password") - - def clean_old_password(self): - if "old_password" not in self.cleaned_data: - return - return super(CustomPasswordChangeForm, self).clean_old_password() - - def clean(self): - cleaned_data = super(CustomPasswordChangeForm, self).clean() - if "old_password" not in self.cleaned_data and not self.errors: - cleaned_data["old_password"] = "" - return cleaned_data - - -class CustomPasswordChangeView(PasswordChangeView): - form_class = CustomPasswordChangeForm - success_url = reverse_lazy("password_change_done") - template_name = "registration/password_change_form.html" - - def get_form_kwargs(self): - kwargs = super(CustomPasswordChangeView, self).get_form_kwargs() - kwargs["user"] = self.request.user - return kwargs diff --git a/judge/bridge/judge_handler.py b/judge/bridge/judge_handler.py index bb80f5a..cca520f 100644 --- a/judge/bridge/judge_handler.py +++ b/judge/bridge/judge_handler.py @@ -10,11 +10,10 @@ from django import db from django.conf import settings from django.utils import timezone from django.db.models import F -from django.core.cache import cache from judge import event_poster as event from judge.bridge.base_handler import ZlibPacketHandler, proxy_list -from judge.utils.problems import finished_submission +from judge.caching import finished_submission from judge.models import ( Judge, Language, @@ -24,8 +23,6 @@ from judge.models import ( Submission, SubmissionTestCase, ) -from judge.bridge.utils import VanishedSubmission -from judge.caching import cache_wrapper logger = logging.getLogger("judge.bridge") json_log = logging.getLogger("judge.json.bridge") @@ -65,10 +62,10 @@ class JudgeHandler(ZlibPacketHandler): "handshake": self.on_handshake, } self._working = False - self._working_data = {} self._no_response_job = None + self._problems = [] self.executors = {} - self.problems = set() + self.problems = {} self.latency = None self.time_delta = None self.load = 1e100 @@ -94,6 +91,12 @@ class JudgeHandler(ZlibPacketHandler): def on_disconnect(self): self._stop_ping.set() + if self._working: + logger.error( + "Judge %s disconnected while handling submission %s", + self.name, + self._working, + ) self.judges.remove(self) if self.name is not None: self._disconnected() @@ -105,32 +108,24 @@ class JudgeHandler(ZlibPacketHandler): self._make_json_log(action="disconnect", info="judge disconnected") ) if self._working: - self.judges.judge( - self._working, - self._working_data["problem"], - self._working_data["language"], - self._working_data["source"], - None, - 0, + Submission.objects.filter(id=self._working).update( + status="IE", result="IE", error="" + ) + json_log.error( + self._make_json_log( + sub=self._working, + action="close", + info="IE due to shutdown on grading", + ) ) def _authenticate(self, id, key): try: - judge = Judge.objects.get(name=id) + judge = Judge.objects.get(name=id, is_blocked=False) except Judge.DoesNotExist: - if settings.BRIDGED_AUTO_CREATE_JUDGE: - judge = Judge() - judge.name = id - judge.auth_key = key - judge.save() - result = True - else: - result = False + result = False else: - if judge.is_blocked: - result = False - else: - result = hmac.compare_digest(judge.auth_key, key) + result = hmac.compare_digest(judge.auth_key, key) if not result: json_log.warning( @@ -140,52 +135,11 @@ class JudgeHandler(ZlibPacketHandler): ) return result - def _update_supported_problems(self, problem_packet): - # problem_packet is a dict {code: mtimes} from judge-server - self.problems = set(p for p, _ in problem_packet) - - def _update_judge_problems(self): - chunk_size = 500 - - target_problem_codes = self.problems - current_problems = _get_judge_problems(self.judge) - - updated = False - problems_to_add = list(target_problem_codes - current_problems) - problems_to_remove = list(current_problems - target_problem_codes) - - if problems_to_add: - for i in range(0, len(problems_to_add), chunk_size): - chunk = problems_to_add[i : i + chunk_size] - problem_ids = Problem.objects.filter(code__in=chunk).values_list( - "id", flat=True - ) - if not problem_ids: - continue - logger.info("%s: Add %d problems", self.name, len(problem_ids)) - self.judge.problems.add(*problem_ids) - updated = True - - if problems_to_remove: - for i in range(0, len(problems_to_remove), chunk_size): - chunk = problems_to_remove[i : i + chunk_size] - problem_ids = Problem.objects.filter(code__in=chunk).values_list( - "id", flat=True - ) - if not problem_ids: - continue - logger.info("%s: Remove %d problems", self.name, len(problem_ids)) - self.judge.problems.remove(*problem_ids) - updated = True - - if updated: - _get_judge_problems.dirty(self.judge) - def _connected(self): judge = self.judge = Judge.objects.get(name=self.name) judge.start_time = timezone.now() judge.online = True - self._update_judge_problems() + judge.problems.set(Problem.objects.filter(code__in=list(self.problems.keys()))) judge.runtimes.set(Language.objects.filter(key__in=list(self.executors.keys()))) # Delete now in case we somehow crashed and left some over from the last connection @@ -220,8 +174,6 @@ class JudgeHandler(ZlibPacketHandler): def _disconnected(self): Judge.objects.filter(id=self.judge.id).update(online=False) RuntimeVersion.objects.filter(judge=self.judge).delete() - self.judge.problems.clear() - _get_judge_problems.dirty(self.judge) def _update_ping(self): try: @@ -252,7 +204,8 @@ class JudgeHandler(ZlibPacketHandler): return self.timeout = 60 - self._update_supported_problems(packet["problems"]) + self._problems = packet["problems"] + self.problems = dict(self._problems) self.executors = packet["executors"] self.name = packet["id"] @@ -353,15 +306,7 @@ class JudgeHandler(ZlibPacketHandler): def submit(self, id, problem, language, source): data = self.get_related_submission_data(id) - if not data: - self._update_internal_error_submission(id, "Submission vanished") - raise VanishedSubmission() self._working = id - self._working_data = { - "problem": problem, - "language": language, - "source": source, - } self._no_response_job = threading.Timer(20, self._kill_if_no_response) self.send( { @@ -480,12 +425,14 @@ class JudgeHandler(ZlibPacketHandler): def on_supported_problems(self, packet): logger.info("%s: Updated problem list", self.name) - self._update_supported_problems(packet["problems"]) - + self._problems = packet["problems"] + self.problems = dict(self._problems) if not self.working: self.judges.update_problems(self) - self._update_judge_problems() + self.judge.problems.set( + Problem.objects.filter(code__in=list(self.problems.keys())) + ) json_log.info( self._make_json_log(action="update-problems", count=len(self.problems)) ) @@ -702,11 +649,8 @@ class JudgeHandler(ZlibPacketHandler): self._free_self(packet) id = packet["submission-id"] - self._update_internal_error_submission(id, packet["message"]) - - def _update_internal_error_submission(self, id, message): if Submission.objects.filter(id=id).update( - status="IE", result="IE", error=message + status="IE", result="IE", error=packet["message"] ): event.post( "sub_%s" % Submission.get_id_secret(id), {"type": "internal-error"} @@ -714,9 +658,9 @@ class JudgeHandler(ZlibPacketHandler): self._post_update_submission(id, "internal-error", done=True) json_log.info( self._make_json_log( - sub=id, + packet, action="internal-error", - message=message, + message=packet["message"], finish=True, result="IE", ) @@ -725,10 +669,10 @@ class JudgeHandler(ZlibPacketHandler): logger.warning("Unknown submission: %s", id) json_log.error( self._make_json_log( - sub=id, + packet, action="internal-error", info="unknown submission", - message=message, + message=packet["message"], finish=True, result="IE", ) @@ -959,8 +903,3 @@ class JudgeHandler(ZlibPacketHandler): def on_cleanup(self): db.connection.close() - - -@cache_wrapper(prefix="gjp", timeout=3600) -def _get_judge_problems(judge): - return set(judge.problems.values_list("code", flat=True)) diff --git a/judge/bridge/judge_list.py b/judge/bridge/judge_list.py index bf2b54a..a670667 100644 --- a/judge/bridge/judge_list.py +++ b/judge/bridge/judge_list.py @@ -3,8 +3,6 @@ from collections import namedtuple from operator import attrgetter from threading import RLock -from judge.bridge.utils import VanishedSubmission - try: from llist import dllist except ImportError: @@ -41,8 +39,6 @@ class JudgeList(object): ) try: judge.submit(id, problem, language, source) - except VanishedSubmission: - pass except Exception: logger.exception( "Failed to dispatch %d (%s, %s) to %s", @@ -93,7 +89,6 @@ class JudgeList(object): logger.info("Judge available after grading %d: %s", submission, judge.name) del self.submission_map[submission] judge._working = False - judge._working_data = {} self._handle_free_judge(judge) def abort(self, submission): diff --git a/judge/bridge/utils.py b/judge/bridge/utils.py deleted file mode 100644 index dfb2ac9..0000000 --- a/judge/bridge/utils.py +++ /dev/null @@ -1,2 +0,0 @@ -class VanishedSubmission(Exception): - pass diff --git a/judge/caching.py b/judge/caching.py index f40adb1..99bbf81 100644 --- a/judge/caching.py +++ b/judge/caching.py @@ -1,117 +1,10 @@ -from inspect import signature -from django.core.cache import cache, caches -from django.db.models.query import QuerySet -from django.core.handlers.wsgi import WSGIRequest - -import hashlib - -from judge.logging import log_debug - -MAX_NUM_CHAR = 50 -NONE_RESULT = "__None__" +from django.core.cache import cache -def arg_to_str(arg): - if hasattr(arg, "id"): - return str(arg.id) - if isinstance(arg, list) or isinstance(arg, QuerySet): - return hashlib.sha1(str(list(arg)).encode()).hexdigest()[:MAX_NUM_CHAR] - if len(str(arg)) > MAX_NUM_CHAR: - return str(arg)[:MAX_NUM_CHAR] - return str(arg) - - -def filter_args(args_list): - return [x for x in args_list if not isinstance(x, WSGIRequest)] - - -l0_cache = caches["l0"] if "l0" in caches else None - - -def cache_wrapper(prefix, timeout=None, expected_type=None): - def get_key(func, *args, **kwargs): - args_list = list(args) - signature_args = list(signature(func).parameters.keys()) - args_list += [kwargs.get(k) for k in signature_args[len(args) :]] - args_list = filter_args(args_list) - args_list = [arg_to_str(i) for i in args_list] - key = prefix + ":" + ":".join(args_list) - key = key.replace(" ", "_") - return key - - def _get(key): - if not l0_cache: - return cache.get(key) - result = l0_cache.get(key) - if result is None: - result = cache.get(key) - return result - - def _set_l0(key, value): - if l0_cache: - l0_cache.set(key, value, 30) - - def _set(key, value, timeout): - _set_l0(key, value) - cache.set(key, value, timeout) - - def decorator(func): - def _validate_type(cache_key, result): - if expected_type and not isinstance(result, expected_type): - data = { - "function": f"{func.__module__}.{func.__qualname__}", - "result": str(result)[:30], - "expected_type": expected_type, - "type": type(result), - "key": cache_key, - } - log_debug("invalid_key", data) - return False - return True - - def wrapper(*args, **kwargs): - cache_key = get_key(func, *args, **kwargs) - result = _get(cache_key) - if result is not None and _validate_type(cache_key, result): - _set_l0(cache_key, result) - if type(result) == str and result == NONE_RESULT: - result = None - return result - result = func(*args, **kwargs) - if result is None: - cache_result = NONE_RESULT - else: - cache_result = result - _set(cache_key, cache_result, timeout) - return result - - def dirty(*args, **kwargs): - cache_key = get_key(func, *args, **kwargs) - cache.delete(cache_key) - if l0_cache: - l0_cache.delete(cache_key) - - def prefetch_multi(args_list): - keys = [] - for args in args_list: - keys.append(get_key(func, *args)) - results = cache.get_many(keys) - for key, result in results.items(): - if result is not None: - _set_l0(key, result) - - def dirty_multi(args_list): - keys = [] - for args in args_list: - keys.append(get_key(func, *args)) - cache.delete_many(keys) - if l0_cache: - l0_cache.delete_many(keys) - - wrapper.dirty = dirty - wrapper.prefetch_multi = prefetch_multi - wrapper.dirty_multi = dirty_multi - - return wrapper - - return decorator +def finished_submission(sub): + keys = ["user_complete:%d" % sub.user_id, "user_attempted:%s" % sub.user_id] + if hasattr(sub, "contest"): + participation = sub.contest.participation + keys += ["contest_complete:%d" % participation.id] + keys += ["contest_attempted:%d" % participation.id] + cache.delete_many(keys) diff --git a/judge/comments.py b/judge/comments.py new file mode 100644 index 0000000..2509baa --- /dev/null +++ b/judge/comments.py @@ -0,0 +1,194 @@ +from django import forms +from django.conf import settings +from django.contrib.auth.decorators import login_required +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ValidationError +from django.db.models import Count, FilteredRelation, Q +from django.db.models.expressions import F, Value +from django.db.models.functions import Coalesce +from django.forms import ModelForm +from django.http import ( + HttpResponseForbidden, + HttpResponseNotFound, + HttpResponseRedirect, +) +from django.urls import reverse_lazy +from django.utils.decorators import method_decorator +from django.utils.translation import gettext as _ +from django.views.generic import View +from django.views.generic.base import TemplateResponseMixin +from django.views.generic.detail import SingleObjectMixin +from reversion import revisions +from reversion.models import Revision, Version + +from judge.dblock import LockModel +from judge.models import Comment, CommentLock, Notification +from judge.widgets import HeavyPreviewPageDownWidget +from judge.jinja2.reference import get_user_from_text + + +def add_mention_notifications(comment): + user_referred = get_user_from_text(comment.body).exclude(id=comment.author.id) + for user in user_referred: + notification_ref = Notification(owner=user, comment=comment, category="Mention") + notification_ref.save() + + +def del_mention_notifications(comment): + query = {"comment": comment, "category": "Mention"} + Notification.objects.filter(**query).delete() + + +class CommentForm(ModelForm): + class Meta: + model = Comment + fields = ["body", "parent"] + widgets = { + "parent": forms.HiddenInput(), + } + + if HeavyPreviewPageDownWidget is not None: + widgets["body"] = HeavyPreviewPageDownWidget( + preview=reverse_lazy("comment_preview"), + preview_timeout=1000, + hide_preview_button=True, + ) + + def __init__(self, request, *args, **kwargs): + self.request = request + super(CommentForm, self).__init__(*args, **kwargs) + self.fields["body"].widget.attrs.update({"placeholder": _("Comment body")}) + + def clean(self): + if self.request is not None and self.request.user.is_authenticated: + profile = self.request.profile + if profile.mute: + raise ValidationError(_("Your part is silent, little toad.")) + elif ( + not self.request.user.is_staff + and not profile.submission_set.filter( + points=F("problem__points") + ).exists() + ): + raise ValidationError( + _( + "You need to have solved at least one problem " + "before your voice can be heard." + ) + ) + return super(CommentForm, self).clean() + + +class CommentedDetailView(TemplateResponseMixin, SingleObjectMixin, View): + comment_page = None + + def get_comment_page(self): + if self.comment_page is None: + raise NotImplementedError() + return self.comment_page + + def is_comment_locked(self): + if self.request.user.has_perm("judge.override_comment_lock"): + return False + return CommentLock.objects.filter(page=self.get_comment_page()).exists() or ( + self.request.in_contest + and self.request.participation.contest.use_clarifications + ) + + @method_decorator(login_required) + def post(self, request, *args, **kwargs): + self.object = self.get_object() + page = self.get_comment_page() + + if self.is_comment_locked(): + return HttpResponseForbidden() + + parent = request.POST.get("parent") + if parent: + try: + parent = int(parent) + except ValueError: + return HttpResponseNotFound() + else: + if not Comment.objects.filter( + hidden=False, id=parent, page=page + ).exists(): + return HttpResponseNotFound() + + form = CommentForm(request, request.POST) + if form.is_valid(): + comment = form.save(commit=False) + comment.author = request.profile + comment.page = page + + with LockModel( + write=(Comment, Revision, Version), read=(ContentType,) + ), revisions.create_revision(): + revisions.set_user(request.user) + revisions.set_comment(_("Posted comment")) + comment.save() + + # add notification for reply + if comment.parent and comment.parent.author != comment.author: + notification_reply = Notification( + owner=comment.parent.author, comment=comment, category="Reply" + ) + notification_reply.save() + + # add notification for page authors + page_authors = comment.page_object.authors.all() + for user in page_authors: + if user == comment.author: + continue + notification = Notification( + owner=user, comment=comment, category="Comment" + ) + notification.save() + # except Exception: + # pass + + add_mention_notifications(comment) + + return HttpResponseRedirect(request.path) + + context = self.get_context_data(object=self.object, comment_form=form) + return self.render_to_response(context) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + return self.render_to_response( + self.get_context_data( + object=self.object, + comment_form=CommentForm( + request, initial={"page": self.get_comment_page(), "parent": None} + ), + ) + ) + + def get_context_data(self, **kwargs): + context = super(CommentedDetailView, self).get_context_data(**kwargs) + queryset = Comment.objects.filter(hidden=False, page=self.get_comment_page()) + context["has_comments"] = queryset.exists() + context["comment_lock"] = self.is_comment_locked() + queryset = ( + queryset.select_related("author__user") + .defer("author__about") + .annotate(revisions=Count("versions")) + ) + + if self.request.user.is_authenticated: + profile = self.request.profile + queryset = queryset.annotate( + my_vote=FilteredRelation( + "votes", condition=Q(votes__voter_id=profile.id) + ), + ).annotate(vote_score=Coalesce(F("my_vote__score"), Value(0))) + context["is_new_user"] = ( + not self.request.user.is_staff + and not profile.submission_set.filter( + points=F("problem__points") + ).exists() + ) + context["comment_list"] = queryset + context["vote_hide_threshold"] = settings.DMOJ_COMMENT_VOTE_HIDE_THRESHOLD + return context diff --git a/judge/contest_format/__init__.py b/judge/contest_format/__init__.py index 9f6d628..8d2ccc9 100644 --- a/judge/contest_format/__init__.py +++ b/judge/contest_format/__init__.py @@ -4,5 +4,4 @@ from judge.contest_format.ecoo import ECOOContestFormat from judge.contest_format.icpc import ICPCContestFormat from judge.contest_format.ioi import IOIContestFormat from judge.contest_format.new_ioi import NewIOIContestFormat -from judge.contest_format.ultimate import UltimateContestFormat from judge.contest_format.registry import choices, formats diff --git a/judge/contest_format/base.py b/judge/contest_format/base.py index 3b47e59..bea3db4 100644 --- a/judge/contest_format/base.py +++ b/judge/contest_format/base.py @@ -109,8 +109,6 @@ class BaseContestFormat(metaclass=ABCMeta): ) for result in queryset: problem = str(result["problem_id"]) - if not (self.contest.freeze_after or hidden_subtasks.get(problem)): - continue if format_data.get(problem): is_after_freeze = ( self.contest.freeze_after diff --git a/judge/contest_format/ultimate.py b/judge/contest_format/ultimate.py deleted file mode 100644 index 7960d02..0000000 --- a/judge/contest_format/ultimate.py +++ /dev/null @@ -1,55 +0,0 @@ -from django.utils.translation import gettext_lazy - -from judge.contest_format.ioi import IOIContestFormat -from judge.contest_format.registry import register_contest_format -from django.db.models import Min, OuterRef, Subquery - -# This contest format only counts last submission for each problem. - - -@register_contest_format("ultimate") -class UltimateContestFormat(IOIContestFormat): - name = gettext_lazy("Ultimate") - - def update_participation(self, participation): - cumtime = 0 - score = 0 - format_data = {} - - queryset = participation.submissions - if self.contest.freeze_after: - queryset = queryset.filter( - submission__date__lt=participation.start + self.contest.freeze_after - ) - - queryset = ( - queryset.values("problem_id") - .filter( - id=Subquery( - queryset.filter(problem_id=OuterRef("problem_id")) - .order_by("-id") - .values("id")[:1] - ) - ) - .values_list("problem_id", "submission__date", "points") - ) - - for problem_id, time, points in queryset: - if self.config["cumtime"]: - dt = (time - participation.start).total_seconds() - if points: - cumtime += dt - else: - dt = 0 - format_data[str(problem_id)] = { - "time": dt, - "points": points, - } - score += points - - self.handle_frozen_state(participation, format_data) - participation.cumtime = max(cumtime, 0) - participation.score = round(score, self.contest.points_precision) - participation.tiebreaker = 0 - participation.format_data = format_data - participation.save() diff --git a/judge/custom_translations.py b/judge/custom_translations.py deleted file mode 100644 index efe4939..0000000 --- a/judge/custom_translations.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.utils.translation import gettext_lazy as _, ngettext - - -def custom_trans(): - return [ - # Password reset - ngettext( - "This password is too short. It must contain at least %(min_length)d character.", - "This password is too short. It must contain at least %(min_length)d characters.", - 0, - ), - ngettext( - "Your password must contain at least %(min_length)d character.", - "Your password must contain at least %(min_length)d characters.", - 0, - ), - _("The two password fields didn’t match."), - _("Your password can’t be entirely numeric."), - # Navbar - _("Bug Report"), - _("Courses"), - ] diff --git a/judge/event_poster_amqp.py b/judge/event_poster_amqp.py index 24cec72..959d882 100644 --- a/judge/event_poster_amqp.py +++ b/judge/event_poster_amqp.py @@ -16,7 +16,7 @@ class EventPoster(object): def _connect(self): self._conn = pika.BlockingConnection( - pika.URLParameters(settings.EVENT_DAEMON_AMQP), + pika.URLParameters(settings.EVENT_DAEMON_AMQP) ) self._chan = self._conn.channel() @@ -25,7 +25,7 @@ class EventPoster(object): id = int(time() * 1000000) self._chan.basic_publish( self._exchange, - "#", + "", json.dumps({"id": id, "channel": channel, "message": message}), ) return id diff --git a/judge/feed.py b/judge/feed.py new file mode 100644 index 0000000..c7fcb07 --- /dev/null +++ b/judge/feed.py @@ -0,0 +1,120 @@ +from django.conf import settings +from django.contrib.auth.models import AnonymousUser +from django.contrib.syndication.views import Feed +from django.core.cache import cache +from django.utils import timezone +from django.utils.feedgenerator import Atom1Feed + +from judge.jinja2.markdown import markdown +from judge.models import BlogPost, Comment, Problem + +import re + + +# https://lsimons.wordpress.com/2011/03/17/stripping-illegal-characters-out-of-xml-in-python/ +def escape_xml_illegal_chars(val, replacement="?"): + _illegal_xml_chars_RE = re.compile( + "[\x00-\x08\x0b\x0c\x0e-\x1F\uD800-\uDFFF\uFFFE\uFFFF]" + ) + return _illegal_xml_chars_RE.sub(replacement, val) + + +class ProblemFeed(Feed): + title = "Recently Added %s Problems" % settings.SITE_NAME + link = "/" + description = ( + "The latest problems added on the %s website" % settings.SITE_LONG_NAME + ) + + def items(self): + return ( + Problem.objects.filter(is_public=True, is_organization_private=False) + .defer("description") + .order_by("-date", "-id")[:25] + ) + + def item_title(self, problem): + return problem.name + + def item_description(self, problem): + key = "problem_feed:%d" % problem.id + desc = cache.get(key) + if desc is None: + desc = str(markdown(problem.description))[:500] + "..." + desc = escape_xml_illegal_chars(desc) + cache.set(key, desc, 86400) + return desc + + def item_pubdate(self, problem): + return problem.date + + item_updateddate = item_pubdate + + +class AtomProblemFeed(ProblemFeed): + feed_type = Atom1Feed + subtitle = ProblemFeed.description + + +class CommentFeed(Feed): + title = "Latest %s Comments" % settings.SITE_NAME + link = "/" + description = "The latest comments on the %s website" % settings.SITE_LONG_NAME + + def items(self): + return Comment.most_recent(AnonymousUser(), 25) + + def item_title(self, comment): + return "%s -> %s" % (comment.author.user.username, comment.page_title) + + def item_description(self, comment): + key = "comment_feed:%d" % comment.id + desc = cache.get(key) + if desc is None: + desc = str(markdown(comment.body)) + desc = escape_xml_illegal_chars(desc) + cache.set(key, desc, 86400) + return desc + + def item_pubdate(self, comment): + return comment.time + + item_updateddate = item_pubdate + + +class AtomCommentFeed(CommentFeed): + feed_type = Atom1Feed + subtitle = CommentFeed.description + + +class BlogFeed(Feed): + title = "Latest %s Blog Posts" % settings.SITE_NAME + link = "/" + description = "The latest blog posts from the %s" % settings.SITE_LONG_NAME + + def items(self): + return BlogPost.objects.filter( + visible=True, publish_on__lte=timezone.now() + ).order_by("-sticky", "-publish_on") + + def item_title(self, post): + return post.title + + def item_description(self, post): + key = "blog_feed:%d" % post.id + summary = cache.get(key) + if summary is None: + summary = str(markdown(post.summary or post.content)) + summary = escape_xml_illegal_chars(summary) + cache.set(key, summary, 86400) + return summary + + def item_pubdate(self, post): + return post.publish_on + + item_updateddate = item_pubdate + + +class AtomBlogFeed(BlogFeed): + feed_type = Atom1Feed + subtitle = BlogFeed.description diff --git a/judge/fixtures/demo.json b/judge/fixtures/demo.json index b9fbea7..9d22a9f 100644 --- a/judge/fixtures/demo.json +++ b/judge/fixtures/demo.json @@ -8,6 +8,7 @@ "ip": "10.0.2.2", "language": 1, "last_access": "2017-12-02T08:57:10.093Z", + "math_engine": "auto", "mute": false, "organizations": [ 1 @@ -17,7 +18,8 @@ "problem_count": 0, "rating": null, "timezone": "America/Toronto", - "user": 1 + "user": 1, + "user_script": "" }, "model": "judge.profile", "pk": 1 @@ -145,8 +147,25 @@ }, { "fields": { - "domain": "localhost:8000", - "name": "LQDOJ" + "author": 1, + "body": "This is your first comment!", + "hidden": false, + "level": 0, + "lft": 1, + "page": "b:1", + "parent": null, + "rght": 2, + "score": 0, + "time": "2017-12-02T08:46:54.007Z", + "tree_id": 1 + }, + "model": "judge.comment", + "pk": 1 + }, + { + "fields": { + "domain": "localhost:8081", + "name": "DMOJ: Modern Online Judge" }, "model": "sites.site", "pk": 1 diff --git a/judge/forms.py b/judge/forms.py index 47a4b36..f90664f 100644 --- a/judge/forms.py +++ b/judge/forms.py @@ -1,16 +1,13 @@ -import os -import secrets from operator import attrgetter -import pyotp -import time -import datetime +import pyotp from django import forms from django.conf import settings from django.contrib.auth.models import User from django.contrib.auth.forms import AuthenticationForm from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.core.validators import RegexValidator +from django.db import transaction from django.db.models import Q from django.forms import ( CharField, @@ -19,9 +16,8 @@ from django.forms import ( ModelForm, formset_factory, BaseModelFormSet, - FileField, ) -from django.urls import reverse_lazy, reverse +from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from django.utils import timezone @@ -29,7 +25,6 @@ from django_ace import AceWidget from judge.models import ( Contest, Language, - TestFormatterModel, Organization, PrivateMessage, Problem, @@ -38,12 +33,11 @@ from judge.models import ( Submission, BlogPost, ContestProblem, - TestFormatterModel, - ProfileInfo, ) from judge.widgets import ( HeavyPreviewPageDownWidget, + MathJaxPagedownWidget, PagedownWidget, Select2MultipleWidget, Select2Widget, @@ -51,9 +45,8 @@ from judge.widgets import ( HeavySelect2Widget, Select2MultipleWidget, DateTimePickerWidget, - ImageWidget, - DatePickerWidget, ) +from judge.tasks import rescore_contest def fix_unicode(string, unsafe=tuple("\u202a\u202b\u202d\u202e")): @@ -71,61 +64,55 @@ class UserForm(ModelForm): ] -class ProfileInfoForm(ModelForm): - class Meta: - model = ProfileInfo - fields = ["tshirt_size", "date_of_birth", "address"] - widgets = { - "tshirt_size": Select2Widget(attrs={"style": "width:100%"}), - "date_of_birth": DatePickerWidget, - "address": forms.TextInput(attrs={"style": "width:100%"}), - } - - class ProfileForm(ModelForm): class Meta: model = Profile fields = [ "about", + "organizations", "timezone", "language", "ace_theme", - "profile_image", - "css_background", + "user_script", ] widgets = { + "user_script": AceWidget(theme="github"), "timezone": Select2Widget(attrs={"style": "width:200px"}), "language": Select2Widget(attrs={"style": "width:200px"}), "ace_theme": Select2Widget(attrs={"style": "width:200px"}), - "profile_image": ImageWidget, - "css_background": forms.TextInput(), } + has_math_config = bool(settings.MATHOID_URL) + if has_math_config: + fields.append("math_engine") + widgets["math_engine"] = Select2Widget(attrs={"style": "width:200px"}) + if HeavyPreviewPageDownWidget is not None: widgets["about"] = HeavyPreviewPageDownWidget( preview=reverse_lazy("profile_preview"), attrs={"style": "max-width:700px;min-width:700px;width:700px"}, ) + def clean(self): + organizations = self.cleaned_data.get("organizations") or [] + max_orgs = settings.DMOJ_USER_MAX_ORGANIZATION_COUNT + + if sum(org.is_open for org in organizations) > max_orgs: + raise ValidationError( + _("You may not be part of more than {count} public groups.").format( + count=max_orgs + ) + ) + + return self.cleaned_data + def __init__(self, *args, **kwargs): user = kwargs.pop("user", None) super(ProfileForm, self).__init__(*args, **kwargs) - self.fields["profile_image"].required = False - - def clean_profile_image(self): - profile_image = self.cleaned_data.get("profile_image") - if profile_image: - if profile_image.size > 5 * 1024 * 1024: - raise ValidationError( - _("File size exceeds the maximum allowed limit of 5MB.") - ) - return profile_image - - -def file_size_validator(file): - limit = 10 * 1024 * 1024 - if file.size > limit: - raise ValidationError("File too large. Size should not exceed 10MB.") + if not user.has_perm("judge.edit_all_organization"): + self.fields["organizations"].queryset = Organization.objects.filter( + Q(is_open=True) | Q(id__in=user.profile.organizations.all()), + ) class ProblemSubmitForm(ModelForm): @@ -133,13 +120,9 @@ class ProblemSubmitForm(ModelForm): max_length=65536, widget=AceWidget(theme="twilight", no_ace_media=True) ) judge = ChoiceField(choices=(), widget=forms.HiddenInput(), required=False) - source_file = FileField(required=False, validators=[file_size_validator]) - def __init__(self, *args, judge_choices=(), request=None, problem=None, **kwargs): + def __init__(self, *args, judge_choices=(), **kwargs): super(ProblemSubmitForm, self).__init__(*args, **kwargs) - self.source_file_name = None - self.request = request - self.problem = problem self.fields["language"].empty_label = None self.fields["language"].label_from_instance = attrgetter("display_name") self.fields["language"].queryset = Language.objects.filter( @@ -152,36 +135,6 @@ class ProblemSubmitForm(ModelForm): ) self.fields["judge"].choices = judge_choices - def allow_url_as_source(self): - key = self.cleaned_data["language"].key - filename = self.files["source_file"].name - if key == "OUTPUT" and self.problem.data_files.output_only: - return filename.endswith(".zip") - if key == "SCAT": - return filename.endswith(".sb3") - return False - - def clean(self): - if "source_file" in self.files: - if self.allow_url_as_source(): - filename = self.files["source_file"].name - now = datetime.datetime.now() - timestamp = str(int(time.mktime(now.timetuple()))) - self.source_file_name = ( - timestamp + secrets.token_hex(5) + "." + filename.split(".")[-1] - ) - filepath = os.path.join( - settings.DMOJ_SUBMISSION_ROOT, self.source_file_name - ) - with open(filepath, "wb+") as destination: - for chunk in self.files["source_file"].chunks(): - destination.write(chunk) - self.cleaned_data["source"] = self.request.build_absolute_uri( - reverse("submission_source_file", args=(self.source_file_name,)) - ) - del self.files["source_file"] - return self.cleaned_data - class Meta: model = Submission fields = ["language"] @@ -195,32 +148,16 @@ class EditOrganizationForm(ModelForm): "slug", "short_name", "about", - "organization_image", + "logo_override_image", "admins", "is_open", ] - widgets = { - "admins": Select2MultipleWidget(), - "organization_image": ImageWidget, - } + widgets = {"admins": Select2MultipleWidget()} if HeavyPreviewPageDownWidget is not None: widgets["about"] = HeavyPreviewPageDownWidget( preview=reverse_lazy("organization_preview") ) - def __init__(self, *args, **kwargs): - super(EditOrganizationForm, self).__init__(*args, **kwargs) - self.fields["organization_image"].required = False - - def clean_organization_image(self): - organization_image = self.cleaned_data.get("organization_image") - if organization_image: - if organization_image.size > 5 * 1024 * 1024: - raise ValidationError( - _("File size exceeds the maximum allowed limit of 5MB.") - ) - return organization_image - class AddOrganizationForm(ModelForm): class Meta: @@ -230,7 +167,7 @@ class AddOrganizationForm(ModelForm): "slug", "short_name", "about", - "organization_image", + "logo_override_image", "is_open", ] widgets = {} @@ -242,7 +179,6 @@ class AddOrganizationForm(ModelForm): def __init__(self, *args, **kwargs): self.request = kwargs.pop("request", None) super(AddOrganizationForm, self).__init__(*args, **kwargs) - self.fields["organization_image"].required = False def save(self, commit=True): res = super(AddOrganizationForm, self).save(commit=False) @@ -304,9 +240,16 @@ class EditOrganizationContestForm(ModelForm): "view_contest_scoreboard", ]: self.fields[field].widget.data_url = ( - self.fields[field].widget.get_url() + f"?org_id={self.org_id}" + self.fields[field].widget.get_url() + "?org_id=1" ) + def save(self, commit=True): + res = super(EditOrganizationContestForm, self).save(commit=False) + if commit: + res.save() + transaction.on_commit(rescore_contest.s(res.key).delay) + return res + class Meta: model = Contest fields = ( @@ -320,13 +263,11 @@ class EditOrganizationContestForm(ModelForm): "curators", "testers", "time_limit", - "freeze_after", "use_clarifications", "hide_problem_tags", - "public_scoreboard", "scoreboard_visibility", + "run_pretests_only", "points_precision", - "rate_limit", "description", "og_image", "logo_override_image", @@ -369,7 +310,7 @@ class AddOrganizationMemberForm(ModelForm): label=_("New users"), ) - def clean_new_users(self): + def clean(self): new_users = self.cleaned_data.get("new_users") or "" usernames = new_users.split() invalid_usernames = [] @@ -387,7 +328,8 @@ class AddOrganizationMemberForm(ModelForm): usernames=str(invalid_usernames) ) ) - return valid_usernames + self.cleaned_data["new_users"] = valid_usernames + return self.cleaned_data class Meta: model = Organization @@ -435,15 +377,13 @@ class NewMessageForm(ModelForm): fields = ["title", "content"] widgets = {} if PagedownWidget is not None: - widgets["content"] = PagedownWidget() + widgets["content"] = MathJaxPagedownWidget() class CustomAuthenticationForm(AuthenticationForm): def __init__(self, *args, **kwargs): super(CustomAuthenticationForm, self).__init__(*args, **kwargs) - self.fields["username"].widget.attrs.update( - {"placeholder": _("Username/Email")} - ) + self.fields["username"].widget.attrs.update({"placeholder": _("Username")}) self.fields["password"].widget.attrs.update({"placeholder": _("Password")}) self.has_google_auth = self._has_social_auth("GOOGLE_OAUTH2") @@ -506,15 +446,6 @@ class ContestCloneForm(Form): max_length=20, validators=[RegexValidator("^[a-z0-9]+$", _("Contest id must be ^[a-z0-9]+$"))], ) - organization = ChoiceField(choices=(), required=True) - - def __init__(self, *args, org_choices=(), profile=None, **kwargs): - super(ContestCloneForm, self).__init__(*args, **kwargs) - self.fields["organization"].widget = Select2Widget( - attrs={"style": "width: 100%", "data-placeholder": _("Group")}, - ) - self.fields["organization"].choices = org_choices - self.profile = profile def clean_key(self): key = self.cleaned_data["key"] @@ -522,16 +453,6 @@ class ContestCloneForm(Form): raise ValidationError(_("Contest with key already exists.")) return key - def clean_organization(self): - organization_id = self.cleaned_data["organization"] - try: - organization = Organization.objects.get(id=organization_id) - except Exception: - raise ValidationError(_("Group doesn't exist.")) - if not organization.admins.filter(id=self.profile.id).exists(): - raise ValidationError(_("You don't have permission in this group.")) - return organization - class ProblemPointsVoteForm(ModelForm): class Meta: @@ -547,53 +468,19 @@ class ContestProblemForm(ModelForm): "problem", "points", "partial", - "show_testcases", + "output_prefix_override", "max_submissions", ) widgets = { "problem": HeavySelect2Widget( - data_view="problem_select2", attrs={"style": "width: 100%"} + data_view="problem_select2", attrs={"style": "width:100%"} ), } -class ContestProblemModelFormSet(BaseModelFormSet): - def is_valid(self): - valid = super().is_valid() - - if not valid: - return valid - - problems = set() - duplicates = [] - - for form in self.forms: - if form.cleaned_data and not form.cleaned_data.get("DELETE", False): - problem = form.cleaned_data.get("problem") - if problem in problems: - duplicates.append(problem) - else: - problems.add(problem) - - if duplicates: - for form in self.forms: - problem = form.cleaned_data.get("problem") - if problem in duplicates: - form.add_error("problem", _("This problem is duplicated.")) - return False - - return True - - class ContestProblemFormSet( formset_factory( - ContestProblemForm, formset=ContestProblemModelFormSet, extra=6, can_delete=True + ContestProblemForm, formset=BaseModelFormSet, extra=6, can_delete=True ) ): model = ContestProblem - - -class TestFormatterForm(ModelForm): - class Meta: - model = TestFormatterModel - fields = ["file"] diff --git a/judge/highlight_code.py b/judge/highlight_code.py index f5c91e3..ce407de 100644 --- a/judge/highlight_code.py +++ b/judge/highlight_code.py @@ -1,13 +1,44 @@ from django.utils.html import escape, mark_safe -from judge.markdown import markdown __all__ = ["highlight_code"] -def highlight_code(code, language, linenos=True, title=None): - linenos_option = 'linenums="1"' if linenos else "" - title_option = f'title="{title}"' if title else "" - options = f"{{.{language} {linenos_option} {title_option}}}" +def _make_pre_code(code): + return mark_safe("
" + escape(code) + "
") - value = f"```{options}\n{code}\n```\n" - return mark_safe(markdown(value)) + +try: + import pygments + import pygments.lexers + import pygments.formatters + import pygments.util +except ImportError: + + def highlight_code(code, language, cssclass=None): + return _make_pre_code(code) + +else: + + def highlight_code(code, language, cssclass="codehilite", linenos=True): + try: + lexer = pygments.lexers.get_lexer_by_name(language) + except pygments.util.ClassNotFound: + return _make_pre_code(code) + + if linenos: + return mark_safe( + pygments.highlight( + code, + lexer, + pygments.formatters.HtmlFormatter( + cssclass=cssclass, linenos="table", wrapcode=True + ), + ) + ) + return mark_safe( + pygments.highlight( + code, + lexer, + pygments.formatters.HtmlFormatter(cssclass=cssclass, wrapcode=True), + ) + ) diff --git a/judge/jinja2/__init__.py b/judge/jinja2/__init__.py index e24ea8c..93d0ed5 100644 --- a/judge/jinja2/__init__.py +++ b/judge/jinja2/__init__.py @@ -21,8 +21,8 @@ from . import ( render, social, spaceless, + submission, timedelta, - comment, ) from . import registry diff --git a/judge/jinja2/comment.py b/judge/jinja2/comment.py deleted file mode 100644 index 6baa365..0000000 --- a/judge/jinja2/comment.py +++ /dev/null @@ -1,12 +0,0 @@ -from . import registry - -from django.contrib.contenttypes.models import ContentType - -from judge.models.comment import get_visible_comment_count -from judge.caching import cache_wrapper - - -@registry.function -def comment_count(obj): - content_type = ContentType.objects.get_for_model(obj) - return get_visible_comment_count(content_type, obj.pk) diff --git a/judge/jinja2/datetime.py b/judge/jinja2/datetime.py index ce7cf32..eb0ec41 100644 --- a/judge/jinja2/datetime.py +++ b/judge/jinja2/datetime.py @@ -23,5 +23,5 @@ registry.filter(localtime_wrapper(time)) @registry.function @registry.render_with("widgets/relative-time.html") -def relative_time(time, format=_("N j, Y, g:i a"), rel=_("{time}"), abs=_("{time}")): +def relative_time(time, format=_("N j, Y, g:i a"), rel=_("{time}"), abs=_("on {time}")): return {"time": time, "format": format, "rel_format": rel, "abs_format": abs} diff --git a/judge/jinja2/gravatar.py b/judge/jinja2/gravatar.py index 175992f..2848d92 100644 --- a/judge/jinja2/gravatar.py +++ b/judge/jinja2/gravatar.py @@ -9,16 +9,14 @@ from . import registry @registry.function -def gravatar(profile, size=80, default=None, profile_image=None, email=None): - if profile and not profile.is_muted: - if profile_image: - return profile_image - if profile and profile.profile_image_url: - return profile.profile_image_url - if profile: - email = email or profile.email +def gravatar(email, size=80, default=None): + if isinstance(email, Profile): if default is None: - default = profile.is_muted + default = email.mute + email = email.user.email + elif isinstance(email, AbstractUser): + email = email.email + gravatar_url = ( "//www.gravatar.com/avatar/" + hashlib.md5(utf8bytes(email.strip().lower())).hexdigest() diff --git a/judge/jinja2/markdown/__init__.py b/judge/jinja2/markdown/__init__.py index 18355d4..d54f103 100644 --- a/judge/jinja2/markdown/__init__.py +++ b/judge/jinja2/markdown/__init__.py @@ -1,7 +1,112 @@ from .. import registry -from judge.markdown import markdown as _markdown +import markdown as _markdown +import bleach +from django.utils.html import escape +from bs4 import BeautifulSoup +from pymdownx import superfences + + +EXTENSIONS = [ + "pymdownx.arithmatex", + "pymdownx.magiclink", + "pymdownx.betterem", + "pymdownx.details", + "pymdownx.emoji", + "pymdownx.inlinehilite", + "pymdownx.superfences", + "pymdownx.tasklist", + "markdown.extensions.footnotes", + "markdown.extensions.attr_list", + "markdown.extensions.def_list", + "markdown.extensions.tables", + "markdown.extensions.admonition", + "nl2br", + "mdx_breakless_lists", +] + +EXTENSION_CONFIGS = { + "pymdownx.superfences": { + "custom_fences": [ + { + "name": "sample", + "class": "no-border", + "format": superfences.fence_code_format, + } + ] + }, +} + +ALLOWED_TAGS = bleach.sanitizer.ALLOWED_TAGS + [ + "img", + "center", + "iframe", + "div", + "span", + "table", + "tr", + "td", + "th", + "tr", + "pre", + "code", + "p", + "hr", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "thead", + "tbody", + "sup", + "dl", + "dt", + "dd", + "br", + "details", + "summary", +] + +ALLOWED_ATTRS = ["src", "width", "height", "href", "class", "open"] @registry.filter def markdown(value, lazy_load=False): - return _markdown(value, lazy_load) + extensions = EXTENSIONS + html = _markdown.markdown( + value, extensions=extensions, extension_configs=EXTENSION_CONFIGS + ) + + # Don't clean mathjax + hash_script_tag = {} + soup = BeautifulSoup(html, "html.parser") + for script_tag in soup.find_all("script"): + allow_math_types = ["math/tex", "math/tex; mode=display"] + if script_tag.attrs.get("type", False) in allow_math_types: + hash_script_tag[str(hash(str(script_tag)))] = str(script_tag) + + for hashed_tag in hash_script_tag: + tag = hash_script_tag[hashed_tag] + html = html.replace(tag, hashed_tag) + + html = bleach.clean(html, tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRS) + + for hashed_tag in hash_script_tag: + tag = hash_script_tag[hashed_tag] + html = html.replace(hashed_tag, tag) + + if not html: + html = escape(value) + if lazy_load or True: + soup = BeautifulSoup(html, features="html.parser") + for img in soup.findAll("img"): + if img.get("src"): + img["data-src"] = img["src"] + img["src"] = "" + for img in soup.findAll("iframe"): + if img.get("src"): + img["data-src"] = img["src"] + img["src"] = "" + html = str(soup) + return '
%s
' % html diff --git a/judge/jinja2/reference.py b/judge/jinja2/reference.py index 274382e..49a6ef2 100644 --- a/judge/jinja2/reference.py +++ b/judge/jinja2/reference.py @@ -155,16 +155,16 @@ def item_title(item): @registry.function @registry.render_with("user/link.html") -def link_user(user, show_image=False): +def link_user(user): if isinstance(user, Profile): - profile = user + user, profile = user.user, user elif isinstance(user, AbstractUser): profile = user.profile - elif isinstance(user, int): - profile = Profile(id=user) + elif type(user).__name__ == "ContestRankingProfile": + user, profile = user.user, user else: raise ValueError("Expected profile or user, got %s" % (type(user),)) - return {"profile": profile, "show_image": show_image} + return {"user": user, "profile": profile} @registry.function diff --git a/judge/jinja2/social.py b/judge/jinja2/social.py index f7ea1c5..645809d 100644 --- a/judge/jinja2/social.py +++ b/judge/jinja2/social.py @@ -48,9 +48,5 @@ for name, template, url_func in SHARES: @registry.function def recaptcha_init(language=None): return get_template("snowpenguin/recaptcha/recaptcha_init.html").render( - { - "explicit": False, - "language": language, - "recaptcha_host": "https://google.com", - } + {"explicit": False, "language": language} ) diff --git a/judge/jinja2/submission.py b/judge/jinja2/submission.py new file mode 100644 index 0000000..7c39569 --- /dev/null +++ b/judge/jinja2/submission.py @@ -0,0 +1,36 @@ +from . import registry + + +@registry.function +def submission_layout( + submission, profile_id, user, editable_problem_ids, completed_problem_ids +): + problem_id = submission.problem_id + can_view = False + + if problem_id in editable_problem_ids: + can_view = True + + if profile_id == submission.user_id: + can_view = True + + if user.has_perm("judge.change_submission"): + can_view = True + + if user.has_perm("judge.view_all_submission"): + can_view = True + + if submission.problem.is_public and user.has_perm("judge.view_public_submission"): + can_view = True + + if submission.problem_id in completed_problem_ids: + can_view |= ( + submission.problem.is_public or profile_id in submission.problem.tester_ids + ) + + if not can_view and hasattr(submission, "contest"): + contest = submission.contest.participation.contest + if contest.is_editable_by(user): + can_view = True + + return can_view diff --git a/judge/logging.py b/judge/logging.py deleted file mode 100644 index a1a25be..0000000 --- a/judge/logging.py +++ /dev/null @@ -1,12 +0,0 @@ -import logging - -error_log = logging.getLogger("judge.errors") -debug_log = logging.getLogger("judge.debug") - - -def log_exception(msg): - error_log.exception(msg) - - -def log_debug(category, data): - debug_log.info(f"{category}: {data}") diff --git a/judge/management/commands/generate_data.py b/judge/management/commands/generate_data.py index 4fcaa4e..83827d9 100644 --- a/judge/management/commands/generate_data.py +++ b/judge/management/commands/generate_data.py @@ -1,5 +1,6 @@ from django.core.management.base import BaseCommand from judge.models import * +from collections import defaultdict import csv import os from django.conf import settings diff --git a/judge/management/commands/render_pdf.py b/judge/management/commands/render_pdf.py index 87324b4..238000f 100644 --- a/judge/management/commands/render_pdf.py +++ b/judge/management/commands/render_pdf.py @@ -89,13 +89,14 @@ class Command(BaseCommand): if trans is None else trans.description, "url": "", + "math_engine": maker.math_engine, } ) .replace('"//', '"https://') .replace("'//", "'https://") ) maker.title = problem_name - for file in "style.css": + for file in ("style.css", "pygment-github.css", "mathjax3_config.js"): maker.load(file, os.path.join(settings.DMOJ_RESOURCES, file)) maker.make(debug=True) if not maker.success: diff --git a/judge/markdown.py b/judge/markdown.py deleted file mode 100644 index 80eb21a..0000000 --- a/judge/markdown.py +++ /dev/null @@ -1,149 +0,0 @@ -import markdown as _markdown -import bleach -from django.utils.html import escape -from bs4 import BeautifulSoup -from pymdownx import superfences -from django.conf import settings -from urllib.parse import urlparse - -from judge.markdown_extensions import YouTubeExtension, EmoticonExtension - - -EXTENSIONS = [ - "pymdownx.arithmatex", - "pymdownx.magiclink", - "pymdownx.betterem", - "pymdownx.details", - "pymdownx.emoji", - "pymdownx.inlinehilite", - "pymdownx.superfences", - "pymdownx.highlight", - "pymdownx.tasklist", - "markdown.extensions.footnotes", - "markdown.extensions.attr_list", - "markdown.extensions.def_list", - "markdown.extensions.tables", - "markdown.extensions.admonition", - "nl2br", - "mdx_breakless_lists", - YouTubeExtension(), - EmoticonExtension(), -] - -EXTENSION_CONFIGS = { - "pymdownx.arithmatex": { - "generic": True, - }, - "pymdownx.superfences": { - "custom_fences": [ - { - "name": "sample", - "class": "no-border", - "format": superfences.fence_code_format, - } - ], - }, - "pymdownx.highlight": { - "auto_title": True, - "auto_title_map": { - "Text Only": "", - }, - }, -} - -ALLOWED_TAGS = list(bleach.sanitizer.ALLOWED_TAGS) + [ - "img", - "center", - "iframe", - "div", - "span", - "table", - "tr", - "td", - "th", - "tr", - "pre", - "code", - "p", - "hr", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "thead", - "tbody", - "sup", - "dl", - "dt", - "dd", - "br", - "details", - "summary", -] - -ALLOWED_ATTRS = [ - "src", - "width", - "height", - "href", - "class", - "open", - "title", - "frameborder", - "allow", - "allowfullscreen", - "loading", -] - - -def _wrap_img_iframe_with_lazy_load(soup): - for img in soup.findAll("img"): - if img.get("src"): - img["loading"] = "lazy" - for img in soup.findAll("iframe"): - if img.get("src"): - img["loading"] = "lazy" - return soup - - -def _wrap_images_with_featherlight(soup): - for img in soup.findAll("img"): - if img.get("src"): - link = soup.new_tag("a", href=img["src"], **{"data-featherlight": "image"}) - img.wrap(link) - return soup - - -def _open_external_links_in_new_tab(soup): - domain = settings.SITE_DOMAIN.lower() - for a in soup.findAll("a", href=True): - href = a["href"] - if href.startswith("http://") or href.startswith("https://"): - link_domain = urlparse(href).netloc.lower() - if link_domain != domain: - a["target"] = "_blank" - return soup - - -def markdown(value, lazy_load=False): - extensions = EXTENSIONS - html = _markdown.markdown( - value, extensions=extensions, extension_configs=EXTENSION_CONFIGS - ) - - html = bleach.clean(html, tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRS) - - if not html: - html = escape(value) - - soup = BeautifulSoup(html, features="html.parser") - if lazy_load: - soup = _wrap_img_iframe_with_lazy_load(soup) - - soup = _wrap_images_with_featherlight(soup) - soup = _open_external_links_in_new_tab(soup) - html = str(soup) - - return '
%s
' % html diff --git a/judge/markdown_extensions/__init__.py b/judge/markdown_extensions/__init__.py deleted file mode 100644 index bc405f3..0000000 --- a/judge/markdown_extensions/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .youtube import YouTubeExtension -from .emoticon import EmoticonExtension diff --git a/judge/markdown_extensions/emoticon.py b/judge/markdown_extensions/emoticon.py deleted file mode 100644 index 809b1d3..0000000 --- a/judge/markdown_extensions/emoticon.py +++ /dev/null @@ -1,112 +0,0 @@ -import markdown -from markdown.extensions import Extension -from markdown.inlinepatterns import InlineProcessor -import xml.etree.ElementTree as etree -import re - -EMOTICON_EMOJI_MAP = { - ":D": "\U0001F603", # Smiling Face with Open Mouth - ":)": "\U0001F642", # Slightly Smiling Face - ":-)": "\U0001F642", # Slightly Smiling Face with Nose - ":(": "\U0001F641", # Slightly Frowning Face - ":-(": "\U0001F641", # Slightly Frowning Face with Nose - ";)": "\U0001F609", # Winking Face - ";-)": "\U0001F609", # Winking Face with Nose - ":P": "\U0001F61B", # Face with Tongue - ":-P": "\U0001F61B", # Face with Tongue and Nose - ":p": "\U0001F61B", # Face with Tongue - ":-p": "\U0001F61B", # Face with Tongue and Nose - ";P": "\U0001F61C", # Winking Face with Tongue - ";-P": "\U0001F61C", # Winking Face with Tongue and Nose - ";p": "\U0001F61C", # Winking Face with Tongue - ";-p": "\U0001F61C", # Winking Face with Tongue and Nose - ":'(": "\U0001F622", # Crying Face - ":o": "\U0001F62E", # Face with Open Mouth - ":-o": "\U0001F62E", # Face with Open Mouth and Nose - ":O": "\U0001F62E", # Face with Open Mouth - ":-O": "\U0001F62E", # Face with Open Mouth and Nose - ":-0": "\U0001F62E", # Face with Open Mouth and Nose - ">:(": "\U0001F620", # Angry Face - ">:-(": "\U0001F620", # Angry Face with Nose - ">:)": "\U0001F608", # Smiling Face with Horns - ">:-)": "\U0001F608", # Smiling Face with Horns and Nose - "XD": "\U0001F606", # Grinning Squinting Face - "xD": "\U0001F606", # Grinning Squinting Face - "B)": "\U0001F60E", # Smiling Face with Sunglasses - "B-)": "\U0001F60E", # Smiling Face with Sunglasses and Nose - "O:)": "\U0001F607", # Smiling Face with Halo - "O:-)": "\U0001F607", # Smiling Face with Halo and Nose - "0:)": "\U0001F607", # Smiling Face with Halo - "0:-)": "\U0001F607", # Smiling Face with Halo and Nose - ">:P": "\U0001F92A", # Zany Face (sticking out tongue and winking) - ">:-P": "\U0001F92A", # Zany Face with Nose - ">:p": "\U0001F92A", # Zany Face (sticking out tongue and winking) - ">:-p": "\U0001F92A", # Zany Face with Nose - ":/": "\U0001F615", # Confused Face - ":-/": "\U0001F615", # Confused Face with Nose - ":\\": "\U0001F615", # Confused Face - ":-\\": "\U0001F615", # Confused Face with Nose - "3:)": "\U0001F608", # Smiling Face with Horns - "3:-)": "\U0001F608", # Smiling Face with Horns and Nose - "<3": "\u2764\uFE0F", # Red Heart - ":P": "\U0001F61D", # Face with Stuck-Out Tongue and Tightly-Closed Eyes - ":-/": "\U0001F615", # Confused Face - ":/": "\U0001F615", - ":\\": "\U0001F615", - ":-\\": "\U0001F615", - ":|": "\U0001F610", # Neutral Face - ":-|": "\U0001F610", - "8)": "\U0001F60E", # Smiling Face with Sunglasses - "8-)": "\U0001F60E", - "O:)": "\U0001F607", # Smiling Face with Halo - "O:-)": "\U0001F607", - ":3": "\U0001F60A", # Smiling Face with Smiling Eyes - "^.^": "\U0001F60A", - "-_-": "\U0001F611", # Expressionless Face - "T_T": "\U0001F62D", # Loudly Crying Face - "T.T": "\U0001F62D", - ">.<": "\U0001F623", # Persevering Face - "x_x": "\U0001F635", # Dizzy Face - "X_X": "\U0001F635", - ":]": "\U0001F600", # Grinning Face - ":[": "\U0001F641", # Slightly Frowning Face - "=]": "\U0001F600", - "=[": "\U0001F641", - "D:<": "\U0001F621", # Pouting Face - "D:": "\U0001F629", # Weary Face - "D=": "\U0001F6AB", # No Entry Sign (sometimes used to denote dismay or frustration) - ":'D": "\U0001F602", # Face with Tears of Joy - "D':": "\U0001F625", # Disappointed but Relieved Face - "D8": "\U0001F631", # Face Screaming in Fear - "-.-": "\U0001F644", # Face with Rolling Eyes - "-_-;": "\U0001F612", # Unamused -} - - -class EmoticonEmojiInlineProcessor(InlineProcessor): - def handleMatch(self, m, data): - emoticon = m.group(1) - emoji = EMOTICON_EMOJI_MAP.get(emoticon, "") - if emoji: - el = etree.Element("span") - el.text = markdown.util.AtomicString(emoji) - el.set("class", "big-emoji") - return el, m.start(0), m.end(0) - else: - return None, m.start(0), m.end(0) - - -class EmoticonExtension(Extension): - def extendMarkdown(self, md): - emoticon_pattern = ( - r"(?:(?<=\s)|^)" # Lookbehind for a whitespace character or the start of the string - r"(" + "|".join(map(re.escape, EMOTICON_EMOJI_MAP.keys())) + r")" - r"(?=\s|$)" # Lookahead for a whitespace character or the end of the string - ) - emoticon_processor = EmoticonEmojiInlineProcessor(emoticon_pattern, md) - md.inlinePatterns.register(emoticon_processor, "emoticon_to_emoji", 1) diff --git a/judge/markdown_extensions/youtube.py b/judge/markdown_extensions/youtube.py deleted file mode 100644 index 89a9fa8..0000000 --- a/judge/markdown_extensions/youtube.py +++ /dev/null @@ -1,36 +0,0 @@ -import markdown -from markdown.inlinepatterns import InlineProcessor -from markdown.extensions import Extension -import xml.etree.ElementTree as etree - -YOUTUBE_REGEX = ( - r"(https?://)?(www\.)?" "(youtube\.com/watch\?v=|youtu\.be/)" "([\w-]+)(&[\w=]*)?" -) - - -class YouTubeEmbedProcessor(InlineProcessor): - def handleMatch(self, m, data): - youtube_id = m.group(4) - if not youtube_id: - return None, None, None - - # Create an iframe element with the YouTube embed URL - iframe = etree.Element("iframe") - iframe.set("width", "100%") - iframe.set("height", "360") - iframe.set("src", f"https://www.youtube.com/embed/{youtube_id}") - iframe.set("frameborder", "0") - iframe.set("allowfullscreen", "true") - center = etree.Element("center") - center.append(iframe) - - # Return the iframe as the element to replace the match, along with the start and end indices - return center, m.start(0), m.end(0) - - -class YouTubeExtension(Extension): - def extendMarkdown(self, md): - # Create the YouTube link pattern - YOUTUBE_PATTERN = YouTubeEmbedProcessor(YOUTUBE_REGEX, md) - # Register the pattern to apply the YouTubeEmbedProcessor - md.inlinePatterns.register(YOUTUBE_PATTERN, "youtube", 175) diff --git a/judge/middleware.py b/judge/middleware.py index c08b2b9..19e579e 100644 --- a/judge/middleware.py +++ b/judge/middleware.py @@ -1,9 +1,3 @@ -import time -import logging -import random -import json -from datetime import datetime - from django.conf import settings from django.http import HttpResponseRedirect, Http404 from django.urls import Resolver404, resolve, reverse @@ -17,7 +11,6 @@ from judge.utils.views import generic_message USED_DOMAINS = ["www"] -URL_NAMES_BYPASS_SUBDOMAIN = ["submission_source_file"] class ShortCircuitMiddleware: @@ -118,10 +111,7 @@ class SubdomainMiddleware(object): subdomain = subdomain[:-1] - if ( - subdomain in USED_DOMAINS - or resolve(request.path).url_name in URL_NAMES_BYPASS_SUBDOMAIN - ): + if subdomain in USED_DOMAINS: return self.get_response(request) try: @@ -148,33 +138,3 @@ class SubdomainMiddleware(object): status=404, ) return self.get_response(request) - - -class SlowRequestMiddleware(object): - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - logger = logging.getLogger("judge.request_time") - logger_slow = logging.getLogger("judge.slow_request") - start_time = time.time() - response = self.get_response(request) - if response.status_code == 200: - try: - response_time = time.time() - start_time - url_name = resolve(request.path).url_name - message = { - "url_name": url_name, - "response_time": response_time * 1000, - "profile": request.user.username, - "date": datetime.now().strftime("%Y/%m/%d"), - "url": request.build_absolute_uri(), - "method": request.method, - } - if response_time > 9: - logger_slow.info(json.dumps(message)) - if random.random() < 0.1: - logger.info(json.dumps(message)) - except Exception: - pass - return response diff --git a/judge/migrations/0091_compiler_message_ansi2html.py b/judge/migrations/0091_compiler_message_ansi2html.py index 607ddee..32db431 100644 --- a/judge/migrations/0091_compiler_message_ansi2html.py +++ b/judge/migrations/0091_compiler_message_ansi2html.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import lxml.html as lh from django.db import migrations -from lxml_html_clean import clean_html +from lxml.html.clean import clean_html def strip_error_html(apps, schema_editor): diff --git a/judge/migrations/0150_alter_profile_timezone.py b/judge/migrations/0150_alter_profile_timezone.py index 20b3e12..94287b7 100644 --- a/judge/migrations/0150_alter_profile_timezone.py +++ b/judge/migrations/0150_alter_profile_timezone.py @@ -6,671 +6,13 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ("judge", "0149_auto_20230202_0902"), + ('judge', '0149_auto_20230202_0902'), ] operations = [ migrations.AlterField( - model_name="profile", - name="timezone", - field=models.CharField( - choices=[ - ( - "Africa", - [ - ("Africa/Abidjan", "Abidjan"), - ("Africa/Accra", "Accra"), - ("Africa/Addis_Ababa", "Addis_Ababa"), - ("Africa/Algiers", "Algiers"), - ("Africa/Asmara", "Asmara"), - ("Africa/Asmera", "Asmera"), - ("Africa/Bamako", "Bamako"), - ("Africa/Bangui", "Bangui"), - ("Africa/Banjul", "Banjul"), - ("Africa/Bissau", "Bissau"), - ("Africa/Blantyre", "Blantyre"), - ("Africa/Brazzaville", "Brazzaville"), - ("Africa/Bujumbura", "Bujumbura"), - ("Africa/Cairo", "Cairo"), - ("Africa/Casablanca", "Casablanca"), - ("Africa/Ceuta", "Ceuta"), - ("Africa/Conakry", "Conakry"), - ("Africa/Dakar", "Dakar"), - ("Africa/Dar_es_Salaam", "Dar_es_Salaam"), - ("Africa/Djibouti", "Djibouti"), - ("Africa/Douala", "Douala"), - ("Africa/El_Aaiun", "El_Aaiun"), - ("Africa/Freetown", "Freetown"), - ("Africa/Gaborone", "Gaborone"), - ("Africa/Harare", "Harare"), - ("Africa/Johannesburg", "Johannesburg"), - ("Africa/Juba", "Juba"), - ("Africa/Kampala", "Kampala"), - ("Africa/Khartoum", "Khartoum"), - ("Africa/Kigali", "Kigali"), - ("Africa/Kinshasa", "Kinshasa"), - ("Africa/Lagos", "Lagos"), - ("Africa/Libreville", "Libreville"), - ("Africa/Lome", "Lome"), - ("Africa/Luanda", "Luanda"), - ("Africa/Lubumbashi", "Lubumbashi"), - ("Africa/Lusaka", "Lusaka"), - ("Africa/Malabo", "Malabo"), - ("Africa/Maputo", "Maputo"), - ("Africa/Maseru", "Maseru"), - ("Africa/Mbabane", "Mbabane"), - ("Africa/Mogadishu", "Mogadishu"), - ("Africa/Monrovia", "Monrovia"), - ("Africa/Nairobi", "Nairobi"), - ("Africa/Ndjamena", "Ndjamena"), - ("Africa/Niamey", "Niamey"), - ("Africa/Nouakchott", "Nouakchott"), - ("Africa/Ouagadougou", "Ouagadougou"), - ("Africa/Porto-Novo", "Porto-Novo"), - ("Africa/Sao_Tome", "Sao_Tome"), - ("Africa/Timbuktu", "Timbuktu"), - ("Africa/Tripoli", "Tripoli"), - ("Africa/Tunis", "Tunis"), - ("Africa/Windhoek", "Windhoek"), - ], - ), - ( - "America", - [ - ("America/Adak", "Adak"), - ("America/Anchorage", "Anchorage"), - ("America/Anguilla", "Anguilla"), - ("America/Antigua", "Antigua"), - ("America/Araguaina", "Araguaina"), - ( - "America/Argentina/Buenos_Aires", - "Argentina/Buenos_Aires", - ), - ("America/Argentina/Catamarca", "Argentina/Catamarca"), - ( - "America/Argentina/ComodRivadavia", - "Argentina/ComodRivadavia", - ), - ("America/Argentina/Cordoba", "Argentina/Cordoba"), - ("America/Argentina/Jujuy", "Argentina/Jujuy"), - ("America/Argentina/La_Rioja", "Argentina/La_Rioja"), - ("America/Argentina/Mendoza", "Argentina/Mendoza"), - ( - "America/Argentina/Rio_Gallegos", - "Argentina/Rio_Gallegos", - ), - ("America/Argentina/Salta", "Argentina/Salta"), - ("America/Argentina/San_Juan", "Argentina/San_Juan"), - ("America/Argentina/San_Luis", "Argentina/San_Luis"), - ("America/Argentina/Tucuman", "Argentina/Tucuman"), - ("America/Argentina/Ushuaia", "Argentina/Ushuaia"), - ("America/Aruba", "Aruba"), - ("America/Asuncion", "Asuncion"), - ("America/Atikokan", "Atikokan"), - ("America/Atka", "Atka"), - ("America/Bahia", "Bahia"), - ("America/Bahia_Banderas", "Bahia_Banderas"), - ("America/Barbados", "Barbados"), - ("America/Belem", "Belem"), - ("America/Belize", "Belize"), - ("America/Blanc-Sablon", "Blanc-Sablon"), - ("America/Boa_Vista", "Boa_Vista"), - ("America/Bogota", "Bogota"), - ("America/Boise", "Boise"), - ("America/Buenos_Aires", "Buenos_Aires"), - ("America/Cambridge_Bay", "Cambridge_Bay"), - ("America/Campo_Grande", "Campo_Grande"), - ("America/Cancun", "Cancun"), - ("America/Caracas", "Caracas"), - ("America/Catamarca", "Catamarca"), - ("America/Cayenne", "Cayenne"), - ("America/Cayman", "Cayman"), - ("America/Chicago", "Chicago"), - ("America/Chihuahua", "Chihuahua"), - ("America/Coral_Harbour", "Coral_Harbour"), - ("America/Cordoba", "Cordoba"), - ("America/Costa_Rica", "Costa_Rica"), - ("America/Creston", "Creston"), - ("America/Cuiaba", "Cuiaba"), - ("America/Curacao", "Curacao"), - ("America/Danmarkshavn", "Danmarkshavn"), - ("America/Dawson", "Dawson"), - ("America/Dawson_Creek", "Dawson_Creek"), - ("America/Denver", "Denver"), - ("America/Detroit", "Detroit"), - ("America/Dominica", "Dominica"), - ("America/Edmonton", "Edmonton"), - ("America/Eirunepe", "Eirunepe"), - ("America/El_Salvador", "El_Salvador"), - ("America/Ensenada", "Ensenada"), - ("America/Fort_Nelson", "Fort_Nelson"), - ("America/Fort_Wayne", "Fort_Wayne"), - ("America/Fortaleza", "Fortaleza"), - ("America/Glace_Bay", "Glace_Bay"), - ("America/Godthab", "Godthab"), - ("America/Goose_Bay", "Goose_Bay"), - ("America/Grand_Turk", "Grand_Turk"), - ("America/Grenada", "Grenada"), - ("America/Guadeloupe", "Guadeloupe"), - ("America/Guatemala", "Guatemala"), - ("America/Guayaquil", "Guayaquil"), - ("America/Guyana", "Guyana"), - ("America/Halifax", "Halifax"), - ("America/Havana", "Havana"), - ("America/Hermosillo", "Hermosillo"), - ("America/Indiana/Indianapolis", "Indiana/Indianapolis"), - ("America/Indiana/Knox", "Indiana/Knox"), - ("America/Indiana/Marengo", "Indiana/Marengo"), - ("America/Indiana/Petersburg", "Indiana/Petersburg"), - ("America/Indiana/Tell_City", "Indiana/Tell_City"), - ("America/Indiana/Vevay", "Indiana/Vevay"), - ("America/Indiana/Vincennes", "Indiana/Vincennes"), - ("America/Indiana/Winamac", "Indiana/Winamac"), - ("America/Indianapolis", "Indianapolis"), - ("America/Inuvik", "Inuvik"), - ("America/Iqaluit", "Iqaluit"), - ("America/Jamaica", "Jamaica"), - ("America/Jujuy", "Jujuy"), - ("America/Juneau", "Juneau"), - ("America/Kentucky/Louisville", "Kentucky/Louisville"), - ("America/Kentucky/Monticello", "Kentucky/Monticello"), - ("America/Knox_IN", "Knox_IN"), - ("America/Kralendijk", "Kralendijk"), - ("America/La_Paz", "La_Paz"), - ("America/Lima", "Lima"), - ("America/Los_Angeles", "Los_Angeles"), - ("America/Louisville", "Louisville"), - ("America/Lower_Princes", "Lower_Princes"), - ("America/Maceio", "Maceio"), - ("America/Managua", "Managua"), - ("America/Manaus", "Manaus"), - ("America/Marigot", "Marigot"), - ("America/Martinique", "Martinique"), - ("America/Matamoros", "Matamoros"), - ("America/Mazatlan", "Mazatlan"), - ("America/Mendoza", "Mendoza"), - ("America/Menominee", "Menominee"), - ("America/Merida", "Merida"), - ("America/Metlakatla", "Metlakatla"), - ("America/Mexico_City", "Mexico_City"), - ("America/Miquelon", "Miquelon"), - ("America/Moncton", "Moncton"), - ("America/Monterrey", "Monterrey"), - ("America/Montevideo", "Montevideo"), - ("America/Montreal", "Montreal"), - ("America/Montserrat", "Montserrat"), - ("America/Nassau", "Nassau"), - ("America/New_York", "New_York"), - ("America/Nipigon", "Nipigon"), - ("America/Nome", "Nome"), - ("America/Noronha", "Noronha"), - ("America/North_Dakota/Beulah", "North_Dakota/Beulah"), - ("America/North_Dakota/Center", "North_Dakota/Center"), - ( - "America/North_Dakota/New_Salem", - "North_Dakota/New_Salem", - ), - ("America/Nuuk", "Nuuk"), - ("America/Ojinaga", "Ojinaga"), - ("America/Panama", "Panama"), - ("America/Pangnirtung", "Pangnirtung"), - ("America/Paramaribo", "Paramaribo"), - ("America/Phoenix", "Phoenix"), - ("America/Port-au-Prince", "Port-au-Prince"), - ("America/Port_of_Spain", "Port_of_Spain"), - ("America/Porto_Acre", "Porto_Acre"), - ("America/Porto_Velho", "Porto_Velho"), - ("America/Puerto_Rico", "Puerto_Rico"), - ("America/Punta_Arenas", "Punta_Arenas"), - ("America/Rainy_River", "Rainy_River"), - ("America/Rankin_Inlet", "Rankin_Inlet"), - ("America/Recife", "Recife"), - ("America/Regina", "Regina"), - ("America/Resolute", "Resolute"), - ("America/Rio_Branco", "Rio_Branco"), - ("America/Rosario", "Rosario"), - ("America/Santa_Isabel", "Santa_Isabel"), - ("America/Santarem", "Santarem"), - ("America/Santiago", "Santiago"), - ("America/Santo_Domingo", "Santo_Domingo"), - ("America/Sao_Paulo", "Sao_Paulo"), - ("America/Scoresbysund", "Scoresbysund"), - ("America/Shiprock", "Shiprock"), - ("America/Sitka", "Sitka"), - ("America/St_Barthelemy", "St_Barthelemy"), - ("America/St_Johns", "St_Johns"), - ("America/St_Kitts", "St_Kitts"), - ("America/St_Lucia", "St_Lucia"), - ("America/St_Thomas", "St_Thomas"), - ("America/St_Vincent", "St_Vincent"), - ("America/Swift_Current", "Swift_Current"), - ("America/Tegucigalpa", "Tegucigalpa"), - ("America/Thule", "Thule"), - ("America/Thunder_Bay", "Thunder_Bay"), - ("America/Tijuana", "Tijuana"), - ("America/Toronto", "Toronto"), - ("America/Tortola", "Tortola"), - ("America/Vancouver", "Vancouver"), - ("America/Virgin", "Virgin"), - ("America/Whitehorse", "Whitehorse"), - ("America/Winnipeg", "Winnipeg"), - ("America/Yakutat", "Yakutat"), - ("America/Yellowknife", "Yellowknife"), - ], - ), - ( - "Antarctica", - [ - ("Antarctica/Casey", "Casey"), - ("Antarctica/Davis", "Davis"), - ("Antarctica/DumontDUrville", "DumontDUrville"), - ("Antarctica/Macquarie", "Macquarie"), - ("Antarctica/Mawson", "Mawson"), - ("Antarctica/McMurdo", "McMurdo"), - ("Antarctica/Palmer", "Palmer"), - ("Antarctica/Rothera", "Rothera"), - ("Antarctica/South_Pole", "South_Pole"), - ("Antarctica/Syowa", "Syowa"), - ("Antarctica/Troll", "Troll"), - ("Antarctica/Vostok", "Vostok"), - ], - ), - ("Arctic", [("Arctic/Longyearbyen", "Longyearbyen")]), - ( - "Asia", - [ - ("Asia/Aden", "Aden"), - ("Asia/Almaty", "Almaty"), - ("Asia/Amman", "Amman"), - ("Asia/Anadyr", "Anadyr"), - ("Asia/Aqtau", "Aqtau"), - ("Asia/Aqtobe", "Aqtobe"), - ("Asia/Ashgabat", "Ashgabat"), - ("Asia/Ashkhabad", "Ashkhabad"), - ("Asia/Atyrau", "Atyrau"), - ("Asia/Baghdad", "Baghdad"), - ("Asia/Bahrain", "Bahrain"), - ("Asia/Baku", "Baku"), - ("Asia/Bangkok", "Bangkok"), - ("Asia/Barnaul", "Barnaul"), - ("Asia/Beirut", "Beirut"), - ("Asia/Bishkek", "Bishkek"), - ("Asia/Brunei", "Brunei"), - ("Asia/Calcutta", "Calcutta"), - ("Asia/Chita", "Chita"), - ("Asia/Choibalsan", "Choibalsan"), - ("Asia/Chongqing", "Chongqing"), - ("Asia/Chungking", "Chungking"), - ("Asia/Colombo", "Colombo"), - ("Asia/Dacca", "Dacca"), - ("Asia/Damascus", "Damascus"), - ("Asia/Dhaka", "Dhaka"), - ("Asia/Dili", "Dili"), - ("Asia/Dubai", "Dubai"), - ("Asia/Dushanbe", "Dushanbe"), - ("Asia/Famagusta", "Famagusta"), - ("Asia/Gaza", "Gaza"), - ("Asia/Harbin", "Harbin"), - ("Asia/Hebron", "Hebron"), - ("Asia/Ho_Chi_Minh", "Ho_Chi_Minh"), - ("Asia/Hong_Kong", "Hong_Kong"), - ("Asia/Hovd", "Hovd"), - ("Asia/Irkutsk", "Irkutsk"), - ("Asia/Istanbul", "Istanbul"), - ("Asia/Jakarta", "Jakarta"), - ("Asia/Jayapura", "Jayapura"), - ("Asia/Jerusalem", "Jerusalem"), - ("Asia/Kabul", "Kabul"), - ("Asia/Kamchatka", "Kamchatka"), - ("Asia/Karachi", "Karachi"), - ("Asia/Kashgar", "Kashgar"), - ("Asia/Kathmandu", "Kathmandu"), - ("Asia/Katmandu", "Katmandu"), - ("Asia/Khandyga", "Khandyga"), - ("Asia/Kolkata", "Kolkata"), - ("Asia/Krasnoyarsk", "Krasnoyarsk"), - ("Asia/Kuala_Lumpur", "Kuala_Lumpur"), - ("Asia/Kuching", "Kuching"), - ("Asia/Kuwait", "Kuwait"), - ("Asia/Macao", "Macao"), - ("Asia/Macau", "Macau"), - ("Asia/Magadan", "Magadan"), - ("Asia/Makassar", "Makassar"), - ("Asia/Manila", "Manila"), - ("Asia/Muscat", "Muscat"), - ("Asia/Nicosia", "Nicosia"), - ("Asia/Novokuznetsk", "Novokuznetsk"), - ("Asia/Novosibirsk", "Novosibirsk"), - ("Asia/Omsk", "Omsk"), - ("Asia/Oral", "Oral"), - ("Asia/Phnom_Penh", "Phnom_Penh"), - ("Asia/Pontianak", "Pontianak"), - ("Asia/Pyongyang", "Pyongyang"), - ("Asia/Qatar", "Qatar"), - ("Asia/Qostanay", "Qostanay"), - ("Asia/Qyzylorda", "Qyzylorda"), - ("Asia/Rangoon", "Rangoon"), - ("Asia/Riyadh", "Riyadh"), - ("Asia/Saigon", "Saigon"), - ("Asia/Sakhalin", "Sakhalin"), - ("Asia/Samarkand", "Samarkand"), - ("Asia/Seoul", "Seoul"), - ("Asia/Shanghai", "Shanghai"), - ("Asia/Singapore", "Singapore"), - ("Asia/Srednekolymsk", "Srednekolymsk"), - ("Asia/Taipei", "Taipei"), - ("Asia/Tashkent", "Tashkent"), - ("Asia/Tbilisi", "Tbilisi"), - ("Asia/Tehran", "Tehran"), - ("Asia/Tel_Aviv", "Tel_Aviv"), - ("Asia/Thimbu", "Thimbu"), - ("Asia/Thimphu", "Thimphu"), - ("Asia/Tokyo", "Tokyo"), - ("Asia/Tomsk", "Tomsk"), - ("Asia/Ujung_Pandang", "Ujung_Pandang"), - ("Asia/Ulaanbaatar", "Ulaanbaatar"), - ("Asia/Ulan_Bator", "Ulan_Bator"), - ("Asia/Urumqi", "Urumqi"), - ("Asia/Ust-Nera", "Ust-Nera"), - ("Asia/Vientiane", "Vientiane"), - ("Asia/Vladivostok", "Vladivostok"), - ("Asia/Yakutsk", "Yakutsk"), - ("Asia/Yangon", "Yangon"), - ("Asia/Yekaterinburg", "Yekaterinburg"), - ("Asia/Yerevan", "Yerevan"), - ], - ), - ( - "Atlantic", - [ - ("Atlantic/Azores", "Azores"), - ("Atlantic/Bermuda", "Bermuda"), - ("Atlantic/Canary", "Canary"), - ("Atlantic/Cape_Verde", "Cape_Verde"), - ("Atlantic/Faeroe", "Faeroe"), - ("Atlantic/Faroe", "Faroe"), - ("Atlantic/Jan_Mayen", "Jan_Mayen"), - ("Atlantic/Madeira", "Madeira"), - ("Atlantic/Reykjavik", "Reykjavik"), - ("Atlantic/South_Georgia", "South_Georgia"), - ("Atlantic/St_Helena", "St_Helena"), - ("Atlantic/Stanley", "Stanley"), - ], - ), - ( - "Australia", - [ - ("Australia/ACT", "ACT"), - ("Australia/Adelaide", "Adelaide"), - ("Australia/Brisbane", "Brisbane"), - ("Australia/Broken_Hill", "Broken_Hill"), - ("Australia/Canberra", "Canberra"), - ("Australia/Currie", "Currie"), - ("Australia/Darwin", "Darwin"), - ("Australia/Eucla", "Eucla"), - ("Australia/Hobart", "Hobart"), - ("Australia/LHI", "LHI"), - ("Australia/Lindeman", "Lindeman"), - ("Australia/Lord_Howe", "Lord_Howe"), - ("Australia/Melbourne", "Melbourne"), - ("Australia/NSW", "NSW"), - ("Australia/North", "North"), - ("Australia/Perth", "Perth"), - ("Australia/Queensland", "Queensland"), - ("Australia/South", "South"), - ("Australia/Sydney", "Sydney"), - ("Australia/Tasmania", "Tasmania"), - ("Australia/Victoria", "Victoria"), - ("Australia/West", "West"), - ("Australia/Yancowinna", "Yancowinna"), - ], - ), - ( - "Brazil", - [ - ("Brazil/Acre", "Acre"), - ("Brazil/DeNoronha", "DeNoronha"), - ("Brazil/East", "East"), - ("Brazil/West", "West"), - ], - ), - ( - "Canada", - [ - ("Canada/Atlantic", "Atlantic"), - ("Canada/Central", "Central"), - ("Canada/Eastern", "Eastern"), - ("Canada/Mountain", "Mountain"), - ("Canada/Newfoundland", "Newfoundland"), - ("Canada/Pacific", "Pacific"), - ("Canada/Saskatchewan", "Saskatchewan"), - ("Canada/Yukon", "Yukon"), - ], - ), - ( - "Chile", - [ - ("Chile/Continental", "Continental"), - ("Chile/EasterIsland", "EasterIsland"), - ], - ), - ( - "Etc", - [ - ("Etc/Greenwich", "Greenwich"), - ("Etc/UCT", "UCT"), - ("Etc/UTC", "UTC"), - ("Etc/Universal", "Universal"), - ("Etc/Zulu", "Zulu"), - ], - ), - ( - "Europe", - [ - ("Europe/Amsterdam", "Amsterdam"), - ("Europe/Andorra", "Andorra"), - ("Europe/Astrakhan", "Astrakhan"), - ("Europe/Athens", "Athens"), - ("Europe/Belfast", "Belfast"), - ("Europe/Belgrade", "Belgrade"), - ("Europe/Berlin", "Berlin"), - ("Europe/Bratislava", "Bratislava"), - ("Europe/Brussels", "Brussels"), - ("Europe/Bucharest", "Bucharest"), - ("Europe/Budapest", "Budapest"), - ("Europe/Busingen", "Busingen"), - ("Europe/Chisinau", "Chisinau"), - ("Europe/Copenhagen", "Copenhagen"), - ("Europe/Dublin", "Dublin"), - ("Europe/Gibraltar", "Gibraltar"), - ("Europe/Guernsey", "Guernsey"), - ("Europe/Helsinki", "Helsinki"), - ("Europe/Isle_of_Man", "Isle_of_Man"), - ("Europe/Istanbul", "Istanbul"), - ("Europe/Jersey", "Jersey"), - ("Europe/Kaliningrad", "Kaliningrad"), - ("Europe/Kiev", "Kiev"), - ("Europe/Kirov", "Kirov"), - ("Europe/Lisbon", "Lisbon"), - ("Europe/Ljubljana", "Ljubljana"), - ("Europe/London", "London"), - ("Europe/Luxembourg", "Luxembourg"), - ("Europe/Madrid", "Madrid"), - ("Europe/Malta", "Malta"), - ("Europe/Mariehamn", "Mariehamn"), - ("Europe/Minsk", "Minsk"), - ("Europe/Monaco", "Monaco"), - ("Europe/Moscow", "Moscow"), - ("Europe/Nicosia", "Nicosia"), - ("Europe/Oslo", "Oslo"), - ("Europe/Paris", "Paris"), - ("Europe/Podgorica", "Podgorica"), - ("Europe/Prague", "Prague"), - ("Europe/Riga", "Riga"), - ("Europe/Rome", "Rome"), - ("Europe/Samara", "Samara"), - ("Europe/San_Marino", "San_Marino"), - ("Europe/Sarajevo", "Sarajevo"), - ("Europe/Saratov", "Saratov"), - ("Europe/Simferopol", "Simferopol"), - ("Europe/Skopje", "Skopje"), - ("Europe/Sofia", "Sofia"), - ("Europe/Stockholm", "Stockholm"), - ("Europe/Tallinn", "Tallinn"), - ("Europe/Tirane", "Tirane"), - ("Europe/Tiraspol", "Tiraspol"), - ("Europe/Ulyanovsk", "Ulyanovsk"), - ("Europe/Uzhgorod", "Uzhgorod"), - ("Europe/Vaduz", "Vaduz"), - ("Europe/Vatican", "Vatican"), - ("Europe/Vienna", "Vienna"), - ("Europe/Vilnius", "Vilnius"), - ("Europe/Volgograd", "Volgograd"), - ("Europe/Warsaw", "Warsaw"), - ("Europe/Zagreb", "Zagreb"), - ("Europe/Zaporozhye", "Zaporozhye"), - ("Europe/Zurich", "Zurich"), - ], - ), - ( - "Indian", - [ - ("Indian/Antananarivo", "Antananarivo"), - ("Indian/Chagos", "Chagos"), - ("Indian/Christmas", "Christmas"), - ("Indian/Cocos", "Cocos"), - ("Indian/Comoro", "Comoro"), - ("Indian/Kerguelen", "Kerguelen"), - ("Indian/Mahe", "Mahe"), - ("Indian/Maldives", "Maldives"), - ("Indian/Mauritius", "Mauritius"), - ("Indian/Mayotte", "Mayotte"), - ("Indian/Reunion", "Reunion"), - ], - ), - ( - "Mexico", - [ - ("Mexico/BajaNorte", "BajaNorte"), - ("Mexico/BajaSur", "BajaSur"), - ("Mexico/General", "General"), - ], - ), - ( - "Other", - [ - ("CET", "CET"), - ("CST6CDT", "CST6CDT"), - ("Cuba", "Cuba"), - ("EET", "EET"), - ("EST", "EST"), - ("EST5EDT", "EST5EDT"), - ("Egypt", "Egypt"), - ("Eire", "Eire"), - ("GB", "GB"), - ("GB-Eire", "GB-Eire"), - ("Greenwich", "Greenwich"), - ("HST", "HST"), - ("Hongkong", "Hongkong"), - ("Iceland", "Iceland"), - ("Iran", "Iran"), - ("Israel", "Israel"), - ("Jamaica", "Jamaica"), - ("Japan", "Japan"), - ("Kwajalein", "Kwajalein"), - ("Libya", "Libya"), - ("MET", "MET"), - ("MST", "MST"), - ("MST7MDT", "MST7MDT"), - ("NZ", "NZ"), - ("NZ-CHAT", "NZ-CHAT"), - ("Navajo", "Navajo"), - ("PRC", "PRC"), - ("PST8PDT", "PST8PDT"), - ("Poland", "Poland"), - ("Portugal", "Portugal"), - ("ROC", "ROC"), - ("ROK", "ROK"), - ("Singapore", "Singapore"), - ("Turkey", "Turkey"), - ("UCT", "UCT"), - ("UTC", "UTC"), - ("Universal", "Universal"), - ("W-SU", "W-SU"), - ("WET", "WET"), - ("Zulu", "Zulu"), - ], - ), - ( - "Pacific", - [ - ("Pacific/Apia", "Apia"), - ("Pacific/Auckland", "Auckland"), - ("Pacific/Bougainville", "Bougainville"), - ("Pacific/Chatham", "Chatham"), - ("Pacific/Chuuk", "Chuuk"), - ("Pacific/Easter", "Easter"), - ("Pacific/Efate", "Efate"), - ("Pacific/Enderbury", "Enderbury"), - ("Pacific/Fakaofo", "Fakaofo"), - ("Pacific/Fiji", "Fiji"), - ("Pacific/Funafuti", "Funafuti"), - ("Pacific/Galapagos", "Galapagos"), - ("Pacific/Gambier", "Gambier"), - ("Pacific/Guadalcanal", "Guadalcanal"), - ("Pacific/Guam", "Guam"), - ("Pacific/Honolulu", "Honolulu"), - ("Pacific/Johnston", "Johnston"), - ("Pacific/Kanton", "Kanton"), - ("Pacific/Kiritimati", "Kiritimati"), - ("Pacific/Kosrae", "Kosrae"), - ("Pacific/Kwajalein", "Kwajalein"), - ("Pacific/Majuro", "Majuro"), - ("Pacific/Marquesas", "Marquesas"), - ("Pacific/Midway", "Midway"), - ("Pacific/Nauru", "Nauru"), - ("Pacific/Niue", "Niue"), - ("Pacific/Norfolk", "Norfolk"), - ("Pacific/Noumea", "Noumea"), - ("Pacific/Pago_Pago", "Pago_Pago"), - ("Pacific/Palau", "Palau"), - ("Pacific/Pitcairn", "Pitcairn"), - ("Pacific/Pohnpei", "Pohnpei"), - ("Pacific/Ponape", "Ponape"), - ("Pacific/Port_Moresby", "Port_Moresby"), - ("Pacific/Rarotonga", "Rarotonga"), - ("Pacific/Saipan", "Saipan"), - ("Pacific/Samoa", "Samoa"), - ("Pacific/Tahiti", "Tahiti"), - ("Pacific/Tarawa", "Tarawa"), - ("Pacific/Tongatapu", "Tongatapu"), - ("Pacific/Truk", "Truk"), - ("Pacific/Wake", "Wake"), - ("Pacific/Wallis", "Wallis"), - ("Pacific/Yap", "Yap"), - ], - ), - ( - "US", - [ - ("US/Alaska", "Alaska"), - ("US/Aleutian", "Aleutian"), - ("US/Arizona", "Arizona"), - ("US/Central", "Central"), - ("US/East-Indiana", "East-Indiana"), - ("US/Eastern", "Eastern"), - ("US/Hawaii", "Hawaii"), - ("US/Indiana-Starke", "Indiana-Starke"), - ("US/Michigan", "Michigan"), - ("US/Mountain", "Mountain"), - ("US/Pacific", "Pacific"), - ("US/Samoa", "Samoa"), - ], - ), - ], - default="Asia/Ho_Chi_Minh", - max_length=50, - verbose_name="location", - ), + model_name='profile', + name='timezone', + field=models.CharField(choices=[('Africa', [('Africa/Abidjan', 'Abidjan'), ('Africa/Accra', 'Accra'), ('Africa/Addis_Ababa', 'Addis_Ababa'), ('Africa/Algiers', 'Algiers'), ('Africa/Asmara', 'Asmara'), ('Africa/Asmera', 'Asmera'), ('Africa/Bamako', 'Bamako'), ('Africa/Bangui', 'Bangui'), ('Africa/Banjul', 'Banjul'), ('Africa/Bissau', 'Bissau'), ('Africa/Blantyre', 'Blantyre'), ('Africa/Brazzaville', 'Brazzaville'), ('Africa/Bujumbura', 'Bujumbura'), ('Africa/Cairo', 'Cairo'), ('Africa/Casablanca', 'Casablanca'), ('Africa/Ceuta', 'Ceuta'), ('Africa/Conakry', 'Conakry'), ('Africa/Dakar', 'Dakar'), ('Africa/Dar_es_Salaam', 'Dar_es_Salaam'), ('Africa/Djibouti', 'Djibouti'), ('Africa/Douala', 'Douala'), ('Africa/El_Aaiun', 'El_Aaiun'), ('Africa/Freetown', 'Freetown'), ('Africa/Gaborone', 'Gaborone'), ('Africa/Harare', 'Harare'), ('Africa/Johannesburg', 'Johannesburg'), ('Africa/Juba', 'Juba'), ('Africa/Kampala', 'Kampala'), ('Africa/Khartoum', 'Khartoum'), ('Africa/Kigali', 'Kigali'), ('Africa/Kinshasa', 'Kinshasa'), ('Africa/Lagos', 'Lagos'), ('Africa/Libreville', 'Libreville'), ('Africa/Lome', 'Lome'), ('Africa/Luanda', 'Luanda'), ('Africa/Lubumbashi', 'Lubumbashi'), ('Africa/Lusaka', 'Lusaka'), ('Africa/Malabo', 'Malabo'), ('Africa/Maputo', 'Maputo'), ('Africa/Maseru', 'Maseru'), ('Africa/Mbabane', 'Mbabane'), ('Africa/Mogadishu', 'Mogadishu'), ('Africa/Monrovia', 'Monrovia'), ('Africa/Nairobi', 'Nairobi'), ('Africa/Ndjamena', 'Ndjamena'), ('Africa/Niamey', 'Niamey'), ('Africa/Nouakchott', 'Nouakchott'), ('Africa/Ouagadougou', 'Ouagadougou'), ('Africa/Porto-Novo', 'Porto-Novo'), ('Africa/Sao_Tome', 'Sao_Tome'), ('Africa/Timbuktu', 'Timbuktu'), ('Africa/Tripoli', 'Tripoli'), ('Africa/Tunis', 'Tunis'), ('Africa/Windhoek', 'Windhoek')]), ('America', [('America/Adak', 'Adak'), ('America/Anchorage', 'Anchorage'), ('America/Anguilla', 'Anguilla'), ('America/Antigua', 'Antigua'), ('America/Araguaina', 'Araguaina'), ('America/Argentina/Buenos_Aires', 'Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'Argentina/Catamarca'), ('America/Argentina/ComodRivadavia', 'Argentina/ComodRivadavia'), ('America/Argentina/Cordoba', 'Argentina/Cordoba'), ('America/Argentina/Jujuy', 'Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'Argentina/Salta'), ('America/Argentina/San_Juan', 'Argentina/San_Juan'), ('America/Argentina/San_Luis', 'Argentina/San_Luis'), ('America/Argentina/Tucuman', 'Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'Argentina/Ushuaia'), ('America/Aruba', 'Aruba'), ('America/Asuncion', 'Asuncion'), ('America/Atikokan', 'Atikokan'), ('America/Atka', 'Atka'), ('America/Bahia', 'Bahia'), ('America/Bahia_Banderas', 'Bahia_Banderas'), ('America/Barbados', 'Barbados'), ('America/Belem', 'Belem'), ('America/Belize', 'Belize'), ('America/Blanc-Sablon', 'Blanc-Sablon'), ('America/Boa_Vista', 'Boa_Vista'), ('America/Bogota', 'Bogota'), ('America/Boise', 'Boise'), ('America/Buenos_Aires', 'Buenos_Aires'), ('America/Cambridge_Bay', 'Cambridge_Bay'), ('America/Campo_Grande', 'Campo_Grande'), ('America/Cancun', 'Cancun'), ('America/Caracas', 'Caracas'), ('America/Catamarca', 'Catamarca'), ('America/Cayenne', 'Cayenne'), ('America/Cayman', 'Cayman'), ('America/Chicago', 'Chicago'), ('America/Chihuahua', 'Chihuahua'), ('America/Coral_Harbour', 'Coral_Harbour'), ('America/Cordoba', 'Cordoba'), ('America/Costa_Rica', 'Costa_Rica'), ('America/Creston', 'Creston'), ('America/Cuiaba', 'Cuiaba'), ('America/Curacao', 'Curacao'), ('America/Danmarkshavn', 'Danmarkshavn'), ('America/Dawson', 'Dawson'), ('America/Dawson_Creek', 'Dawson_Creek'), ('America/Denver', 'Denver'), ('America/Detroit', 'Detroit'), ('America/Dominica', 'Dominica'), ('America/Edmonton', 'Edmonton'), ('America/Eirunepe', 'Eirunepe'), ('America/El_Salvador', 'El_Salvador'), ('America/Ensenada', 'Ensenada'), ('America/Fort_Nelson', 'Fort_Nelson'), ('America/Fort_Wayne', 'Fort_Wayne'), ('America/Fortaleza', 'Fortaleza'), ('America/Glace_Bay', 'Glace_Bay'), ('America/Godthab', 'Godthab'), ('America/Goose_Bay', 'Goose_Bay'), ('America/Grand_Turk', 'Grand_Turk'), ('America/Grenada', 'Grenada'), ('America/Guadeloupe', 'Guadeloupe'), ('America/Guatemala', 'Guatemala'), ('America/Guayaquil', 'Guayaquil'), ('America/Guyana', 'Guyana'), ('America/Halifax', 'Halifax'), ('America/Havana', 'Havana'), ('America/Hermosillo', 'Hermosillo'), ('America/Indiana/Indianapolis', 'Indiana/Indianapolis'), ('America/Indiana/Knox', 'Indiana/Knox'), ('America/Indiana/Marengo', 'Indiana/Marengo'), ('America/Indiana/Petersburg', 'Indiana/Petersburg'), ('America/Indiana/Tell_City', 'Indiana/Tell_City'), ('America/Indiana/Vevay', 'Indiana/Vevay'), ('America/Indiana/Vincennes', 'Indiana/Vincennes'), ('America/Indiana/Winamac', 'Indiana/Winamac'), ('America/Indianapolis', 'Indianapolis'), ('America/Inuvik', 'Inuvik'), ('America/Iqaluit', 'Iqaluit'), ('America/Jamaica', 'Jamaica'), ('America/Jujuy', 'Jujuy'), ('America/Juneau', 'Juneau'), ('America/Kentucky/Louisville', 'Kentucky/Louisville'), ('America/Kentucky/Monticello', 'Kentucky/Monticello'), ('America/Knox_IN', 'Knox_IN'), ('America/Kralendijk', 'Kralendijk'), ('America/La_Paz', 'La_Paz'), ('America/Lima', 'Lima'), ('America/Los_Angeles', 'Los_Angeles'), ('America/Louisville', 'Louisville'), ('America/Lower_Princes', 'Lower_Princes'), ('America/Maceio', 'Maceio'), ('America/Managua', 'Managua'), ('America/Manaus', 'Manaus'), ('America/Marigot', 'Marigot'), ('America/Martinique', 'Martinique'), ('America/Matamoros', 'Matamoros'), ('America/Mazatlan', 'Mazatlan'), ('America/Mendoza', 'Mendoza'), ('America/Menominee', 'Menominee'), ('America/Merida', 'Merida'), ('America/Metlakatla', 'Metlakatla'), ('America/Mexico_City', 'Mexico_City'), ('America/Miquelon', 'Miquelon'), ('America/Moncton', 'Moncton'), ('America/Monterrey', 'Monterrey'), ('America/Montevideo', 'Montevideo'), ('America/Montreal', 'Montreal'), ('America/Montserrat', 'Montserrat'), ('America/Nassau', 'Nassau'), ('America/New_York', 'New_York'), ('America/Nipigon', 'Nipigon'), ('America/Nome', 'Nome'), ('America/Noronha', 'Noronha'), ('America/North_Dakota/Beulah', 'North_Dakota/Beulah'), ('America/North_Dakota/Center', 'North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'North_Dakota/New_Salem'), ('America/Nuuk', 'Nuuk'), ('America/Ojinaga', 'Ojinaga'), ('America/Panama', 'Panama'), ('America/Pangnirtung', 'Pangnirtung'), ('America/Paramaribo', 'Paramaribo'), ('America/Phoenix', 'Phoenix'), ('America/Port-au-Prince', 'Port-au-Prince'), ('America/Port_of_Spain', 'Port_of_Spain'), ('America/Porto_Acre', 'Porto_Acre'), ('America/Porto_Velho', 'Porto_Velho'), ('America/Puerto_Rico', 'Puerto_Rico'), ('America/Punta_Arenas', 'Punta_Arenas'), ('America/Rainy_River', 'Rainy_River'), ('America/Rankin_Inlet', 'Rankin_Inlet'), ('America/Recife', 'Recife'), ('America/Regina', 'Regina'), ('America/Resolute', 'Resolute'), ('America/Rio_Branco', 'Rio_Branco'), ('America/Rosario', 'Rosario'), ('America/Santa_Isabel', 'Santa_Isabel'), ('America/Santarem', 'Santarem'), ('America/Santiago', 'Santiago'), ('America/Santo_Domingo', 'Santo_Domingo'), ('America/Sao_Paulo', 'Sao_Paulo'), ('America/Scoresbysund', 'Scoresbysund'), ('America/Shiprock', 'Shiprock'), ('America/Sitka', 'Sitka'), ('America/St_Barthelemy', 'St_Barthelemy'), ('America/St_Johns', 'St_Johns'), ('America/St_Kitts', 'St_Kitts'), ('America/St_Lucia', 'St_Lucia'), ('America/St_Thomas', 'St_Thomas'), ('America/St_Vincent', 'St_Vincent'), ('America/Swift_Current', 'Swift_Current'), ('America/Tegucigalpa', 'Tegucigalpa'), ('America/Thule', 'Thule'), ('America/Thunder_Bay', 'Thunder_Bay'), ('America/Tijuana', 'Tijuana'), ('America/Toronto', 'Toronto'), ('America/Tortola', 'Tortola'), ('America/Vancouver', 'Vancouver'), ('America/Virgin', 'Virgin'), ('America/Whitehorse', 'Whitehorse'), ('America/Winnipeg', 'Winnipeg'), ('America/Yakutat', 'Yakutat'), ('America/Yellowknife', 'Yellowknife')]), ('Antarctica', [('Antarctica/Casey', 'Casey'), ('Antarctica/Davis', 'Davis'), ('Antarctica/DumontDUrville', 'DumontDUrville'), ('Antarctica/Macquarie', 'Macquarie'), ('Antarctica/Mawson', 'Mawson'), ('Antarctica/McMurdo', 'McMurdo'), ('Antarctica/Palmer', 'Palmer'), ('Antarctica/Rothera', 'Rothera'), ('Antarctica/South_Pole', 'South_Pole'), ('Antarctica/Syowa', 'Syowa'), ('Antarctica/Troll', 'Troll'), ('Antarctica/Vostok', 'Vostok')]), ('Arctic', [('Arctic/Longyearbyen', 'Longyearbyen')]), ('Asia', [('Asia/Aden', 'Aden'), ('Asia/Almaty', 'Almaty'), ('Asia/Amman', 'Amman'), ('Asia/Anadyr', 'Anadyr'), ('Asia/Aqtau', 'Aqtau'), ('Asia/Aqtobe', 'Aqtobe'), ('Asia/Ashgabat', 'Ashgabat'), ('Asia/Ashkhabad', 'Ashkhabad'), ('Asia/Atyrau', 'Atyrau'), ('Asia/Baghdad', 'Baghdad'), ('Asia/Bahrain', 'Bahrain'), ('Asia/Baku', 'Baku'), ('Asia/Bangkok', 'Bangkok'), ('Asia/Barnaul', 'Barnaul'), ('Asia/Beirut', 'Beirut'), ('Asia/Bishkek', 'Bishkek'), ('Asia/Brunei', 'Brunei'), ('Asia/Calcutta', 'Calcutta'), ('Asia/Chita', 'Chita'), ('Asia/Choibalsan', 'Choibalsan'), ('Asia/Chongqing', 'Chongqing'), ('Asia/Chungking', 'Chungking'), ('Asia/Colombo', 'Colombo'), ('Asia/Dacca', 'Dacca'), ('Asia/Damascus', 'Damascus'), ('Asia/Dhaka', 'Dhaka'), ('Asia/Dili', 'Dili'), ('Asia/Dubai', 'Dubai'), ('Asia/Dushanbe', 'Dushanbe'), ('Asia/Famagusta', 'Famagusta'), ('Asia/Gaza', 'Gaza'), ('Asia/Harbin', 'Harbin'), ('Asia/Hebron', 'Hebron'), ('Asia/Ho_Chi_Minh', 'Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Hong_Kong'), ('Asia/Hovd', 'Hovd'), ('Asia/Irkutsk', 'Irkutsk'), ('Asia/Istanbul', 'Istanbul'), ('Asia/Jakarta', 'Jakarta'), ('Asia/Jayapura', 'Jayapura'), ('Asia/Jerusalem', 'Jerusalem'), ('Asia/Kabul', 'Kabul'), ('Asia/Kamchatka', 'Kamchatka'), ('Asia/Karachi', 'Karachi'), ('Asia/Kashgar', 'Kashgar'), ('Asia/Kathmandu', 'Kathmandu'), ('Asia/Katmandu', 'Katmandu'), ('Asia/Khandyga', 'Khandyga'), ('Asia/Kolkata', 'Kolkata'), ('Asia/Krasnoyarsk', 'Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Kuala_Lumpur'), ('Asia/Kuching', 'Kuching'), ('Asia/Kuwait', 'Kuwait'), ('Asia/Macao', 'Macao'), ('Asia/Macau', 'Macau'), ('Asia/Magadan', 'Magadan'), ('Asia/Makassar', 'Makassar'), ('Asia/Manila', 'Manila'), ('Asia/Muscat', 'Muscat'), ('Asia/Nicosia', 'Nicosia'), ('Asia/Novokuznetsk', 'Novokuznetsk'), ('Asia/Novosibirsk', 'Novosibirsk'), ('Asia/Omsk', 'Omsk'), ('Asia/Oral', 'Oral'), ('Asia/Phnom_Penh', 'Phnom_Penh'), ('Asia/Pontianak', 'Pontianak'), ('Asia/Pyongyang', 'Pyongyang'), ('Asia/Qatar', 'Qatar'), ('Asia/Qostanay', 'Qostanay'), ('Asia/Qyzylorda', 'Qyzylorda'), ('Asia/Rangoon', 'Rangoon'), ('Asia/Riyadh', 'Riyadh'), ('Asia/Saigon', 'Saigon'), ('Asia/Sakhalin', 'Sakhalin'), ('Asia/Samarkand', 'Samarkand'), ('Asia/Seoul', 'Seoul'), ('Asia/Shanghai', 'Shanghai'), ('Asia/Singapore', 'Singapore'), ('Asia/Srednekolymsk', 'Srednekolymsk'), ('Asia/Taipei', 'Taipei'), ('Asia/Tashkent', 'Tashkent'), ('Asia/Tbilisi', 'Tbilisi'), ('Asia/Tehran', 'Tehran'), ('Asia/Tel_Aviv', 'Tel_Aviv'), ('Asia/Thimbu', 'Thimbu'), ('Asia/Thimphu', 'Thimphu'), ('Asia/Tokyo', 'Tokyo'), ('Asia/Tomsk', 'Tomsk'), ('Asia/Ujung_Pandang', 'Ujung_Pandang'), ('Asia/Ulaanbaatar', 'Ulaanbaatar'), ('Asia/Ulan_Bator', 'Ulan_Bator'), ('Asia/Urumqi', 'Urumqi'), ('Asia/Ust-Nera', 'Ust-Nera'), ('Asia/Vientiane', 'Vientiane'), ('Asia/Vladivostok', 'Vladivostok'), ('Asia/Yakutsk', 'Yakutsk'), ('Asia/Yangon', 'Yangon'), ('Asia/Yekaterinburg', 'Yekaterinburg'), ('Asia/Yerevan', 'Yerevan')]), ('Atlantic', [('Atlantic/Azores', 'Azores'), ('Atlantic/Bermuda', 'Bermuda'), ('Atlantic/Canary', 'Canary'), ('Atlantic/Cape_Verde', 'Cape_Verde'), ('Atlantic/Faeroe', 'Faeroe'), ('Atlantic/Faroe', 'Faroe'), ('Atlantic/Jan_Mayen', 'Jan_Mayen'), ('Atlantic/Madeira', 'Madeira'), ('Atlantic/Reykjavik', 'Reykjavik'), ('Atlantic/South_Georgia', 'South_Georgia'), ('Atlantic/St_Helena', 'St_Helena'), ('Atlantic/Stanley', 'Stanley')]), ('Australia', [('Australia/ACT', 'ACT'), ('Australia/Adelaide', 'Adelaide'), ('Australia/Brisbane', 'Brisbane'), ('Australia/Broken_Hill', 'Broken_Hill'), ('Australia/Canberra', 'Canberra'), ('Australia/Currie', 'Currie'), ('Australia/Darwin', 'Darwin'), ('Australia/Eucla', 'Eucla'), ('Australia/Hobart', 'Hobart'), ('Australia/LHI', 'LHI'), ('Australia/Lindeman', 'Lindeman'), ('Australia/Lord_Howe', 'Lord_Howe'), ('Australia/Melbourne', 'Melbourne'), ('Australia/NSW', 'NSW'), ('Australia/North', 'North'), ('Australia/Perth', 'Perth'), ('Australia/Queensland', 'Queensland'), ('Australia/South', 'South'), ('Australia/Sydney', 'Sydney'), ('Australia/Tasmania', 'Tasmania'), ('Australia/Victoria', 'Victoria'), ('Australia/West', 'West'), ('Australia/Yancowinna', 'Yancowinna')]), ('Brazil', [('Brazil/Acre', 'Acre'), ('Brazil/DeNoronha', 'DeNoronha'), ('Brazil/East', 'East'), ('Brazil/West', 'West')]), ('Canada', [('Canada/Atlantic', 'Atlantic'), ('Canada/Central', 'Central'), ('Canada/Eastern', 'Eastern'), ('Canada/Mountain', 'Mountain'), ('Canada/Newfoundland', 'Newfoundland'), ('Canada/Pacific', 'Pacific'), ('Canada/Saskatchewan', 'Saskatchewan'), ('Canada/Yukon', 'Yukon')]), ('Chile', [('Chile/Continental', 'Continental'), ('Chile/EasterIsland', 'EasterIsland')]), ('Etc', [('Etc/Greenwich', 'Greenwich'), ('Etc/UCT', 'UCT'), ('Etc/UTC', 'UTC'), ('Etc/Universal', 'Universal'), ('Etc/Zulu', 'Zulu')]), ('Europe', [('Europe/Amsterdam', 'Amsterdam'), ('Europe/Andorra', 'Andorra'), ('Europe/Astrakhan', 'Astrakhan'), ('Europe/Athens', 'Athens'), ('Europe/Belfast', 'Belfast'), ('Europe/Belgrade', 'Belgrade'), ('Europe/Berlin', 'Berlin'), ('Europe/Bratislava', 'Bratislava'), ('Europe/Brussels', 'Brussels'), ('Europe/Bucharest', 'Bucharest'), ('Europe/Budapest', 'Budapest'), ('Europe/Busingen', 'Busingen'), ('Europe/Chisinau', 'Chisinau'), ('Europe/Copenhagen', 'Copenhagen'), ('Europe/Dublin', 'Dublin'), ('Europe/Gibraltar', 'Gibraltar'), ('Europe/Guernsey', 'Guernsey'), ('Europe/Helsinki', 'Helsinki'), ('Europe/Isle_of_Man', 'Isle_of_Man'), ('Europe/Istanbul', 'Istanbul'), ('Europe/Jersey', 'Jersey'), ('Europe/Kaliningrad', 'Kaliningrad'), ('Europe/Kiev', 'Kiev'), ('Europe/Kirov', 'Kirov'), ('Europe/Lisbon', 'Lisbon'), ('Europe/Ljubljana', 'Ljubljana'), ('Europe/London', 'London'), ('Europe/Luxembourg', 'Luxembourg'), ('Europe/Madrid', 'Madrid'), ('Europe/Malta', 'Malta'), ('Europe/Mariehamn', 'Mariehamn'), ('Europe/Minsk', 'Minsk'), ('Europe/Monaco', 'Monaco'), ('Europe/Moscow', 'Moscow'), ('Europe/Nicosia', 'Nicosia'), ('Europe/Oslo', 'Oslo'), ('Europe/Paris', 'Paris'), ('Europe/Podgorica', 'Podgorica'), ('Europe/Prague', 'Prague'), ('Europe/Riga', 'Riga'), ('Europe/Rome', 'Rome'), ('Europe/Samara', 'Samara'), ('Europe/San_Marino', 'San_Marino'), ('Europe/Sarajevo', 'Sarajevo'), ('Europe/Saratov', 'Saratov'), ('Europe/Simferopol', 'Simferopol'), ('Europe/Skopje', 'Skopje'), ('Europe/Sofia', 'Sofia'), ('Europe/Stockholm', 'Stockholm'), ('Europe/Tallinn', 'Tallinn'), ('Europe/Tirane', 'Tirane'), ('Europe/Tiraspol', 'Tiraspol'), ('Europe/Ulyanovsk', 'Ulyanovsk'), ('Europe/Uzhgorod', 'Uzhgorod'), ('Europe/Vaduz', 'Vaduz'), ('Europe/Vatican', 'Vatican'), ('Europe/Vienna', 'Vienna'), ('Europe/Vilnius', 'Vilnius'), ('Europe/Volgograd', 'Volgograd'), ('Europe/Warsaw', 'Warsaw'), ('Europe/Zagreb', 'Zagreb'), ('Europe/Zaporozhye', 'Zaporozhye'), ('Europe/Zurich', 'Zurich')]), ('Indian', [('Indian/Antananarivo', 'Antananarivo'), ('Indian/Chagos', 'Chagos'), ('Indian/Christmas', 'Christmas'), ('Indian/Cocos', 'Cocos'), ('Indian/Comoro', 'Comoro'), ('Indian/Kerguelen', 'Kerguelen'), ('Indian/Mahe', 'Mahe'), ('Indian/Maldives', 'Maldives'), ('Indian/Mauritius', 'Mauritius'), ('Indian/Mayotte', 'Mayotte'), ('Indian/Reunion', 'Reunion')]), ('Mexico', [('Mexico/BajaNorte', 'BajaNorte'), ('Mexico/BajaSur', 'BajaSur'), ('Mexico/General', 'General')]), ('Other', [('CET', 'CET'), ('CST6CDT', 'CST6CDT'), ('Cuba', 'Cuba'), ('EET', 'EET'), ('EST', 'EST'), ('EST5EDT', 'EST5EDT'), ('Egypt', 'Egypt'), ('Eire', 'Eire'), ('GB', 'GB'), ('GB-Eire', 'GB-Eire'), ('Greenwich', 'Greenwich'), ('HST', 'HST'), ('Hongkong', 'Hongkong'), ('Iceland', 'Iceland'), ('Iran', 'Iran'), ('Israel', 'Israel'), ('Jamaica', 'Jamaica'), ('Japan', 'Japan'), ('Kwajalein', 'Kwajalein'), ('Libya', 'Libya'), ('MET', 'MET'), ('MST', 'MST'), ('MST7MDT', 'MST7MDT'), ('NZ', 'NZ'), ('NZ-CHAT', 'NZ-CHAT'), ('Navajo', 'Navajo'), ('PRC', 'PRC'), ('PST8PDT', 'PST8PDT'), ('Poland', 'Poland'), ('Portugal', 'Portugal'), ('ROC', 'ROC'), ('ROK', 'ROK'), ('Singapore', 'Singapore'), ('Turkey', 'Turkey'), ('UCT', 'UCT'), ('UTC', 'UTC'), ('Universal', 'Universal'), ('W-SU', 'W-SU'), ('WET', 'WET'), ('Zulu', 'Zulu')]), ('Pacific', [('Pacific/Apia', 'Apia'), ('Pacific/Auckland', 'Auckland'), ('Pacific/Bougainville', 'Bougainville'), ('Pacific/Chatham', 'Chatham'), ('Pacific/Chuuk', 'Chuuk'), ('Pacific/Easter', 'Easter'), ('Pacific/Efate', 'Efate'), ('Pacific/Enderbury', 'Enderbury'), ('Pacific/Fakaofo', 'Fakaofo'), ('Pacific/Fiji', 'Fiji'), ('Pacific/Funafuti', 'Funafuti'), ('Pacific/Galapagos', 'Galapagos'), ('Pacific/Gambier', 'Gambier'), ('Pacific/Guadalcanal', 'Guadalcanal'), ('Pacific/Guam', 'Guam'), ('Pacific/Honolulu', 'Honolulu'), ('Pacific/Johnston', 'Johnston'), ('Pacific/Kanton', 'Kanton'), ('Pacific/Kiritimati', 'Kiritimati'), ('Pacific/Kosrae', 'Kosrae'), ('Pacific/Kwajalein', 'Kwajalein'), ('Pacific/Majuro', 'Majuro'), ('Pacific/Marquesas', 'Marquesas'), ('Pacific/Midway', 'Midway'), ('Pacific/Nauru', 'Nauru'), ('Pacific/Niue', 'Niue'), ('Pacific/Norfolk', 'Norfolk'), ('Pacific/Noumea', 'Noumea'), ('Pacific/Pago_Pago', 'Pago_Pago'), ('Pacific/Palau', 'Palau'), ('Pacific/Pitcairn', 'Pitcairn'), ('Pacific/Pohnpei', 'Pohnpei'), ('Pacific/Ponape', 'Ponape'), ('Pacific/Port_Moresby', 'Port_Moresby'), ('Pacific/Rarotonga', 'Rarotonga'), ('Pacific/Saipan', 'Saipan'), ('Pacific/Samoa', 'Samoa'), ('Pacific/Tahiti', 'Tahiti'), ('Pacific/Tarawa', 'Tarawa'), ('Pacific/Tongatapu', 'Tongatapu'), ('Pacific/Truk', 'Truk'), ('Pacific/Wake', 'Wake'), ('Pacific/Wallis', 'Wallis'), ('Pacific/Yap', 'Yap')]), ('US', [('US/Alaska', 'Alaska'), ('US/Aleutian', 'Aleutian'), ('US/Arizona', 'Arizona'), ('US/Central', 'Central'), ('US/East-Indiana', 'East-Indiana'), ('US/Eastern', 'Eastern'), ('US/Hawaii', 'Hawaii'), ('US/Indiana-Starke', 'Indiana-Starke'), ('US/Michigan', 'Michigan'), ('US/Mountain', 'Mountain'), ('US/Pacific', 'Pacific'), ('US/Samoa', 'Samoa')])], default='Asia/Ho_Chi_Minh', max_length=50, verbose_name='location'), ), ] diff --git a/judge/migrations/0151_alter_courseassignment_course.py b/judge/migrations/0151_alter_courseassignment_course.py new file mode 100644 index 0000000..aa5157d --- /dev/null +++ b/judge/migrations/0151_alter_courseassignment_course.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.17 on 2023-02-15 04:28 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('judge', '0150_alter_profile_timezone'), + ] + + operations = [ + migrations.AlterField( + model_name='courseassignment', + name='course', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='judge.course', verbose_name='course'), + ), + ] diff --git a/judge/migrations/0151_comment_content_type.py b/judge/migrations/0151_comment_content_type.py deleted file mode 100644 index d1897d9..0000000 --- a/judge/migrations/0151_comment_content_type.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 3.2.18 on 2023-02-20 21:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0150_alter_profile_timezone"), - ] - - operations = [ - migrations.AddField( - model_name="comment", - name="content_type", - field=models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - preserve_default=False, - ), - migrations.AddField( - model_name="comment", - name="object_id", - field=models.PositiveIntegerField(null=True), - preserve_default=False, - ), - migrations.AlterField( - model_name="solution", - name="problem", - field=models.OneToOneField( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="solution", - to="judge.problem", - verbose_name="associated problem", - ), - ), - migrations.AddIndex( - model_name="comment", - index=models.Index( - fields=["content_type", "object_id"], - name="judge_comme_content_2dce05_idx", - ), - ), - ] diff --git a/judge/migrations/0152_alter_courserole_course.py b/judge/migrations/0152_alter_courserole_course.py new file mode 100644 index 0000000..6fa1de8 --- /dev/null +++ b/judge/migrations/0152_alter_courserole_course.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.17 on 2023-02-22 08:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('judge', '0151_alter_courseassignment_course'), + ] + + operations = [ + migrations.AlterField( + model_name='courserole', + name='course', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='judge.course', verbose_name='course'), + ), + ] diff --git a/judge/migrations/0152_migrate_comments.py b/judge/migrations/0152_migrate_comments.py deleted file mode 100644 index bcf6531..0000000 --- a/judge/migrations/0152_migrate_comments.py +++ /dev/null @@ -1,54 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion -from django.core.exceptions import ObjectDoesNotExist - - -def migrate_comments(apps, schema_editor): - Comment = apps.get_model("judge", "Comment") - Problem = apps.get_model("judge", "Problem") - Solution = apps.get_model("judge", "Solution") - BlogPost = apps.get_model("judge", "BlogPost") - Contest = apps.get_model("judge", "Contest") - - for comment in Comment.objects.all(): - page = comment.page - try: - if page.startswith("p:"): - code = page[2:] - comment.linked_object = Problem.objects.get(code=code) - elif page.startswith("s:"): - code = page[2:] - comment.linked_object = Solution.objects.get(problem__code=code) - elif page.startswith("c:"): - key = page[2:] - comment.linked_object = Contest.objects.get(key=key) - elif page.startswith("b:"): - blog_id = page[2:] - comment.linked_object = BlogPost.objects.get(id=blog_id) - comment.save() - except ObjectDoesNotExist: - comment.delete() - - -class Migration(migrations.Migration): - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0151_comment_content_type"), - ] - - operations = [ - migrations.RunPython(migrate_comments, migrations.RunPython.noop, atomic=True), - migrations.AlterField( - model_name="comment", - name="content_type", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - migrations.AlterField( - model_name="comment", - name="object_id", - field=models.PositiveIntegerField(), - ), - ] diff --git a/judge/migrations/0153_drop_comment_page.py b/judge/migrations/0153_drop_comment_page.py deleted file mode 100644 index a03ac09..0000000 --- a/judge/migrations/0153_drop_comment_page.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.18 on 2023-02-20 23:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0152_migrate_comments"), - ] - - operations = [ - migrations.RemoveField( - model_name="comment", - name="page", - ), - migrations.AlterField( - model_name="commentlock", - name="page", - field=models.CharField( - db_index=True, max_length=30, verbose_name="associated page" - ), - ), - ] diff --git a/judge/migrations/0154_add_submission_indexes.py b/judge/migrations/0154_add_submission_indexes.py deleted file mode 100644 index 28c5fec..0000000 --- a/judge/migrations/0154_add_submission_indexes.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.18 on 2023-03-08 01:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0153_drop_comment_page"), - ] - - operations = [ - migrations.AddIndex( - model_name="submission", - index=models.Index( - fields=["problem", "user", "-points"], - name="judge_submi_problem_5687ea_idx", - ), - ), - migrations.AddIndex( - model_name="submission", - index=models.Index( - fields=["contest_object", "problem", "user", "-points"], - name="judge_submi_contest_31cdbb_idx", - ), - ), - ] diff --git a/judge/migrations/0155_output_only.py b/judge/migrations/0155_output_only.py deleted file mode 100644 index e122ed7..0000000 --- a/judge/migrations/0155_output_only.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.18 on 2023-03-10 04:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0154_add_submission_indexes"), - ] - - operations = [ - migrations.AddField( - model_name="problemdata", - name="output_only", - field=models.BooleanField( - help_text="Support output-only problem", - null=True, - verbose_name="is output only", - ), - ), - ] diff --git a/judge/migrations/0156_auto_20230801_0107.py b/judge/migrations/0156_auto_20230801_0107.py deleted file mode 100644 index a5f2b9a..0000000 --- a/judge/migrations/0156_auto_20230801_0107.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 3.2.18 on 2023-07-31 18:07 - -import django.core.validators -from django.db import migrations, models -import judge.models.problem_data -import judge.utils.problem_data - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0155_output_only"), - ] - - operations = [ - migrations.AddField( - model_name="problemdata", - name="signature_handler", - field=models.FileField( - blank=True, - null=True, - storage=judge.utils.problem_data.ProblemDataStorage(), - upload_to=judge.models.problem_data.problem_directory_file, - validators=[ - django.core.validators.FileExtensionValidator( - allowed_extensions=["cpp"] - ) - ], - verbose_name="signature handler", - ), - ), - migrations.AddField( - model_name="problemdata", - name="signature_header", - field=models.FileField( - blank=True, - null=True, - storage=judge.utils.problem_data.ProblemDataStorage(), - upload_to=judge.models.problem_data.problem_directory_file, - validators=[ - django.core.validators.FileExtensionValidator( - allowed_extensions=["h"] - ) - ], - verbose_name="signature header", - ), - ), - ] diff --git a/judge/migrations/0157_auto_20230801_1145.py b/judge/migrations/0157_auto_20230801_1145.py deleted file mode 100644 index 802c56c..0000000 --- a/judge/migrations/0157_auto_20230801_1145.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-01 04:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0156_auto_20230801_0107"), - ] - - operations = [ - migrations.AddField( - model_name="problemdata", - name="use_ioi_signature", - field=models.BooleanField( - help_text="Use IOI Signature", - null=True, - verbose_name="is IOI signature", - ), - ), - ] diff --git a/judge/migrations/0158_migrate_pagevote.py b/judge/migrations/0158_migrate_pagevote.py deleted file mode 100644 index 5563854..0000000 --- a/judge/migrations/0158_migrate_pagevote.py +++ /dev/null @@ -1,70 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-03 07:40 - -from django.db import migrations, models -import django.db.models.deletion -from django.core.exceptions import ObjectDoesNotExist - - -def migrate_pagevote(apps, schema_editor): - PageVote = apps.get_model("judge", "PageVote") - Problem = apps.get_model("judge", "Problem") - Solution = apps.get_model("judge", "Solution") - BlogPost = apps.get_model("judge", "BlogPost") - Contest = apps.get_model("judge", "Contest") - - for vote in PageVote.objects.all(): - page = vote.page - try: - if page.startswith("p:"): - code = page[2:] - vote.linked_object = Problem.objects.get(code=code) - elif page.startswith("s:"): - code = page[2:] - vote.linked_object = Solution.objects.get(problem__code=code) - elif page.startswith("c:"): - key = page[2:] - vote.linked_object = Contest.objects.get(key=key) - elif page.startswith("b:"): - blog_id = page[2:] - vote.linked_object = BlogPost.objects.get(id=blog_id) - vote.save() - except ObjectDoesNotExist: - vote.delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0157_auto_20230801_1145"), - ] - - operations = [ - migrations.AddField( - model_name="pagevote", - name="content_type", - field=models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - migrations.AddField( - model_name="pagevote", - name="object_id", - field=models.PositiveIntegerField(default=None), - preserve_default=False, - ), - migrations.AlterUniqueTogether( - name="pagevote", - unique_together={("content_type", "object_id")}, - ), - migrations.AddIndex( - model_name="pagevote", - index=models.Index( - fields=["content_type", "object_id"], - name="judge_pagev_content_ed8899_idx", - ), - ), - migrations.RunPython(migrate_pagevote, migrations.RunPython.noop, atomic=True), - ] diff --git a/judge/migrations/0159_auto_20230803_1518.py b/judge/migrations/0159_auto_20230803_1518.py deleted file mode 100644 index 691121b..0000000 --- a/judge/migrations/0159_auto_20230803_1518.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-03 08:18 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0158_migrate_pagevote"), - ] - - operations = [ - migrations.AlterField( - model_name="pagevote", - name="content_type", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - ] diff --git a/judge/migrations/0160_migrate_bookmark.py b/judge/migrations/0160_migrate_bookmark.py deleted file mode 100644 index 6fa1b3e..0000000 --- a/judge/migrations/0160_migrate_bookmark.py +++ /dev/null @@ -1,80 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-03 08:32 - -from django.db import migrations, models -import django.db.models.deletion -from django.core.exceptions import ObjectDoesNotExist - - -def migrate_bookmark(apps, schema_editor): - BookMark = apps.get_model("judge", "BookMark") - Problem = apps.get_model("judge", "Problem") - Solution = apps.get_model("judge", "Solution") - BlogPost = apps.get_model("judge", "BlogPost") - Contest = apps.get_model("judge", "Contest") - - for bookmark in BookMark.objects.all(): - page = bookmark.page - try: - if page.startswith("p:"): - code = page[2:] - bookmark.linked_object = Problem.objects.get(code=code) - elif page.startswith("s:"): - code = page[2:] - bookmark.linked_object = Solution.objects.get(problem__code=code) - elif page.startswith("c:"): - key = page[2:] - bookmark.linked_object = Contest.objects.get(key=key) - elif page.startswith("b:"): - blog_id = page[2:] - bookmark.linked_object = BlogPost.objects.get(id=blog_id) - bookmark.save() - except ObjectDoesNotExist: - bookmark.delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0159_auto_20230803_1518"), - ] - - operations = [ - migrations.AddField( - model_name="bookmark", - name="content_type", - field=models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - migrations.AddField( - model_name="bookmark", - name="object_id", - field=models.PositiveIntegerField(default=1), - ), - migrations.AddField( - model_name="bookmark", - name="score", - field=models.IntegerField(default=0, verbose_name="votes"), - ), - migrations.AlterUniqueTogether( - name="bookmark", - unique_together={("content_type", "object_id")}, - ), - migrations.AddIndex( - model_name="bookmark", - index=models.Index( - fields=["content_type", "object_id"], - name="judge_bookm_content_964329_idx", - ), - ), - migrations.AddIndex( - model_name="makebookmark", - index=models.Index( - fields=["user", "bookmark"], name="judge_makeb_user_id_f0e226_idx" - ), - ), - migrations.RunPython(migrate_bookmark, migrations.RunPython.noop, atomic=True), - ] diff --git a/judge/migrations/0161_auto_20230803_1536.py b/judge/migrations/0161_auto_20230803_1536.py deleted file mode 100644 index 7e12b9a..0000000 --- a/judge/migrations/0161_auto_20230803_1536.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-03 08:36 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("judge", "0160_migrate_bookmark"), - ] - - operations = [ - migrations.AlterField( - model_name="bookmark", - name="content_type", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - migrations.AlterField( - model_name="bookmark", - name="object_id", - field=models.PositiveIntegerField(), - ), - ] diff --git a/judge/migrations/0162_profile_image.py b/judge/migrations/0162_profile_image.py deleted file mode 100644 index b371f39..0000000 --- a/judge/migrations/0162_profile_image.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-24 00:50 - -from django.db import migrations, models -import judge.models.profile - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0161_auto_20230803_1536"), - ] - - operations = [ - migrations.AddField( - model_name="profile", - name="profile_image", - field=models.ImageField( - null=True, upload_to=judge.models.profile.profile_image_path - ), - ), - ] diff --git a/judge/migrations/0163_email_change.py b/judge/migrations/0163_email_change.py deleted file mode 100644 index 985121d..0000000 --- a/judge/migrations/0163_email_change.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-25 00:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0162_profile_image"), - ] - - operations = [ - migrations.AddField( - model_name="profile", - name="email_change_pending", - field=models.EmailField(blank=True, max_length=254, null=True), - ), - ] diff --git a/judge/migrations/0164_show_testcase.py b/judge/migrations/0164_show_testcase.py deleted file mode 100644 index 33cbdf8..0000000 --- a/judge/migrations/0164_show_testcase.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-25 23:03 - -from django.db import migrations, models - - -def migrate_show_testcases(apps, schema_editor): - ContestProblem = apps.get_model("judge", "ContestProblem") - - for c in ContestProblem.objects.all(): - if c.output_prefix_override == 1: - c.show_testcases = True - c.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0163_email_change"), - ] - - operations = [ - migrations.AddField( - model_name="contestproblem", - name="show_testcases", - field=models.BooleanField(default=False, verbose_name="visible testcases"), - ), - migrations.RunPython( - migrate_show_testcases, migrations.RunPython.noop, atomic=True - ), - ] diff --git a/judge/migrations/0165_drop_output_prefix_override.py b/judge/migrations/0165_drop_output_prefix_override.py deleted file mode 100644 index ea9b17a..0000000 --- a/judge/migrations/0165_drop_output_prefix_override.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-25 23:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0164_show_testcase"), - ] - - operations = [ - migrations.RemoveField( - model_name="contestproblem", - name="output_prefix_override", - ), - ] diff --git a/judge/migrations/0166_display_rank_index.py b/judge/migrations/0166_display_rank_index.py deleted file mode 100644 index ffea311..0000000 --- a/judge/migrations/0166_display_rank_index.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.18 on 2023-08-28 01:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0165_drop_output_prefix_override"), - ] - - operations = [ - migrations.AlterField( - model_name="profile", - name="display_rank", - field=models.CharField( - choices=[ - ("user", "Normal User"), - ("setter", "Problem Setter"), - ("admin", "Admin"), - ], - db_index=True, - default="user", - max_length=10, - verbose_name="display rank", - ), - ), - ] diff --git a/judge/migrations/0167_ultimate_contest_format.py b/judge/migrations/0167_ultimate_contest_format.py deleted file mode 100644 index 636e882..0000000 --- a/judge/migrations/0167_ultimate_contest_format.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.18 on 2023-09-01 00:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0166_display_rank_index"), - ] - - operations = [ - migrations.AlterField( - model_name="contest", - name="format_name", - field=models.CharField( - choices=[ - ("atcoder", "AtCoder"), - ("default", "Default"), - ("ecoo", "ECOO"), - ("icpc", "ICPC"), - ("ioi", "IOI"), - ("ioi16", "New IOI"), - ("ultimate", "Ultimate"), - ], - default="default", - help_text="The contest format module to use.", - max_length=32, - verbose_name="contest format", - ), - ), - ] diff --git a/judge/migrations/0168_css_background.py b/judge/migrations/0168_css_background.py deleted file mode 100644 index 6210a26..0000000 --- a/judge/migrations/0168_css_background.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.18 on 2023-09-02 00:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0167_ultimate_contest_format"), - ] - - operations = [ - migrations.AddField( - model_name="profile", - name="css_background", - field=models.TextField( - blank=True, - help_text='CSS custom background properties: url("image_url"), color, etc', - max_length=300, - null=True, - verbose_name="Custom background", - ), - ), - ] diff --git a/judge/migrations/0169_public_scoreboard.py b/judge/migrations/0169_public_scoreboard.py deleted file mode 100644 index 0dc7338..0000000 --- a/judge/migrations/0169_public_scoreboard.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.18 on 2023-09-17 01:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0168_css_background"), - ] - - operations = [ - migrations.AddField( - model_name="contest", - name="public_scoreboard", - field=models.BooleanField( - default=False, - help_text="Ranking page is public even for private contests.", - verbose_name="public scoreboard", - ), - ), - ] diff --git a/judge/migrations/0170_contests_summary.py b/judge/migrations/0170_contests_summary.py deleted file mode 100644 index a2b19de..0000000 --- a/judge/migrations/0170_contests_summary.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.21 on 2023-10-02 03:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0169_public_scoreboard"), - ] - - operations = [ - migrations.CreateModel( - name="ContestsSummary", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("scores", models.JSONField(blank=True, null=True)), - ("key", models.CharField(max_length=20, unique=True)), - ("contests", models.ManyToManyField(to="judge.Contest")), - ], - ), - ] diff --git a/judge/migrations/0171_update_notification.py b/judge/migrations/0171_update_notification.py deleted file mode 100644 index 7803e4b..0000000 --- a/judge/migrations/0171_update_notification.py +++ /dev/null @@ -1,68 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-10 21:17 - -from django.db import migrations, models -import django.db.models.deletion -from django.urls import reverse - -from collections import defaultdict - - -# Run this in shell -def migrate_notif(apps, schema_editor): - Notification = apps.get_model("judge", "Notification") - Profile = apps.get_model("judge", "Profile") - NotificationProfile = apps.get_model("judge", "NotificationProfile") - - unread_count = defaultdict(int) - for c in Notification.objects.all(): - if c.comment: - c.html_link = ( - f'{c.comment.page_title}' - ) - c.author = c.comment.author - c.save() - if c.read is False: - unread_count[c.author] += 1 - - for user in unread_count: - np = NotificationProfile(user=user) - np.unread_count = unread_count[user] - np.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0170_contests_summary"), - ] - - operations = [ - migrations.AlterModelOptions( - name="contestssummary", - options={ - "verbose_name": "contests summary", - "verbose_name_plural": "contests summaries", - }, - ), - migrations.CreateModel( - name="NotificationProfile", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("unread_count", models.IntegerField(default=0)), - ( - "user", - models.OneToOneField( - on_delete=django.db.models.deletion.CASCADE, to="judge.profile" - ), - ), - ], - ), - ] diff --git a/judge/migrations/0172_index_rating.py b/judge/migrations/0172_index_rating.py deleted file mode 100644 index 157c005..0000000 --- a/judge/migrations/0172_index_rating.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-10 23:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0171_update_notification"), - ] - - operations = [ - migrations.AlterField( - model_name="profile", - name="rating", - field=models.IntegerField(db_index=True, default=None, null=True), - ), - ] diff --git a/judge/migrations/0173_fulltext.py b/judge/migrations/0173_fulltext.py deleted file mode 100644 index a47ef7b..0000000 --- a/judge/migrations/0173_fulltext.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-14 00:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0172_index_rating"), - ] - - operations = [ - migrations.RunSQL( - ( - "CREATE FULLTEXT INDEX IF NOT EXISTS code_name_index ON judge_problem (code, name)", - ), - reverse_sql=migrations.RunSQL.noop, - ), - migrations.RunSQL( - ( - "CREATE FULLTEXT INDEX IF NOT EXISTS key_name_index ON judge_contest (`key`, name)", - ), - reverse_sql=migrations.RunSQL.noop, - ), - ] diff --git a/judge/migrations/0174_contest_summary_result.py b/judge/migrations/0174_contest_summary_result.py deleted file mode 100644 index 1a4c9cc..0000000 --- a/judge/migrations/0174_contest_summary_result.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 3.2.18 on 2023-11-24 05:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0173_fulltext"), - ] - - operations = [ - migrations.AddField( - model_name="contestssummary", - name="results", - field=models.JSONField(blank=True, null=True), - ), - migrations.AlterField( - model_name="contest", - name="authors", - field=models.ManyToManyField( - help_text="These users will be able to edit the contest.", - related_name="_judge_contest_authors_+", - to="judge.Profile", - verbose_name="authors", - ), - ), - migrations.AlterField( - model_name="contest", - name="curators", - field=models.ManyToManyField( - blank=True, - help_text="These users will be able to edit the contest, but will not be listed as authors.", - related_name="_judge_contest_curators_+", - to="judge.Profile", - verbose_name="curators", - ), - ), - migrations.AlterField( - model_name="contest", - name="testers", - field=models.ManyToManyField( - blank=True, - help_text="These users will be able to view the contest, but not edit it.", - related_name="_judge_contest_testers_+", - to="judge.Profile", - verbose_name="testers", - ), - ), - ] diff --git a/judge/migrations/0175_add_profile_index.py b/judge/migrations/0175_add_profile_index.py deleted file mode 100644 index d9ec296..0000000 --- a/judge/migrations/0175_add_profile_index.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.18 on 2023-11-29 02:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0174_contest_summary_result"), - ] - - operations = [ - migrations.AddIndex( - model_name="profile", - index=models.Index( - fields=["is_unlisted", "performance_points"], - name="judge_profi_is_unli_d4034c_idx", - ), - ), - ] diff --git a/judge/migrations/0176_comment_revision_count.py b/judge/migrations/0176_comment_revision_count.py deleted file mode 100644 index ed2a246..0000000 --- a/judge/migrations/0176_comment_revision_count.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.18 on 2023-12-06 01:28 - -from django.db import migrations, models - - -# Run this in shell -def migrate_revision(apps, schema_editor): - Comment = apps.get_model("judge", "Comment") - - for c in Comment.objects.all(): - c.revision_count = c.versions.count() - c.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0175_add_profile_index"), - ] - - operations = [ - migrations.AddField( - model_name="comment", - name="revision_count", - field=models.PositiveIntegerField(default=1), - ), - # migrations.RunPython( - # migrate_revision, migrations.RunPython.noop, atomic=True - # ), - ] diff --git a/judge/migrations/0177_test_formatter.py b/judge/migrations/0177_test_formatter.py deleted file mode 100644 index 78eadb5..0000000 --- a/judge/migrations/0177_test_formatter.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import migrations, models -import judge.models.test_formatter - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0176_comment_revision_count"), - ] - - operations = [ - migrations.CreateModel( - name="TestFormatterModel", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "file", - models.FileField( - blank=True, - null=True, - upload_to=judge.models.test_formatter.test_formatter_path, - verbose_name="testcase file", - ), - ), - ], - ) - ] diff --git a/judge/migrations/0178_remove_user_script.py b/judge/migrations/0178_remove_user_script.py deleted file mode 100644 index dc4b560..0000000 --- a/judge/migrations/0178_remove_user_script.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.18 on 2024-01-14 01:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0177_test_formatter"), - ] - - operations = [ - migrations.RemoveField( - model_name="profile", - name="user_script", - ), - ] diff --git a/judge/migrations/0179_submission_result_lang_index.py b/judge/migrations/0179_submission_result_lang_index.py deleted file mode 100644 index 3e43918..0000000 --- a/judge/migrations/0179_submission_result_lang_index.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.18 on 2024-01-23 00:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0178_remove_user_script"), - ] - - operations = [ - migrations.AddIndex( - model_name="submission", - index=models.Index( - fields=["language", "result"], name="judge_submi_languag_874af4_idx" - ), - ), - ] diff --git a/judge/migrations/0180_course.py b/judge/migrations/0180_course.py deleted file mode 100644 index 439d32e..0000000 --- a/judge/migrations/0180_course.py +++ /dev/null @@ -1,78 +0,0 @@ -# Generated by Django 3.2.18 on 2024-02-15 02:12 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0179_submission_result_lang_index"), - ] - - operations = [ - migrations.CreateModel( - name="CourseLesson", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("title", models.TextField(verbose_name="course title")), - ("content", models.TextField(verbose_name="course content")), - ("order", models.IntegerField(default=0, verbose_name="order")), - ("points", models.IntegerField(verbose_name="points")), - ], - ), - migrations.RemoveField( - model_name="courseresource", - name="course", - ), - migrations.RemoveField( - model_name="course", - name="ending_time", - ), - migrations.AlterField( - model_name="courserole", - name="course", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="judge.course", - verbose_name="course", - ), - ), - migrations.DeleteModel( - name="CourseAssignment", - ), - migrations.DeleteModel( - name="CourseResource", - ), - migrations.AddField( - model_name="courselesson", - name="course", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="judge.course", - verbose_name="course", - ), - ), - migrations.AddField( - model_name="courselesson", - name="problems", - field=models.ManyToManyField(to="judge.Problem"), - ), - migrations.AlterUniqueTogether( - name="courserole", - unique_together={("course", "user")}, - ), - migrations.AlterField( - model_name="courselesson", - name="problems", - field=models.ManyToManyField(blank=True, to="judge.Problem"), - ), - ] diff --git a/judge/migrations/0181_remove_math_engine.py b/judge/migrations/0181_remove_math_engine.py deleted file mode 100644 index 99e4a85..0000000 --- a/judge/migrations/0181_remove_math_engine.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 3.2.18 on 2024-02-26 20:43 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0180_course"), - ] - - operations = [ - migrations.RemoveField( - model_name="profile", - name="math_engine", - ), - migrations.AlterField( - model_name="course", - name="about", - field=models.TextField(verbose_name="course description"), - ), - migrations.AlterField( - model_name="courselesson", - name="course", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="lessons", - to="judge.course", - verbose_name="course", - ), - ), - migrations.AlterField( - model_name="courselesson", - name="problems", - field=models.ManyToManyField( - blank=True, to="judge.Problem", verbose_name="problem" - ), - ), - migrations.AlterField( - model_name="courserole", - name="user", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="course_roles", - to="judge.profile", - verbose_name="user", - ), - ), - ] diff --git a/judge/migrations/0182_rename_customcpp.py b/judge/migrations/0182_rename_customcpp.py deleted file mode 100644 index 5f991be..0000000 --- a/judge/migrations/0182_rename_customcpp.py +++ /dev/null @@ -1,75 +0,0 @@ -# Generated by Django 3.2.18 on 2024-03-19 04:28 - -from django.db import migrations, models - - -def migrate_checker(apps, schema_editor): - ProblemData = apps.get_model("judge", "ProblemData") - ProblemTestCase = apps.get_model("judge", "ProblemTestCase") - - for p in ProblemData.objects.all(): - if p.checker == "customval": - p.checker = "customcpp" - p.save() - - for p in ProblemTestCase.objects.all(): - if p.checker == "customval": - p.checker = "customcpp" - p.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0181_remove_math_engine"), - ] - - operations = [ - migrations.RunPython(migrate_checker, migrations.RunPython.noop, atomic=True), - migrations.AlterField( - model_name="problemdata", - name="checker", - field=models.CharField( - blank=True, - choices=[ - ("standard", "Standard"), - ("floats", "Floats"), - ("floatsabs", "Floats (absolute)"), - ("floatsrel", "Floats (relative)"), - ("rstripped", "Non-trailing spaces"), - ("sorted", "Unordered"), - ("identical", "Byte identical"), - ("linecount", "Line-by-line"), - ("custom", "Custom checker (PY)"), - ("customcpp", "Custom checker (CPP)"), - ("interact", "Interactive"), - ("testlib", "Testlib"), - ], - max_length=10, - verbose_name="checker", - ), - ), - migrations.AlterField( - model_name="problemtestcase", - name="checker", - field=models.CharField( - blank=True, - choices=[ - ("standard", "Standard"), - ("floats", "Floats"), - ("floatsabs", "Floats (absolute)"), - ("floatsrel", "Floats (relative)"), - ("rstripped", "Non-trailing spaces"), - ("sorted", "Unordered"), - ("identical", "Byte identical"), - ("linecount", "Line-by-line"), - ("custom", "Custom checker (PY)"), - ("customcpp", "Custom checker (CPP)"), - ("interact", "Interactive"), - ("testlib", "Testlib"), - ], - max_length=10, - verbose_name="checker", - ), - ), - ] diff --git a/judge/migrations/0183_rename_custom_checker_cpp.py b/judge/migrations/0183_rename_custom_checker_cpp.py deleted file mode 100644 index 65280ae..0000000 --- a/judge/migrations/0183_rename_custom_checker_cpp.py +++ /dev/null @@ -1,45 +0,0 @@ -# Generated by Django 3.2.18 on 2024-03-19 04:45 - -import django.core.validators -from django.db import migrations, models -import judge.models.problem_data -import judge.utils.problem_data - - -def migrate_checker(apps, schema_editor): - ProblemData = apps.get_model("judge", "ProblemData") - - for p in ProblemData.objects.all(): - p.custom_checker_cpp = p.custom_validator - p.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0182_rename_customcpp"), - ] - - operations = [ - migrations.AddField( - model_name="problemdata", - name="custom_checker_cpp", - field=models.FileField( - blank=True, - null=True, - storage=judge.utils.problem_data.ProblemDataStorage(), - upload_to=judge.models.problem_data.problem_directory_file, - validators=[ - django.core.validators.FileExtensionValidator( - allowed_extensions=["cpp"] - ) - ], - verbose_name="custom cpp checker file", - ), - ), - migrations.RunPython(migrate_checker, migrations.RunPython.noop, atomic=True), - migrations.RemoveField( - model_name="problemdata", - name="custom_validator", - ), - ] diff --git a/judge/migrations/0184_contest_rate_limit.py b/judge/migrations/0184_contest_rate_limit.py deleted file mode 100644 index c05174d..0000000 --- a/judge/migrations/0184_contest_rate_limit.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.18 on 2024-03-23 04:07 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0183_rename_custom_checker_cpp"), - ] - - operations = [ - migrations.AddField( - model_name="contest", - name="rate_limit", - field=models.PositiveIntegerField( - blank=True, - help_text="Maximum number of submissions per minute. Leave empty if you don't want rate limit.", - null=True, - validators=[ - django.core.validators.MinValueValidator(1), - django.core.validators.MaxValueValidator(5), - ], - verbose_name="rate limit", - ), - ), - ] diff --git a/judge/migrations/0185_rename_org_profile_colum.py b/judge/migrations/0185_rename_org_profile_colum.py deleted file mode 100644 index c184169..0000000 --- a/judge/migrations/0185_rename_org_profile_colum.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.18 on 2024-04-12 05:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0184_contest_rate_limit"), - ] - - operations = [ - migrations.RenameField( - model_name="organizationprofile", - old_name="users", - new_name="profile", - ), - ] diff --git a/judge/migrations/0186_change_about_fields_max_len.py b/judge/migrations/0186_change_about_fields_max_len.py deleted file mode 100644 index 9e8cf01..0000000 --- a/judge/migrations/0186_change_about_fields_max_len.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 3.2.18 on 2024-04-12 17:04 - -from django.db import migrations, models - - -def truncate_about_text(apps, schema_editor): - Organization = apps.get_model("judge", "Organization") - Profile = apps.get_model("judge", "Profile") - - for org in Organization.objects.all(): - if len(org.about) > 10000: - org.about = org.about[:10000] - org.save() - - for profile in Profile.objects.all(): - if profile.about and len(profile.about) > 10000: - profile.about = profile.about[:10000] - profile.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0185_rename_org_profile_colum"), - ] - - operations = [ - migrations.RunPython(truncate_about_text), - migrations.AlterField( - model_name="organization", - name="about", - field=models.CharField( - max_length=10000, verbose_name="organization description" - ), - ), - migrations.AlterField( - model_name="profile", - name="about", - field=models.CharField( - blank=True, max_length=10000, null=True, verbose_name="self-description" - ), - ), - ] diff --git a/judge/migrations/0187_profile_info.py b/judge/migrations/0187_profile_info.py deleted file mode 100644 index c3b02c2..0000000 --- a/judge/migrations/0187_profile_info.py +++ /dev/null @@ -1,69 +0,0 @@ -# Generated by Django 3.2.18 on 2024-04-27 03:35 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0186_change_about_fields_max_len"), - ] - - operations = [ - migrations.RemoveField( - model_name="profile", - name="is_banned_problem_voting", - ), - migrations.CreateModel( - name="ProfileInfo", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "tshirt_size", - models.CharField( - blank=True, - choices=[ - ("S", "Small (S)"), - ("M", "Medium (M)"), - ("L", "Large (L)"), - ("XL", "Extra Large (XL)"), - ("XXL", "2 Extra Large (XXL)"), - ], - max_length=5, - null=True, - verbose_name="t-shirt size", - ), - ), - ( - "date_of_birth", - models.DateField( - blank=True, null=True, verbose_name="date of birth" - ), - ), - ( - "address", - models.CharField( - blank=True, max_length=255, null=True, verbose_name="address" - ), - ), - ( - "profile", - models.OneToOneField( - on_delete=django.db.models.deletion.CASCADE, - related_name="info", - to="judge.profile", - verbose_name="profile associated", - ), - ), - ], - ), - ] diff --git a/judge/migrations/0188_official_contest.py b/judge/migrations/0188_official_contest.py deleted file mode 100644 index 89414a7..0000000 --- a/judge/migrations/0188_official_contest.py +++ /dev/null @@ -1,110 +0,0 @@ -# Generated by Django 3.2.18 on 2024-05-30 04:32 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0187_profile_info"), - ] - - operations = [ - migrations.CreateModel( - name="OfficialContestCategory", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "name", - models.CharField( - max_length=50, - unique=True, - verbose_name="official contest category", - ), - ), - ], - options={ - "verbose_name": "official contest category", - "verbose_name_plural": "official contest categories", - }, - ), - migrations.CreateModel( - name="OfficialContestLocation", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "name", - models.CharField( - max_length=50, - unique=True, - verbose_name="official contest location", - ), - ), - ], - options={ - "verbose_name": "official contest location", - "verbose_name_plural": "official contest locations", - }, - ), - migrations.CreateModel( - name="OfficialContest", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("year", models.PositiveIntegerField(verbose_name="year")), - ( - "category", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="judge.officialcontestcategory", - verbose_name="contest category", - ), - ), - ( - "contest", - models.OneToOneField( - on_delete=django.db.models.deletion.CASCADE, - related_name="official", - to="judge.contest", - verbose_name="contest", - ), - ), - ( - "location", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="judge.officialcontestlocation", - verbose_name="contest location", - ), - ), - ], - options={ - "verbose_name": "official contest", - "verbose_name_plural": "official contests", - }, - ), - ] diff --git a/judge/migrations/0189_organization_image.py b/judge/migrations/0189_organization_image.py deleted file mode 100644 index 4307a24..0000000 --- a/judge/migrations/0189_organization_image.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.21 on 2024-07-08 00:05 - -from django.db import migrations, models -import judge.models.profile - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0188_official_contest"), - ] - - operations = [ - migrations.AddField( - model_name="organization", - name="organization_image", - field=models.ImageField( - null=True, upload_to=judge.models.profile.organization_image_path - ), - ), - ] diff --git a/judge/migrations/0190_deprecate_old_notif_fields.py b/judge/migrations/0190_deprecate_old_notif_fields.py deleted file mode 100644 index dbf6f00..0000000 --- a/judge/migrations/0190_deprecate_old_notif_fields.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.18 on 2024-08-13 10:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0189_organization_image"), - ] - - operations = [ - migrations.RemoveField( - model_name="notification", - name="comment", - ), - migrations.RemoveField( - model_name="notification", - name="read", - ), - ] diff --git a/judge/migrations/0191_deprecate_old_org_image.py b/judge/migrations/0191_deprecate_old_org_image.py deleted file mode 100644 index 76d76f3..0000000 --- a/judge/migrations/0191_deprecate_old_org_image.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.18 on 2024-08-22 03:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0190_deprecate_old_notif_fields"), - ] - - operations = [ - migrations.RemoveField( - model_name="organization", - name="logo_override_image", - ), - ] diff --git a/judge/migrations/0192_course_lesson_problem.py b/judge/migrations/0192_course_lesson_problem.py deleted file mode 100644 index 89a1185..0000000 --- a/judge/migrations/0192_course_lesson_problem.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 3.2.21 on 2024-09-02 05:28 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0191_deprecate_old_org_image"), - ] - - operations = [ - migrations.CreateModel( - name="CourseLessonProblem", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("order", models.IntegerField(default=0, verbose_name="order")), - ("score", models.IntegerField(default=0, verbose_name="score")), - ( - "lesson", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="lesson_problems", - to="judge.courselesson", - ), - ), - ( - "problem", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to="judge.problem" - ), - ), - ], - ), - ] diff --git a/judge/migrations/0193_remove_old_course_problems.py b/judge/migrations/0193_remove_old_course_problems.py deleted file mode 100644 index 809b3e9..0000000 --- a/judge/migrations/0193_remove_old_course_problems.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.18 on 2024-09-03 14:33 - -from django.db import migrations, models - - -def migrate_problems_to_courselessonproblem(apps, schema_editor): - CourseLesson = apps.get_model("judge", "CourseLesson") - CourseLessonProblem = apps.get_model("judge", "CourseLessonProblem") - - for lesson in CourseLesson.objects.all(): - for problem in lesson.problems.all(): - CourseLessonProblem.objects.create( - lesson=lesson, problem=problem, order=1, score=1 - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0192_course_lesson_problem"), - ] - - operations = [ - migrations.RunPython(migrate_problems_to_courselessonproblem), - migrations.RemoveField( - model_name="courselesson", - name="problems", - ), - ] diff --git a/judge/migrations/0194_course_contest.py b/judge/migrations/0194_course_contest.py deleted file mode 100644 index 6c3e534..0000000 --- a/judge/migrations/0194_course_contest.py +++ /dev/null @@ -1,67 +0,0 @@ -# Generated by Django 3.2.21 on 2024-09-30 22:31 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("judge", "0193_remove_old_course_problems"), - ] - - operations = [ - migrations.AddField( - model_name="contest", - name="is_in_course", - field=models.BooleanField(default=False, verbose_name="contest in course"), - ), - migrations.AddField( - model_name="courselesson", - name="is_visible", - field=models.BooleanField(default=True, verbose_name="publicly visible"), - ), - migrations.AlterField( - model_name="courselesson", - name="content", - field=models.TextField(verbose_name="lesson content"), - ), - migrations.AlterField( - model_name="courselesson", - name="title", - field=models.TextField(verbose_name="lesson title"), - ), - migrations.CreateModel( - name="CourseContest", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("order", models.IntegerField(default=0, verbose_name="order")), - ("points", models.IntegerField(verbose_name="points")), - ( - "contest", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="course", - to="judge.contest", - unique=True, - ), - ), - ( - "course", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="contests", - to="judge.course", - ), - ), - ], - ), - ] diff --git a/judge/ml/collab_filter.py b/judge/ml/collab_filter.py index 105a534..512c747 100644 --- a/judge/ml/collab_filter.py +++ b/judge/ml/collab_filter.py @@ -1,11 +1,8 @@ import numpy as np -import os -import hashlib - -from django.core.cache import cache from django.conf import settings - -from judge.caching import cache_wrapper +import os +from django.core.cache import cache +import hashlib class CollabFilter: @@ -13,70 +10,71 @@ class CollabFilter: COSINE = "cosine" # name = 'collab_filter' or 'collab_filter_time' - def __init__(self, name): - self.embeddings = np.load( + def __init__(self, name, **kwargs): + embeddings = np.load( os.path.join(settings.ML_OUTPUT_PATH, name + "/embeddings.npz"), allow_pickle=True, ) - _, problem_arr = self.embeddings.files + arr0, arr1 = embeddings.files self.name = name - self.problem_embeddings = self.embeddings[problem_arr].item() - - def __str__(self): - return self.name + self.user_embeddings = embeddings[arr0] + self.problem_embeddings = embeddings[arr1] def compute_scores(self, query_embedding, item_embeddings, measure=DOT): - """Return {id: score}""" + """Computes the scores of the candidates given a query. + Args: + query_embedding: a vector of shape [k], representing the query embedding. + item_embeddings: a matrix of shape [N, k], such that row i is the embedding + of item i. + measure: a string specifying the similarity measure to be used. Can be + either DOT or COSINE. + Returns: + scores: a vector of shape [N], such that scores[i] is the score of item i. + """ u = query_embedding - V = np.stack(list(item_embeddings.values())) + V = item_embeddings if measure == self.COSINE: V = V / np.linalg.norm(V, axis=1, keepdims=True) u = u / np.linalg.norm(u) scores = u.dot(V.T) - scores_by_id = {id_: s for id_, s in zip(item_embeddings.keys(), scores)} - return scores_by_id + return scores - def _get_embedding_version(self): - first_problem = self.problem_embeddings[0] - array_bytes = first_problem.tobytes() - hash_object = hashlib.sha256(array_bytes) - hash_bytes = hash_object.digest() - return hash_bytes.hex()[:5] + def user_recommendations(self, user, problems, measure=DOT, limit=None, **kwargs): + uid = user.id + problems_hash = hashlib.sha1(str(problems).encode()).hexdigest() + cache_key = ":".join(map(str, [self.name, uid, measure, limit, problems_hash])) + value = cache.get(cache_key) + if value: + return value - @cache_wrapper(prefix="CFgue", timeout=86400) - def _get_user_embedding(self, user_id, embedding_version): - user_arr, _ = self.embeddings.files - user_embeddings = self.embeddings[user_arr].item() - if user_id not in user_embeddings: - return user_embeddings[0] - return user_embeddings[user_id] + if uid >= len(self.user_embeddings): + uid = 0 + scores = self.compute_scores( + self.user_embeddings[uid], self.problem_embeddings, measure + ) - def get_user_embedding(self, user_id): - version = self._get_embedding_version() - return self._get_user_embedding(user_id, version) - - @cache_wrapper(prefix="user_recommendations", timeout=3600) - def user_recommendations(self, user_id, problems, measure=DOT, limit=None): - user_embedding = self.get_user_embedding(user_id) - scores = self.compute_scores(user_embedding, self.problem_embeddings, measure) res = [] # [(score, problem)] for pid in problems: - if pid in scores: + # pid = problem.id + if pid < len(scores): res.append((scores[pid], pid)) res.sort(reverse=True, key=lambda x: x[0]) - return res[:limit] + res = res[:limit] + cache.set(cache_key, res, 3600) + return res # return a list of pid def problem_neighbors(self, problem, problemset, measure=DOT, limit=None): pid = problem.id - if pid not in self.problem_embeddings: + if pid >= len(self.problem_embeddings): return [] - embedding = self.problem_embeddings[pid] - scores = self.compute_scores(embedding, self.problem_embeddings, measure) + scores = self.compute_scores( + self.problem_embeddings[pid], self.problem_embeddings, measure + ) res = [] for p in problemset: - if p in scores: + if p < len(scores): res.append((scores[p], p)) res.sort(reverse=True, key=lambda x: x[0]) return res[:limit] diff --git a/judge/models/__init__.py b/judge/models/__init__.py index ef62797..ee9d364 100644 --- a/judge/models/__init__.py +++ b/judge/models/__init__.py @@ -2,9 +2,11 @@ from reversion import revisions from judge.models.choices import ( ACE_THEMES, + EFFECTIVE_MATH_ENGINES, + MATH_ENGINES_CHOICES, TIMEZONE, ) -from judge.models.comment import Comment, CommentLock, CommentVote +from judge.models.comment import Comment, CommentLock, CommentVote, Notification from judge.models.contest import ( Contest, ContestMoss, @@ -14,10 +16,6 @@ from judge.models.contest import ( ContestTag, Rating, ContestProblemClarification, - ContestsSummary, - OfficialContestCategory, - OfficialContestLocation, - OfficialContest, ) from judge.models.interface import BlogPost, MiscConfig, NavigationBar, validate_regex from judge.models.message import PrivateMessage, PrivateMessageThread @@ -46,7 +44,6 @@ from judge.models.profile import ( Profile, Friend, OrganizationProfile, - ProfileInfo, ) from judge.models.runtime import Judge, Language, RuntimeVersion from judge.models.submission import ( @@ -55,21 +52,11 @@ from judge.models.submission import ( SubmissionSource, SubmissionTestCase, ) - -from judge.models.test_formatter import TestFormatterModel from judge.models.ticket import Ticket, TicketMessage from judge.models.volunteer import VolunteerProblemVote from judge.models.pagevote import PageVote, PageVoteVoter from judge.models.bookmark import BookMark, MakeBookMark -from judge.models.course import ( - Course, - CourseRole, - CourseLesson, - CourseLessonProblem, - CourseContest, -) -from judge.models.notification import Notification, NotificationProfile -from judge.models.test_formatter import TestFormatterModel +from judge.models.course import Course revisions.register(Profile, exclude=["points", "last_access", "ip", "rating"]) revisions.register(Problem, follow=["language_limits"]) diff --git a/judge/models/bookmark.py b/judge/models/bookmark.py index 06be327..0fb353e 100644 --- a/judge/models/bookmark.py +++ b/judge/models/bookmark.py @@ -2,11 +2,11 @@ from django.db import models from django.db.models import CASCADE from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType -from judge.models.profile import Profile -from judge.caching import cache_wrapper +from judge.models import Profile +from judge.models.contest import Contest +from judge.models.interface import BlogPost +from judge.models.problem import Problem, Solution __all__ = ["BookMark"] @@ -16,26 +16,36 @@ class BookMark(models.Model): max_length=30, verbose_name=_("associated page"), db_index=True, - ) # deprecated - score = models.IntegerField(verbose_name=_("votes"), default=0) - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() - linked_object = GenericForeignKey("content_type", "object_id") + ) - @cache_wrapper(prefix="BMgb") - def is_bookmarked_by(self, user): - return MakeBookMark.objects.filter(bookmark=self, user=user).exists() + def get_bookmark(self, user): + userqueryset = MakeBookMark.objects.filter(bookmark=self, user=user) + if userqueryset.exists(): + return True + else: + return False + + def page_object(self): + try: + page = self.page + if page.startswith("p:"): + return Problem.objects.get(code=page[2:]) + elif page.startswith("c:"): + return Contest.objects.get(key=page[2:]) + elif page.startswith("b:"): + return BlogPost.objects.get(id=page[2:]) + elif page.startswith("s:"): + return Solution.objects.get(problem__code=page[2:]) + return None + except ObjectDoesNotExist: + return None class Meta: verbose_name = _("bookmark") verbose_name_plural = _("bookmarks") - indexes = [ - models.Index(fields=["content_type", "object_id"]), - ] - unique_together = ("content_type", "object_id") def __str__(self): - return f"bookmark for {self.linked_object}" + return self.page class MakeBookMark(models.Model): @@ -45,30 +55,6 @@ class MakeBookMark(models.Model): ) class Meta: - indexes = [ - models.Index(fields=["user", "bookmark"]), - ] unique_together = ["user", "bookmark"] verbose_name = _("make bookmark") verbose_name_plural = _("make bookmarks") - - -@cache_wrapper(prefix="gocb", expected_type=BookMark) -def _get_or_create_bookmark(content_type, object_id): - bookmark, created = BookMark.objects.get_or_create( - content_type=content_type, - object_id=object_id, - ) - return bookmark - - -class Bookmarkable: - def get_or_create_bookmark(self): - content_type = ContentType.objects.get_for_model(self) - object_id = self.pk - return _get_or_create_bookmark(content_type, object_id) - - -def dirty_bookmark(bookmark, profile): - bookmark.is_bookmarked_by.dirty(bookmark, profile) - _get_or_create_bookmark.dirty(bookmark.content_type, bookmark.object_id) diff --git a/judge/models/choices.py b/judge/models/choices.py index 105e7e7..b6fab5c 100644 --- a/judge/models/choices.py +++ b/judge/models/choices.py @@ -54,3 +54,13 @@ ACE_THEMES = ( ("vibrant_ink", "Vibrant Ink"), ("xcode", "XCode"), ) + +MATH_ENGINES_CHOICES = ( + ("tex", _("Leave as LaTeX")), + ("svg", _("SVG with PNG fallback")), + ("mml", _("MathML only")), + ("jax", _("MathJax with SVG/PNG fallback")), + ("auto", _("Detect best quality")), +) + +EFFECTIVE_MATH_ENGINES = ("svg", "mml", "tex", "jax") diff --git a/judge/models/comment.py b/judge/models/comment.py index 7e9f5bf..9486761 100644 --- a/judge/models/comment.py +++ b/judge/models/comment.py @@ -9,8 +9,6 @@ from django.db.models import CASCADE from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType from mptt.fields import TreeForeignKey from mptt.models import MPTTModel from reversion.models import Version @@ -20,11 +18,14 @@ from judge.models.interface import BlogPost from judge.models.problem import Problem, Solution from judge.models.profile import Profile from judge.utils.cachedict import CacheDict -from judge.caching import cache_wrapper __all__ = ["Comment", "CommentLock", "CommentVote", "Notification"] +comment_validator = RegexValidator( + r"^[pcs]:[a-z0-9]+$|^b:\d+$", _(r"Page code must be ^[pcs]:[a-z0-9]+$|^b:\d+$") +) + class VersionRelation(GenericRelation): def __init__(self): @@ -43,9 +44,12 @@ class VersionRelation(GenericRelation): class Comment(MPTTModel): author = models.ForeignKey(Profile, verbose_name=_("commenter"), on_delete=CASCADE) time = models.DateTimeField(verbose_name=_("posted time"), auto_now_add=True) - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() - linked_object = GenericForeignKey("content_type", "object_id") + page = models.CharField( + max_length=30, + verbose_name=_("associated page"), + db_index=True, + validators=[comment_validator], + ) score = models.IntegerField(verbose_name=_("votes"), default=0) body = models.TextField(verbose_name=_("body of comment"), max_length=8192) hidden = models.BooleanField(verbose_name=_("hide the comment"), default=0) @@ -57,30 +61,34 @@ class Comment(MPTTModel): related_name="replies", on_delete=CASCADE, ) - revision_count = models.PositiveIntegerField(default=1) - versions = VersionRelation() class Meta: verbose_name = _("comment") verbose_name_plural = _("comments") - indexes = [ - models.Index(fields=["content_type", "object_id"]), - ] class MPTTMeta: order_insertion_by = ["-time"] @classmethod def most_recent(cls, user, n, batch=None, organization=None): - queryset = cls.objects.filter(hidden=False).order_by("-id") + queryset = ( + cls.objects.filter(hidden=False) + .select_related("author__user") + .defer("author__about", "body") + .order_by("-id") + ) if organization: queryset = queryset.filter(author__in=organization.members.all()) - problem_access = CacheDict(lambda p: p.is_accessible_by(user)) - contest_access = CacheDict(lambda c: c.is_accessible_by(user)) - blog_access = CacheDict(lambda b: b.is_accessible_by(user)) + problem_access = CacheDict( + lambda code: Problem.objects.get(code=code).is_accessible_by(user) + ) + contest_access = CacheDict( + lambda key: Contest.objects.get(key=key).is_accessible_by(user) + ) + blog_access = CacheDict(lambda id: BlogPost.objects.get(id=id).can_see(user)) if n == -1: n = len(queryset) @@ -94,57 +102,111 @@ class Comment(MPTTModel): if not slice: break for comment in slice: - if isinstance(comment.linked_object, Problem): - if problem_access[comment.linked_object]: - output.append(comment) - elif isinstance(comment.linked_object, Contest): - if contest_access[comment.linked_object]: - output.append(comment) - elif isinstance(comment.linked_object, BlogPost): - if blog_access[comment.linked_object]: - output.append(comment) - elif isinstance(comment.linked_object, Solution): - if problem_access[comment.linked_object.problem]: - output.append(comment) + if comment.page.startswith("p:") or comment.page.startswith("s:"): + try: + if problem_access[comment.page[2:]]: + output.append(comment) + except Problem.DoesNotExist: + pass + elif comment.page.startswith("c:"): + try: + if contest_access[comment.page[2:]]: + output.append(comment) + except Contest.DoesNotExist: + pass + elif comment.page.startswith("b:"): + try: + if blog_access[comment.page[2:]]: + output.append(comment) + except BlogPost.DoesNotExist: + pass + else: + output.append(comment) if len(output) >= n: return output return output @cached_property - def get_replies(self): - query = Comment.filter(parent=self) - return len(query) + def link(self): + try: + link = None + if self.page.startswith("p:"): + link = reverse("problem_detail", args=(self.page[2:],)) + elif self.page.startswith("c:"): + link = reverse("contest_view", args=(self.page[2:],)) + elif self.page.startswith("b:"): + key = "blog_slug:%s" % self.page[2:] + slug = cache.get(key) + if slug is None: + try: + slug = BlogPost.objects.get(id=self.page[2:]).slug + except ObjectDoesNotExist: + slug = "" + cache.set(key, slug, 3600) + link = reverse("blog_post", args=(self.page[2:], slug)) + elif self.page.startswith("s:"): + link = reverse("problem_editorial", args=(self.page[2:],)) + except Exception: + link = "invalid" + return link + + @classmethod + def get_page_title(cls, page): + try: + if page.startswith("p:"): + return Problem.objects.values_list("name", flat=True).get(code=page[2:]) + elif page.startswith("c:"): + return Contest.objects.values_list("name", flat=True).get(key=page[2:]) + elif page.startswith("b:"): + return BlogPost.objects.values_list("title", flat=True).get(id=page[2:]) + elif page.startswith("s:"): + return _("Editorial for %s") % Problem.objects.values_list( + "name", flat=True + ).get(code=page[2:]) + return "" + except ObjectDoesNotExist: + return "" @cached_property def page_title(self): - if isinstance(self.linked_object, Problem): - return self.linked_object.name - elif isinstance(self.linked_object, Contest): - return self.linked_object.name - elif isinstance(self.linked_object, Solution): - return _("Editorial for ") + self.linked_object.problem.name - elif isinstance(self.linked_object, BlogPost): - return self.linked_object.title - - @cached_property - def link(self): - if isinstance(self.linked_object, Problem): - return reverse("problem_detail", args=(self.linked_object.code,)) - elif isinstance(self.linked_object, Contest): - return reverse("contest_view", args=(self.linked_object.key,)) - elif isinstance(self.linked_object, Solution): - return reverse("problem_editorial", args=(self.linked_object.problem.code,)) - elif isinstance(self.linked_object, BlogPost): - return reverse( - "blog_post", - args=( - self.object_id, - self.linked_object.slug, - ), - ) + return self.get_page_title(self.page) def get_absolute_url(self): - return "%s?comment-id=%d#comment-%d" % (self.link, self.id, self.id) + return "%s#comment-%d" % (self.link, self.id) + + @cached_property + def page_object(self): + try: + page = self.page + if page.startswith("p:"): + return Problem.objects.get(code=page[2:]) + elif page.startswith("c:"): + return Contest.objects.get(key=page[2:]) + elif page.startswith("b:"): + return BlogPost.objects.get(id=page[2:]) + elif page.startswith("s:"): + return Solution.objects.get(problem__code=page[2:]) + return None + except ObjectDoesNotExist: + return None + + def __str__(self): + return "%(page)s by %(user)s" % { + "page": self.page, + "user": self.author.user.username, + } + + # Only use this when queried with + # .prefetch_related(Prefetch('votes', queryset=CommentVote.objects.filter(voter_id=profile_id))) + # It's rather stupid to put a query specific property on the model, but the alternative requires + # digging Django internals, and could not be guaranteed to work forever. + # Hence it is left here for when the alternative breaks. + # @property + # def vote_score(self): + # queryset = self.votes.all() + # if not queryset: + # return 0 + # return queryset[0].score class CommentVote(models.Model): @@ -163,6 +225,7 @@ class CommentLock(models.Model): max_length=30, verbose_name=_("associated page"), db_index=True, + validators=[comment_validator], ) class Meta: @@ -172,8 +235,27 @@ class CommentLock(models.Model): return str(self.page) -@cache_wrapper(prefix="gcc") -def get_visible_comment_count(content_type, object_id): - return Comment.objects.filter( - content_type=content_type, object_id=object_id, hidden=False - ).count() +class Notification(models.Model): + owner = models.ForeignKey( + Profile, + verbose_name=_("owner"), + related_name="notifications", + on_delete=CASCADE, + ) + time = models.DateTimeField(verbose_name=_("posted time"), auto_now_add=True) + comment = models.ForeignKey( + Comment, null=True, verbose_name=_("comment"), on_delete=CASCADE + ) + read = models.BooleanField(verbose_name=_("read"), default=False) + category = models.CharField(verbose_name=_("category"), max_length=1000) + html_link = models.TextField( + default="", + verbose_name=_("html link to comments, used for non-comments"), + max_length=1000, + ) + author = models.ForeignKey( + Profile, + null=True, + verbose_name=_("who trigger, used for non-comment"), + on_delete=CASCADE, + ) diff --git a/judge/models/contest.py b/judge/models/contest.py index 625841d..3d3cc6c 100644 --- a/judge/models/contest.py +++ b/judge/models/contest.py @@ -2,14 +2,10 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator from django.db import models, transaction from django.db.models import CASCADE, Q -from django.db.models.signals import m2m_changed from django.urls import reverse from django.utils import timezone from django.utils.functional import cached_property from django.utils.translation import gettext, gettext_lazy as _ -from django.contrib.contenttypes.fields import GenericRelation -from django.dispatch import receiver - from jsonfield import JSONField from lupa import LuaRuntime from moss import ( @@ -19,17 +15,12 @@ from moss import ( MOSS_LANG_PYTHON, MOSS_LANG_PASCAL, ) -from datetime import timedelta, datetime from judge import contest_format from judge.models.problem import Problem from judge.models.profile import Organization, Profile from judge.models.submission import Submission from judge.ratings import rate_contest -from judge.models.pagevote import PageVotable -from judge.models.bookmark import Bookmarkable -from judge.fulltext import SearchManager -from judge.caching import cache_wrapper __all__ = [ "Contest", @@ -39,10 +30,6 @@ __all__ = [ "ContestSubmission", "Rating", "ContestProblemClarification", - "ContestsSummary", - "OfficialContest", - "OfficialContestCategory", - "OfficialContestLocation", ] @@ -87,7 +74,7 @@ class ContestTag(models.Model): verbose_name_plural = _("contest tags") -class Contest(models.Model, PageVotable, Bookmarkable): +class Contest(models.Model): SCOREBOARD_VISIBLE = "V" SCOREBOARD_AFTER_CONTEST = "C" SCOREBOARD_AFTER_PARTICIPATION = "P" @@ -107,13 +94,11 @@ class Contest(models.Model, PageVotable, Bookmarkable): ) authors = models.ManyToManyField( Profile, - verbose_name=_("authors"), help_text=_("These users will be able to edit the contest."), related_name="authors+", ) curators = models.ManyToManyField( Profile, - verbose_name=_("curators"), help_text=_( "These users will be able to edit the contest, " "but will not be listed as authors." @@ -123,7 +108,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): ) testers = models.ManyToManyField( Profile, - verbose_name=_("testers"), help_text=_( "These users will be able to view the contest, " "but not edit it." ), @@ -180,11 +164,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): related_name="view_contest_scoreboard", help_text=_("These users will be able to view the scoreboard."), ) - public_scoreboard = models.BooleanField( - verbose_name=_("public scoreboard"), - help_text=_("Ranking page is public even for private contests."), - default=False, - ) use_clarifications = models.BooleanField( verbose_name=_("no comments"), help_text=_("Use clarification system instead of comments."), @@ -246,10 +225,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): verbose_name=_("organizations"), help_text=_("If private, only these organizations may see the contest"), ) - is_in_course = models.BooleanField( - verbose_name=_("contest in course"), - default=False, - ) og_image = models.CharField( verbose_name=_("OpenGraph image"), default="", max_length=150, blank=True ) @@ -322,19 +297,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): validators=[MinValueValidator(0), MaxValueValidator(10)], help_text=_("Number of digits to round points to."), ) - rate_limit = models.PositiveIntegerField( - verbose_name=(_("rate limit")), - null=True, - blank=True, - validators=[MinValueValidator(1), MaxValueValidator(5)], - help_text=_( - "Maximum number of submissions per minute. Leave empty if you don't want rate limit." - ), - ) - comments = GenericRelation("Comment") - pagevote = GenericRelation("PageVote") - bookmark = GenericRelation("BookMark") - objects = SearchManager(("key", "name")) @cached_property def format_class(self): @@ -359,7 +321,9 @@ class Contest(models.Model, PageVotable, Bookmarkable): def clean(self): # Django will complain if you didn't fill in start_time or end_time, so we don't have to. if self.start_time and self.end_time and self.start_time >= self.end_time: - raise ValidationError(_("End time must be after start time")) + raise ValidationError( + "What is this? A contest that ended before it starts?" + ) self.format_class.validate(self.format_config) try: @@ -374,24 +338,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): "Contest problem label script: script should return a string." ) - def save(self, *args, **kwargs): - earliest_start_time = datetime(2020, 1, 1).replace(tzinfo=timezone.utc) - if self.start_time < earliest_start_time: - self.start_time = earliest_start_time - - if self.end_time < self.start_time: - self.end_time = self.start_time + timedelta(hours=1) - - one_year_later = self.start_time + timedelta(days=365) - if self.end_time > one_year_later: - self.end_time = one_year_later - - max_duration = timedelta(days=7) - if self.time_limit and self.time_limit > max_duration: - self.time_limit = max_duration - - super().save(*args, **kwargs) - def is_in_contest(self, user): if user.is_authenticated: profile = user.profile @@ -483,44 +429,35 @@ class Contest(models.Model, PageVotable, Bookmarkable): def ended(self): return self.end_time < self._now - @cache_wrapper(prefix="Coai") - def _author_ids(self): - return set( - Contest.authors.through.objects.filter(contest=self).values_list( - "profile_id", flat=True - ) + @cached_property + def author_ids(self): + return Contest.authors.through.objects.filter(contest=self).values_list( + "profile_id", flat=True ) - @cache_wrapper(prefix="Coci") - def _curator_ids(self): - return set( + @cached_property + def editor_ids(self): + return self.author_ids.union( Contest.curators.through.objects.filter(contest=self).values_list( "profile_id", flat=True ) ) - @cache_wrapper(prefix="Coti") - def _tester_ids(self): - return set( - Contest.testers.through.objects.filter(contest=self).values_list( - "profile_id", flat=True - ) + @cached_property + def tester_ids(self): + return Contest.testers.through.objects.filter(contest=self).values_list( + "profile_id", flat=True ) @cached_property - def author_ids(self): - return self._author_ids() - - @cached_property - def editor_ids(self): - return self.author_ids.union(self._curator_ids()) - - @cached_property - def tester_ids(self): - return self._tester_ids() + def total_points(self): + total = 0 + for problem in self.problems.all(): + total += problem.points + return total def __str__(self): - return f"{self.name} ({self.key})" + return self.name def get_absolute_url(self): return reverse("contest_view", args=(self.key,)) @@ -565,14 +502,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): if not self.is_visible: raise self.Inaccessible() - if self.is_in_course: - from judge.models import Course, CourseContest - - course_contest = CourseContest.objects.filter(contest=self).first() - if Course.is_accessible_by(course_contest.course, user.profile): - return - raise self.Inaccessible() - # Contest is not private if not self.is_private and not self.is_organization_private: return @@ -614,20 +543,20 @@ class Contest(models.Model, PageVotable, Bookmarkable): return True # If the user is a contest organizer or curator - if hasattr(user, "profile") and user.profile.id in self.editor_ids: + if ( + user.has_perm("judge.edit_own_contest") + and user.profile.id in self.editor_ids + ): return True return False - + @classmethod def get_visible_contests(cls, user, show_own_contests_only=False): if not user.is_authenticated: return ( cls.objects.filter( - is_visible=True, - is_organization_private=False, - is_private=False, - is_in_course=False, + is_visible=True, is_organization_private=False, is_private=False ) .defer("description") .distinct() @@ -641,7 +570,7 @@ class Contest(models.Model, PageVotable, Bookmarkable): ) or show_own_contests_only ): - q = Q(is_visible=True, is_in_course=False) + q = Q(is_visible=True) q &= ( Q(view_contest_scoreboard=user.profile) | Q(is_organization_private=False, is_private=False) @@ -696,20 +625,6 @@ class Contest(models.Model, PageVotable, Bookmarkable): verbose_name_plural = _("contests") -@receiver(m2m_changed, sender=Contest.organizations.through) -def update_organization_private(sender, instance, **kwargs): - if kwargs["action"] in ["post_add", "post_remove", "post_clear"]: - instance.is_organization_private = instance.organizations.exists() - instance.save(update_fields=["is_organization_private"]) - - -@receiver(m2m_changed, sender=Contest.private_contestants.through) -def update_private(sender, instance, **kwargs): - if kwargs["action"] in ["post_add", "post_remove", "post_clear"]: - instance.is_private = instance.private_contestants.exists() - instance.save(update_fields=["is_private"]) - - class ContestParticipation(models.Model): LIVE = 0 SPECTATE = -1 @@ -861,9 +776,12 @@ class ContestProblem(models.Model): partial = models.BooleanField(default=True, verbose_name=_("partial")) is_pretested = models.BooleanField(default=False, verbose_name=_("is pretested")) order = models.PositiveIntegerField(db_index=True, verbose_name=_("order")) - show_testcases = models.BooleanField( + output_prefix_override = models.IntegerField( + help_text=_("0 to not show testcases, 1 to show"), verbose_name=_("visible testcases"), - default=False, + null=True, + blank=True, + default=0, ) max_submissions = models.IntegerField( help_text=_( @@ -984,78 +902,3 @@ class ContestProblemClarification(models.Model): date = models.DateTimeField( verbose_name=_("clarification timestamp"), auto_now_add=True ) - - -class ContestsSummary(models.Model): - contests = models.ManyToManyField( - Contest, - ) - scores = models.JSONField( - null=True, - blank=True, - ) - key = models.CharField( - max_length=20, - unique=True, - ) - results = models.JSONField(null=True, blank=True) - - class Meta: - verbose_name = _("contests summary") - verbose_name_plural = _("contests summaries") - - def __str__(self): - return self.key - - def get_absolute_url(self): - return reverse("contests_summary", args=[self.key]) - - -class OfficialContestCategory(models.Model): - name = models.CharField( - max_length=50, verbose_name=_("official contest category"), unique=True - ) - - def __str__(self): - return self.name - - class Meta: - verbose_name = _("official contest category") - verbose_name_plural = _("official contest categories") - - -class OfficialContestLocation(models.Model): - name = models.CharField( - max_length=50, verbose_name=_("official contest location"), unique=True - ) - - def __str__(self): - return self.name - - class Meta: - verbose_name = _("official contest location") - verbose_name_plural = _("official contest locations") - - -class OfficialContest(models.Model): - contest = models.OneToOneField( - Contest, - verbose_name=_("contest"), - related_name="official", - on_delete=CASCADE, - ) - category = models.ForeignKey( - OfficialContestCategory, - verbose_name=_("contest category"), - on_delete=CASCADE, - ) - year = models.PositiveIntegerField(verbose_name=_("year")) - location = models.ForeignKey( - OfficialContestLocation, - verbose_name=_("contest location"), - on_delete=CASCADE, - ) - - class Meta: - verbose_name = _("official contest") - verbose_name_plural = _("official contests") diff --git a/judge/models/course.py b/judge/models/course.py index df4df21..47ca054 100644 --- a/judge/models/course.py +++ b/judge/models/course.py @@ -1,20 +1,18 @@ from django.core.validators import RegexValidator from django.db import models from django.utils.translation import gettext, gettext_lazy as _ -from django.urls import reverse -from django.db.models import Q -from judge.models import BlogPost, Problem, Contest +from judge.models import Contest from judge.models.profile import Organization, Profile +__all__ = [ + "Course", + "CourseRole", + "CourseResource", + "CourseAssignment", +] -class RoleInCourse(models.TextChoices): - STUDENT = "ST", _("Student") - ASSISTANT = "AS", _("Assistant") - TEACHER = "TE", _("Teacher") - - -EDITABLE_ROLES = (RoleInCourse.TEACHER, RoleInCourse.ASSISTANT) +course_directory_file = "" class Course(models.Model): @@ -22,7 +20,10 @@ class Course(models.Model): max_length=128, verbose_name=_("course name"), ) - about = models.TextField(verbose_name=_("course description")) + about = models.TextField(verbose_name=_("organization description")) + ending_time = models.DateTimeField( + verbose_name=_("ending time"), + ) is_public = models.BooleanField( verbose_name=_("publicly visible"), default=False, @@ -56,63 +57,48 @@ class Course(models.Model): def __str__(self): return self.name - def get_absolute_url(self): - return reverse("course_detail", args=(self.slug,)) - @classmethod - def is_editable_by(cls, course, profile): - try: - course_role = CourseRole.objects.get(course=course, user=profile) - return course_role.role in EDITABLE_ROLES - except CourseRole.DoesNotExist: - return False - - @classmethod - def is_accessible_by(cls, course, profile): - if not profile: - return False - try: - course_role = CourseRole.objects.get(course=course, user=profile) - if course_role.course.is_public: + def is_editable_by(course, profile): + if profile.is_superuser: + return True + userquery = CourseRole.objects.filter(course=course, user=profile) + if userquery.exists(): + if userquery[0].role == "AS" or userquery[0].role == "TE": return True - return course_role.role in EDITABLE_ROLES - except CourseRole.DoesNotExist: + return False + + @classmethod + def is_accessible_by(cls,course, profile): + userqueryset = CourseRole.objects.filter(course=course, user=profile) + if userqueryset.exists(): + return True + else: return False @classmethod - def get_accessible_courses(cls, profile): - return Course.objects.filter( - Q(is_public=True) | Q(courserole__role__in=EDITABLE_ROLES), - courserole__user=profile, - ).distinct() - - def _get_users_by_role(self, role): - course_roles = CourseRole.objects.filter(course=self, role=role).select_related( - "user" - ) - return [course_role.user for course_role in course_roles] - - def get_students(self): - return self._get_users_by_role(RoleInCourse.STUDENT) - - def get_assistants(self): - return self._get_users_by_role(RoleInCourse.ASSISTANT) - - def get_teachers(self): - return self._get_users_by_role(RoleInCourse.TEACHER) + def get_students(cls,course): + return CourseRole.objects.filter(course=course, role="ST") @classmethod - def add_student(cls, course, profiles): + def get_assistants(cls,course): + return CourseRole.objects.filter(course=course, role="AS").values("user") + + @classmethod + def get_teachers(cls,course): + return CourseRole.objects.filter(course=course, role="TE").values("user") + + @classmethod + def add_student(cls,course, profiles): for profile in profiles: CourseRole.make_role(course=course, user=profile, role="ST") @classmethod - def add_teachers(cls, course, profiles): + def add_teachers(cls,course, profiles): for profile in profiles: CourseRole.make_role(course=course, user=profile, role="TE") @classmethod - def add_assistants(cls, course, profiles): + def add_assistants(cls,course, profiles): for profile in profiles: CourseRole.make_role(course=course, user=profile, role="AS") @@ -128,9 +114,14 @@ class CourseRole(models.Model): Profile, verbose_name=_("user"), on_delete=models.CASCADE, - related_name="course_roles", + related_name=_("user_of_course"), ) + class RoleInCourse(models.TextChoices): + STUDENT = "ST", _("Student") + ASSISTANT = "AS", _("Assistant") + TEACHER = "TE", _("Teacher") + role = models.CharField( max_length=2, choices=RoleInCourse.choices, @@ -149,53 +140,44 @@ class CourseRole(models.Model): couresrole.role = role couresrole.save() - class Meta: - unique_together = ("course", "user") + +class CourseResource(models.Model): + course = models.OneToOneField( + Course, + verbose_name=_("course"), + on_delete=models.CASCADE, + db_index=True, + ) + files = models.FileField( + verbose_name=_("course files"), + null=True, + blank=True, + upload_to=course_directory_file, + ) + description = models.CharField( + verbose_name=_("description"), + blank=True, + max_length=150, + ) + order = models.IntegerField(null=True, default=None) + is_public = models.BooleanField( + verbose_name=_("publicly visible"), + default=False, + ) -class CourseLesson(models.Model): +class CourseAssignment(models.Model): course = models.ForeignKey( Course, verbose_name=_("course"), - related_name="lessons", + on_delete=models.CASCADE, + db_index=True, + ) + contest = models.OneToOneField( + Contest, + verbose_name=_("contest"), on_delete=models.CASCADE, ) - title = models.TextField(verbose_name=_("lesson title")) - content = models.TextField(verbose_name=_("lesson content")) - order = models.IntegerField(verbose_name=_("order"), default=0) - points = models.IntegerField(verbose_name=_("points")) - is_visible = models.BooleanField(verbose_name=_("publicly visible"), default=True) - - def get_absolute_url(self): - return reverse( - "course_lesson_detail", - args=( - self.course.slug, - self.id, - ), - ) - - -class CourseLessonProblem(models.Model): - lesson = models.ForeignKey( - CourseLesson, on_delete=models.CASCADE, related_name="lesson_problems" + points = models.FloatField( + verbose_name=_("points"), ) - problem = models.ForeignKey(Problem, on_delete=models.CASCADE) - order = models.IntegerField(verbose_name=_("order"), default=0) - score = models.IntegerField(verbose_name=_("score"), default=0) - - -class CourseContest(models.Model): - course = models.ForeignKey( - Course, on_delete=models.CASCADE, related_name="contests" - ) - contest = models.ForeignKey( - Contest, unique=True, on_delete=models.CASCADE, related_name="course" - ) - order = models.IntegerField(verbose_name=_("order"), default=0) - points = models.IntegerField(verbose_name=_("points")) - - def get_course_of_contest(contest): - course_contest = contest.course.get() - course = course_contest.course - return course diff --git a/judge/models/interface.py b/judge/models/interface.py index d9c6e2c..24b05de 100644 --- a/judge/models/interface.py +++ b/judge/models/interface.py @@ -5,15 +5,10 @@ from django.db import models from django.urls import reverse from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from django.utils.functional import cached_property -from django.contrib.contenttypes.fields import GenericRelation from mptt.fields import TreeForeignKey from mptt.models import MPTTModel from judge.models.profile import Organization, Profile -from judge.models.pagevote import PageVotable -from judge.models.bookmark import Bookmarkable -from judge.caching import cache_wrapper __all__ = ["MiscConfig", "validate_regex", "NavigationBar", "BlogPost"] @@ -75,7 +70,7 @@ class NavigationBar(MPTTModel): return pattern -class BlogPost(models.Model, PageVotable, Bookmarkable): +class BlogPost(models.Model): title = models.CharField(verbose_name=_("post title"), max_length=100) authors = models.ManyToManyField(Profile, verbose_name=_("authors"), blank=True) slug = models.SlugField(verbose_name=_("slug")) @@ -96,9 +91,6 @@ class BlogPost(models.Model, PageVotable, Bookmarkable): is_organization_private = models.BooleanField( verbose_name=_("private to organizations"), default=False ) - comments = GenericRelation("Comment") - pagevote = GenericRelation("PageVote") - bookmark = GenericRelation("BookMark") def __str__(self): return self.title @@ -106,7 +98,7 @@ class BlogPost(models.Model, PageVotable, Bookmarkable): def get_absolute_url(self): return reverse("blog_post", args=(self.id, self.slug)) - def is_accessible_by(self, user): + def can_see(self, user): if self.visible and self.publish_on <= timezone.now(): if not self.is_organization_private: return True @@ -133,10 +125,6 @@ class BlogPost(models.Model, PageVotable, Bookmarkable): and self.authors.filter(id=user.profile.id).exists() ) - @cache_wrapper(prefix="BPga", expected_type=models.query.QuerySet) - def get_authors(self): - return self.authors.only("id") - class Meta: permissions = (("edit_all_post", _("Edit all posts")),) verbose_name = _("blog post") diff --git a/judge/models/notification.py b/judge/models/notification.py deleted file mode 100644 index f5f40a6..0000000 --- a/judge/models/notification.py +++ /dev/null @@ -1,94 +0,0 @@ -from django.db import models -from django.utils.translation import gettext_lazy as _ -from django.db.models import CASCADE, F -from django.core.exceptions import ObjectDoesNotExist - -from judge.models import Profile, Comment -from judge.caching import cache_wrapper - - -category_to_verbose_message = { - "Add blog": _("Added a post"), - "Added to group": _("You are added to a group"), - "Comment": _("You have a new comment"), - "Delete blog": _("Deleted a post"), - "Reject blog": _("Rejected a post"), - "Approve blog": _("Approved a post"), - "Edit blog": _("Edited a post"), - "Mention": _("Mentioned you"), - "Reply": _("Replied you"), - "Ticket": _("Ticket"), -} - - -class Notification(models.Model): - owner = models.ForeignKey( - Profile, - verbose_name=_("owner"), - related_name="notifications", - on_delete=CASCADE, - ) - time = models.DateTimeField(verbose_name=_("posted time"), auto_now_add=True) - category = models.CharField(verbose_name=_("category"), max_length=1000) - html_link = models.TextField( - default="", - verbose_name=_("html link to comments, used for non-comments"), - max_length=1000, - ) - author = models.ForeignKey( - Profile, - null=True, - verbose_name=_("who trigger, used for non-comment"), - on_delete=CASCADE, - ) - - def verbose_activity(self): - if self.category in category_to_verbose_message: - return category_to_verbose_message[self.category] - - if "Problem public" in self.category: - is_public = "True" in self.category - if "(" in self.category and ")" in self.category: - groups = self.category.split("(", 1)[1].strip(")") - if is_public: - verbose_message = _("The problem is public to: ") + groups - else: - verbose_message = _("The problem is private to: ") + groups - else: - verbose_message = ( - _("The problem is public to everyone.") - if is_public - else _("The problem is private.") - ) - - return verbose_message - - return self.category - - -class NotificationProfile(models.Model): - unread_count = models.IntegerField(default=0) - user = models.OneToOneField(Profile, on_delete=CASCADE) - - -def make_notification(to_users, category, html_link, author): - for user in to_users: - if user == author: - continue - notif = Notification( - owner=user, category=category, html_link=html_link, author=author - ) - notif.save() - NotificationProfile.objects.get_or_create(user=user) - NotificationProfile.objects.filter(user=user).update( - unread_count=F("unread_count") + 1 - ) - unseen_notifications_count.dirty(user) - - -@cache_wrapper(prefix="unc") -def unseen_notifications_count(profile): - try: - return NotificationProfile.objects.get(user=profile).unread_count - except ObjectDoesNotExist: - return 0 diff --git a/judge/models/pagevote.py b/judge/models/pagevote.py index bc0224e..4923420 100644 --- a/judge/models/pagevote.py +++ b/judge/models/pagevote.py @@ -1,11 +1,8 @@ from django.db import models from django.db.models import CASCADE from django.utils.translation import gettext_lazy as _ -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType -from judge.models.profile import Profile -from judge.caching import cache_wrapper +from judge.models import Profile __all__ = ["PageVote", "PageVoteVoter"] @@ -15,27 +12,22 @@ class PageVote(models.Model): max_length=30, verbose_name=_("associated page"), db_index=True, - ) # deprecated + ) score = models.IntegerField(verbose_name=_("votes"), default=0) - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() - linked_object = GenericForeignKey("content_type", "object_id") class Meta: verbose_name = _("pagevote") verbose_name_plural = _("pagevotes") - indexes = [ - models.Index(fields=["content_type", "object_id"]), - ] - unique_together = ("content_type", "object_id") - @cache_wrapper(prefix="PVvs") def vote_score(self, user): - page_vote = PageVoteVoter.objects.filter(pagevote=self, voter=user).first() - return page_vote.score if page_vote else 0 + page_vote = PageVoteVoter.objects.filter(pagevote=self, voter=user) + if page_vote.exists(): + return page_vote.first().score + else: + return 0 def __str__(self): - return f"pagevote for {self.linked_object}" + return f"pagevote for {self.page}" class PageVoteVoter(models.Model): @@ -47,24 +39,3 @@ class PageVoteVoter(models.Model): unique_together = ["voter", "pagevote"] verbose_name = _("pagevote vote") verbose_name_plural = _("pagevote votes") - - -@cache_wrapper(prefix="gocp", expected_type=PageVote) -def _get_or_create_pagevote(content_type, object_id): - pagevote, created = PageVote.objects.get_or_create( - content_type=content_type, - object_id=object_id, - ) - return pagevote - - -class PageVotable: - def get_or_create_pagevote(self): - content_type = ContentType.objects.get_for_model(self) - object_id = self.pk - return _get_or_create_pagevote(content_type, object_id) - - -def dirty_pagevote(pagevote, profile): - pagevote.vote_score.dirty(pagevote, profile) - _get_or_create_pagevote.dirty(pagevote.content_type, pagevote.object_id) diff --git a/judge/models/problem.py b/judge/models/problem.py index 8114fb7..70ed115 100644 --- a/judge/models/problem.py +++ b/judge/models/problem.py @@ -1,22 +1,18 @@ -import errno from operator import attrgetter +from math import sqrt from django.conf import settings from django.contrib.contenttypes.fields import GenericRelation from django.core.cache import cache from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator from django.db import models -from django.db.models import CASCADE, F, FilteredRelation, Q, SET_NULL, Exists, OuterRef +from django.db.models import CASCADE, F, FilteredRelation, Q, SET_NULL from django.db.models.functions import Coalesce from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ -from django.db.models.signals import m2m_changed -from django.dispatch import receiver from judge.fulltext import SearchQuerySet -from judge.models.pagevote import PageVotable -from judge.models.bookmark import Bookmarkable from judge.models.profile import Organization, Profile from judge.models.runtime import Language from judge.user_translations import gettext as user_gettext @@ -24,7 +20,6 @@ from judge.models.problem_data import ( problem_data_storage, problem_directory_file_helper, ) -from judge.caching import cache_wrapper __all__ = [ "ProblemGroup", @@ -109,7 +104,9 @@ class License(models.Model): class TranslatedProblemQuerySet(SearchQuerySet): def __init__(self, **kwargs): - super(TranslatedProblemQuerySet, self).__init__(("code", "name"), **kwargs) + super(TranslatedProblemQuerySet, self).__init__( + ("code", "name", "description"), **kwargs + ) def add_i18n_name(self, language): return self.annotate( @@ -124,7 +121,7 @@ class TranslatedProblemQuerySet(SearchQuerySet): ) -class Problem(models.Model, PageVotable, Bookmarkable): +class Problem(models.Model): code = models.CharField( max_length=20, verbose_name=_("problem code"), @@ -271,9 +268,6 @@ class Problem(models.Model, PageVotable, Bookmarkable): objects = TranslatedProblemQuerySet.as_manager() tickets = GenericRelation("Ticket") - comments = GenericRelation("Comment") - pagevote = GenericRelation("PageVote") - bookmark = GenericRelation("BookMark") organizations = models.ManyToManyField( Organization, @@ -375,7 +369,7 @@ class Problem(models.Model, PageVotable, Bookmarkable): ) @classmethod - def get_visible_problems(cls, user, profile=None): + def get_visible_problems(cls, user): # Do unauthenticated check here so we can skip authentication checks later on. if not user.is_authenticated or not user: return cls.get_public_problems() @@ -389,7 +383,7 @@ class Problem(models.Model, PageVotable, Bookmarkable): # - not is_organization_private or in organization or `judge.see_organization_problem` # - author or curator or tester queryset = cls.objects.defer("description") - profile = profile or user.profile + if not ( user.has_perm("judge.see_private_problem") or user.has_perm("judge.edit_all_problem") @@ -399,25 +393,13 @@ class Problem(models.Model, PageVotable, Bookmarkable): # Either not organization private or in the organization. q &= Q(is_organization_private=False) | Q( is_organization_private=True, - organizations__in=profile.organizations.all(), + organizations__in=user.profile.organizations.all(), ) # Authors, curators, and testers should always have access, so OR at the very end. - q |= Exists( - Problem.authors.through.objects.filter( - problem=OuterRef("pk"), profile=profile - ) - ) - q |= Exists( - Problem.curators.through.objects.filter( - problem=OuterRef("pk"), profile=profile - ) - ) - q |= Exists( - Problem.testers.through.objects.filter( - problem=OuterRef("pk"), profile=profile - ) - ) + q |= Q(authors=user.profile) + q |= Q(curators=user.profile) + q |= Q(testers=user.profile) queryset = queryset.filter(q) return queryset @@ -436,27 +418,15 @@ class Problem(models.Model, PageVotable, Bookmarkable): @cached_property def author_ids(self): - return Problem.authors.through.objects.filter(problem=self).values_list( - "profile_id", flat=True - ) - - @cache_wrapper(prefix="Pga", expected_type=models.query.QuerySet) - def get_authors(self): - return self.authors.only("id") + return self.authors.values_list("id", flat=True) @cached_property def editor_ids(self): - return self.author_ids.union( - Problem.curators.through.objects.filter(problem=self).values_list( - "profile_id", flat=True - ) - ) + return self.author_ids | self.curators.values_list("id", flat=True) @cached_property def tester_ids(self): - return Problem.testers.through.objects.filter(problem=self).values_list( - "profile_id", flat=True - ) + return self.testers.values_list("id", flat=True) @cached_property def usable_common_names(self): @@ -561,36 +531,15 @@ class Problem(models.Model, PageVotable, Bookmarkable): cache.set(key, result) return result - def handle_code_change(self): - has_data = hasattr(self, "data_files") - has_pdf = bool(self.pdf_description) - if not has_data and not has_pdf: - return - - try: - problem_data_storage.rename(self.__original_code, self.code) - except OSError as e: - if e.errno != errno.ENOENT: - raise - - if has_pdf: - self.pdf_description.name = problem_directory_file_helper( - self.code, self.pdf_description.name - ) - super().save(update_fields=["pdf_description"]) - - if has_data: - self.data_files._update_code(self.__original_code, self.code) - - def save(self, should_move_data=True, *args, **kwargs): - code_changed = self.__original_code and self.code != self.__original_code + def save(self, *args, **kwargs): super(Problem, self).save(*args, **kwargs) - if code_changed and should_move_data: - self.handle_code_change() - - def delete(self, *args, **kwargs): - super().delete(*args, **kwargs) - problem_data_storage.delete_directory(self.code) + if self.code != self.__original_code: + try: + problem_data = self.data_files + except AttributeError: + pass + else: + problem_data._update_code(self.__original_code, self.code) save.alters_data = True @@ -680,10 +629,10 @@ class LanguageTemplate(models.Model): verbose_name_plural = _("language-specific templates") -class Solution(models.Model, PageVotable, Bookmarkable): +class Solution(models.Model): problem = models.OneToOneField( Problem, - on_delete=CASCADE, + on_delete=SET_NULL, verbose_name=_("associated problem"), null=True, blank=True, @@ -693,9 +642,6 @@ class Solution(models.Model, PageVotable, Bookmarkable): publish_on = models.DateTimeField(verbose_name=_("publish date")) authors = models.ManyToManyField(Profile, verbose_name=_("authors"), blank=True) content = models.TextField(verbose_name=_("editorial content")) - comments = GenericRelation("Comment") - pagevote = GenericRelation("PageVote") - bookmark = GenericRelation("BookMark") def get_absolute_url(self): problem = self.problem @@ -704,10 +650,6 @@ class Solution(models.Model, PageVotable, Bookmarkable): else: return reverse("problem_editorial", args=[problem.code]) - @cache_wrapper(prefix="Sga", expected_type=models.query.QuerySet) - def get_authors(self): - return self.authors.only("id") - def __str__(self): return _("Editorial for %s") % self.problem.name @@ -745,10 +687,3 @@ class ProblemPointsVote(models.Model): def __str__(self): return f"{self.voter}: {self.points} for {self.problem.code}" - - -@receiver(m2m_changed, sender=Problem.organizations.through) -def update_organization_private(sender, instance, **kwargs): - if kwargs["action"] in ["post_add", "post_remove", "post_clear"]: - instance.is_organization_private = instance.organizations.exists() - instance.save(update_fields=["is_organization_private"]) diff --git a/judge/models/problem_data.py b/judge/models/problem_data.py index adb92d8..1717924 100644 --- a/judge/models/problem_data.py +++ b/judge/models/problem_data.py @@ -38,7 +38,7 @@ CHECKERS = ( ("identical", _("Byte identical")), ("linecount", _("Line-by-line")), ("custom", _("Custom checker (PY)")), - ("customcpp", _("Custom checker (CPP)")), + ("customval", _("Custom validator (CPP)")), ("interact", _("Interactive")), ("testlib", _("Testlib")), ) @@ -90,8 +90,8 @@ class ProblemData(models.Model): upload_to=problem_directory_file, validators=[FileExtensionValidator(allowed_extensions=["py"])], ) - custom_checker_cpp = models.FileField( - verbose_name=_("custom cpp checker file"), + custom_validator = models.FileField( + verbose_name=_("custom validator file"), storage=problem_data_storage, null=True, blank=True, @@ -118,32 +118,6 @@ class ProblemData(models.Model): null=True, help_text=_("Leave empty for stdout"), ) - output_only = models.BooleanField( - verbose_name=_("is output only"), - help_text=_("Support output-only problem"), - null=True, - ) - use_ioi_signature = models.BooleanField( - verbose_name=_("is IOI signature"), - help_text=_("Use IOI Signature"), - null=True, - ) - signature_handler = models.FileField( - verbose_name=_("signature handler"), - storage=problem_data_storage, - null=True, - blank=True, - upload_to=problem_directory_file, - validators=[FileExtensionValidator(allowed_extensions=["cpp"])], - ) - signature_header = models.FileField( - verbose_name=_("signature header"), - storage=problem_data_storage, - null=True, - blank=True, - upload_to=problem_directory_file, - validators=[FileExtensionValidator(allowed_extensions=["h"])], - ) __original_zipfile = None @@ -162,16 +136,21 @@ class ProblemData(models.Model): get_file_cachekey(file), ) cache.delete(cache_key) - except (BadZipFile, FileNotFoundError): + except BadZipFile: pass - if self.zipfile != self.__original_zipfile: - self.__original_zipfile.delete(save=False) + if self.zipfile != self.__original_zipfile and self.__original_zipfile: + self.__original_zipfile.delete(save=False) return super(ProblemData, self).save(*args, **kwargs) def has_yml(self): return problem_data_storage.exists("%s/init.yml" % self.problem.code) def _update_code(self, original, new): + try: + problem_data_storage.rename(original, new) + except OSError as e: + if e.errno != errno.ENOENT: + raise if self.zipfile: self.zipfile.name = problem_directory_file_helper(new, self.zipfile.name) if self.generator: @@ -186,21 +165,9 @@ class ProblemData(models.Model): self.custom_checker.name = problem_directory_file_helper( new, self.custom_checker.name ) - if self.custom_checker_cpp: - self.custom_checker_cpp.name = problem_directory_file_helper( - new, self.custom_checker_cpp.name - ) - if self.interactive_judge: - self.interactive_judge.name = problem_directory_file_helper( - new, self.interactive_judge.name - ) - if self.signature_header: - self.signature_header.name = problem_directory_file_helper( - new, self.signature_header.name - ) - if self.signature_handler: - self.signature_handler.name = problem_directory_file_helper( - new, self.signature_handler.name + if self.custom_validator: + self.custom_validator.name = problem_directory_file_helper( + new, self.custom_validator.name ) self.save() diff --git a/judge/models/profile.py b/judge/models/profile.py index 4572b69..79b6ad8 100644 --- a/judge/models/profile.py +++ b/judge/models/profile.py @@ -1,5 +1,4 @@ from operator import mul -import os from django.conf import settings from django.contrib.auth.models import User @@ -10,31 +9,17 @@ from django.urls import reverse from django.utils.functional import cached_property from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ -from django.dispatch import receiver -from django.db.models.signals import post_save, pre_save - - from fernet_fields import EncryptedCharField from sortedm2m.fields import SortedManyToManyField -from judge.models.choices import ACE_THEMES, TIMEZONE +from judge.models.choices import ACE_THEMES, MATH_ENGINES_CHOICES, TIMEZONE from judge.models.runtime import Language from judge.ratings import rating_class -from judge.caching import cache_wrapper __all__ = ["Organization", "Profile", "OrganizationRequest", "Friend"] -TSHIRT_SIZES = ( - ("S", "Small (S)"), - ("M", "Medium (M)"), - ("L", "Large (L)"), - ("XL", "Extra Large (XL)"), - ("XXL", "2 Extra Large (XXL)"), -) - - class EncryptedNullCharField(EncryptedCharField): def get_prep_value(self, value): if not value: @@ -42,18 +27,6 @@ class EncryptedNullCharField(EncryptedCharField): return super(EncryptedNullCharField, self).get_prep_value(value) -def profile_image_path(profile, filename): - tail = filename.split(".")[-1] - new_filename = f"user_{profile.id}.{tail}" - return os.path.join(settings.DMOJ_PROFILE_IMAGE_ROOT, new_filename) - - -def organization_image_path(organization, filename): - tail = filename.split(".")[-1] - new_filename = f"organization_{organization.id}.{tail}" - return os.path.join(settings.DMOJ_ORGANIZATION_IMAGE_ROOT, new_filename) - - class Organization(models.Model): name = models.CharField(max_length=128, verbose_name=_("organization title")) slug = models.SlugField( @@ -70,9 +43,7 @@ class Organization(models.Model): verbose_name=_("short name"), help_text=_("Displayed beside user name during contests"), ) - about = models.CharField( - max_length=10000, verbose_name=_("organization description") - ) + about = models.TextField(verbose_name=_("organization description")) registrant = models.ForeignKey( "Profile", verbose_name=_("registrant"), @@ -110,7 +81,16 @@ class Organization(models.Model): null=True, blank=True, ) - organization_image = models.ImageField(upload_to=organization_image_path, null=True) + logo_override_image = models.CharField( + verbose_name=_("Logo override image"), + default="", + max_length=150, + blank=True, + help_text=_( + "This image will replace the default site logo for users " + "viewing the organization." + ), + ) def __contains__(self, item): if isinstance(item, int): @@ -122,13 +102,6 @@ class Organization(models.Model): "Organization membership test must be Profile or primany key" ) - def delete(self, *args, **kwargs): - contests = self.contest_set - for contest in contests.all(): - if contest.organizations.count() == 1: - contest.delete() - super().delete(*args, **kwargs) - def __str__(self): return self.name @@ -147,16 +120,6 @@ class Organization(models.Model): def get_submissions_url(self): return reverse("organization_submissions", args=(self.id, self.slug)) - def is_admin(self, profile): - return profile.id in self.get_admin_ids() - - @cache_wrapper(prefix="Orgai", expected_type=list) - def get_admin_ids(self): - return list(self.admins.values_list("id", flat=True)) - - def is_member(self, profile): - return profile in self - class Meta: ordering = ["name"] permissions = ( @@ -165,16 +128,13 @@ class Organization(models.Model): ) verbose_name = _("organization") verbose_name_plural = _("organizations") - app_label = "judge" class Profile(models.Model): user = models.OneToOneField( User, verbose_name=_("user associated"), on_delete=models.CASCADE ) - about = models.CharField( - max_length=10000, verbose_name=_("self-description"), null=True, blank=True - ) + about = models.TextField(verbose_name=_("self-description"), null=True, blank=True) timezone = models.CharField( max_length=50, verbose_name=_("location"), @@ -209,7 +169,6 @@ class Profile(models.Model): ("setter", "Problem Setter"), ("admin", "Admin"), ), - db_index=True, ) mute = models.BooleanField( verbose_name=_("comment mute"), @@ -221,7 +180,19 @@ class Profile(models.Model): help_text=_("User will not be ranked."), default=False, ) - rating = models.IntegerField(null=True, default=None, db_index=True) + is_banned_problem_voting = models.BooleanField( + verbose_name=_("banned from voting"), + help_text=_("User will not be able to vote on problems' point values."), + default=False, + ) + rating = models.IntegerField(null=True, default=None) + user_script = models.TextField( + verbose_name=_("user script"), + default="", + blank=True, + max_length=65536, + help_text=_("User-defined JavaScript for site customization."), + ) current_contest = models.OneToOneField( "ContestParticipation", verbose_name=_("current contest"), @@ -230,6 +201,13 @@ class Profile(models.Model): related_name="+", on_delete=models.SET_NULL, ) + math_engine = models.CharField( + verbose_name=_("math engine"), + choices=MATH_ENGINES_CHOICES, + max_length=4, + default=settings.MATHOID_DEFAULT_TYPE, + help_text=_("the rendering engine used to render math"), + ) is_totp_enabled = models.BooleanField( verbose_name=_("2FA enabled"), default=False, @@ -251,19 +229,6 @@ class Profile(models.Model): blank=True, help_text=_("Notes for administrators regarding this user."), ) - profile_image = models.ImageField(upload_to=profile_image_path, null=True) - email_change_pending = models.EmailField(blank=True, null=True) - css_background = models.TextField( - verbose_name=_("Custom background"), - null=True, - blank=True, - help_text=_('CSS custom background properties: url("image_url"), color, etc'), - max_length=300, - ) - - @cached_property - def _cached_info(self): - return _get_basic_info(self.id) @cached_property def organization(self): @@ -273,44 +238,14 @@ class Profile(models.Model): @cached_property def username(self): - try: - return self._cached_info["username"] - except KeyError: - _get_basic_info.dirty(self.id) - - @cached_property - def first_name(self): - return self._cached_info.get("first_name", "") - - @cached_property - def last_name(self): - return self._cached_info.get("last_name", "") - - @cached_property - def email(self): - return self._cached_info["email"] - - @cached_property - def is_muted(self): - return self._cached_info["mute"] - - @cached_property - def cached_display_rank(self): - return self._cached_info.get("display_rank") - - @cached_property - def cached_rating(self): - return self._cached_info.get("rating") - - @cached_property - def profile_image_url(self): - return self._cached_info.get("profile_image_url") + return self.user.username @cached_property def count_unseen_notifications(self): - from judge.models.notification import unseen_notifications_count - - return unseen_notifications_count(self) + query = { + "read": False, + } + return self.notifications.filter(**query).count() @cached_property def count_unread_chat_boxes(self): @@ -396,31 +331,29 @@ class Profile(models.Model): @cached_property def css_class(self): - return self.get_user_css_class(self.cached_display_rank, self.cached_rating) + return self.get_user_css_class(self.display_rank, self.rating) - def get_friends(self): # list of ids, including you - friend_obj = self.following_users.prefetch_related("users").first() - friend_ids = ( - [friend.id for friend in friend_obj.users.all()] if friend_obj else [] - ) - friend_ids.append(self.id) + def get_friends(self): # list of usernames, including you + friend_obj = self.following_users.all() + ret = set() - return friend_ids + if friend_obj: + ret = set(friend.username for friend in friend_obj[0].users.all()) + + ret.add(self.username) + return ret def can_edit_organization(self, org): if not self.user.is_authenticated: return False profile_id = self.id - return org.is_admin(self) or self.user.is_superuser - - @classmethod - def prefetch_profile_cache(self, profile_ids): - _get_basic_info.prefetch_multi([(pid,) for pid in profile_ids]) + return ( + org.admins.filter(id=profile_id).exists() + or org.registrant_id == profile_id + or self.user.is_superuser + ) class Meta: - indexes = [ - models.Index(fields=["is_unlisted", "performance_points"]), - ] permissions = ( ("test_site", "Shows in-progress development stuff"), ("totp", "Edit TOTP settings"), @@ -429,36 +362,6 @@ class Profile(models.Model): verbose_name_plural = _("user profiles") -class ProfileInfo(models.Model): - profile = models.OneToOneField( - Profile, - verbose_name=_("profile associated"), - on_delete=models.CASCADE, - related_name="info", - ) - tshirt_size = models.CharField( - max_length=5, - choices=TSHIRT_SIZES, - verbose_name=_("t-shirt size"), - null=True, - blank=True, - ) - date_of_birth = models.DateField( - verbose_name=_("date of birth"), - null=True, - blank=True, - ) - address = models.CharField( - max_length=255, - verbose_name=_("address"), - null=True, - blank=True, - ) - - def __str__(self): - return f"{self.profile.user.username}'s Info" - - class OrganizationRequest(models.Model): user = models.ForeignKey( Profile, @@ -492,15 +395,17 @@ class OrganizationRequest(models.Model): class Friend(models.Model): users = models.ManyToManyField(Profile) current_user = models.ForeignKey( - Profile, - related_name="following_users", - on_delete=CASCADE, + Profile, related_name="following_users", on_delete=CASCADE ) @classmethod def is_friend(self, current_user, new_friend): try: - return current_user.following_users.filter(users=new_friend).exists() + return ( + current_user.following_users.get() + .users.filter(user=new_friend.user) + .exists() + ) except: return False @@ -534,7 +439,7 @@ class Friend(models.Model): class OrganizationProfile(models.Model): - profile = models.ForeignKey( + users = models.ForeignKey( Profile, verbose_name=_("user"), related_name="last_visit", @@ -553,66 +458,19 @@ class OrganizationProfile(models.Model): ) @classmethod - def remove_organization(self, profile, organization): - organization_profile = self.objects.filter( - profile=profile, organization=organization + def remove_organization(self, users, organization): + organizationprofile = self.objects.filter( + users=users, organization=organization ) - if organization_profile.exists(): - organization_profile.delete() + if organizationprofile.exists(): + organizationprofile.delete() @classmethod - def add_organization(self, profile, organization): - self.remove_organization(profile, organization) - new_row = OrganizationProfile(profile=profile, organization=organization) - new_row.save() + def add_organization(self, users, organization): + self.remove_organization(users, organization) + new_organization = OrganizationProfile(users=users, organization=organization) + new_organization.save() @classmethod - def get_most_recent_organizations(cls, profile): - queryset = cls.objects.filter(profile=profile).order_by("-last_visit")[:5] - queryset = queryset.select_related("organization").defer("organization__about") - organizations = [op.organization for op in queryset] - - return organizations - - -@receiver([post_save], sender=User) -def on_user_save(sender, instance, **kwargs): - try: - profile = instance.profile - _get_basic_info.dirty(profile.id) - except: - pass - - -@cache_wrapper(prefix="Pgbi3", expected_type=dict) -def _get_basic_info(profile_id): - profile = ( - Profile.objects.select_related("user") - .only( - "id", - "mute", - "profile_image", - "user__username", - "user__email", - "user__first_name", - "user__last_name", - "display_rank", - "rating", - ) - .get(id=profile_id) - ) - user = profile.user - res = { - "email": user.email, - "username": user.username, - "mute": profile.mute, - "first_name": user.first_name or None, - "last_name": user.last_name or None, - "profile_image_url": profile.profile_image.url - if profile.profile_image - else None, - "display_rank": profile.display_rank, - "rating": profile.rating, - } - res = {k: v for k, v in res.items() if v is not None} - return res + def get_most_recent_organizations(self, users): + return self.objects.filter(users=users).order_by("-last_visit")[:5] diff --git a/judge/models/runtime.py b/judge/models/runtime.py index 97db711..99825ec 100644 --- a/judge/models/runtime.py +++ b/judge/models/runtime.py @@ -11,7 +11,6 @@ from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from judge.judgeapi import disconnect_judge -from judge.caching import cache_wrapper __all__ = ["Language", "RuntimeVersion", "Judge"] @@ -148,11 +147,14 @@ class Language(models.Model): @classmethod def get_default_language(cls): - return _get_default_language() + try: + return Language.objects.get(key=settings.DEFAULT_USER_LANGUAGE) + except Language.DoesNotExist: + return cls.get_python3() @classmethod def get_default_language_pk(cls): - return _get_default_language().pk + return cls.get_default_language().pk class Meta: ordering = ["key"] @@ -160,14 +162,6 @@ class Language(models.Model): verbose_name_plural = _("languages") -@cache_wrapper(prefix="gdl") -def _get_default_language(): - try: - return Language.objects.get(key=settings.DEFAULT_USER_LANGUAGE) - except Language.DoesNotExist: - return cls.get_python3() - - class RuntimeVersion(models.Model): language = models.ForeignKey( Language, diff --git a/judge/models/submission.py b/judge/models/submission.py index 814344d..16b079b 100644 --- a/judge/models/submission.py +++ b/judge/models/submission.py @@ -220,47 +220,6 @@ class Submission(models.Model): def id_secret(self): return self.get_id_secret(self.id) - def is_accessible_by(self, profile, check_contest=True): - if not profile: - return False - - problem_id = self.problem_id - user = profile.user - - if profile.id == self.user_id: - return True - - if user.has_perm("judge.change_submission"): - return True - - if user.has_perm("judge.view_all_submission"): - return True - - if self.problem.is_public and user.has_perm("judge.view_public_submission"): - return True - - if check_contest: - contest = self.contest_object - if contest and contest.is_editable_by(user): - return True - - from judge.utils.problems import ( - user_completed_ids, - user_tester_ids, - user_editable_ids, - ) - - if problem_id in user_editable_ids(profile): - return True - - if self.problem_id in user_completed_ids(profile): - if self.problem.is_public: - return True - if problem_id in user_tester_ids(profile): - return True - - return False - class Meta: permissions = ( ("abort_any_submission", "Abort any submission"), @@ -274,12 +233,6 @@ class Submission(models.Model): verbose_name = _("submission") verbose_name_plural = _("submissions") - indexes = [ - models.Index(fields=["problem", "user", "-points"]), - models.Index(fields=["contest_object", "problem", "user", "-points"]), - models.Index(fields=["language", "result"]), - ] - class SubmissionSource(models.Model): submission = models.OneToOneField( diff --git a/judge/models/test_formatter.py b/judge/models/test_formatter.py deleted file mode 100644 index b613b14..0000000 --- a/judge/models/test_formatter.py +++ /dev/null @@ -1,26 +0,0 @@ -import os -from django.db import models -from dmoj import settings -from django.utils.translation import gettext_lazy as _ - -__all__ = [ - "TestFormatterModel", -] - - -def test_formatter_path(test_formatter, filename): - tail = filename.split(".")[-1] - head = filename.split(".")[0] - if str(tail).lower() != "zip": - raise Exception("400: Only ZIP files are supported") - new_filename = f"{head}.{tail}" - return os.path.join(settings.DMOJ_TEST_FORMATTER_ROOT, new_filename) - - -class TestFormatterModel(models.Model): - file = models.FileField( - verbose_name=_("testcase file"), - null=True, - blank=True, - upload_to=test_formatter_path, - ) diff --git a/judge/performance_points.py b/judge/performance_points.py index c806081..63a7636 100644 --- a/judge/performance_points.py +++ b/judge/performance_points.py @@ -21,7 +21,7 @@ PPBreakdown = namedtuple( def get_pp_breakdown(user, start=0, end=settings.DMOJ_PP_ENTRIES): with connection.cursor() as cursor: cursor.execute( - f""" + """ SELECT max_points_table.problem_code, max_points_table.problem_name, max_points_table.max_points, @@ -32,26 +32,24 @@ def get_pp_breakdown(user, start=0, end=settings.DMOJ_PP_ENTRIES): judge_submission.result, judge_language.short_name, judge_language.key - FROM ( - SELECT judge_problem.id problem_id, - judge_problem.name problem_name, - judge_problem.code problem_code, - MAX(judge_submission.points) AS max_points + FROM judge_submission + JOIN (SELECT judge_problem.id problem_id, + judge_problem.name problem_name, + judge_problem.code problem_code, + MAX(judge_submission.points) AS max_points FROM judge_problem INNER JOIN judge_submission ON (judge_problem.id = judge_submission.problem_id) - WHERE (judge_problem.is_public AND - NOT judge_problem.is_organization_private AND + WHERE (judge_problem.is_public = True AND + judge_problem.is_organization_private = False AND judge_submission.points IS NOT NULL AND judge_submission.user_id = %s) GROUP BY judge_problem.id - HAVING MAX(judge_submission.points) > 0.0 - ) AS max_points_table - INNER JOIN judge_submission ON ( - judge_submission.problem_id = max_points_table.problem_id AND + HAVING MAX(judge_submission.points) > 0.0) AS max_points_table + ON (judge_submission.problem_id = max_points_table.problem_id AND judge_submission.points = max_points_table.max_points AND - judge_submission.user_id = %s - ) - INNER JOIN judge_language ON (judge_submission.language_id = judge_language.id) + judge_submission.user_id = %s) + JOIN judge_language + ON judge_submission.language_id = judge_language.id GROUP BY max_points_table.problem_id ORDER BY max_points DESC, judge_submission.date DESC LIMIT %s OFFSET %s diff --git a/judge/ratings.py b/judge/ratings.py index 854bdcb..de2c313 100644 --- a/judge/ratings.py +++ b/judge/ratings.py @@ -7,6 +7,7 @@ from django.db.models import Count, OuterRef, Subquery from django.db.models.functions import Coalesce from django.utils import timezone + BETA2 = 328.33**2 RATING_INIT = 1200 # Newcomer's rating when applying the rating floor/ceiling MEAN_INIT = 1400.0 @@ -145,8 +146,6 @@ def recalculate_ratings(ranking, old_mean, times_ranked, historical_p): def rate_contest(contest): from judge.models import Rating, Profile - from judge.models.profile import _get_basic_info - from judge.utils.users import get_contest_ratings, get_rating_rank rating_subquery = Rating.objects.filter(user=OuterRef("user")) rating_sorted = rating_subquery.order_by("-contest__end_time") @@ -238,10 +237,6 @@ def rate_contest(contest): ) ) - _get_basic_info.dirty_multi([(uid,) for uid in user_ids]) - get_contest_ratings.dirty_multi([(uid,) for uid in user_ids]) - get_rating_rank.dirty_multi([(uid,) for uid in user_ids]) - RATING_LEVELS = [ "Newbie", diff --git a/judge/scripts/migrate_organization_image.py b/judge/scripts/migrate_organization_image.py deleted file mode 100644 index 9134d21..0000000 --- a/judge/scripts/migrate_organization_image.py +++ /dev/null @@ -1,64 +0,0 @@ -# Download organization images from "logo_override_image" and upload to organization_images folder to use "organization_image" -# In folder online_judge, run python3 manage.py shell < judge/scripts/migrate_organization_image.py - -import os -import requests -from urllib.parse import urlparse -from django.core.files.base import ContentFile -from django.core.files.storage import default_storage -from django.conf import settings -from django.db import transaction -from judge.models import Organization - - -def is_valid_image_url(url): - try: - parsed_url = urlparse(url) - _, ext = os.path.splitext(parsed_url.path) - return ext.lower() in [".jpg", ".jpeg", ".png", ".gif", ".svg"] - except Exception as e: - return False - - -def download_image(url): - response = requests.get(url) - response.raise_for_status() - return ContentFile(response.content) - - -def organization_image_path(organization, filename): - tail = filename.split(".")[-1] - new_filename = f"organization_{organization.id}.{tail}" - return os.path.join(settings.DMOJ_ORGANIZATION_IMAGE_ROOT, new_filename) - - -@transaction.atomic -def migrate_images(): - print("Start") - organizations = Organization.objects.all() - for org in organizations: - if org.logo_override_image: - if is_valid_image_url(org.logo_override_image): - try: - # Download the image - image_content = download_image(org.logo_override_image) - # Determine the file extension - file_ext = org.logo_override_image.split(".")[-1] - filename = f"organization_{org.id}.{file_ext}" - # Save the image to the new location - new_path = organization_image_path(org, filename) - saved_path = default_storage.save(new_path, image_content) - # Update the organization_image field - org.organization_image = saved_path - org.save() - print(f"Image for organization {org.id} migrated successfully.") - except Exception as e: - print(f"Failed to migrate image for organization {org.id}: {e}") - else: - print( - f"Invalid image URL for organization {org.id}: {org.logo_override_image}" - ) - print("Finish") - - -migrate_images() diff --git a/judge/signals.py b/judge/signals.py index c482c1f..e308f98 100644 --- a/judge/signals.py +++ b/judge/signals.py @@ -8,14 +8,13 @@ from django.core.cache.utils import make_template_fragment_key from django.db.models.signals import post_delete, post_save from django.dispatch import receiver -import judge -from judge import template_context -from judge.utils.problems import finished_submission +from .caching import finished_submission from .models import ( BlogPost, Comment, Contest, ContestSubmission, + EFFECTIVE_MATH_ENGINES, Judge, Language, License, @@ -24,9 +23,6 @@ from .models import ( Problem, Profile, Submission, - NavigationBar, - Solution, - ContestProblem, ) @@ -50,13 +46,21 @@ def problem_update(sender, instance, **kwargs): cache.delete_many( [ make_template_fragment_key("submission_problem", (instance.id,)), + make_template_fragment_key("problem_feed", (instance.id,)), "problem_tls:%s" % instance.id, "problem_mls:%s" % instance.id, ] ) cache.delete_many( [ - make_template_fragment_key("problem_html", (instance.id, lang)) + make_template_fragment_key("problem_html", (instance.id, engine, lang)) + for lang, _ in settings.LANGUAGES + for engine in EFFECTIVE_MATH_ENGINES + ] + ) + cache.delete_many( + [ + make_template_fragment_key("problem_authors", (instance.id, lang)) for lang, _ in settings.LANGUAGES ] ) @@ -66,7 +70,6 @@ def problem_update(sender, instance, **kwargs): for lang, _ in settings.LANGUAGES ] ) - Problem.get_authors.dirty(instance) for lang, _ in settings.LANGUAGES: unlink_if_exists(get_pdf_path("%s.%s.pdf" % (instance.code, lang))) @@ -74,21 +77,20 @@ def problem_update(sender, instance, **kwargs): @receiver(post_save, sender=Profile) def profile_update(sender, instance, **kwargs): - judge.utils.users.get_points_rank.dirty(instance.id) - judge.utils.users.get_rating_rank.dirty(instance.id) if hasattr(instance, "_updating_stats_only"): return cache.delete_many( - [make_template_fragment_key("user_about", (instance.id,))] + [ + make_template_fragment_key("user_about", (instance.id, engine)) + for engine in EFFECTIVE_MATH_ENGINES + ] + [ make_template_fragment_key("org_member_count", (org_id,)) for org_id in instance.organizations.values_list("id", flat=True) ] ) - judge.models.profile._get_basic_info.dirty(instance.id) - @receiver(post_save, sender=Contest) def contest_update(sender, instance, **kwargs): @@ -97,7 +99,10 @@ def contest_update(sender, instance, **kwargs): cache.delete_many( ["generated-meta-contest:%d" % instance.id] - + [make_template_fragment_key("contest_html", (instance.id,))] + + [ + make_template_fragment_key("contest_html", (instance.id, engine)) + for engine in EFFECTIVE_MATH_ENGINES + ] ) @@ -125,8 +130,19 @@ def comment_update(sender, instance, **kwargs): @receiver(post_save, sender=BlogPost) def post_update(sender, instance, **kwargs): - cache.delete(make_template_fragment_key("post_content", (instance.id,))) - BlogPost.get_authors.dirty(instance) + cache.delete_many( + [ + make_template_fragment_key("post_summary", (instance.id,)), + "blog_slug:%d" % instance.id, + "blog_feed:%d" % instance.id, + ] + ) + cache.delete_many( + [ + make_template_fragment_key("post_content", (instance.id, engine)) + for engine in EFFECTIVE_MATH_ENGINES + ] + ) @receiver(post_delete, sender=Submission) @@ -143,8 +159,12 @@ def contest_submission_delete(sender, instance, **kwargs): @receiver(post_save, sender=Organization) def organization_update(sender, instance, **kwargs): - cache.delete_many([make_template_fragment_key("organization_html", (instance.id,))]) - Organization.get_admin_ids.dirty(instance) + cache.delete_many( + [ + make_template_fragment_key("organization_html", (instance.id, engine)) + for engine in EFFECTIVE_MATH_ENGINES + ] + ) _misc_config_i18n = [code for code, _ in settings.LANGUAGES] @@ -167,20 +187,3 @@ def contest_submission_update(sender, instance, **kwargs): Submission.objects.filter(id=instance.submission_id).update( contest_object_id=instance.participation.contest_id ) - - -@receiver(post_save, sender=NavigationBar) -def navbar_update(sender, instance, **kwargs): - template_context._nav_bar.dirty() - - -@receiver(post_save, sender=Solution) -def solution_update(sender, instance, **kwargs): - cache.delete(make_template_fragment_key("solution_content", (instance.id,))) - - -@receiver(post_delete, sender=ContestProblem) -def contest_problem_delete(sender, instance, **kwargs): - Submission.objects.filter( - contest_object=instance.contest, contest__isnull=True - ).update(contest_object=None) diff --git a/judge/social_auth.py b/judge/social_auth.py index 3f3bdcd..71a12bb 100644 --- a/judge/social_auth.py +++ b/judge/social_auth.py @@ -9,7 +9,6 @@ from django.db import transaction from django.http import HttpResponseRedirect from django.shortcuts import render from django.urls import reverse -from django.utils.translation import gettext as _ from requests import HTTPError from reversion import revisions from social_core.backends.github import GithubOAuth2 @@ -66,13 +65,13 @@ class UsernameForm(forms.Form): max_length=30, label="Username", error_messages={ - "invalid": _("A username must contain letters, numbers, or underscores") + "invalid": "A username must contain letters, numbers, or underscores" }, ) def clean_username(self): if User.objects.filter(username=self.cleaned_data["username"]).exists(): - raise forms.ValidationError(_("Sorry, the username is taken.")) + raise forms.ValidationError("Sorry, the username is taken.") return self.cleaned_data["username"] @@ -90,7 +89,7 @@ def choose_username(backend, user, username=None, *args, **kwargs): request, "registration/username_select.html", { - "title": _("Choose a username"), + "title": "Choose a username", "form": form, }, ) @@ -119,7 +118,7 @@ def make_profile(backend, user, response, is_new=False, *args, **kwargs): backend.strategy.request, "registration/profile_creation.html", { - "title": _("Create your profile"), + "title": "Create your profile", "form": form, }, ) diff --git a/judge/tasks/contest.py b/judge/tasks/contest.py index beaf2d5..ca896a9 100644 --- a/judge/tasks/contest.py +++ b/judge/tasks/contest.py @@ -20,23 +20,6 @@ def rescore_contest(self, contest_key): self, participations.count(), stage=_("Recalculating contest scores") ) as p: for participation in participations.iterator(): - for contest_submission in participation.submissions.iterator(): - submission = contest_submission.submission - contest_problem = contest_submission.problem - contest_submission.points = round( - submission.case_points - / submission.case_total - * contest_problem.points - if submission.case_total > 0 - else 0, - 3, - ) - if ( - not contest_problem.partial - and contest_submission.points != contest_problem.points - ): - contest_submission.points = 0 - contest_submission.save() participation.recompute_results() rescored += 1 if rescored % 10 == 0: diff --git a/judge/tasks/import_users.py b/judge/tasks/import_users.py index 07acd4e..db8d5c5 100644 --- a/judge/tasks/import_users.py +++ b/judge/tasks/import_users.py @@ -1,5 +1,5 @@ import csv -import re +from tempfile import mktemp from django.conf import settings from django.contrib.auth.models import User @@ -41,11 +41,6 @@ def csv_to_dict(csv_file): return res -def is_valid_username(username): - match = re.match(r"\w+", username) - return match is not None and match.group() == username - - # return result log def import_users(users): log = "" @@ -53,18 +48,17 @@ def import_users(users): cur_log = str(i + 1) + ". " username = row["username"] - if not is_valid_username(username): - log += username + ": Invalid username\n" - continue - cur_log += username + ": " + pwd = row["password"] + user, created = User.objects.get_or_create( username=username, defaults={ "is_active": True, }, ) + profile, _ = Profile.objects.get_or_create( user=user, defaults={ diff --git a/judge/tasks/submission.py b/judge/tasks/submission.py index 5333dba..5a5a8a9 100644 --- a/judge/tasks/submission.py +++ b/judge/tasks/submission.py @@ -8,7 +8,7 @@ from judge.utils.celery import Progress __all__ = ("apply_submission_filter", "rejudge_problem_filter", "rescore_problem") -def apply_submission_filter(queryset, id_range, languages, results, contests): +def apply_submission_filter(queryset, id_range, languages, results): if id_range: start, end = id_range queryset = queryset.filter(id__gte=start, id__lte=end) @@ -16,18 +16,16 @@ def apply_submission_filter(queryset, id_range, languages, results, contests): queryset = queryset.filter(language_id__in=languages) if results: queryset = queryset.filter(result__in=results) - if contests: - queryset = queryset.filter(contest_object__in=contests) queryset = queryset.exclude(status__in=Submission.IN_PROGRESS_GRADING_STATUS) return queryset @shared_task(bind=True) def rejudge_problem_filter( - self, problem_id, id_range=None, languages=None, results=None, contest=None + self, problem_id, id_range=None, languages=None, results=None ): queryset = Submission.objects.filter(problem_id=problem_id) - queryset = apply_submission_filter(queryset, id_range, languages, results, contest) + queryset = apply_submission_filter(queryset, id_range, languages, results) rejudged = 0 with Progress(self, queryset.count()) as p: diff --git a/judge/template_context.py b/judge/template_context.py index 337d32a..f72da6a 100644 --- a/judge/template_context.py +++ b/judge/template_context.py @@ -1,4 +1,3 @@ -import re from functools import partial from django.conf import settings @@ -7,10 +6,7 @@ from django.contrib.sites.shortcuts import get_current_site from django.core.cache import cache from django.utils.functional import SimpleLazyObject, new_method_proxy -from mptt.querysets import TreeQuerySet - from .models import MiscConfig, NavigationBar, Profile -from judge.caching import cache_wrapper class FixedSimpleLazyObject(SimpleLazyObject): @@ -28,6 +24,7 @@ def get_resource(request): scheme = "http" return { + "PYGMENT_THEME": settings.PYGMENT_THEME, "INLINE_JQUERY": settings.INLINE_JQUERY, "INLINE_FONTAWESOME": settings.INLINE_FONTAWESOME, "JQUERY_JS": settings.JQUERY_JS, @@ -54,28 +51,22 @@ def comet_location(request): return {"EVENT_DAEMON_LOCATION": websocket, "EVENT_DAEMON_POLL_LOCATION": poll} -@cache_wrapper(prefix="nb", expected_type=TreeQuerySet) -def _nav_bar(): - return NavigationBar.objects.all() - - def __nav_tab(path): - nav_bar_list = list(_nav_bar()) - nav_bar_dict = {nb.id: nb for nb in nav_bar_list} - result = next((nb for nb in nav_bar_list if re.match(nb.regex, path)), None) - if result: - while result.parent_id: - result = nav_bar_dict.get(result.parent_id) - return result.key - else: - return [] + result = list( + NavigationBar.objects.extra(where=["%s REGEXP BINARY regex"], params=[path])[:1] + ) + return ( + result[0].get_ancestors(include_self=True).values_list("key", flat=True) + if result + else [] + ) def general_info(request): path = request.get_full_path() return { "nav_tab": FixedSimpleLazyObject(partial(__nav_tab, request.path)), - "nav_bar": _nav_bar(), + "nav_bar": NavigationBar.objects.all(), "LOGIN_RETURN_PATH": "" if path.startswith("/accounts/") else path, "perms": PermWrapper(request.user), } @@ -128,3 +119,13 @@ def site_name(request): "SITE_LONG_NAME": settings.SITE_LONG_NAME, "SITE_ADMIN_EMAIL": settings.SITE_ADMIN_EMAIL, } + + +def math_setting(request): + if request.user.is_authenticated: + engine = request.profile.math_engine + else: + engine = settings.MATHOID_DEFAULT_TYPE + if engine == "auto": + engine = "jax" + return {"MATH_ENGINE": engine, "REQUIRE_JAX": engine == "jax"} diff --git a/judge/user_log.py b/judge/user_log.py index b718b30..91a4c67 100644 --- a/judge/user_log.py +++ b/judge/user_log.py @@ -1,6 +1,4 @@ from django.utils.timezone import now -from django.conf import settings -from django.core.cache import cache from judge.models import Profile @@ -16,13 +14,11 @@ class LogUserAccessMiddleware(object): hasattr(request, "user") and request.user.is_authenticated and not getattr(request, "no_profile_update", False) - and not cache.get(f"user_log_update_{request.user.id}") ): updates = {"last_access": now()} # Decided on using REMOTE_ADDR as nginx will translate it to the external IP that hits it. - if request.META.get(settings.META_REMOTE_ADDRESS_KEY): - updates["ip"] = request.META.get(settings.META_REMOTE_ADDRESS_KEY) + if request.META.get("REMOTE_ADDR"): + updates["ip"] = request.META.get("REMOTE_ADDR") Profile.objects.filter(user_id=request.user.pk).update(**updates) - cache.set(f"user_log_update_{request.user.id}", True, 120) return response diff --git a/judge/utils/contest.py b/judge/utils/contest.py deleted file mode 100644 index 959749e..0000000 --- a/judge/utils/contest.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import transaction -from judge.tasks import rescore_contest -from judge.models import ( - Contest, -) - - -def maybe_trigger_contest_rescore(form, contest, force_rescore=False): - if ( - any( - f in form.changed_data - for f in ( - "start_time", - "end_time", - "time_limit", - "format_config", - "format_name", - "freeze_after", - ) - ) - or force_rescore - ): - transaction.on_commit(rescore_contest.s(contest.key).delay) - - if any( - f in form.changed_data - for f in ( - "authors", - "curators", - "testers", - ) - ): - Contest._author_ids.dirty(contest) - Contest._curator_ids.dirty(contest) - Contest._tester_ids.dirty(contest) diff --git a/judge/utils/diggpaginator.py b/judge/utils/diggpaginator.py index 2ba8581..de9ee7d 100644 --- a/judge/utils/diggpaginator.py +++ b/judge/utils/diggpaginator.py @@ -191,9 +191,6 @@ class DiggPaginator(ExPaginator): # validate padding value max_padding = int(math.ceil(self.body / 2.0) - 1) self.padding = kwargs.pop("padding", min(4, max_padding)) - count_override = kwargs.pop("count", None) - if count_override is not None: - self.__dict__["count"] = count_override if self.padding > max_padding: raise ValueError("padding too large for body (max %d)" % max_padding) super(DiggPaginator, self).__init__(*args, **kwargs) diff --git a/judge/utils/email_render.py b/judge/utils/email_render.py deleted file mode 100644 index a092f88..0000000 --- a/judge/utils/email_render.py +++ /dev/null @@ -1,19 +0,0 @@ -from django.template.loader import render_to_string -from django.contrib.sites.shortcuts import get_current_site -from django.conf import settings - - -def render_email_message(request, contexts): - current_site = get_current_site(request) - email_contexts = { - "username": request.user.username, - "domain": current_site.domain, - "site_name": settings.SITE_NAME, - "message": None, - "title": None, - "button_text": "Click here", - "url_path": None, - } - email_contexts.update(contexts) - message = render_to_string("general_email.html", email_contexts) - return message diff --git a/judge/utils/fine_uploader.py b/judge/utils/fine_uploader.py index 8f64d78..a9909a7 100644 --- a/judge/utils/fine_uploader.py +++ b/judge/utils/fine_uploader.py @@ -5,6 +5,7 @@ from django import forms from django.forms import ClearableFileInput import os, os.path +import tempfile import shutil __all__ = ("handle_upload", "save_upload", "FineUploadForm", "FineUploadFileInput") @@ -34,7 +35,7 @@ def save_upload(f, path): # pass callback function to post_upload def handle_upload(f, fileattrs, upload_dir, post_upload=None): - chunks_dir = settings.CHUNK_UPLOAD_DIR + chunks_dir = os.path.join(tempfile.gettempdir(), "chunk_upload_tmp") if not os.path.exists(os.path.dirname(chunks_dir)): os.makedirs(os.path.dirname(chunks_dir)) chunked = False diff --git a/judge/utils/infinite_paginator.py b/judge/utils/infinite_paginator.py deleted file mode 100644 index afd004f..0000000 --- a/judge/utils/infinite_paginator.py +++ /dev/null @@ -1,152 +0,0 @@ -import collections -import inspect -from math import ceil - -from django.core.paginator import EmptyPage, InvalidPage -from django.http import Http404 -from django.utils.functional import cached_property -from django.utils.inspect import method_has_no_args - - -class InfinitePage(collections.abc.Sequence): - def __init__( - self, object_list, number, unfiltered_queryset, page_size, pad_pages, paginator - ): - self.object_list = list(object_list) - self.number = number - self.unfiltered_queryset = unfiltered_queryset - self.page_size = page_size - self.pad_pages = pad_pages - self.num_pages = 1e3000 - self.paginator = paginator - - def __repr__(self): - return "" % self.number - - def __len__(self): - return len(self.object_list) - - def __getitem__(self, index): - return self.object_list[index] - - @cached_property - def _after_up_to_pad(self): - first_after = self.number * self.page_size - padding_length = self.pad_pages * self.page_size - queryset = self.unfiltered_queryset[ - first_after : first_after + padding_length + 1 - ] - c = getattr(queryset, "count", None) - if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c): - return c() - return len(queryset) - - def has_next(self): - return self._after_up_to_pad > 0 - - def has_previous(self): - return self.number > 1 - - def has_other_pages(self): - return self.has_previous() or self.has_next() - - def next_page_number(self): - if not self.has_next(): - raise EmptyPage() - return self.number + 1 - - def previous_page_number(self): - if self.number <= 1: - raise EmptyPage() - return self.number - 1 - - def start_index(self): - return (self.page_size * (self.number - 1)) + 1 - - def end_index(self): - return self.start_index() + len(self.object_list) - - @cached_property - def main_range(self): - start = max(1, self.number - self.pad_pages) - end = self.number + min( - int(ceil(self._after_up_to_pad / self.page_size)), self.pad_pages - ) - return range(start, end + 1) - - @cached_property - def leading_range(self): - return range(1, min(3, self.main_range[0])) - - @cached_property - def has_trailing(self): - return self._after_up_to_pad > self.pad_pages * self.page_size - - @cached_property - def page_range(self): - result = list(self.leading_range) - main_range = self.main_range - - # Add ... element if there is space in between. - if result and result[-1] + 1 < self.main_range[0]: - result.append(False) - - result += list(main_range) - - # Add ... element if there are elements after main_range. - if self.has_trailing: - result.append(False) - return result - - -class DummyPaginator: - is_infinite = True - - def __init__(self, per_page): - self.per_page = per_page - - -def infinite_paginate(queryset, page, page_size, pad_pages, paginator=None): - if page < 1: - raise EmptyPage() - sliced = queryset[(page - 1) * page_size : page * page_size] - if page > 1 and not sliced: - raise EmptyPage() - return InfinitePage(sliced, page, queryset, page_size, pad_pages, paginator) - - -class InfinitePaginationMixin: - pad_pages = 2 - - @property - def use_infinite_pagination(self): - return True - - def paginate_queryset(self, queryset, page_size): - if not self.use_infinite_pagination: - paginator, page, object_list, has_other = super().paginate_queryset( - queryset, page_size - ) - paginator.is_infinite = False - return paginator, page, object_list, has_other - - page_kwarg = self.page_kwarg - page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1 - try: - page_number = int(page) - except ValueError: - raise Http404("Page cannot be converted to an int.") - try: - paginator = DummyPaginator(page_size) - page = infinite_paginate( - queryset, page_number, page_size, self.pad_pages, paginator - ) - return paginator, page, page.object_list, page.has_other_pages() - except InvalidPage as e: - raise Http404( - "Invalid page (%(page_number)s): %(message)s" - % { - "page_number": page_number, - "message": str(e), - } - ) diff --git a/judge/utils/problem_data.py b/judge/utils/problem_data.py index 5cf9fe7..0d583d0 100644 --- a/judge/utils/problem_data.py +++ b/judge/utils/problem_data.py @@ -2,9 +2,9 @@ import hashlib import json import os import re +import shutil import yaml import zipfile -import shutil from django.conf import settings from django.core.files.base import ContentFile @@ -13,8 +13,6 @@ from django.urls import reverse from django.utils.translation import gettext as _ from django.core.cache import cache -from judge.logging import log_exception - if os.altsep: def split_path_first( @@ -49,13 +47,6 @@ class ProblemDataStorage(FileSystemStorage): def rename(self, old, new): return os.rename(self.path(old), self.path(new)) - def delete_directory(self, name): - directory_path = self.path(name) - try: - shutil.rmtree(directory_path) - except FileNotFoundError: - pass - class ProblemDataError(Exception): def __init__(self, message): @@ -90,8 +81,8 @@ class ProblemDataCompiler(object): ) return custom_checker_path[1] - if case.checker == "customcpp": - custom_checker_path = split_path_first(case.custom_checker_cpp.name) + if case.checker == "customval": + custom_checker_path = split_path_first(case.custom_validator.name) if len(custom_checker_path) != 2: raise ProblemDataError( _("How did you corrupt the custom checker path?") @@ -106,7 +97,7 @@ class ProblemDataCompiler(object): } if case.checker == "testlib": - custom_checker_path = split_path_first(case.custom_checker_cpp.name) + custom_checker_path = split_path_first(case.custom_validator.name) if len(custom_checker_path) != 2: raise ProblemDataError( _("How did you corrupt the custom checker path?") @@ -242,7 +233,9 @@ class ProblemDataCompiler(object): if self.data.checker == "interact": interactor_path = split_path_first(self.data.interactive_judge.name) if len(interactor_path) != 2: - raise ProblemDataError(_("Invalid interactor judge")) + raise ProblemDataError( + _("How did you corrupt the interactor path?") + ) init["interactive"] = { "files": interactor_path[1], "feedback": True, @@ -261,20 +254,7 @@ class ProblemDataCompiler(object): if "file_io" not in init: init["file_io"] = {} init["file_io"]["output"] = self.data.fileio_output - if self.data.output_only: - init["output_only"] = True - if self.data.use_ioi_signature: - handler_path = split_path_first(self.data.signature_handler.name) - if len(handler_path) != 2: - raise ProblemDataError(_("Invalid signature handler")) - header_path = split_path_first(self.data.signature_header.name) - if len(header_path) != 2: - raise ProblemDataError(_("Invalid signature header")) - init["signature_grader"] = { - "entry": handler_path[1], - "header": header_path[1], - } return init def compile(self): @@ -333,13 +313,11 @@ def get_problem_case(problem, files): settings.DMOJ_PROBLEM_DATA_ROOT, str(problem.data_files.zipfile) ) if not os.path.exists(archive_path): - log_exception('archive file "%s" does not exist' % archive_path) - return {} + raise Exception('archive file "%s" does not exist' % archive_path) try: archive = zipfile.ZipFile(archive_path, "r") except zipfile.BadZipfile: - log_exception('bad archive: "%s"' % archive_path) - return {} + raise Exception('bad archive: "%s"' % archive_path) for file in uncached_files: cache_key = "problem_archive:%s:%s" % (problem.code, get_file_cachekey(file)) @@ -355,9 +333,7 @@ def get_problem_case(problem, files): if next_char: s += next_char else: - s = f"File {file} is not able to decode in utf-8" - s = s.encode("utf-8") - break + raise Exception("File %s is not able to decode in utf-8" % file) qs = get_visible_content(s) cache.set(cache_key, qs, 86400) result[file] = qs diff --git a/judge/utils/problems.py b/judge/utils/problems.py index 6423c70..6deb750 100644 --- a/judge/utils/problems.py +++ b/judge/utils/problems.py @@ -1,8 +1,8 @@ from collections import defaultdict from math import e -from datetime import datetime, timedelta +import os, zipfile +from datetime import datetime import random -from enum import Enum from django.conf import settings from django.core.cache import cache @@ -10,101 +10,105 @@ from django.db.models import Case, Count, ExpressionWrapper, F, Max, Q, When from django.db.models.fields import FloatField from django.utils import timezone from django.utils.translation import gettext as _, gettext_noop -from django.http import Http404 from judge.models import Problem, Submission from judge.ml.collab_filter import CollabFilter -from judge.caching import cache_wrapper + __all__ = [ "contest_completed_ids", "get_result_data", "user_completed_ids", + "user_authored_ids", "user_editable_ids", - "user_tester_ids", ] -@cache_wrapper(prefix="user_tester") -def user_tester_ids(profile): - return set( - Problem.testers.through.objects.filter(profile=profile) - .values_list("problem_id", flat=True) - .distinct() - ) +def user_authored_ids(profile): + result = set(Problem.objects.filter(authors=profile).values_list("id", flat=True)) + return result -@cache_wrapper(prefix="user_editable") def user_editable_ids(profile): result = set( ( Problem.objects.filter(authors=profile) | Problem.objects.filter(curators=profile) - ) - .values_list("id", flat=True) - .distinct() + ).values_list("id", flat=True) ) return result -@cache_wrapper(prefix="contest_complete") def contest_completed_ids(participation): - result = set( - participation.submissions.filter( - submission__result="AC", points=F("problem__points") + key = "contest_complete:%d" % participation.id + result = cache.get(key) + if result is None: + result = set( + participation.submissions.filter( + submission__result="AC", points=F("problem__points") + ) + .values_list("problem__problem__id", flat=True) + .distinct() ) - .values_list("problem__problem__id", flat=True) - .distinct() - ) + cache.set(key, result, 86400) return result -@cache_wrapper(prefix="user_complete") def user_completed_ids(profile): - result = set( - Submission.objects.filter( - user=profile, result="AC", points=F("problem__points") + key = "user_complete:%d" % profile.id + result = cache.get(key) + if result is None: + result = set( + Submission.objects.filter( + user=profile, result="AC", points=F("problem__points") + ) + .values_list("problem_id", flat=True) + .distinct() ) - .values_list("problem_id", flat=True) - .distinct() - ) + cache.set(key, result, 86400) return result -@cache_wrapper(prefix="contest_attempted") def contest_attempted_ids(participation): - result = { - id: {"achieved_points": points, "max_points": max_points} - for id, max_points, points in ( - participation.submissions.values_list( - "problem__problem__id", "problem__points" + key = "contest_attempted:%s" % participation.id + result = cache.get(key) + if result is None: + result = { + id: {"achieved_points": points, "max_points": max_points} + for id, max_points, points in ( + participation.submissions.values_list( + "problem__problem__id", "problem__points" + ) + .annotate(points=Max("points")) + .filter(points__lt=F("problem__points")) ) - .annotate(points=Max("points")) - .filter(points__lt=F("problem__points")) - ) - } + } + cache.set(key, result, 86400) return result -@cache_wrapper(prefix="user_attempted") def user_attempted_ids(profile): - result = { - id: { - "achieved_points": points, - "max_points": max_points, - "last_submission": last_submission, - "code": problem_code, - "name": problem_name, - } - for id, max_points, problem_code, problem_name, points, last_submission in ( - Submission.objects.filter(user=profile) - .values_list( - "problem__id", "problem__points", "problem__code", "problem__name" + key = "user_attempted:%s" % profile.id + result = cache.get(key) + if result is None: + result = { + id: { + "achieved_points": points, + "max_points": max_points, + "last_submission": last_submission, + "code": problem_code, + "name": problem_name, + } + for id, max_points, problem_code, problem_name, points, last_submission in ( + Submission.objects.filter(user=profile) + .values_list( + "problem__id", "problem__points", "problem__code", "problem__name" + ) + .annotate(points=Max("points"), last_submission=Max("id")) + .filter(points__lt=F("problem__points")) ) - .annotate(points=Max("points"), last_submission=Max("id")) - .filter(points__lt=F("problem__points")) - ) - } + } + cache.set(key, result, 86400) return result @@ -114,21 +118,13 @@ def _get_result_data(results): # Using gettext_noop here since this will be tacked into the cache, so it must be language neutral. # The caller, SubmissionList.get_result_data will run ugettext on the name. {"code": "AC", "name": gettext_noop("Accepted"), "count": results["AC"]}, - { - "code": "WA", - "name": gettext_noop("Wrong Answer"), - "count": results["WA"], - }, + {"code": "WA", "name": gettext_noop("Wrong"), "count": results["WA"]}, { "code": "CE", "name": gettext_noop("Compile Error"), "count": results["CE"], }, - { - "code": "TLE", - "name": gettext_noop("Time Limit Exceeded"), - "count": results["TLE"], - }, + {"code": "TLE", "name": gettext_noop("Timeout"), "count": results["TLE"]}, { "code": "ERR", "name": gettext_noop("Error"), @@ -175,67 +171,77 @@ def editable_problems(user, profile=None): return subquery -@cache_wrapper(prefix="hp", timeout=14400) def hot_problems(duration, limit): - qs = Problem.get_public_problems().filter( - submission__date__gt=timezone.now() - duration - ) - qs0 = ( - qs.annotate(k=Count("submission__user", distinct=True)) - .order_by("-k") - .values_list("k", flat=True) - ) + cache_key = "hot_problems:%d:%d" % (duration.total_seconds(), limit) + qs = cache.get(cache_key) + if qs is None: + qs = Problem.get_public_problems().filter( + submission__date__gt=timezone.now() - duration + ) + qs0 = ( + qs.annotate(k=Count("submission__user", distinct=True)) + .order_by("-k") + .values_list("k", flat=True) + ) - if not qs0: - return [] - # make this an aggregate - mx = float(qs0[0]) + if not qs0: + return [] + # make this an aggregate + mx = float(qs0[0]) - qs = qs.annotate(unique_user_count=Count("submission__user", distinct=True)) - # fix braindamage in excluding CE - qs = qs.annotate( - submission_volume=Count( - Case( - When(submission__result="AC", then=1), - When(submission__result="WA", then=1), - When(submission__result="IR", then=1), - When(submission__result="RTE", then=1), - When(submission__result="TLE", then=1), - When(submission__result="OLE", then=1), - output_field=FloatField(), + qs = qs.annotate(unique_user_count=Count("submission__user", distinct=True)) + # fix braindamage in excluding CE + qs = qs.annotate( + submission_volume=Count( + Case( + When(submission__result="AC", then=1), + When(submission__result="WA", then=1), + When(submission__result="IR", then=1), + When(submission__result="RTE", then=1), + When(submission__result="TLE", then=1), + When(submission__result="OLE", then=1), + output_field=FloatField(), + ) ) ) - ) - qs = qs.annotate( - ac_volume=Count( - Case( - When(submission__result="AC", then=1), - output_field=FloatField(), + qs = qs.annotate( + ac_volume=Count( + Case( + When(submission__result="AC", then=1), + output_field=FloatField(), + ) ) ) - ) - qs = qs.filter(unique_user_count__gt=max(mx / 3.0, 1)) + qs = qs.filter(unique_user_count__gt=max(mx / 3.0, 1)) - qs = ( - qs.annotate( - ordering=ExpressionWrapper( - 0.02 - * F("points") - * (0.4 * F("ac_volume") / F("submission_volume") + 0.6 * F("ac_rate")) - + 100 * e ** (F("unique_user_count") / mx), - output_field=FloatField(), + qs = ( + qs.annotate( + ordering=ExpressionWrapper( + 0.02 + * F("points") + * ( + 0.4 * F("ac_volume") / F("submission_volume") + + 0.6 * F("ac_rate") + ) + + 100 * e ** (F("unique_user_count") / mx), + output_field=FloatField(), + ) ) + .order_by("-ordering") + .defer("description")[:limit] ) - .order_by("-ordering") - .defer("description")[:limit] - ) + + cache.set(cache_key, qs, 900) return qs -@cache_wrapper(prefix="grp", timeout=14400) def get_related_problems(profile, problem, limit=8): if not profile or not settings.ML_OUTPUT_PATH: return None + cache_key = "related_problems:%d:%d" % (profile.id, problem.id) + qs = cache.get(cache_key) + if qs is not None: + return qs problemset = Problem.get_visible_problems(profile.user).values_list("id", flat=True) problemset = problemset.exclude(id__in=user_completed_ids(profile)) problemset = problemset.exclude(id=problem.id) @@ -245,85 +251,8 @@ def get_related_problems(profile, problem, limit=8): ) + cf_model.problem_neighbors(problem, problemset, CollabFilter.COSINE, limit) results = list(set([i[1] for i in results])) seed = datetime.now().strftime("%d%m%Y") - random.shuffle(results) + random.Random(seed).shuffle(results) results = results[:limit] results = [Problem.objects.get(id=i) for i in results] + cache.set(cache_key, results, 21600) return results - - -def finished_submission(sub): - keys = ["user_complete:%d" % sub.user_id, "user_attempted:%s" % sub.user_id] - if hasattr(sub, "contest"): - participation = sub.contest.participation - keys += ["contest_complete:%d" % participation.id] - keys += ["contest_attempted:%d" % participation.id] - cache.delete_many(keys) - - -class RecommendationType(Enum): - HOT_PROBLEM = 1 - CF_DOT = 2 - CF_COSINE = 3 - CF_TIME_DOT = 4 - CF_TIME_COSINE = 5 - - -# Return a list of list. Each inner list correspond to each type in types -def get_user_recommended_problems( - user_id, - problem_ids, - recommendation_types, - limits, - shuffle=False, -): - cf_model = CollabFilter("collab_filter") - cf_time_model = CollabFilter("collab_filter_time") - - def get_problem_ids_from_type(rec_type, limit): - if type(rec_type) == int: - try: - rec_type = RecommendationType(rec_type) - except ValueError: - raise Http404() - if rec_type == RecommendationType.HOT_PROBLEM: - return [ - problem.id - for problem in hot_problems(timedelta(days=7), limit) - if problem.id in set(problem_ids) - ] - if rec_type == RecommendationType.CF_DOT: - return cf_model.user_recommendations( - user_id, problem_ids, cf_model.DOT, limit - ) - if rec_type == RecommendationType.CF_COSINE: - return cf_model.user_recommendations( - user_id, problem_ids, cf_model.COSINE, limit - ) - if rec_type == RecommendationType.CF_TIME_DOT: - return cf_time_model.user_recommendations( - user_id, problem_ids, cf_model.DOT, limit - ) - if rec_type == RecommendationType.CF_TIME_COSINE: - return cf_time_model.user_recommendations( - user_id, problem_ids, cf_model.COSINE, limit - ) - return [] - - all_problems = [] - for rec_type, limit in zip(recommendation_types, limits): - all_problems += get_problem_ids_from_type(rec_type, limit) - if shuffle: - seed = datetime.now().strftime("%d%m%Y") - random.Random(seed).shuffle(all_problems) - - # deduplicate problems - res = [] - used_pid = set() - - for obj in all_problems: - if type(obj) == tuple: - obj = obj[1] - if obj not in used_pid: - res.append(obj) - used_pid.add(obj) - return res diff --git a/judge/utils/users.py b/judge/utils/users.py deleted file mode 100644 index 9ac071c..0000000 --- a/judge/utils/users.py +++ /dev/null @@ -1,67 +0,0 @@ -from django.urls import reverse -from django.utils.formats import date_format -from django.utils.translation import gettext as _, gettext_lazy - -from judge.caching import cache_wrapper -from judge.models import Profile, Rating, Submission, Friend, ProfileInfo - - -@cache_wrapper(prefix="grr") -def get_rating_rank(profile): - if profile.is_unlisted: - return None - rank = None - if profile.rating: - rank = ( - Profile.objects.filter( - is_unlisted=False, - rating__gt=profile.rating, - ).count() - + 1 - ) - return rank - - -@cache_wrapper(prefix="gpr") -def get_points_rank(profile): - if profile.is_unlisted: - return None - return ( - Profile.objects.filter( - is_unlisted=False, - performance_points__gt=profile.performance_points, - ).count() - + 1 - ) - - -@cache_wrapper(prefix="gcr") -def get_contest_ratings(profile): - return ( - profile.ratings.order_by("-contest__end_time") - .select_related("contest") - .defer("contest__description") - ) - - -def get_awards(profile): - ratings = get_contest_ratings(profile) - - sorted_ratings = sorted( - ratings, key=lambda x: (x.rank, -x.contest.end_time.timestamp()) - ) - - result = [ - { - "label": rating.contest.name, - "ranking": rating.rank, - "link": reverse("contest_ranking", args=(rating.contest.key,)) - + "#!" - + profile.username, - "date": date_format(rating.contest.end_time, _("M j, Y")), - } - for rating in sorted_ratings - if rating.rank <= 3 - ] - - return result diff --git a/judge/views/about.py b/judge/views/about.py index 3f6d266..e503724 100644 --- a/judge/views/about.py +++ b/judge/views/about.py @@ -13,242 +13,10 @@ def about(request): def custom_checker_sample(request): - content = """ -1. Trình chấm tự viết (PY) -2. Trình chấm tự viết (CPP) -3. Interactive (CPP) -4. Dùng hàm như IOI (CPP) - ---- - -##1. Trình chấm tự viết (PY) -Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm `check` dưới đây: -```py -def check(process_output, judge_output, **kwargs): - # return True/False -``` - -Trong đó, `**kwargs` có thể chứa các biến sau: - -- `process_output`: output -- `judge_output`: đáp án -- `submission_source`: Code bài nộp -- `judge_input`: input -- `point_value`: điểm của test đang chấm -- `case_position`: thứ tự của test -- `submission_language`: ngôn ngữ của bài nộp -- `execution_time`: thời gian chạy - -**Return**: - -- Cách 1: Trả về True/False -- Cách 2: Trả về một object `CheckerResult` có thể được gọi như sau `CheckerResult(case_passed_bool, points_awarded, feedback='')` - -**Ví dụ:** -Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n. - -```py -from dmoj.result import CheckerResult - -def wa(feedback): - return CheckerResult(False, 0, feedback) - -def check(process_output, judge_output, judge_input, **kwargs): - # process the input - input_arr = judge_input.split() - assert(len(input_arr) == 1) - n = int(input_arr[0]) - - # process the contestant's output - output_arr = process_output.split() - - if (len(output_arr) != 2): - return wa('Wrong output format') - - try: - a, b = int(output_arr[0]), int(output_arr[1]) - except: - return wa('Wrong output format') - - if (n == a + b): - return True - return wa('a + b != n') -``` - -## 2. Trình chấm tự viết (CPP) - -Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 3 arguments theo thứ tự `input_file`, `output_file`, `ans_file` tương ứng với các file input, output, đáp án. - -Để test chương trình trên máy tính, có thể dùng lệnh như sau (Windows): - -```bash -main.exe [input_file] [output_file] [ans_file] -``` - -hoặc thay bằng `./main` trên Linux/MacOS. - -**Return:** -Chương trình trả về giá trị: - -- 0 nếu AC (100% điểm) -- 1 nếu WA (0 điểm) -- 2 nếu điểm thành phần. Khi đó cần in ra stderr một số thực trong đoạn [0, 1] thể hiện cho tỷ lệ điểm. Nếu điểm < 1 thì hiển thị WA, điểm = 1 thì hiển thị AC. -Những thông tin được viết ra stdout (bằng cout) sẽ được in ra màn hình cho người nộp bài(feedback) - -**Ví dụ:** -Chương trình sau dùng để chấm bài toán: Cho n là một số nguyên dương. In ra hai số tự nhiên a, b sao cho a + b = n. - -Nếu in ra a + b = n và a, b >= 0 thì được 100% số điểm, nếu a + b = n nhưng một trong 2 số a, b âm thì được 50% số điểm. - -```cpp -#include -using namespace std; - -int main(int argc, char** argv) { - ifstream inp(argv[1]); - ifstream out(argv[2]); - ifstream ans(argv[3]); - - int n, a, b, c, d; - - inp >> n; - out >> a >> b; - ans >> c >> d; - - if (a + b == c + d) { - cout << a << " + " << b << " = " << c << " + " << d << endl; - - if (a >= 0 && b >= 0) { - return 0; // AC - } - else { - cerr << 0.5; - return 2; // PARTIAL - } - } - else { - cout << "a + b = " << a + b << " != " << n << endl; - return 1; // WA - } -} -``` - -## 3. Interactive (CPP) -Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 2 arguments `input_file` `answer_file` tương ứng file input và đáp án (nếu cần thiết). - -Để test chương trình trên máy tính với tư cách thí sinh, có thể dùng lệnh như sau (Windows): - -```bash -main.exe [input_file] [answer_file] -``` - -hoặc thay bằng `./main` trên Linux/MacOS. - -**Return:** -Chương trình trả về giá trị: - -- 0 nếu AC (100% điểm) -- 1 nếu WA (0 điểm) -- 2 nếu điểm thành phần. Khi đó cần in ra stderr một số thực trong đoạn [0, 1] thể hiện cho tỷ lệ điểm. Nếu điểm < 1 thì hiển thị WA, điểm = 1 thì hiển thị AC. -Thông tin được in ra trong stderr (bằng cerr) sẽ là feedback hiển thị cho người dùng. - -**Ví dụ:** -Chương trình sau dùng để chấm bài toán guessgame: Người chơi phải tìm 1 số bí mật n (n chứa trong file input). Mỗi lần họ được hỏi một số x, và chương trình sẽ trả về "SMALLER", "BIGGER" hoặc "HOLA" dựa trên giá trị của n và x. Cần tìm ra n sau không quá 31 câu hỏi. - -```cpp -#include -using namespace std; - -void quit(string reason) { - cerr << reason << endl; - exit(1); -} - -void read(long long& guess) { - if (!(cin >> guess)) exit(1); // Nếu không có dòng này, chương trình sẽ chờ vô hạn - if (guess < 1 || guess > 2e9) exit(1); -} - -int main(int argc, char *argv[]) { - ifstream inp(argv[1]); - int N, guesses = 0; - long long guess; - inp >> N; - - while (guess != N && guesses <= 31) { - read(guess); - if (guess == N) { - cout << "HOLA" << endl; - } else if (guess > N) { - cout << "SMALLER" << endl; - } else { - cout << "BIGGER" << endl; - } - guesses++; - } - - cerr << "Number of used guesses: " << guesses << endl; - - if (guesses <= 31) - return 0; // AC - else { - cerr << "Used too many guesses" << endl; - return 1; // WA - } -} -``` -## 4. IOI Signature (CPP) -Đây là chức năng để sử dụng hàm như trong IOI. Thí sinh được cho một định nghĩa hàm và cần cài đặt hàm đó trả về giá trị đúng. -Để sử dụng chức năng này, cần viết 2 chương trình: -- Header: Đây là file định nghĩa hàm (đuôi phải là `.h`) -- Handler: Đây là chương trình xử lý input và xuất ra output dựa trên hàm (đuôi phải là `.cpp`) - -**Ví dụ:** -Cho bài toán: nhập vào số n. Viết hàm `solve(int n)` trả về `n * 2`. Giả sử input là multitest có dạng: -- Dòng đầu chứa `t` là số test -- Mỗi dòng chứa một số nguyên `n` - -**Header (header.h):** -```cpp -#ifndef _HEADER_INCLUDED -#define _HEADER_INCLUDED -long long solve(long long n); -#endif -``` - -**Handler (handler.cpp):** -```cpp -#include -#include "header.h" -using namespace std; - - -int main() { - int t; - cin >> t; - for (int z = 1; z <= t; z++) { - long long n; - cin >> n; - cout << solve(n) << "\\n"; - } - - return 0; -} -``` - -**Bài nộp thí sinh:** -```cpp -int solve(int n) { - return n * 2; -} -``` - -""" return render( request, "about/custom-checker-sample.html", { "title": _("Custom Checker Sample"), - "content": content, }, ) diff --git a/judge/views/blog.py b/judge/views/blog.py index 93b3c35..66e55a9 100644 --- a/judge/views/blog.py +++ b/judge/views/blog.py @@ -6,9 +6,9 @@ from django.utils.functional import lazy from django.utils.translation import ugettext as _ from django.views.generic import ListView -from judge.views.comment import CommentedDetailView -from judge.views.pagevote import PageVoteDetailView -from judge.views.bookmark import BookMarkDetailView +from judge.comments import CommentedDetailView +from judge.views.pagevote import PageVoteDetailView, PageVoteListView +from judge.views.bookmark import BookMarkDetailView, BookMarkListView from judge.models import ( BlogPost, Comment, @@ -23,19 +23,31 @@ from judge.models import ( from judge.models.profile import Organization, OrganizationProfile from judge.utils.cachedict import CacheDict from judge.utils.diggpaginator import DiggPaginator +from judge.utils.problems import user_completed_ids from judge.utils.tickets import filter_visible_tickets from judge.utils.views import TitleMixin -from judge.utils.users import get_rating_rank, get_points_rank, get_awards -from judge.views.feed import FeedView # General view for all content list on home feed -class HomeFeedView(FeedView): +class FeedView(ListView): template_name = "blog/list.html" title = None + def get_paginator( + self, queryset, per_page, orphans=0, allow_empty_first_page=True, **kwargs + ): + return DiggPaginator( + queryset, + per_page, + body=6, + padding=2, + orphans=orphans, + allow_empty_first_page=allow_empty_first_page, + **kwargs + ) + def get_context_data(self, **kwargs): - context = super(HomeFeedView, self).get_context_data(**kwargs) + context = super(FeedView, self).get_context_data(**kwargs) context["has_clarifications"] = False if self.request.user.is_authenticated: participation = self.request.profile.current_contest @@ -48,16 +60,27 @@ class HomeFeedView(FeedView): if participation.contest.is_editable_by(self.request.user): context["can_edit_contest"] = True + context["page_titles"] = CacheDict(lambda page: Comment.get_page_title(page)) + + context["user_count"] = lazy(Profile.objects.count, int, int) + context["problem_count"] = lazy( + Problem.objects.filter(is_public=True).count, int, int + ) + context["submission_count"] = lazy(Submission.objects.count, int, int) + context["language_count"] = lazy(Language.objects.count, int, int) + now = timezone.now() + visible_contests = ( Contest.get_visible_contests(self.request.user, show_own_contests_only=True) - .filter(is_visible=True, official__isnull=True) + .filter(is_visible=True) .order_by("start_time") ) if self.request.organization: visible_contests = visible_contests.filter( is_organization_private=True, organizations=self.request.organization ) + context["current_contests"] = visible_contests.filter( start_time__lte=now, end_time__gt=now ) @@ -69,53 +92,26 @@ class HomeFeedView(FeedView): profile_queryset = Profile.objects if self.request.organization: profile_queryset = self.request.organization.members - context["top_rated"] = ( - profile_queryset.filter(is_unlisted=False) - .order_by("-rating") - .only("id", "rating")[:10] - ) - context["top_scorer"] = ( - profile_queryset.filter(is_unlisted=False) - .order_by("-performance_points") - .only("id", "performance_points")[:10] - ) - Profile.prefetch_profile_cache([p.id for p in context["top_rated"]]) - Profile.prefetch_profile_cache([p.id for p in context["top_scorer"]]) - - if self.request.user.is_authenticated: - context["rating_rank"] = get_rating_rank(self.request.profile) - context["points_rank"] = get_points_rank(self.request.profile) - - medals_list = get_awards(self.request.profile) - context["awards"] = { - "medals": medals_list, - "gold_count": 0, - "silver_count": 0, - "bronze_count": 0, - } - for medal in medals_list: - if medal["ranking"] == 1: - context["awards"]["gold_count"] += 1 - elif medal["ranking"] == 2: - context["awards"]["silver_count"] += 1 - elif medal["ranking"] == 3: - context["awards"]["bronze_count"] += 1 + context["top_rated"] = profile_queryset.filter(is_unlisted=False).order_by( + "-rating" + )[:10] + context["top_scorer"] = profile_queryset.filter(is_unlisted=False).order_by( + "-performance_points" + )[:10] return context -class PostList(HomeFeedView): +class PostList(FeedView, PageVoteListView, BookMarkListView): model = BlogPost - paginate_by = 4 + paginate_by = 10 context_object_name = "posts" - feed_content_template_name = "blog/content.html" - url_name = "blog_post_list" def get_queryset(self): queryset = ( BlogPost.objects.filter(visible=True, publish_on__lte=timezone.now()) .order_by("-sticky", "-publish_on") - .prefetch_related("organizations") + .prefetch_related("authors__user", "organizations") ) filter = Q(is_organization_private=False) if self.request.user.is_authenticated: @@ -130,15 +126,30 @@ class PostList(HomeFeedView): context["title"] = ( self.title or _("Page %d of Posts") % context["page_obj"].number ) + context["first_page_href"] = reverse("home") + context["page_prefix"] = reverse("blog_post_list") context["page_type"] = "blog" + context["post_comment_counts"] = { + int(page[2:]): count + for page, count in Comment.objects.filter( + page__in=["b:%d" % post.id for post in context["posts"]], hidden=False + ) + .values_list("page") + .annotate(count=Count("page")) + .order_by() + } + context = self.add_pagevote_context_data(context) + context = self.add_bookmark_context_data(context) return context + def get_comment_page(self, post): + return "b:%s" % post.id -class TicketFeed(HomeFeedView): + +class TicketFeed(FeedView): model = Ticket context_object_name = "tickets" - paginate_by = 8 - feed_content_template_name = "ticket/feed.html" + paginate_by = 30 def get_queryset(self, is_own=True): profile = self.request.profile @@ -150,6 +161,7 @@ class TicketFeed(HomeFeedView): ) .order_by("-id") .prefetch_related("linked_item") + .select_related("user__user") ) else: return [] @@ -160,6 +172,7 @@ class TicketFeed(HomeFeedView): Ticket.objects.order_by("-id") .filter(is_open=True) .prefetch_related("linked_item") + .select_related("user__user") ) return filter_visible_tickets(tickets, self.request.user, profile) else: @@ -168,25 +181,30 @@ class TicketFeed(HomeFeedView): def get_context_data(self, **kwargs): context = super(TicketFeed, self).get_context_data(**kwargs) context["page_type"] = "ticket" + context["first_page_href"] = self.request.path + context["page_prefix"] = "?page=" context["title"] = _("Ticket feed") + return context -class CommentFeed(HomeFeedView): +class CommentFeed(FeedView): model = Comment context_object_name = "comments" - paginate_by = 15 - feed_content_template_name = "comments/feed.html" + paginate_by = 50 def get_queryset(self): return Comment.most_recent( - self.request.user, 100, organization=self.request.organization + self.request.user, 1000, organization=self.request.organization ) def get_context_data(self, **kwargs): context = super(CommentFeed, self).get_context_data(**kwargs) - context["title"] = _("Comment feed") context["page_type"] = "comment" + context["first_page_href"] = self.request.path + context["page_prefix"] = "?page=" + context["title"] = _("Comment feed") + return context @@ -199,22 +217,31 @@ class PostView(TitleMixin, CommentedDetailView, PageVoteDetailView, BookMarkDeta def get_title(self): return self.object.title + def get_comment_page(self): + return "b:%s" % self.object.id + def get_context_data(self, **kwargs): context = super(PostView, self).get_context_data(**kwargs) context["og_image"] = self.object.og_image - context["editable_orgs"] = [] + context["valid_user_to_show_edit"] = False + context["valid_org_to_show_edit"] = [] - orgs = list(self.object.organizations.all()) + if self.request.profile in self.object.authors.all(): + context["valid_user_to_show_edit"] = True - if self.request.profile: - for org in orgs: - if self.request.profile.can_edit_organization(org): - context["editable_orgs"].append(org) + for valid_org_to_show_edit in self.object.organizations.all(): + if self.request.profile in valid_org_to_show_edit.admins.all(): + context["valid_user_to_show_edit"] = True + + if context["valid_user_to_show_edit"]: + for post_org in self.object.organizations.all(): + if post_org in self.request.profile.organizations.all(): + context["valid_org_to_show_edit"].append(post_org) return context def get_object(self, queryset=None): post = super(PostView, self).get_object(queryset) - if not post.is_accessible_by(self.request.user): + if not post.can_see(self.request.user): raise Http404() return post diff --git a/judge/views/bookmark.py b/judge/views/bookmark.py index a05f715..9c3caeb 100644 --- a/judge/views/bookmark.py +++ b/judge/views/bookmark.py @@ -8,12 +8,13 @@ from django.http import ( HttpResponseForbidden, ) from django.utils.translation import gettext as _ +from judge.models.bookmark import BookMark, MakeBookMark from django.views.generic.base import TemplateResponseMixin from django.views.generic.detail import SingleObjectMixin +from judge.dblock import LockModel from django.views.generic import View, ListView -from judge.models.bookmark import BookMark, MakeBookMark, dirty_bookmark __all__ = [ "dobookmark_page", @@ -32,31 +33,30 @@ def bookmark_page(request, delta): try: bookmark_id = int(request.POST["id"]) - bookmark = BookMark.objects.get(id=bookmark_id) + bookmark_page = BookMark.objects.filter(id=bookmark_id) except ValueError: return HttpResponseBadRequest() - except BookMark.DoesNotExist: - raise Http404() + else: + if not bookmark_page.exists(): + raise Http404() if delta == 0: bookmarklist = MakeBookMark.objects.filter( - bookmark=bookmark, user=request.profile + bookmark=bookmark_page.first(), user=request.profile ) if not bookmarklist.exists(): newbookmark = MakeBookMark( - bookmark=bookmark, + bookmark=bookmark_page.first(), user=request.profile, ) newbookmark.save() else: bookmarklist = MakeBookMark.objects.filter( - bookmark=bookmark, user=request.profile + bookmark=bookmark_page.first(), user=request.profile ) if bookmarklist.exists(): bookmarklist.delete() - dirty_bookmark(bookmark, request.profile) - return HttpResponse("success", content_type="text/plain") @@ -71,5 +71,16 @@ def undobookmark_page(request): class BookMarkDetailView(TemplateResponseMixin, SingleObjectMixin, View): def get_context_data(self, **kwargs): context = super(BookMarkDetailView, self).get_context_data(**kwargs) - context["bookmark"] = self.object.get_or_create_bookmark() + queryset = BookMark.objects.get_or_create(page=self.get_comment_page()) + context["bookmark"] = queryset[0] + return context + + +class BookMarkListView: + def add_bookmark_context_data(self, context, obj_list="object_list"): + for item in context[obj_list]: + bookmark, _ = BookMark.objects.get_or_create( + page=self.get_comment_page(item) + ) + setattr(item, "bookmark", bookmark) return context diff --git a/judge/views/comment.py b/judge/views/comment.py index 8ac62fa..962d9f1 100644 --- a/judge/views/comment.py +++ b/judge/views/comment.py @@ -1,46 +1,28 @@ -import json - -from django import forms -from django.conf import settings -from django.contrib.auth.context_processors import PermWrapper from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin -from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import PermissionDenied, ValidationError -from django.db import IntegrityError -from django.db.models import Count, F, FilteredRelation, Q -from django.db.models.expressions import Value -from django.db.models.functions import Coalesce -from django.forms import ModelForm +from django.core.exceptions import PermissionDenied +from django.db import IntegrityError, transaction +from django.db.models import F +from django.forms.models import ModelForm from django.http import ( Http404, HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, - HttpResponseNotFound, - HttpResponseRedirect, ) -from django.shortcuts import get_object_or_404, render -from django.urls import reverse_lazy -from django.utils.decorators import method_decorator +from django.shortcuts import get_object_or_404 from django.utils.translation import gettext as _ -from django.utils.datastructures import MultiValueDictKeyError from django.views.decorators.http import require_POST -from django.views.generic import DetailView, UpdateView, View -from django.views.generic.base import TemplateResponseMixin -from django.views.generic.detail import SingleObjectMixin -from django_ratelimit.decorators import ratelimit -from django.contrib.contenttypes.models import ContentType - +from django.views.generic import DetailView, UpdateView +from django.urls import reverse_lazy from reversion import revisions -from reversion.models import Revision, Version +from reversion.models import Version -from judge.jinja2.reference import get_user_from_text -from judge.models import BlogPost, Comment, CommentVote, Notification -from judge.models.notification import make_notification -from judge.models.comment import get_visible_comment_count +from judge.dblock import LockModel +from judge.models import Comment, CommentVote, Notification from judge.utils.views import TitleMixin -from judge.widgets import HeavyPreviewPageDownWidget +from judge.widgets import MathJaxPagedownWidget, HeavyPreviewPageDownWidget +from judge.comments import add_mention_notifications, del_mention_notifications __all__ = [ "upvote_comment", @@ -50,20 +32,7 @@ __all__ = [ "CommentEdit", ] -DEFAULT_OFFSET = 10 - -def _get_html_link_notification(comment): - return f'{comment.page_title}' - - -def add_mention_notifications(comment): - users_mentioned = get_user_from_text(comment.body).exclude(id=comment.author.id) - link = _get_html_link_notification(comment) - make_notification(users_mentioned, "Mention", link, comment.author) - - -@ratelimit(key="user", rate=settings.RL_VOTE) @login_required def vote_comment(request, delta): if abs(delta) != 1: @@ -101,21 +70,27 @@ def vote_comment(request, delta): vote.voter = request.profile vote.score = delta - try: - vote.save() - except IntegrityError: + while True: try: - vote = CommentVote.objects.get(comment_id=comment_id, voter=request.profile) - except CommentVote.DoesNotExist: - raise Http404() - if -vote.score != delta: - return HttpResponseBadRequest( - _("You already voted."), content_type="text/plain" - ) - vote.delete() - Comment.objects.filter(id=comment_id).update(score=F("score") - vote.score) - else: - Comment.objects.filter(id=comment_id).update(score=F("score") + delta) + vote.save() + except IntegrityError: + with LockModel(write=(CommentVote,)): + try: + vote = CommentVote.objects.get( + comment_id=comment_id, voter=request.profile + ) + except CommentVote.DoesNotExist: + # We must continue racing in case this is exploited to manipulate votes. + continue + if -vote.score != delta: + return HttpResponseBadRequest( + _("You already voted."), content_type="text/plain" + ) + vote.delete() + Comment.objects.filter(id=comment_id).update(score=F("score") - vote.score) + else: + Comment.objects.filter(id=comment_id).update(score=F("score") + delta) + break return HttpResponse("success", content_type="text/plain") @@ -127,85 +102,6 @@ def downvote_comment(request): return vote_comment(request, -1) -def get_comments(request, limit=10): - try: - comment_id = int(request.GET["id"]) - parent_none = int(request.GET["parent_none"]) - except (ValueError, MultiValueDictKeyError): - return HttpResponseBadRequest() - else: - if comment_id and not Comment.objects.filter(id=comment_id).exists(): - raise Http404() - - offset = 0 - if "offset" in request.GET: - try: - offset = int(request.GET["offset"]) - except ValueError: - return HttpResponseBadRequest() - - target_comment = -1 - if "target_comment" in request.GET: - target_comment = int(request.GET["target_comment"]) - - comment_root_id = 0 - - if comment_id: - comment_obj = Comment.objects.get(pk=comment_id) - comment_root_id = comment_obj.id - else: - comment_obj = None - - queryset = comment_obj.linked_object.comments - if parent_none: - queryset = queryset.filter(parent=None, hidden=False) - queryset = queryset.exclude(pk=target_comment) - else: - queryset = queryset.filter(parent=comment_obj, hidden=False) - comment_count = len(queryset) - queryset = ( - queryset.select_related("author__user") - .defer("author__about") - .annotate( - count_replies=Count("replies", distinct=True), - )[offset : offset + limit] - ) - profile = None - if request.user.is_authenticated: - profile = request.profile - queryset = queryset.annotate( - my_vote=FilteredRelation("votes", condition=Q(votes__voter_id=profile.id)), - ).annotate(vote_score=Coalesce(F("my_vote__score"), Value(0))) - - new_offset = offset + min(len(queryset), limit) - - return render( - request, - "comments/content-list.html", - { - "profile": profile, - "comment_root_id": comment_root_id, - "comment_list": queryset, - "vote_hide_threshold": settings.DMOJ_COMMENT_VOTE_HIDE_THRESHOLD, - "perms": PermWrapper(request.user), - "offset": new_offset, - "limit": limit, - "comment_count": comment_count, - "comment_parent_none": parent_none, - "target_comment": target_comment, - "comment_more": comment_count - new_offset, - }, - ) - - -def get_show_more(request): - return get_comments(request) - - -def get_replies(request): - return get_comments(request) - - class CommentMixin(object): model = Comment pk_url_kwarg = "id" @@ -218,23 +114,13 @@ class CommentRevisionAjax(CommentMixin, DetailView): def get_context_data(self, **kwargs): context = super(CommentRevisionAjax, self).get_context_data(**kwargs) revisions = Version.objects.get_for_object(self.object).order_by("-revision") - - if len(revisions) == 0: - raise Http404 - try: wanted = min( max(int(self.request.GET.get("revision", 0)), 0), len(revisions) - 1 ) - revision = revisions[wanted] - except (ValueError, IndexError): + except ValueError: raise Http404 - - data = json.loads(revision.serialized_data) - try: - context["body"] = data[0]["fields"]["body"] - except Exception: - context["body"] = "" + context["revision"] = revisions[wanted] return context def get_object(self, queryset=None): @@ -265,10 +151,10 @@ class CommentEditAjax(LoginRequiredMixin, CommentMixin, UpdateView): def form_valid(self, form): # update notifications comment = form.instance + del_mention_notifications(comment) add_mention_notifications(comment) - comment.revision_count = comment.versions.count() + 1 - comment.save(update_fields=["revision_count"]) - with revisions.create_revision(): + + with transaction.atomic(), revisions.create_revision(): revisions.set_comment(_("Edited from site")) revisions.set_user(self.request.user) return super(CommentEditAjax, self).form_valid(form) @@ -320,195 +206,4 @@ def comment_hide(request): comment = get_object_or_404(Comment, id=comment_id) comment.get_descendants(include_self=True).update(hidden=True) - get_visible_comment_count.dirty(comment.content_type, comment.object_id) return HttpResponse("ok") - - -class CommentForm(ModelForm): - class Meta: - model = Comment - fields = ["body", "parent"] - widgets = { - "parent": forms.HiddenInput(), - } - - if HeavyPreviewPageDownWidget is not None: - widgets["body"] = HeavyPreviewPageDownWidget( - preview=reverse_lazy("comment_preview"), - preview_timeout=1000, - hide_preview_button=True, - ) - - def __init__(self, request, *args, **kwargs): - self.request = request - super(CommentForm, self).__init__(*args, **kwargs) - self.fields["body"].widget.attrs.update({"placeholder": _("Comment body")}) - - def clean(self): - if self.request is not None and self.request.user.is_authenticated: - profile = self.request.profile - if profile.mute: - raise ValidationError(_("Your part is silent, little toad.")) - elif ( - not self.request.user.is_staff - and not profile.submission_set.filter( - points=F("problem__points") - ).exists() - ): - raise ValidationError( - _( - "You need to have solved at least one problem " - "before your voice can be heard." - ) - ) - return super(CommentForm, self).clean() - - -class CommentedDetailView(TemplateResponseMixin, SingleObjectMixin, View): - comment_page = None - - def is_comment_locked(self): - if self.request.user.has_perm("judge.override_comment_lock"): - return False - return ( - self.request.in_contest - and self.request.participation.contest.use_clarifications - ) - - @method_decorator(ratelimit(key="user", rate=settings.RL_COMMENT)) - @method_decorator(login_required) - def post(self, request, *args, **kwargs): - self.object = self.get_object() - if self.is_comment_locked(): - return HttpResponseForbidden() - - parent = request.POST.get("parent") - if parent: - try: - parent = int(parent) - except ValueError: - return HttpResponseNotFound() - else: - if not self.object.comments.filter(hidden=False, id=parent).exists(): - return HttpResponseNotFound() - - form = CommentForm(request, request.POST) - if form.is_valid(): - comment = form.save(commit=False) - comment.author = request.profile - comment.linked_object = self.object - - with revisions.create_revision(): - revisions.set_user(request.user) - revisions.set_comment(_("Posted comment")) - comment.save() - - # add notification for reply - comment_notif_link = _get_html_link_notification(comment) - if comment.parent and comment.parent.author != comment.author: - make_notification( - [comment.parent.author], "Reply", comment_notif_link, comment.author - ) - - # add notification for page authors - page_authors = comment.linked_object.authors.all() - make_notification( - page_authors, "Comment", comment_notif_link, comment.author - ) - - add_mention_notifications(comment) - get_visible_comment_count.dirty(comment.content_type, comment.object_id) - - return HttpResponseRedirect(comment.get_absolute_url()) - - context = self.get_context_data(object=self.object, comment_form=form) - return self.render_to_response(context) - - def get(self, request, *args, **kwargs): - target_comment = None - self.object = self.get_object() - if "comment-id" in request.GET: - try: - comment_id = int(request.GET["comment-id"]) - comment_obj = Comment.objects.get(id=comment_id) - except (Comment.DoesNotExist, ValueError): - raise Http404 - if comment_obj.linked_object != self.object: - raise Http404 - target_comment = comment_obj.get_root() - return self.render_to_response( - self.get_context_data( - object=self.object, - target_comment=target_comment, - comment_form=CommentForm(request, initial={"parent": None}), - ) - ) - - def _get_queryset(self, target_comment): - if target_comment: - queryset = target_comment.get_descendants(include_self=True) - queryset = queryset.filter(hidden=False) - else: - queryset = self.object.comments - queryset = queryset.filter(parent=None, hidden=False) - queryset = queryset.filter(hidden=False).annotate( - count_replies=Count("replies", distinct=True), - )[:DEFAULT_OFFSET] - - if self.request.user.is_authenticated: - profile = self.request.profile - queryset = queryset.annotate( - my_vote=FilteredRelation( - "votes", condition=Q(votes__voter_id=profile.id) - ), - ).annotate(vote_score=Coalesce(F("my_vote__score"), Value(0))) - - return queryset - - def get_context_data(self, target_comment=None, **kwargs): - context = super(CommentedDetailView, self).get_context_data(**kwargs) - queryset = self._get_queryset(target_comment) - comment_count = self.object.comments.filter(parent=None, hidden=False).count() - - content_type = ContentType.objects.get_for_model(self.object) - all_comment_count = get_visible_comment_count(content_type, self.object.pk) - - if target_comment != None: - context["target_comment"] = target_comment.id - else: - context["target_comment"] = -1 - - if self.request.user.is_authenticated: - context["is_new_user"] = ( - not self.request.user.is_staff - and not self.request.profile.submission_set.filter( - points=F("problem__points") - ).exists() - ) - - context["comment_lock"] = self.is_comment_locked() - context["comment_list"] = list(queryset) - context["has_comments"] = len(context["comment_list"]) > 0 - - context["vote_hide_threshold"] = settings.DMOJ_COMMENT_VOTE_HIDE_THRESHOLD - - if queryset.exists(): - context["comment_root_id"] = context["comment_list"][0].id - else: - context["comment_root_id"] = 0 - - context["comment_parent_none"] = 1 - - if target_comment != None: - context["offset"] = 0 - context["comment_more"] = comment_count - 1 - else: - context["offset"] = DEFAULT_OFFSET - context["comment_more"] = comment_count - DEFAULT_OFFSET - - context["limit"] = DEFAULT_OFFSET - context["comment_count"] = comment_count - context["profile"] = self.request.profile - context["all_comment_count"] = all_comment_count - - return context diff --git a/judge/views/contests.py b/judge/views/contests.py index 3dc27f2..381dfc4 100644 --- a/judge/views/contests.py +++ b/judge/views/contests.py @@ -27,7 +27,6 @@ from django.db.models import ( Value, When, ) -from django.dispatch import receiver from django.db.models.expressions import CombinedExpression from django.http import ( Http404, @@ -55,7 +54,7 @@ from django.views.generic.detail import ( ) from judge import event_poster as event -from judge.views.comment import CommentedDetailView +from judge.comments import CommentedDetailView from judge.forms import ContestCloneForm from judge.models import ( Contest, @@ -68,9 +67,6 @@ from judge.models import ( Profile, Submission, ContestProblemClarification, - ContestsSummary, - OfficialContestCategory, - OfficialContestLocation, ) from judge.tasks import run_moss from judge.utils.celery import redirect_to_task_status @@ -101,20 +97,19 @@ __all__ = [ "ContestStats", "ContestMossView", "ContestMossDelete", + "contest_ranking_ajax", "ContestParticipationList", "ContestParticipationDisqualify", "get_contest_ranking_list", "base_contest_ranking_list", "ContestClarificationView", "update_contest_mode", - "OfficialContestList", ] -def _find_contest(request, key): +def _find_contest(request, key, private_check=True): try: contest = Contest.objects.get(key=key) - private_check = not contest.public_scoreboard if private_check and not contest.is_accessible_by(request.user): raise ObjectDoesNotExist() except ObjectDoesNotExist: @@ -131,210 +126,110 @@ def _find_contest(request, key): class ContestListMixin(object): - official = False - def get_queryset(self): - q = Contest.get_visible_contests(self.request.user) - if self.official: - q = q.filter(official__isnull=False).select_related( - "official", "official__category", "official__location" - ) - else: - q = q.filter(official__isnull=True) - return q + return Contest.get_visible_contests(self.request.user) class ContestList( QueryStringSortMixin, DiggPaginatorMixin, TitleMixin, ContestListMixin, ListView ): model = Contest - paginate_by = 10 + paginate_by = 20 template_name = "contest/list.html" title = gettext_lazy("Contests") + context_object_name = "past_contests" all_sorts = frozenset(("name", "user_count", "start_time")) default_desc = frozenset(("name", "user_count")) - context_object_name = "contests" - - def get_default_sort_order(self, request): - if request.GET.get("contest") and settings.ENABLE_FTS: - return "-relevance" - if self.current_tab == "future": - return "start_time" - return "-start_time" + default_sort = "-start_time" @cached_property def _now(self): return timezone.now() - def GET_with_session(self, request, key): - if not request.GET.get(key): - return request.session.get(key, False) - return request.GET.get(key, None) == "1" - - def setup_contest_list(self, request): - self.contest_query = request.GET.get("contest", "") - - self.hide_organization_contests = 0 - if self.GET_with_session(request, "hide_organization_contests"): - self.hide_organization_contests = 1 - + def get(self, request, *args, **kwargs): + self.contest_query = None self.org_query = [] - if request.GET.get("orgs") and request.profile: + + if "orgs" in self.request.GET and self.request.profile: try: self.org_query = list(map(int, request.GET.getlist("orgs"))) - if not request.user.is_superuser: - self.org_query = [ - i - for i in self.org_query - if i - in set( - request.profile.organizations.values_list("id", flat=True) - ) - ] + self.org_query = [ + i + for i in self.org_query + if i + in self.request.profile.organizations.values_list("id", flat=True) + ] except ValueError: pass - def get(self, request, *args, **kwargs): - default_tab = "active" - if not self.request.user.is_authenticated: - default_tab = "current" - self.current_tab = self.request.GET.get("tab", default_tab) - - self.setup_contest_list(request) - return super(ContestList, self).get(request, *args, **kwargs) - def post(self, request, *args, **kwargs): - to_update = ("hide_organization_contests",) - for key in to_update: - if key in request.GET: - val = request.GET.get(key) == "1" - request.session[key] = val - else: - request.session[key] = False - return HttpResponseRedirect(request.get_full_path()) - - def extra_queryset_filters(self, queryset): - return queryset - def _get_queryset(self): queryset = ( super(ContestList, self) .get_queryset() - .prefetch_related("tags", "organizations") + .prefetch_related("tags", "organizations", "authors", "curators", "testers") ) - if self.contest_query: - substr_queryset = queryset.filter( - Q(key__icontains=self.contest_query) - | Q(name__icontains=self.contest_query) - ) - if settings.ENABLE_FTS: - queryset = ( - queryset.search(self.contest_query).extra(order_by=["-relevance"]) - | substr_queryset + if "contest" in self.request.GET: + self.contest_query = query = " ".join( + self.request.GET.getlist("contest") + ).strip() + if query: + queryset = queryset.filter( + Q(key__icontains=query) | Q(name__icontains=query) ) - else: - queryset = substr_queryset if not self.org_query and self.request.organization: self.org_query = [self.request.organization.id] - if self.hide_organization_contests: - queryset = queryset.filter(organizations=None) if self.org_query: queryset = queryset.filter(organizations__in=self.org_query) - queryset = self.extra_queryset_filters(queryset) + return queryset - def _get_past_contests_queryset(self): - return ( - self._get_queryset() - .filter(end_time__lt=self._now) - .order_by(self.order, "key") - ) - - def _active_participations(self): - return ContestParticipation.objects.filter( - virtual=0, - user=self.request.profile, - contest__start_time__lte=self._now, - contest__end_time__gte=self._now, - ) - - @cached_property - def _active_contests_ids(self): - return [ - participation.contest_id - for participation in self._active_participations().select_related("contest") - if not participation.ended - ] - - def _get_current_contests_queryset(self): - return ( - self._get_queryset() - .exclude(id__in=self._active_contests_ids) - .filter(start_time__lte=self._now, end_time__gte=self._now) - .order_by(self.order, "key") - ) - - def _get_future_contests_queryset(self): - return ( - self._get_queryset() - .filter(start_time__gt=self._now) - .order_by(self.order, "key") - ) - - def _get_active_participations_queryset(self): - active_contests = ( - self._get_queryset() - .filter(id__in=self._active_contests_ids) - .order_by(self.order, "key") - ) - ordered_ids = list(active_contests.values_list("id", flat=True)) - - participations = self._active_participations().filter( - contest_id__in=ordered_ids - ) - participations = sorted( - participations, key=lambda p: ordered_ids.index(p.contest_id) - ) - return participations - def get_queryset(self): - if self.current_tab == "past": - return self._get_past_contests_queryset() - elif self.current_tab == "current": - return self._get_current_contests_queryset() - elif self.current_tab == "future": - return self._get_future_contests_queryset() - else: # Default to active - return self._get_active_participations_queryset() + return ( + self._get_queryset() + .order_by(self.order, "key") + .filter(end_time__lt=self._now) + ) def get_context_data(self, **kwargs): context = super(ContestList, self).get_context_data(**kwargs) + present, active, future = [], [], [] + for contest in self._get_queryset().exclude(end_time__lt=self._now): + if contest.start_time > self._now: + future.append(contest) + else: + present.append(contest) - context["current_tab"] = self.current_tab - - context["current_count"] = self._get_current_contests_queryset().count() - context["future_count"] = self._get_future_contests_queryset().count() - context["active_count"] = len(self._get_active_participations_queryset()) + if self.request.user.is_authenticated: + for participation in ( + ContestParticipation.objects.filter( + virtual=0, user=self.request.profile, contest_id__in=present + ) + .select_related("contest") + .prefetch_related( + "contest__authors", "contest__curators", "contest__testers" + ) + .annotate(key=F("contest__key")) + ): + if not participation.ended: + active.append(participation) + present.remove(participation.contest) + active.sort(key=attrgetter("end_time", "key")) + present.sort(key=attrgetter("end_time", "key")) + future.sort(key=attrgetter("start_time")) + context["active_participations"] = active + context["current_contests"] = present + context["future_contests"] = future context["now"] = self._now context["first_page_href"] = "." context["contest_query"] = self.contest_query context["org_query"] = self.org_query - context["hide_organization_contests"] = int(self.hide_organization_contests) if self.request.profile: context["organizations"] = self.request.profile.organizations.all() context["page_type"] = "list" - context["selected_order"] = self.request.GET.get("order") - context["all_sort_options"] = [ - ("start_time", _("Start time (asc.)")), - ("-start_time", _("Start time (desc.)")), - ("name", _("Name (asc.)")), - ("-name", _("Name (desc.)")), - ("user_count", _("User count (asc.)")), - ("-user_count", _("User count (desc.)")), - ] context.update(self.get_sort_context()) context.update(self.get_sort_paginate_context()) return context @@ -370,13 +265,6 @@ class ContestMixin(object): def can_edit(self): return self.object.is_editable_by(self.request.user) - @cached_property - def can_access(self): - return self.object.is_accessible_by(self.request.user) - - def should_bypass_access_check(self, contest): - return False - def get_context_data(self, **kwargs): context = super(ContestMixin, self).get_context_data(**kwargs) if self.request.user.is_authenticated: @@ -400,7 +288,6 @@ class ContestMixin(object): context["is_editor"] = self.is_editor context["is_tester"] = self.is_tester context["can_edit"] = self.can_edit - context["can_access"] = self.can_access if not self.object.og_image or not self.object.summary: metadata = generate_opengraph( @@ -417,30 +304,16 @@ class ContestMixin(object): self.request.user ) context["logo_override_image"] = self.object.logo_override_image - if ( not context["logo_override_image"] and self.object.organizations.count() == 1 ): - org_image = self.object.organizations.first().organization_image - if org_image: - context["logo_override_image"] = org_image.url + context[ + "logo_override_image" + ] = self.object.organizations.first().logo_override_image return context - def contest_access_check(self, contest): - try: - contest.access_check(self.request.user) - except Contest.PrivateContest: - raise PrivateContestError( - contest.name, - contest.is_private, - contest.is_organization_private, - contest.organizations.all(), - ) - except Contest.Inaccessible: - raise Http404() - def get_object(self, queryset=None): contest = super(ContestMixin, self).get_object(queryset) profile = self.request.profile @@ -453,10 +326,41 @@ class ContestMixin(object): ): return contest - if self.should_bypass_access_check(contest): + try: + contest.access_check(self.request.user) + except Contest.PrivateContest: + raise PrivateContestError( + contest.name, + contest.is_private, + contest.is_organization_private, + contest.organizations.all(), + ) + except Contest.Inaccessible: + raise Http404() + else: return contest - self.contest_access_check(contest) + if contest.is_private or contest.is_organization_private: + private_contest_error = PrivateContestError( + contest.name, + contest.is_private, + contest.is_organization_private, + contest.organizations.all(), + ) + if profile is None: + raise private_contest_error + if user.has_perm("judge.edit_all_contest"): + return contest + if not ( + contest.is_organization_private + and contest.organizations.filter( + id__in=profile.organizations.all() + ).exists() + ) and not ( + contest.is_private + and contest.private_contestants.filter(id=profile.id).exists() + ): + raise private_contest_error return contest @@ -496,6 +400,9 @@ class ContestDetail( ): template_name = "contest/contest.html" + def get_comment_page(self): + return "c:%s" % self.object.key + def get_title(self): return self.object.name @@ -504,14 +411,7 @@ class ContestDetail( return [] res = [] for organization in self.object.organizations.all(): - can_edit = False if self.request.profile.can_edit_organization(organization): - can_edit = True - if self.request.profile in organization and self.object.is_editable_by( - self.request.user - ): - can_edit = True - if can_edit: res.append(organization) return res @@ -533,63 +433,20 @@ class ContestDetail( .add_i18n_name(self.request.LANGUAGE_CODE) ) context["editable_organizations"] = self.get_editable_organizations() - context["is_clonable"] = is_contest_clonable(self.request, self.object) - - if self.object.is_in_course: - from judge.models import Course, CourseContest - - course = CourseContest.get_course_of_contest(self.object) - if Course.is_editable_by(course, self.request.profile): - context["editable_course"] = course - - if self.request.in_contest: - context["current_contest"] = self.request.participation.contest - else: - context["current_contest"] = None return context -def is_contest_clonable(request, contest): - if not request.profile: - return False - if not Organization.objects.filter(admins=request.profile).exists(): - return False - if request.user.has_perm("judge.clone_contest"): - return True - if contest.access_code and not contest.is_editable_by(request.user): - return False - if ( - contest.end_time is not None - and contest.end_time + timedelta(days=1) < contest._now - ): - return True - return False - - -class ContestClone(ContestMixin, TitleMixin, SingleObjectFormView): +class ContestClone( + ContestMixin, PermissionRequiredMixin, TitleMixin, SingleObjectFormView +): title = _("Clone Contest") template_name = "contest/clone.html" form_class = ContestCloneForm - - def get_object(self, queryset=None): - contest = super().get_object(queryset) - if not is_contest_clonable(self.request, contest): - raise Http404() - return contest - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs["org_choices"] = tuple( - Organization.objects.filter(admins=self.request.profile).values_list( - "id", "name" - ) - ) - kwargs["profile"] = self.request.profile - return kwargs + permission_required = "judge.clone_contest" def form_valid(self, form): tags = self.object.tags.all() - organization = form.cleaned_data["organization"] + organizations = self.object.organizations.all() private_contestants = self.object.private_contestants.all() view_contest_scoreboard = self.object.view_contest_scoreboard.all() contest_problems = self.object.contest_problems.all() @@ -600,11 +457,10 @@ class ContestClone(ContestMixin, TitleMixin, SingleObjectFormView): contest.is_visible = False contest.user_count = 0 contest.key = form.cleaned_data["key"] - contest.is_rated = False contest.save() contest.tags.set(tags) - contest.organizations.set([organization]) + contest.organizations.set(organizations) contest.private_contestants.set(private_contestants) contest.view_contest_scoreboard.set(view_contest_scoreboard) contest.authors.add(self.request.profile) @@ -615,14 +471,7 @@ class ContestClone(ContestMixin, TitleMixin, SingleObjectFormView): ContestProblem.objects.bulk_create(contest_problems) return HttpResponseRedirect( - reverse( - "organization_contest_edit", - args=( - organization.id, - organization.slug, - contest.key, - ), - ) + reverse("admin:judge_contest_change", args=(contest.id,)) ) @@ -665,7 +514,12 @@ class ContestJoin(LoginRequiredMixin, ContestMixin, BaseDetailView): profile = request.profile if profile.current_contest is not None: - profile.remove_contest() + return generic_message( + request, + _("Already in contest"), + _('You are already in a contest: "%s".') + % profile.current_contest.contest.name, + ) if ( not request.user.is_superuser @@ -744,7 +598,6 @@ class ContestJoin(LoginRequiredMixin, ContestMixin, BaseDetailView): profile.save() contest._updating_stats_only = True contest.update_user_count() - request.session["contest_mode"] = True return HttpResponseRedirect(reverse("problem_list")) def ask_for_access_code(self, form=None): @@ -981,11 +834,7 @@ class ContestStats(TitleMixin, ContestMixin, DetailView): if (point == None) or (problem_code not in codes): continue problem_idx = codes.index(problem_code) - if max_point > 0: - bin_idx = math.floor(point * self.POINT_BIN / max_point) - else: - bin_idx = 0 - bin_idx = max(min(bin_idx, self.POINT_BIN), 0) + bin_idx = math.floor(point * self.POINT_BIN / max_point) counter[problem_idx][bin_idx] += count for i in range(num_problems): problem_points[i] = [ @@ -1038,7 +887,7 @@ class ContestStats(TitleMixin, ContestMixin, DetailView): ContestRankingProfile = namedtuple( "ContestRankingProfile", - "id user username points cumtime tiebreaker participation " + "id user css_class username points cumtime tiebreaker organization participation " "participation_rating problem_cells result_cell", ) @@ -1058,11 +907,13 @@ def make_contest_ranking_profile( user = participation.user return ContestRankingProfile( id=user.id, - user=user, + user=user.user, + css_class=user.css_class, username=user.username, points=points, cumtime=cumtime, tiebreaker=participation.tiebreaker, + organization=user.organization, participation_rating=participation.rating.rating if hasattr(participation, "rating") else None, @@ -1079,60 +930,45 @@ def make_contest_ranking_profile( ) -def base_contest_ranking_list( - contest, problems, queryset, show_final=False, extra_participation=None -): - participation_fields = [ - field.name - for field in ContestParticipation._meta.get_fields() - if field.concrete and not field.many_to_many - ] - fields_to_fetch = participation_fields + [ - "user__id", - "rating__rating", - ] - - res = [ +def base_contest_ranking_list(contest, problems, queryset, show_final=False): + return [ make_contest_ranking_profile(contest, participation, problems, show_final) - for participation in queryset.select_related("user", "rating").only( - *fields_to_fetch + for participation in queryset.select_related("user__user", "rating").defer( + "user__about", "user__organizations__about" ) ] - Profile.prefetch_profile_cache([p.id for p in res]) - return res -def contest_ranking_list( - contest, problems, queryset=None, show_final=False, extra_participation=None -): - if queryset is None: +def contest_ranking_list(contest, problems, queryset=None, show_final=False): + if not queryset: queryset = contest.users.filter(virtual=0) - if extra_participation and extra_participation.virtual: - queryset = queryset | contest.users.filter(id=extra_participation.id) - - if show_final: - queryset = queryset.order_by( - "is_disqualified", "-score_final", "cumtime_final", "tiebreaker" + if not show_final: + return base_contest_ranking_list( + contest, + problems, + queryset.prefetch_related("user__organizations") + .extra(select={"round_score": "round(score, 6)"}) + .order_by("is_disqualified", "-round_score", "cumtime", "tiebreaker"), + show_final, ) else: - queryset = queryset.order_by( - "is_disqualified", "-score", "cumtime", "tiebreaker" + return base_contest_ranking_list( + contest, + problems, + queryset.prefetch_related("user__organizations") + .extra(select={"round_score": "round(score_final, 6)"}) + .order_by("is_disqualified", "-round_score", "cumtime_final", "tiebreaker"), + show_final, ) - return base_contest_ranking_list( - contest, - problems, - queryset, - show_final, - ) - def get_contest_ranking_list( request, contest, participation=None, ranking_list=contest_ranking_list, + show_current_virtual=False, ranker=ranker, show_final=False, ): @@ -1142,31 +978,65 @@ def get_contest_ranking_list( .order_by("order") ) - if participation is None: - participation = _get_current_virtual_participation(request, contest) - - ranking_list_result = ranking_list( - contest, problems, show_final=show_final, extra_participation=participation - ) - users = ranker( - ranking_list_result, + ranking_list(contest, problems, show_final=show_final), key=attrgetter("points", "cumtime", "tiebreaker"), ) + + if show_current_virtual: + if participation is None and request.user.is_authenticated: + participation = request.profile.current_contest + if participation is None or participation.contest_id != contest.id: + participation = None + if participation is not None and participation.virtual: + users = chain( + [("-", make_contest_ranking_profile(contest, participation, problems))], + users, + ) return users, problems -def _get_current_virtual_participation(request, contest): - # Return None if not eligible - if not request.user.is_authenticated: - return None +def contest_ranking_ajax(request, contest, participation=None): + contest, exists = _find_contest(request, contest) + show_final = bool(request.GET.get("final", False)) + if not exists: + return HttpResponseBadRequest("Invalid contest", content_type="text/plain") - participation = request.profile.current_contest + if not contest.can_see_full_scoreboard(request.user): + raise Http404() - if participation is None or participation.contest_id != contest.id: - return None + if show_final: + if ( + not contest.is_editable_by(request.user) + or not contest.format.has_hidden_subtasks + ): + raise Http404() - return participation + queryset = contest.users.filter(virtual__gte=0) + if request.GET.get("friend") == "true" and request.profile: + friends = list(request.profile.get_friends()) + queryset = queryset.filter(user__user__username__in=friends) + if request.GET.get("virtual") != "true": + queryset = queryset.filter(virtual=0) + + users, problems = get_contest_ranking_list( + request, + contest, + participation, + ranking_list=partial(contest_ranking_list, queryset=queryset), + show_final=show_final, + ) + return render( + request, + "contest/ranking-table.html", + { + "users": users, + "problems": problems, + "contest": contest, + "has_rating": contest.ratings.exists(), + "can_edit": contest.is_editable_by(request.user), + }, + ) class ContestRankingBase(ContestMixin, TitleMixin, DetailView): @@ -1197,10 +1067,6 @@ class ContestRankingBase(ContestMixin, TitleMixin, DetailView): class ContestRanking(ContestRankingBase): page_type = "ranking" - show_final = False - - def should_bypass_access_check(self, contest): - return contest.public_scoreboard def get_title(self): return _("%s Rankings") % self.object.name @@ -1217,60 +1083,24 @@ class ContestRanking(ContestRankingBase): ranker=lambda users, key: ((_("???"), user) for user in users), ) - queryset = self.object.users - if self.friend_only: - friends = self.request.profile.get_friends() - queryset = queryset.filter(user_id__in=friends) - if not self.include_virtual: - queryset = queryset.filter(virtual=0) - else: - queryset = queryset.filter(virtual__gte=0) - - return get_contest_ranking_list( - self.request, - self.object, - ranking_list=partial(contest_ranking_list, queryset=queryset), - show_final=self.show_final, - ) - - def _get_default_include_virtual(self): - if hasattr(self.object, "official"): - return "1" - return "0" - - def setup_filters(self): - if self.request.profile: - self.friend_only = bool(self.request.GET.get("friend") == "1") - else: - self.friend_only = False - self.include_virtual = bool( - self.request.GET.get("virtual", self._get_default_include_virtual()) == "1" - ) - self.ajax_only = bool(self.request.GET.get("ajax") == "1") - - if self.ajax_only: - self.template_name = "contest/ranking-table.html" + return get_contest_ranking_list(self.request, self.object) def get_context_data(self, **kwargs): - self.setup_filters() context = super().get_context_data(**kwargs) context["has_rating"] = self.object.ratings.exists() - if not self.ajax_only: - context["include_virtual"] = self.include_virtual - context["friend_only"] = self.friend_only return context class ContestFinalRanking(LoginRequiredMixin, ContestRanking): page_type = "final_ranking" - show_final = True def get_ranking_list(self): if not self.object.is_editable_by(self.request.user): raise Http404() - if not self.object.format.has_hidden_subtasks: + if self.object.format.has_hidden_subtasks: raise Http404() - return super().get_ranking_list() + + return get_contest_ranking_list(self.request, self.object, show_final=True) class ContestParticipationList(LoginRequiredMixin, ContestRankingBase): @@ -1301,6 +1131,7 @@ class ContestParticipationList(LoginRequiredMixin, ContestRankingBase): return get_contest_ranking_list( self.request, self.object, + show_current_virtual=False, ranking_list=partial(base_contest_ranking_list, queryset=queryset), ranker=lambda users, key: ( (user.participation.virtual or live_link, user) for user in users @@ -1500,7 +1331,9 @@ class ContestClarificationAjax(ContestMixin, DetailView): raise Http404() polling_time = 1 # minute - last_one_minute = timezone.now() - timezone.timedelta(minutes=polling_time) + last_one_minute = last_five_minutes = timezone.now() - timezone.timedelta( + minutes=polling_time + ) queryset = ContestProblemClarification.objects.filter( problem__in=self.object.contest_problems.all(), date__gte=last_one_minute @@ -1532,131 +1365,3 @@ def update_contest_mode(request): old_mode = request.session.get("contest_mode", True) request.session["contest_mode"] = not old_mode return HttpResponse() - - -ContestsSummaryData = namedtuple( - "ContestsSummaryData", - "username first_name last_name points point_contests css_class", -) - - -class ContestsSummaryView(DiggPaginatorMixin, ListView): - paginate_by = 50 - template_name = "contest/contests_summary.html" - - def get(self, *args, **kwargs): - try: - self.contests_summary = ContestsSummary.objects.get(key=kwargs["key"]) - except: - raise Http404() - return super().get(*args, **kwargs) - - def get_queryset(self): - total_rank = self.contests_summary.results - return total_rank - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["contests"] = self.contests_summary.contests.all() - context["title"] = _("Contests") - context["first_page_href"] = "." - return context - - -def recalculate_contest_summary_result(request, contest_summary): - scores_system = contest_summary.scores - contests = contest_summary.contests.all() - total_points = defaultdict(int) - result_per_contest = defaultdict(lambda: [(0, 0)] * len(contests)) - user_css_class = {} - - for i in range(len(contests)): - contest = contests[i] - users, problems = get_contest_ranking_list(request, contest) - for rank, user in users: - curr_score = 0 - if rank - 1 < len(scores_system): - curr_score = scores_system[rank - 1] - total_points[user.user] += curr_score - result_per_contest[user.user][i] = (curr_score, rank) - user_css_class[user.user] = user.user.css_class - - sorted_total_points = [ - ContestsSummaryData( - username=user.username, - first_name=user.first_name, - last_name=user.last_name, - points=total_points[user], - point_contests=result_per_contest[user], - css_class=user_css_class[user], - ) - for user in total_points - ] - - sorted_total_points.sort(key=lambda x: x.points, reverse=True) - total_rank = ranker(sorted_total_points) - return [(rank, item._asdict()) for rank, item in total_rank] - - -class OfficialContestList(ContestList): - official = True - template_name = "contest/official_list.html" - - def setup_contest_list(self, request): - self.contest_query = request.GET.get("contest", "") - self.org_query = [] - self.hide_organization_contests = False - - self.selected_categories = [] - self.selected_locations = [] - self.year_from = None - self.year_to = None - - if "category" in request.GET: - try: - self.selected_categories = list( - map(int, request.GET.getlist("category")) - ) - except ValueError: - pass - if "location" in request.GET: - try: - self.selected_locations = list( - map(int, request.GET.getlist("location")) - ) - except ValueError: - pass - if "year_from" in request.GET: - try: - self.year_from = int(request.GET.get("year_from")) - except ValueError: - pass - if "year_to" in request.GET: - try: - self.year_to = int(request.GET.get("year_to")) - except ValueError: - pass - - def extra_queryset_filters(self, queryset): - if self.selected_categories: - queryset = queryset.filter(official__category__in=self.selected_categories) - if self.selected_locations: - queryset = queryset.filter(official__location__in=self.selected_locations) - if self.year_from: - queryset = queryset.filter(official__year__gte=self.year_from) - if self.year_to: - queryset = queryset.filter(official__year__lte=self.year_to) - return queryset - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["page_type"] = "official" - context["is_official"] = True - context["categories"] = OfficialContestCategory.objects.all() - context["locations"] = OfficialContestLocation.objects.all() - context["selected_categories"] = self.selected_categories - context["selected_locations"] = self.selected_locations - context["year_from"] = self.year_from - context["year_to"] = self.year_to - - return context diff --git a/judge/views/course.py b/judge/views/course.py index 7514d6f..2748370 100644 --- a/judge/views/course.py +++ b/judge/views/course.py @@ -1,162 +1,21 @@ -from django.utils.html import mark_safe from django.db import models -from django.views.generic import ListView, DetailView, View -from django.utils.translation import gettext, gettext_lazy as _ -from django.http import Http404 -from django import forms -from django.forms import ( - inlineformset_factory, - ModelForm, - modelformset_factory, - BaseModelFormSet, -) -from django.views.generic.edit import FormView -from django.shortcuts import get_object_or_404 -from django.urls import reverse_lazy, reverse -from django.db.models import Max, F, Sum -from django.core.exceptions import ObjectDoesNotExist +from judge.models.course import Course , CourseAssignment , CourseRole +from judge.models.contest import ContestParticipation, Contest +from django.views.generic import ListView, DetailView +from django.utils import timezone -from judge.models import ( - Course, - Contest, - CourseLesson, - Submission, - Profile, - CourseRole, - CourseLessonProblem, - CourseContest, - ContestProblem, - ContestParticipation, -) -from judge.models.course import RoleInCourse -from judge.widgets import ( - HeavyPreviewPageDownWidget, - HeavySelect2MultipleWidget, - HeavySelect2Widget, - DateTimePickerWidget, - Select2MultipleWidget, - Select2Widget, -) -from judge.forms import ( - ContestProblemFormSet, -) -from judge.utils.problems import ( - user_attempted_ids, - user_completed_ids, -) -from judge.utils.contest import ( - maybe_trigger_contest_rescore, -) -from reversion import revisions - - -def max_case_points_per_problem(profile, problems): - # return a dict {problem_id: {case_points, case_total}} - q = ( - Submission.objects.filter(user=profile, problem__in=problems) - .values("problem") - .annotate(case_points=Max("case_points"), case_total=F("case_total")) - .order_by("problem") - ) - res = {} - for problem in q: - res[problem["problem"]] = problem - return res - - -def calculate_lessons_progress(profile, lessons): - res = {} - total_achieved_points = total_lesson_points = 0 - for lesson in lessons: - problems = lesson.lesson_problems.values_list("problem", flat=True) - problem_points = max_case_points_per_problem(profile, problems) - achieved_points = total_points = 0 - - for lesson_problem in lesson.lesson_problems.all(): - val = problem_points.get(lesson_problem.problem.id) - if val and val["case_total"]: - achieved_points += ( - val["case_points"] / val["case_total"] * lesson_problem.score - ) - total_points += lesson_problem.score - - res[lesson.id] = { - "achieved_points": achieved_points, - "total_points": total_points, - "percentage": achieved_points / total_points * 100 if total_points else 0, - } - if total_points: - total_achieved_points += achieved_points / total_points * lesson.points - total_lesson_points += lesson.points - - res["total"] = { - "achieved_points": total_achieved_points, - "total_points": total_lesson_points, - "percentage": total_achieved_points / total_lesson_points * 100 - if total_lesson_points - else 0, - } - return res - - -def calculate_contests_progress(profile, course_contests): - res = {} - total_achieved_points = total_contest_points = 0 - for course_contest in course_contests: - contest = course_contest.contest - - achieved_points = 0 - participation = ContestParticipation.objects.filter( - contest=contest, user=profile, virtual=0 - ).first() - - if participation: - achieved_points = participation.score - - total_points = ( - ContestProblem.objects.filter(contest=contest).aggregate(Sum("points"))[ - "points__sum" - ] - or 0 - ) - - res[course_contest.id] = { - "achieved_points": achieved_points, - "total_points": total_points, - "percentage": achieved_points / total_points * 100 if total_points else 0, - } - - if total_points: - total_achieved_points += ( - achieved_points / total_points * course_contest.points - ) - total_contest_points += course_contest.points - - res["total"] = { - "achieved_points": total_achieved_points, - "total_points": total_contest_points, - "percentage": total_achieved_points / total_contest_points * 100 - if total_contest_points - else 0, - } - return res - - -def calculate_total_progress(profile, lesson_progress, contest_progress): - lesson_total = lesson_progress["total"] - contest_total = contest_progress["total"] - total_achieved_points = ( - lesson_total["achieved_points"] + contest_total["achieved_points"] - ) - total_points = lesson_total["total_points"] + contest_total["total_points"] - - res = { - "achieved_points": total_achieved_points, - "total_points": total_points, - "percentage": total_achieved_points / total_points * 100 if total_points else 0, - } - return res +__all__ = [ + "CourseList", + "CourseDetail", + "CourseResource", + "CourseResourceDetail", + "CourseStudentResults", + "CourseEdit", + "CourseResourceDetailEdit", + "CourseResourceEdit", +] +course_directory_file = "" class CourseList(ListView): model = Course @@ -165,617 +24,70 @@ class CourseList(ListView): def get_context_data(self, **kwargs): context = super(CourseList, self).get_context_data(**kwargs) - context["courses"] = Course.get_accessible_courses(self.request.profile) - context["title"] = _("Courses") - context["page_type"] = "list" + available, enrolling = [], [] + for course in Course.objects.filter(is_public=True).filter(is_open=True): + if Course.is_accessible_by(course, self.request.profile): + enrolling.append(course) + else: + available.append(course) + context["available"] = available + context["enrolling"] = enrolling return context - -class CourseDetailMixin(object): - def dispatch(self, request, *args, **kwargs): - self.course = get_object_or_404(Course, slug=self.kwargs["slug"]) - if not Course.is_accessible_by(self.course, self.request.profile): - raise Http404() - self.is_editable = Course.is_editable_by(self.course, self.request.profile) - return super(CourseDetailMixin, self).dispatch(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - context = super(CourseDetailMixin, self).get_context_data(**kwargs) - context["course"] = self.course - context["is_editable"] = self.is_editable - return context - - -class CourseEditableMixin(CourseDetailMixin): - def dispatch(self, request, *args, **kwargs): - res = super(CourseEditableMixin, self).dispatch(request, *args, **kwargs) - if not self.is_editable: - raise Http404() - return res - - -class CourseDetail(CourseDetailMixin, DetailView): - model = Course +class CourseDetail(ListView): + model = CourseAssignment template_name = "course/course.html" - def get_object(self): - return self.course + def get_queryset(self): + cur_course = Course.objects.get(slug=self.kwargs['slug']) + return CourseAssignment.objects.filter(course=cur_course) def get_context_data(self, **kwargs): context = super(CourseDetail, self).get_context_data(**kwargs) - lessons = ( - self.course.lessons.filter(is_visible=True) - .order_by("order") - .prefetch_related("lesson_problems") - .all() - ) - course_contests = ( - self.course.contests.select_related("contest") - .filter(contest__is_visible=True) - .order_by("order") - ) - context["title"] = self.course.name - context["page_type"] = "home" - context["lessons"] = lessons - context["lesson_progress"] = calculate_lessons_progress( - self.request.profile, lessons - ) - context["course_contests"] = course_contests - context["contest_progress"] = calculate_contests_progress( - self.request.profile, course_contests - ) - - context["total_progress"] = calculate_total_progress( - self.request.profile, - context["lesson_progress"], - context["contest_progress"], - ) - + context['slug'] = self.kwargs['slug'] return context +def best_score_user_contest(user , contest): + participated_contests = ContestParticipation.objects.filter(user=user, contest=contest) + progress_point = 0 + for cur_contest in participated_contests: + progress_point = max( progress_point , cur_contest.score_final ) + return progress_point -class CourseLessonDetail(CourseDetailMixin, DetailView): - model = CourseLesson - template_name = "course/lesson.html" +def progress_contest(user , contest): + return best_score_user_contest(user, contest) / contest.total_points - def get_object(self): - try: - self.lesson = CourseLesson.objects.get( - course=self.course, id=self.kwargs["id"] - ) - - is_editable = Course.is_editable_by(self.course, self.request.profile) - if not self.lesson.is_visible and not is_editable: - raise Http404() - - return self.lesson - except ObjectDoesNotExist: - raise Http404() - - def get_profile(self): - username = self.request.GET.get("user") - if not username: - return self.request.profile - - is_editable = Course.is_editable_by(self.course, self.request.profile) - if not is_editable: - raise Http404() - - try: - profile = Profile.objects.get(user__username=username) - is_student = profile.course_roles.filter( - role=RoleInCourse.STUDENT, course=self.course - ).exists() - if not is_student: - raise Http404() - return profile - except ObjectDoesNotExist: - raise Http404() - - def get_context_data(self, **kwargs): - context = super(CourseLessonDetail, self).get_context_data(**kwargs) - profile = self.get_profile() - context["profile"] = profile - context["title"] = self.lesson.title - context["lesson"] = self.lesson - context["completed_problem_ids"] = user_completed_ids(profile) - context["attempted_problems"] = user_attempted_ids(profile) - context["problem_points"] = max_case_points_per_problem( - profile, self.lesson.lesson_problems.values_list("problem", flat=True) - ) - return context - - -class CourseLessonForm(forms.ModelForm): - class Meta: - model = CourseLesson - fields = ["order", "title", "is_visible", "points", "content"] - widgets = { - "title": forms.TextInput(), - "content": HeavyPreviewPageDownWidget(preview=reverse_lazy("blog_preview")), - "problems": HeavySelect2MultipleWidget(data_view="problem_select2"), - } - - -CourseLessonFormSet = inlineformset_factory( - Course, CourseLesson, form=CourseLessonForm, extra=1, can_delete=True -) - - -class CourseLessonProblemForm(ModelForm): - class Meta: - model = CourseLessonProblem - fields = ["order", "problem", "score", "lesson"] - widgets = { - "problem": HeavySelect2Widget( - data_view="problem_select2", attrs={"style": "width: 100%"} - ), - "lesson": forms.HiddenInput(), - } - - -CourseLessonProblemFormSet = modelformset_factory( - CourseLessonProblem, form=CourseLessonProblemForm, extra=5, can_delete=True -) - - -class EditCourseLessonsView(CourseEditableMixin, FormView): - template_name = "course/edit_lesson.html" - form_class = CourseLessonFormSet - - def get_problem_formset(self, post=False, lesson=None): - formset = CourseLessonProblemFormSet( - data=self.request.POST if post else None, - prefix=f"problems_{lesson.id}" if lesson else "problems", - queryset=CourseLessonProblem.objects.filter(lesson=lesson).order_by( - "order" - ), - ) - if lesson: - for form in formset: - form.fields["lesson"].initial = lesson - return formset - - def get_context_data(self, **kwargs): - context = super(EditCourseLessonsView, self).get_context_data(**kwargs) - if self.request.method == "POST": - context["formset"] = self.form_class( - self.request.POST, self.request.FILES, instance=self.course - ) - context["problem_formsets"] = { - lesson.instance.id: self.get_problem_formset( - post=True, lesson=lesson.instance - ) - for lesson in context["formset"].forms - if lesson.instance.id - } - else: - context["formset"] = self.form_class( - instance=self.course, queryset=self.course.lessons.order_by("order") - ) - context["problem_formsets"] = { - lesson.instance.id: self.get_problem_formset( - post=False, lesson=lesson.instance - ) - for lesson in context["formset"].forms - if lesson.instance.id - } - - context["title"] = _("Edit lessons for %(course_name)s") % { - "course_name": self.course.name - } - context["content_title"] = mark_safe( - _("Edit lessons for %(course_name)s") - % { - "course_name": self.course.name, - "url": self.course.get_absolute_url(), - } - ) - context["page_type"] = "edit_lesson" - - return context - - def post(self, request, *args, **kwargs): - formset = self.form_class(request.POST, instance=self.course) - problem_formsets = [ - self.get_problem_formset(post=True, lesson=lesson.instance) - for lesson in formset.forms - if lesson.instance.id - ] - for pf in problem_formsets: - if not pf.is_valid(): - return self.form_invalid(pf) - - if formset.is_valid(): - formset.save() - for problem_formset in problem_formsets: - problem_formset.save() - for obj in problem_formset.deleted_objects: - if obj.pk is not None: - obj.delete() - return self.form_valid(formset) - else: - return self.form_invalid(formset) - - def get_success_url(self): - return self.request.path - - -class CourseStudentResults(CourseEditableMixin, DetailView): - model = Course +def progress_course(user , course): + assignments = CourseAssignment.objects.filter(course=course) + assignments_total_point = 0 + for assignment in assignments: + assignments_total_point += assignment.points + progress = 0 + for assignment in assignments: + progress += progress_contest(user,assignment.contest) * assignment.points / assignments_total_point + return progress + +class CourseStudentResults(ListView): + model = ContestParticipation template_name = "course/grades.html" - def get_object(self): - return self.course - - def get_grades(self): - students = self.course.get_students() - students.sort(key=lambda u: u.username.lower()) - lessons = ( - self.course.lessons.filter(is_visible=True) - .prefetch_related("lesson_problems") - .all() - ) - course_contests = ( - self.course.contests.select_related("contest") - .filter(contest__is_visible=True) - .order_by("order") - ) - - grade_lessons = {} - grade_contests = {} - grade_total = {} - for s in students: - grade_lessons[s] = lesson_progress = calculate_lessons_progress(s, lessons) - grade_contests[s] = contest_progress = calculate_contests_progress( - s, course_contests - ) - grade_total[s] = calculate_total_progress( - s, lesson_progress, contest_progress - ) - return grade_lessons, grade_contests, grade_total - + def get_queryset(self): + cur_course = Course.objects.get(slug=self.kwargs['slug']) + contests = CourseAssignment.objects.filter(course=cur_course) + students = Course.get_students(cur_course) + grades_table = [] + for student in students: + grades_student = [student.user.user.username] + for contest in contests: + grades_student.append( round(progress_contest(student.user, contest.contest) * 100 ) ) + grades_student.append( round(progress_course(student.user, cur_course) * 100) ) + grades_table.append( grades_student ) + return grades_table + def get_context_data(self, **kwargs): context = super(CourseStudentResults, self).get_context_data(**kwargs) - context["title"] = _("Grades in %(course_name)s") % { - "course_name": self.course.name, - } - context["content_title"] = mark_safe( - _("Grades in %(course_name)s") - % { - "course_name": self.course.name, - "url": self.course.get_absolute_url(), - } - ) - context["page_type"] = "grades" - ( - context["grade_lessons"], - context["grade_contests"], - context["grade_total"], - ) = self.get_grades() - context["lessons"] = self.course.lessons.filter(is_visible=True).order_by( - "order" - ) - context["course_contests"] = ( - self.course.contests.select_related("contest") - .filter(contest__is_visible=True) - .order_by("order") - ) + cur_course = Course.objects.get(slug=self.kwargs['slug']) + contests = CourseAssignment.objects.filter(course=cur_course) + context['contests'] = contests return context - -class CourseStudentResultsLesson(CourseEditableMixin, DetailView): - model = CourseLesson - template_name = "course/grades_lesson.html" - - def get_object(self): - try: - self.lesson = CourseLesson.objects.get( - course=self.course, id=self.kwargs["id"] - ) - return self.lesson - except ObjectDoesNotExist: - raise Http404() - - def get_lesson_grades(self): - students = self.course.get_students() - students.sort(key=lambda u: u.username.lower()) - problems = self.lesson.lesson_problems.values_list("problem", flat=True) - lesson_problems = self.lesson.lesson_problems.all() - grades = {} - for s in students: - grades[s] = problem_points = max_case_points_per_problem(s, problems) - achieved_points = total_points = 0 - for lesson_problem in lesson_problems: - val = problem_points.get(lesson_problem.problem.id) - if val and val["case_total"]: - achieved_points += ( - val["case_points"] / val["case_total"] * lesson_problem.score - ) - total_points += lesson_problem.score - grades[s]["total"] = { - "achieved_points": achieved_points, - "total_points": total_points, - "percentage": achieved_points / total_points * 100 - if total_points - else 0, - } - return grades - - def get_context_data(self, **kwargs): - context = super(CourseStudentResultsLesson, self).get_context_data(**kwargs) - context["lesson"] = self.lesson - context["title"] = _("Grades of %(lesson_name)s in %(course_name)s") % { - "course_name": self.course.name, - "lesson_name": self.lesson.title, - } - context["content_title"] = mark_safe( - _( - "Grades of %(lesson_name)s in %(course_name)s" - ) - % { - "course_name": self.course.name, - "lesson_name": self.lesson.title, - "url_course": self.course.get_absolute_url(), - "url_lesson": self.lesson.get_absolute_url(), - } - ) - context["page_type"] = "grades" - context["grades"] = self.get_lesson_grades() - return context - - -class AddCourseContestForm(forms.ModelForm): - order = forms.IntegerField(label=_("Order")) - points = forms.IntegerField(label=_("Points")) - - class Meta: - model = Contest - fields = [ - "order", - "points", - "key", - "name", - "start_time", - "end_time", - "problems", - ] - widgets = { - "start_time": DateTimePickerWidget(), - "end_time": DateTimePickerWidget(), - "problems": HeavySelect2MultipleWidget(data_view="problem_select2"), - } - - def save(self, course, profile, commit=True): - contest = super().save(commit=False) - contest.is_in_course = True - - old_save_m2m = self.save_m2m - - def save_m2m(): - for i, problem in enumerate(self.cleaned_data["problems"]): - contest_problem = ContestProblem( - contest=contest, problem=problem, points=100, order=i + 1 - ) - contest_problem.save() - contest.contest_problems.add(contest_problem) - contest.authors.add(profile) - old_save_m2m() - - self.save_m2m = save_m2m - contest.save() - self.save_m2m() - - CourseContest.objects.create( - course=course, - contest=contest, - order=self.cleaned_data["order"], - points=self.cleaned_data["points"], - ) - - return contest - - -class AddCourseContest(CourseEditableMixin, FormView): - template_name = "course/add_contest.html" - form_class = AddCourseContestForm - - def get_title(self): - return _("Add contest") - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["title"] = self.get_title() - return context - - def form_valid(self, form): - with revisions.create_revision(): - revisions.set_comment(_("Added from course") + " " + self.course.name) - revisions.set_user(self.request.user) - - self.contest = form.save(course=self.course, profile=self.request.profile) - - return super().form_valid(form) - - def get_success_url(self): - return reverse( - "edit_course_contest", - args=[self.course.slug, self.contest.key], - ) - - -class CourseContestList(CourseEditableMixin, ListView): - template_name = "course/contest_list.html" - context_object_name = "course_contests" - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["title"] = _("Contest list") - context["page_type"] = "contests" - return context - - def get_queryset(self): - return self.course.contests.select_related("contest").all().order_by("order") - - -class EditCourseContestForm(ModelForm): - order = forms.IntegerField(label=_("Order")) - points = forms.IntegerField(label=_("Points")) - - class Meta: - model = Contest - fields = ( - "order", - "points", - "is_visible", - "key", - "name", - "start_time", - "end_time", - "format_name", - "authors", - "curators", - "testers", - "time_limit", - "freeze_after", - "use_clarifications", - "hide_problem_tags", - "public_scoreboard", - "scoreboard_visibility", - "points_precision", - "rate_limit", - "description", - "access_code", - "private_contestants", - "view_contest_scoreboard", - "banned_users", - ) - widgets = { - "authors": HeavySelect2MultipleWidget(data_view="profile_select2"), - "curators": HeavySelect2MultipleWidget(data_view="profile_select2"), - "testers": HeavySelect2MultipleWidget(data_view="profile_select2"), - "private_contestants": HeavySelect2MultipleWidget( - data_view="profile_select2" - ), - "banned_users": HeavySelect2MultipleWidget(data_view="profile_select2"), - "view_contest_scoreboard": HeavySelect2MultipleWidget( - data_view="profile_select2" - ), - "tags": Select2MultipleWidget, - "description": HeavyPreviewPageDownWidget( - preview=reverse_lazy("contest_preview") - ), - "start_time": DateTimePickerWidget(), - "end_time": DateTimePickerWidget(), - "format_name": Select2Widget(), - "scoreboard_visibility": Select2Widget(), - } - - def __init__(self, *args, **kwargs): - self.course_contest_instance = kwargs.pop("course_contest_instance", None) - super().__init__(*args, **kwargs) - - if self.course_contest_instance: - self.fields["order"].initial = self.course_contest_instance.order - self.fields["points"].initial = self.course_contest_instance.points - - def save(self, commit=True): - contest = super().save(commit=commit) - - if self.course_contest_instance: - self.course_contest_instance.order = self.cleaned_data["order"] - self.course_contest_instance.points = self.cleaned_data["points"] - if commit: - self.course_contest_instance.save() - - return contest - - -class EditCourseContest(CourseEditableMixin, FormView): - template_name = "course/edit_contest.html" - form_class = EditCourseContestForm - - def dispatch(self, request, *args, **kwargs): - self.contest = get_object_or_404(Contest, key=self.kwargs["contest"]) - res = super().dispatch(request, *args, **kwargs) - if not self.contest.is_in_course: - raise Http404() - return res - - def get_form_kwargs(self): - self.course_contest = get_object_or_404( - CourseContest, course=self.course, contest=self.contest - ) - - kwargs = super().get_form_kwargs() - kwargs["instance"] = self.contest - kwargs["course_contest_instance"] = self.course_contest - return kwargs - - def post(self, request, *args, **kwargs): - problem_formset = self.get_problem_formset(True) - if problem_formset.is_valid(): - self.problem_form_changes = False - for problem_form in problem_formset: - if problem_form.has_changed(): - self.problem_form_changes = True - if problem_form.cleaned_data.get("DELETE") and problem_form.instance.pk: - problem_form.instance.delete() - - for problem_form in problem_formset.save(commit=False): - if problem_form: - problem_form.contest = self.contest - problem_form.save() - - return super().post(request, *args, **kwargs) - - self.object = self.contest - return self.render_to_response( - self.get_context_data( - problems_form=problem_formset, - ) - ) - - def get_title(self): - return _("Edit contest") - - def form_valid(self, form): - with revisions.create_revision(): - revisions.set_comment(_("Edited from course") + " " + self.course.name) - revisions.set_user(self.request.user) - - if self.problem_form_changes: - maybe_trigger_contest_rescore(form, self.contest, True) - - form.save() - - return super().form_valid(form) - - def get_problem_formset(self, post=False): - return ContestProblemFormSet( - data=self.request.POST if post else None, - prefix="problems", - queryset=ContestProblem.objects.filter(contest=self.contest).order_by( - "order" - ), - ) - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["title"] = self.get_title() - context["content_title"] = mark_safe( - _("Edit %(contest_name)s") - % { - "contest_name": self.contest.name, - "url": self.contest.get_absolute_url(), - } - ) - if "problems_form" not in context: - context["problems_form"] = self.get_problem_formset() - return context - - def get_success_url(self): - return reverse( - "edit_course_contest", - args=[self.course.slug, self.contest.key], - ) diff --git a/judge/views/custom_file_upload.py b/judge/views/custom_file_upload.py deleted file mode 100644 index cdc4f8e..0000000 --- a/judge/views/custom_file_upload.py +++ /dev/null @@ -1,43 +0,0 @@ -from django.shortcuts import render -from django.core.files.storage import FileSystemStorage -from django import forms -from django.utils.translation import gettext as _ -from django.conf import settings -from django.http import Http404 - -import os -import secrets -from urllib.parse import urljoin - -MEDIA_PATH = "uploads" - - -class FileUploadForm(forms.Form): - file = forms.FileField() - - -def file_upload(request): - if not request.user.is_superuser: - raise Http404() - file_url = None - if request.method == "POST": - form = FileUploadForm(request.POST, request.FILES) - if form.is_valid(): - file = request.FILES["file"] - random_str = secrets.token_urlsafe(5) - file_name, file_extension = os.path.splitext(file.name) - new_filename = f"{file_name}_{random_str}{file_extension}" - - fs = FileSystemStorage( - location=os.path.join(settings.MEDIA_ROOT, MEDIA_PATH) - ) - filename = fs.save(new_filename, file) - file_url = urljoin(settings.MEDIA_URL, os.path.join(MEDIA_PATH, filename)) - else: - form = FileUploadForm() - - return render( - request, - "custom_file_upload.html", - {"form": form, "file_url": file_url, "title": _("File Upload")}, - ) diff --git a/judge/views/email.py b/judge/views/email.py deleted file mode 100644 index 5544daf..0000000 --- a/judge/views/email.py +++ /dev/null @@ -1,121 +0,0 @@ -from django.contrib.auth.tokens import default_token_generator -from django.core.mail import send_mail -from django.shortcuts import render, redirect -from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode -from django.utils.encoding import force_bytes, force_text -from django.conf import settings -from django import forms -from django.utils.translation import gettext_lazy as _ -from django.urls import reverse -from django.contrib.auth.decorators import login_required -from django.contrib.auth.models import User -from django.contrib.auth.hashers import check_password - -from urllib.parse import urlencode, urlunparse, urlparse - -from judge.models import Profile -from judge.utils.email_render import render_email_message - - -class EmailChangeForm(forms.Form): - new_email = forms.EmailField(label=_("New Email")) - password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) - - def __init__(self, *args, **kwargs): - self.user = kwargs.pop("user", None) - super().__init__(*args, **kwargs) - - def clean_new_email(self): - new_email = self.cleaned_data.get("new_email") - if User.objects.filter(email=new_email).exists(): - raise forms.ValidationError(_("An account with this email already exists.")) - return new_email - - def clean_password(self): - password = self.cleaned_data.get("password") - if not self.user.check_password(password): - raise forms.ValidationError("Invalid password") - return password - - -@login_required -def email_change_view(request): - form = EmailChangeForm(request.POST or None, user=request.user) - - if request.method == "POST" and form.is_valid(): - new_email = request.POST.get("new_email") - user = request.user - profile = request.profile - - # Generate a token for email verification - token = default_token_generator.make_token(user) - uid = urlsafe_base64_encode(force_bytes(user.pk)) - - # Send the email to the user - subject = settings.SITE_NAME + " - " + _("Email Change Request") - email_contexts = { - "message": _( - "We have received a request to change your email to this email. Click the button below to change your email:" - ), - "title": _("Email Change"), - "button_text": _("Change Email"), - "url_path": reverse( - "email_change_verify", kwargs={"uidb64": uid, "token": token} - ), - } - message = render_email_message(request, email_contexts) - send_mail( - subject, - message, - settings.EMAIL_HOST_USER, - [new_email], - html_message=message, - ) - profile.email_change_pending = new_email - profile.save() - return redirect("email_change_pending") - - return render( - request, - "email_change/email_change.html", - { - "form": form, - "title": _("Change email"), - }, - ) - - -def verify_email_view(request, uidb64, token): - try: - uid = force_text(urlsafe_base64_decode(uidb64)) - user = User.objects.get(pk=uid) - except (TypeError, ValueError, OverflowError, User.DoesNotExist): - user = None - if user is not None and default_token_generator.check_token(user, token): - profile = Profile.objects.get(user=user) - new_email = profile.email_change_pending - if new_email and not User.objects.filter(email=new_email).exists(): - user.email = new_email - profile.email_change_pending = None - user.save() - profile.save() - - return render( - request, - "email_change/email_change_success.html", - {"title": _("Success"), "user": user}, - ) - - return render( - request, "email_change/email_change_failure.html", {"title": _("Invalid")} - ) - - -def email_change_pending_view(request): - return render( - request, - "email_change/email_change_pending.html", - { - "title": _("Email change pending"), - }, - ) diff --git a/judge/views/feed.py b/judge/views/feed.py deleted file mode 100644 index cd809d5..0000000 --- a/judge/views/feed.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.views.generic import ListView -from django.shortcuts import render -from django.urls import reverse - -from judge.utils.infinite_paginator import InfinitePaginationMixin - - -class FeedView(InfinitePaginationMixin, ListView): - def get_feed_context(selfl, object_list): - return {} - - def get(self, request, *args, **kwargs): - only_content = request.GET.get("only_content", None) - if only_content and self.feed_content_template_name: - queryset = self.get_queryset() - paginator, page, object_list, _ = self.paginate_queryset( - queryset, self.paginate_by - ) - context = { - self.context_object_name: object_list, - "has_next_page": page.has_next(), - } - context.update(self.get_feed_context(object_list)) - return render(request, self.feed_content_template_name, context) - - return super(FeedView, self).get(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["has_next_page"] = context["page_obj"].has_next() - try: - context["feed_content_url"] = reverse(self.url_name) - except Exception as e: - context["feed_content_url"] = self.request.path - return context diff --git a/judge/views/internal.py b/judge/views/internal.py index 060a2c3..45f9249 100644 --- a/judge/views/internal.py +++ b/judge/views/internal.py @@ -1,28 +1,16 @@ -import logging -import json - from django.views.generic import ListView from django.utils.translation import gettext as _, gettext_lazy -from django.db.models import Count, Q +from django.db.models import Count from django.http import HttpResponseForbidden -from django.urls import reverse -from django.shortcuts import render from judge.utils.diggpaginator import DiggPaginator from judge.models import VolunteerProblemVote, Problem -class InternalView(object): - def get(self, request, *args, **kwargs): - if request.user.is_superuser: - return super(InternalView, self).get(request, *args, **kwargs) - return HttpResponseForbidden() - - -class InternalProblem(InternalView, ListView): +class InternalProblem(ListView): model = Problem title = _("Internal problems") - template_name = "internal/problem/problem.html" + template_name = "internal/base.html" paginate_by = 100 context_object_name = "problems" @@ -39,19 +27,13 @@ class InternalProblem(InternalView, ListView): **kwargs ) - def get_search_query(self): - return self.request.GET.get("q") or self.request.POST.get("q") - def get_queryset(self): - queryset = Problem.objects.annotate( - vote_count=Count("volunteer_user_votes") - ).filter(vote_count__gte=1) - query = self.get_search_query() - if query: - queryset = queryset.filter( - Q(code__icontains=query) | Q(name__icontains=query) - ) - return queryset.order_by("-vote_count") + queryset = ( + Problem.objects.annotate(vote_count=Count("volunteer_user_votes")) + .filter(vote_count__gte=1) + .order_by("-vote_count") + ) + return queryset def get_context_data(self, **kwargs): context = super(InternalProblem, self).get_context_data(**kwargs) @@ -59,112 +41,10 @@ class InternalProblem(InternalView, ListView): context["title"] = self.title context["page_prefix"] = self.request.path + "?page=" context["first_page_href"] = self.request.path - context["query"] = self.get_search_query() return context - -def get_problem_votes(request): - if not request.user.is_superuser: + def get(self, request, *args, **kwargs): + if request.user.is_superuser: + return super(InternalProblem, self).get(request, *args, **kwargs) return HttpResponseForbidden() - try: - problem = Problem.objects.get(id=request.GET.get("id")) - except: - return HttpResponseForbidden() - votes = ( - problem.volunteer_user_votes.select_related("voter") - .prefetch_related("types") - .order_by("id") - ) - return render( - request, - "internal/problem/votes.html", - { - "problem": problem, - "votes": votes, - }, - ) - - -class RequestTimeMixin(object): - def get_requests_data(self): - logger = logging.getLogger(self.log_name) - log_filename = logger.handlers[0].baseFilename - requests = [] - - with open(log_filename, "r") as f: - for line in f: - try: - info = json.loads(line) - requests.append(info) - except: - continue - return requests - - -class InternalRequestTime(InternalView, ListView, RequestTimeMixin): - title = _("Request times") - template_name = "internal/request_time.html" - context_object_name = "pages" - log_name = "judge.request_time" - detail_url_name = "internal_request_time_detail" - page_type = "request_time" - - def get_queryset(self): - requests = self.get_requests_data() - table = {} - for r in requests: - url_name = r["url_name"] - if url_name not in table: - table[url_name] = { - "time": 0, - "count": 0, - "url_name": url_name, - } - old_sum = table[url_name]["time"] * table[url_name]["count"] - table[url_name]["count"] += 1 - table[url_name]["time"] = (old_sum + float(r["response_time"])) / table[ - url_name - ]["count"] - order = self.request.GET.get("order", "time") - return sorted(table.values(), key=lambda x: x[order], reverse=True) - - def get_context_data(self, **kwargs): - context = super(InternalRequestTime, self).get_context_data(**kwargs) - context["page_type"] = self.page_type - context["title"] = self.title - context["current_path"] = self.request.path - context["detail_path"] = reverse(self.detail_url_name) - return context - - -class InternalRequestTimeDetail(InternalRequestTime): - template_name = "internal/request_time_detail.html" - context_object_name = "requests" - - def get_queryset(self): - url_name = self.request.GET.get("url_name", None) - if not url_name: - return HttpResponseForbidden() - if url_name == "None": - url_name = None - self.title = url_name - requests = self.get_requests_data() - filtered_requests = [r for r in requests if r["url_name"] == url_name] - order = self.request.GET.get("order", "response_time") - return sorted(filtered_requests, key=lambda x: x[order], reverse=True)[:200] - - def get_context_data(self, **kwargs): - context = super(InternalRequestTimeDetail, self).get_context_data(**kwargs) - context["url_name"] = self.request.GET.get("url_name", None) - return context - - -class InternalSlowRequest(InternalRequestTime): - log_name = "judge.slow_request" - detail_url_name = "internal_slow_request_detail" - page_type = "slow_request" - - -class InternalSlowRequestDetail(InternalRequestTimeDetail): - log_name = "judge.slow_request" diff --git a/judge/views/markdown_editor.py b/judge/views/markdown_editor.py deleted file mode 100644 index a014ba6..0000000 --- a/judge/views/markdown_editor.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.views import View -from django.shortcuts import render -from django.utils.translation import gettext_lazy as _ - - -class MarkdownEditor(View): - def get(self, request): - return render( - request, - "markdown_editor/markdown_editor.html", - { - "title": _("Markdown Editor"), - }, - ) diff --git a/judge/views/notification.py b/judge/views/notification.py index ee720c1..ea8d55f 100644 --- a/judge/views/notification.py +++ b/judge/views/notification.py @@ -2,41 +2,53 @@ from django.contrib.auth.decorators import login_required from django.views.generic import ListView from django.utils.translation import ugettext as _ from django.utils.timezone import now -from django.http import Http404 +from django.db.models import BooleanField, Value -from judge.models import Profile, Notification, NotificationProfile -from judge.models.notification import unseen_notifications_count -from judge.utils.infinite_paginator import InfinitePaginationMixin +from judge.utils.cachedict import CacheDict +from judge.models import Profile, Comment, Notification __all__ = ["NotificationList"] -class NotificationList(InfinitePaginationMixin, ListView): +class NotificationList(ListView): model = Notification context_object_name = "notifications" template_name = "notification/list.html" - paginate_by = 50 def get_queryset(self): - self.unseen_cnt = unseen_notifications_count(self.request.profile) + self.unseen_cnt = self.request.profile.count_unseen_notifications - self.queryset = Notification.objects.filter( - owner=self.request.profile - ).order_by("-id") + query = { + "owner": self.request.profile, + } + + self.queryset = ( + Notification.objects.filter(**query) + .order_by("-time")[:100] + .annotate(seen=Value(True, output_field=BooleanField())) + ) + + # Mark the several first unseen + for cnt, q in enumerate(self.queryset): + if cnt < self.unseen_cnt: + q.seen = False + else: + break return self.queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["unseen_count"] = self.unseen_cnt - context["title"] = _("Notifications (%d unseen)") % context["unseen_count"] - context["first_page_href"] = "." + context["title"] = _("Notifications (%d unseen)" % context["unseen_count"]) + context["has_notifications"] = self.queryset.exists() + context["page_titles"] = CacheDict(lambda page: Comment.get_page_title(page)) return context def get(self, request, *args, **kwargs): ret = super().get(request, *args, **kwargs) - if not request.user.is_authenticated: - raise Http404() - NotificationProfile.objects.filter(user=request.profile).update(unread_count=0) - unseen_notifications_count.dirty(self.request.profile) + + # update after rendering + Notification.objects.filter(owner=self.request.profile).update(read=True) + return ret diff --git a/judge/views/organization.py b/judge/views/organization.py index 2a5fea1..411074d 100644 --- a/judge/views/organization.py +++ b/judge/views/organization.py @@ -56,10 +56,10 @@ from judge.models import ( Problem, Profile, Contest, + Notification, ContestProblem, OrganizationProfile, ) -from judge.models.notification import make_notification from judge import event_poster as event from judge.utils.ranker import ranker from judge.utils.views import ( @@ -69,12 +69,12 @@ from judge.utils.views import ( DiggPaginatorMixin, ) from judge.utils.problems import user_attempted_ids, user_completed_ids -from judge.utils.contest import maybe_trigger_contest_rescore from judge.views.problem import ProblemList from judge.views.contests import ContestList -from judge.views.submission import SubmissionsListBase -from judge.views.feed import FeedView -from judge.tasks import rescore_contest +from judge.views.submission import AllSubmissions, SubmissionsListBase +from judge.views.pagevote import PageVoteListView +from judge.views.bookmark import BookMarkListView + __all__ = [ "OrganizationList", @@ -105,15 +105,15 @@ class OrganizationBase(object): def is_member(self, org=None): if org is None: org = self.object - if self.request.profile: - return org.is_member(self.request.profile) - return False + return ( + self.request.profile in org if self.request.user.is_authenticated else False + ) def is_admin(self, org=None): if org is None: org = self.object if self.request.profile: - return org.is_admin(self.request.profile) + return org.admins.filter(id=self.request.profile.id).exists() return False def can_access(self, org): @@ -131,14 +131,7 @@ class OrganizationMixin(OrganizationBase): context["is_admin"] = self.is_admin(self.organization) context["can_edit"] = self.can_edit_organization(self.organization) context["organization"] = self.organization - context["organization_image"] = self.organization.organization_image - context["organization_subdomain"] = ( - ("http" if settings.DMOJ_SSL == 0 else "https") - + "://" - + self.organization.slug - + "." - + get_current_site(self.request).domain - ) + context["logo_override_image"] = self.organization.logo_override_image if "organizations" in context: context.pop("organizations") return context @@ -148,22 +141,18 @@ class OrganizationMixin(OrganizationBase): self.organization_id = int(kwargs["pk"]) self.organization = get_object_or_404(Organization, id=self.organization_id) except Http404: - key = None - if hasattr(self, "slug_url_kwarg"): - key = kwargs.get(self.slug_url_kwarg, None) + key = kwargs.get(self.slug_url_kwarg, None) if key: return generic_message( request, _("No such organization"), _('Could not find an organization with the key "%s".') % key, - status=403, ) else: return generic_message( request, _("No such organization"), _("Could not find such organization."), - status=403, ) if self.organization.slug != kwargs["slug"]: return HttpResponsePermanentRedirect( @@ -205,7 +194,7 @@ class MemberOrganizationMixin(OrganizationMixin): ) -class OrganizationHomeView(OrganizationMixin): +class OrganizationHomeViewContext: def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) if not hasattr(self, "organization"): @@ -223,135 +212,126 @@ class OrganizationHomeView(OrganizationMixin): organizations=self.organization, authors=self.request.profile, ).count() - context["top_rated"] = ( - self.organization.members.filter(is_unlisted=False) - .order_by("-rating") - .only("id", "rating")[:10] - ) - context["top_scorer"] = ( - self.organization.members.filter(is_unlisted=False) - .order_by("-performance_points") - .only("id", "performance_points")[:10] - ) - Profile.prefetch_profile_cache([p.id for p in context["top_rated"]]) - Profile.prefetch_profile_cache([p.id for p in context["top_scorer"]]) - + context["top_rated"] = self.organization.members.filter( + is_unlisted=False + ).order_by("-rating")[:10] + context["top_scorer"] = self.organization.members.filter( + is_unlisted=False + ).order_by("-performance_points")[:10] return context -class OrganizationList( - QueryStringSortMixin, DiggPaginatorMixin, TitleMixin, ListView, OrganizationBase +class OrganizationDetailView( + OrganizationMixin, OrganizationHomeViewContext, DetailView ): + context_object_name = "organization" + model = Organization + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + if self.object.slug != kwargs["slug"]: + return HttpResponsePermanentRedirect( + request.get_full_path().replace(kwargs["slug"], self.object.slug) + ) + context = self.get_context_data(object=self.object) + return self.render_to_response(context) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["can_edit"] = self.can_edit_organization() + context["is_member"] = self.is_member() + return context + + +class OrganizationList(TitleMixin, ListView, OrganizationBase): model = Organization context_object_name = "organizations" template_name = "organization/list.html" title = gettext_lazy("Groups") - paginate_by = 12 - all_sorts = frozenset(("name", "member_count")) - default_desc = frozenset(("name", "member_count")) - - def get_default_sort_order(self, request): - return "-member_count" - - def get(self, request, *args, **kwargs): - default_tab = "mine" - if not self.request.user.is_authenticated: - default_tab = "public" - self.current_tab = self.request.GET.get("tab", default_tab) - self.organization_query = request.GET.get("organization", "") - - return super(OrganizationList, self).get(request, *args, **kwargs) - - def _get_queryset(self): - queryset = ( - super(OrganizationList, self) - .get_queryset() - .annotate(member_count=Count("member")) - .defer("about") - ) - - if self.organization_query: - queryset = queryset.filter( - Q(slug__icontains=self.organization_query) - | Q(name__icontains=self.organization_query) - | Q(short_name__icontains=self.organization_query) - ) - return queryset - - def get_queryset(self): - organization_list = self._get_queryset() - - my_organizations = [] - if self.request.profile: - my_organizations = organization_list.filter( - id__in=self.request.profile.organizations.values("id") - ) - - if self.current_tab == "public": - queryset = organization_list.exclude(id__in=my_organizations).filter( - is_open=True - ) - elif self.current_tab == "private": - queryset = organization_list.exclude(id__in=my_organizations).filter( - is_open=False - ) - else: - queryset = my_organizations - - if queryset: - queryset = queryset.order_by(self.order) - return queryset - - def get_context_data(self, **kwargs): - context = super(OrganizationList, self).get_context_data(**kwargs) - - context["first_page_href"] = "." - context["current_tab"] = self.current_tab - context["page_type"] = self.current_tab - context["organization_query"] = self.organization_query - context["selected_order"] = self.request.GET.get("order") - context["all_sort_options"] = [ - ("name", _("Name (asc.)")), - ("-name", _("Name (desc.)")), - ("member_count", _("Member count (asc.)")), - ("-member_count", _("Member count (desc.)")), - ] - - context.update(self.get_sort_context()) - context.update(self.get_sort_paginate_context()) - - return context - - -class OrganizationHome(OrganizationHomeView, FeedView): - template_name = "organization/home.html" - paginate_by = 4 - context_object_name = "posts" - feed_content_template_name = "blog/content.html" def get_queryset(self): return ( + super(OrganizationList, self) + .get_queryset() + .annotate(member_count=Count("member")) + ) + + def get_context_data(self, **kwargs): + context = super(OrganizationList, self).get_context_data(**kwargs) + context["my_organizations"] = [] + context["page_type"] = "organizations" + if self.request.profile: + context["my_organizations"] = context["organizations"].filter( + id__in=self.request.profile.organizations.values("id") + ) + other_organizations = context["organizations"].exclude( + id__in=context["my_organizations"] + ) + context["open_organizations"] = other_organizations.filter(is_open=True) + context["private_organizations"] = other_organizations.filter(is_open=False) + return context + + +class OrganizationHome(OrganizationDetailView, PageVoteListView, BookMarkListView): + template_name = "organization/home.html" + pagevote_object_name = "posts" + + def get_posts_and_page_obj(self): + posts = ( BlogPost.objects.filter( visible=True, publish_on__lte=timezone.now(), is_organization_private=True, - organizations=self.organization, + organizations=self.object, ) .order_by("-sticky", "-publish_on") .prefetch_related("authors__user", "organizations") ) + paginator = Paginator(posts, 10) + page_number = self.request.GET.get("page", 1) + posts = paginator.get_page(page_number) + return posts, paginator.page(page_number) + + def get_comment_page(self, post): + return "b:%s" % post.id def get_context_data(self, **kwargs): context = super(OrganizationHome, self).get_context_data(**kwargs) - context["title"] = self.organization.name + context["title"] = self.object.name + http = "http" if settings.DMOJ_SSL == 0 else "https" + context["organization_subdomain"] = ( + http + + "://" + + self.object.slug + + "." + + get_current_site(self.request).domain + ) + context["posts"], context["page_obj"] = self.get_posts_and_page_obj() + context = self.add_pagevote_context_data(context, "posts") + context = self.add_bookmark_context_data(context, "posts") + + # Hack: This allows page_obj to have page_range for non-ListView class + setattr( + context["page_obj"], "page_range", context["posts"].paginator.page_range + ) + context["first_page_href"] = self.request.path + context["page_prefix"] = "?page=" + + context["post_comment_counts"] = { + int(page[2:]): count + for page, count in Comment.objects.filter( + page__in=["b:%d" % post.id for post in context["posts"]], hidden=False + ) + .values_list("page") + .annotate(count=Count("page")) + .order_by() + } now = timezone.now() visible_contests = ( Contest.get_visible_contests(self.request.user) .filter( - is_visible=True, - is_organization_private=True, - organizations=self.organization, + is_visible=True, is_organization_private=True, organizations=self.object ) .order_by("start_time") ) @@ -364,35 +344,14 @@ class OrganizationHome(OrganizationHomeView, FeedView): return context -class OrganizationUsers( - DiggPaginatorMixin, QueryStringSortMixin, OrganizationMixin, ListView -): +class OrganizationUsers(QueryStringSortMixin, OrganizationDetailView): template_name = "organization/users.html" all_sorts = frozenset(("points", "problem_count", "rating", "performance_points")) default_desc = all_sorts default_sort = "-performance_points" - paginate_by = 100 - context_object_name = "users" - - def get_queryset(self): - return ( - self.organization.members.filter(is_unlisted=False) - .order_by(self.order, "id") - .select_related("user") - .only( - "display_rank", - "user__username", - "points", - "rating", - "performance_points", - "problem_count", - ) - ) def dispatch(self, request, *args, **kwargs): res = super(OrganizationUsers, self).dispatch(request, *args, **kwargs) - if res.status_code != 200: - return res if self.can_access(self.organization) or self.organization.is_open: return res return generic_message( @@ -404,16 +363,26 @@ class OrganizationUsers( def get_context_data(self, **kwargs): context = super(OrganizationUsers, self).get_context_data(**kwargs) - context["title"] = _("%s Members") % self.organization.name + context["title"] = _("%s Members") % self.object.name context["partial"] = True context["kick_url"] = reverse( - "organization_user_kick", - args=[self.organization.id, self.organization.slug], - ) - context["users"] = ranker( - context["users"], rank=self.paginate_by * (context["page_obj"].number - 1) + "organization_user_kick", args=[self.object.id, self.object.slug] ) + context["users"] = ranker( + self.get_object() + .members.filter(is_unlisted=False) + .order_by(self.order, "id") + .select_related("user") + .only( + "display_rank", + "user__username", + "points", + "rating", + "performance_points", + "problem_count", + ) + ) context["first_page_href"] = "." context["page_type"] = "users" context.update(self.get_sort_context()) @@ -452,12 +421,13 @@ class OrganizationProblems(LoginRequiredMixin, MemberOrganizationMixin, ProblemL class OrganizationContestMixin( LoginRequiredMixin, TitleMixin, - OrganizationHomeView, + OrganizationMixin, + OrganizationHomeViewContext, ): model = Contest def is_contest_editable(self, request, contest): - return contest.is_editable_by(request.user) or self.can_edit_organization( + return request.profile in contest.authors.all() or self.can_edit_organization( self.organization ) @@ -469,7 +439,6 @@ class OrganizationContests( def get_queryset(self): self.org_query = [self.organization_id] - self.hide_organization_contests = False return super().get_queryset() def set_editable_contest(self, contest): @@ -480,20 +449,21 @@ class OrganizationContests( def get_context_data(self, **kwargs): context = super(OrganizationContests, self).get_context_data(**kwargs) context["page_type"] = "contests" + context["hide_contest_orgs"] = True context.pop("organizations") + context["create_url"] = reverse( + "organization_contest_add", + args=[self.organization.id, self.organization.slug], + ) - if self.can_edit_organization(self.organization): - context["create_url"] = reverse( - "organization_contest_add", - args=[self.organization.id, self.organization.slug], - ) - - if self.current_tab == "active": - for participation in context["contests"]: - self.set_editable_contest(participation.contest) - else: - for contest in context["contests"]: - self.set_editable_contest(contest) + for participation in context["active_participations"]: + self.set_editable_contest(participation.contest) + for contest in context["past_contests"]: + self.set_editable_contest(contest) + for contest in context["current_contests"]: + self.set_editable_contest(contest) + for contest in context["future_contests"]: + self.set_editable_contest(contest) return context @@ -510,6 +480,13 @@ class OrganizationSubmissions( def contest(self): return None + def _get_queryset(self): + return ( + super() + ._get_entire_queryset() + .filter(contest_object__organizations=self.organization) + ) + def get_context_data(self, **kwargs): context = super(OrganizationSubmissions, self).get_context_data(**kwargs) # context["dynamic_update"] = context["page_obj"].number == 1 @@ -533,9 +510,6 @@ class OrganizationSubmissions( ), ) - def get_title(self): - return _("Submissions in") + f" {self.organization}" - class OrganizationMembershipChange( LoginRequiredMixin, OrganizationMixin, SingleObjectMixin, View @@ -639,7 +613,8 @@ class RequestJoinOrganization(LoginRequiredMixin, SingleObjectMixin, FormView): class OrganizationRequestDetail( LoginRequiredMixin, TitleMixin, - OrganizationHomeView, + OrganizationMixin, + OrganizationHomeViewContext, DetailView, ): model = OrganizationRequest @@ -664,9 +639,7 @@ OrganizationRequestFormSet = modelformset_factory( class OrganizationRequestBaseView( - AdminOrganizationMixin, - DetailView, - OrganizationHomeView, + OrganizationDetailView, TitleMixin, LoginRequiredMixin, SingleObjectTemplateResponseMixin, @@ -677,8 +650,20 @@ class OrganizationRequestBaseView( slug_url_kwarg = "key" tab = None + def get_object(self, queryset=None): + organization = super(OrganizationRequestBaseView, self).get_object(queryset) + if not ( + organization.admins.filter(id=self.request.profile.id).exists() + or organization.registrant_id == self.request.profile.id + ): + raise PermissionDenied() + return organization + def get_content_title(self): - return _("Manage join requests") + href = reverse("organization_home", args=[self.object.id, self.object.slug]) + return mark_safe( + f'Manage join requests for {self.object.name}' + ) def get_context_data(self, **kwargs): context = super(OrganizationRequestBaseView, self).get_context_data(**kwargs) @@ -775,7 +760,7 @@ class AddOrganizationMember( LoginRequiredMixin, TitleMixin, AdminOrganizationMixin, - OrganizationHomeView, + OrganizationDetailView, UpdateView, ): template_name = "organization/add-member.html" @@ -794,12 +779,8 @@ class AddOrganizationMember( def form_valid(self, form): new_users = form.cleaned_data["new_users"] self.object.members.add(*new_users) - link = reverse("organization_home", args=[self.object.id, self.object.slug]) - html = f'{self.object.name}' - make_notification(new_users, "Added to group", html, self.request.profile) - with revisions.create_revision(): - usernames = ", ".join([u.username for u in new_users]) - revisions.set_comment(_("Added members from site") + ": " + usernames) + with transaction.atomic(), revisions.create_revision(): + revisions.set_comment(_("Added members from site")) revisions.set_user(self.request.user) return super(AddOrganizationMember, self).form_valid(form) @@ -824,7 +805,7 @@ class KickUserWidgetView( status=400, ) - if not organization.is_member(user): + if not organization.members.filter(id=user.id).exists(): return generic_message( request, _("Can't kick user"), @@ -833,20 +814,7 @@ class KickUserWidgetView( status=400, ) - if organization.is_admin(user): - return generic_message( - request, - _("Can't kick user"), - _("The user you are trying to kick is an organization admin."), - status=400, - ) - - with revisions.create_revision(): - revisions.set_comment(_("Kicked member") + " " + user.username) - revisions.set_user(self.request.user) - organization.members.remove(user) - organization.save() - + organization.members.remove(user) return HttpResponseRedirect(organization.get_users_url()) @@ -854,7 +822,7 @@ class EditOrganization( LoginRequiredMixin, TitleMixin, AdminOrganizationMixin, - OrganizationHomeView, + OrganizationDetailView, UpdateView, ): template_name = "organization/edit.html" @@ -878,7 +846,7 @@ class EditOrganization( return form def form_valid(self, form): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): revisions.set_comment(_("Edited from site")) revisions.set_user(self.request.user) return super(EditOrganization, self).form_valid(form) @@ -910,7 +878,7 @@ class AddOrganization(LoginRequiredMixin, TitleMixin, CreateView): % settings.DMOJ_USER_MAX_ORGANIZATION_ADD, status=400, ) - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): revisions.set_comment(_("Added from site")) revisions.set_user(self.request.user) res = super(AddOrganization, self).form_valid(form) @@ -935,7 +903,7 @@ class AddOrganizationContest( return kwargs def form_valid(self, form): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): revisions.set_comment(_("Added from site")) revisions.set_user(self.request.user) @@ -992,24 +960,17 @@ class EditOrganizationContest( return res problem_formset = self.get_problem_formset(True) if problem_formset.is_valid(): - for problem_form in problem_formset: - if problem_form.cleaned_data.get("DELETE") and problem_form.instance.pk: - problem_form.instance.delete() - for problem_form in problem_formset.save(commit=False): if problem_form: problem_form.contest = self.contest problem_form.save() - + for problem_form in problem_formset.deleted_objects: + problem_form.delete() super().post(request, *args, **kwargs) return HttpResponseRedirect( reverse( - "organization_contest_edit", - args=( - self.organization_id, - self.organization.slug, - self.contest.key, - ), + "organization_contests", + args=(self.organization_id, self.organization.slug), ) ) @@ -1025,22 +986,19 @@ class EditOrganizationContest( def get_content_title(self): href = reverse("contest_view", args=[self.contest.key]) - return mark_safe(_("Edit") + f' {self.contest.key}') + return mark_safe(f'Edit {self.contest.key}') def get_object(self): return self.contest def form_valid(self, form): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): revisions.set_comment(_("Edited from site")) revisions.set_user(self.request.user) res = super(EditOrganizationContest, self).form_valid(form) self.object.organizations.add(self.organization) self.object.is_organization_private = True self.object.save() - - maybe_trigger_contest_rescore(form, self.object, True) - return res def get_problem_formset(self, post=False): @@ -1065,7 +1023,7 @@ class EditOrganizationContest( class AddOrganizationBlog( LoginRequiredMixin, TitleMixin, - OrganizationHomeView, + OrganizationHomeViewContext, MemberOrganizationMixin, CreateView, ): @@ -1082,7 +1040,7 @@ class AddOrganizationBlog( return _("Add blog for %s") % self.organization.name def form_valid(self, form): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): res = super(AddOrganizationBlog, self).form_valid(form) self.object.is_organization_private = True self.object.authors.add(self.request.profile) @@ -1100,22 +1058,24 @@ class AddOrganizationBlog( html = ( f'{self.object.title} - {self.organization.name}' ) - make_notification( - self.organization.admins.all(), "Add blog", html, self.request.profile - ) + for user in self.organization.admins.all(): + if user.id == self.request.profile.id: + continue + notification = Notification( + owner=user, + author=self.request.profile, + category="Add blog", + html_link=html, + ) + notification.save() return res - def get_success_url(self): - return reverse( - "organization_home", args=[self.organization.id, self.organization.slug] - ) - class EditOrganizationBlog( LoginRequiredMixin, TitleMixin, - OrganizationHomeView, - AdminOrganizationMixin, + OrganizationHomeViewContext, + MemberOrganizationMixin, UpdateView, ): template_name = "organization/blog/edit.html" @@ -1131,20 +1091,19 @@ class EditOrganizationBlog( self.blog_id = kwargs["blog_pk"] self.blog = BlogPost.objects.get(id=self.blog_id) if self.organization not in self.blog.organizations.all(): - raise Exception(_("This blog does not belong to this organization")) - if not self.request.profile.can_edit_organization(self.organization): - raise Exception(_("Not allowed to edit this blog")) - except Exception as e: + raise Exception("This blog does not belong to this organization") + if ( + self.request.profile not in self.blog.authors.all() + and not self.can_edit_organization(self.organization) + ): + raise Exception("Not allowed to edit this blog") + except: return generic_message( request, _("Permission denied"), - e, + _("Not allowed to edit this blog"), ) - def publish_blog(self, request, *args, **kwargs): - self.blog_id = kwargs["blog_pk"] - BlogPost.objects.filter(pk=self.blog_id).update(visible=True) - def delete_blog(self, request, *args, **kwargs): self.blog_id = kwargs["blog_pk"] BlogPost.objects.get(pk=self.blog_id).delete() @@ -1162,22 +1121,6 @@ class EditOrganizationBlog( if request.POST["action"] == "Delete": self.create_notification("Delete blog") self.delete_blog(request, *args, **kwargs) - cur_url = reverse( - "organization_home", - args=(self.organization_id, self.organization.slug), - ) - return HttpResponseRedirect(cur_url) - elif request.POST["action"] == "Reject": - self.create_notification("Reject blog") - self.delete_blog(request, *args, **kwargs) - cur_url = reverse( - "organization_pending_blogs", - args=(self.organization_id, self.organization.slug), - ) - return HttpResponseRedirect(cur_url) - elif request.POST["action"] == "Approve": - self.create_notification("Approve blog") - self.publish_blog(request, *args, **kwargs) cur_url = reverse( "organization_pending_blogs", args=(self.organization_id, self.organization.slug), @@ -1199,28 +1142,33 @@ class EditOrganizationBlog( args=[self.organization.id, self.organization.slug, self.blog_id], ) html = f'{blog.title} - {self.organization.name}' - to_users = (self.organization.admins.all() | blog.get_authors()).distinct() - make_notification(to_users, action, html, self.request.profile) + post_authors = blog.authors.all() + posible_user = self.organization.admins.all() | post_authors + for user in posible_user: + if user.id == self.request.profile.id: + continue + notification = Notification( + owner=user, + author=self.request.profile, + category=action, + html_link=html, + ) + notification.save() def form_valid(self, form): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): res = super(EditOrganizationBlog, self).form_valid(form) revisions.set_comment(_("Edited from site")) revisions.set_user(self.request.user) self.create_notification("Edit blog") return res - def get_success_url(self): - return reverse( - "organization_home", args=[self.organization.id, self.organization.slug] - ) - class PendingBlogs( LoginRequiredMixin, TitleMixin, MemberOrganizationMixin, - OrganizationHomeView, + OrganizationHomeViewContext, ListView, ): model = BlogPost @@ -1237,8 +1185,3 @@ class PendingBlogs( def get_title(self): return _("Pending blogs in %s") % self.organization.name - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context["org"] = self.organization - return context diff --git a/judge/views/pagevote.py b/judge/views/pagevote.py index a24680c..e01f664 100644 --- a/judge/views/pagevote.py +++ b/judge/views/pagevote.py @@ -8,13 +8,13 @@ from django.http import ( HttpResponseForbidden, ) from django.utils.translation import gettext as _ +from judge.models.pagevote import PageVote, PageVoteVoter from django.views.generic.base import TemplateResponseMixin from django.views.generic.detail import SingleObjectMixin -from django.views.generic import View, ListView -from django_ratelimit.decorators import ratelimit -from django.conf import settings -from judge.models.pagevote import PageVote, PageVoteVoter, dirty_pagevote +from judge.dblock import LockModel +from django.views.generic import View, ListView + __all__ = [ "upvote_page", @@ -24,7 +24,6 @@ __all__ = [ ] -@ratelimit(key="user", rate=settings.RL_VOTE) @login_required def vote_page(request, delta): if abs(delta) != 1: @@ -53,33 +52,34 @@ def vote_page(request, delta): pagevote_id = int(request.POST["id"]) except ValueError: return HttpResponseBadRequest() - - try: - pagevote = PageVote.objects.get(id=pagevote_id) - except PageVote.DoesNotExist: - raise Http404() + else: + if not PageVote.objects.filter(id=pagevote_id).exists(): + raise Http404() vote = PageVoteVoter() vote.pagevote_id = pagevote_id vote.voter = request.profile vote.score = delta - try: - vote.save() - except IntegrityError: + while True: try: - vote = PageVoteVoter.objects.get( - pagevote_id=pagevote_id, voter=request.profile + vote.save() + except IntegrityError: + with LockModel(write=(PageVoteVoter,)): + try: + vote = PageVoteVoter.objects.get( + pagevote_id=pagevote_id, voter=request.profile + ) + except PageVoteVoter.DoesNotExist: + # We must continue racing in case this is exploited to manipulate votes. + continue + vote.delete() + PageVote.objects.filter(id=pagevote_id).update( + score=F("score") - vote.score ) - except PageVoteVoter.DoesNotExist: - raise Http404() - vote.delete() - PageVote.objects.filter(id=pagevote_id).update(score=F("score") - vote.score) - else: - PageVote.objects.filter(id=pagevote_id).update(score=F("score") + delta) - - dirty_pagevote(pagevote, request.profile) - + else: + PageVote.objects.filter(id=pagevote_id).update(score=F("score") + delta) + break return HttpResponse("success", content_type="text/plain") @@ -101,5 +101,16 @@ class PageVoteDetailView(TemplateResponseMixin, SingleObjectMixin, View): def get_context_data(self, **kwargs): context = super(PageVoteDetailView, self).get_context_data(**kwargs) - context["pagevote"] = self.object.get_or_create_pagevote() + queryset = PageVote.objects.get_or_create(page=self.get_comment_page()) + context["pagevote"] = queryset[0] + return context + + +class PageVoteListView: + def add_pagevote_context_data(self, context, obj_list="object_list"): + for item in context[obj_list]: + pagevote, _ = PageVote.objects.get_or_create( + page=self.get_comment_page(item) + ) + setattr(item, "pagevote", pagevote) return context diff --git a/judge/views/problem.py b/judge/views/problem.py index ad57692..c54b7dd 100644 --- a/judge/views/problem.py +++ b/judge/views/problem.py @@ -1,11 +1,12 @@ import logging import os import shutil +from datetime import timedelta, datetime from operator import itemgetter from random import randrange +import random from copy import deepcopy -from django.core.cache import cache from django.conf import settings from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import PermissionRequiredMixin @@ -22,7 +23,6 @@ from django.db.models import ( Q, When, IntegerField, - Sum, ) from django.db.models.functions import Coalesce from django.db.utils import ProgrammingError @@ -45,7 +45,7 @@ from django.views.generic import ListView, View from django.views.generic.base import TemplateResponseMixin from django.views.generic.detail import SingleObjectMixin -from judge.views.comment import CommentedDetailView +from judge.comments import CommentedDetailView from judge.forms import ProblemCloneForm, ProblemSubmitForm, ProblemPointsVoteForm from judge.models import ( ContestProblem, @@ -63,9 +63,9 @@ from judge.models import ( Submission, SubmissionSource, Organization, + VolunteerProblemVote, Profile, LanguageTemplate, - Contest, ) from judge.pdf_problems import DefaultPdfMaker, HAS_PDF from judge.utils.diggpaginator import DiggPaginator @@ -77,8 +77,6 @@ from judge.utils.problems import ( user_attempted_ids, user_completed_ids, get_related_problems, - get_user_recommended_problems, - RecommendationType, ) from judge.utils.strings import safe_float_or_none, safe_int_or_none from judge.utils.tickets import own_ticket_filter @@ -89,9 +87,8 @@ from judge.utils.views import ( generic_message, ) from judge.ml.collab_filter import CollabFilter -from judge.views.pagevote import PageVoteDetailView -from judge.views.bookmark import BookMarkDetailView -from judge.views.feed import FeedView +from judge.views.pagevote import PageVoteDetailView, PageVoteListView +from judge.views.bookmark import BookMarkDetailView, BookMarkListView def get_contest_problem(problem, profile): @@ -196,36 +193,36 @@ class ProblemSolution( PageVoteDetailView, BookMarkDetailView, ): - context_object_name = "solution" + context_object_name = "problem" template_name = "problem/editorial.html" def get_title(self): - return _("Editorial for {0}").format(self.problem.name) + return _("Editorial for {0}").format(self.object.name) def get_content_title(self): return format_html( _('Editorial for {0}'), - self.problem.name, - reverse("problem_detail", args=[self.problem.code]), + self.object.name, + reverse("problem_detail", args=[self.object.code]), ) - def get_object(self): - self.problem = super().get_object() - solution = get_object_or_404(Solution, problem=self.problem) - return solution - def get_context_data(self, **kwargs): context = super(ProblemSolution, self).get_context_data(**kwargs) - solution = self.get_object() + + solution = get_object_or_404(Solution, problem=self.object) + if ( not solution.is_public or solution.publish_on > timezone.now() ) and not self.request.user.has_perm("judge.see_private_solution"): raise Http404() - context["problem"] = self.problem - context["has_solved_problem"] = self.problem.id in self.get_completed_problems() + context["solution"] = solution + context["has_solved_problem"] = self.object.id in self.get_completed_problems() return context + def get_comment_page(self): + return "s:" + self.object.code + class ProblemRaw( ProblemMixin, TitleMixin, TemplateResponseMixin, SingleObjectMixin, View @@ -269,6 +266,9 @@ class ProblemDetail( context_object_name = "problem" template_name = "problem/problem.html" + def get_comment_page(self): + return "p:%s" % self.object.code + def get_context_data(self, **kwargs): context = super(ProblemDetail, self).get_context_data(**kwargs) user = self.request.user @@ -353,7 +353,7 @@ class ProblemDetail( else: context["fileio_input"] = None context["fileio_output"] = None - if not self.in_contest and settings.ML_OUTPUT_PATH: + if not self.in_contest: context["related_problems"] = get_related_problems( self.profile, self.object ) @@ -401,13 +401,16 @@ class ProblemPdfView(ProblemMixin, SingleObjectMixin, View): if trans is None else trans.description, "url": request.build_absolute_uri(), + "math_engine": maker.math_engine, } ) .replace('"//', '"https://') .replace("'//", "'https://") ) maker.title = problem_name - assets = ["style.css"] + assets = ["style.css", "pygment-github.css"] + if maker.math_engine == "jax": + assets.append("mathjax3_config.js") for file in assets: maker.load(file, os.path.join(settings.DMOJ_RESOURCES, file)) maker.make() @@ -445,7 +448,7 @@ class ProblemPdfDescriptionView(ProblemMixin, SingleObjectMixin, View): raise Http404() response = HttpResponse() # if request.META.get("SERVER_SOFTWARE", "").startswith("nginx/"): - # response["X-Accel-Redirect"] = problem.pdf_description.path + # response["X-Accel-Redirect"] = problem.pdf_description.path # else: with open(problem.pdf_description.path, "rb") as f: response.content = f.read() @@ -465,14 +468,10 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView manual_sort = frozenset(("name", "group", "solved", "type")) all_sorts = sql_sort | manual_sort default_desc = frozenset(("date", "points", "ac_rate", "user_count")) + default_sort = "-date" first_page_href = None filter_organization = False - def get_default_sort_order(self, request): - if "search" in request.GET and settings.ENABLE_FTS: - return "-relevance" - return "-date" - def get_paginator( self, queryset, per_page, orphans=0, allow_empty_first_page=True, **kwargs ): @@ -483,51 +482,50 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView padding=2, orphans=orphans, allow_empty_first_page=allow_empty_first_page, - count=queryset.values("pk").count() if not self.in_contest else None, - **kwargs, + **kwargs ) if not self.in_contest: + # Get the number of pages and then add in this magic. + # noinspection PyStatementEffect + paginator.num_pages + queryset = queryset.add_i18n_name(self.request.LANGUAGE_CODE) - queryset = self.sort_queryset(queryset) + sort_key = self.order.lstrip("-") + if sort_key in self.sql_sort: + queryset = queryset.order_by(self.order) + elif sort_key == "name": + queryset = queryset.order_by(self.order.replace("name", "i18n_name")) + elif sort_key == "group": + queryset = queryset.order_by(self.order + "__name") + elif sort_key == "solved": + if self.request.user.is_authenticated: + profile = self.request.profile + solved = user_completed_ids(profile) + attempted = user_attempted_ids(profile) + + def _solved_sort_order(problem): + if problem.id in solved: + return 1 + if problem.id in attempted: + return 0 + return -1 + + queryset = list(queryset) + queryset.sort( + key=_solved_sort_order, reverse=self.order.startswith("-") + ) + elif sort_key == "type": + if self.show_types: + queryset = list(queryset) + queryset.sort( + key=lambda problem: problem.types_list[0] + if problem.types_list + else "", + reverse=self.order.startswith("-"), + ) paginator.object_list = queryset return paginator - def sort_queryset(self, queryset): - sort_key = self.order.lstrip("-") - if sort_key in self.sql_sort: - queryset = queryset.order_by(self.order) - elif sort_key == "name": - queryset = queryset.order_by(self.order.replace("name", "i18n_name")) - elif sort_key == "group": - queryset = queryset.order_by(self.order + "__name") - elif sort_key == "solved": - if self.request.user.is_authenticated: - profile = self.request.profile - solved = user_completed_ids(profile) - attempted = user_attempted_ids(profile) - - def _solved_sort_order(problem): - if problem.id in solved: - return 1 - if problem.id in attempted: - return 0 - return -1 - - queryset = list(queryset) - queryset.sort( - key=_solved_sort_order, reverse=self.order.startswith("-") - ) - elif sort_key == "type": - if self.show_types: - queryset = list(queryset) - queryset.sort( - key=lambda problem: problem.types_list[0] - if problem.types_list - else "", - reverse=self.order.startswith("-"), - ) - return queryset - @cached_property def profile(self): if not self.request.user.is_authenticated: @@ -589,7 +587,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView i for i in query if i in self.profile.organizations.values_list("id", flat=True) - ][:3] + ] def get_normal_queryset(self): queryset = Problem.get_visible_problems(self.request.user) @@ -601,14 +599,9 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView self.org_query = [self.request.organization.id] if self.org_query: self.org_query = self.get_org_query(self.org_query) - contest_problems = ( - Contest.objects.filter(organizations__in=self.org_query) - .select_related("problems") - .values_list("contest_problems__problem__id") - .distinct() - ) queryset = queryset.filter( - Q(organizations__in=self.org_query) | Q(id__in=contest_problems) + Q(organizations__in=self.org_query) + | Q(contests__contest__organizations__in=self.org_query) ) if self.author_query: queryset = queryset.filter(authors__in=self.author_query) @@ -623,38 +616,36 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView self.request.GET.getlist("search") ).strip() if query: - substr_queryset = queryset.filter( - Q(code__icontains=query) - | Q(name__icontains=query) - | Q( - translations__name__icontains=query, - translations__language=self.request.LANGUAGE_CODE, - ) - ) - if settings.ENABLE_FTS: - queryset = ( - queryset.search(query, queryset.BOOLEAN).extra( - order_by=["-relevance"] - ) - | substr_queryset + if settings.ENABLE_FTS and self.full_text: + queryset = queryset.search(query, queryset.BOOLEAN).extra( + order_by=["-relevance"] ) else: - queryset = substr_queryset + queryset = queryset.filter( + Q(code__icontains=query) + | Q(name__icontains=query) + | Q( + translations__name__icontains=query, + translations__language=self.request.LANGUAGE_CODE, + ) + ) self.prepoint_queryset = queryset if self.point_start is not None: queryset = queryset.filter(points__gte=self.point_start) if self.point_end is not None: queryset = queryset.filter(points__lte=self.point_end) - queryset = queryset.annotate( - has_public_editorial=Sum( - Case( - When(solution__is_public=True, then=1), - default=0, - output_field=IntegerField(), - ) + has_public_editorial=Case( + When( + solution__is_public=True, + solution__publish_on__lte=timezone.now(), + then=True, + ), + default=False, + output_field=BooleanField(), ) ) + return queryset.distinct() def get_queryset(self): @@ -672,12 +663,15 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView context["show_types"] = 0 if self.in_contest else int(self.show_types) context["full_text"] = 0 if self.in_contest else int(self.full_text) context["show_editorial"] = 0 if self.in_contest else int(self.show_editorial) + context["have_editorial"] = 0 if self.in_contest else int(self.have_editorial) context["show_solved_only"] = ( 0 if self.in_contest else int(self.show_solved_only) ) if self.request.profile: context["organizations"] = self.request.profile.organizations.all() + all_authors_ids = set(Problem.objects.values_list("authors", flat=True)) + context["all_authors"] = Profile.objects.filter(id__in=all_authors_ids) context["category"] = self.category context["categories"] = ProblemGroup.objects.all() if self.show_types: @@ -685,7 +679,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView context["problem_types"] = ProblemType.objects.all() context["has_fts"] = settings.ENABLE_FTS context["org_query"] = self.org_query - context["author_query"] = Profile.objects.filter(id__in=self.author_query) + context["author_query"] = self.author_query context["search_query"] = self.search_query context["completed_problem_ids"] = self.get_completed_problems() context["attempted_problems"] = self.get_attempted_problems() @@ -766,7 +760,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView ) def GET_with_session(self, request, key): - if not request.GET.get(key): + if not request.GET: return request.session.get(key, False) return request.GET.get(key, None) == "1" @@ -775,6 +769,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView self.show_types = self.GET_with_session(request, "show_types") self.full_text = self.GET_with_session(request, "full_text") self.show_editorial = self.GET_with_session(request, "show_editorial") + self.have_editorial = self.GET_with_session(request, "have_editorial") self.show_solved_only = self.GET_with_session(request, "show_solved_only") self.search_query = None @@ -822,6 +817,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView "show_types", "full_text", "show_editorial", + "have_editorial", "show_solved_only", ) for key in to_update: @@ -833,43 +829,53 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView return HttpResponseRedirect(request.get_full_path()) -class ProblemFeed(ProblemList, FeedView): +class ProblemFeed(ProblemList, PageVoteListView, BookMarkListView): model = Problem context_object_name = "problems" template_name = "problem/feed.html" - feed_content_template_name = "problem/feed/items.html" - paginate_by = 4 + paginate_by = 20 title = _("Problem feed") feed_type = None - def get_recommended_problem_ids(self, queryset): - user_id = self.request.profile.id - problem_ids = queryset.values_list("id", flat=True) - rec_types = [ - RecommendationType.CF_DOT, - RecommendationType.CF_COSINE, - RecommendationType.CF_TIME_DOT, - RecommendationType.CF_TIME_COSINE, - RecommendationType.HOT_PROBLEM, - ] - limits = [100, 100, 100, 100, 20] - shuffle = True + def GET_with_session(self, request, key): + if not request.GET: + return request.session.get(key, key == "hide_solved") + return request.GET.get(key, None) == "1" - allow_debug_type = ( - self.request.user.is_impersonate or self.request.user.is_superuser + def get_paginator( + self, queryset, per_page, orphans=0, allow_empty_first_page=True, **kwargs + ): + return DiggPaginator( + queryset, + per_page, + body=6, + padding=2, + orphans=orphans, + allow_empty_first_page=allow_empty_first_page, + **kwargs ) - if allow_debug_type and "debug_type" in self.request.GET: - try: - debug_type = int(self.request.GET.get("debug_type")) - except ValueError: - raise Http404() - rec_types = [debug_type] - limits = [100] - shuffle = False - return get_user_recommended_problems( - user_id, problem_ids, rec_types, limits, shuffle - ) + def get_comment_page(self, problem): + return "p:%s" % problem.code + + # arr = [[], [], ..] + def merge_recommendation(self, arr): + seed = datetime.now().strftime("%d%m%Y") + merged_array = [] + for a in arr: + merged_array += a + random.Random(seed).shuffle(merged_array) + + res = [] + used_pid = set() + + for obj in merged_array: + if type(obj) == tuple: + obj = obj[1] + if obj not in used_pid: + res.append(obj) + used_pid.add(obj) + return res def get_queryset(self): if self.feed_type == "volunteer": @@ -877,6 +883,9 @@ class ProblemFeed(ProblemList, FeedView): self.show_types = 1 queryset = super(ProblemFeed, self).get_queryset() + if self.have_editorial: + queryset = queryset.filter(has_public_editorial=1) + user = self.request.profile if self.feed_type == "new": @@ -898,13 +907,43 @@ class ProblemFeed(ProblemList, FeedView): .order_by("?") .add_i18n_name(self.request.LANGUAGE_CODE) ) - if "search" in self.request.GET: - return queryset.add_i18n_name(self.request.LANGUAGE_CODE) if not settings.ML_OUTPUT_PATH or not user: return queryset.order_by("?").add_i18n_name(self.request.LANGUAGE_CODE) - q = self.get_recommended_problem_ids(queryset) + cf_model = CollabFilter("collab_filter") + cf_time_model = CollabFilter("collab_filter_time") + queryset = queryset.values_list("id", flat=True) + hot_problems_recommendations = [ + problem.id + for problem in hot_problems(timedelta(days=7), 20) + if problem.id in set(queryset) + ] + + q = self.merge_recommendation( + [ + cf_model.user_recommendations(user, queryset, cf_model.DOT, 100), + cf_model.user_recommendations( + user, + queryset, + cf_model.COSINE, + 100, + ), + cf_time_model.user_recommendations( + user, + queryset, + cf_time_model.COSINE, + 100, + ), + cf_time_model.user_recommendations( + user, + queryset, + cf_time_model.DOT, + 100, + ), + hot_problems_recommendations, + ] + ) queryset = Problem.objects.filter(id__in=q) queryset = queryset.add_i18n_name(self.request.LANGUAGE_CODE) @@ -915,19 +954,15 @@ class ProblemFeed(ProblemList, FeedView): res[position_in_q[problem.id]] = problem return res - def get_feed_context(self, object_list): - return { - "completed_problem_ids": self.get_completed_problems(), - "attempted_problems": self.get_attempted_problems(), - "show_types": self.show_types, - } - def get_context_data(self, **kwargs): context = super(ProblemFeed, self).get_context_data(**kwargs) context["page_type"] = "feed" context["title"] = self.title context["feed_type"] = self.feed_type context["has_show_editorial_option"] = False + context["has_have_editorial_option"] = False + context = self.add_pagevote_context_data(context) + context = self.add_bookmark_context_data(context) return context @@ -960,12 +995,6 @@ class LanguageTemplateAjax(View): class RandomProblem(ProblemList): def get(self, request, *args, **kwargs): self.setup_problem_list(request) - - try: - return super().get(request, *args, **kwargs) - except ProgrammingError as e: - return generic_message(request, "FTS syntax error", e.args[1], status=400) - if self.in_contest: raise Http404() @@ -986,15 +1015,6 @@ class RandomProblem(ProblemList): user_logger = logging.getLogger("judge.user") -def last_nth_submitted_date_in_contest(profile, contest, n): - submissions = Submission.objects.filter( - user=profile, contest_object=contest - ).order_by("-id")[:n] - if submissions.count() >= n: - return submissions[n - 1].date - return None - - @login_required def problem_submit(request, problem, submission=None): if ( @@ -1028,11 +1048,8 @@ def problem_submit(request, problem, submission=None): if request.method == "POST": form = ProblemSubmitForm( request.POST, - request.FILES, judge_choices=judge_choices, instance=Submission(user=profile, problem=problem), - request=request, - problem=problem, ) if form.is_valid(): if ( @@ -1043,7 +1060,7 @@ def problem_submit(request, problem, submission=None): >= settings.DMOJ_SUBMISSION_LIMIT ): return HttpResponse( - _("

You have submitted too many submissions.

"), status=429 + "

You submitted too many submissions.

", status=429 ) if not problem.allowed_languages.filter( id=form.cleaned_data["language"].id @@ -1064,22 +1081,7 @@ def problem_submit(request, problem, submission=None): with transaction.atomic(): if profile.current_contest is not None: - contest = profile.current_contest.contest contest_id = profile.current_contest.contest_id - rate_limit = contest.rate_limit - - if rate_limit: - t = last_nth_submitted_date_in_contest( - profile, contest, rate_limit - ) - if t is not None and timezone.now() - t < timezone.timedelta( - minutes=1 - ): - return HttpResponse( - _("

You have submitted too many submissions.

"), - status=429, - ) - try: contest_problem = problem.contests.get(contest_id=contest_id) except ContestProblem.DoesNotExist: @@ -1159,11 +1161,11 @@ def problem_submit(request, problem, submission=None): default_lang = request.profile.language submission_limit = submissions_left = None - next_valid_submit_time = None if profile.current_contest is not None: - contest = profile.current_contest.contest try: - submission_limit = problem.contests.get(contest=contest).max_submissions + submission_limit = problem.contests.get( + contest=profile.current_contest.contest + ).max_submissions except ContestProblem.DoesNotExist: pass else: @@ -1171,12 +1173,6 @@ def problem_submit(request, problem, submission=None): submissions_left = submission_limit - get_contest_submission_count( problem, profile, profile.current_contest.virtual ) - if contest.rate_limit: - t = last_nth_submitted_date_in_contest(profile, contest, contest.rate_limit) - if t is not None: - next_valid_submit_time = t + timezone.timedelta(minutes=1) - next_valid_submit_time = next_valid_submit_time.isoformat() - return render( request, "problem/submit.html", @@ -1203,10 +1199,6 @@ def problem_submit(request, problem, submission=None): "ACE_URL": settings.ACE_URL, "default_lang": default_lang, "problem_id": problem.id, - "output_only": problem.data_files.output_only - if hasattr(problem, "data_files") - else False, - "next_valid_submit_time": next_valid_submit_time, }, ) @@ -1231,7 +1223,7 @@ class ProblemClone( problem.ac_rate = 0 problem.user_count = 0 problem.code = form.cleaned_data["code"] - problem.save(should_move_data=False) + problem.save() problem.authors.add(self.request.profile) problem.allowed_languages.set(languages) problem.language_limits.set(language_limits) diff --git a/judge/views/problem_data.py b/judge/views/problem_data.py index 006a304..7472d52 100644 --- a/judge/views/problem_data.py +++ b/judge/views/problem_data.py @@ -27,7 +27,6 @@ from django.forms import ( formset_factory, FileInput, TextInput, - CheckboxInput, ) from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import get_object_or_404, render @@ -56,7 +55,6 @@ from judge.utils.fine_uploader import ( FineUploadForm, ) from judge.views.problem import ProblemMixin -from judge.logging import log_exception mimetypes.init() mimetypes.add_type("application/x-yaml", ".yml") @@ -89,14 +87,10 @@ class ProblemDataForm(ModelForm): "checker", "checker_args", "custom_checker", - "custom_checker_cpp", + "custom_validator", "interactive_judge", "fileio_input", "fileio_output", - "output_only", - "use_ioi_signature", - "signature_handler", - "signature_header", ] widgets = { "zipfile": FineUploadFileInput, @@ -106,8 +100,6 @@ class ProblemDataForm(ModelForm): "output_prefix": HiddenInput, "fileio_input": TextInput, "fileio_output": TextInput, - "output_only": CheckboxInput, - "use_ioi_signature": CheckboxInput, } @@ -250,9 +242,6 @@ class ProblemDataView(TitleMixin, ProblemManagerMixin): return ZipFile(data.zipfile.path).namelist() except BadZipfile: return [] - except FileNotFoundError as e: - log_exception(e) - return [] return [] def get_context_data(self, **kwargs): @@ -344,7 +333,7 @@ def problem_init_view(request, problem): "problem/yaml.html", { "raw_source": data, - "highlighted_source": highlight_code(data, "yaml", linenos=True), + "highlighted_source": highlight_code(data, "yaml", linenos=False), "title": _("Generated init.yml for %s") % problem.name, "content_title": mark_safe( escape(_("Generated init.yml for %s")) diff --git a/judge/views/problem_manage.py b/judge/views/problem_manage.py index dfce739..5dd0aef 100644 --- a/judge/views/problem_manage.py +++ b/judge/views/problem_manage.py @@ -78,13 +78,6 @@ class ManageProblemSubmissionView(TitleMixin, ManageProblemSubmissionMixin, Deta ) ] context["results"] = sorted(map(itemgetter(0), Submission.RESULT)) - context["current_contest"] = None - if ( - self.request.in_contest_mode - and self.object in self.request.participation.contest.problems.all() - ): - context["current_contest"] = self.request.participation.contest - return context @@ -106,21 +99,21 @@ class BaseActionSubmissionsView( try: languages = list(map(int, self.request.POST.getlist("language"))) - results = list(map(str, self.request.POST.getlist("result"))) - contests = list(map(int, self.request.POST.getlist("contest"))) except ValueError: return HttpResponseBadRequest() - return self.generate_response(id_range, languages, results, contests) + return self.generate_response( + id_range, languages, self.request.POST.getlist("result") + ) - def generate_response(self, id_range, languages, results, contest): + def generate_response(self, id_range, languages, results): raise NotImplementedError() class ActionSubmissionsView(BaseActionSubmissionsView): - def rejudge_response(self, id_range, languages, results, contest): + def rejudge_response(self, id_range, languages, results): status = rejudge_problem_filter.delay( - self.object.id, id_range, languages, results, contest + self.object.id, id_range, languages, results ) return redirect_to_task_status( status, @@ -131,11 +124,12 @@ class ActionSubmissionsView(BaseActionSubmissionsView): ), ) - def download_response(self, id_range, languages, results, contest): + def download_response(self, id_range, languages, results): + if not self.request.user.is_superuser: + raise Http404 + queryset = Submission.objects.filter(problem_id=self.object.id) - submissions = apply_submission_filter( - queryset, id_range, languages, results, contest - ) + submissions = apply_submission_filter(queryset, id_range, languages, results) with tempfile.SpooledTemporaryFile() as tmp: with zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) as archive: @@ -161,20 +155,20 @@ class ActionSubmissionsView(BaseActionSubmissionsView): ) return response - def generate_response(self, id_range, languages, results, contest): + def generate_response(self, id_range, languages, results): action = self.request.POST.get("action") if action == "rejudge": - return self.rejudge_response(id_range, languages, results, contest) + return self.rejudge_response(id_range, languages, results) elif action == "download": - return self.download_response(id_range, languages, results, contest) + return self.download_response(id_range, languages, results) else: return Http404() class PreviewActionSubmissionsView(BaseActionSubmissionsView): - def generate_response(self, id_range, languages, results, contest): + def generate_response(self, id_range, languages, results): queryset = apply_submission_filter( - self.object.submission_set.all(), id_range, languages, results, contest + self.object.submission_set.all(), id_range, languages, results ) return HttpResponse(str(queryset.count())) diff --git a/judge/views/ranked_submission.py b/judge/views/ranked_submission.py index fcf13f2..a0180b3 100644 --- a/judge/views/ranked_submission.py +++ b/judge/views/ranked_submission.py @@ -7,7 +7,7 @@ from judge.utils.problems import get_result_data from judge.utils.raw_sql import join_sql_subquery from judge.views.submission import ForceContestMixin, ProblemSubmissions -__all__ = ["RankedSubmissions"] +__all__ = ["RankedSubmissions", "ContestRankedSubmission"] class RankedSubmissions(ProblemSubmissions): @@ -17,16 +17,17 @@ class RankedSubmissions(ProblemSubmissions): def get_queryset(self): if self.in_contest: - contest_join = "INNER JOIN judge_contestsubmission AS cs ON (sub.id = cs.submission_id)" + contest_join = """INNER JOIN judge_contestsubmission AS cs ON (sub.id = cs.submission_id) + INNER JOIN judge_contestparticipation AS cp ON (cs.participation_id = cp.id)""" points = "cs.points" - constraint = " AND sub.contest_object_id = %s" + constraint = "AND cp.contest_id = %s" else: contest_join = "" points = "sub.points" constraint = "" queryset = ( super(RankedSubmissions, self) - .get_queryset() + ._get_queryset() .filter(user__is_unlisted=False) ) join_sql_subquery( @@ -45,8 +46,8 @@ class RankedSubmissions(ProblemSubmissions): GROUP BY sub.user_id, {points} ) AS fastest ON (highscore.uid = fastest.uid AND highscore.points = fastest.points) STRAIGHT_JOIN judge_submission AS sub - ON (sub.user_id = fastest.uid AND sub.time = fastest.time) - WHERE sub.problem_id = %s {constraint} + ON (sub.user_id = fastest.uid AND sub.time = fastest.time) {contest_join} + WHERE sub.problem_id = %s AND {points} > 0 {constraint} GROUP BY sub.user_id """.format( points=points, contest_join=contest_join, constraint=constraint @@ -75,4 +76,43 @@ class RankedSubmissions(ProblemSubmissions): ) def _get_result_data(self): - return get_result_data(super(RankedSubmissions, self).get_queryset().order_by()) + return get_result_data( + super(RankedSubmissions, self)._get_queryset().order_by() + ) + + +class ContestRankedSubmission(ForceContestMixin, RankedSubmissions): + def get_title(self): + if self.problem.is_accessible_by(self.request.user): + return _("Best solutions for %(problem)s in %(contest)s") % { + "problem": self.problem_name, + "contest": self.contest.name, + } + return _("Best solutions for problem %(number)s in %(contest)s") % { + "number": self.get_problem_number(self.problem), + "contest": self.contest.name, + } + + def get_content_title(self): + if self.problem.is_accessible_by(self.request.user): + return format_html( + _('Best solutions for {0} in {2}'), + self.problem_name, + reverse("problem_detail", args=[self.problem.code]), + self.contest.name, + reverse("contest_view", args=[self.contest.key]), + ) + return format_html( + _('Best solutions for problem {0} in {1}'), + self.get_problem_number(self.problem), + self.contest.name, + reverse("contest_view", args=[self.contest.key]), + ) + + def _get_result_data(self): + return get_result_data( + Submission.objects.filter( + problem_id=self.problem.id, + contest__participation__contest_id=self.contest.id, + ) + ) diff --git a/judge/views/register.py b/judge/views/register.py index 58d1d6f..76e8267 100644 --- a/judge/views/register.py +++ b/judge/views/register.py @@ -15,7 +15,7 @@ from registration.backends.default.views import ( from registration.forms import RegistrationForm from sortedm2m.forms import SortedMultipleChoiceField -from judge.models import Language, Profile, TIMEZONE +from judge.models import Language, Organization, Profile, TIMEZONE from judge.utils.recaptcha import ReCaptchaField, ReCaptchaWidget from judge.widgets import Select2MultipleWidget, Select2Widget @@ -43,10 +43,29 @@ class CustomRegistrationForm(RegistrationForm): empty_label=None, widget=Select2Widget(attrs={"style": "width:100%"}), ) + organizations = SortedMultipleChoiceField( + queryset=Organization.objects.filter(is_open=True), + label=_("Groups"), + required=False, + widget=Select2MultipleWidget(attrs={"style": "width:100%"}), + ) if ReCaptchaField is not None: captcha = ReCaptchaField(widget=ReCaptchaWidget()) + def clean_organizations(self): + organizations = self.cleaned_data.get("organizations") or [] + max_orgs = settings.DMOJ_USER_MAX_ORGANIZATION_COUNT + + if sum(org.is_open for org in organizations) > max_orgs: + raise forms.ValidationError( + _("You may not be part of more than {count} public groups.").format( + count=max_orgs + ) + ) + + return self.cleaned_data["organizations"] + def clean_email(self): if User.objects.filter(email=self.cleaned_data["email"]).exists(): raise forms.ValidationError( @@ -97,6 +116,7 @@ class RegistrationView(OldRegistrationView): cleaned_data = form.cleaned_data profile.timezone = cleaned_data["timezone"] profile.language = cleaned_data["language"] + profile.organizations.add(*cleaned_data["organizations"]) profile.save() return user diff --git a/judge/views/resolver.py b/judge/views/resolver.py index 84e5dff..2085194 100644 --- a/judge/views/resolver.py +++ b/judge/views/resolver.py @@ -1,6 +1,6 @@ from django.views.generic import TemplateView from django.utils.translation import gettext as _ -from django.http import HttpResponseForbidden, JsonResponse +from django.http import HttpResponseForbidden from judge.models import Contest from django.utils.safestring import mark_safe @@ -21,7 +21,7 @@ class Resolver(TemplateView): hidden_subtasks = self.contest.format.get_hidden_subtasks() num_problems = len(problems) problem_sub = [0] * num_problems - sub_frozen = [[] for _ in range(num_problems)] + sub_frozen = [0] * num_problems problems_json = {str(i): {} for i in range(1, num_problems + 1)} users = {} @@ -31,9 +31,10 @@ class Resolver(TemplateView): for participation in self.contest.users.filter(virtual=0): cnt_user += 1 users[str(cnt_user)] = { - "username": participation.user.username, - "name": participation.user.first_name or participation.user.username, - "school": participation.user.last_name, + "username": participation.user.user.username, + "name": participation.user.user.first_name + or participation.user.user.username, + "school": participation.user.user.last_name, "last_submission": participation.cumtime_final, "problems": {}, } @@ -46,7 +47,6 @@ class Resolver(TemplateView): subtask, sub_id, ) in self.contest.format.get_results_by_subtask(participation, True): - subtask = subtask or 1 problem_id = str(problem_id) order = id_to_order[problem_id] problem_sub[order - 1] = max(problem_sub[order - 1], subtask) @@ -69,7 +69,6 @@ class Resolver(TemplateView): subtask, sub_id, ) in self.contest.format.get_results_by_subtask(participation, True): - subtask = subtask or 1 problem_id = str(problem_id) order = id_to_order[problem_id] points_map[(order, subtask)] = subtask_points @@ -87,7 +86,6 @@ class Resolver(TemplateView): subtask, sub_id, ) in self.contest.format.get_results_by_subtask(participation, False): - subtask = subtask or 1 problem_id = str(problem_id) order = id_to_order[problem_id] frozen_points_map[(order, subtask)] = subtask_points @@ -126,8 +124,10 @@ class Resolver(TemplateView): for i in hidden_subtasks: order = id_to_order[i] - sub_frozen[order - 1] = list(hidden_subtasks[i]) - + if hidden_subtasks[i]: + sub_frozen[order - 1] = min(hidden_subtasks[i]) + else: + sub_frozen[order - 1] = problem_sub[order - 1] + 1 return { "problem_sub": problem_sub, "sub_frozen": sub_frozen, @@ -141,15 +141,8 @@ class Resolver(TemplateView): return context def get(self, request, *args, **kwargs): - if not request.user.is_superuser: - return HttpResponseForbidden() - self.contest = Contest.objects.get(key=kwargs.get("contest")) - if not self.contest.format.has_hidden_subtasks: - return HttpResponseForbidden() - - if self.request.GET.get("json"): - json_dumps_params = {"ensure_ascii": False} - return JsonResponse( - self.get_contest_json(), json_dumps_params=json_dumps_params - ) - return super(Resolver, self).get(request, *args, **kwargs) + if request.user.is_superuser: + self.contest = Contest.objects.get(key=kwargs.get("contest")) + if self.contest.format.has_hidden_subtasks: + return super(Resolver, self).get(request, *args, **kwargs) + return HttpResponseForbidden() diff --git a/judge/views/select2.py b/judge/views/select2.py index 62a850c..0d1e60a 100644 --- a/judge/views/select2.py +++ b/judge/views/select2.py @@ -1,11 +1,8 @@ -from urllib.parse import urljoin - from django.db.models import F, Q from django.http import Http404, JsonResponse from django.shortcuts import get_object_or_404 from django.utils.encoding import smart_text from django.views.generic.list import BaseListView -from django.conf import settings from chat_box.utils import encrypt_url @@ -57,6 +54,7 @@ class Select2View(BaseListView): class UserSelect2View(Select2View): def get(self, request, *args, **kwargs): self.org_id = kwargs.get("org_id", request.GET.get("org_id", "")) + print(self.org_id) return super(UserSelect2View, self).get(request, *args, **kwargs) def get_queryset(self): @@ -85,17 +83,15 @@ class ProblemSelect2View(Select2View): class ContestSelect2View(Select2View): - def get(self, request, *args, **kwargs): - self.problem_id = kwargs.get("problem_id", request.GET.get("problem_id", "")) - return super(ContestSelect2View, self).get(request, *args, **kwargs) - def get_queryset(self): - q = Contest.get_visible_contests(self.request.user).filter( + return Contest.get_visible_contests(self.request.user).filter( Q(key__icontains=self.term) | Q(name__icontains=self.term) ) - if self.problem_id: - q = q.filter(problems=self.problem_id) - return q + + +class CommentSelect2View(Select2View): + def get_queryset(self): + return Comment.objects.filter(page__icontains=self.term) class UserSearchSelect2View(BaseListView): @@ -104,21 +100,6 @@ class UserSearchSelect2View(BaseListView): def get_queryset(self): return _get_user_queryset(self.term) - def get_json_result_from_object(self, user_tuple): - pk, username, email, display_rank, profile_image = user_tuple - return { - "text": username, - "id": username, - "gravatar_url": gravatar( - None, - self.gravatar_size, - self.gravatar_default, - self.get_profile_image_url(profile_image), - email, - ), - "display_rank": display_rank, - } - def get(self, request, *args, **kwargs): self.request = request self.kwargs = kwargs @@ -127,7 +108,7 @@ class UserSearchSelect2View(BaseListView): self.gravatar_default = request.GET.get("gravatar_default", None) self.object_list = self.get_queryset().values_list( - "pk", "user__username", "user__email", "display_rank", "profile_image" + "pk", "user__username", "user__email", "display_rank" ) context = self.get_context_data() @@ -135,8 +116,15 @@ class UserSearchSelect2View(BaseListView): return JsonResponse( { "results": [ - self.get_json_result_from_object(user_tuple) - for user_tuple in context["object_list"] + { + "text": username, + "id": username, + "gravatar_url": gravatar( + email, self.gravatar_size, self.gravatar_default + ), + "display_rank": display_rank, + } + for pk, username, email, display_rank in context["object_list"] ], "more": context["page_obj"].has_next(), } @@ -145,11 +133,6 @@ class UserSearchSelect2View(BaseListView): def get_name(self, obj): return str(obj) - def get_profile_image_url(self, profile_image): - if profile_image: - return urljoin(settings.MEDIA_URL, profile_image) - return None - class ContestUserSearchSelect2View(UserSearchSelect2View): def get_queryset(self): @@ -178,34 +161,43 @@ class AssigneeSelect2View(UserSearchSelect2View): ).distinct() -class ChatUserSearchSelect2View(UserSearchSelect2View): - def get_json_result_from_object(self, user_tuple): +class ChatUserSearchSelect2View(BaseListView): + paginate_by = 20 + + def get_queryset(self): # TODO: add block + return _get_user_queryset(self.term) + + def get(self, request, *args, **kwargs): if not self.request.user.is_authenticated: raise Http404() - pk, username, email, display_rank, profile_image = user_tuple - return { - "text": username, - "id": encrypt_url(self.request.profile.id, pk), - "gravatar_url": gravatar( - None, - self.gravatar_size, - self.gravatar_default, - self.get_profile_image_url(profile_image), - email, - ), - "display_rank": display_rank, - } + self.request = request + self.kwargs = kwargs + self.term = kwargs.get("term", request.GET.get("term", "")) + self.gravatar_size = request.GET.get("gravatar_size", 128) + self.gravatar_default = request.GET.get("gravatar_default", None) + self.object_list = self.get_queryset().values_list( + "pk", "user__username", "user__email", "display_rank" + ) -class ProblemAuthorSearchSelect2View(UserSearchSelect2View): - def get_queryset(self): - return Profile.objects.filter( - authored_problems__isnull=False, user__username__icontains=self.term - ).distinct() + context = self.get_context_data() - def get_json_result_from_object(self, user_tuple): - pk, username, email, display_rank, profile_image = user_tuple - return { - "text": username, - "id": pk, - } + return JsonResponse( + { + "results": [ + { + "text": username, + "id": encrypt_url(request.profile.id, pk), + "gravatar_url": gravatar( + email, self.gravatar_size, self.gravatar_default + ), + "display_rank": display_rank, + } + for pk, username, email, display_rank in context["object_list"] + ], + "more": context["page_obj"].has_next(), + } + ) + + def get_name(self, obj): + return str(obj) diff --git a/judge/views/submission.py b/judge/views/submission.py index 09dcabe..152d6a9 100644 --- a/judge/views/submission.py +++ b/judge/views/submission.py @@ -1,4 +1,6 @@ +import json import os.path +import zipfile from operator import attrgetter from django.conf import settings @@ -28,35 +30,36 @@ from django.utils.translation import gettext_lazy from django.views.decorators.http import require_POST from django.views.generic import DetailView from django.views.generic import ListView -from django.views import View from judge import event_poster as event from judge.highlight_code import highlight_code -from judge.models import ( - Contest, - ContestParticipation, - Language, - Problem, - ProblemTestCase, - ProblemTranslation, - Profile, - Submission, -) +from judge.models import Contest, ContestParticipation +from judge.models import Language +from judge.models import Problem +from judge.models import ProblemTestCase +from judge.models import ProblemTranslation +from judge.models import Profile +from judge.models import Submission from judge.utils.problems import get_result_data +from judge.utils.problems import user_authored_ids +from judge.utils.problems import user_completed_ids +from judge.utils.problems import user_editable_ids from judge.utils.problem_data import get_problem_case from judge.utils.raw_sql import join_sql_subquery, use_straight_join from judge.utils.views import DiggPaginatorMixin -from judge.utils.infinite_paginator import InfinitePaginationMixin from judge.utils.views import TitleMixin from judge.utils.timedelta import nice_repr -from judge.views.contests import ContestMixin -from judge.caching import cache_wrapper + + +MAX_NUMBER_OF_QUERY_SUBMISSIONS = 50000 def submission_related(queryset): - return queryset.select_related("user", "problem", "language").only( + return queryset.select_related("user__user", "problem", "language").only( "id", - "user__id", + "user__user__username", + "user__display_rank", + "user__rating", "problem__name", "problem__code", "problem__is_public", @@ -71,8 +74,7 @@ def submission_related(queryset): "case_points", "case_total", "current_testcase", - "contest_object__key", - "contest_object__name", + "contest_object", ) @@ -83,13 +85,33 @@ class SubmissionMixin(object): class SubmissionDetailBase(LoginRequiredMixin, TitleMixin, SubmissionMixin, DetailView): - queryset = Submission.objects.select_related( - "language", "problem", "user", "contest_object" - ).defer("problem__description", "user__about", "contest_object__description") - def get_object(self, queryset=None): submission = super(SubmissionDetailBase, self).get_object(queryset) - if submission.is_accessible_by(self.request.profile): + profile = self.request.profile + problem = submission.problem + if self.request.user.has_perm("judge.view_all_submission"): + return submission + if problem.is_public and self.request.user.has_perm( + "judge.view_public_submission" + ): + return submission + if submission.user_id == profile.id: + return submission + if problem.is_editor(profile): + return submission + if problem.is_public or problem.testers.filter(id=profile.id).exists(): + if Submission.objects.filter( + user_id=profile.id, + result="AC", + problem_id=problem.id, + points=problem.points, + ).exists(): + return submission + if hasattr( + submission, "contest" + ) and submission.contest.participation.contest.is_editable_by( + self.request.user + ): return submission raise PermissionDenied() @@ -98,7 +120,7 @@ class SubmissionDetailBase(LoginRequiredMixin, TitleMixin, SubmissionMixin, Deta submission = self.object return _("Submission of %(problem)s by %(user)s") % { "problem": submission.problem.translated_name(self.request.LANGUAGE_CODE), - "user": submission.user.username, + "user": submission.user.user.username, } def get_content_title(self): @@ -113,13 +135,29 @@ class SubmissionDetailBase(LoginRequiredMixin, TitleMixin, SubmissionMixin, Deta ), "user": format_html( '{1}', - reverse("user_page", args=[submission.user.username]), - submission.user.username, + reverse("user_page", args=[submission.user.user.username]), + submission.user.user.username, ), } ) +class SubmissionSource(SubmissionDetailBase): + template_name = "submission/source.html" + + def get_queryset(self): + return super().get_queryset().select_related("source") + + def get_context_data(self, **kwargs): + context = super(SubmissionSource, self).get_context_data(**kwargs) + submission = self.object + context["raw_source"] = submission.source.source.rstrip("\n") + context["highlighted_source"] = highlight_code( + submission.source.source, submission.language.pygments, linenos=False + ) + return context + + def get_hidden_subtasks(request, submission): contest = submission.contest_object if contest and contest.is_editable_by(request.user): @@ -185,8 +223,8 @@ def get_cases_data(submission): continue count += 1 problem_data[count] = { - "input": case_data.get(case.input_file, "") if case.input_file else "", - "answer": case_data.get(case.output_file, "") if case.output_file else "", + "input": case_data[case.input_file] if case.input_file else "", + "answer": case_data[case.output_file] if case.output_file else "", } return problem_data @@ -195,28 +233,15 @@ def get_cases_data(submission): class SubmissionStatus(SubmissionDetailBase): template_name = "submission/status.html" - def can_see_testcases(self): - contest_submission = self.object.contest_or_none - if contest_submission is None: - return True - - contest_problem = contest_submission.problem - problem = self.object.problem - contest = self.object.contest_object - - if contest_problem.show_testcases: - return True - if problem.is_editable_by(self.request.user): - return True - if contest.is_editable_by(self.request.user): - return True - if not problem.is_public: + def access_testcases_in_contest(self): + contest = self.object.contest_or_none + if contest is None: return False - if contest.is_in_contest(self.request.user): + if contest.problem.problem.is_editable_by(self.request.user): + return True + if contest.problem.contest.is_in_contest(self.request.user): return False - if not contest.ended: - return False - if contest_submission.participation.ended: + if contest.participation.ended: return True return False @@ -231,14 +256,19 @@ class SubmissionStatus(SubmissionDetailBase): ) context["time_limit"] = submission.problem.time_limit context["can_see_testcases"] = False + context["raw_source"] = submission.source.source.rstrip("\n") context["highlighted_source"] = highlight_code( - submission.source.source, - submission.language.pygments, - linenos=True, - title=submission.language, + submission.source.source, submission.language.pygments, linenos=False ) - if self.can_see_testcases(): + contest = submission.contest_or_none + prefix_length = 0 + can_see_testcases = self.access_testcases_in_contest() + + if contest is not None: + prefix_length = contest.problem.output_prefix_override or 0 + + if contest is None or prefix_length > 0 or can_see_testcases: context["cases_data"] = get_cases_data(submission) context["can_see_testcases"] = True try: @@ -264,7 +294,7 @@ class SubmissionTestCaseQuery(SubmissionStatus): return super(SubmissionTestCaseQuery, self).get(request, *args, **kwargs) -class SubmissionSourceRaw(SubmissionDetailBase): +class SubmissionSourceRaw(SubmissionSource): def get(self, request, *args, **kwargs): submission = self.get_object() return HttpResponse(submission.source.source, content_type="text/plain") @@ -295,7 +325,6 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): context_object_name = "submissions" first_page_href = None include_frozen = False - organization = None def get_result_data(self): result = self._get_result_data() @@ -304,14 +333,11 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): return result def _get_result_data(self): - return get_result_data(self.get_queryset().order_by()) + return get_result_data(self._get_queryset().order_by()) def access_check(self, request): pass - def hide_contest_in_row(self): - return self.request.in_contest_mode - @cached_property def in_contest(self): return ( @@ -325,13 +351,7 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): return self.request.profile.current_contest.contest def _get_entire_queryset(self): - organization = self.organization or self.request.organization - if organization: - queryset = Submission.objects.filter( - contest_object__organizations=organization - ) - else: - queryset = Submission.objects.all() + queryset = Submission.objects.all() use_straight_join(queryset) queryset = submission_related(queryset.order_by("-id")) if self.show_problem: @@ -380,19 +400,24 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): ) if self.selected_languages: - queryset = queryset.filter(language__in=self.selected_languages) + queryset = queryset.filter( + language__in=Language.objects.filter(key__in=self.selected_languages) + ) if self.selected_statuses: - submission_results = [i for i, _ in Submission.RESULT] - if self.selected_statuses[0] in submission_results: - queryset = queryset.filter(result__in=self.selected_statuses) - else: - queryset = queryset.filter(status__in=self.selected_statuses) + queryset = queryset.filter( + Q(result__in=self.selected_statuses) + | Q(status__in=self.selected_statuses) + ) return queryset - def get_queryset(self): + def _get_queryset(self): queryset = self._get_entire_queryset() if not self.in_contest: + if self.request.organization: + queryset = queryset.filter( + contest_object__organizations=self.request.organization + ) join_sql_subquery( queryset, subquery=str( @@ -408,10 +433,10 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): ) return queryset - def get_my_submissions_page(self): - return None + def get_queryset(self): + return self._get_queryset()[:MAX_NUMBER_OF_QUERY_SUBMISSIONS] - def get_friend_submissions_page(self): + def get_my_submissions_page(self): return None def get_all_submissions_page(self): @@ -449,30 +474,42 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): authenticated = self.request.user.is_authenticated context["dynamic_update"] = False context["show_problem"] = self.show_problem - context["profile"] = self.request.profile + context["completed_problem_ids"] = ( + user_completed_ids(self.request.profile) if authenticated else [] + ) + context["authored_problem_ids"] = ( + user_authored_ids(self.request.profile) if authenticated else [] + ) + context["editable_problem_ids"] = ( + user_editable_ids(self.request.profile) if authenticated else [] + ) + context["all_languages"] = Language.objects.all().values_list("key", "name") - context["selected_languages"] = self.selected_languages_key + context["selected_languages"] = self.selected_languages + context["all_statuses"] = self.get_searchable_status_codes() context["selected_statuses"] = self.selected_statuses - context["can_show_result_data"] = not self.in_hidden_subtasks_contest() + + if not self.in_hidden_subtasks_contest(): + context["results_json"] = mark_safe(json.dumps(self.get_result_data())) + context["results_colors_json"] = mark_safe( + json.dumps(settings.DMOJ_STATS_SUBMISSION_RESULT_COLORS) + ) + else: + context["results_json"] = None + context["page_suffix"] = suffix = ( ("?" + self.request.GET.urlencode()) if self.request.GET else "" ) context["first_page_href"] = (self.first_page_href or ".") + suffix context["my_submissions_link"] = self.get_my_submissions_page() - context["friend_submissions_link"] = self.get_friend_submissions_page() context["all_submissions_link"] = self.get_all_submissions_page() context["page_type"] = self.page_type - context["hide_contest_in_row"] = self.hide_contest_in_row() context["in_hidden_subtasks_contest"] = self.in_hidden_subtasks_contest() if context["in_hidden_subtasks_contest"]: for submission in context["submissions"]: self.modify_attrs(submission) - context[ - "is_in_editable_contest" - ] = self.in_contest and self.contest.is_editable_by(self.request.user) - return context def get(self, request, *args, **kwargs): @@ -480,35 +517,14 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView): if check is not None: return check - self.selected_languages = request.GET.getlist("language") - self.selected_statuses = request.GET.getlist("status") - self.selected_languages_key = [] - - if self.selected_languages: - languages = Language.objects.filter(key__in=self.selected_languages).values( - "id", "key" - ) - self.selected_languages = [i["id"] for i in languages] - self.selected_languages_key = [i["key"] for i in languages] - if self.selected_statuses: - allowed_statuses = [i for i, _ in Submission.RESULT + Submission.STATUS] - self.selected_statuses = [ - i for i in self.selected_statuses if i in allowed_statuses - ] + self.selected_languages = set(request.GET.getlist("language")) + self.selected_statuses = set(request.GET.getlist("status")) if self.in_contest and self.contest.is_editable_by(self.request.user): self.include_frozen = True if "results" in request.GET: - response = {} - if not self.in_hidden_subtasks_contest(): - response["results_json"] = self.get_result_data() - response[ - "results_colors_json" - ] = settings.DMOJ_STATS_SUBMISSION_RESULT_COLORS - else: - response["results_json"] = None - return JsonResponse(response) + return JsonResponse(self.get_result_data()) return super(SubmissionsListBase, self).get(request, *args, **kwargs) @@ -542,25 +558,11 @@ class ConditionalUserTabMixin(object): return context -class GeneralSubmissions(SubmissionsListBase): - def get_my_submissions_page(self): - if self.request.user.is_authenticated: - return reverse( - "all_user_submissions", kwargs={"user": self.request.user.username} - ) - return None - - def get_friend_submissions_page(self): - if self.request.user.is_authenticated: - return reverse("all_friend_submissions") - return None - - -class AllUserSubmissions(ConditionalUserTabMixin, UserMixin, GeneralSubmissions): - def get_queryset(self): +class AllUserSubmissions(ConditionalUserTabMixin, UserMixin, SubmissionsListBase): + def _get_queryset(self): return ( super(AllUserSubmissions, self) - .get_queryset() + ._get_queryset() .filter(user_id=self.profile.id) ) @@ -571,13 +573,19 @@ class AllUserSubmissions(ConditionalUserTabMixin, UserMixin, GeneralSubmissions) def get_content_title(self): if self.request.user.is_authenticated and self.request.profile == self.profile: - return format_html(_("All my submissions")) + return format_html("All my submissions") return format_html( - _('All submissions by {0}'), + 'All submissions by {0}', self.username, reverse("user_page", args=[self.username]), ) + def get_my_submissions_page(self): + if self.request.user.is_authenticated: + return reverse( + "all_user_submissions", kwargs={"user": self.request.user.username} + ) + def get_context_data(self, **kwargs): context = super(AllUserSubmissions, self).get_context_data(**kwargs) context["dynamic_update"] = context["page_obj"].number == 1 @@ -586,31 +594,12 @@ class AllUserSubmissions(ConditionalUserTabMixin, UserMixin, GeneralSubmissions) return context -class AllFriendSubmissions( - LoginRequiredMixin, InfinitePaginationMixin, GeneralSubmissions -): - def get_queryset(self): - friends = self.request.profile.get_friends() - return ( - super(AllFriendSubmissions, self).get_queryset().filter(user_id__in=friends) - ) - - def get_title(self): - return _("All friend submissions") - - def get_context_data(self, **kwargs): - context = super(AllFriendSubmissions, self).get_context_data(**kwargs) - context["dynamic_update"] = False - context["page_type"] = "friend_tab" - return context - - class ProblemSubmissionsBase(SubmissionsListBase): show_problem = False dynamic_update = True check_contest_in_access_check = False - def get_queryset(self): + def _get_queryset(self): if ( self.in_contest and not self.contest.contest_problems.filter( @@ -702,10 +691,10 @@ class UserProblemSubmissions(ConditionalUserTabMixin, UserMixin, ProblemSubmissi if not self.is_own: self.access_check_contest(request) - def get_queryset(self): + def _get_queryset(self): return ( super(UserProblemSubmissions, self) - .get_queryset() + ._get_queryset() .filter(user_id=self.profile.id) ) @@ -747,11 +736,6 @@ def single_submission(request, submission_id, show_problem=True): submission_related(Submission.objects.all()), id=int(submission_id) ) - is_in_editable_contest = False - if authenticated and request.in_contest_mode: - contest = request.profile.current_contest.contest - is_in_editable_contest = contest.is_editable_by(request.user) - if not submission.problem.is_accessible_by(request.user): raise Http404() @@ -760,11 +744,19 @@ def single_submission(request, submission_id, show_problem=True): "submission/row.html", { "submission": submission, + "authored_problem_ids": user_authored_ids(request.profile) + if authenticated + else [], + "completed_problem_ids": user_completed_ids(request.profile) + if authenticated + else [], + "editable_problem_ids": user_editable_ids(request.profile) + if authenticated + else [], "show_problem": show_problem, "problem_name": show_problem and submission.problem.translated_name(request.LANGUAGE_CODE), - "profile": request.profile if authenticated else None, - "is_in_editable_contest": is_in_editable_contest, + "profile_id": request.profile.id if authenticated else 0, }, ) @@ -780,15 +772,18 @@ def single_submission_query(request): return single_submission(request, int(request.GET["id"]), bool(show_problem)) -class AllSubmissions(InfinitePaginationMixin, GeneralSubmissions): +class AllSubmissions(SubmissionsListBase): stats_update_interval = 3600 - @property - def use_infinite_pagination(self): - return not self.in_contest + def get_my_submissions_page(self): + if self.request.user.is_authenticated: + return reverse( + "all_user_submissions", kwargs={"user": self.request.user.username} + ) def get_context_data(self, **kwargs): context = super(AllSubmissions, self).get_context_data(**kwargs) + print(self.request.organization) context["dynamic_update"] = ( context["page_obj"].number == 1 ) and not self.request.organization @@ -797,12 +792,21 @@ class AllSubmissions(InfinitePaginationMixin, GeneralSubmissions): return context def _get_result_data(self): - if self.request.organization or self.in_contest: + if ( + self.request.organization + or self.in_contest + or self.selected_languages + or self.selected_statuses + ): return super(AllSubmissions, self)._get_result_data() - return _get_global_submission_result_data( - self.selected_statuses, self.selected_languages - ) + key = "global_submission_result_data" + result = cache.get(key) + if result: + return result + result = super(AllSubmissions, self)._get_result_data() + cache.set(key, result, self.stats_update_interval) + return result class ForceContestMixin(object): @@ -840,38 +844,6 @@ class ForceContestMixin(object): return super(ForceContestMixin, self).get(request, *args, **kwargs) -class ContestSubmissions( - LoginRequiredMixin, ContestMixin, ForceContestMixin, SubmissionsListBase -): - check_contest_in_access_check = True - template_name = "contest/submissions.html" - context_object_name = "submissions" - - def hide_contest_in_row(self): - return True - - def access_check(self, request): - super().contest_access_check(self.contest) - super().access_check(request) - - def get_title(self): - return _("Submissions in") + " " + self.contest.name - - def get_content_title(self): - return format_html( - _('Submissions in {1}'), - reverse("contest_view", args=[self.contest.key]), - self.contest.name, - ) - - def get_context_data(self, **kwargs): - self.object = self.contest - context = super(ContestSubmissions, self).get_context_data(**kwargs) - context["contest"] = self.contest - context["page_type"] = "submissions" - return context - - class UserContestSubmissions(ForceContestMixin, UserProblemSubmissions): check_contest_in_access_check = True @@ -996,6 +968,9 @@ class UserContestSubmissionsAjax(UserContestSubmissions): context["contest"] = self.contest context["problem"] = self.problem context["profile"] = self.profile + context["profile_id"] = ( + self.request.profile.id if self.request.profile else None + ) contest_problem = self.contest.contest_problems.get(problem=self.problem) filtered_submissions = [] @@ -1044,32 +1019,3 @@ class UserContestSubmissionsAjax(UserContestSubmissions): return super(UserContestSubmissionsAjax, self).get(request, *args, **kwargs) except Http404: return HttpResponse(_("You don't have permission to access.")) - - -class SubmissionSourceFileView(View): - def get(self, request, filename): - filepath = os.path.join(settings.DMOJ_SUBMISSION_ROOT, filename) - if not os.path.exists(filepath): - raise Http404("File not found") - response = HttpResponse() - with open(filepath, "rb") as f: - response.content = f.read() - response["Content-Type"] = "application/octet-stream" - response["Content-Disposition"] = "attachment; filename=%s" % (filename,) - return response - - -@cache_wrapper(prefix="gsrd", timeout=3600, expected_type=dict) -def _get_global_submission_result_data(statuses, languages): - queryset = Submission.objects - if languages: - queryset = queryset.filter( - language__in=Language.objects.filter(id__in=languages) - ) - if statuses: - submission_results = [i for i, _ in Submission.RESULT] - if statuses[0] in submission_results: - queryset = queryset.filter(result__in=statuses) - else: - queryset = queryset.filter(status__in=statuses) - return get_result_data(queryset) diff --git a/judge/views/test_formatter/test_formatter.py b/judge/views/test_formatter/test_formatter.py deleted file mode 100644 index 4818bcc..0000000 --- a/judge/views/test_formatter/test_formatter.py +++ /dev/null @@ -1,207 +0,0 @@ -from django.views import View -from django.shortcuts import render, redirect, get_object_or_404 -from django.urls import reverse -from django.core.files import File -from django.core.files.base import ContentFile -from django.http import ( - FileResponse, - HttpResponseRedirect, - HttpResponseBadRequest, - HttpResponse, -) -from judge.models import TestFormatterModel -from judge.forms import TestFormatterForm -from judge.views.test_formatter import tf_logic, tf_utils -from django.utils.translation import gettext_lazy as _ -from zipfile import ZipFile, ZIP_DEFLATED - -import os -import uuid -from dmoj import settings - - -def id_to_path(id): - return os.path.join(settings.MEDIA_ROOT, "test_formatter/" + id + "/") - - -def get_names_in_archive(file_path): - suffixes = ("inp", "out", "INP", "OUT") - with ZipFile(os.path.join(settings.MEDIA_ROOT, file_path)) as f: - result = [ - x for x in f.namelist() if not x.endswith("/") and x.endswith(suffixes) - ] - return list(sorted(result, key=tf_utils.natural_sorting_key)) - - -def get_renamed_archive(file_str, file_name, file_path, bef, aft): - target_file_id = str(uuid.uuid4()) - source_path = os.path.join(settings.MEDIA_ROOT, file_str) - target_path = os.path.join(settings.MEDIA_ROOT, file_str + "_" + target_file_id) - new_path = os.path.join(settings.MEDIA_ROOT, "test_formatter/" + file_name) - - source = ZipFile(source_path, "r") - target = ZipFile(target_path, "w", ZIP_DEFLATED) - - for bef_name, aft_name in zip(bef, aft): - target.writestr(aft_name, source.read(bef_name)) - - os.remove(source_path) - os.rename(target_path, new_path) - - target.close() - source.close() - - return {"file_path": "test_formatter/" + file_name} - - -class TestFormatter(View): - form_class = TestFormatterForm() - - def get(self, request): - return render( - request, - "test_formatter/test_formatter.html", - {"title": _("Test Formatter"), "form": self.form_class}, - ) - - def post(self, request): - form = TestFormatterForm(request.POST, request.FILES) - if form.is_valid(): - form.save() - return HttpResponseRedirect("edit_page") - return render( - request, "test_formatter/test_formatter.html", {"form": self.form_class} - ) - - -class EditTestFormatter(View): - file_path = "" - - def get(self, request): - file = TestFormatterModel.objects.last() - filestr = str(file.file) - filename = filestr.split("/")[-1] - filepath = filestr.split("/")[0] - - bef_file = get_names_in_archive(filestr) - preview_data = { - "bef_inp_format": bef_file[0], - "bef_out_format": bef_file[1], - "aft_inp_format": "input.000", - "aft_out_format": "output.000", - "file_str": filestr, - } - - preview = tf_logic.preview(preview_data) - - response = "" - for i in range(len(bef_file)): - bef = preview["bef_preview"][i]["value"] - aft = preview["aft_preview"][i]["value"] - response = response + f"

{bef} => {aft}

\n" - - return render( - request, - "test_formatter/edit_test_formatter.html", - { - "title": _("Test Formatter"), - "check": 0, - "files_list": bef_file, - "file_name": filename, - "res": response, - }, - ) - - def post(self, request, *args, **kwargs): - action = request.POST.get("action") - if action == "convert": - try: - file = TestFormatterModel.objects.last() - filestr = str(file.file) - filename = filestr.split("/")[-1] - filepath = filestr.split("/")[0] - bef_inp_format = request.POST["bef_inp_format"] - bef_out_format = request.POST["bef_out_format"] - aft_inp_format = request.POST["aft_inp_format"] - aft_out_format = request.POST["aft_out_format"] - aft_file_name = request.POST["file_name"] - except KeyError: - return HttpResponseBadRequest("No data.") - - if filename != aft_file_name: - source_path = os.path.join(settings.MEDIA_ROOT, filestr) - new_path = os.path.join( - settings.MEDIA_ROOT, "test_formatter/" + aft_file_name - ) - os.rename(source_path, new_path) - filename = aft_file_name - - preview_data = { - "bef_inp_format": bef_inp_format, - "bef_out_format": bef_out_format, - "aft_inp_format": aft_inp_format, - "aft_out_format": aft_out_format, - "file_name": filename, - "file_path": filepath, - "file_str": filepath + "/" + filename, - } - - converted_zip = tf_logic.convert(preview_data) - - global file_path - file_path = converted_zip["file_path"] - - zip_instance = TestFormatterModel() - zip_instance.file = file_path - zip_instance.save() - - preview = tf_logic.preview(preview_data) - response = HttpResponse() - - for i in range(len(preview["bef_preview"])): - bef = preview["bef_preview"][i]["value"] - aft = preview["aft_preview"][i]["value"] - response.write(f"

{bef} => {aft}

") - - return response - - elif action == "download": - return HttpResponse(file_path) - - return HttpResponseBadRequest("Invalid action") - - -class DownloadTestFormatter(View): - def get(self, request): - file_path = request.GET.get("file_path") - file_name = file_path.split("/")[-1] - preview_file = tf_logic.preview_file(file_path) - - response = "" - for i in range(len(preview_file)): - response = response + (f"

{preview_file[i]}

\n") - - files_list = [preview_file[0], preview_file[1]] - - return render( - request, - "test_formatter/download_test_formatter.html", - { - "title": _("Test Formatter"), - "response": response, - "files_list": files_list, - "file_path": os.path.join(settings.MEDIA_ROOT, file_path), - "file_path_getnames": file_path, - "file_name": file_name, - }, - ) - - def post(self, request): - file_path = request.POST.get("file_path") - - with open(file_path, "rb") as zip_file: - response = HttpResponse(zip_file.read(), content_type="application/zip") - response[ - "Content-Disposition" - ] = f"attachment; filename={os.path.basename(file_path)}" - return response diff --git a/judge/views/test_formatter/tf_logic.py b/judge/views/test_formatter/tf_logic.py deleted file mode 100644 index f981745..0000000 --- a/judge/views/test_formatter/tf_logic.py +++ /dev/null @@ -1,116 +0,0 @@ -import os -from judge.views.test_formatter import test_formatter as tf -from judge.views.test_formatter import tf_pattern as pattern - - -class TestSuite: - def __init__( - self, - file_id: str, - pattern_pair: pattern.PatternPair, - test_id_list: list, - extra_files: list, - ): - self.file_id = file_id - self.pattern_pair = pattern_pair - self.test_id_list = test_id_list - self.extra_files = extra_files - - @classmethod - def get_test_suite(cls, file_name: str, inp_format: str, out_format: str): - pattern_pair = pattern.PatternPair.from_string_pair(inp_format, out_format) - names = tf.get_names_in_archive(file_name) - test_id_list, extra_files = pattern_pair.matches( - names, returns="test_id_with_extra_files" - ) - return cls(file_name, pattern_pair, test_id_list, extra_files) - - def get_name_list(self, add_extra_info=False): - important_files = [] - - for index, t in enumerate(self.test_id_list): - inp_name = self.pattern_pair.x.get_name(t, index=index, use_index=True) - out_name = self.pattern_pair.y.get_name(t, index=index, use_index=True) - important_files.extend([inp_name, out_name]) - - result = [] - - for name in important_files: - if add_extra_info: - result.append({"value": name, "is_extra_file": False}) - else: - result.append(name) - - for name in self.extra_files: - if add_extra_info: - result.append({"value": name, "is_extra_file": True}) - else: - result.append(name) - - return result - - -def is_valid_file_type(file_name): - _, ext = os.path.splitext(file_name) - return ext in [".zip", ".ZIP"] - - -def preview(params): - bif = params["bef_inp_format"] - bof = params["bef_out_format"] - aif = params["aft_inp_format"] - aof = params["aft_out_format"] - file_str = params["file_str"] - - try: - test_suite = TestSuite.get_test_suite(file_str, bif, bof) - bef_preview = test_suite.get_name_list(add_extra_info=True) - try: - test_suite.pattern_pair = pattern.PatternPair.from_string_pair(aif, aof) - aft_preview = test_suite.get_name_list(add_extra_info=True) - return {"bef_preview": bef_preview, "aft_preview": aft_preview} - except: - return {"bef_preview": bef_preview, "aft_preview": []} - except: - test_suite = TestSuite.get_test_suite(file_id, "*", "*") - preview = test_suite.get_name_list(add_extra_info=True) - return {"bef_preview": preview, "aft_preview": []} - - -def convert(params): - bif = params["bef_inp_format"] - bof = params["bef_out_format"] - aif = params["aft_inp_format"] - aof = params["aft_out_format"] - file_str = params["file_str"] - file_name = params["file_name"] - file_path = params["file_path"] - - test_suite = TestSuite.get_test_suite(file_str, bif, bof) - bef_preview = test_suite.get_name_list() - test_suite.pattern_pair = pattern.PatternPair.from_string_pair(aif, aof) - aft_preview = test_suite.get_name_list() - - result = tf.get_renamed_archive( - file_str, file_name, file_path, bef_preview, aft_preview - ) - return result - - -def prefill(params): - file_str = params["file_str"] - file_name = params["file_name"] - - names = tf.get_names_in_archive(file_str) - pattern_pair = pattern.find_best_pattern_pair(names) - - return { - "file_name": file_name, - "inp_format": pattern_pair.x.to_string(), - "out_format": pattern_pair.y.to_string(), - } - - -def preview_file(file_str): - names = tf.get_names_in_archive(file_str) - return names diff --git a/judge/views/test_formatter/tf_pattern.py b/judge/views/test_formatter/tf_pattern.py deleted file mode 100644 index 071976d..0000000 --- a/judge/views/test_formatter/tf_pattern.py +++ /dev/null @@ -1,268 +0,0 @@ -import os -import random -from judge.views.test_formatter import tf_utils as utils - -SAMPLE_SIZE = 16 -NUMBERED_MM = ["0", "1", "00", "01", "000", "001", "0000", "0001"] -VALID_MM = ["*"] + NUMBERED_MM - -MSG_TOO_MANY_OCCURRENCES = ( - "400: Invalid pattern: Pattern cannot have more than one '{}'" -) -MSG_MM_NOT_FOUND = "400: Invalid pattern: Wildcard not found. Wildcard list: {}" - - -class Pattern: - def __init__(self, ll, mm, rr): - assert mm in VALID_MM, "Invalid wildcard" - self.ll = ll - self.mm = mm - self.rr = rr - - def __repr__(self): - return "Pattern('{}', '{}', '{}')".format(self.ll, self.mm, self.rr) - - def __eq__(self, other): - return self.__repr__() == other.__repr__() - - def __hash__(self): - return self.__repr__().__hash__() - - @classmethod - def from_string(cls, text): - for mm in ["*"] + sorted(NUMBERED_MM, key=len, reverse=True): - if mm in text: - if text.count(mm) > 1: - raise Exception(MSG_TOO_MANY_OCCURRENCES.format(mm)) - i = text.index(mm) - return cls(text[:i], mm, text[i + len(mm) :]) - raise Exception(MSG_MM_NOT_FOUND.format(",".join(VALID_MM))) - - def to_string(self): - return self.ll + self.mm + self.rr - - def is_valid_test_id(self, test_id): - if self.mm == "*": - return True - if self.mm in NUMBERED_MM: - return test_id.isdigit() and len(test_id) >= len(self.mm) - raise NotImplementedError - - def matched(self, name): - return ( - name.startswith(self.ll) - and name.endswith(self.rr) - and len(name) >= len(self.ll) + len(self.rr) - and self.is_valid_test_id(self.get_test_id(name)) - ) - - def get_test_id(self, name): - return name[len(self.ll) : len(name) - len(self.rr)] - - def get_test_id_from_index(self, index): - assert self.mm in NUMBERED_MM, "Wildcard is not a number" - return str(int(self.mm) + index).zfill(len(self.mm)) - - def get_name(self, test_id, index=None, use_index=False): - if use_index and self.mm in NUMBERED_MM: - return self.ll + self.get_test_id_from_index(index) + self.rr - return self.ll + test_id + self.rr - - def matches(self, names, returns): - if returns == "test_id": - result = [n for n in names] - result = [n for n in result if self.matched(n)] - result = [self.get_test_id(n) for n in result] - return result - else: - raise NotImplementedError - - -class PatternPair: - def __init__(self, x: Pattern, y: Pattern): - assert x.mm == y.mm, "Input wildcard and output wildcard must be equal" - self.x = x - self.y = y - - def __repr__(self): - return "PatternPair({}, {})".format(self.x, self.y) - - def __eq__(self, other): - return self.__repr__() == other.__repr__() - - def __hash__(self): - return self.__repr__().__hash__() - - @classmethod - def from_string_pair(cls, inp_format, out_format): - return cls(Pattern.from_string(inp_format), Pattern.from_string(out_format)) - - def matches(self, names, returns): - x_test_ids = self.x.matches(names, returns="test_id") - y_test_ids = self.y.matches(names, returns="test_id") - - test_ids = set(x_test_ids) & set(y_test_ids) - test_ids = list(sorted(test_ids, key=utils.natural_sorting_key)) - - if returns == "fast_count": - if self.x.mm == "*": - return len(test_ids) - elif self.x.mm in NUMBERED_MM: - count_valid = 0 - for t in test_ids: - if t == self.x.get_test_id_from_index(count_valid): - count_valid += 1 - - return count_valid - - extra_files = list(names) - valid_test_ids = [] - for t in test_ids: - if self.x.mm in NUMBERED_MM: - if t != self.x.get_test_id_from_index(len(valid_test_ids)): - continue - - inp_name = self.x.get_name(t) - out_name = self.y.get_name(t) - - if inp_name == out_name: - continue - if inp_name not in extra_files: - continue - if out_name not in extra_files: - continue - - valid_test_ids.append(t) - extra_files.remove(inp_name) - extra_files.remove(out_name) - - if returns == "count": - return len(valid_test_ids) - elif returns == "test_id": - return valid_test_ids - elif returns == "test_id_with_extra_files": - return valid_test_ids, extra_files - else: - raise NotImplementedError - - def score(self, names): - def ls(s): - return len(s) - s.count("0") - - def zs(s): - return -s.count("0") - - def vs(s): - return sum( - s.lower().count(c) * w - for c, w in [("a", -1), ("e", -1), ("i", +1), ("o", -1), ("u", -1)] - ) - - count_score = self.matches(names, returns="fast_count") - - len_score = ls(self.x.ll + self.x.rr + self.y.ll + self.y.rr) - zero_score = zs(self.x.ll + self.x.rr + self.y.ll + self.y.rr) - - assert self.x.mm in ["*"] + NUMBERED_MM - specific_score = 0 if self.x.mm == "*" else len(self.x.mm) - - vowel_score = vs(self.x.ll + self.x.rr) - vs(self.y.ll + self.y.rr) - - return count_score, specific_score, len_score, zero_score, vowel_score - - def is_string_safe(self): - try: - x = Pattern.from_string(self.x.to_string()) - y = Pattern.from_string(self.y.to_string()) - return self == PatternPair(x, y) - except: - return False - - -def maximal(a, key): - max_score = max(map(key, a)) - result = [x for x in a if key(x) == max_score] - if len(result) == 1: - return result[0] - else: - print(result) - raise Exception("More than one maximum values") - - -def get_all_star_pattern_pairs(names): - sample = random.sample(names, min(len(names), SAMPLE_SIZE)) - - star_pattern_pairs = [] - - all_prefixes = [n[:i] for n in sample for i in range(len(n) + 1)] - all_prefixes = list(sorted(set(all_prefixes))) - all_suffixes = [n[i:] for n in sample for i in range(len(n) + 1)] - all_suffixes = list(sorted(set(all_suffixes))) - - for prefix in all_prefixes: - matched_names = [n for n in names if n.startswith(prefix)] - if len(matched_names) == 2: - mn0, mn1 = matched_names - for i in range(len(prefix) + 1): - x = Pattern(prefix[:i], "*", mn0[len(prefix) :]) - y = Pattern(prefix[:i], "*", mn1[len(prefix) :]) - star_pattern_pairs.append(PatternPair(x, y)) - - for suffix in all_suffixes: - matched_names = [n for n in names if n.endswith(suffix)] - if len(matched_names) == 2: - mn0, mn1 = matched_names - for i in range(len(suffix) + 1): - x = Pattern(mn0[: len(mn0) - len(suffix)], "*", suffix[i:]) - y = Pattern(mn1[: len(mn1) - len(suffix)], "*", suffix[i:]) - star_pattern_pairs.append(PatternPair(x, y)) - - star_pattern_pairs = list(set(star_pattern_pairs)) - return star_pattern_pairs - - -def get_variant_pattern_pairs(pp): - return [ - PatternPair(Pattern(pp.x.ll, mm, pp.x.rr), Pattern(pp.y.ll, mm, pp.y.rr)) - for mm in VALID_MM - ] + [ - PatternPair(Pattern(pp.y.ll, mm, pp.y.rr), Pattern(pp.x.ll, mm, pp.x.rr)) - for mm in VALID_MM - ] - - -def find_best_pattern_pair(names): - star_pattern_pairs = get_all_star_pattern_pairs(names) - star_pattern_pairs = [ - pp for pp in star_pattern_pairs if pp.matches(names, returns="fast_count") >= 2 - ] - # for pp in star_pattern_pairs: - # print(pp, pp.is_string_safe(), pp.score(names)) - - if len(star_pattern_pairs) == 0: - return PatternPair(Pattern("", "*", ""), Pattern("", "*", "")) - best_star_pattern_pair = maximal(star_pattern_pairs, key=lambda pp: pp.score(names)) - - pattern_pairs = get_variant_pattern_pairs(best_star_pattern_pair) - # for pp in pattern_pairs: - # print(pp, pp.is_string_safe(), pp.score(names)) - pattern_pairs = [pp for pp in pattern_pairs if pp.is_string_safe()] - best_pattern_pair = maximal(pattern_pairs, key=lambda pp: pp.score(names)) - - return best_pattern_pair - - -def list_dir_recursively(folder): - old_cwd = os.getcwd() - os.chdir(folder) - result = [] - for root, _, filenames in os.walk("."): - for filename in filenames: - result.append(os.path.join(root, filename)) - os.chdir(old_cwd) - return result - - -def test_with_dir(folder): - names = list_dir_recursively(folder) - print(folder, find_best_pattern_pair(names)) diff --git a/judge/views/test_formatter/tf_utils.py b/judge/views/test_formatter/tf_utils.py deleted file mode 100644 index 919b069..0000000 --- a/judge/views/test_formatter/tf_utils.py +++ /dev/null @@ -1,15 +0,0 @@ -def get_char_kind(char): - return 1 if char.isdigit() else 2 if char.isalpha() else 3 - - -def natural_sorting_key(name): - result = [] - last_kind = -1 - for char in name: - curr_kind = get_char_kind(char) - if curr_kind != last_kind: - result.append("") - result[-1] += char - last_kind = curr_kind - - return [x.zfill(16) if x.isdigit() else x for x in result] diff --git a/judge/views/ticket.py b/judge/views/ticket.py index 60a151e..3d62235 100644 --- a/judge/views/ticket.py +++ b/judge/views/ticket.py @@ -35,7 +35,6 @@ from judge.utils.tickets import filter_visible_tickets, own_ticket_filter from judge.utils.views import SingleObjectFormView, TitleMixin, paginate_query_context from judge.views.problem import ProblemMixin from judge.widgets import HeavyPreviewPageDownWidget -from judge.models.notification import make_notification ticket_widget = ( forms.Textarea() @@ -50,10 +49,16 @@ ticket_widget = ( def add_ticket_notifications(users, author, link, ticket): html = f'{ticket.linked_item}' + users = set(users) if author in users: users.remove(author) - make_notification(users, "Ticket", html, author) + + for user in users: + notification = Notification( + owner=user, html_link=html, category="Ticket", author=author + ) + notification.save() class TicketForm(forms.Form): diff --git a/judge/views/user.py b/judge/views/user.py index 6feaffa..80f9add 100644 --- a/judge/views/user.py +++ b/judge/views/user.py @@ -35,42 +35,23 @@ from django.views.generic import DetailView, ListView, TemplateView from django.template.loader import render_to_string from reversion import revisions -from judge.forms import UserForm, ProfileForm, ProfileInfoForm -from judge.models import ( - Profile, - Rating, - Submission, - Friend, - ProfileInfo, - BlogPost, - Problem, - Contest, - Solution, -) +from judge.forms import UserForm, ProfileForm +from judge.models import Profile, Rating, Submission, Friend from judge.performance_points import get_pp_breakdown from judge.ratings import rating_class, rating_progress from judge.tasks import import_users from judge.utils.problems import contest_completed_ids, user_completed_ids from judge.utils.ranker import ranker from judge.utils.unicode import utf8text -from judge.utils.users import ( - get_rating_rank, - get_points_rank, - get_awards, - get_contest_ratings, -) from judge.utils.views import ( + DiggPaginatorMixin, QueryStringSortMixin, TitleMixin, generic_message, SingleObjectFormView, - DiggPaginatorMixin, ) -from judge.utils.infinite_paginator import InfinitePaginationMixin -from judge.views.problem import ProblemList from .contests import ContestRanking - __all__ = [ "UserPage", "UserAboutPage", @@ -119,12 +100,12 @@ class UserPage(TitleMixin, UserMixin, DetailView): def get_title(self): return ( _("My account") - if self.request.profile == self.object - else _("User %s") % self.object.username + if self.request.user == self.object.user + else _("User %s") % self.object.user.username ) def get_content_title(self): - username = self.object.username + username = self.object.user.username css_class = self.object.css_class return mark_safe(f'{username}') @@ -161,10 +142,22 @@ class UserPage(TitleMixin, UserMixin, DetailView): rating = self.object.ratings.order_by("-contest__end_time")[:1] context["rating"] = rating[0] if rating else None - context["points_rank"] = get_points_rank(self.object) + context["rank"] = ( + Profile.objects.filter( + is_unlisted=False, + performance_points__gt=self.object.performance_points, + ).count() + + 1 + ) if rating: - context["rating_rank"] = get_rating_rank(self.object) + context["rating_rank"] = ( + Profile.objects.filter( + is_unlisted=False, + rating__gt=self.object.rating, + ).count() + + 1 + ) context["rated_users"] = Profile.objects.filter( is_unlisted=False, rating__isnull=False ).count() @@ -192,9 +185,42 @@ EPOCH = datetime(1970, 1, 1, tzinfo=timezone.utc) class UserAboutPage(UserPage): template_name = "user/user-about.html" + def get_awards(self, ratings): + result = {} + + sorted_ratings = sorted( + ratings, key=lambda x: (x.rank, -x.contest.end_time.timestamp()) + ) + + result["medals"] = [ + { + "label": rating.contest.name, + "ranking": rating.rank, + "link": reverse("contest_ranking", args=(rating.contest.key,)) + + "#!" + + self.object.username, + "date": date_format(rating.contest.end_time, _("M j, Y")), + } + for rating in sorted_ratings + if rating.rank <= 3 + ] + + num_awards = 0 + for i in result: + num_awards += len(result[i]) + + if num_awards == 0: + result = None + + return result + def get_context_data(self, **kwargs): context = super(UserAboutPage, self).get_context_data(**kwargs) - ratings = context["ratings"] = get_contest_ratings(self.object) + ratings = context["ratings"] = ( + self.object.ratings.order_by("-contest__end_time") + .select_related("contest") + .defer("contest__description") + ) context["rating_data"] = mark_safe( json.dumps( @@ -203,9 +229,7 @@ class UserAboutPage(UserPage): "label": rating.contest.name, "rating": rating.rating, "ranking": rating.rank, - "link": reverse("contest_ranking", args=(rating.contest.key,)) - + "#!" - + self.object.username, + "link": reverse("contest_ranking", args=(rating.contest.key,)), "timestamp": (rating.contest.end_time - EPOCH).total_seconds() * 1000, "date": date_format( @@ -220,7 +244,7 @@ class UserAboutPage(UserPage): ) ) - context["awards"] = get_awards(self.object) + context["awards"] = self.get_awards(ratings) if ratings: user_data = self.object.ratings.aggregate(Min("rating"), Max("rating")) @@ -264,6 +288,19 @@ class UserAboutPage(UserPage): return context + # follow/unfollow user + def post(self, request, user, *args, **kwargs): + try: + if not request.profile: + raise Exception("You have to login") + if request.profile.username == user: + raise Exception("Cannot make friend with yourself") + + following_profile = Profile.objects.get(user__username=user) + Friend.toggle_friend(request.profile, following_profile) + finally: + return HttpResponseRedirect(request.path_info) + class UserProblemsPage(UserPage): template_name = "user/user-problems.html" @@ -320,49 +357,17 @@ class UserProblemsPage(UserPage): return context -class UserBookMarkPage(DiggPaginatorMixin, ListView, UserPage): +class UserBookMarkPage(UserPage): template_name = "user/user-bookmarks.html" - context_object_name = "bookmarks" - paginate_by = 10 - - def get(self, request, *args, **kwargs): - self.current_tab = self.request.GET.get("tab", "problems") - self.user = self.object = self.get_object() - return super(UserBookMarkPage, self).get(request, *args, **kwargs) - - def get_queryset(self): - model = None - if self.current_tab == "posts": - model = BlogPost - elif self.current_tab == "contests": - model = Contest - elif self.current_tab == "editorials": - model = Solution - else: - model = Problem - - q = MakeBookMark.objects.filter(user=self.user).select_related("bookmark") - q = q.filter(bookmark__content_type=ContentType.objects.get_for_model(model)) - object_ids = q.values_list("bookmark__object_id", flat=True) - - res = model.objects.filter(id__in=object_ids) - if self.current_tab == "contests": - res = res.prefetch_related("organizations", "tags") - elif self.current_tab == "editorials": - res = res.select_related("problem") - - return res def get_context_data(self, **kwargs): context = super(UserBookMarkPage, self).get_context_data(**kwargs) - context["current_tab"] = self.current_tab - context["user"] = self.user - - context["page_prefix"] = ( - self.request.path + "?tab=" + self.current_tab + "&page=" - ) - context["first_page_href"] = self.request.path + bookmark_list = MakeBookMark.objects.filter(user=self.object) + context["blogs"] = bookmark_list.filter(bookmark__page__startswith="b") + context["problems"] = bookmark_list.filter(bookmark__page__startswith="p") + context["contests"] = bookmark_list.filter(bookmark__page__startswith="c") + context["solutions"] = bookmark_list.filter(bookmark__page__startswith="s") return context @@ -397,26 +402,22 @@ class UserPerformancePointsAjax(UserProblemsPage): @login_required def edit_profile(request): - profile = request.profile - profile_info, created = ProfileInfo.objects.get_or_create(profile=profile) + profile = Profile.objects.get(user=request.user) + if profile.mute: + raise Http404() if request.method == "POST": form_user = UserForm(request.POST, instance=request.user) - form = ProfileForm( - request.POST, request.FILES, instance=profile, user=request.user - ) - form_info = ProfileInfoForm(request.POST, instance=profile_info) + form = ProfileForm(request.POST, instance=profile, user=request.user) if form_user.is_valid() and form.is_valid(): - with revisions.create_revision(): + with transaction.atomic(), revisions.create_revision(): form_user.save() form.save() - form_info.save() revisions.set_user(request.user) revisions.set_comment(_("Updated on site")) return HttpResponseRedirect(request.path) else: form_user = UserForm(instance=request.user) form = ProfileForm(instance=profile, user=request.user) - form_info = ProfileInfoForm(instance=profile_info) tzmap = settings.TIMEZONE_MAP @@ -427,16 +428,16 @@ def edit_profile(request): "require_staff_2fa": settings.DMOJ_REQUIRE_STAFF_2FA, "form_user": form_user, "form": form, - "form_info": form_info, "title": _("Edit profile"), "profile": profile, + "has_math_config": bool(settings.MATHOID_URL), "TIMEZONE_MAP": tzmap or "http://momentjs.com/static/img/world.png", "TIMEZONE_BG": settings.TIMEZONE_BG if tzmap else "#4E7CAD", }, ) -class UserList(QueryStringSortMixin, InfinitePaginationMixin, TitleMixin, ListView): +class UserList(QueryStringSortMixin, DiggPaginatorMixin, TitleMixin, ListView): model = Profile title = gettext_lazy("Leaderboard") context_object_name = "users" @@ -448,21 +449,22 @@ class UserList(QueryStringSortMixin, InfinitePaginationMixin, TitleMixin, ListVi filter_friend = False def filter_friend_queryset(self, queryset): - friends = self.request.profile.get_friends() - ret = queryset.filter(id__in=friends) + friends = list(self.request.profile.get_friends()) + ret = queryset.filter(user__username__in=friends) return ret def get_queryset(self): queryset = ( Profile.objects.filter(is_unlisted=False) .order_by(self.order, "id") + .select_related("user") .only( "display_rank", + "user__username", "points", "rating", "performance_points", "problem_count", - "about", ) ) if self.request.organization: @@ -470,11 +472,11 @@ class UserList(QueryStringSortMixin, InfinitePaginationMixin, TitleMixin, ListVi if (self.request.GET.get("friend") == "true") and self.request.profile: queryset = self.filter_friend_queryset(queryset) self.filter_friend = True + return queryset def get_context_data(self, **kwargs): context = super(UserList, self).get_context_data(**kwargs) - Profile.prefetch_profile_cache([u.id for u in context["users"]]) context["users"] = ranker( context["users"], rank=self.paginate_by * (context["page_obj"].number - 1) ) @@ -590,17 +592,3 @@ def toggle_darkmode(request): return HttpResponseBadRequest() request.session["darkmode"] = not request.session.get("darkmode", False) return HttpResponseRedirect(path) - - -@login_required -def toggle_follow(request, user): - if request.method != "POST": - raise Http404() - - profile_to_follow = get_object_or_404(Profile, user__username=user) - - if request.profile.id == profile_to_follow.id: - raise Http404() - - Friend.toggle_friend(request.profile, profile_to_follow) - return HttpResponseRedirect(reverse("user_page", args=(user,))) diff --git a/judge/views/volunteer.py b/judge/views/volunteer.py index acd3469..64c58f9 100644 --- a/judge/views/volunteer.py +++ b/judge/views/volunteer.py @@ -19,14 +19,15 @@ def vote_problem(request): except Exception as e: return HttpResponseBadRequest() - vote, _ = VolunteerProblemVote.objects.get_or_create( - voter=request.profile, - problem=problem, - defaults={"knowledge_points": 0, "thinking_points": 0}, - ) - vote.knowledge_points = knowledge_points - vote.thinking_points = thinking_points - vote.feedback = feedback - vote.types.set(types) - vote.save() + with transaction.atomic(): + vote, _ = VolunteerProblemVote.objects.get_or_create( + voter=request.profile, + problem=problem, + defaults={"knowledge_points": 0, "thinking_points": 0}, + ) + vote.knowledge_points = knowledge_points + vote.thinking_points = thinking_points + vote.feedback = feedback + vote.types.set(types) + vote.save() return JsonResponse({}) diff --git a/judge/widgets/__init__.py b/judge/widgets/__init__.py index a9455a9..cc25941 100644 --- a/judge/widgets/__init__.py +++ b/judge/widgets/__init__.py @@ -3,4 +3,3 @@ from judge.widgets.mixins import CompressorWidgetMixin from judge.widgets.pagedown import * from judge.widgets.select2 import * from judge.widgets.datetime import * -from judge.widgets.image import * diff --git a/judge/widgets/datetime.py b/judge/widgets/datetime.py index d205e1c..6cd7fc5 100644 --- a/judge/widgets/datetime.py +++ b/judge/widgets/datetime.py @@ -1,49 +1,24 @@ from django import forms -from django.templatetags.static import static -from django.utils.html import format_html -from django.forms.utils import flatatt -from django.utils.dateparse import parse_datetime, parse_date class DateTimePickerWidget(forms.DateTimeInput): - input_type = "datetime-local" + template_name = "widgets/datetimepicker.html" - def render(self, name, value, attrs=None, renderer=None): - if value is None: - value = "" - elif isinstance(value, str): - # Attempt to parse the string back to datetime - parsed_date = parse_datetime(value) - if parsed_date is not None: - value = parsed_date.strftime("%Y-%m-%dT%H:%M") - else: - value = "" - else: - value = value.strftime("%Y-%m-%dT%H:%M") + def get_context(self, name, value, attrs): + datetimepicker_id = "datetimepicker_{name}".format(name=name) + if attrs is None: + attrs = dict() + attrs["data-target"] = "#{id}".format(id=datetimepicker_id) + attrs["class"] = "form-control datetimepicker-input" + context = super().get_context(name, value, attrs) + context["widget"]["datetimepicker_id"] = datetimepicker_id + return context - final_attrs = self.build_attrs( - attrs, {"type": self.input_type, "name": name, "value": value} + @property + def media(self): + css_url = "https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.min.css" + js_url = "https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js" + return forms.Media( + js=[js_url], + css={"screen": [css_url]}, ) - return format_html("", flatatt(final_attrs)) - - -class DatePickerWidget(forms.DateInput): - input_type = "date" - - def render(self, name, value, attrs=None, renderer=None): - if value is None: - value = "" - elif isinstance(value, str): - # Attempt to parse the string back to date - parsed_date = parse_date(value) - if parsed_date is not None: - value = parsed_date.strftime("%Y-%m-%d") - else: - value = "" - else: - value = value.strftime("%Y-%m-%d") - - final_attrs = self.build_attrs( - attrs, {"type": self.input_type, "name": name, "value": value} - ) - return format_html("", flatatt(final_attrs)) diff --git a/judge/widgets/image.py b/judge/widgets/image.py deleted file mode 100644 index 89b4fb4..0000000 --- a/judge/widgets/image.py +++ /dev/null @@ -1,16 +0,0 @@ -from django import forms - - -class ImageWidget(forms.ClearableFileInput): - template_name = "widgets/image.html" - - def __init__(self, attrs=None, width=80, height=80): - self.width = width - self.height = height - super().__init__(attrs) - - def get_context(self, name, value, attrs=None): - context = super().get_context(name, value, attrs) - context["widget"]["height"] = self.height - context["widget"]["width"] = self.height - return context diff --git a/judge/widgets/pagedown.py b/judge/widgets/pagedown.py index b0403d5..c661ddb 100644 --- a/judge/widgets/pagedown.py +++ b/judge/widgets/pagedown.py @@ -10,8 +10,8 @@ from judge.widgets.mixins import CompressorWidgetMixin __all__ = [ "PagedownWidget", "AdminPagedownWidget", - "KatexPagedownWidget", - "KatexAdminPagedownWidget", + "MathJaxPagedownWidget", + "MathJaxAdminPagedownWidget", "HeavyPreviewPageDownWidget", "HeavyPreviewAdminPageDownWidget", ] @@ -21,8 +21,8 @@ try: except ImportError: PagedownWidget = None AdminPagedownWidget = None - KatexPagedownWidget = None - KatexAdminPagedownWidget = None + MathJaxPagedownWidget = None + MathJaxAdminPagedownWidget = None HeavyPreviewPageDownWidget = None HeavyPreviewAdminPageDownWidget = None else: @@ -47,6 +47,11 @@ else: "pagedown-extra/Markdown.Extra.js", "pagedown_init.js", ] + css = { + "all": [ + "markdown.css", + ] + } class AdminPagedownWidget(PagedownWidget, admin_widgets.AdminTextareaWidget): class Media: @@ -55,25 +60,21 @@ else: "pagedown_widget.css", "content-description.css", "admin/css/pagedown.css", + "markdown.css", "pagedown.css", - "https://fonts.googleapis.com/css2?family=Fira+Code&family=Noto+Sans&display=swap", ] } js = ["admin/js/pagedown.js"] - class KatexPagedownWidget(PagedownWidget): + class MathJaxPagedownWidget(PagedownWidget): class Media: - css = { - "all": ["https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"] - } js = [ - "katex_config.js", - "https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js", - "https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js", + "mathjax3_config.js", + "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js", "pagedown_math.js", ] - class KatexAdminPagedownWidget(AdminPagedownWidget, KatexPagedownWidget): + class MathJaxAdminPagedownWidget(AdminPagedownWidget, MathJaxPagedownWidget): pass class HeavyPreviewPageDownWidget(PagedownWidget): @@ -116,13 +117,15 @@ else: js = ["dmmd-preview.js"] class HeavyPreviewAdminPageDownWidget( - KatexPagedownWidget, AdminPagedownWidget, HeavyPreviewPageDownWidget + AdminPagedownWidget, HeavyPreviewPageDownWidget ): class Media: css = { "all": [ + "pygment-github.css", "table.css", "ranks.css", + "markdown.css", "dmmd-preview.css", ] } diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po index 60a2668..42dcc74 100644 --- a/locale/vi/LC_MESSAGES/django.po +++ b/locale/vi/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: lqdoj2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-03 02:46+0700\n" +"POT-Creation-Date: 2023-02-05 20:37+0700\n" "PO-Revision-Date: 2021-07-20 03:44\n" "Last-Translator: Icyene\n" "Language-Team: Vietnamese\n" @@ -18,362 +18,309 @@ msgstr "" "X-Crowdin-Project-ID: 466004\n" "X-Crowdin-File-ID: 5\n" -#: chat_box/models.py:22 chat_box/models.py:84 -msgid "last seen" -msgstr "xem lần cuối" - -#: chat_box/models.py:55 chat_box/models.py:80 chat_box/models.py:96 -#: judge/admin/interface.py:151 judge/models/contest.py:722 -#: judge/models/contest.py:928 judge/models/course.py:129 -#: judge/models/profile.py:465 judge/models/profile.py:539 +#: chat_box/models.py:31 chat_box/models.py:51 chat_box/models.py:65 +#: judge/admin/interface.py:150 judge/models/contest.py:633 +#: judge/models/contest.py:842 judge/models/course.py:115 +#: judge/models/profile.py:368 judge/models/profile.py:444 msgid "user" msgstr "người dùng" -#: chat_box/models.py:57 judge/models/comment.py:45 -#: judge/models/notification.py:31 +#: chat_box/models.py:32 judge/models/comment.py:46 judge/models/comment.py:245 msgid "posted time" msgstr "thời gian đăng" -#: chat_box/models.py:59 judge/models/comment.py:50 +#: chat_box/models.py:33 judge/models/comment.py:54 msgid "body of comment" msgstr "nội dung bình luận" -#: chat_box/views.py:46 +#: chat_box/models.py:55 +msgid "last seen" +msgstr "xem lần cuối" + +#: chat_box/views.py:45 msgid "LQDOJ Chat" msgstr "" -#: chat_box/views.py:173 -msgid "Mute chat" -msgstr "" - -#: chat_box/views.py:450 -msgid "Recent" -msgstr "Gần đây" - -#: chat_box/views.py:454 templates/base.html:198 -#: templates/comments/content-list.html:72 -#: templates/contest/contest-list-tabs.html:6 -#: templates/contest/ranking-table.html:52 templates/course/left_sidebar.html:9 -#: templates/internal/problem/problem.html:63 -#: templates/organization/org-left-sidebar.html:12 -#: templates/organization/users-table.html:19 -#: templates/problem/left-sidebar.html:13 -#: templates/problem/problem-list-tabs.html:6 -#: templates/submission/info-base.html:12 templates/submission/list.html:394 -#: templates/submission/submission-list-tabs.html:15 -msgid "Admin" -msgstr "Admin" - -#: dmoj/settings.py:366 +#: dmoj/settings.py:361 msgid "Vietnamese" msgstr "Tiếng Việt" -#: dmoj/settings.py:367 +#: dmoj/settings.py:362 msgid "English" msgstr "" -#: dmoj/urls.py:107 -msgid "Activation key invalid" -msgstr "Mã kích hoạt không hợp lệ" - -#: dmoj/urls.py:112 -msgid "Register" -msgstr "Đăng ký" - -#: dmoj/urls.py:119 -msgid "Registration Completed" -msgstr "Đăng ký hoàn thành" - -#: dmoj/urls.py:127 -msgid "Registration not allowed" -msgstr "Đăng ký không thành công" - -#: dmoj/urls.py:135 +#: dmoj/urls.py:134 msgid "Login" msgstr "Đăng nhập" -#: dmoj/urls.py:221 templates/base.html:120 -#: templates/course/left_sidebar.html:2 +#: dmoj/urls.py:211 templates/base.html:209 #: templates/organization/org-left-sidebar.html:2 msgid "Home" msgstr "Trang chủ" -#: judge/admin/comments.py:57 +#: judge/admin/comments.py:46 #, python-format msgid "%d comment successfully hidden." msgid_plural "%d comments successfully hidden." msgstr[0] "Đã ẩn %d bình luận." -#: judge/admin/comments.py:64 +#: judge/admin/comments.py:53 msgid "Hide comments" msgstr "Ẩn bình luận" -#: judge/admin/comments.py:71 +#: judge/admin/comments.py:60 #, python-format msgid "%d comment successfully unhidden." msgid_plural "%d comments successfully unhidden." msgstr[0] "Không ẩn được %d bình luận." -#: judge/admin/comments.py:78 +#: judge/admin/comments.py:67 msgid "Unhide comments" msgstr "Hiện bình luận" -#: judge/admin/contest.py:45 +#: judge/admin/comments.py:76 +msgid "Associated page" +msgstr "Trang liên kết" + +#: judge/admin/contest.py:37 msgid "Included contests" msgstr "" -#: judge/admin/contest.py:87 judge/admin/volunteer.py:54 -#: templates/contest/clarification.html:42 templates/contest/contest.html:121 -#: templates/contest/moss.html:41 templates/internal/left-sidebar.html:2 -#: templates/internal/problem/problem.html:41 templates/problem/list.html:17 +#: judge/admin/contest.py:80 judge/admin/volunteer.py:54 +#: templates/contest/clarification.html:42 templates/contest/contest.html:101 +#: templates/contest/moss.html:41 templates/internal/base.html:29 +#: templates/internal/base.html:37 templates/problem/list.html:17 #: templates/problem/list.html:34 templates/problem/list.html:153 #: templates/user/user-problems.html:56 templates/user/user-problems.html:98 msgid "Problem" msgstr "Bài tập" -#: judge/admin/contest.py:183 templates/base.html:213 -#: templates/user/user-tabs.html:12 +#: judge/admin/contest.py:156 msgid "Settings" msgstr "Cài đặt" -#: judge/admin/contest.py:198 +#: judge/admin/contest.py:169 msgid "Scheduling" msgstr "" -#: judge/admin/contest.py:202 +#: judge/admin/contest.py:173 msgid "Details" msgstr "Chi tiết" -#: judge/admin/contest.py:214 templates/contest/macros.html:83 -#: templates/contest/macros.html:93 +#: judge/admin/contest.py:185 msgid "Format" msgstr "Thể thức" -#: judge/admin/contest.py:218 templates/contest/ranking-table.html:5 -#: templates/profile-table.html:14 templates/profile-table.html:37 -#: templates/user/user-about.html:15 templates/user/user-about.html:44 +#: judge/admin/contest.py:189 templates/contest/ranking-table.html:7 +#: templates/user/user-about.html:15 templates/user/user-about.html:45 msgid "Rating" msgstr "" -#: judge/admin/contest.py:230 +#: judge/admin/contest.py:201 msgid "Access" msgstr "Truy cập" -#: judge/admin/contest.py:240 judge/admin/problem.py:233 +#: judge/admin/contest.py:211 judge/admin/problem.py:218 msgid "Justice" msgstr "Xử phạt" -#: judge/admin/contest.py:368 +#: judge/admin/contest.py:331 #, python-format msgid "%d contest successfully marked as visible." msgid_plural "%d contests successfully marked as visible." msgstr[0] "%d kỳ thi đã được đánh dấu hiển thị." -#: judge/admin/contest.py:375 +#: judge/admin/contest.py:338 msgid "Mark contests as visible" msgstr "Đánh dấu hiển thị các kỳ thi" -#: judge/admin/contest.py:386 +#: judge/admin/contest.py:349 #, python-format msgid "%d contest successfully marked as hidden." msgid_plural "%d contests successfully marked as hidden." msgstr[0] "%d kỳ thi đã được đánh dấu ẩn." -#: judge/admin/contest.py:393 +#: judge/admin/contest.py:356 msgid "Mark contests as hidden" msgstr "Ẩn các kỳ thi" -#: judge/admin/contest.py:414 judge/admin/submission.py:241 +#: judge/admin/contest.py:377 judge/admin/submission.py:243 #, python-format msgid "%d submission was successfully scheduled for rejudging." msgid_plural "%d submissions were successfully scheduled for rejudging." msgstr[0] "%d bài nộp đã được lên lịch thành công để chấm lại." -#: judge/admin/contest.py:522 +#: judge/admin/contest.py:485 #, python-format msgid "%d participation recalculated." msgid_plural "%d participations recalculated." msgstr[0] "%d thí sinh đã được tính điểm lại." -#: judge/admin/contest.py:529 +#: judge/admin/contest.py:492 msgid "Recalculate results" msgstr "Tính toán lại kết quả" -#: judge/admin/contest.py:534 judge/admin/organization.py:98 +#: judge/admin/contest.py:497 judge/admin/organization.py:99 msgid "username" msgstr "tên đăng nhập" -#: judge/admin/contest.py:540 templates/base.html:253 +#: judge/admin/contest.py:503 templates/base.html:317 msgid "virtual" msgstr "ảo" -#: judge/admin/interface.py:35 judge/models/interface.py:51 +#: judge/admin/interface.py:35 judge/models/interface.py:46 msgid "link path" msgstr "đường dẫn" -#: judge/admin/interface.py:95 templates/course/lesson.html:10 +#: judge/admin/interface.py:94 msgid "Content" msgstr "Nội dung" -#: judge/admin/interface.py:96 +#: judge/admin/interface.py:95 msgid "Summary" msgstr "Tổng kết" -#: judge/admin/interface.py:218 +#: judge/admin/interface.py:217 msgid "object" msgstr "" -#: judge/admin/interface.py:228 +#: judge/admin/interface.py:227 msgid "Diff" msgstr "" -#: judge/admin/interface.py:233 +#: judge/admin/interface.py:232 msgid "diff" msgstr "" -#: judge/admin/organization.py:60 judge/admin/problem.py:290 -#: judge/admin/profile.py:128 +#: judge/admin/organization.py:61 judge/admin/problem.py:275 +#: judge/admin/profile.py:116 msgid "View on site" msgstr "Xem trên trang" -#: judge/admin/problem.py:56 +#: judge/admin/problem.py:53 msgid "Describe the changes you made (optional)" msgstr "Mô tả các thay đổi (tùy chọn)" -#: judge/admin/problem.py:66 -#, fuzzy -#| msgid "Problem with code already exists." -msgid "A problem with this code already exists." -msgstr "Mã bài đã tồn tại." - -#: judge/admin/problem.py:122 +#: judge/admin/problem.py:109 msgid "Memory unit" msgstr "Đơn vị bộ nhớ" -#: judge/admin/problem.py:226 +#: judge/admin/problem.py:211 msgid "Social Media" msgstr "Mạng Xã Hội" -#: judge/admin/problem.py:229 +#: judge/admin/problem.py:214 msgid "Taxonomy" msgstr "" -#: judge/admin/problem.py:230 judge/admin/problem.py:463 -#: judge/views/course.py:494 judge/views/course.py:579 -#: templates/contest/contest.html:122 -#: templates/contest/contests_summary.html:41 -#: templates/course/contest_list.html:21 templates/problem/data.html:535 +#: judge/admin/problem.py:215 judge/admin/problem.py:438 +#: templates/contest/contest.html:102 templates/problem/data.html:517 #: templates/problem/list.html:22 templates/problem/list.html:48 -#: templates/profile-table.html:31 templates/profile-table.html:41 #: templates/user/base-users-table.html:10 templates/user/user-about.html:36 -#: templates/user/user-about.html:50 templates/user/user-problems.html:58 +#: templates/user/user-about.html:52 templates/user/user-problems.html:58 msgid "Points" msgstr "Điểm" -#: judge/admin/problem.py:231 +#: judge/admin/problem.py:216 msgid "Limits" msgstr "Giới hạn" -#: judge/admin/problem.py:232 judge/admin/submission.py:351 -#: templates/base.html:164 templates/stats/tab.html:4 -#: templates/submission/list.html:345 +#: judge/admin/problem.py:217 judge/admin/submission.py:353 +#: templates/base.html:245 templates/stats/tab.html:4 +#: templates/submission/list.html:347 msgid "Language" msgstr "Ngôn ngữ" -#: judge/admin/problem.py:234 +#: judge/admin/problem.py:219 msgid "History" msgstr "Lịch sử" -#: judge/admin/problem.py:286 templates/problem/list-base.html:93 +#: judge/admin/problem.py:271 templates/problem/list-base.html:100 msgid "Authors" msgstr "Các tác giả" -#: judge/admin/problem.py:307 +#: judge/admin/problem.py:292 #, python-format msgid "%d problem successfully marked as public." msgid_plural "%d problems successfully marked as public." msgstr[0] "%d bài tập đã được đánh dấu công khai." -#: judge/admin/problem.py:314 +#: judge/admin/problem.py:299 msgid "Mark problems as public" msgstr "Công khai bài tập" -#: judge/admin/problem.py:323 +#: judge/admin/problem.py:308 #, python-format msgid "%d problem successfully marked as private." msgid_plural "%d problems successfully marked as private." msgstr[0] "%d bài tập đã được đánh dấu riêng tư." -#: judge/admin/problem.py:330 +#: judge/admin/problem.py:315 msgid "Mark problems as private" msgstr "Đánh dấu các bài tập là riêng tư" -#: judge/admin/problem.py:457 judge/admin/submission.py:314 +#: judge/admin/problem.py:432 judge/admin/submission.py:316 #: templates/problem/list.html:18 templates/problem/list.html:37 msgid "Problem code" msgstr "Mã bài" -#: judge/admin/problem.py:469 judge/admin/submission.py:320 +#: judge/admin/problem.py:444 judge/admin/submission.py:322 msgid "Problem name" msgstr "Tên bài" -#: judge/admin/problem.py:475 +#: judge/admin/problem.py:450 #, fuzzy #| msgid "contest rating" msgid "Voter rating" msgstr "rating kỳ thi" -#: judge/admin/problem.py:481 +#: judge/admin/problem.py:456 #, fuzzy #| msgid "Total points" msgid "Voter point" msgstr "Tổng điểm" -#: judge/admin/problem.py:487 +#: judge/admin/problem.py:462 msgid "Vote" msgstr "" -#: judge/admin/profile.py:47 +#: judge/admin/profile.py:40 msgid "timezone" msgstr "múi giờ" -#: judge/admin/profile.py:137 judge/admin/submission.py:327 -#: templates/notification/list.html:9 +#: judge/admin/profile.py:125 judge/admin/submission.py:329 +#: templates/notification/list.html:12 #: templates/organization/requests/log.html:9 #: templates/organization/requests/pending.html:19 -#: templates/ticket/list.html:265 +#: templates/ticket/list.html:263 msgid "User" msgstr "Thành viên" -#: judge/admin/profile.py:143 templates/registration/registration_form.html:40 -#: templates/user/edit-profile.html:123 templates/user/import/table_csv.html:8 +#: judge/admin/profile.py:131 templates/registration/registration_form.html:40 +#: templates/user/import/table_csv.html:8 msgid "Email" msgstr "Email" -#: judge/admin/profile.py:149 judge/views/register.py:36 +#: judge/admin/profile.py:137 judge/views/register.py:36 #: templates/registration/registration_form.html:68 -#: templates/user/edit-profile.html:147 +#: templates/user/edit-profile.html:113 msgid "Timezone" msgstr "Múi giờ" -#: judge/admin/profile.py:155 +#: judge/admin/profile.py:143 msgid "date joined" msgstr "ngày tham gia" -#: judge/admin/profile.py:165 +#: judge/admin/profile.py:153 #, python-format msgid "%d user have scores recalculated." msgid_plural "%d users have scores recalculated." msgstr[0] "%d người dùng đã được tính điểm lại." -#: judge/admin/profile.py:172 +#: judge/admin/profile.py:160 msgid "Recalculate scores" msgstr "Tính điểm lại" -#: judge/admin/profile.py:179 judge/admin/profile.py:186 -msgid "Username can only contain letters, digits, and underscores." -msgstr "Tên đăng nhập phải chứa ký tự, chữ số, hoặc dấu gạch dưới" - #: judge/admin/runtime.py:19 msgid "Disallowed problems" msgstr "Các bài tập không được cho phép" @@ -395,7 +342,7 @@ msgid "Capabilities" msgstr "Khả năng" #: judge/admin/submission.py:31 judge/admin/submission.py:53 -#: judge/admin/submission.py:338 +#: judge/admin/submission.py:340 msgid "None" msgstr "None" @@ -417,51 +364,48 @@ msgctxt "contest problem" msgid "%(problem)s in %(contest)s" msgstr "%(problem)s trong %(contest)s" -#: judge/admin/submission.py:213 judge/admin/submission.py:254 +#: judge/admin/submission.py:215 judge/admin/submission.py:256 msgid "You do not have the permission to rejudge submissions." msgstr "Bạn không có quyền chấm lại bài." -#: judge/admin/submission.py:225 +#: judge/admin/submission.py:227 msgid "You do not have the permission to rejudge THAT many submissions." msgstr "Bạn không có quyền chấm lại nhiều bài nộp như vậy." -#: judge/admin/submission.py:248 +#: judge/admin/submission.py:250 msgid "Rejudge the selected submissions" msgstr "Chấm lại các bài nộp đã chọn" -#: judge/admin/submission.py:302 judge/views/problem_manage.py:218 +#: judge/admin/submission.py:304 judge/views/problem_manage.py:212 #, python-format msgid "%d submission were successfully rescored." msgid_plural "%d submissions were successfully rescored." msgstr[0] "%d bài nộp đã được tính điểm lại." -#: judge/admin/submission.py:309 +#: judge/admin/submission.py:311 msgid "Rescore the selected submissions" msgstr "Tính điểm lại cái bài nộp" -#: judge/admin/submission.py:332 templates/contest/list.html:175 -#: templates/contest/list.html:217 templates/contest/list.html:254 -#: templates/contest/list.html:288 templates/notification/list.html:12 +#: judge/admin/submission.py:334 templates/notification/list.html:15 #: templates/organization/requests/log.html:10 #: templates/organization/requests/pending.html:20 #: templates/problem/list.html:154 -#: templates/submission/status-testcases.html:139 -#: templates/submission/status-testcases.html:141 -#: templates/user/user-bookmarks.html:84 +#: templates/submission/status-testcases.html:144 +#: templates/submission/status-testcases.html:146 msgid "Time" msgstr "Thời gian" -#: judge/admin/submission.py:340 +#: judge/admin/submission.py:342 #, python-format msgid "%d KB" msgstr "%d KB" -#: judge/admin/submission.py:342 +#: judge/admin/submission.py:344 #, python-format msgid "%.2f MB" msgstr "" -#: judge/admin/submission.py:345 templates/submission/status-testcases.html:146 +#: judge/admin/submission.py:347 templates/submission/status-testcases.html:151 msgid "Memory" msgstr "Bộ nhớ" @@ -477,7 +421,7 @@ msgstr "Các bài tập trong nhóm này" msgid "These problems are included in this type of problems" msgstr "Các bài tập dạng này" -#: judge/admin/volunteer.py:60 templates/internal/problem/votes.html:17 +#: judge/admin/volunteer.py:60 templates/internal/base.html:78 #: templates/problem/list.html:20 templates/problem/list.html:44 msgid "Types" msgstr "Dạng" @@ -486,6 +430,23 @@ msgstr "Dạng" msgid "Online Judge" msgstr "" +#: judge/comments.py:60 +msgid "Comment body" +msgstr "Nội dung bình luận" + +#: judge/comments.py:66 judge/views/ticket.py:78 +msgid "Your part is silent, little toad." +msgstr "Bạn không được phép bình luận." + +#: judge/comments.py:75 templates/comments/list.html:17 +msgid "" +"You need to have solved at least one problem before your voice can be heard." +msgstr "Bạn phải giải ít nhất một bài trước khi được phép bình luận." + +#: judge/comments.py:128 +msgid "Posted comment" +msgstr "Bình luận đã đăng" + #: judge/contest_format/atcoder.py:19 msgid "AtCoder" msgstr "" @@ -510,311 +471,306 @@ msgstr "" msgid "New IOI" msgstr "IOI mới" -#: judge/contest_format/ultimate.py:12 -msgid "Ultimate" -msgstr "" +#: judge/forms.py:102 judge/views/organization.py:550 +#: judge/views/register.py:62 +#, python-brace-format +msgid "You may not be part of more than {count} public groups." +msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai." -#: judge/custom_translations.py:8 -#, python-format -msgid "" -"This password is too short. It must contain at least %(min_length)d " -"character." -msgid_plural "" -"This password is too short. It must contain at least %(min_length)d " -"characters." -msgstr[0] "Mật khẩu phải chứa ít nhất %(min_length)d ký tự." - -#: judge/custom_translations.py:13 -#, python-format -msgid "Your password must contain at least %(min_length)d character." -msgid_plural "Your password must contain at least %(min_length)d characters." -msgstr[0] "Mật khẩu phải chứa ít nhất %(min_length)d ký tự." - -#: judge/custom_translations.py:17 -msgid "The two password fields didn’t match." -msgstr "Mật khẩu xác nhận không khớp." - -#: judge/custom_translations.py:18 -msgid "Your password can’t be entirely numeric." -msgstr "Mật khẩu không được toàn chữ số." - -#: judge/custom_translations.py:20 -msgid "Bug Report" -msgstr "Báo cáo lỗi" - -#: judge/custom_translations.py:21 judge/views/course.py:164 -#: templates/course/list.html:8 -msgid "Courses" -msgstr "Khóa học" - -#: judge/forms.py:120 judge/forms.py:220 -msgid "File size exceeds the maximum allowed limit of 5MB." -msgstr "File tải lên không được quá 5MB." - -#: judge/forms.py:151 +#: judge/forms.py:134 msgid "Any judge" msgstr "" -#: judge/forms.py:368 +#: judge/forms.py:309 msgid "Enter usernames separating by space" msgstr "Nhập các tên đăng nhập, cách nhau bởi dấu cách" -#: judge/forms.py:369 judge/views/stats.py:166 templates/stats/site.html:27 +#: judge/forms.py:310 judge/views/stats.py:166 templates/stats/site.html:27 msgid "New users" msgstr "Thành viên mới" -#: judge/forms.py:386 +#: judge/forms.py:327 #, python-brace-format msgid "These usernames don't exist: {usernames}" msgstr "Các tên đăng nhập này không tồn tại: {usernames}" -#: judge/forms.py:445 -msgid "Username/Email" -msgstr "Tên đăng nhập / Email" +#: judge/forms.py:386 judge/views/register.py:30 +#: templates/registration/registration_form.html:34 +#: templates/user/base-users-table.html:5 +#: templates/user/import/table_csv.html:4 +msgid "Username" +msgstr "Tên đăng nhập" -#: judge/forms.py:447 judge/views/email.py:22 -#: templates/registration/registration_form.html:46 +#: judge/forms.py:387 templates/registration/registration_form.html:46 #: templates/registration/registration_form.html:60 -#: templates/user/edit-profile.html:115 templates/user/import/table_csv.html:5 +#: templates/user/import/table_csv.html:5 msgid "Password" msgstr "Mật khẩu" -#: judge/forms.py:473 +#: judge/forms.py:413 msgid "Two Factor Authentication tokens must be 6 decimal digits." msgstr "Two Factor Authentication phải chứa 6 chữ số." -#: judge/forms.py:486 templates/registration/totp_auth.html:32 +#: judge/forms.py:426 templates/registration/totp_auth.html:32 msgid "Invalid Two Factor Authentication token." msgstr "Token Two Factor Authentication không hợp lệ." -#: judge/forms.py:493 judge/models/problem.py:133 +#: judge/forms.py:433 judge/models/problem.py:130 msgid "Problem code must be ^[a-z0-9]+$" msgstr "Mã bài phải có dạng ^[a-z0-9]+$" -#: judge/forms.py:500 +#: judge/forms.py:440 msgid "Problem with code already exists." msgstr "Mã bài đã tồn tại." -#: judge/forms.py:507 judge/models/contest.py:103 +#: judge/forms.py:447 judge/models/contest.py:90 msgid "Contest id must be ^[a-z0-9]+$" msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$" -#: judge/forms.py:514 templates/contest/clone.html:47 -#: templates/contest/search-form.html:12 templates/problem/search-form.html:39 -msgid "Group" -msgstr "Nhóm" - -#: judge/forms.py:522 +#: judge/forms.py:453 msgid "Contest with key already exists." msgstr "Mã kỳ thi đã tồn tại." -#: judge/forms.py:530 -msgid "Group doesn't exist." -msgstr "Nhóm không tồn tại." - -#: judge/forms.py:532 -msgid "You don't have permission in this group." -msgstr "Bạn không có quyền trong nhóm này." - -#: judge/forms.py:582 -msgid "This problem is duplicated." -msgstr "Bài này bị lặp" - -#: judge/jinja2/datetime.py:26 templates/blog/blog.html:28 +#: judge/jinja2/datetime.py:26 templates/blog/blog.html:29 #: templates/blog/dashboard.html:21 msgid "N j, Y, g:i a" msgstr "g:i a j b, Y" #: judge/jinja2/datetime.py:26 templates/chat/message.html:13 -#: templates/comments/content-list.html:28 #, python-brace-format msgid "{time}" msgstr "{time}" -#: judge/middleware.py:135 +#: judge/jinja2/datetime.py:26 templates/blog/content.html:11 +#, python-brace-format +msgid "on {time}" +msgstr "vào {time}" + +#: judge/middleware.py:125 msgid "No permission" msgstr "Không có quyền truy cập" -#: judge/middleware.py:136 +#: judge/middleware.py:126 msgid "You need to join this group first" msgstr "Bạn phải là thành viên của nhóm." -#: judge/middleware.py:146 judge/middleware.py:147 +#: judge/middleware.py:136 judge/middleware.py:137 msgid "No such group" msgstr "Nhóm không tồn tại" -#: judge/models/bookmark.py:17 judge/models/comment.py:164 -#: judge/models/pagevote.py:16 +#: judge/models/bookmark.py:17 judge/models/comment.py:49 +#: judge/models/comment.py:226 judge/models/pagevote.py:13 msgid "associated page" msgstr "trang tương ứng" -#: judge/models/bookmark.py:20 judge/models/comment.py:49 -#: judge/models/pagevote.py:19 judge/models/problem.py:744 -msgid "votes" -msgstr "bình chọn" - -#: judge/models/bookmark.py:30 +#: judge/models/bookmark.py:44 +#, fuzzy +#| msgid "Bookmark" msgid "bookmark" msgstr "Lưu" -#: judge/models/bookmark.py:31 +#: judge/models/bookmark.py:45 +#, fuzzy +#| msgid "Bookmark" msgid "bookmarks" msgstr "Lưu" -#: judge/models/bookmark.py:52 +#: judge/models/bookmark.py:59 +#, fuzzy +#| msgid "Bookmark" msgid "make bookmark" msgstr "Lưu" -#: judge/models/bookmark.py:53 +#: judge/models/bookmark.py:60 +#, fuzzy +#| msgid "Bookmark" msgid "make bookmarks" msgstr "Lưu" -#: judge/models/comment.py:44 +#: judge/models/choices.py:59 +msgid "Leave as LaTeX" +msgstr "Để định dạng LaTeX" + +#: judge/models/choices.py:60 +msgid "SVG with PNG fallback" +msgstr "" + +#: judge/models/choices.py:61 +msgid "MathML only" +msgstr "chỉ dùng MathML" + +#: judge/models/choices.py:62 +msgid "MathJax with SVG/PNG fallback" +msgstr "" + +#: judge/models/choices.py:63 +msgid "Detect best quality" +msgstr "" + +#: judge/models/comment.py:26 +msgid "Page code must be ^[pcs]:[a-z0-9]+$|^b:\\d+$" +msgstr "Mã trang phải có dạng ^[pcs]:[a-z0-9]+$|^b:\\d+$" + +#: judge/models/comment.py:45 msgid "commenter" msgstr "người bình luận" -#: judge/models/comment.py:51 +#: judge/models/comment.py:53 judge/models/pagevote.py:16 +#: judge/models/problem.py:686 +msgid "votes" +msgstr "bình chọn" + +#: judge/models/comment.py:55 msgid "hide the comment" msgstr "ẩn bình luận" -#: judge/models/comment.py:54 +#: judge/models/comment.py:58 msgid "parent" msgstr "" -#: judge/models/comment.py:65 +#: judge/models/comment.py:67 judge/models/comment.py:247 msgid "comment" msgstr "bình luận" -#: judge/models/comment.py:66 +#: judge/models/comment.py:68 msgid "comments" msgstr "" -#: judge/models/comment.py:125 -msgid "Editorial for " -msgstr "Hướng dẫn cho {0}" +#: judge/models/comment.py:163 judge/models/problem.py:654 +#, python-format +msgid "Editorial for %s" +msgstr "" -#: judge/models/comment.py:157 +#: judge/models/comment.py:219 msgid "comment vote" msgstr "" -#: judge/models/comment.py:158 +#: judge/models/comment.py:220 msgid "comment votes" msgstr "" -#: judge/models/comment.py:169 +#: judge/models/comment.py:232 msgid "Override comment lock" msgstr "" -#: judge/models/contest.py:50 +#: judge/models/comment.py:241 +msgid "owner" +msgstr "" + +#: judge/models/comment.py:249 judge/models/message.py:28 +msgid "read" +msgstr "" + +#: judge/models/comment.py:250 +msgid "category" +msgstr "" + +#: judge/models/comment.py:253 +msgid "html link to comments, used for non-comments" +msgstr "" + +#: judge/models/comment.py:259 +msgid "who trigger, used for non-comment" +msgstr "" + +#: judge/models/contest.py:37 msgid "Invalid colour." msgstr "" -#: judge/models/contest.py:54 +#: judge/models/contest.py:41 msgid "tag name" msgstr "" -#: judge/models/contest.py:58 +#: judge/models/contest.py:45 msgid "Lowercase letters and hyphens only." msgstr "" -#: judge/models/contest.py:63 +#: judge/models/contest.py:50 msgid "tag colour" msgstr "" -#: judge/models/contest.py:65 +#: judge/models/contest.py:52 msgid "tag description" msgstr "" -#: judge/models/contest.py:86 +#: judge/models/contest.py:73 msgid "contest tag" msgstr "" -#: judge/models/contest.py:87 judge/models/contest.py:267 +#: judge/models/contest.py:74 judge/models/contest.py:242 msgid "contest tags" msgstr "nhãn kỳ thi" -#: judge/models/contest.py:95 +#: judge/models/contest.py:82 msgid "Visible" msgstr "Hiển thị" -#: judge/models/contest.py:96 +#: judge/models/contest.py:83 msgid "Hidden for duration of contest" msgstr "Ẩn trong thời gian kỳ thi" -#: judge/models/contest.py:97 +#: judge/models/contest.py:84 msgid "Hidden for duration of participation" msgstr "Ẩn trong thời gian tham gia" -#: judge/models/contest.py:101 +#: judge/models/contest.py:88 msgid "contest id" msgstr "ID kỳ thi" -#: judge/models/contest.py:106 +#: judge/models/contest.py:93 msgid "contest name" msgstr "tên kỳ thi" -#: judge/models/contest.py:110 judge/models/interface.py:80 -#: judge/models/problem.py:694 -msgid "authors" -msgstr "tác giả" - -#: judge/models/contest.py:111 +#: judge/models/contest.py:97 msgid "These users will be able to edit the contest." msgstr "Những người dùng này có quyền chỉnh sửa kỳ thi." -#: judge/models/contest.py:116 judge/models/problem.py:157 -msgid "curators" -msgstr "quản lý" - -#: judge/models/contest.py:118 +#: judge/models/contest.py:103 msgid "" "These users will be able to edit the contest, but will not be listed as " "authors." msgstr "Những người dùng này là tác giả và có quyền chỉnh sửa kỳ thi." -#: judge/models/contest.py:126 judge/models/problem.py:167 -msgid "testers" -msgstr "" - -#: judge/models/contest.py:128 +#: judge/models/contest.py:112 msgid "These users will be able to view the contest, but not edit it." msgstr "" "Những người dùng này có thể thấy kỳ thi nhưng không có quyền chỉnh sửa." -#: judge/models/contest.py:133 judge/models/runtime.py:217 +#: judge/models/contest.py:117 judge/models/course.py:158 +#: judge/models/runtime.py:211 msgid "description" msgstr "mô tả" -#: judge/models/contest.py:135 judge/models/problem.py:610 -#: judge/models/runtime.py:222 +#: judge/models/contest.py:119 judge/models/problem.py:559 +#: judge/models/runtime.py:216 msgid "problems" msgstr "bài tập" -#: judge/models/contest.py:137 judge/models/contest.py:727 +#: judge/models/contest.py:121 judge/models/contest.py:638 msgid "start time" msgstr "thời gian bắt đầu" -#: judge/models/contest.py:138 +#: judge/models/contest.py:122 msgid "end time" msgstr "thời gian kết thúc" -#: judge/models/contest.py:140 judge/models/problem.py:186 -#: judge/models/problem.py:645 +#: judge/models/contest.py:124 judge/models/problem.py:183 +#: judge/models/problem.py:594 msgid "time limit" msgstr "giới hạn thời gian" -#: judge/models/contest.py:144 +#: judge/models/contest.py:128 msgid "" "Format hh:mm:ss. For example, if you want a 2-hour contest, enter 02:00:00" msgstr "" "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy " "nhập 02:00:00" -#: judge/models/contest.py:148 +#: judge/models/contest.py:132 msgid "freeze after" msgstr "đóng băng sau" -#: judge/models/contest.py:152 +#: judge/models/contest.py:136 msgid "" "Format hh:mm:ss. For example, if you want to freeze contest after 2 hours, " "enter 02:00:00" @@ -822,12 +778,12 @@ msgstr "" "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn đóng băng kỳ thi sau 2h, " "hãy nhập 02:00:00" -#: judge/models/contest.py:156 judge/models/course.py:27 -#: judge/models/course.py:167 judge/models/problem.py:225 +#: judge/models/contest.py:140 judge/models/course.py:28 +#: judge/models/course.py:164 judge/models/problem.py:222 msgid "publicly visible" msgstr "công khai" -#: judge/models/contest.py:159 +#: judge/models/contest.py:143 msgid "" "Should be set even for organization-private contests, where it determines " "whether the contest is visible to members of the specified organizations." @@ -835,92 +791,84 @@ msgstr "" "Đánh dấu ngay cả với các kỳ thi riêng tư của nhóm, quyết định việc kỳ thi có " "được hiển thị với các thành viên hay không." -#: judge/models/contest.py:165 +#: judge/models/contest.py:149 msgid "contest rated" msgstr "kỳ thi được xếp hạng" -#: judge/models/contest.py:166 +#: judge/models/contest.py:150 msgid "Whether this contest can be rated." msgstr "Quyết định kỳ thi có được xếp hạng không." -#: judge/models/contest.py:170 +#: judge/models/contest.py:154 msgid "scoreboard visibility" msgstr "khả năng hiển thị của bảng điểm" -#: judge/models/contest.py:173 +#: judge/models/contest.py:157 msgid "Scoreboard visibility through the duration of the contest" msgstr "Khả năng hiển thị của bảng điểm trong thời gian kỳ thi" -#: judge/models/contest.py:178 +#: judge/models/contest.py:162 msgid "view contest scoreboard" msgstr "xem bảng điểm kỳ thi" -#: judge/models/contest.py:181 +#: judge/models/contest.py:165 msgid "These users will be able to view the scoreboard." msgstr "Những người dùng này được phép xem bảng điểm." -#: judge/models/contest.py:184 -msgid "public scoreboard" -msgstr "công khai bảng điểm" - -#: judge/models/contest.py:185 -msgid "Ranking page is public even for private contests." -msgstr "Trang xếp hạng được công khai, kể cả cho kỳ thi riêng tư." - -#: judge/models/contest.py:189 +#: judge/models/contest.py:168 msgid "no comments" msgstr "không bình luận" -#: judge/models/contest.py:190 +#: judge/models/contest.py:169 msgid "Use clarification system instead of comments." msgstr "Dùng hệ thống thông báo thay vì bình luận." -#: judge/models/contest.py:195 +#: judge/models/contest.py:174 msgid "Rating floor for contest" msgstr "Cận dưới rating được xếp hạng trong kỳ thi" -#: judge/models/contest.py:201 +#: judge/models/contest.py:180 msgid "Rating ceiling for contest" msgstr "Cận trên rating được xếp hạng trong kỳ thi" -#: judge/models/contest.py:206 +#: judge/models/contest.py:185 msgid "rate all" msgstr "xếp hạng tất cả" -#: judge/models/contest.py:207 +#: judge/models/contest.py:186 msgid "Rate all users who joined." msgstr "Xếp hạng tất cả người dùng đã tham gia (kể cả không nộp)." -#: judge/models/contest.py:212 +#: judge/models/contest.py:191 msgid "exclude from ratings" msgstr "không xếp hạng" -#: judge/models/contest.py:217 +#: judge/models/contest.py:196 msgid "private to specific users" msgstr "riêng tư với các người dùng này" -#: judge/models/contest.py:222 +#: judge/models/contest.py:201 msgid "private contestants" msgstr "thí sinh riêng tư" -#: judge/models/contest.py:223 +#: judge/models/contest.py:202 msgid "If private, only these users may see the contest" msgstr "Nếu riêng tư, chỉ những người dùng này mới thấy kỳ thi" -#: judge/models/contest.py:227 +#: judge/models/contest.py:206 msgid "hide problem tags" msgstr "ẩn nhãn kỳ thi" -#: judge/models/contest.py:228 +#: judge/models/contest.py:207 msgid "Whether problem tags should be hidden by default." msgstr "" "Quyết định việc nhãn bài tập (DP, Tham lam, ...) được ẩn trong kỳ thi không." -#: judge/models/contest.py:232 +#: judge/models/contest.py:211 msgid "run pretests only" msgstr "chỉ chạy pretests" -#: judge/models/contest.py:234 +#: judge/models/contest.py:213 msgid "" "Whether judges should grade pretests only, versus all testcases. Commonly " "set during a contest, then unset prior to rejudging user submissions when " @@ -929,57 +877,51 @@ msgstr "" "Quyết định việc các máy chấm chỉ chấm pretests thay vì tất cả các test. Sau " "kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài." -#: judge/models/contest.py:241 judge/models/interface.py:97 -#: judge/models/problem.py:285 +#: judge/models/contest.py:220 judge/models/interface.py:92 +#: judge/models/problem.py:279 msgid "private to organizations" msgstr "riêng tư với các tổ chức" -#: judge/models/contest.py:246 judge/models/course.py:33 -#: judge/models/interface.py:93 judge/models/problem.py:281 -#: judge/models/profile.py:167 +#: judge/models/contest.py:225 judge/models/course.py:34 +#: judge/models/interface.py:88 judge/models/problem.py:275 +#: judge/models/profile.py:130 msgid "organizations" msgstr "tổ chức" -#: judge/models/contest.py:247 +#: judge/models/contest.py:226 msgid "If private, only these organizations may see the contest" msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi" -#: judge/models/contest.py:250 -#, fuzzy -#| msgid "contest name" -msgid "contest in course" -msgstr "tên kỳ thi" - -#: judge/models/contest.py:254 judge/models/problem.py:256 +#: judge/models/contest.py:229 judge/models/problem.py:253 msgid "OpenGraph image" msgstr "Hình ảnh OpenGraph" -#: judge/models/contest.py:257 +#: judge/models/contest.py:232 judge/models/profile.py:85 msgid "Logo override image" msgstr "Hình ảnh ghi đè logo" -#: judge/models/contest.py:262 +#: judge/models/contest.py:237 msgid "" "This image will replace the default site logo for users inside the contest." msgstr "Ảnh này sẽ thay thế cho logo mặc định trong kỳ thi." -#: judge/models/contest.py:270 +#: judge/models/contest.py:245 msgid "the amount of live participants" msgstr "số lượng thí sinh thi trực tiếp" -#: judge/models/contest.py:274 +#: judge/models/contest.py:249 msgid "contest summary" msgstr "tổng kết kỳ thi" -#: judge/models/contest.py:276 judge/models/problem.py:262 +#: judge/models/contest.py:251 judge/models/problem.py:259 msgid "Plain-text, shown in meta description tag, e.g. for social media." msgstr "" -#: judge/models/contest.py:280 judge/models/profile.py:109 +#: judge/models/contest.py:255 judge/models/profile.py:80 msgid "access code" msgstr "mật khẩu truy cập" -#: judge/models/contest.py:285 +#: judge/models/contest.py:260 msgid "" "An optional code to prompt contestants before they are allowed to join the " "contest. Leave it blank to disable." @@ -987,488 +929,453 @@ msgstr "" "Mật khẩu truy cập cho các thí sinh muốn tham gia kỳ thi. Để trống nếu không " "dùng." -#: judge/models/contest.py:291 judge/models/problem.py:244 +#: judge/models/contest.py:266 judge/models/problem.py:241 msgid "personae non gratae" msgstr "Chặn tham gia" -#: judge/models/contest.py:293 +#: judge/models/contest.py:268 msgid "Bans the selected users from joining this contest." msgstr "Cấm những người dùng được chọn tham gia kỳ thi." -#: judge/models/contest.py:296 +#: judge/models/contest.py:271 msgid "contest format" msgstr "format kỳ thi" -#: judge/models/contest.py:300 +#: judge/models/contest.py:275 msgid "The contest format module to use." msgstr "Format kỳ thi sử dụng." -#: judge/models/contest.py:303 +#: judge/models/contest.py:278 msgid "contest format configuration" msgstr "Tùy chỉnh format kỳ thi" -#: judge/models/contest.py:307 +#: judge/models/contest.py:282 msgid "" "A JSON object to serve as the configuration for the chosen contest format " "module. Leave empty to use None. Exact format depends on the contest format " "selected." msgstr "" -#: judge/models/contest.py:320 +#: judge/models/contest.py:295 msgid "precision points" msgstr "Hiển thị điểm" -#: judge/models/contest.py:323 +#: judge/models/contest.py:298 msgid "Number of digits to round points to." msgstr "Số chữ số thập phân trên bảng điểm." -#: judge/models/contest.py:326 -msgid "rate limit" -msgstr "giới hạn bài nộp" - -#: judge/models/contest.py:331 -msgid "" -"Maximum number of submissions per minute. Leave empty if you don't want rate " -"limit." -msgstr "Số bài nộp tối đa mỗi phút. Để trống nếu không muốn giới hạn." - -#: judge/models/contest.py:362 -msgid "End time must be after start time" -msgstr "Thời gian kết thúc phải sau thời gian bắt đầu" - -#: judge/models/contest.py:681 +#: judge/models/contest.py:606 msgid "See private contests" msgstr "" -#: judge/models/contest.py:682 +#: judge/models/contest.py:607 msgid "Edit own contests" msgstr "" -#: judge/models/contest.py:683 +#: judge/models/contest.py:608 msgid "Edit all contests" msgstr "" -#: judge/models/contest.py:684 +#: judge/models/contest.py:609 msgid "Clone contest" msgstr "" -#: judge/models/contest.py:685 templates/contest/moss.html:72 +#: judge/models/contest.py:610 templates/contest/moss.html:72 msgid "MOSS contest" msgstr "" -#: judge/models/contest.py:686 +#: judge/models/contest.py:611 msgid "Rate contests" msgstr "" -#: judge/models/contest.py:687 +#: judge/models/contest.py:612 msgid "Contest access codes" msgstr "" -#: judge/models/contest.py:688 +#: judge/models/contest.py:613 msgid "Create private contests" msgstr "" -#: judge/models/contest.py:689 +#: judge/models/contest.py:614 msgid "Change contest visibility" msgstr "" -#: judge/models/contest.py:690 +#: judge/models/contest.py:615 msgid "Edit contest problem label script" msgstr "Cách hiển thị thứ tự bài tập" -#: judge/models/contest.py:692 judge/models/contest.py:853 -#: judge/models/contest.py:931 judge/models/contest.py:961 -#: judge/models/contest.py:1040 judge/models/submission.py:116 +#: judge/models/contest.py:617 judge/models/contest.py:764 +#: judge/models/contest.py:845 judge/models/contest.py:875 +#: judge/models/course.py:178 judge/models/submission.py:116 msgid "contest" msgstr "kỳ thi" -#: judge/models/contest.py:693 +#: judge/models/contest.py:618 msgid "contests" msgstr "kỳ thi" -#: judge/models/contest.py:716 +#: judge/models/contest.py:627 msgid "associated contest" msgstr "" -#: judge/models/contest.py:729 judge/models/course.py:185 +#: judge/models/contest.py:640 msgid "score" msgstr "điểm" -#: judge/models/contest.py:730 +#: judge/models/contest.py:641 msgid "cumulative time" msgstr "tổng thời gian" -#: judge/models/contest.py:732 +#: judge/models/contest.py:643 msgid "is disqualified" msgstr "đã bị loại" -#: judge/models/contest.py:734 +#: judge/models/contest.py:645 msgid "Whether this participation is disqualified." msgstr "Quyết định thí sinh có bị loại không." -#: judge/models/contest.py:736 +#: judge/models/contest.py:647 msgid "tie-breaking field" msgstr "" -#: judge/models/contest.py:738 +#: judge/models/contest.py:649 msgid "virtual participation id" msgstr "id lần tham gia ảo" -#: judge/models/contest.py:740 +#: judge/models/contest.py:651 msgid "0 means non-virtual, otherwise the n-th virtual participation." msgstr "0 nghĩa là tham gia chính thức, ngược lại là lần tham gia ảo thứ n." -#: judge/models/contest.py:743 +#: judge/models/contest.py:654 msgid "contest format specific data" msgstr "" -#: judge/models/contest.py:746 +#: judge/models/contest.py:657 msgid "same as format_data, but including frozen results" msgstr "" -#: judge/models/contest.py:750 +#: judge/models/contest.py:661 +#, fuzzy +#| msgid "score" msgid "final score" msgstr "điểm" -#: judge/models/contest.py:752 +#: judge/models/contest.py:663 +#, fuzzy +#| msgid "cumulative time" msgid "final cumulative time" msgstr "tổng thời gian" -#: judge/models/contest.py:828 +#: judge/models/contest.py:739 #, python-format msgid "%s spectating in %s" msgstr "%s đang theo dõi trong %s" -#: judge/models/contest.py:833 +#: judge/models/contest.py:744 #, python-format msgid "%s in %s, v%d" msgstr "%s trong %s, v%d" -#: judge/models/contest.py:838 +#: judge/models/contest.py:749 #, python-format msgid "%s in %s" msgstr "%s trong %s" -#: judge/models/contest.py:841 +#: judge/models/contest.py:752 msgid "contest participation" msgstr "lần tham gia kỳ thi" -#: judge/models/contest.py:842 +#: judge/models/contest.py:753 msgid "contest participations" msgstr "lần tham gia kỳ thi" -#: judge/models/contest.py:849 judge/models/contest.py:902 -#: judge/models/contest.py:964 judge/models/problem.py:609 -#: judge/models/problem.py:616 judge/models/problem.py:637 -#: judge/models/problem.py:668 judge/models/problem_data.py:50 +#: judge/models/contest.py:760 judge/models/contest.py:816 +#: judge/models/contest.py:878 judge/models/problem.py:558 +#: judge/models/problem.py:565 judge/models/problem.py:586 +#: judge/models/problem.py:617 judge/models/problem_data.py:50 msgid "problem" msgstr "bài tập" -#: judge/models/contest.py:857 judge/models/contest.py:914 -#: judge/models/course.py:166 judge/models/course.py:199 -#: judge/models/problem.py:209 +#: judge/models/contest.py:768 judge/models/contest.py:828 +#: judge/models/course.py:182 judge/models/problem.py:206 msgid "points" msgstr "điểm" -#: judge/models/contest.py:858 +#: judge/models/contest.py:769 msgid "partial" msgstr "thành phần" -#: judge/models/contest.py:859 judge/models/contest.py:916 +#: judge/models/contest.py:770 judge/models/contest.py:830 msgid "is pretested" msgstr "dùng pretest" -#: judge/models/contest.py:860 judge/models/course.py:165 -#: judge/models/course.py:184 judge/models/course.py:198 -#: judge/models/interface.py:48 +#: judge/models/contest.py:771 judge/models/interface.py:43 msgid "order" msgstr "thứ tự" -#: judge/models/contest.py:862 +#: judge/models/contest.py:773 +msgid "0 to not show testcases, 1 to show" +msgstr "0 để ẩn test, 1 để hiện" + +#: judge/models/contest.py:774 msgid "visible testcases" msgstr "hiển thị test" -#: judge/models/contest.py:867 +#: judge/models/contest.py:781 msgid "Maximum number of submissions for this problem, or 0 for no limit." msgstr "Số lần nộp tối đa, đặt là 0 nếu không có giới hạn." -#: judge/models/contest.py:869 +#: judge/models/contest.py:783 msgid "max submissions" msgstr "số lần nộp tối đa" -#: judge/models/contest.py:872 +#: judge/models/contest.py:786 msgid "Why include a problem you can't submit to?" msgstr "" -#: judge/models/contest.py:876 +#: judge/models/contest.py:790 #, fuzzy #| msgid "Only for format new IOI. Separated by commas, e.g: 2, 3" msgid "Separated by commas, e.g: 2, 3" msgstr "" "Chỉ dùng với format IOI mới. Các sub cách nhau bởi dấu phẩy. Ví dụ: 2, 3" -#: judge/models/contest.py:877 +#: judge/models/contest.py:791 +#, fuzzy +#| msgid "frozen subtasks" msgid "hidden subtasks" msgstr "Đóng băng subtasks" -#: judge/models/contest.py:889 +#: judge/models/contest.py:803 msgid "contest problem" msgstr "bài trong kỳ thi" -#: judge/models/contest.py:890 +#: judge/models/contest.py:804 msgid "contest problems" msgstr "bài trong kỳ thi" -#: judge/models/contest.py:896 judge/models/submission.py:274 +#: judge/models/contest.py:810 judge/models/submission.py:233 msgid "submission" msgstr "bài nộp" -#: judge/models/contest.py:909 judge/models/contest.py:935 +#: judge/models/contest.py:823 judge/models/contest.py:849 msgid "participation" msgstr "lần tham gia" -#: judge/models/contest.py:917 +#: judge/models/contest.py:831 msgid "Whether this submission was ran only on pretests." msgstr "Quyết định bài nộp chỉ được chạy trên pretest không." -#: judge/models/contest.py:922 +#: judge/models/contest.py:836 msgid "contest submission" msgstr "bài nộp kỳ thi" -#: judge/models/contest.py:923 +#: judge/models/contest.py:837 msgid "contest submissions" msgstr "bài nộp kỳ thi" -#: judge/models/contest.py:939 +#: judge/models/contest.py:853 msgid "rank" msgstr "rank" -#: judge/models/contest.py:940 +#: judge/models/contest.py:854 msgid "rating" msgstr "rating" -#: judge/models/contest.py:941 +#: judge/models/contest.py:855 msgid "raw rating" msgstr "rating thật" -#: judge/models/contest.py:942 +#: judge/models/contest.py:856 msgid "contest performance" msgstr "" -#: judge/models/contest.py:943 +#: judge/models/contest.py:857 msgid "last rated" msgstr "lần cuối được xếp hạng" -#: judge/models/contest.py:947 +#: judge/models/contest.py:861 msgid "contest rating" msgstr "rating kỳ thi" -#: judge/models/contest.py:948 +#: judge/models/contest.py:862 msgid "contest ratings" msgstr "rating kỳ thi" -#: judge/models/contest.py:972 +#: judge/models/contest.py:886 msgid "contest moss result" msgstr "kết quả MOSS kỳ thi" -#: judge/models/contest.py:973 +#: judge/models/contest.py:887 msgid "contest moss results" msgstr "kết quả MOSS kỳ thi" -#: judge/models/contest.py:978 +#: judge/models/contest.py:892 msgid "clarified problem" msgstr "" -#: judge/models/contest.py:980 +#: judge/models/contest.py:894 msgid "clarification body" msgstr "" -#: judge/models/contest.py:982 +#: judge/models/contest.py:896 msgid "clarification timestamp" msgstr "" -#: judge/models/contest.py:1001 -msgid "contests summary" -msgstr "tổng kết kỳ thi" - -#: judge/models/contest.py:1002 -msgid "contests summaries" -msgstr "tổng kết kỳ thi" - -#: judge/models/contest.py:1013 judge/models/contest.py:1020 -msgid "official contest category" -msgstr "loại kỳ thi chính thức" - -#: judge/models/contest.py:1021 -msgid "official contest categories" -msgstr "các loại kỳ thi chính thức" - -#: judge/models/contest.py:1026 judge/models/contest.py:1033 -msgid "official contest location" -msgstr "địa điểm kỳ thi chính thức" - -#: judge/models/contest.py:1034 -msgid "official contest locations" -msgstr "các địa điểm kỳ thi chính thức" - -#: judge/models/contest.py:1046 -msgid "contest category" -msgstr "loại kỳ thi" - -#: judge/models/contest.py:1049 -msgid "year" -msgstr "năm" - -#: judge/models/contest.py:1052 -msgid "contest location" -msgstr "địa điểm kỳ thi" - -#: judge/models/contest.py:1057 -msgid "official contest" -msgstr "kỳ thi chính thức" - -#: judge/models/contest.py:1058 -msgid "official contests" -msgstr "các kỳ thi chính thức" - -#: judge/models/course.py:12 templates/course/grades.html:88 -#: templates/course/grades_lesson.html:88 -msgid "Student" -msgstr "Học sinh" - -#: judge/models/course.py:13 -msgid "Assistant" -msgstr "Trợ giảng" - -#: judge/models/course.py:14 -msgid "Teacher" -msgstr "Giáo viên" - -#: judge/models/course.py:23 +#: judge/models/course.py:21 +#, fuzzy +#| msgid "username" msgid "course name" -msgstr "tên khóa học" +msgstr "tên đăng nhập" + +#: judge/models/course.py:23 judge/models/profile.py:46 +msgid "organization description" +msgstr "mô tả tổ chức" #: judge/models/course.py:25 -msgid "course description" -msgstr "Mô tả khóa học" +#, fuzzy +#| msgid "end time" +msgid "ending time" +msgstr "thời gian kết thúc" -#: judge/models/course.py:34 +#: judge/models/course.py:35 +#, fuzzy +#| msgid "If private, only these organizations may see the contest" msgid "If private, only these organizations may see the course" -msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được khóa học" - -#: judge/models/course.py:38 -msgid "course slug" -msgstr "url khóa học" +msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi" #: judge/models/course.py:39 +msgid "course slug" +msgstr "" + +#: judge/models/course.py:40 +#, fuzzy +#| msgid "Organization name shown in URL" msgid "Course name shown in URL" msgstr "Tên được hiển thị trong đường dẫn" -#: judge/models/course.py:42 judge/models/profile.py:65 +#: judge/models/course.py:43 judge/models/profile.py:38 msgid "Only alphanumeric and hyphens" -msgstr "Chỉ chứa chữ cái và dấu gạch ngang (-)" +msgstr "" -#: judge/models/course.py:46 +#: judge/models/course.py:47 +#, fuzzy +#| msgid "Registration" msgid "public registration" -msgstr "Cho phép đăng ký" +msgstr "Đăng ký" -#: judge/models/course.py:50 +#: judge/models/course.py:51 msgid "course image" -msgstr "hình ảnh khóa học" +msgstr "" -#: judge/models/course.py:123 judge/models/course.py:159 +#: judge/models/course.py:109 judge/models/course.py:147 +#: judge/models/course.py:172 msgid "course" -msgstr "khóa học" +msgstr "" -#: judge/models/course.py:163 +#: judge/models/course.py:117 +msgid "user_of_course" +msgstr "" + +#: judge/models/course.py:121 +msgid "Student" +msgstr "" + +#: judge/models/course.py:122 +msgid "Assistant" +msgstr "" + +#: judge/models/course.py:123 +msgid "Teacher" +msgstr "" + +#: judge/models/course.py:152 #, fuzzy -#| msgid "message title" -msgid "lesson title" -msgstr "tiêu đề tin nhắn" +#| msgid "user profiles" +msgid "course files" +msgstr "thông tin người dùng" -#: judge/models/course.py:164 -#, fuzzy -#| msgid "post content" -msgid "lesson content" -msgstr "đăng nội dung" - -#: judge/models/interface.py:29 +#: judge/models/interface.py:24 msgid "configuration item" msgstr "" -#: judge/models/interface.py:30 +#: judge/models/interface.py:25 msgid "miscellaneous configuration" msgstr "" -#: judge/models/interface.py:42 +#: judge/models/interface.py:37 msgid "navigation item" msgstr "mục điều hướng" -#: judge/models/interface.py:43 +#: judge/models/interface.py:38 msgid "navigation bar" msgstr "thanh điều hướng" -#: judge/models/interface.py:49 +#: judge/models/interface.py:44 msgid "identifier" msgstr "" -#: judge/models/interface.py:50 +#: judge/models/interface.py:45 msgid "label" msgstr "nhãn" -#: judge/models/interface.py:53 +#: judge/models/interface.py:48 msgid "highlight regex" msgstr "" -#: judge/models/interface.py:57 +#: judge/models/interface.py:52 msgid "parent item" msgstr "mục cha" -#: judge/models/interface.py:79 +#: judge/models/interface.py:74 msgid "post title" msgstr "tiêu đề bài đăng" -#: judge/models/interface.py:81 +#: judge/models/interface.py:75 judge/models/problem.py:643 +msgid "authors" +msgstr "tác giả" + +#: judge/models/interface.py:76 msgid "slug" msgstr "slug" -#: judge/models/interface.py:82 judge/models/problem.py:692 +#: judge/models/interface.py:77 judge/models/problem.py:641 msgid "public visibility" msgstr "khả năng hiển thị công khai" -#: judge/models/interface.py:83 +#: judge/models/interface.py:78 msgid "sticky" msgstr "nổi lên đầu" -#: judge/models/interface.py:84 +#: judge/models/interface.py:79 msgid "publish after" msgstr "đăng sau khi" -#: judge/models/interface.py:85 +#: judge/models/interface.py:80 msgid "post content" msgstr "đăng nội dung" -#: judge/models/interface.py:86 +#: judge/models/interface.py:81 msgid "post summary" msgstr "đăng tổng kết" -#: judge/models/interface.py:88 +#: judge/models/interface.py:83 msgid "openGraph image" msgstr "hình ảnh openGraph" -#: judge/models/interface.py:94 +#: judge/models/interface.py:89 msgid "If private, only these organizations may see the blog post." msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được bài đăng." -#: judge/models/interface.py:141 +#: judge/models/interface.py:129 msgid "Edit all posts" msgstr "Chỉnh sửa tất cả bài đăng" -#: judge/models/interface.py:142 +#: judge/models/interface.py:130 msgid "blog post" msgstr "bài đăng" -#: judge/models/interface.py:143 +#: judge/models/interface.py:131 msgid "blog posts" msgstr "bài đăng" @@ -1492,236 +1399,168 @@ msgstr "người nhận" msgid "message timestamp" msgstr "thời gian gửi" -#: judge/models/message.py:28 -msgid "read" -msgstr "" - #: judge/models/message.py:33 msgid "messages in the thread" msgstr "tin nhắn trong chuỗi" -#: judge/models/notification.py:11 -msgid "Added a post" -msgstr "Thêm bài đăng" - -#: judge/models/notification.py:12 -msgid "You are added to a group" -msgstr "Bạn đã được thêm vào nhóm." - -#: judge/models/notification.py:13 -msgid "You have a new comment" -msgstr "Bạn có bình luận mới" - -#: judge/models/notification.py:14 -msgid "Deleted a post" -msgstr "Đã xóa bài đăng" - -#: judge/models/notification.py:15 -msgid "Rejected a post" -msgstr "Đã từ chối bài đăng" - -#: judge/models/notification.py:16 -msgid "Approved a post" -msgstr "Đã chấp thuận bài đăng" - -#: judge/models/notification.py:17 -msgid "Edited a post" -msgstr "Đã chỉnh sửa bài đăng" - -#: judge/models/notification.py:18 -msgid "Mentioned you" -msgstr "Đã nhắc đến bạn" - -#: judge/models/notification.py:19 -msgid "Replied you" -msgstr "Đã phản hồi bạn" - -#: judge/models/notification.py:20 templates/blog/list.html:47 -msgid "Ticket" -msgstr "Báo cáo" - -#: judge/models/notification.py:27 -msgid "owner" -msgstr "" - -#: judge/models/notification.py:32 -msgid "category" -msgstr "" - -#: judge/models/notification.py:35 -msgid "html link to comments, used for non-comments" -msgstr "" - -#: judge/models/notification.py:41 -msgid "who trigger, used for non-comment" -msgstr "" - -#: judge/models/notification.py:54 -msgid "The problem is public to: " -msgstr "Bài tập được công khai trong: " - -#: judge/models/notification.py:56 -msgid "The problem is private to: " -msgstr "Bài tập riêng tư trong: " - -#: judge/models/notification.py:59 -msgid "The problem is public to everyone." -msgstr "Bài tập được công khai với mọi người." - -#: judge/models/notification.py:61 -msgid "The problem is private." -msgstr "Bài tập được đánh dấu riêng tư." - -#: judge/models/pagevote.py:25 +#: judge/models/pagevote.py:19 #, fuzzy #| msgid "votes" msgid "pagevote" msgstr "bình chọn" -#: judge/models/pagevote.py:26 +#: judge/models/pagevote.py:20 #, fuzzy #| msgid "votes" msgid "pagevotes" msgstr "bình chọn" -#: judge/models/pagevote.py:48 +#: judge/models/pagevote.py:40 #, fuzzy #| msgid "volunteer vote" msgid "pagevote vote" msgstr "vote từ TNV" -#: judge/models/pagevote.py:49 +#: judge/models/pagevote.py:41 #, fuzzy #| msgid "volunteer votes" msgid "pagevote votes" msgstr "vote từ TNV" -#: judge/models/problem.py:46 +#: judge/models/problem.py:41 msgid "problem category ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:49 +#: judge/models/problem.py:44 msgid "problem category name" msgstr "tên nhóm bài" -#: judge/models/problem.py:57 +#: judge/models/problem.py:52 msgid "problem type" msgstr "dạng bài" -#: judge/models/problem.py:58 judge/models/problem.py:176 +#: judge/models/problem.py:53 judge/models/problem.py:173 #: judge/models/volunteer.py:28 msgid "problem types" msgstr "dạng bài" -#: judge/models/problem.py:63 +#: judge/models/problem.py:58 msgid "problem group ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:65 +#: judge/models/problem.py:60 msgid "problem group name" msgstr "tên nhóm bài" -#: judge/models/problem.py:72 judge/models/problem.py:181 +#: judge/models/problem.py:67 judge/models/problem.py:178 msgid "problem group" msgstr "nhóm bài" -#: judge/models/problem.py:73 +#: judge/models/problem.py:68 msgid "problem groups" msgstr "nhóm bài" -#: judge/models/problem.py:80 +#: judge/models/problem.py:75 msgid "key" msgstr "" -#: judge/models/problem.py:83 +#: judge/models/problem.py:78 msgid "link" msgstr "đường dẫn" -#: judge/models/problem.py:84 +#: judge/models/problem.py:79 msgid "full name" msgstr "tên đầy đủ" -#: judge/models/problem.py:88 judge/models/profile.py:70 -#: judge/models/runtime.py:35 +#: judge/models/problem.py:83 judge/models/profile.py:43 +#: judge/models/runtime.py:34 msgid "short name" msgstr "tên ngắn" -#: judge/models/problem.py:89 +#: judge/models/problem.py:84 msgid "Displayed on pages under this license" msgstr "Được hiển thị trên các trang theo giấy phép này" -#: judge/models/problem.py:94 +#: judge/models/problem.py:89 msgid "icon" msgstr "icon" -#: judge/models/problem.py:95 +#: judge/models/problem.py:90 msgid "URL to the icon" msgstr "Đường dẫn icon" -#: judge/models/problem.py:97 +#: judge/models/problem.py:92 msgid "license text" msgstr "văn bản giấy phép" -#: judge/models/problem.py:106 +#: judge/models/problem.py:101 msgid "license" msgstr "" -#: judge/models/problem.py:107 +#: judge/models/problem.py:102 msgid "licenses" msgstr "" -#: judge/models/problem.py:130 +#: judge/models/problem.py:127 msgid "problem code" msgstr "mã bài" -#: judge/models/problem.py:136 +#: judge/models/problem.py:133 msgid "A short, unique code for the problem, used in the url after /problem/" msgstr "Mã bài ngắn, độc nhất cho bài tập, được dùng trong url sau /problem/" -#: judge/models/problem.py:141 +#: judge/models/problem.py:138 msgid "problem name" msgstr "Tên bài" -#: judge/models/problem.py:143 +#: judge/models/problem.py:140 msgid "The full name of the problem, as shown in the problem list." msgstr "Tên đầy đủ của bài, như được hiển thị trên danh sách bài tập" -#: judge/models/problem.py:145 +#: judge/models/problem.py:142 msgid "problem body" msgstr "Nội dung" -#: judge/models/problem.py:148 +#: judge/models/problem.py:145 msgid "creators" msgstr "" -#: judge/models/problem.py:152 +#: judge/models/problem.py:149 msgid "These users will be able to edit the problem, and be listed as authors." msgstr "" "Những người dùng này sẽ có thể chỉnh sửa bài tập, và nằm trong danh sách các " "tác giả" -#: judge/models/problem.py:161 +#: judge/models/problem.py:154 +msgid "curators" +msgstr "" + +#: judge/models/problem.py:158 msgid "" "These users will be able to edit the problem, but not be listed as authors." msgstr "" "Những người dùng này sẽ có thể chỉnh sửa bài tập, nhưng không nằm trong danh " "sách các tác giả" -#: judge/models/problem.py:171 +#: judge/models/problem.py:164 +msgid "testers" +msgstr "" + +#: judge/models/problem.py:168 msgid "These users will be able to view the private problem, but not edit it." msgstr "" "Những người dùng này sẽ thấy được bài tập này (dù riêng tư), nhưng không " "chỉnh sửa được" -#: judge/models/problem.py:177 judge/models/volunteer.py:29 +#: judge/models/problem.py:174 judge/models/volunteer.py:29 msgid "The type of problem, as shown on the problem's page." msgstr "Dạng bài, giống như trên trang bài tập" -#: judge/models/problem.py:183 +#: judge/models/problem.py:180 msgid "The group of problem, shown under Category in the problem list." msgstr "Nhóm bài, hiện ở mục Nhóm bài trong danh sách bài tập" -#: judge/models/problem.py:188 +#: judge/models/problem.py:185 msgid "" "The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) " "are supported." @@ -1729,11 +1568,11 @@ msgstr "" "Giới hạn thời gian cho bài tập này, theo đơn vị giây. Có thể nhập số thực " "(ví dụ 1.5)" -#: judge/models/problem.py:197 judge/models/problem.py:652 +#: judge/models/problem.py:194 judge/models/problem.py:601 msgid "memory limit" msgstr "Giới hạn bộ nhớ" -#: judge/models/problem.py:199 +#: judge/models/problem.py:196 msgid "" "The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 " "kilobytes)." @@ -1741,7 +1580,7 @@ msgstr "" "Giới hạn bộ nhớ cho bài này, theo đơn vị kilobytes (ví dụ 256mb = 262144 " "kilobytes)" -#: judge/models/problem.py:211 +#: judge/models/problem.py:208 msgid "" "Points awarded for problem completion. Points are displayed with a 'p' " "suffix if partial." @@ -1749,148 +1588,143 @@ msgstr "" "Điểm thưởng khi hoàn thành bài tập. Điểm có thêm chữ 'p' ở sau cùng nếu như " "chấp nhận cho điểm thành phần (có điểm ngay khi không đúng toàn bộ test)" -#: judge/models/problem.py:217 +#: judge/models/problem.py:214 msgid "allows partial points" msgstr "cho phép điểm thành phần" -#: judge/models/problem.py:221 +#: judge/models/problem.py:218 msgid "allowed languages" msgstr "các ngôn ngữ được cho phép" -#: judge/models/problem.py:222 +#: judge/models/problem.py:219 msgid "List of allowed submission languages." msgstr "Danh sách các ngôn ngữ lập trình cho phép" -#: judge/models/problem.py:228 +#: judge/models/problem.py:225 msgid "manually managed" msgstr "" -#: judge/models/problem.py:231 +#: judge/models/problem.py:228 msgid "Whether judges should be allowed to manage data or not." msgstr "" -#: judge/models/problem.py:234 +#: judge/models/problem.py:231 msgid "date of publishing" msgstr "Ngày công bố" -#: judge/models/problem.py:239 +#: judge/models/problem.py:236 msgid "" "Doesn't have magic ability to auto-publish due to backward compatibility" msgstr "" -#: judge/models/problem.py:246 +#: judge/models/problem.py:243 msgid "Bans the selected users from submitting to this problem." msgstr "Cấm những người dùng được chọn nộp bài tập này." -#: judge/models/problem.py:253 +#: judge/models/problem.py:250 msgid "The license under which this problem is published." msgstr "Giấy phép xuất bản bài tập" -#: judge/models/problem.py:260 +#: judge/models/problem.py:257 msgid "problem summary" msgstr "Tóm tắt bài tập" -#: judge/models/problem.py:266 +#: judge/models/problem.py:263 msgid "number of users" msgstr "" -#: judge/models/problem.py:268 +#: judge/models/problem.py:265 msgid "The number of users who solved the problem." msgstr "Số lượng người dùng đã giải được bài" -#: judge/models/problem.py:270 +#: judge/models/problem.py:267 msgid "solve rate" msgstr "Tỉ lệ giải đúng" -#: judge/models/problem.py:282 +#: judge/models/problem.py:276 msgid "If private, only these organizations may see the problem." msgstr "Nếu bài riêng tư, chỉ những tổ chức này thấy được" -#: judge/models/problem.py:288 +#: judge/models/problem.py:282 msgid "pdf statement" msgstr "Đề bài bằng file pdf" -#: judge/models/problem.py:621 judge/models/problem.py:642 -#: judge/models/problem.py:673 judge/models/runtime.py:159 +#: judge/models/problem.py:570 judge/models/problem.py:591 +#: judge/models/problem.py:622 judge/models/runtime.py:161 msgid "language" msgstr "" -#: judge/models/problem.py:624 +#: judge/models/problem.py:573 msgid "translated name" msgstr "" -#: judge/models/problem.py:626 +#: judge/models/problem.py:575 msgid "translated description" msgstr "" -#: judge/models/problem.py:630 +#: judge/models/problem.py:579 msgid "problem translation" msgstr "" -#: judge/models/problem.py:631 +#: judge/models/problem.py:580 msgid "problem translations" msgstr "" -#: judge/models/problem.py:661 +#: judge/models/problem.py:610 msgid "language-specific resource limit" msgstr "" -#: judge/models/problem.py:662 +#: judge/models/problem.py:611 msgid "language-specific resource limits" msgstr "" -#: judge/models/problem.py:675 judge/models/submission.py:291 +#: judge/models/problem.py:624 judge/models/submission.py:244 msgid "source code" msgstr "mã nguồn" -#: judge/models/problem.py:679 +#: judge/models/problem.py:628 msgid "language-specific template" msgstr "" -#: judge/models/problem.py:680 +#: judge/models/problem.py:629 msgid "language-specific templates" msgstr "" -#: judge/models/problem.py:687 +#: judge/models/problem.py:636 msgid "associated problem" msgstr "" -#: judge/models/problem.py:693 +#: judge/models/problem.py:642 msgid "publish date" msgstr "" -#: judge/models/problem.py:695 +#: judge/models/problem.py:644 msgid "editorial content" msgstr "nội dung lời giải" -#: judge/models/problem.py:712 -#, python-format -msgid "Editorial for %s" -msgstr "" - -#: judge/models/problem.py:716 +#: judge/models/problem.py:658 msgid "solution" msgstr "lời giải" -#: judge/models/problem.py:717 +#: judge/models/problem.py:659 msgid "solutions" msgstr "lời giải" -#: judge/models/problem.py:722 +#: judge/models/problem.py:664 #, fuzzy #| msgid "point value" msgid "proposed point value" msgstr "điểm" -#: judge/models/problem.py:723 +#: judge/models/problem.py:665 msgid "The amount of points you think this problem deserves." msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?" -#: judge/models/problem.py:737 +#: judge/models/problem.py:679 msgid "The time this vote was cast" msgstr "" -#: judge/models/problem.py:743 +#: judge/models/problem.py:685 msgid "vote" msgstr "" @@ -1912,7 +1746,7 @@ msgstr "Số thực (chênh lệch tương đối)" #: judge/models/problem_data.py:36 msgid "Non-trailing spaces" -msgstr "Không xét dấu cách cuối dòng" +msgstr "Không cho phép dấu cách cuối dòng" #: judge/models/problem_data.py:37 msgid "Unordered" @@ -1931,8 +1765,8 @@ msgid "Custom checker (PY)" msgstr "Trình chấm tự viết (Python)" #: judge/models/problem_data.py:41 -msgid "Custom checker (CPP)" -msgstr "Trình chấm tự viết (CPP)" +msgid "Custom validator (CPP)" +msgstr "Trình chấm tự viết (C++)" #: judge/models/problem_data.py:42 msgid "Interactive" @@ -1950,11 +1784,11 @@ msgstr "file zip chứa test" msgid "generator file" msgstr "file tạo test" -#: judge/models/problem_data.py:69 judge/models/problem_data.py:238 +#: judge/models/problem_data.py:69 judge/models/problem_data.py:205 msgid "output prefix length" msgstr "độ dài hiển thị output" -#: judge/models/problem_data.py:72 judge/models/problem_data.py:241 +#: judge/models/problem_data.py:72 judge/models/problem_data.py:208 msgid "output limit length" msgstr "giới hạn hiển thị output" @@ -1962,31 +1796,31 @@ msgstr "giới hạn hiển thị output" msgid "init.yml generation feedback" msgstr "phản hồi của quá trình tạo file init.yml" -#: judge/models/problem_data.py:78 judge/models/problem_data.py:244 +#: judge/models/problem_data.py:78 judge/models/problem_data.py:211 msgid "checker" msgstr "trình chấm" -#: judge/models/problem_data.py:81 judge/models/problem_data.py:247 +#: judge/models/problem_data.py:81 judge/models/problem_data.py:214 msgid "checker arguments" msgstr "các biến trong trình chấm" -#: judge/models/problem_data.py:83 judge/models/problem_data.py:249 +#: judge/models/problem_data.py:83 judge/models/problem_data.py:216 msgid "checker arguments as a JSON object" msgstr "các biến trong trình chấm theo dạng JSON" #: judge/models/problem_data.py:86 msgid "custom checker file" -msgstr "trình chấm" +msgstr "file trình chấm" #: judge/models/problem_data.py:94 -msgid "custom cpp checker file" -msgstr "trình chấm C++" +msgid "custom validator file" +msgstr "file trình chấm" #: judge/models/problem_data.py:102 msgid "interactive judge" -msgstr "trình chấm interactive" +msgstr "" -#: judge/models/problem_data.py:110 judge/models/problem_data.py:229 +#: judge/models/problem_data.py:110 judge/models/problem_data.py:196 msgid "input file name" msgstr "tên file input" @@ -1994,7 +1828,7 @@ msgstr "tên file input" msgid "Leave empty for stdin" msgstr "Để trống nếu nhập từ bàn phím" -#: judge/models/problem_data.py:116 judge/models/problem_data.py:232 +#: judge/models/problem_data.py:116 judge/models/problem_data.py:199 msgid "output file name" msgstr "tên file output" @@ -2002,448 +1836,422 @@ msgstr "tên file output" msgid "Leave empty for stdout" msgstr "Để trống nếu xuất ra màn hình" -#: judge/models/problem_data.py:122 -msgid "is output only" -msgstr "Output-only?" - -#: judge/models/problem_data.py:123 -msgid "Support output-only problem" -msgstr "Dùng cho các bài output-only (nộp bằng file zip)" - -#: judge/models/problem_data.py:127 -msgid "is IOI signature" -msgstr "Nộp bài bằng hàm?" - -#: judge/models/problem_data.py:128 -msgid "Use IOI Signature" -msgstr "Nộp bài bằng hàm như IOI" - -#: judge/models/problem_data.py:132 -msgid "signature handler" -msgstr "File xử lý hàm" - -#: judge/models/problem_data.py:140 -msgid "signature header" -msgstr "File định nghĩa hàm" - -#: judge/models/problem_data.py:213 +#: judge/models/problem_data.py:180 msgid "problem data set" msgstr "tập hợp dữ liệu bài" -#: judge/models/problem_data.py:217 +#: judge/models/problem_data.py:184 msgid "case position" msgstr "vị trí test" -#: judge/models/problem_data.py:220 +#: judge/models/problem_data.py:187 msgid "case type" msgstr "loại test" -#: judge/models/problem_data.py:222 +#: judge/models/problem_data.py:189 msgid "Normal case" msgstr "Test bình thường" -#: judge/models/problem_data.py:223 +#: judge/models/problem_data.py:190 msgid "Batch start" msgstr "Bắt đầu nhóm" -#: judge/models/problem_data.py:224 +#: judge/models/problem_data.py:191 msgid "Batch end" msgstr "Kết thúc nhóm" -#: judge/models/problem_data.py:234 +#: judge/models/problem_data.py:201 msgid "generator arguments" msgstr "biến trong file sinh test" -#: judge/models/problem_data.py:235 +#: judge/models/problem_data.py:202 msgid "point value" msgstr "điểm" -#: judge/models/problem_data.py:236 +#: judge/models/problem_data.py:203 msgid "case is pretest?" msgstr "test là pretest?" -#: judge/models/profile.py:58 +#: judge/models/profile.py:31 msgid "organization title" msgstr "tiêu đề tổ chức" -#: judge/models/profile.py:61 +#: judge/models/profile.py:34 msgid "organization slug" msgstr "tên ngắn đường dẫn" -#: judge/models/profile.py:62 +#: judge/models/profile.py:35 msgid "Organization name shown in URL" msgstr "Tên được hiển thị trong đường dẫn" -#: judge/models/profile.py:71 +#: judge/models/profile.py:44 msgid "Displayed beside user name during contests" msgstr "Hiển thị bên cạnh tên người dùng trong kỳ thi" -#: judge/models/profile.py:74 -msgid "organization description" -msgstr "mô tả tổ chức" - -#: judge/models/profile.py:78 +#: judge/models/profile.py:49 msgid "registrant" msgstr "người tạo" -#: judge/models/profile.py:81 +#: judge/models/profile.py:52 msgid "User who registered this organization" msgstr "Người tạo tổ chức" -#: judge/models/profile.py:85 +#: judge/models/profile.py:56 msgid "administrators" msgstr "người quản lý" -#: judge/models/profile.py:87 +#: judge/models/profile.py:58 msgid "Those who can edit this organization" msgstr "Những người có thể chỉnh sửa tổ chức" -#: judge/models/profile.py:90 +#: judge/models/profile.py:61 msgid "creation date" msgstr "ngày tạo" -#: judge/models/profile.py:93 +#: judge/models/profile.py:64 msgid "is open organization?" msgstr "tổ chức mở?" -#: judge/models/profile.py:94 +#: judge/models/profile.py:65 msgid "Allow joining organization" msgstr "Cho phép mọi người tham gia tổ chức" -#: judge/models/profile.py:98 +#: judge/models/profile.py:69 msgid "maximum size" msgstr "số lượng thành viên tối đa" -#: judge/models/profile.py:102 +#: judge/models/profile.py:73 msgid "" "Maximum amount of users in this organization, only applicable to private " "organizations" msgstr "Số người tối đa trong tổ chức, chỉ áp dụng với tổ chức riêng tư" -#: judge/models/profile.py:108 +#: judge/models/profile.py:79 msgid "Student access code" msgstr "Mã truy cập cho học sinh" -#: judge/models/profile.py:166 judge/models/profile.py:198 -#: judge/models/profile.py:471 judge/models/profile.py:546 +#: judge/models/profile.py:90 +msgid "" +"This image will replace the default site logo for users viewing the " +"organization." +msgstr "Ảnh này sẽ thay thế logo mặc định khi ở trong tổ chức." + +#: judge/models/profile.py:129 judge/models/profile.py:158 +#: judge/models/profile.py:374 judge/models/profile.py:451 msgid "organization" msgstr "" -#: judge/models/profile.py:173 +#: judge/models/profile.py:135 msgid "user associated" msgstr "" -#: judge/models/profile.py:176 +#: judge/models/profile.py:137 msgid "self-description" msgstr "" -#: judge/models/profile.py:180 +#: judge/models/profile.py:140 msgid "location" msgstr "" -#: judge/models/profile.py:186 +#: judge/models/profile.py:146 msgid "preferred language" msgstr "" -#: judge/models/profile.py:194 +#: judge/models/profile.py:154 msgid "last access time" msgstr "" -#: judge/models/profile.py:195 +#: judge/models/profile.py:155 msgid "last IP" msgstr "" -#: judge/models/profile.py:206 +#: judge/models/profile.py:166 msgid "display rank" msgstr "" -#: judge/models/profile.py:215 +#: judge/models/profile.py:174 msgid "comment mute" msgstr "" -#: judge/models/profile.py:216 +#: judge/models/profile.py:175 msgid "Some users are at their best when silent." msgstr "" -#: judge/models/profile.py:220 +#: judge/models/profile.py:179 msgid "unlisted user" msgstr "" -#: judge/models/profile.py:221 +#: judge/models/profile.py:180 msgid "User will not be ranked." msgstr "" -#: judge/models/profile.py:227 +#: judge/models/profile.py:184 +#, fuzzy +#| msgid "Banned from joining" +msgid "banned from voting" +msgstr "Bị cấm tham gia" + +#: judge/models/profile.py:185 +msgid "User will not be able to vote on problems' point values." +msgstr "" + +#: judge/models/profile.py:190 +msgid "user script" +msgstr "" + +#: judge/models/profile.py:194 +msgid "User-defined JavaScript for site customization." +msgstr "" + +#: judge/models/profile.py:198 msgid "current contest" msgstr "kỳ thi hiện tại" -#: judge/models/profile.py:234 +#: judge/models/profile.py:205 +msgid "math engine" +msgstr "" + +#: judge/models/profile.py:209 +msgid "the rendering engine used to render math" +msgstr "" + +#: judge/models/profile.py:212 msgid "2FA enabled" msgstr "" -#: judge/models/profile.py:236 +#: judge/models/profile.py:214 msgid "check to enable TOTP-based two factor authentication" msgstr "đánh dấu để sử dụng TOTP-based two factor authentication" -#: judge/models/profile.py:242 +#: judge/models/profile.py:220 msgid "TOTP key" msgstr "mã TOTP" -#: judge/models/profile.py:243 +#: judge/models/profile.py:221 msgid "32 character base32-encoded key for TOTP" msgstr "" -#: judge/models/profile.py:245 +#: judge/models/profile.py:223 msgid "TOTP key must be empty or base32" msgstr "" -#: judge/models/profile.py:249 +#: judge/models/profile.py:227 msgid "internal notes" msgstr "ghi chú nội bộ" -#: judge/models/profile.py:252 +#: judge/models/profile.py:230 msgid "Notes for administrators regarding this user." msgstr "Ghi chú riêng cho quản trị viên." -#: judge/models/profile.py:257 -msgid "Custom background" -msgstr "Background tự chọn" - -#: judge/models/profile.py:260 -msgid "CSS custom background properties: url(\"image_url\"), color, etc" -msgstr "CSS background tự chọn. Ví dụ: url(\"image_url\"), white, ..." - -#: judge/models/profile.py:428 +#: judge/models/profile.py:361 msgid "user profile" msgstr "thông tin người dùng" -#: judge/models/profile.py:429 +#: judge/models/profile.py:362 msgid "user profiles" msgstr "thông tin người dùng" -#: judge/models/profile.py:435 -#, fuzzy -#| msgid "associated page" -msgid "profile associated" -msgstr "trang tương ứng" - -#: judge/models/profile.py:442 -msgid "t-shirt size" -msgstr "" - -#: judge/models/profile.py:447 -#, fuzzy -#| msgid "date of publishing" -msgid "date of birth" -msgstr "Ngày công bố" - -#: judge/models/profile.py:453 -msgid "address" -msgstr "" - -#: judge/models/profile.py:475 +#: judge/models/profile.py:378 msgid "request time" msgstr "thời gian đăng ký" -#: judge/models/profile.py:478 +#: judge/models/profile.py:381 msgid "state" msgstr "trạng thái" -#: judge/models/profile.py:485 +#: judge/models/profile.py:388 msgid "reason" msgstr "lý do" -#: judge/models/profile.py:488 +#: judge/models/profile.py:391 msgid "organization join request" msgstr "đơn đăng ký tham gia" -#: judge/models/profile.py:489 +#: judge/models/profile.py:392 msgid "organization join requests" msgstr "đơn đăng ký tham gia" -#: judge/models/profile.py:551 +#: judge/models/profile.py:456 #, fuzzy #| msgid "last seen" msgid "last visit" msgstr "xem lần cuối" -#: judge/models/runtime.py:22 +#: judge/models/runtime.py:21 msgid "short identifier" msgstr "tên ngắn" -#: judge/models/runtime.py:24 +#: judge/models/runtime.py:23 msgid "" "The identifier for this language; the same as its executor id for judges." msgstr "" -#: judge/models/runtime.py:30 +#: judge/models/runtime.py:29 msgid "long name" msgstr "tên dài" -#: judge/models/runtime.py:31 +#: judge/models/runtime.py:30 msgid "Longer name for the language, e.g. \"Python 2\" or \"C++11\"." msgstr "Tên dài, ví dụ \"Python 2\" or \"C++11\"." -#: judge/models/runtime.py:37 +#: judge/models/runtime.py:36 msgid "" "More readable, but short, name to display publicly; e.g. \"PY2\" or \"C+" "+11\". If left blank, it will default to the short identifier." msgstr "" -#: judge/models/runtime.py:46 +#: judge/models/runtime.py:45 msgid "common name" msgstr "" -#: judge/models/runtime.py:48 +#: judge/models/runtime.py:47 msgid "" "Common name for the language. For example, the common name for C++03, C++11, " "and C++14 would be \"C++\"" msgstr "" -#: judge/models/runtime.py:54 +#: judge/models/runtime.py:53 msgid "ace mode name" msgstr "" -#: judge/models/runtime.py:56 +#: judge/models/runtime.py:55 msgid "" "Language ID for Ace.js editor highlighting, appended to \"mode-\" to " "determine the Ace JavaScript file to use, e.g., \"python\"." msgstr "" -#: judge/models/runtime.py:62 +#: judge/models/runtime.py:61 msgid "pygments name" msgstr "" -#: judge/models/runtime.py:63 +#: judge/models/runtime.py:62 msgid "Language ID for Pygments highlighting in source windows." msgstr "" -#: judge/models/runtime.py:66 +#: judge/models/runtime.py:65 msgid "code template" msgstr "" -#: judge/models/runtime.py:67 +#: judge/models/runtime.py:66 msgid "Code template to display in submission editor." msgstr "" -#: judge/models/runtime.py:72 +#: judge/models/runtime.py:71 msgid "runtime info override" msgstr "" -#: judge/models/runtime.py:75 +#: judge/models/runtime.py:74 msgid "" "Do not set this unless you know what you're doing! It will override the " "usually more specific, judge-provided runtime info!" msgstr "" -#: judge/models/runtime.py:80 +#: judge/models/runtime.py:79 msgid "language description" msgstr "" -#: judge/models/runtime.py:82 +#: judge/models/runtime.py:81 msgid "" "Use this field to inform users of quirks with your environment, additional " "restrictions, etc." msgstr "" -#: judge/models/runtime.py:89 +#: judge/models/runtime.py:88 msgid "extension" msgstr "" -#: judge/models/runtime.py:90 +#: judge/models/runtime.py:89 msgid "The extension of source files, e.g., \"py\" or \"cpp\"." msgstr "" -#: judge/models/runtime.py:160 +#: judge/models/runtime.py:162 msgid "languages" msgstr "ngôn ngữ" -#: judge/models/runtime.py:174 +#: judge/models/runtime.py:168 msgid "language to which this runtime belongs" msgstr "" -#: judge/models/runtime.py:178 +#: judge/models/runtime.py:172 msgid "judge on which this runtime exists" msgstr "" -#: judge/models/runtime.py:180 +#: judge/models/runtime.py:174 msgid "runtime name" msgstr "" -#: judge/models/runtime.py:182 +#: judge/models/runtime.py:176 msgid "runtime version" msgstr "" -#: judge/models/runtime.py:185 +#: judge/models/runtime.py:179 msgid "order in which to display this runtime" msgstr "" -#: judge/models/runtime.py:191 +#: judge/models/runtime.py:185 msgid "Server name, hostname-style" msgstr "Tên web" -#: judge/models/runtime.py:194 +#: judge/models/runtime.py:188 msgid "time of creation" msgstr "ngày tạo" -#: judge/models/runtime.py:198 +#: judge/models/runtime.py:192 msgid "A key to authenticate this judge" msgstr "Chìa khóa xác thực" -#: judge/models/runtime.py:199 +#: judge/models/runtime.py:193 msgid "authentication key" msgstr "mã xác thực" -#: judge/models/runtime.py:202 +#: judge/models/runtime.py:196 msgid "block judge" msgstr "chặn máy chấm" -#: judge/models/runtime.py:205 +#: judge/models/runtime.py:199 msgid "" "Whether this judge should be blocked from connecting, even if its key is " "correct." msgstr "Quyết định có chặn máy chấm, ngay cả khi mã xác thực đúng." -#: judge/models/runtime.py:209 +#: judge/models/runtime.py:203 msgid "judge online status" msgstr "trạng thái online của máy chấm" -#: judge/models/runtime.py:210 +#: judge/models/runtime.py:204 msgid "judge start time" msgstr "thời gian khởi đầu máy chấm" -#: judge/models/runtime.py:211 +#: judge/models/runtime.py:205 msgid "response time" msgstr "thời gian trả lời" -#: judge/models/runtime.py:213 +#: judge/models/runtime.py:207 msgid "system load" msgstr "lưu lượng xử lý" -#: judge/models/runtime.py:215 +#: judge/models/runtime.py:209 msgid "Load for the last minute, divided by processors to be fair." msgstr "Lưu lượng được chia đều." -#: judge/models/runtime.py:225 judge/models/runtime.py:267 +#: judge/models/runtime.py:219 judge/models/runtime.py:261 msgid "judges" msgstr "máy chấm" -#: judge/models/runtime.py:266 +#: judge/models/runtime.py:260 msgid "judge" msgstr "máy chấm" #: judge/models/submission.py:20 judge/models/submission.py:47 -#: judge/utils/problems.py:116 +#: judge/utils/problems.py:120 msgid "Accepted" msgstr "Accepted" #: judge/models/submission.py:21 judge/models/submission.py:48 -#: judge/utils/problems.py:119 msgid "Wrong Answer" msgstr "Wrong Answer" #: judge/models/submission.py:22 judge/models/submission.py:50 -#: judge/utils/problems.py:129 msgid "Time Limit Exceeded" msgstr "Time Limit Exceeded" @@ -2505,15 +2313,15 @@ msgstr "Lỗi máy chấm" msgid "submission time" msgstr "thời gian bài nộp" -#: judge/models/submission.py:69 judge/models/submission.py:310 +#: judge/models/submission.py:69 judge/models/submission.py:263 msgid "execution time" msgstr "thời gian chạy" -#: judge/models/submission.py:70 judge/models/submission.py:311 +#: judge/models/submission.py:70 judge/models/submission.py:264 msgid "memory usage" msgstr "bộ nhớ sử dụng" -#: judge/models/submission.py:72 judge/models/submission.py:312 +#: judge/models/submission.py:72 judge/models/submission.py:265 msgid "points granted" msgstr "điểm" @@ -2561,56 +2369,50 @@ msgstr "được chấm lại bởi admin" msgid "was ran on pretests only" msgstr "chỉ chấm pretest" -#: judge/models/submission.py:275 templates/contest/moss.html:56 +#: judge/models/submission.py:234 templates/contest/moss.html:56 msgid "submissions" msgstr "bài nộp" -#: judge/models/submission.py:288 judge/models/submission.py:302 +#: judge/models/submission.py:241 judge/models/submission.py:255 msgid "associated submission" msgstr "bài nộp tương ứng" -#: judge/models/submission.py:306 +#: judge/models/submission.py:259 msgid "test case ID" msgstr "test case ID" -#: judge/models/submission.py:308 +#: judge/models/submission.py:261 msgid "status flag" msgstr "" -#: judge/models/submission.py:313 +#: judge/models/submission.py:266 msgid "points possible" msgstr "" -#: judge/models/submission.py:314 +#: judge/models/submission.py:267 msgid "batch number" msgstr "số thứ tự của nhóm" -#: judge/models/submission.py:316 +#: judge/models/submission.py:269 msgid "judging feedback" msgstr "phản hồi từ máy chấm" -#: judge/models/submission.py:319 +#: judge/models/submission.py:272 msgid "extended judging feedback" msgstr "phản hồi thêm từ máy chấm" -#: judge/models/submission.py:321 +#: judge/models/submission.py:274 msgid "program output" msgstr "output chương trình" -#: judge/models/submission.py:329 +#: judge/models/submission.py:282 msgid "submission test case" msgstr "cái testcase trong bài nộp" -#: judge/models/submission.py:330 +#: judge/models/submission.py:283 msgid "submission test cases" msgstr "cái testcase trong bài nộp" -#: judge/models/test_formatter.py:22 -#, fuzzy -#| msgid "test case ID" -msgid "testcase file" -msgstr "test case ID" - #: judge/models/ticket.py:10 msgid "ticket title" msgstr "tiêu đề báo cáo" @@ -2697,99 +2499,83 @@ msgstr "Trang [page]/[topage]" msgid "Page %s of %s" msgstr "Trang %s/%s" -#: judge/social_auth.py:69 judge/views/register.py:32 -msgid "A username must contain letters, numbers, or underscores" -msgstr "Tên đăng nhập phải chứa ký tự, chữ số, hoặc dấu gạch dưới" - -#: judge/social_auth.py:75 -msgid "Sorry, the username is taken." -msgstr "Xin lỗi, tên đăng nhập đã bị trùng." - -#: judge/social_auth.py:93 -msgid "Choose a username" -msgstr "Chọn tên đăng nhập" - -#: judge/social_auth.py:122 -msgid "Create your profile" -msgstr "Khởi tạo thông tin" - #: judge/tasks/contest.py:20 msgid "Recalculating contest scores" msgstr "Tính lại điểm kỳ thi" -#: judge/tasks/contest.py:59 +#: judge/tasks/contest.py:42 msgid "Running MOSS" msgstr "Đang chạy MOSS" -#: judge/tasks/submission.py:47 +#: judge/tasks/submission.py:45 msgid "Modifying submissions" msgstr "Chỉnh sửa bài nộp" -#: judge/tasks/submission.py:67 +#: judge/tasks/submission.py:65 msgid "Recalculating user points" msgstr "Tính lại điểm người dùng" -#: judge/utils/problem_data.py:81 +#: judge/utils/problem_data.py:72 msgid "Empty batches not allowed." msgstr "Nhóm test trống là không hợp lệ." -#: judge/utils/problem_data.py:89 judge/utils/problem_data.py:97 -#: judge/utils/problem_data.py:112 +#: judge/utils/problem_data.py:80 judge/utils/problem_data.py:88 +#: judge/utils/problem_data.py:103 msgid "How did you corrupt the custom checker path?" msgstr "How did you corrupt the custom checker path?" -#: judge/utils/problem_data.py:140 +#: judge/utils/problem_data.py:131 #, python-format msgid "Points must be defined for non-batch case #%d." msgstr "Ô điểm số cho test #%d phải được điền." -#: judge/utils/problem_data.py:147 +#: judge/utils/problem_data.py:138 #, python-format msgid "Input file for case %d does not exist: %s" msgstr "File input cho test %d không tồn tại: %s" -#: judge/utils/problem_data.py:152 +#: judge/utils/problem_data.py:143 #, python-format msgid "Output file for case %d does not exist: %s" msgstr "File output cho test %d không tồn tại: %s" -#: judge/utils/problem_data.py:179 +#: judge/utils/problem_data.py:170 #, python-format msgid "Batch start case #%d requires points." msgstr "Nhóm test #%d cần được điền điểm số." -#: judge/utils/problem_data.py:202 +#: judge/utils/problem_data.py:193 #, python-format msgid "Attempt to end batch outside of one in case #%d" msgstr "Nhóm test #%d kết thúc không hợp lệ" -#: judge/utils/problem_data.py:221 +#: judge/utils/problem_data.py:212 msgid "How did you corrupt the zip path?" msgstr "" -#: judge/utils/problem_data.py:227 +#: judge/utils/problem_data.py:218 msgid "How did you corrupt the generator path?" msgstr "" -#: judge/utils/problem_data.py:245 -msgid "Invalid interactor judge" -msgstr "" - -#: judge/utils/problem_data.py:269 +#: judge/utils/problem_data.py:237 #, fuzzy -#| msgid "Invalid Return" -msgid "Invalid signature handler" -msgstr "Invalid Return" +#| msgid "How did you corrupt the custom checker path?" +msgid "How did you corrupt the interactor path?" +msgstr "How did you corrupt the custom checker path?" -#: judge/utils/problem_data.py:272 -msgid "Invalid signature header" -msgstr "" +#: judge/utils/problems.py:121 +msgid "Wrong" +msgstr "Sai" -#: judge/utils/problems.py:134 +#: judge/utils/problems.py:127 +msgid "Timeout" +msgstr "Quá thời gian" + +#: judge/utils/problems.py:130 msgid "Error" msgstr "Lỗi" -#: judge/utils/problems.py:151 +#: judge/utils/problems.py:147 msgid "Can't pass both queryset and keyword filters" msgstr "" @@ -2829,351 +2615,187 @@ msgctxt "hours and minutes" msgid "%h:%m" msgstr "%h:%m" -#: judge/utils/users.py:61 -msgid "M j, Y" -msgstr "j M, Y" - -#: judge/views/about.py:10 templates/course/course.html:27 -#: templates/organization/home.html:44 -#: templates/organization/org-right-sidebar.html:74 -#: templates/user/user-about.html:70 templates/user/user-tabs.html:4 +#: judge/views/about.py:10 templates/organization/home.html:55 +#: templates/organization/org-right-sidebar.html:70 +#: templates/user/user-about.html:83 templates/user/user-tabs.html:4 #: templates/user/users-table.html:22 msgid "About" msgstr "Giới thiệu" -#: judge/views/about.py:251 +#: judge/views/about.py:20 msgid "Custom Checker Sample" msgstr "Hướng dẫn viết trình chấm" -#: judge/views/blog.py:131 +#: judge/views/blog.py:127 #, python-format msgid "Page %d of Posts" msgstr "Trang %d" -#: judge/views/blog.py:171 +#: judge/views/blog.py:186 msgid "Ticket feed" msgstr "Báo cáo" -#: judge/views/blog.py:188 +#: judge/views/blog.py:206 msgid "Comment feed" msgstr "Bình luận" -#: judge/views/comment.py:71 judge/views/pagevote.py:32 +#: judge/views/comment.py:40 judge/views/pagevote.py:31 msgid "Messing around, are we?" msgstr "Messing around, are we?" -#: judge/views/comment.py:87 judge/views/pagevote.py:48 +#: judge/views/comment.py:56 judge/views/pagevote.py:47 msgid "You must solve at least one problem before you can vote." msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote." -#: judge/views/comment.py:113 +#: judge/views/comment.py:87 msgid "You already voted." msgstr "Bạn đã vote." -#: judge/views/comment.py:272 judge/views/organization.py:882 -#: judge/views/organization.py:1035 judge/views/organization.py:1208 +#: judge/views/comment.py:158 judge/views/organization.py:850 +#: judge/views/organization.py:996 judge/views/organization.py:1161 msgid "Edited from site" msgstr "Chỉnh sửa từ web" -#: judge/views/comment.py:293 +#: judge/views/comment.py:179 msgid "Editing comment" msgstr "Chỉnh sửa bình luận" -#: judge/views/comment.py:345 -msgid "Comment body" -msgstr "Nội dung bình luận" - -#: judge/views/comment.py:351 judge/views/ticket.py:73 -msgid "Your part is silent, little toad." -msgstr "Bạn không được phép bình luận." - -#: judge/views/comment.py:360 templates/comments/list.html:17 -msgid "" -"You need to have solved at least one problem before your voice can be heard." -msgstr "Bạn phải giải ít nhất một bài trước khi được phép bình luận." - -#: judge/views/comment.py:403 -msgid "Posted comment" -msgstr "Bình luận đã đăng" - -#: judge/views/contests.py:124 judge/views/contests.py:471 -#: judge/views/contests.py:476 judge/views/contests.py:784 +#: judge/views/contests.py:119 judge/views/contests.py:375 +#: judge/views/contests.py:380 judge/views/contests.py:637 msgid "No such contest" msgstr "Không có contest nào như vậy" -#: judge/views/contests.py:125 judge/views/contests.py:472 +#: judge/views/contests.py:120 judge/views/contests.py:376 #, python-format msgid "Could not find a contest with the key \"%s\"." msgstr "Không tìm thấy kỳ thi với mã \"%s\"." -#: judge/views/contests.py:153 judge/views/contests.py:1561 -#: judge/views/stats.py:178 templates/contest/list.html:171 -#: templates/contest/list.html:213 templates/contest/list.html:250 -#: templates/contest/list.html:284 templates/course/course.html:59 -#: templates/course/left_sidebar.html:5 +#: judge/views/contests.py:139 judge/views/stats.py:178 #: templates/organization/org-left-sidebar.html:5 templates/stats/site.html:21 -#: templates/user/user-bookmarks.html:19 templates/user/user-bookmarks.html:80 +#: templates/user/user-bookmarks.html:54 msgid "Contests" msgstr "Kỳ thi" -#: judge/views/contests.py:331 -msgid "Start time (asc.)" -msgstr "Thời gian bắt đầu (tăng)" - -#: judge/views/contests.py:332 -msgid "Start time (desc.)" -msgstr "Thời gian bắt đầu (giảm)" - -#: judge/views/contests.py:333 judge/views/organization.py:314 -msgid "Name (asc.)" -msgstr "Tên (tăng)" - -#: judge/views/contests.py:334 judge/views/organization.py:315 -msgid "Name (desc.)" -msgstr "Tên (giảm)" - -#: judge/views/contests.py:335 -msgid "User count (asc.)" -msgstr "Số lượng tham gia (tăng)" - -#: judge/views/contests.py:336 -msgid "User count (desc.)" -msgstr "Số lượng tham gia (giảm)" - -#: judge/views/contests.py:476 +#: judge/views/contests.py:380 msgid "Could not find such contest." msgstr "Không tìm thấy kỳ thi nào như vậy." -#: judge/views/contests.py:484 +#: judge/views/contests.py:388 #, python-format msgid "Access to contest \"%s\" denied" msgstr "Truy cập tới kỳ thi \"%s\" bị từ chối" -#: judge/views/contests.py:570 +#: judge/views/contests.py:442 msgid "Clone Contest" msgstr "Nhân bản kỳ thi" -#: judge/views/contests.py:662 +#: judge/views/contests.py:511 msgid "Contest not ongoing" msgstr "Kỳ thi đang không diễn ra" -#: judge/views/contests.py:663 +#: judge/views/contests.py:512 #, python-format msgid "\"%s\" is not currently ongoing." msgstr "\"%s\" kỳ thi đang không diễn ra." -#: judge/views/contests.py:676 +#: judge/views/contests.py:519 +msgid "Already in contest" +msgstr "Đã ở trong kỳ thi" + +#: judge/views/contests.py:520 +#, python-format +msgid "You are already in a contest: \"%s\"." +msgstr "Bạn đã ở trong kỳ thi: \"%s\"." + +#: judge/views/contests.py:530 msgid "Banned from joining" msgstr "Bị cấm tham gia" -#: judge/views/contests.py:678 +#: judge/views/contests.py:532 msgid "" "You have been declared persona non grata for this contest. You are " "permanently barred from joining this contest." msgstr "Bạn không được phép tham gia kỳ thi này." -#: judge/views/contests.py:768 +#: judge/views/contests.py:621 #, python-format msgid "Enter access code for \"%s\"" msgstr "Nhập mật khẩu truy cập cho \"%s\"" -#: judge/views/contests.py:785 +#: judge/views/contests.py:638 #, python-format msgid "You are not in contest \"%s\"." msgstr "Bạn không ở trong kỳ thi \"%s\"." -#: judge/views/contests.py:808 +#: judge/views/contests.py:661 msgid "ContestCalendar requires integer year and month" msgstr "Lịch thi yêu cầu giá trị cho năm và tháng là số nguyên" -#: judge/views/contests.py:866 +#: judge/views/contests.py:719 #, python-format msgid "Contests in %(month)s" msgstr "Các kỳ thi trong %(month)s" -#: judge/views/contests.py:867 +#: judge/views/contests.py:720 msgid "F Y" msgstr "F Y" -#: judge/views/contests.py:927 +#: judge/views/contests.py:780 #, python-format msgid "%s Statistics" msgstr "%s Thống kê" -#: judge/views/contests.py:1206 +#: judge/views/contests.py:1072 #, python-format msgid "%s Rankings" msgstr "%s Bảng điểm" -#: judge/views/contests.py:1217 +#: judge/views/contests.py:1083 msgid "???" msgstr "???" -#: judge/views/contests.py:1281 +#: judge/views/contests.py:1111 #, python-format msgid "Your participation in %s" msgstr "Lần tham gia trong %s" -#: judge/views/contests.py:1282 +#: judge/views/contests.py:1112 #, python-format msgid "%s's participation in %s" msgstr "Lần tham gia của %s trong %s" -#: judge/views/contests.py:1296 +#: judge/views/contests.py:1126 msgid "Live" msgstr "Trực tiếp" -#: judge/views/contests.py:1314 templates/contest/contest-tabs.html:21 +#: judge/views/contests.py:1145 templates/contest/contest-tabs.html:19 msgid "Participation" msgstr "Lần tham gia" -#: judge/views/contests.py:1363 +#: judge/views/contests.py:1194 #, python-format msgid "%s MOSS Results" msgstr "%s Kết quả MOSS" -#: judge/views/contests.py:1399 +#: judge/views/contests.py:1230 #, python-format msgid "Running MOSS for %s..." msgstr "Đang chạy MOSS cho %s..." -#: judge/views/contests.py:1422 +#: judge/views/contests.py:1253 #, python-format msgid "Contest tag: %s" msgstr "Nhãn kỳ thi: %s" -#: judge/views/contests.py:1437 judge/views/ticket.py:67 +#: judge/views/contests.py:1268 judge/views/ticket.py:72 msgid "Issue description" msgstr "Mô tả vấn đề" -#: judge/views/contests.py:1480 +#: judge/views/contests.py:1311 #, python-format msgid "New clarification for %s" msgstr "Thông báo mới cho %s" -#: judge/views/course.py:350 -#, python-format -msgid "Edit lessons for %(course_name)s" -msgstr "Chỉnh sửa bài học cho %(course_name)s" - -#: judge/views/course.py:354 -#, python-format -msgid "Edit lessons for %(course_name)s" -msgstr "Chỉnh sửa bài học cho %(course_name)s" - -#: judge/views/course.py:414 -#, fuzzy, python-format -#| msgid "Edit lessons for %(course_name)s" -msgid "Grades in %(course_name)s" -msgstr "Chỉnh sửa bài học cho %(course_name)s" - -#: judge/views/course.py:418 -#, python-format -msgid "Grades in %(course_name)s" -msgstr "Điểm trong %(course_name)s" - -#: judge/views/course.py:472 -#, fuzzy, python-format -msgid "Grades of %(lesson_name)s in %(course_name)s" -msgstr "Chỉnh sửa bài học cho %(course_name)s" - -#: judge/views/course.py:478 -#, fuzzy, python-format -msgid "" -"Grades of %(lesson_name)s in %(course_name)s" -msgstr "Điểm trong %(course_name)s" - -#: judge/views/course.py:493 judge/views/course.py:578 -#: templates/course/contest_list.html:20 -#, fuzzy -#| msgid "order" -msgid "Order" -msgstr "thứ tự" - -#: judge/views/course.py:540 judge/views/organization.py:930 -#: templates/organization/org-right-sidebar.html:47 -msgid "Add contest" -msgstr "Thêm kỳ thi" - -#: judge/views/course.py:549 -#, fuzzy -#| msgid "Added from site" -msgid "Added from course" -msgstr "Thêm từ web" - -#: judge/views/course.py:569 -#, fuzzy -#| msgid "Contests" -msgid "Contest list" -msgstr "Kỳ thi" - -#: judge/views/course.py:691 -#, fuzzy -#| msgid "Out contest" -msgid "Edit contest" -msgstr "Ngoài kỳ thi" - -#: judge/views/course.py:695 -#, fuzzy -#| msgid "Edited from site" -msgid "Edited from course" -msgstr "Chỉnh sửa từ web" - -#: judge/views/course.py:717 -#, fuzzy, python-format -#| msgid "Grades in %(course_name)s" -msgid "Edit %(contest_name)s" -msgstr "Điểm trong %(course_name)s" - -#: judge/views/custom_file_upload.py:42 -msgid "File Upload" -msgstr "Tải file lên" - -#: judge/views/email.py:21 -msgid "New Email" -msgstr "Email mới" - -#: judge/views/email.py:31 -msgid "An account with this email already exists." -msgstr "Email đã được dùng cho tài khoản khác." - -#: judge/views/email.py:55 -msgid "Email Change Request" -msgstr "Thay đổi Email" - -#: judge/views/email.py:58 -msgid "" -"We have received a request to change your email to this email. Click the " -"button below to change your email:" -msgstr "" -"Chúng tôi đã nhận được yêu cầu thay đổi địa chỉ email của bạn thành địa chỉ " -"email này. Vui lòng nhấp vào nút bên dưới để thay đổi địa chỉ email của bạn:" - -#: judge/views/email.py:60 -msgid "Email Change" -msgstr "Thay đổi Email" - -#: judge/views/email.py:61 -msgid "Change Email" -msgstr "Thay đổi Email" - -#: judge/views/email.py:83 templates/user/edit-profile.html:127 -msgid "Change email" -msgstr "Thay đổi email" - -#: judge/views/email.py:106 -msgid "Success" -msgstr "Thành công" - -#: judge/views/email.py:110 -msgid "Invalid" -msgstr "Không hợp lệ" - -#: judge/views/email.py:119 -msgid "Email change pending" -msgstr "Yêu cầu thay đổi email đang đợi xác thực." - #: judge/views/error.py:17 msgid "404 error" msgstr "Lỗi 404" @@ -3193,135 +2815,107 @@ msgstr "không có quyền cho %s" msgid "corrupt page %s" msgstr "trang bị sập %s" -#: judge/views/internal.py:24 +#: judge/views/internal.py:12 #, fuzzy #| msgid "contest problems" msgid "Internal problems" msgstr "bài trong kỳ thi" -#: judge/views/internal.py:106 -#, fuzzy -#| msgid "request time" -msgid "Request times" -msgstr "thời gian đăng ký" - #: judge/views/language.py:12 templates/status/judge-status-table.html:9 #: templates/status/status-tabs.html:5 msgid "Runtimes" msgstr "Runtimes" -#: judge/views/markdown_editor.py:12 -msgid "Markdown Editor" -msgstr "" - -#: judge/views/notification.py:32 +#: judge/views/notification.py:43 #, python-format msgid "Notifications (%d unseen)" msgstr "Thông báo (%d chưa xem)" -#: judge/views/organization.py:157 judge/views/organization.py:164 +#: judge/views/organization.py:148 judge/views/organization.py:154 msgid "No such organization" msgstr "Không có tổ chức như vậy" -#: judge/views/organization.py:158 +#: judge/views/organization.py:149 #, python-format msgid "Could not find an organization with the key \"%s\"." msgstr "Không tìm thấy tổ chức với mã \"%s\"." -#: judge/views/organization.py:165 +#: judge/views/organization.py:155 msgid "Could not find such organization." msgstr "" -#: judge/views/organization.py:189 +#: judge/views/organization.py:178 msgid "Can't edit organization" msgstr "Không thể chỉnh sửa tổ chức" -#: judge/views/organization.py:190 +#: judge/views/organization.py:179 msgid "You are not allowed to edit this organization." msgstr "Bạn không được phép chỉnh sửa tổ chức này." -#: judge/views/organization.py:202 judge/views/organization.py:400 +#: judge/views/organization.py:191 judge/views/organization.py:359 +#, fuzzy +#| msgid "Can't edit organization" msgid "Can't access organization" -msgstr "Không thể truy cập nhóm" +msgstr "Không thể chỉnh sửa tổ chức" -#: judge/views/organization.py:203 judge/views/organization.py:401 +#: judge/views/organization.py:192 judge/views/organization.py:360 msgid "You are not allowed to access this organization." msgstr "Bạn không được phép chỉnh sửa tổ chức này." -#: judge/views/organization.py:248 judge/views/stats.py:184 -#: templates/contest/list.html:78 templates/problem/list-base.html:90 -#: templates/stats/site.html:33 templates/user/user-list-tabs.html:6 +#: judge/views/organization.py:250 judge/views/register.py:48 +#: judge/views/stats.py:184 templates/contest/list.html:85 +#: templates/problem/list-base.html:98 templates/stats/site.html:33 +#: templates/user/user-left-sidebar.html:4 templates/user/user-list-tabs.html:6 msgid "Groups" msgstr "Nhóm" -#: judge/views/organization.py:316 -msgid "Member count (asc.)" -msgstr "Số lượng thành viên (tăng)" - -#: judge/views/organization.py:317 -msgid "Member count (desc.)" -msgstr "Số lượng thành viên (giảm)" - -#: judge/views/organization.py:407 +#: judge/views/organization.py:366 #, python-format msgid "%s Members" msgstr "%s Thành viên" -#: judge/views/organization.py:529 +#: judge/views/organization.py:506 #, python-brace-format msgid "All submissions in {0}" msgstr "Bài nộp trong {0}" -#: judge/views/organization.py:537 judge/views/submission.py:858 -msgid "Submissions in" -msgstr "Bài nộp trong" - -#: judge/views/organization.py:562 judge/views/organization.py:568 -#: judge/views/organization.py:575 +#: judge/views/organization.py:536 judge/views/organization.py:542 +#: judge/views/organization.py:549 msgid "Joining group" msgstr "Tham gia nhóm" -#: judge/views/organization.py:563 +#: judge/views/organization.py:537 msgid "You are already in the group." msgstr "Bạn đã ở trong nhóm." -#: judge/views/organization.py:568 +#: judge/views/organization.py:542 msgid "This group is not open." msgstr "Nhóm này là nhóm kín." -#: judge/views/organization.py:576 -#, python-brace-format -msgid "You may not be part of more than {count} public groups." -msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai." - -#: judge/views/organization.py:591 +#: judge/views/organization.py:565 msgid "Leaving group" msgstr "Rời nhóm" -#: judge/views/organization.py:592 +#: judge/views/organization.py:566 #, python-format msgid "You are not in \"%s\"." msgstr "Bạn không ở trong \"%s\"." -#: judge/views/organization.py:617 +#: judge/views/organization.py:591 #, python-format msgid "Request to join %s" msgstr "Đăng ký tham gia %s" -#: judge/views/organization.py:647 +#: judge/views/organization.py:622 msgid "Join request detail" msgstr "Chi tiết đơn đăng ký" -#: judge/views/organization.py:681 -msgid "Manage join requests" -msgstr "Quản lý đơn đăng ký" - -#: judge/views/organization.py:685 +#: judge/views/organization.py:670 #, python-format msgid "Managing join requests for %s" msgstr "Quản lý đơn đăng ký cho %s" -#: judge/views/organization.py:725 +#: judge/views/organization.py:710 #, python-format msgid "" "Your organization can only receive %d more members. You cannot approve %d " @@ -3330,221 +2924,190 @@ msgstr "" "Tổ chức chỉ có thể chứa %d thành viên. Bạn không thể chấp thuận nhiều hơn %d " "người." -#: judge/views/organization.py:743 +#: judge/views/organization.py:728 #, python-format msgid "Approved %d user." msgid_plural "Approved %d users." msgstr[0] "Đã chấp thuận %d người." -#: judge/views/organization.py:746 +#: judge/views/organization.py:731 #, python-format msgid "Rejected %d user." msgid_plural "Rejected %d users." msgstr[0] "Đã từ chối %d người." -#: judge/views/organization.py:786 +#: judge/views/organization.py:771 #, python-format msgid "Add member for %s" msgstr "Thêm thành viên cho %s" -#: judge/views/organization.py:802 +#: judge/views/organization.py:783 #, fuzzy #| msgid "Edited from site" msgid "Added members from site" msgstr "Chỉnh sửa từ web" -#: judge/views/organization.py:822 judge/views/organization.py:830 -#: judge/views/organization.py:839 +#: judge/views/organization.py:803 judge/views/organization.py:811 msgid "Can't kick user" msgstr "Không thể đuổi" -#: judge/views/organization.py:823 +#: judge/views/organization.py:804 msgid "The user you are trying to kick does not exist!" msgstr "" -#: judge/views/organization.py:831 +#: judge/views/organization.py:812 #, python-format msgid "The user you are trying to kick is not in organization: %s." msgstr "" -#: judge/views/organization.py:840 -#, fuzzy -#| msgid "Are you sure you want to leave this organization?" -msgid "The user you are trying to kick is an organization admin." -msgstr "Bạn có chắc muốn rời tổ chức?" - -#: judge/views/organization.py:845 -#, fuzzy -#| msgid "Add members" -msgid "Kicked member" -msgstr "Thêm thành viên" - -#: judge/views/organization.py:865 judge/views/organization.py:1024 -#, python-format +#: judge/views/organization.py:833 judge/views/organization.py:985 +#, fuzzy, python-format +#| msgid "Editing %s" msgid "Edit %s" -msgstr "Chỉnh sửa %s" +msgstr "Đang chỉnh sửa %s" -#: judge/views/organization.py:893 templates/organization/search-form.html:19 +#: judge/views/organization.py:861 templates/organization/list.html:45 msgid "Create group" msgstr "Tạo nhóm" -#: judge/views/organization.py:908 +#: judge/views/organization.py:876 msgid "Exceeded limit" msgstr "" -#: judge/views/organization.py:909 +#: judge/views/organization.py:877 #, python-format msgid "You created too many groups. You can only create at most %d groups" msgstr "" -#: judge/views/organization.py:914 judge/views/organization.py:939 -#: judge/views/organization.py:1093 +#: judge/views/organization.py:882 judge/views/organization.py:907 +#: judge/views/organization.py:1051 msgid "Added from site" msgstr "Thêm từ web" -#: judge/views/organization.py:973 judge/views/organization.py:1140 +#: judge/views/organization.py:898 +#: templates/organization/org-right-sidebar.html:55 +msgid "Add contest" +msgstr "Thêm kỳ thi" + +#: judge/views/organization.py:941 judge/views/organization.py:1103 msgid "Permission denied" msgstr "Truy cập bị từ chối" -#: judge/views/organization.py:974 +#: judge/views/organization.py:942 #, fuzzy #| msgid "You are not allowed to edit this organization." msgid "You are not allowed to edit this contest" msgstr "Bạn không được phép chỉnh sửa tổ chức này." -#: judge/views/organization.py:1028 templates/blog/blog.html:31 -#: templates/comments/content-list.html:53 -#: templates/comments/content-list.html:66 -#: templates/contest/contest-tabs.html:36 templates/contest/macros.html:14 -#: templates/contest/tag-title.html:9 templates/course/contest_list.html:25 -#: templates/flatpages/admin_link.html:3 templates/license.html:10 -#: templates/organization/blog/pending.html:56 -#: templates/problem/editorial.html:15 templates/problem/feed/items.html:50 -#: templates/test_formatter/download_test_formatter.html:83 -msgid "Edit" -msgstr "Chỉnh sửa" - -#: judge/views/organization.py:1082 +#: judge/views/organization.py:1040 #, python-format msgid "Add blog for %s" msgstr "Thêm bài đăng cho %s" -#: judge/views/organization.py:1134 -#, fuzzy -#| msgid "Those who can edit this organization" -msgid "This blog does not belong to this organization" -msgstr "Những người có thể chỉnh sửa tổ chức" - -#: judge/views/organization.py:1136 +#: judge/views/organization.py:1104 msgid "Not allowed to edit this blog" msgstr "Bạn không được phép chỉnh sửa bài đăng này." -#: judge/views/organization.py:1193 +#: judge/views/organization.py:1136 #, python-format msgid "Edit blog %s" msgstr "Chỉnh sửa %s" -#: judge/views/organization.py:1239 +#: judge/views/organization.py:1187 #, python-format msgid "Pending blogs in %s" msgstr "Bài đang đợi duyệt trong %s" -#: judge/views/problem.py:135 +#: judge/views/problem.py:132 msgid "No such problem" msgstr "Không có bài nào như vậy" -#: judge/views/problem.py:136 +#: judge/views/problem.py:133 #, python-format msgid "Could not find a problem with the code \"%s\"." msgstr "Không tìm thấy bài tập với mã bài \"%s\"." -#: judge/views/problem.py:203 +#: judge/views/problem.py:200 #, python-brace-format msgid "Editorial for {0}" msgstr "Hướng dẫn cho {0}" -#: judge/views/problem.py:207 +#: judge/views/problem.py:204 #, python-brace-format msgid "Editorial for {0}" msgstr "Hướng dẫn cho {0}" -#: judge/views/problem.py:460 templates/contest/contest.html:117 -#: templates/course/lesson.html:14 +#: judge/views/problem.py:463 templates/contest/contest.html:97 #: templates/organization/org-left-sidebar.html:4 -#: templates/profile-table.html:25 templates/user/user-about.html:28 -#: templates/user/user-bookmarks.html:16 templates/user/user-tabs.html:5 -#: templates/user/users-table.html:19 +#: templates/user/user-about.html:28 templates/user/user-bookmarks.html:34 +#: templates/user/user-tabs.html:5 templates/user/users-table.html:19 msgid "Problems" msgstr "Bài tập" -#: judge/views/problem.py:842 +#: judge/views/problem.py:837 msgid "Problem feed" msgstr "Bài tập" -#: judge/views/problem.py:1046 judge/views/problem.py:1079 -msgid "

You have submitted too many submissions.

" -msgstr "

Bạn nộp quá nhiều bài.

" - -#: judge/views/problem.py:1058 +#: judge/views/problem.py:1075 msgid "Banned from submitting" msgstr "Bị cấm nộp bài" -#: judge/views/problem.py:1060 +#: judge/views/problem.py:1077 msgid "" "You have been declared persona non grata for this problem. You are " "permanently barred from submitting this problem." msgstr "Bạn đã bị cấm nộp bài này." -#: judge/views/problem.py:1098 +#: judge/views/problem.py:1100 msgid "Too many submissions" msgstr "Quá nhiều lần nộp" -#: judge/views/problem.py:1100 +#: judge/views/problem.py:1102 msgid "You have exceeded the submission limit for this problem." msgstr "Bạn đã vượt quá số lần nộp cho bài này." -#: judge/views/problem.py:1185 judge/views/problem.py:1190 +#: judge/views/problem.py:1181 judge/views/problem.py:1186 #, python-format msgid "Submit to %(problem)s" msgstr "Nộp bài cho %(problem)s" -#: judge/views/problem.py:1217 +#: judge/views/problem.py:1209 msgid "Clone Problem" msgstr "Nhân bản bài tập" -#: judge/views/problem_data.py:71 +#: judge/views/problem_data.py:69 msgid "Checker arguments must be a JSON object" msgstr "" -#: judge/views/problem_data.py:73 +#: judge/views/problem_data.py:71 msgid "Checker arguments is invalid JSON" msgstr "" -#: judge/views/problem_data.py:80 +#: judge/views/problem_data.py:78 msgid "Your zip file is invalid!" msgstr "File Zip không hợp lệ!" -#: judge/views/problem_data.py:170 +#: judge/views/problem_data.py:162 #, python-brace-format msgid "Comparing submissions for {0}" msgstr "So sánh các bài nộp cho {0}" -#: judge/views/problem_data.py:174 +#: judge/views/problem_data.py:166 #, python-brace-format msgid "Comparing submissions for {0}" msgstr "So sánh các bài nộp cho {0}" -#: judge/views/problem_data.py:211 +#: judge/views/problem_data.py:203 #, python-brace-format msgid "Editing data for {0}" msgstr "Chỉnh sửa dữ liệu cho {0}" -#: judge/views/problem_data.py:215 +#: judge/views/problem_data.py:207 #, python-format msgid "Editing data for %s" msgstr "Chỉnh sửa dữ liệu cho %s" -#: judge/views/problem_data.py:348 judge/views/problem_data.py:350 +#: judge/views/problem_data.py:337 judge/views/problem_data.py:339 #, python-format msgid "Generated init.yml for %s" msgstr "File init.yml cho %s" @@ -3554,45 +3117,63 @@ msgstr "File init.yml cho %s" msgid "Managing submissions for %s" msgstr "Quản lý bài nộp cho %s" -#: judge/views/problem_manage.py:127 +#: judge/views/problem_manage.py:120 #, python-format msgid "Rejudging selected submissions for %s..." msgstr "Đang chấm lại các bài nộp cho %s..." -#: judge/views/problem_manage.py:187 +#: judge/views/problem_manage.py:181 #, python-format msgid "Rescoring all submissions for %s..." msgstr "Đang tính điểm lại các bài nộp cho %s..." -#: judge/views/problem_manage.py:202 +#: judge/views/problem_manage.py:196 #, python-format msgid "Successfully scheduled %d submission for rejudging." msgid_plural "Successfully scheduled %d submissions for rejudging." msgstr[0] "Đã lên lịch chấm lại cho %d bài nộp." -#: judge/views/ranked_submission.py:68 +#: judge/views/ranked_submission.py:69 #, python-format msgid "Best solutions for %s" msgstr "Các bài nộp tốt nhất cho %s" -#: judge/views/ranked_submission.py:72 +#: judge/views/ranked_submission.py:73 #, python-brace-format msgid "Best solutions for {0}" msgstr "Các bài nộp tốt nhất cho {0}" -#: judge/views/register.py:30 templates/course/grades.html:80 -#: templates/course/grades_lesson.html:81 -#: templates/registration/registration_form.html:34 -#: templates/user/base-users-table.html:5 -#: templates/user/import/table_csv.html:4 -msgid "Username" -msgstr "Tên đăng nhập" +#: judge/views/ranked_submission.py:87 +#, python-format +msgid "Best solutions for %(problem)s in %(contest)s" +msgstr "Các bài nộp tốt nhất cho %(problem)s trong %(contest)s" -#: judge/views/register.py:42 templates/user/edit-profile.html:151 +#: judge/views/ranked_submission.py:91 +#, python-format +msgid "Best solutions for problem %(number)s in %(contest)s" +msgstr "Các bài nộp tốt nhất cho bài %(number)s trong %(contest)s" + +#: judge/views/ranked_submission.py:99 +#, python-brace-format +msgid "Best solutions for {0} in {2}" +msgstr "" +"Các bài nộp tốt nhất cho {0} trong {2}" + +#: judge/views/ranked_submission.py:106 +#, python-brace-format +msgid "Best solutions for problem {0} in {1}" +msgstr "Các bài nộp tốt nhất cho bài {0} trong {1}" + +#: judge/views/register.py:32 +msgid "A username must contain letters, numbers, or underscores" +msgstr "Tên đăng nhập phải chứa ký tự, chữ số, hoặc dấu gạch dưới" + +#: judge/views/register.py:42 templates/user/edit-profile.html:117 msgid "Preferred language" msgstr "Ngôn ngữ ưa thích" -#: judge/views/register.py:54 +#: judge/views/register.py:73 #, python-format msgid "" "The email address \"%s\" is already taken. Only one registration is allowed " @@ -3600,7 +3181,7 @@ msgid "" msgstr "" "Email \"%s\" đã được sử dụng. Mỗi email chỉ có thể đăng ký một tài khoản." -#: judge/views/register.py:66 +#: judge/views/register.py:85 msgid "" "Your email provider is not allowed due to history of abuse. Please use a " "reputable email provider." @@ -3608,15 +3189,15 @@ msgstr "" "Your email provider is not allowed due to history of abuse. Please use a " "reputable email provider." -#: judge/views/register.py:74 judge/views/register.py:111 +#: judge/views/register.py:93 judge/views/register.py:131 msgid "Registration" msgstr "Đăng ký" -#: judge/views/register.py:125 +#: judge/views/register.py:145 msgid "Authentication failure" msgstr "Xác thực thất bại" -#: judge/views/resolver.py:11 templates/contest/contest-tabs.html:27 +#: judge/views/resolver.py:11 templates/contest/contest-tabs.html:26 #, fuzzy #| msgid "solve rate" msgid "Resolver" @@ -3626,14 +3207,13 @@ msgstr "Tỉ lệ giải đúng" msgid "Language statistics" msgstr "Thống kê ngôn ngữ" -#: judge/views/stats.py:154 templates/contest/contest-tabs.html:22 -#: templates/organization/org-left-sidebar.html:6 templates/stats/site.html:15 -#: templates/user/user-tabs.html:6 +#: judge/views/stats.py:154 templates/organization/org-left-sidebar.html:6 +#: templates/stats/site.html:15 msgid "Submissions" msgstr "Bài nộp" -#: judge/views/stats.py:160 templates/comments/list.html:4 -#: templates/stats/site.html:39 +#: judge/views/stats.py:160 templates/blog/list.html:45 +#: templates/comments/list.html:4 templates/stats/site.html:39 msgid "Comments" msgstr "Bình luận" @@ -3649,7 +3229,7 @@ msgstr "Tin nhắn mới" msgid "Site statistics" msgstr "Thống kê" -#: judge/views/status.py:26 templates/submission/list.html:336 +#: judge/views/status.py:26 templates/submission/list.html:338 msgid "Status" msgstr "Kết quả chấm" @@ -3657,65 +3237,49 @@ msgstr "Kết quả chấm" msgid "Version matrix" msgstr "Ma trận phiên bản" -#: judge/views/submission.py:99 judge/views/submission.py:107 +#: judge/views/submission.py:121 judge/views/submission.py:129 #, python-format msgid "Submission of %(problem)s by %(user)s" msgstr "Bài nộp của %(user)s cho bài %(problem)s" -#: judge/views/submission.py:291 judge/views/submission.py:292 -#: templates/problem/problem.html:192 +#: judge/views/submission.py:321 judge/views/submission.py:322 +#: templates/problem/problem.html:169 msgid "All submissions" msgstr "Tất cả bài nộp" -#: judge/views/submission.py:569 judge/views/submission.py:574 +#: judge/views/submission.py:571 msgid "All my submissions" msgstr "Tất cả bài nộp của tôi" -#: judge/views/submission.py:570 +#: judge/views/submission.py:572 #, python-format msgid "All submissions by %s" msgstr "Tất cả bài nộp của %s" -#: judge/views/submission.py:576 -#, python-brace-format -msgid "All submissions by {0}" -msgstr "Tất cả bài nộp của {0}" - -#: judge/views/submission.py:599 -#, fuzzy -#| msgid "All submissions" -msgid "All friend submissions" -msgstr "Tất cả bài nộp" - -#: judge/views/submission.py:628 +#: judge/views/submission.py:617 #, python-format msgid "All submissions for %s" msgstr "Tất cả bài nộp cho %s" -#: judge/views/submission.py:656 +#: judge/views/submission.py:645 msgid "Must pass a problem" msgstr "Phải làm được một bài" -#: judge/views/submission.py:714 +#: judge/views/submission.py:703 #, python-format msgid "My submissions for %(problem)s" msgstr "Bài nộp của tôi cho %(problem)s" -#: judge/views/submission.py:715 +#: judge/views/submission.py:704 #, python-format msgid "%(user)s's submissions for %(problem)s" msgstr "Các bài nộp của %(user)s cho %(problem)s" -#: judge/views/submission.py:838 +#: judge/views/submission.py:842 msgid "Must pass a contest" msgstr "Phải qua một kỳ thi" -#: judge/views/submission.py:862 -#, python-brace-format -msgid "Submissions in {1}" -msgstr "Bài nộp trong {1}" - -#: judge/views/submission.py:900 +#: judge/views/submission.py:872 #, python-brace-format msgid "" "{0}'s submissions for {2} in {0} cho {2} trong {4}" -#: judge/views/submission.py:912 +#: judge/views/submission.py:884 #, python-brace-format msgid "" "{0}'s submissions for problem {2} in {3}" @@ -3733,56 +3297,50 @@ msgstr "" "Các bài nộp của {0} cho bài {2} trong {3}" "" -#: judge/views/submission.py:1046 -msgid "You don't have permission to access." -msgstr "Bạn không có quyền truy cập." - -#: judge/views/test_formatter/test_formatter.py:64 -#: judge/views/test_formatter/test_formatter.py:107 -#: judge/views/test_formatter/test_formatter.py:190 +#: judge/views/submission.py:1021 #, fuzzy -#| msgid "contest format" -msgid "Test Formatter" -msgstr "format kỳ thi" +#| msgid "You do not have the permission to rejudge submissions." +msgid "You don't have permission to access." +msgstr "Bạn không có quyền chấm lại bài." -#: judge/views/ticket.py:60 judge/views/ticket.py:66 +#: judge/views/ticket.py:65 judge/views/ticket.py:71 msgid "Ticket title" msgstr "Tiêu đề báo cáo" -#: judge/views/ticket.py:124 judge/views/ticket.py:128 +#: judge/views/ticket.py:129 judge/views/ticket.py:133 #, python-format msgid "New ticket for %s" msgstr "Báo cáo mới cho %s" -#: judge/views/ticket.py:205 +#: judge/views/ticket.py:210 #, python-format msgid "%(title)s - Ticket %(id)d" msgstr "%(title)s - Báo cáo %(id)d" -#: judge/views/ticket.py:334 +#: judge/views/ticket.py:339 #, python-format msgid "Tickets - Page %(number)d of %(total)d" msgstr "Báo cáo - Trang %(number)d trên %(total)d" -#: judge/views/ticket.py:400 +#: judge/views/ticket.py:405 #, python-format msgid "New Ticket: %s" msgstr "Báo cáo mới: %s" -#: judge/views/ticket.py:403 +#: judge/views/ticket.py:408 #, python-format msgid "#%(id)d, assigned to: %(users)s" msgstr "#%(id)d, được phân cho: %(users)s" -#: judge/views/ticket.py:407 +#: judge/views/ticket.py:412 msgid ", " msgstr ", " -#: judge/views/ticket.py:412 +#: judge/views/ticket.py:417 msgid "no one" msgstr "không người nào" -#: judge/views/ticket.py:439 +#: judge/views/ticket.py:444 #, python-format msgid "New Ticket Message For: %s" msgstr "Tin nhắn báo cáo mới cho: %s" @@ -3799,43 +3357,48 @@ msgstr "Hủy kích hoạt Two Factor Authentication" msgid "Perform Two Factor Authentication" msgstr "Thực hiện Two Factor Authentication" -#: judge/views/user.py:115 +#: judge/views/user.py:96 msgid "No such user" msgstr "Không người dùng nào như vậy" -#: judge/views/user.py:116 +#: judge/views/user.py:97 #, python-format msgid "No user handle \"%s\"." msgstr "Không tồn tại tên người dùng \"%s\"." -#: judge/views/user.py:121 +#: judge/views/user.py:102 msgid "My account" msgstr "Tài khoản của tôi" -#: judge/views/user.py:123 +#: judge/views/user.py:104 #, python-format msgid "User %s" msgstr "Thành viên %s" -#: judge/views/user.py:213 +#: judge/views/user.py:202 +msgid "M j, Y" +msgstr "j M, Y" + +#: judge/views/user.py:237 msgid "M j, Y, G:i" msgstr "j M, Y, G:i" -#: judge/views/user.py:414 +#: judge/views/user.py:416 msgid "Updated on site" msgstr "Được cập nhật trên web" #: judge/views/user.py:431 templates/admin/auth/user/change_form.html:14 -#: templates/admin/auth/user/change_form.html:17 +#: templates/admin/auth/user/change_form.html:17 templates/base.html:282 +#: templates/user/user-tabs.html:11 msgid "Edit profile" msgstr "Chỉnh sửa thông tin" -#: judge/views/user.py:441 templates/user/user-left-sidebar.html:2 +#: judge/views/user.py:442 templates/user/user-left-sidebar.html:2 #: templates/user/user-list-tabs.html:4 msgid "Leaderboard" msgstr "Xếp hạng" -#: judge/views/user.py:541 +#: judge/views/user.py:543 msgid "Import Users" msgstr "" @@ -3848,30 +3411,26 @@ msgstr "Dữ liệu không hợp lệ: %s" msgid "Bad latitude or longitude" msgstr "Kinh độ / Vĩ độ không hợp lệ" -#: templates/actionbar/list.html:15 +#: templates/actionbar/list.html:13 msgid "Like" msgstr "Thích" -#: templates/actionbar/list.html:28 templates/blog/list.html:46 +#: templates/actionbar/list.html:25 msgid "Comment" msgstr "Bình luận" -#: templates/actionbar/list.html:43 +#: templates/actionbar/list.html:35 templates/user/user-tabs.html:10 msgid "Bookmark" msgstr "Lưu" -#: templates/actionbar/list.html:50 +#: templates/actionbar/list.html:42 msgid "Share" msgstr "Chia sẻ" -#: templates/actionbar/list.html:57 +#: templates/actionbar/list.html:49 msgid "Report" msgstr "Báo cáo" -#: templates/actionbar/media-js.html:116 -msgid "Copied link" -msgstr "Đã sao chép link" - #: templates/admin/judge/contest/change_form.html:9 msgid "Are you sure you want to rejudge ALL the submissions?" msgstr "Bạn có muốn chấm lại tất cả bài nộp?" @@ -3900,6 +3459,7 @@ msgid "View Submissions" msgstr "Xem Bài Nộp" #: templates/admin/judge/problem/change_form.html:18 +#: templates/user/user-base.html:109 msgid "View submissions" msgstr "Xem bài nộp" @@ -3915,88 +3475,96 @@ msgstr "Chỉnh sửa thông tin" #: templates/admin/judge/submission/change_form.html:14 #: templates/admin/judge/submission/change_form.html:17 -#: templates/submission/status.html:148 +#: templates/submission/source.html:39 templates/submission/status.html:145 msgid "Rejudge" msgstr "Chấm lại" -#: templates/base.html:146 +#: templates/base.html:227 templates/chat/chat.html:580 msgid "Chat" msgstr "Chat" -#: templates/base.html:156 +#: templates/base.html:237 msgid "Notification" msgstr "Thông báo" -#: templates/base.html:183 +#: templates/base.html:258 msgid "Dark Mode" msgstr "" -#: templates/base.html:194 templates/profile-table.html:3 +#: templates/base.html:274 msgid "Profile" msgstr "Trang cá nhân" -#: templates/base.html:203 +#: templates/base.html:276 templates/chat/chat.html:20 +#: templates/comments/list.html:125 templates/contest/contest-list-tabs.html:4 +#: templates/contest/ranking-table.html:49 templates/internal/base.html:59 +#: templates/organization/org-left-sidebar.html:12 +#: templates/problem/left-sidebar.html:6 +#: templates/problem/problem-list-tabs.html:6 +#: templates/submission/info-base.html:12 templates/submission/list.html:392 +#: templates/submission/submission-list-tabs.html:15 +msgid "Admin" +msgstr "Admin" + +#: templates/base.html:279 msgid "Internal" msgstr "Nội bộ" -#: templates/base.html:206 +#: templates/base.html:280 msgid "Stats" msgstr "Thống kê" -#: templates/base.html:210 templates/user/user-tabs.html:11 -msgid "Bookmarks" -msgstr "Đã lưu" - -#: templates/base.html:217 -#, fuzzy -#| msgid "Stop spectating" -msgid "Stop impersonating" -msgstr "Ngừng theo dõi" - -#: templates/base.html:222 +#: templates/base.html:287 msgid "Log out" msgstr "Đăng xuất" -#: templates/base.html:232 +#: templates/base.html:296 #: templates/registration/password_reset_complete.html:4 msgid "Log in" msgstr "Đăng nhập" -#: templates/base.html:233 +#: templates/base.html:297 templates/registration/registration_form.html:72 +msgid "or" +msgstr "hoặc" + +#: templates/base.html:298 msgid "Sign up" msgstr "Đăng ký" -#: templates/base.html:247 +#: templates/base.html:311 msgid "spectating" msgstr "đang theo dõi" -#: templates/base.html:259 templates/contest/list.html:111 -msgid "In contest" -msgstr "Trong kỳ thi" +#: templates/base.html:323 +msgid "Compete" +msgstr "Thi" -#: templates/base.html:261 -msgid "Out contest" -msgstr "Ngoài kỳ thi" +#: templates/base.html:325 +msgid "General" +msgstr "Chung" -#: templates/base.html:271 +#: templates/base.html:332 msgid "This site works best with JavaScript enabled." msgstr "" -#: templates/blog/blog.html:28 +#: templates/blog/blog.html:29 #, python-format msgid " posted on %(time)s" msgstr "đã đăng vào %(time)s" -#: templates/blog/blog.html:35 templates/contest/contest.html:93 -#: templates/contest/contest.html:97 +#: templates/blog/blog.html:32 templates/comments/list.html:104 +#: templates/comments/list.html:119 templates/contest/contest-tabs.html:35 +#: templates/contest/list.html:120 templates/contest/tag-title.html:9 +#: templates/flatpages/admin_link.html:3 templates/license.html:10 +#: templates/problem/editorial.html:16 templates/problem/feed.html:76 +msgid "Edit" +msgstr "Chỉnh sửa" + +#: templates/blog/blog.html:36 templates/contest/contest.html:89 msgid "Edit in" msgstr "Chỉnh sửa trong" -#: templates/blog/content.html:43 templates/comments/feed.html:18 -#: templates/organization/blog/pending.html:42 -#: templates/problem/feed/items.html:109 templates/ticket/feed.html:26 -#: templates/user/user-bookmarks.html:61 templates/user/user-bookmarks.html:131 -#: templates/user/user-bookmarks.html:180 +#: templates/blog/content.html:46 templates/problem/feed.html:136 msgid "...More" msgstr "...Xem thêm" @@ -4015,143 +3583,109 @@ msgstr "" " vào %(time)s\n" " " -#: templates/blog/list.html:45 +#: templates/blog/list.html:44 msgid "News" msgstr "Tin tức" -#: templates/blog/list.html:48 +#: templates/blog/list.html:46 +msgid "Tickets" +msgstr "Báo cáo" + +#: templates/blog/list.html:47 msgid "Events" msgstr "Sự kiện" -#: templates/blog/list.html:60 +#: templates/blog/list.html:63 msgid "You have no ticket" msgstr "Bạn không có báo cáo" -#: templates/blog/list.html:73 templates/problem/list.html:150 -#: templates/problem/problem.html:448 +#: templates/blog/list.html:79 templates/problem/list.html:150 +#: templates/problem/problem.html:384 msgid "Clarifications" msgstr "Thông báo" -#: templates/blog/list.html:78 templates/course/contest_list.html:32 +#: templates/blog/list.html:85 msgid "Add" msgstr "Thêm mới" -#: templates/blog/list.html:98 templates/problem/list.html:172 -#: templates/problem/problem.html:459 +#: templates/blog/list.html:105 templates/problem/list.html:172 +#: templates/problem/problem.html:395 msgid "No clarifications have been made at this time." msgstr "Không có thông báo nào." -#: templates/chat/chat.html:5 templates/chat/chat_js.html:570 +#: templates/chat/chat.html:4 templates/chat/chat.html:554 msgid "Chat Box" msgstr "Chat Box" -#: templates/chat/chat.html:68 templates/chat/chat_js.html:530 +#: templates/chat/chat.html:18 +msgid "Recent" +msgstr "Gần đây" + +#: templates/chat/chat.html:19 +msgid "Following" +msgstr "Bạn bè" + +#: templates/chat/chat.html:21 +msgid "Other" +msgstr "Thành viên khác" + +#: templates/chat/chat.html:171 +msgid "New message(s)" +msgstr "Tin nhắn mới" + +#: templates/chat/chat.html:520 templates/chat/chat.html:602 #: templates/user/base-users-js.html:10 #: templates/user/base-users-two-col.html:19 msgid "Search by handle..." msgstr "Tìm kiếm theo tên..." -#: templates/chat/chat.html:89 -msgid "Enter your message" -msgstr "Nhập tin nhắn" +#: templates/chat/chat.html:582 templates/chat/chat.html:589 +msgid "Online Users" +msgstr "Trực tuyến" -#: templates/chat/chat.html:90 +#: templates/chat/chat.html:590 +msgid "Refresh" +msgstr "Làm mới" + +#: templates/chat/chat.html:623 msgid "Emoji" msgstr "" -#: templates/chat/chat_js.html:133 -msgid "New message(s)" -msgstr "Tin nhắn mới" - -#: templates/chat/chat_js.html:440 -msgid "Mute this user and delete all messages?" -msgstr "Mute người dùng này và xóa tất cả tin nhắn chung?" +#: templates/chat/chat.html:624 +msgid "Enter your message" +msgstr "Nhập tin nhắn" #: templates/chat/message.html:20 templates/fine_uploader/script.html:25 #: templates/organization/blog/edit.html:37 msgid "Delete" msgstr "Xóa" -#: templates/chat/message.html:25 -msgid "Mute" -msgstr "" - -#: templates/chat/message_list.html:8 +#: templates/chat/message_list.html:7 msgid "You are connect now. Say something to start the conversation." msgstr "Các bạn đã kết nối. Nhắn gì đó để bắt đầu cuộc trò chuyện." #: templates/chat/online_status.html:6 -#: templates/chat/user_online_status.html:21 +#: templates/chat/user_online_status.html:14 msgid "Lobby" msgstr "Sảnh chung" -#: templates/chat/online_status.html:52 -#: templates/chat/user_online_status.html:39 -msgid "Ignore" -msgstr "Tắt thông báo" - -#: templates/chat/user_online_status.html:26 +#: templates/chat/user_online_status.html:19 #, python-brace-format msgid "Last online on {time}" msgstr "Trực tuyến vào {time}" -#: templates/chat/user_online_status.html:37 +#: templates/chat/user_online_status.html:31 msgid "Unignore" msgstr "Mở lại thông báo" -#: templates/chat/user_online_status.html:45 +#: templates/chat/user_online_status.html:33 +msgid "Ignore" +msgstr "Tắt thông báo" + +#: templates/chat/user_online_status.html:40 msgid "users are online" msgstr "người đang trực tuyến" -#: templates/comments/content-list.html:11 -#: templates/comments/content-list.html:12 -#: templates/comments/content-list.html:20 -#: templates/comments/content-list.html:21 -msgid "Please login to vote" -msgstr "Đăng nhập để vote" - -#: templates/comments/content-list.html:36 -#, python-format -msgid "edit %(edits)s" -msgstr "chỉnh sửa %(edits)s" - -#: templates/comments/content-list.html:38 templates/comments/media-js.html:67 -msgid "edited" -msgstr "đã chỉnh sửa" - -#: templates/comments/content-list.html:47 templates/notification/list.html:11 -msgid "Link" -msgstr "Đường dẫn" - -#: templates/comments/content-list.html:57 -#: templates/comments/content-list.html:63 -msgid "Reply" -msgstr "Phản hồi" - -#: templates/comments/content-list.html:70 -msgid "Hide" -msgstr "Ẩn" - -#: templates/comments/content-list.html:85 -#, python-format -msgid "" -"This comment is hidden due to too much negative feedback. Click here " -"to view it." -msgstr "" -"Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở." - -#: templates/comments/content-list.html:102 -msgid "reply" -msgid_plural "replies" -msgstr[0] "phản hồi" - -#: templates/comments/content-list.html:127 -msgid "more comment" -msgid_plural "more comments" -msgstr[0] "bình luận nữa" - #: templates/comments/list.html:6 msgid "Write comment" msgstr "Thêm bình luận" @@ -4168,24 +3702,63 @@ msgstr "Nội dung không hợp lệ." msgid "Post!" msgstr "Đăng!" -#: templates/comments/list.html:44 +#: templates/comments/list.html:54 templates/comments/list.html:63 +msgid "Please login to vote" +msgstr "Đăng nhập để vote" + +#: templates/comments/list.html:76 +#, python-brace-format +msgid "commented on {time}" +msgstr "bình luận vào {time}" + +#: templates/comments/list.html:85 +#, python-format +msgid "edit %(edits)s" +msgstr "chỉnh sửa %(edits)s" + +#: templates/comments/list.html:87 templates/comments/media-js.html:96 +msgid "edited" +msgstr "đã chỉnh sửa" + +#: templates/comments/list.html:96 templates/notification/list.html:14 +msgid "Link" +msgstr "Link" + +#: templates/comments/list.html:109 templates/comments/list.html:116 +msgid "Reply" +msgstr "Trả lời" + +#: templates/comments/list.html:122 +msgid "Hide" +msgstr "Ẩn" + +#: templates/comments/list.html:137 +#, python-format +msgid "" +"This comment is hidden due to too much negative feedback. Click here to view it." +msgstr "" +"Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở." + +#: templates/comments/list.html:154 msgid "There are no comments at the moment." msgstr "Không có bình luận nào." -#: templates/comments/list.html:49 +#: templates/comments/list.html:159 msgid "Comments are disabled on this page." msgstr "Bình luận bị tắt trong trang này." -#: templates/comments/media-js.html:12 +#: templates/comments/media-js.html:39 msgid "Replying to comment" msgstr "Trả lời bình luận" -#: templates/comments/media-js.html:62 +#: templates/comments/media-js.html:91 #, python-brace-format msgid "edit {edits}" msgstr "chỉnh sửa {edits}" -#: templates/comments/media-js.html:65 +#: templates/comments/media-js.html:94 msgid "original" msgstr "original" @@ -4241,124 +3814,127 @@ msgstr "Thứ sáu" msgid "Saturday" msgstr "Thứ bảy" -#: templates/contest/clarification.html:52 -#: templates/contest/search-form.html:35 templates/organization/new.html:10 -#: templates/ticket/new.html:38 +#: templates/contest/clarification.html:52 templates/contest/list.html:219 +#: templates/organization/new.html:10 templates/ticket/new.html:38 msgid "Create" msgstr "Tạo mới" -#: templates/contest/clone.html:45 +#: templates/contest/clone.html:37 msgid "Enter a new key for the cloned contest:" msgstr "Nhập mã kỳ thi cho kỳ thi nhân bản:" -#: templates/contest/clone.html:55 templates/problem/clone.html:40 +#: templates/contest/clone.html:40 templates/problem/clone.html:40 msgid "Clone!" msgstr "Nhân bản!" -#: templates/contest/contest-datetime.html:6 +#: templates/contest/contest-datetime.html:13 #, python-format msgid "Spectating, contest ends in %(countdown)s." msgstr "Đang theo dõi, kỳ thi còn %(countdown)s." -#: templates/contest/contest-datetime.html:8 +#: templates/contest/contest-datetime.html:15 #, python-format msgid "Participating virtually, %(countdown)s remaining." msgstr "Đang tham gia ảo, còn %(countdown)s." -#: templates/contest/contest-datetime.html:10 +#: templates/contest/contest-datetime.html:17 msgid "Participating virtually." msgstr "Đang tham gia ảo." -#: templates/contest/contest-datetime.html:14 +#: templates/contest/contest-datetime.html:21 #, python-format msgid "Starting in %(countdown)s." msgstr "Kỳ thi bắt đầu trong %(countdown)s nữa." -#: templates/contest/contest-datetime.html:16 +#: templates/contest/contest-datetime.html:23 msgid "Contest is over." msgstr "Kỳ thi đã kết thúc." -#: templates/contest/contest-datetime.html:20 +#: templates/contest/contest-datetime.html:27 #, python-format msgid "Your time is up! Contest ends in %(countdown)s." msgstr "Hết giờ! Kỳ thi kết thúc trong %(countdown)s." -#: templates/contest/contest-datetime.html:22 +#: templates/contest/contest-datetime.html:29 #, python-format msgid "You have %(countdown)s remaining." msgstr "Bạn còn %(countdown)s." -#: templates/contest/contest-datetime.html:25 +#: templates/contest/contest-datetime.html:32 #, python-format msgid "Contest ends in %(countdown)s." msgstr "Kỳ thi kết thúc trong %(countdown)s" -#: templates/contest/contest-datetime.html:32 -#: templates/contest/contest-datetime.html:36 +#: templates/contest/contest-datetime.html:39 +#: templates/contest/contest-datetime.html:43 msgid "F j, Y, G:i T" msgstr "G:i T, j F, Y" -#: templates/contest/contest-datetime.html:32 +#: templates/contest/contest-datetime.html:39 #, python-format msgid "" "%(time_limit)s window between %(start_time)s and " "%(end_time)s" msgstr "" -"Dài %(time_limit)s từ %(start_time)s đến %(end_time)s" - -#: templates/contest/contest-datetime.html:36 -#, python-format -msgid "%(length)s long starting on %(start_time)s" -msgstr "Dài %(length)s bắt đầu từ %(start_time)s" +"Kéo dài %(time_limit)s từ %(start_time)s đến %(end_time)s" #: templates/contest/contest-datetime.html:43 +#, python-format +msgid "%(length)s long starting on %(start_time)s" +msgstr "Kéo dài %(length)s bắt đầu từ %(start_time)s" + +#: templates/contest/contest-datetime.html:50 msgid "Standing was frozen" msgstr "Bảng điểm đã đóng băng" -#: templates/contest/contest-datetime.html:43 +#: templates/contest/contest-datetime.html:50 msgid "at" msgstr "lúc" #: templates/contest/contest-list-tabs.html:2 -#: templates/problem/search-form.html:75 templates/problem/search-form.html:77 -#: templates/submission/list.html:380 -#: templates/submission/submission-list-tabs.html:4 -msgid "All" -msgstr "Tất cả" +#: templates/problem/left-sidebar.html:4 +#: templates/problem/problem-list-tabs.html:5 +msgid "List" +msgstr "Danh sách" #: templates/contest/contest-list-tabs.html:3 -msgid "Official" -msgstr "Chính thức" - -#: templates/contest/contest-list-tabs.html:4 msgid "Calendar" msgstr "Lịch" -#: templates/contest/contest-tabs.html:11 +#: templates/contest/contest-tabs.html:10 msgid "Info" msgstr "Thông tin" -#: templates/contest/contest-tabs.html:13 templates/submission/list.html:362 +#: templates/contest/contest-tabs.html:12 templates/submission/list.html:363 msgid "Statistics" msgstr "Thống kê" -#: templates/contest/contest-tabs.html:19 +#: templates/contest/contest-tabs.html:17 msgid "Rankings" msgstr "Bảng xếp hạng" -#: templates/contest/contest-tabs.html:30 +#: templates/contest/contest-tabs.html:22 +msgid "Hidden Rankings" +msgstr "Bảng xếp hạng ẩn" + +#: templates/contest/contest-tabs.html:29 msgid "Final rankings" msgstr "BXH chung cuộc" -#: templates/contest/contest-tabs.html:34 +#: templates/contest/contest-tabs.html:33 msgid "MOSS" msgstr "MOSS" +#: templates/contest/contest-tabs.html:38 +msgid "Clone" +msgstr "Nhân bản" + #: templates/contest/contest.html:36 templates/contest/contest.html:56 msgid "Leave contest" msgstr "Rời kỳ thi" -#: templates/contest/contest.html:43 templates/contest/list.html:116 +#: templates/contest/contest.html:43 templates/contest/list.html:389 msgid "Virtual join" msgstr "Tham gia ảo" @@ -4378,38 +3954,26 @@ msgstr "Tham gia kỳ thi" msgid "Login to participate" msgstr "Đăng nhập để tham gia" -#: templates/contest/contest.html:102 -msgid "Clone" -msgstr "Nhân bản" - -#: templates/contest/contest.html:123 +#: templates/contest/contest.html:103 msgid "AC Rate" msgstr "Tỷ lệ AC" -#: templates/contest/contest.html:124 templates/problem/list.html:24 +#: templates/contest/contest.html:104 templates/contest/list.html:232 +#: templates/contest/list.html:281 templates/contest/list.html:366 +#: templates/problem/list.html:24 msgid "Users" msgstr "Người nộp" -#: templates/contest/contest.html:149 templates/problem/list.html:58 +#: templates/contest/contest.html:129 templates/problem/list.html:58 #: templates/problem/list.html:133 msgid "Editorial" msgstr "Hướng dẫn" -#: templates/contest/contests_summary.html:36 -msgid "Rank" -msgstr "Rank" - -#: templates/contest/contests_summary.html:37 templates/course/course.html:64 -#: templates/status/language-list.html:34 -#: templates/user/import/table_csv.html:6 -msgid "Name" -msgstr "Tên" - -#: templates/contest/list.html:58 templates/contest/media-js.html:116 +#: templates/contest/list.html:81 templates/contest/media-js.html:152 msgid "Are you sure you want to join?" msgstr "Bạn có chắc tham gia?" -#: templates/contest/list.html:59 +#: templates/contest/list.html:82 msgid "" "Joining a contest for the first time starts your timer, after which it " "becomes unstoppable." @@ -4417,120 +3981,84 @@ msgstr "" "Tham gia kỳ thi lần đầu sẽ kích hoạt thời gian đếm ngược, không thể dừng lại " "sau đó." -#: templates/contest/list.html:61 templates/contest/media-js.html:119 -msgid "By joining in this contest, you will automatically leave contest" -msgstr "Khi tham gia kỳ thi này, bạn sẽ tự động rời khỏi kỳ thi" +#: templates/contest/list.html:114 +msgid "hidden" +msgstr "ẩn" -#: templates/contest/list.html:122 +#: templates/contest/list.html:126 +msgid "private" +msgstr "riêng tư" + +#: templates/contest/list.html:142 +msgid "rated" +msgstr "rated" + +#: templates/contest/list.html:168 +#, python-format +msgid "%(time_limit)s window" +msgstr "Cửa sổ thi dài %(time_limit)s" + +#: templates/contest/list.html:170 +#, python-format +msgid "%(duration)s long" +msgstr "Kéo dài %(duration)s" + +#: templates/contest/list.html:190 msgid "Spectate" msgstr "Theo dõi" -#: templates/contest/list.html:128 templates/organization/home.html:26 -#: templates/organization/list.html:70 +#: templates/contest/list.html:196 templates/organization/home.html:33 msgid "Join" msgstr "Tham gia" -#: templates/contest/list.html:138 -msgid "Active" -msgstr "Đang tham gia" +#: templates/contest/list.html:207 +msgid "Search contests..." +msgstr "Tìm kiếm kỳ thi..." -#: templates/contest/list.html:146 -msgid "Ongoing" -msgstr "Đang diễn ra" +#: templates/contest/list.html:217 +msgid "Search" +msgstr "Tìm kiếm" -#: templates/contest/list.html:153 -msgid "Upcoming" -msgstr "Sắp diễn ra" +#: templates/contest/list.html:225 +msgid "Active Contests" +msgstr "Kỳ thi bạn đang tham gia" -#: templates/contest/list.html:160 -msgid "Past" -msgstr "Đã diễn ra" +#: templates/contest/list.html:231 templates/contest/list.html:280 +#: templates/contest/list.html:323 templates/contest/list.html:363 +msgid "Contest" +msgstr "Kỳ thi" -#: templates/contest/list.html:181 +#: templates/contest/list.html:249 #, python-format msgid "Window ends in %(countdown)s" msgstr "Cửa số thi còn %(countdown)s" -#: templates/contest/list.html:184 templates/contest/list.html:222 -#: templates/course/course.html:91 +#: templates/contest/list.html:252 templates/contest/list.html:296 #, python-format msgid "Ends in %(countdown)s" msgstr "Kết thúc trong %(countdown)s" -#: templates/contest/list.html:204 -msgid "There is no active contest at this time." -msgstr "Không có kỳ thi nào đang tham gia." +#: templates/contest/list.html:274 +msgid "Ongoing Contests" +msgstr "Kỳ thi đang diễn ra" -#: templates/contest/list.html:241 -msgid "There is no ongoing contest at this time." -msgstr "Không có kỳ thi nào đang diễn ra hiện tại." +#: templates/contest/list.html:316 +msgid "Upcoming Contests" +msgstr "Kỳ thi sắp tới" -#: templates/contest/list.html:275 -msgid "There is no scheduled contest at this time." +#: templates/contest/list.html:347 +msgid "There are no scheduled contests at this time." msgstr "Không có kỳ thi nào được lên lịch hiện tại." -#: templates/contest/list.html:307 -msgid "There is no past contest." -msgstr "Không có kỳ thi nào trong quá khứ." +#: templates/contest/list.html:353 +msgid "Past Contests" +msgstr "Kỳ thi trong quá khứ" -#: templates/contest/macros.html:8 -msgid "hidden" -msgstr "ẩn" - -#: templates/contest/macros.html:20 -msgid "private" -msgstr "riêng tư" - -#: templates/contest/macros.html:32 -msgid "rated" -msgstr "rated" - -#: templates/contest/macros.html:51 templates/contest/macros.html:58 -#: templates/course/contest_list.html:22 templates/course/course.html:65 -msgid "Start" -msgstr "Bắt đầu" - -#: templates/contest/macros.html:54 templates/course/contest_list.html:23 -#: templates/course/course.html:66 -msgid "End" -msgstr "Kết thúc" - -#: templates/contest/macros.html:62 templates/course/course.html:67 -msgid "Length" -msgstr "Dài" - -#: templates/contest/macros.html:64 templates/course/course.html:97 -#, python-format -msgid "%(time_limit)s" -msgstr "%(time_limit)s" - -#: templates/contest/macros.html:66 templates/course/course.html:99 -#, python-format -msgid "%(duration)s" -msgstr "%(duration)s" - -#: templates/contest/macros.html:84 -#: templates/contest/official-search-form.html:19 -#: templates/problem/list.html:40 templates/problem/search-form.html:72 -#: templates/user/user-problems.html:57 -msgid "Category" -msgstr "Loại" - -#: templates/contest/macros.html:85 -#: templates/contest/official-search-form.html:30 -msgid "Location" -msgstr "Địa điểm" - -#: templates/contest/macros.html:86 -#: templates/contest/official-search-form.html:9 -msgid "Year" -msgstr "Năm" - -#: templates/contest/media-js.html:111 +#: templates/contest/media-js.html:147 msgid "Are you sure you want to leave?" msgstr "Bạn có chắc muốn rời?" -#: templates/contest/media-js.html:112 +#: templates/contest/media-js.html:148 msgid "" "You cannot come back to a virtual participation. You will have to start a " "new one." @@ -4538,7 +4066,7 @@ msgstr "" "Bạn không thể quay lại lần tham gia ảo này. Bạn sẽ phải tham gia ảo lại từ " "đầu." -#: templates/contest/media-js.html:117 +#: templates/contest/media-js.html:153 msgid "" "Joining a contest starts your timer, after which it becomes unstoppable." msgstr "Tham gia kỳ thi sẽ khởi động đồng hồ đếm ngược, và không thể dừng lại." @@ -4563,38 +4091,6 @@ msgstr "MOSS lại kỳ thi" msgid "Delete MOSS results" msgstr "Xóa kết quả MOSS" -#: templates/contest/official-search-form.html:2 -#: templates/contest/search-form.html:2 -msgid "Contest search" -msgstr "Tìm kiếm kỳ thi" - -#: templates/contest/official-search-form.html:6 -#: templates/contest/search-form.html:6 -msgid "Search contests..." -msgstr "Tìm kiếm kỳ thi..." - -#: templates/contest/official-search-form.html:12 -msgid "From" -msgstr "Từ" - -#: templates/contest/official-search-form.html:14 -msgid "To" -msgstr "Đến" - -#: templates/contest/official-search-form.html:41 -#: templates/contest/search-form.html:22 -#: templates/organization/search-form.html:8 -msgid "Order by" -msgstr "Sắp xếp theo" - -#: templates/contest/official-search-form.html:53 -#: templates/contest/search-form.html:33 -#: templates/organization/search-form.html:20 -#: templates/problem/search-form.html:95 templates/submission/list.html:354 -#: templates/ticket/list.html:250 -msgid "Go" -msgstr "Lọc" - #: templates/contest/private.html:5 msgid "This contest is private to specific users." msgstr "Kỳ thi riêng tư với các thành viên này." @@ -4607,63 +4103,59 @@ msgstr "Thêm vào đó, chỉ những tổ chức này mới được tham gia msgid "Only the following organizations may access this contest:" msgstr "Chỉ những tổ chức sau được tham gia kỳ thi:" -#: templates/contest/ranking-table.html:43 +#: templates/contest/ranking-table.html:40 msgid "Un-Disqualify" msgstr "Khôi phục kết quả" -#: templates/contest/ranking-table.html:46 +#: templates/contest/ranking-table.html:43 msgid "Disqualify" msgstr "Hủy kết quả" -#: templates/contest/ranking-table.html:59 +#: templates/contest/ranking-table.html:56 templates/user/edit-profile.html:94 msgid "Fullname" msgstr "Tên đầy đủ" -#: templates/contest/ranking-table.html:60 templates/user/edit-profile.html:99 +#: templates/contest/ranking-table.html:57 templates/user/edit-profile.html:98 #: templates/user/import/table_csv.html:7 msgid "School" msgstr "Trường" -#: templates/contest/ranking.html:18 +#: templates/contest/ranking.html:17 msgid "Are you sure you want to disqualify this participation?" msgstr "Bạn có chắc muốn hủy kết quả này?" -#: templates/contest/ranking.html:23 +#: templates/contest/ranking.html:22 msgid "Are you sure you want to un-disqualify this participation?" msgstr "Bạn có chắc muốn khôi phục kết quả này?" -#: templates/contest/ranking.html:134 +#: templates/contest/ranking.html:133 msgid "View user participation" msgstr "Xem các lần tham gia" -#: templates/contest/ranking.html:140 +#: templates/contest/ranking.html:137 msgid "Show schools" msgstr "Hiển thị trường" -#: templates/contest/ranking.html:144 +#: templates/contest/ranking.html:141 msgid "Show full name" msgstr "Hiển thị họ tên" -#: templates/contest/ranking.html:147 +#: templates/contest/ranking.html:144 msgid "Show friends only" msgstr "Chỉ hiển thị bạn bè" -#: templates/contest/ranking.html:150 +#: templates/contest/ranking.html:147 msgid "Total score only" msgstr "Chỉ hiển thị tổng điểm" -#: templates/contest/ranking.html:152 +#: templates/contest/ranking.html:149 msgid "Show virtual participation" msgstr "Hiển thị tham gia ảo" -#: templates/contest/ranking.html:156 +#: templates/contest/ranking.html:153 msgid "Download as CSV" msgstr "Tải file CSV" -#: templates/contest/search-form.html:10 -msgid "Hide organization contests" -msgstr "Ẩn các kỳ thi riêng tư của nhóm" - #: templates/contest/stats.html:48 msgid "Problem Status Distribution" msgstr "Phân bố theo kết quả" @@ -4696,170 +4188,57 @@ msgstr "Còn" msgid "Upcoming contests" msgstr "Kỳ thi sắp diễn ra" -#: templates/course/contest_list.html:29 -msgid "No contests available" -msgstr "Không có kì thi nào!" +#: templates/fine_uploader/script.html:4 +msgid "Drop files here to upload" +msgstr "" -#: templates/course/course.html:33 -msgid "Lessons" -msgstr "Bài học" - -#: templates/course/course.html:68 templates/course/grades.html:81 -#: templates/course/grades_lesson.html:82 templates/user/user-problems.html:99 -msgid "Score" -msgstr "Điểm" - -#: templates/course/course.html:119 -msgid "Total achieved points" -msgstr "Tổng điểm" - -#: templates/course/edit_contest.html:44 templates/course/edit_lesson.html:65 -#: templates/organization/contest/edit.html:41 -#: templates/organization/form.html:6 -msgid "Please fix below errors" -msgstr "Vui lòng sửa các lỗi bên dưới" - -#: templates/course/edit_contest.html:64 -#: templates/organization/contest/edit.html:61 -msgid "If you run out of rows, click Save" -msgstr "Ấn nút lưu lại nếu cần thêm hàng" - -#: templates/course/edit_contest.html:90 templates/course/edit_lesson.html:114 -#: templates/markdown_editor/markdown_editor.html:122 -#: templates/organization/blog/edit.html:36 -#: templates/organization/contest/edit.html:87 -#: templates/organization/form.html:30 templates/pagedown.html:31 -msgid "Save" -msgstr "Lưu" - -#: templates/course/edit_lesson.html:57 -msgid "Add new" -msgstr "Thêm mới" - -#: templates/course/grades.html:78 templates/course/grades_lesson.html:79 -msgid "Sort by" -msgstr "Sắp xếp theo" - -#: templates/course/grades.html:83 templates/course/grades_lesson.html:84 -#: templates/internal/problem/problem.html:34 -msgid "Search" -msgstr "Tìm kiếm" - -#: templates/course/grades.html:89 templates/course/grades_lesson.html:99 -#: templates/submission/user-ajax.html:33 -msgid "Total" -msgstr "Tổng điểm" - -#: templates/course/left_sidebar.html:4 -msgid "Edit lessons" -msgstr "Chỉnh sửa bài học" - -#: templates/course/left_sidebar.html:6 -msgid "Grades" -msgstr "Điểm" - -#: templates/course/list.html:23 -msgid "Teachers" -msgstr "Giáo viên" - -#: templates/custom_file_upload.html:6 -msgid "Your file has been uploaded successfully" -msgstr "File đã được tải lên thành công" - -#: templates/custom_file_upload.html:7 -msgid "Upload another file" -msgstr "Tải file khác lên" - -#: templates/custom_file_upload.html:12 templates/fine_uploader/script.html:7 +#: templates/fine_uploader/script.html:7 msgid "Upload file" msgstr "Tải file lên" -#: templates/email_change/email_change.html:15 -msgid "Verify Email" -msgstr "Xác thực Email" - -#: templates/email_change/email_change_failure.html:3 -msgid "Invalid reset link." -msgstr "Đường dẫn không hợp lệ" - -#: templates/email_change/email_change_pending.html:4 -msgid "An email was sent to" -msgstr "Email đã được gửi đến" - -#: templates/email_change/email_change_pending.html:4 -msgid "If you don't see it, kindly check your spam folder as well." -msgstr "Nếu bạn không tìm thấy nó, vui lòng kiểm tra thư mục spam của bạn." - -#: templates/email_change/email_change_success.html:3 -msgid "Your email was sucessfully changed to" -msgstr "Bạn đã đổi email thành công." - -#: templates/feed/has_next.html:3 -msgid "View more" -msgstr "Xem thêm" - -#: templates/fine_uploader/script.html:4 -msgid "Drop files here to upload" -msgstr "Kéo file vào đây để tải lên" - #: templates/fine_uploader/script.html:23 -#: templates/markdown_editor/markdown_editor.html:123 -#: templates/pagedown.html:32 msgid "Cancel" -msgstr "Hủy" +msgstr "" #: templates/fine_uploader/script.html:24 msgid "Retry" -msgstr "Thử lại" +msgstr "" #: templates/fine_uploader/script.html:26 msgid "Pause" -msgstr "Dừng" +msgstr "" #: templates/fine_uploader/script.html:27 msgid "Continue" msgstr "Tiếp tục" -#: templates/general_email.html:15 -msgid "Dear" -msgstr "Xin chào" - -#: templates/internal/left-sidebar.html:3 -msgid "Average speed" -msgstr "Tốc độ trung bình" - -#: templates/internal/left-sidebar.html:4 -msgid "Slow requests" -msgstr "Requests chậm" - -#: templates/internal/problem/problem.html:42 +#: templates/internal/base.html:38 msgid "Code" msgstr "" -#: templates/internal/problem/problem.html:43 +#: templates/internal/base.html:39 #, fuzzy #| msgid "Total points" msgid "Vote count" msgstr "Tổng điểm" -#: templates/internal/problem/votes.html:1 +#: templates/internal/base.html:62 #, fuzzy #| msgid "contest problem" msgid "Votes for problem" msgstr "bài trong kỳ thi" -#: templates/internal/problem/votes.html:9 +#: templates/internal/base.html:70 msgid "Knowledge" msgstr "" -#: templates/internal/problem/votes.html:13 +#: templates/internal/base.html:74 #, fuzzy #| msgid "Rankings" msgid "Thinking" msgstr "Bảng xếp hạng" -#: templates/internal/problem/votes.html:21 -#: templates/problem/feed/items.html:97 +#: templates/internal/base.html:82 templates/problem/feed.html:123 #, fuzzy #| msgid "Feed" msgid "Feedback" @@ -4869,123 +4248,105 @@ msgstr "Gợi ý" msgid "Source:" msgstr "Nguồn:" -#: templates/markdown_editor/markdown_editor.html:103 templates/pagedown.html:9 -msgid "Update Preview" -msgstr "Cập nhật xem trước" - -#: templates/markdown_editor/markdown_editor.html:107 -#: templates/pagedown.html:15 -msgid "Insert Image" -msgstr "Chèn hình ảnh" - -#: templates/markdown_editor/markdown_editor.html:110 -#: templates/pagedown.html:18 -msgid "From the web" -msgstr "Từ web" - -#: templates/markdown_editor/markdown_editor.html:116 -#: templates/pagedown.html:25 -msgid "From your computer" -msgstr "Từ máy tính của bạn" - -#: templates/notification/list.html:5 +#: templates/notification/list.html:7 msgid "You have no notifications" msgstr "Bạn không có thông báo" -#: templates/notification/list.html:10 +#: templates/notification/list.html:13 msgid "Activity" msgstr "Hoạt động" -#: templates/organization/blog/pending.html:50 -msgid "Approve" -msgstr "Chấp thuận" +#: templates/organization/blog/edit.html:36 +#: templates/organization/contest/add.html:36 +#: templates/organization/contest/edit.html:86 +#: templates/organization/form.html:24 +msgid "Save" +msgstr "Lưu" -#: templates/organization/blog/pending.html:62 -msgid "Reject" -msgstr "Từ chối" +#: templates/organization/blog/pending.html:8 +msgid "Blog" +msgstr "" -#: templates/organization/home-js.html:4 +#: templates/organization/blog/pending.html:11 +#: templates/problem/search-form.html:58 +msgid "Author" +msgstr "Tác giả" + +#: templates/organization/blog/pending.html:14 +#, fuzzy +#| msgid "posted time" +msgid "Post time" +msgstr "thời gian đăng" + +#: templates/organization/contest/edit.html:60 +msgid "If you run out of rows, click Save" +msgstr "Ấn nút lưu lại nếu cần thêm hàng" + +#: templates/organization/home-js.html:7 msgid "Are you sure you want to leave this organization?" msgstr "Bạn có chắc muốn rời tổ chức?" -#: templates/organization/home-js.html:6 +#: templates/organization/home-js.html:9 msgid "You will have to rejoin to show up on the organization leaderboard." msgstr "Bạn phải tham gia lại để được hiển thị trong bảng xếp hạng tổ chức." -#: templates/organization/home-js.html:8 +#: templates/organization/home-js.html:11 msgid "You will have to request membership in order to join again." msgstr "Bạn phải đăng ký thành viên để được tham gia lại." -#: templates/organization/home.html:31 templates/organization/list.html:73 +#: templates/organization/home.html:22 +msgid "Subdomain" +msgstr "Site riêng cho nhóm" + +#: templates/organization/home.html:37 msgid "Request membership" msgstr "Đăng ký thành viên" -#: templates/organization/list.html:38 templates/submission/list.html:382 -#: templates/submission/submission-list-tabs.html:6 -msgid "Mine" -msgstr "Tôi" - -#: templates/organization/list.html:40 -msgid "Public" -msgstr "Nhóm mở" - -#: templates/organization/list.html:41 -msgid "Private" -msgstr "Nhóm kín" - -#: templates/organization/list.html:63 +#: templates/organization/list.html:37 msgid "members" msgstr "thành viên" -#: templates/organization/list.html:66 -msgid "View" -msgstr "Xem" +#: templates/organization/list.html:46 +msgid "My groups" +msgstr "Nhóm của tôi" -#: templates/organization/list.html:89 -msgid "You have not joined any organization yet." -msgstr "Bạn chưa tham gia nhóm nào." +#: templates/organization/list.html:47 +msgid "Open groups" +msgstr "Nhóm mở" -#: templates/organization/list.html:97 -msgid "There is no public organization." -msgstr "Không có nhóm mở nào" - -#: templates/organization/list.html:105 -msgid "There is no private organization." -msgstr "Không có nhóm kín nào" +#: templates/organization/list.html:48 +msgid "Private groups" +msgstr "Nhóm kín" #: templates/organization/org-left-sidebar.html:9 msgid "Members" msgstr "Thành viên" -#: templates/organization/org-right-sidebar.html:4 +#: templates/organization/org-right-sidebar.html:7 msgid "Controls" msgstr "Quản lý" -#: templates/organization/org-right-sidebar.html:9 +#: templates/organization/org-right-sidebar.html:12 msgid "Edit group" msgstr "Chỉnh sửa nhóm" -#: templates/organization/org-right-sidebar.html:15 +#: templates/organization/org-right-sidebar.html:19 msgid "View requests" msgstr "Đơn đăng ký" -#: templates/organization/org-right-sidebar.html:26 +#: templates/organization/org-right-sidebar.html:31 msgid "Add members" msgstr "Thêm thành viên" -#: templates/organization/org-right-sidebar.html:32 +#: templates/organization/org-right-sidebar.html:38 msgid "Add blog" msgstr "Thêm bài đăng" -#: templates/organization/org-right-sidebar.html:37 +#: templates/organization/org-right-sidebar.html:44 msgid "Pending blogs" msgstr "Bài đăng đang chờ" -#: templates/organization/org-right-sidebar.html:53 -msgid "Subdomain" -msgstr "Site riêng cho nhóm" - -#: templates/organization/org-right-sidebar.html:62 +#: templates/organization/org-right-sidebar.html:63 msgid "Leave group" msgstr "Rời nhóm" @@ -5021,7 +4382,7 @@ msgid "There are no requests to approve." msgstr "Không có đơn đăng ký." #: templates/organization/requests/pending.html:24 -#: templates/problem/data.html:538 +#: templates/problem/data.html:520 msgid "Delete?" msgstr "Xóa?" @@ -5054,15 +4415,7 @@ msgstr "Chấp thuận" msgid "Rejected" msgstr "Từ chối" -#: templates/organization/search-form.html:2 -msgid "Organization search" -msgstr "Tìm kiếm nhóm" - -#: templates/organization/search-form.html:6 -msgid "Search organizations..." -msgstr "Tìm kiếm nhóm" - -#: templates/organization/users-table.html:16 +#: templates/organization/users-table.html:15 msgid "Kick" msgstr "Đuổi" @@ -5070,32 +4423,32 @@ msgstr "Đuổi" msgid "Enter a new code for the cloned problem:" msgstr "Nhập mã bài mới cho bài tập được nhân bản:" -#: templates/problem/data.html:156 templates/problem/data.html:163 +#: templates/problem/data.html:149 msgid "Instruction" msgstr "Hướng dẫn" -#: templates/problem/data.html:487 +#: templates/problem/data.html:469 msgid "View YAML" msgstr "Xem YAML" -#: templates/problem/data.html:504 +#: templates/problem/data.html:486 msgid "Autofill testcases" msgstr "Tự động điền test" -#: templates/problem/data.html:508 templates/problem/problem.html:307 +#: templates/problem/data.html:490 templates/problem/problem.html:277 msgid "Problem type" msgid_plural "Problem types" msgstr[0] "Dạng bài" -#: templates/problem/data.html:515 +#: templates/problem/data.html:497 msgid "Fill testcases" msgstr "Điền test" -#: templates/problem/data.html:519 +#: templates/problem/data.html:501 msgid "Batch start positions" msgstr "Vị trí bắt đầu nhóm" -#: templates/problem/data.html:523 +#: templates/problem/data.html:505 msgid "" "Leave empty if not use batch. If you want to divide to three batches [1, 4], " "[5, 8], [9, 10], enter: 1, 5, 9" @@ -5103,31 +4456,31 @@ msgstr "" "Để trống nếu không dùng nhóm. Nếu muốn chia test thành các nhóm [1, 4], [5, " "8], [9, 10], nhập: 1, 5, 9" -#: templates/problem/data.html:527 templates/problem/data.html:578 +#: templates/problem/data.html:509 templates/problem/data.html:560 msgid "Apply!" msgstr "Lưu!" -#: templates/problem/data.html:532 +#: templates/problem/data.html:514 msgid "Type" msgstr "Kiểu" -#: templates/problem/data.html:533 +#: templates/problem/data.html:515 msgid "Input file" msgstr "File Input" -#: templates/problem/data.html:534 +#: templates/problem/data.html:516 msgid "Output file" msgstr "File Output" -#: templates/problem/data.html:536 +#: templates/problem/data.html:518 msgid "Pretest?" msgstr "Pretest?" -#: templates/problem/data.html:579 +#: templates/problem/data.html:561 msgid "Add new case" msgstr "Thêm test mới" -#: templates/problem/editorial.html:23 +#: templates/problem/editorial.html:24 msgid "" "Remember to use this editorial only when stuck, and not to copy-" "paste code from it. Please be respectful to the problem author and " @@ -5138,80 +4491,79 @@ msgstr "" "viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là " "hành vi có thể dẫn đến khóa tài khoản." -#: templates/problem/feed.html:13 +#: templates/problem/feed.html:10 msgid "FOR YOU" msgstr "DÀNH CHO BẠN" -#: templates/problem/feed.html:16 +#: templates/problem/feed.html:13 msgid "NEW" msgstr "MỚI NHẤT" -#: templates/problem/feed.html:20 +#: templates/problem/feed.html:18 msgid "VOLUNTEER" msgstr "TÌNH NGUYỆN" -#: templates/problem/feed.html:27 +#: templates/problem/feed.html:24 msgid "View your votes" msgstr "Xem các đơn đã điền của bạn" -#: templates/problem/feed/items.html:43 +#: templates/problem/feed.html:69 msgid "View source" msgstr "Xem mã nguồn" -#: templates/problem/feed/items.html:47 +#: templates/problem/feed.html:73 msgid "Volunteer form" msgstr "Phiếu tình nguyện" -#: templates/problem/feed/items.html:53 templates/problem/problem.html:148 -#: templates/problem/problem.html:163 templates/problem/problem.html:173 +#: templates/problem/feed.html:79 msgid "Submit" -msgstr "Nộp bài" +msgstr "Gửi" -#: templates/problem/feed/items.html:60 +#: templates/problem/feed.html:86 msgid "Value" msgstr "Giá trị" -#: templates/problem/feed/items.html:67 +#: templates/problem/feed.html:93 msgid "Knowledge point" msgstr "Độ khó kiến thức" -#: templates/problem/feed/items.html:75 +#: templates/problem/feed.html:101 msgid "Thinking point" msgstr "Độ khó nghĩ" -#: templates/problem/feed/items.html:83 templates/problem/search-form.html:61 +#: templates/problem/feed.html:109 templates/problem/search-form.html:84 msgid "Problem types" msgstr "Dạng bài" -#: templates/problem/feed/items.html:101 +#: templates/problem/feed.html:127 msgid "Any additional note here" msgstr "Lưu ý thêm cho admin" -#: templates/problem/left-sidebar.html:10 +#: templates/problem/left-sidebar.html:3 msgid "Feed" msgstr "Gợi ý" -#: templates/problem/left-sidebar.html:11 -#: templates/problem/problem-list-tabs.html:5 -msgid "List" -msgstr "Danh sách" - -#: templates/problem/list-base.html:89 +#: templates/problem/list-base.html:96 msgid "Filter by type..." msgstr "Lọc theo dạng..." -#: templates/problem/list-base.html:157 templates/problem/list-base.html:182 +#: templates/problem/list-base.html:159 templates/problem/list-base.html:185 msgid "Add types..." msgstr "Thêm dạng" -#: templates/problem/list-base.html:198 +#: templates/problem/list-base.html:201 msgid "Fail to vote!" msgstr "Hệ thống lỗi!" -#: templates/problem/list-base.html:201 +#: templates/problem/list-base.html:204 msgid "Successful vote! Thank you!" msgstr "Đã gửi thành công! Cảm ơn bạn!" +#: templates/problem/list.html:40 templates/problem/search-form.html:68 +#: templates/user/user-problems.html:57 +msgid "Category" +msgstr "Nhóm bài" + #: templates/problem/list.html:51 #, python-format msgid "AC %%" @@ -5233,196 +4585,197 @@ msgstr "Để trống nếu không lọc theo ngôn ngữ" msgid "Leave empty to not filter by result" msgstr "Để trống nếu không lọc theo kết quả" -#: templates/problem/manage_submission.html:64 -msgid "Leave empty to not filter by contest" -msgstr "Để trống nếu không lọc theo kỳ thi" - -#: templates/problem/manage_submission.html:94 +#: templates/problem/manage_submission.html:79 msgid "Need valid values for both start and end IDs." msgstr "Cần số liệu hợp lệ cho ID bắt đầu và kết thúc." -#: templates/problem/manage_submission.html:97 +#: templates/problem/manage_submission.html:82 msgid "End ID must be after start ID." msgstr "ID kết thúc phải lớn hơn hoặc bằng ID khởi đầu." -#: templates/problem/manage_submission.html:110 +#: templates/problem/manage_submission.html:95 #, python-brace-format msgid "" "You are about to {action} {count} submissions. Are you sure you want to do " "this?" msgstr "Bạn chuẩn bị {action} {count} bài nộp. Tiếp tục?" -#: templates/problem/manage_submission.html:117 +#: templates/problem/manage_submission.html:102 #, python-brace-format msgid "" "You are about to {action} a few submissions. Are you sure you want to do " "this?" msgstr "Bạn chuẩn bị {action} vài bài nộp. Tiếp tục?" -#: templates/problem/manage_submission.html:141 -#: templates/submission/list.html:332 +#: templates/problem/manage_submission.html:126 +#: templates/submission/list.html:334 msgid "Filter submissions" msgstr "Lọc bài nộp" -#: templates/problem/manage_submission.html:146 +#: templates/problem/manage_submission.html:131 msgid "Filter by ID:" msgstr "Lọc theo ID:" -#: templates/problem/manage_submission.html:149 +#: templates/problem/manage_submission.html:134 msgid "Starting ID:" msgstr "ID bắt đầu:" -#: templates/problem/manage_submission.html:153 +#: templates/problem/manage_submission.html:138 msgid "Ending ID:" msgstr "ID kết thúc:" -#: templates/problem/manage_submission.html:157 +#: templates/problem/manage_submission.html:142 msgid "This range includes both endpoints." msgstr "Bao gồm hai đầu mút." -#: templates/problem/manage_submission.html:160 +#: templates/problem/manage_submission.html:145 msgid "Filter by language:" msgstr "Lọc theo ngôn ngữ:" -#: templates/problem/manage_submission.html:168 +#: templates/problem/manage_submission.html:153 msgid "Filter by result:" msgstr "Lọc theo kết quả:" -#: templates/problem/manage_submission.html:176 -msgid "Filter by contest:" -msgstr "Lọc theo kỳ thi:" - -#: templates/problem/manage_submission.html:186 +#: templates/problem/manage_submission.html:163 msgid "Action" msgstr "Hành động" -#: templates/problem/manage_submission.html:188 +#: templates/problem/manage_submission.html:165 msgid "Rejudge selected submissions" msgstr "Chấm lại những bài nộp này" -#: templates/problem/manage_submission.html:193 +#: templates/problem/manage_submission.html:170 msgid "Download selected submissions" msgstr "Tải các bài nộp này" -#: templates/problem/manage_submission.html:199 +#: templates/problem/manage_submission.html:176 #, python-format msgid "Are you sure you want to rescore %(count)d submissions?" msgstr "Bạn có chắc muốn tính điểm lại %(count)d bài nộp?" -#: templates/problem/manage_submission.html:200 +#: templates/problem/manage_submission.html:177 msgid "Rescore all submissions" msgstr "Tính điểm lại các bài nộp" -#: templates/problem/problem.html:137 +#: templates/problem/problem.html:134 msgid "View as PDF" msgstr "Xem PDF" -#: templates/problem/problem.html:155 +#: templates/problem/problem.html:143 templates/problem/problem.html:153 +#: templates/problem/problem.html:158 +msgid "Submit solution" +msgstr "Nộp bài" + +#: templates/problem/problem.html:146 #, python-format msgid "%(counter)s submission left" msgid_plural "%(counter)s submissions left" msgstr[0] "Còn %(counter)s lần nộp" -#: templates/problem/problem.html:168 +#: templates/problem/problem.html:154 msgid "0 submissions left" msgstr "Còn 0 lần nộp" -#: templates/problem/problem.html:186 +#: templates/problem/problem.html:166 msgid "My submissions" msgstr "Bài nộp của tôi" -#: templates/problem/problem.html:197 +#: templates/problem/problem.html:170 msgid "Best submissions" msgstr "Các bài nộp tốt nhất" -#: templates/problem/problem.html:204 +#: templates/problem/problem.html:174 msgid "Read editorial" msgstr "Xem hướng dẫn" -#: templates/problem/problem.html:213 +#: templates/problem/problem.html:179 msgid "Manage tickets" msgstr "Xử lý báo cáo" -#: templates/problem/problem.html:220 +#: templates/problem/problem.html:183 msgid "Edit problem" msgstr "Chỉnh sửa bài" -#: templates/problem/problem.html:226 +#: templates/problem/problem.html:185 msgid "Edit test data" msgstr "Chỉnh sửa test" -#: templates/problem/problem.html:234 +#: templates/problem/problem.html:190 msgid "My tickets" msgstr "Báo cáo của tôi" -#: templates/problem/problem.html:244 +#: templates/problem/problem.html:198 msgid "Manage submissions" msgstr "Quản lý bài nộp" -#: templates/problem/problem.html:252 +#: templates/problem/problem.html:204 msgid "Clone problem" msgstr "Nhân bản bài" -#: templates/problem/problem.html:262 templates/problem/problem.html:389 +#: templates/problem/problem.html:211 +msgid "Points:" +msgstr "Điểm:" + +#: templates/problem/problem.html:214 templates/problem/problem.html:216 +msgid "(partial)" +msgstr "(thành phần)" + +#: templates/problem/problem.html:221 msgid "Time limit:" msgstr "Thời gian:" -#: templates/problem/problem.html:275 templates/problem/problem.html:394 +#: templates/problem/problem.html:233 msgid "Memory limit:" msgstr "Bộ nhớ:" -#: templates/problem/problem.html:293 +#: templates/problem/problem.html:245 templates/problem/raw.html:67 +#: templates/submission/status-testcases.html:160 +msgid "Input:" +msgstr "Input:" + +#: templates/problem/problem.html:247 templates/problem/raw.html:67 +msgid "stdin" +msgstr "bàn phím" + +#: templates/problem/problem.html:251 templates/problem/raw.html:70 +#: templates/submission/status-testcases.html:164 +msgid "Output:" +msgstr "Output:" + +#: templates/problem/problem.html:252 templates/problem/raw.html:70 +msgid "stdout" +msgstr "màn hình" + +#: templates/problem/problem.html:262 msgid "Author:" msgid_plural "Authors:" msgstr[0] "Tác giả:" -#: templates/problem/problem.html:320 +#: templates/problem/problem.html:290 msgid "Allowed languages" msgstr "Ngôn ngữ cho phép" -#: templates/problem/problem.html:328 +#: templates/problem/problem.html:298 #, python-format msgid "No %(lang)s judge online" msgstr "Không có máy chấm cho %(lang)s" -#: templates/problem/problem.html:340 +#: templates/problem/problem.html:310 #: templates/status/judge-status-table.html:2 msgid "Judge" msgid_plural "Judges" msgstr[0] "Máy chấm" -#: templates/problem/problem.html:358 +#: templates/problem/problem.html:328 msgid "none available" msgstr "Bài này chưa có máy chấm" -#: templates/problem/problem.html:370 +#: templates/problem/problem.html:340 #, python-format msgid "This problem has %(length)s clarification(s)" msgstr "Bài này có %(length)s thông báo" -#: templates/problem/problem.html:378 -msgid "Points:" -msgstr "Điểm:" - -#: templates/problem/problem.html:399 templates/problem/raw.html:67 -#: templates/submission/status-testcases.html:155 -msgid "Input:" -msgstr "Input:" - -#: templates/problem/problem.html:401 templates/problem/raw.html:67 -msgid "stdin" -msgstr "bàn phím" - -#: templates/problem/problem.html:406 templates/problem/raw.html:70 -#: templates/submission/status-testcases.html:159 -msgid "Output:" -msgstr "Output:" - -#: templates/problem/problem.html:407 templates/problem/raw.html:70 -msgid "stdout" -msgstr "màn hình" - -#: templates/problem/problem.html:434 +#: templates/problem/problem.html:370 msgid "Request clarification" msgstr "Yêu cầu làm rõ đề" @@ -5446,47 +4799,58 @@ msgstr "Bài tập gợi ý" msgid "Problem search" msgstr "Tìm kiếm bài tập" -#: templates/problem/search-form.html:7 +#: templates/problem/search-form.html:8 msgid "Search problems..." msgstr "Tìm bài tập..." -#: templates/problem/search-form.html:13 +#: templates/problem/search-form.html:14 msgid "Hide solved problems" msgstr "Ẩn các bài đã giải" -#: templates/problem/search-form.html:20 +#: templates/problem/search-form.html:21 msgid "Show solved problems" msgstr "Hiện các bài đã giải" -#: templates/problem/search-form.html:27 +#: templates/problem/search-form.html:28 msgid "Show problem types" msgstr "Hiển thị dạng bài" -#: templates/problem/search-form.html:34 +#: templates/problem/search-form.html:35 msgid "Show editorial" msgstr "Hiển thị hướng dẫn" -#: templates/problem/search-form.html:50 -msgid "Author" -msgstr "Tác giả" +#: templates/problem/search-form.html:42 +msgid "Have editorial" +msgstr "Có hướng dẫn" -#: templates/problem/search-form.html:88 +#: templates/problem/search-form.html:47 +msgid "Group" +msgstr "" + +#: templates/problem/search-form.html:71 templates/problem/search-form.html:73 +#: templates/submission/list.html:381 +#: templates/submission/submission-list-tabs.html:4 +msgid "All" +msgstr "Tất cả" + +#: templates/problem/search-form.html:95 msgid "Point range" msgstr "Mốc điểm" -#: templates/problem/search-form.html:96 +#: templates/problem/search-form.html:101 templates/submission/list.html:356 +#: templates/ticket/list.html:248 +msgid "Go" +msgstr "Lọc" + +#: templates/problem/search-form.html:102 msgid "Random" msgstr "Ngẫu nhiên" -#: templates/problem/submit.html:48 -msgid "Wait" -msgstr "Đợi" - -#: templates/problem/submit.html:148 +#: templates/problem/submit.html:120 msgid "Your source code must contain at most 65536 characters." msgstr "Code phải chứa không quá 65536 ký tự." -#: templates/problem/submit.html:195 +#: templates/problem/submit.html:172 #, python-format msgid "" "Warning! Your default language, %(default_language)s, is " @@ -5495,7 +4859,7 @@ msgstr "" "Cẩn thận! Ngôn ngữ ưa thích của bạn, %(default_language)s, " "không được sử dụng trong bài này." -#: templates/problem/submit.html:206 +#: templates/problem/submit.html:183 #, fuzzy, python-format #| msgid "" #| "\n" @@ -5518,41 +4882,19 @@ msgstr[0] "" " Bạn còn %(left)s lần nộp\n" " " -#: templates/problem/submit.html:215 +#: templates/problem/submit.html:192 msgid "You have 0 submissions left" msgstr "Bạn đã hết lần nộp" -#: templates/problem/submit.html:249 +#: templates/problem/submit.html:226 msgid "No judge is available for this problem." msgstr "Không có máy chấm có thể chấm bài này." -#: templates/problem/submit.html:255 +#: templates/problem/submit.html:231 msgid "Submit!" msgstr "Nộp bài!" -#: templates/profile-table.html:20 templates/user/user-about.html:23 -#, python-format -msgid "%(counter)s problem solved" -msgid_plural "%(counter)s problems solved" -msgstr[0] "Đã giải %(counter)s bài" - -#: templates/profile-table.html:30 templates/user/user-about.html:35 -msgid "Total points" -msgstr "Tổng điểm" - -#: templates/profile-table.html:37 templates/user/user-about.html:44 -msgid "Rank by rating" -msgstr "Rank theo rating" - -#: templates/profile-table.html:41 templates/user/user-about.html:50 -msgid "Rank by points" -msgstr "Rank theo điểm" - -#: templates/profile-table.html:47 templates/user/user-about.html:86 -msgid "Awards" -msgstr "Thành tích" - -#: templates/recent-organization.html:3 +#: templates/recent-organization.html:18 msgid "Recent groups" msgstr "Nhóm gần đây" @@ -5565,45 +4907,9 @@ msgstr "%(key)s không phải mã xác thực hợp lệ." msgid "Your account has been successfully activated." msgstr "Tài khoản được kích hoạt thành công." -#: templates/registration/activation_email.html:2 -msgid "Account activation" -msgstr "Kích hoạt tài khoản" - -#: templates/registration/activation_email.html:3 -#, python-format -msgid "" -"Thanks for registering! We're glad to have you. The last step is activating " -"your account. Please activate your account in the next %(expiration_days)d " -"days." -msgstr "" -"Cảm ơn bạn đã đăng ký! Chúng tôi rất vui được chào đón bạn. Bước cuối cùng " -"là kích hoạt tài khoản của bạn. Vui lòng kích hoạt tài khoản trong vòng " -"%(expiration_days)d ngày." - -#: templates/registration/activation_email.html:5 -msgid "Activate" -msgstr "Kích hoạt" - -#: templates/registration/activation_email.html:10 -msgid "" -"Alternatively, you can reply to this message to activate your account. Your " -"reply must keep the following text intact for this to work:" -msgstr "" -"Hoặc bạn có thể trả lời tin nhắn này để kích hoạt tài khoản của bạn. Email " -"trả lời của bạn phải giữ nguyên đoạn văn sau đây:" - -#: templates/registration/activation_email.html:16 -msgid "See you soon!" -msgstr "Hẹn sớm gặp lại bạn!" - -#: templates/registration/activation_email_subject.txt:1 -#, python-format -msgid "Activate your %(SITE_NAME)s account" -msgstr "Kích hoạt tài khoản %(SITE_NAME)s" - #: templates/registration/login.html:9 -msgid "Invalid username/email or password." -msgstr "Tên đăng nhập/email hoặc mật khẩu không hợp lệ." +msgid "Invalid username or password." +msgstr "Tên đăng nhập hoặc mật khẩu không hợp lệ." #: templates/registration/login.html:27 #: templates/registration/totp_auth.html:39 @@ -5639,7 +4945,6 @@ msgid "Your password has been set. You may go ahead and log in now" msgstr "Mật khẩu đã được cập nhật. Hãy thử đăng nhập lại" #: templates/registration/password_reset_confirm.html:9 -#: templates/registration/password_reset_email.html:5 msgid "Reset Password" msgstr "Reset mật khẩu" @@ -5647,7 +4952,7 @@ msgstr "Reset mật khẩu" msgid "" "We've emailed you instructions for setting your password. You should be " "receiving them shortly." -msgstr "Chúng tôi đã gửi email cho bạn để đặt lại mật khẩu." +msgstr "Kiểm tra email để xem hướng dẫn đặt mật khẩu." #: templates/registration/password_reset_done.html:5 msgid "" @@ -5655,25 +4960,13 @@ msgid "" "you registered with, and check your spam folder." msgstr "Nếu bạn không nhận được email, hãy kiểm tra hộp thư rác (spam)." -#: templates/registration/password_reset_email.html:2 -msgid "Password Reset" -msgstr "Đặt lại mật khẩu" - -#: templates/registration/password_reset_email.html:3 -msgid "" -"We have received a request to reset your password. Click the button below to " -"reset your password:" -msgstr "" -"Chúng tôi đã nhận được yêu cầu đặt lại mật khẩu của bạn. Nhấn vào nút bên " -"dưới để đặt lại mật khẩu của bạn:" - #: templates/registration/password_reset_email.txt:1 #, python-format msgid "" "You're receiving this email because you requested a password reset for your " "user account at %(site_name)s." msgstr "" -"Bạn nhận được email này vì bạn đã yêu cầu đặt lại mật khẩu tại %(site_name)s." +"Bạn nhận được email này vì bạn đã yêu cầu reset mật khẩu tại %(site_name)s." #: templates/registration/password_reset_email.txt:3 msgid "Please go to the following page and choose a new password:" @@ -5695,9 +4988,9 @@ msgstr "%(site_name)s team" #: templates/registration/password_reset_subject.txt:1 #, python-format msgid "Password reset on %(site_name)s" -msgstr "Đặt lại mật khẩu trên %(site_name)s" +msgstr "Reset mật khẩu trên %(site_name)s" -#: templates/registration/profile_creation.html:37 +#: templates/registration/profile_creation.html:36 #: templates/registration/username_select.html:7 msgid "Continue >" msgstr "Tiếp tục >" @@ -5709,11 +5002,8 @@ msgstr "Đăng ký hiện tại đã bị dừng. Hãy liên hệ admin." #: templates/registration/registration_complete.html:3 msgid "" "You have successfully been registered. An email has been sent to the email " -"address you provided to confirm your registration. If you don't see it, " -"kindly check your spam folder as well." -msgstr "" -"Bạn đã đăng ký thành công. Kiểm tra email để hoàn thành việc xác thực. Nếu " -"bạn không tìm thấy nó, vui lòng kiểm tra thư mục spam của bạn." +"address you provided to confirm your registration." +msgstr "Bạn đã đăng ký thành công. Kiểm tra email để hoàn thành việc xác thực." #: templates/registration/registration_form.html:61 msgid "(again, for confirmation)" @@ -5723,19 +5013,28 @@ msgstr "(một lần nữa)" msgid "(select your closest major city)" msgstr "(chọn thành phố gần nhất)" -#: templates/registration/registration_form.html:72 -msgid "or" -msgstr "hoặc" - #: templates/registration/registration_form.html:73 msgid "pick from map" msgstr "chọn từ bản đồ" #: templates/registration/registration_form.html:78 msgid "Default language" -msgstr "Ngôn ngữ mặc định" +msgstr "Ngôn ngữ ưa thích" -#: templates/registration/registration_form.html:89 +#: templates/registration/registration_form.html:81 +#: templates/user/edit-profile.html:147 +msgid "Affiliated organizations" +msgstr "Tổ chức bạn muốn tham gia" + +#: templates/registration/registration_form.html:97 +msgid "By registering, you agree to our" +msgstr "Bạn đồng ý với" + +#: templates/registration/registration_form.html:98 +msgid "Terms & Conditions" +msgstr "Điều khoản của chúng tôi" + +#: templates/registration/registration_form.html:101 msgid "Register!" msgstr "Đăng ký!" @@ -5743,7 +5042,7 @@ msgstr "Đăng ký!" #: templates/registration/totp_disable.html:45 #: templates/registration/totp_enable.html:83 msgid "Enter the 6-digit code generated by your app:" -msgstr "Nhập mã xác thực gồm 6 chữ số từ app bạn chọn" +msgstr "" #: templates/registration/totp_auth.html:41 #, python-format @@ -5808,11 +5107,16 @@ msgstr "N/A" msgid "There are no judges available at this time." msgstr "Không có máy chấm nào hoạt động." -#: templates/status/language-list.html:33 templates/ticket/list.html:263 +#: templates/status/language-list.html:33 templates/ticket/list.html:261 #: templates/user/import/table_csv.html:3 msgid "ID" msgstr "ID" +#: templates/status/language-list.html:34 +#: templates/user/import/table_csv.html:6 +msgid "Name" +msgstr "Tên" + #: templates/status/language-list.html:35 msgid "Runtime Info" msgstr "Thông tin Runtime" @@ -5843,144 +5147,148 @@ msgstr "Lỗi hệ thống xảy ra trong quá trình chấm." msgid "Error information" msgstr "Thông tin lỗi" -#: templates/submission/list.html:119 +#: templates/submission/list.html:78 msgid "Filter by status..." msgstr "Lọc theo kết quả..." -#: templates/submission/list.html:125 +#: templates/submission/list.html:84 msgid "Filter by language..." msgstr "Lọc theo ngôn ngữ..." -#: templates/submission/list.html:309 +#: templates/submission/list.html:310 msgid "You were disconnected. Refresh to show latest updates." msgstr "Bạn bị ngắt kết nối. Hãy làm mới để xem cập nhật mới nhất." -#: templates/submission/list.html:368 +#: templates/submission/list.html:369 msgid "Total:" msgstr "Tổng:" -#: templates/submission/list.html:385 +#: templates/submission/list.html:383 +#: templates/submission/submission-list-tabs.html:6 +msgid "Mine" +msgstr "Tôi" + +#: templates/submission/list.html:386 #: templates/submission/submission-list-tabs.html:9 msgid "Best" msgstr "Tốt nhất" -#: templates/submission/list.html:388 +#: templates/submission/list.html:389 #, fuzzy, python-format #| msgid "user" msgid "%(user)s" msgstr "người dùng" -#: templates/submission/list.html:391 templates/user/user-left-sidebar.html:3 -#: templates/user/user-list-tabs.html:5 -msgid "Friends" -msgstr "Bạn bè" - -#: templates/submission/row.html:57 -msgid "d/m/Y" -msgstr "" - -#: templates/submission/row.html:84 +#: templates/submission/row.html:65 msgid "view" msgstr "xem" -#: templates/submission/row.html:88 +#: templates/submission/row.html:69 msgid "rejudge" msgstr "chấm lại" -#: templates/submission/row.html:93 +#: templates/submission/row.html:74 msgid "admin" msgstr "admin" -#: templates/submission/status-testcases.html:5 -msgid "We are waiting for a suitable judge to process your submission..." -msgstr "Các máy chấm đang bận. Hãy kiên nhẫn chờ đợi một chút..." +#: templates/submission/source.html:30 +msgid "View status" +msgstr "Xem kết quả chấm" -#: templates/submission/status-testcases.html:7 -msgid "Your submission is being processed..." -msgstr "Đang chấm..." +#: templates/submission/source.html:31 +msgid "View raw source" +msgstr "Xem mã nguồn" -#: templates/submission/status-testcases.html:9 -msgid "Compilation Error" -msgstr "Lỗi biên dịch" - -#: templates/submission/status-testcases.html:13 -msgid "Compilation Warnings" -msgstr "Cảnh báo khi biên dịch" - -#: templates/submission/status-testcases.html:18 -msgid "Pretest Execution Results" -msgstr "Kết quả chấm Pretest" - -#: templates/submission/status-testcases.html:20 -msgid "Execution Results" -msgstr "Kết quả chấm" - -#: templates/submission/status-testcases.html:27 -#: templates/submission/status-testcases.html:42 -#: templates/submission/status-testcases.html:93 -msgid "Batch " -msgstr "Nhóm " - -#: templates/submission/status-testcases.html:32 -#: templates/submission/status-testcases.html:34 -#: templates/submission/status-testcases.html:119 -msgid "Case" -msgstr "Test" - -#: templates/submission/status-testcases.html:53 -msgid "Overall: " -msgstr "Tổng cộng: " - -#: templates/submission/status-testcases.html:67 -msgid "Point: " -msgstr "Điểm: " - -#: templates/submission/status-testcases.html:72 -msgid "Time: " -msgstr "Thời gian: " - -#: templates/submission/status-testcases.html:81 -msgid "Memory: " -msgstr "Bộ nhớ: " - -#: templates/submission/status-testcases.html:104 -#: templates/submission/status-testcases.html:133 -msgid "Point" -msgstr "Điểm" - -#: templates/submission/status-testcases.html:121 -msgid "Pretest" -msgstr "Pretest" - -#: templates/submission/status-testcases.html:123 -msgid "Test case" -msgstr "Test" - -#: templates/submission/status-testcases.html:163 -msgid "Answer:" -msgstr "Kết quả:" - -#: templates/submission/status-testcases.html:168 -msgid "Judge feedback:" -msgstr "Phản hồi từ máy chấm:" - -#: templates/submission/status-testcases.html:190 -msgid "Passing pretests does not guarantee a full score on system tests." -msgstr "AC pretest không đồng nghĩa AC cả bài nhé :))" - -#: templates/submission/status-testcases.html:193 -msgid "Submission aborted!" -msgstr "Đã hủy chấm bài nộp!" - -#: templates/submission/status.html:141 +#: templates/submission/source.html:33 templates/submission/status.html:139 msgid "Resubmit" msgstr "Nộp lại" -#: templates/submission/status.html:157 +#: templates/submission/status-testcases.html:10 +msgid "We are waiting for a suitable judge to process your submission..." +msgstr "Các máy chấm đang bận. Hãy kiên nhẫn chờ đợi một chút..." + +#: templates/submission/status-testcases.html:12 +msgid "Your submission is being processed..." +msgstr "Đang chấm..." + +#: templates/submission/status-testcases.html:14 +msgid "Compilation Error" +msgstr "Lỗi biên dịch" + +#: templates/submission/status-testcases.html:18 +msgid "Compilation Warnings" +msgstr "Cảnh báo khi biên dịch" + +#: templates/submission/status-testcases.html:23 +msgid "Pretest Execution Results" +msgstr "Kết quả chấm Pretest" + +#: templates/submission/status-testcases.html:25 +msgid "Execution Results" +msgstr "Kết quả chấm" + +#: templates/submission/status-testcases.html:32 +#: templates/submission/status-testcases.html:47 +#: templates/submission/status-testcases.html:98 +msgid "Batch " +msgstr "Nhóm " + +#: templates/submission/status-testcases.html:37 +#: templates/submission/status-testcases.html:39 +#: templates/submission/status-testcases.html:124 +msgid "Case" +msgstr "Test" + +#: templates/submission/status-testcases.html:58 +msgid "Overall: " +msgstr "Tổng cộng: " + +#: templates/submission/status-testcases.html:72 +msgid "Point: " +msgstr "Điểm: " + +#: templates/submission/status-testcases.html:77 +msgid "Time: " +msgstr "Thời gian: " + +#: templates/submission/status-testcases.html:86 +msgid "Memory: " +msgstr "Bộ nhớ: " + +#: templates/submission/status-testcases.html:109 +#: templates/submission/status-testcases.html:138 +msgid "Point" +msgstr "Điểm" + +#: templates/submission/status-testcases.html:126 +msgid "Pretest" +msgstr "Pretest" + +#: templates/submission/status-testcases.html:128 +msgid "Test case" +msgstr "Test" + +#: templates/submission/status-testcases.html:168 +msgid "Answer:" +msgstr "Kết quả:" + +#: templates/submission/status-testcases.html:173 +msgid "Judge feedback:" +msgstr "Phản hồi từ máy chấm:" + +#: templates/submission/status-testcases.html:195 +msgid "Passing pretests does not guarantee a full score on system tests." +msgstr "AC pretest không đồng nghĩa AC cả bài nhé :))" + +#: templates/submission/status-testcases.html:198 +msgid "Submission aborted!" +msgstr "Đã hủy chấm bài nộp!" + +#: templates/submission/status.html:153 msgid "Source code" msgstr "Mã nguồn" -#: templates/submission/status.html:171 +#: templates/submission/status.html:180 msgid "Abort" msgstr "Hủy chấm" @@ -5997,6 +5305,10 @@ msgstr "Các bài nộp của" msgid "Subtask" msgstr "Subtask" +#: templates/submission/user-ajax.html:33 +msgid "Total" +msgstr "Tổng điểm" + #: templates/submission/user-ajax.html:51 msgid "g:i a d/m/Y" msgstr "" @@ -6024,91 +5336,45 @@ msgstr "pretests" msgid "main tests" msgstr "test chính thức" -#: templates/test_formatter/download_test_formatter.html:75 -#: templates/test_formatter/download_test_formatter.html:82 -#: templates/test_formatter/edit_test_formatter.html:134 -msgid "Download" -msgstr "Tải xuống" - -#: templates/test_formatter/download_test_formatter.html:86 -#: templates/test_formatter/edit_test_formatter.html:137 -#: templates/test_formatter/test_formatter.html:20 -msgid "Copyright" +#: templates/ticket/feed.html:20 +msgid " replied" msgstr "" -#: templates/test_formatter/edit_test_formatter.html:105 -msgid "Before" -msgstr "Trước" - -#: templates/test_formatter/edit_test_formatter.html:106 -#: templates/test_formatter/edit_test_formatter.html:114 -msgid "Input format" -msgstr "Định dạng đầu vào" - -#: templates/test_formatter/edit_test_formatter.html:108 -#: templates/test_formatter/edit_test_formatter.html:116 -msgid "Output format" -msgstr "Định dạng đầu ra" - -#: templates/test_formatter/edit_test_formatter.html:113 -msgid "After" -msgstr "Sau" - -#: templates/test_formatter/edit_test_formatter.html:122 -msgid "Preview" -msgstr "Xem trước" - -#: templates/test_formatter/edit_test_formatter.html:129 -msgid "File name" -msgstr "Tên file" - -#: templates/test_formatter/edit_test_formatter.html:133 -msgid "Convert" -msgstr "Chuyển đổi" - -#: templates/test_formatter/test_formatter.html:17 -msgid "Upload" -msgstr "Tải lên" - -#: templates/ticket/feed.html:22 -msgid "replied" -msgstr "phản hồi" - -#: templates/ticket/list.html:135 templates/ticket/ticket.html:96 +#: templates/ticket/list.html:135 templates/ticket/ticket.html:97 msgid "Reopened: " msgstr "Mở lại: " -#: templates/ticket/list.html:138 templates/ticket/ticket.html:97 +#: templates/ticket/list.html:138 templates/ticket/ticket.html:98 msgid "Closed: " msgstr "Đóng: " -#: templates/ticket/list.html:223 +#: templates/ticket/list.html:221 msgid "Use desktop notification" msgstr "Sử dụng thông báo từ desktop" -#: templates/ticket/list.html:229 +#: templates/ticket/list.html:227 msgid "Show my tickets only" msgstr "Chỉ hiển thị các báo cáo dành cho tôi" -#: templates/ticket/list.html:233 +#: templates/ticket/list.html:231 msgid "Filing user" msgstr "Người báo cáo" -#: templates/ticket/list.html:242 +#: templates/ticket/list.html:240 msgid "Assignee" msgstr "Người định uỷ thác" -#: templates/ticket/list.html:264 +#: templates/ticket/list.html:262 msgid "Title" msgstr "Tiêu đề" -#: templates/ticket/list.html:266 templates/ticket/ticket.html:192 +#: templates/ticket/list.html:264 templates/ticket/ticket.html:193 msgid "Assignees" msgstr "Người được ủy thác" #: templates/ticket/new_problem.html:7 msgid "Thanks for opening a ticket!" -msgstr "Cảm ơn bạn đã báo cáo!" +msgstr "Cảm ơn đã báo cáo!" #: templates/ticket/new_problem.html:9 msgid "" @@ -6119,31 +5385,31 @@ msgstr "" "Lưu ý rằng đây là đơn báo cáo các vấn đề trong đề bài, không phải nơi để hỏi " "bài hay nộp bài." -#: templates/ticket/ticket.html:178 +#: templates/ticket/ticket.html:179 msgid "Post" msgstr "Đăng" -#: templates/ticket/ticket.html:186 +#: templates/ticket/ticket.html:187 msgid "Associated object" msgstr "" -#: templates/ticket/ticket.html:197 +#: templates/ticket/ticket.html:198 msgid "No one is assigned." msgstr "Không ai được ủy thác." -#: templates/ticket/ticket.html:203 +#: templates/ticket/ticket.html:204 msgid "Close ticket" msgstr "Đóng báo cáo" -#: templates/ticket/ticket.html:205 +#: templates/ticket/ticket.html:206 msgid "Reopen ticket" msgstr "Mở lại báo cáo" -#: templates/ticket/ticket.html:209 +#: templates/ticket/ticket.html:210 msgid "Assignee notes" msgstr "Lưu ý cho người ủy thác" -#: templates/ticket/ticket.html:216 templates/widgets/select_all.html:4 +#: templates/ticket/ticket.html:217 templates/widgets/select_all.html:4 msgid "Nothing here." msgstr "Không có gì." @@ -6155,63 +5421,47 @@ msgstr "Top Rating" msgid "Top Score" msgstr "Top Score" -#: templates/user/edit-profile.html:95 -msgid "Full name" -msgstr "Họ tên" +#: templates/user/base-users-table.html:3 +msgid "Rank" +msgstr "Rank" -#: templates/user/edit-profile.html:103 -msgid "Date of birth" -msgstr "Ngày sinh" - -#: templates/user/edit-profile.html:107 -msgid "Address" -msgstr "Địa chỉ" - -#: templates/user/edit-profile.html:111 -msgid "T-Shirt size" -msgstr "Kích cỡ áo" - -#: templates/user/edit-profile.html:118 -msgid "Change your password" -msgstr "Đổi mật khẩu" - -#: templates/user/edit-profile.html:132 -msgid "Avatar" -msgstr "Ảnh đại diện" - -#: templates/user/edit-profile.html:138 +#: templates/user/edit-profile.html:104 msgid "Self-description" msgstr "Tự giới thiệu" -#: templates/user/edit-profile.html:146 +#: templates/user/edit-profile.html:112 msgid "Select your closest major city" msgstr "Chọn thành phố gần nhất" -#: templates/user/edit-profile.html:155 +#: templates/user/edit-profile.html:121 msgid "Editor theme" msgstr "Giao diện cho code editor" -#: templates/user/edit-profile.html:165 +#: templates/user/edit-profile.html:126 +msgid "Math engine" +msgstr "" + +#: templates/user/edit-profile.html:132 templates/user/edit-profile.html:133 +msgid "Change your avatar" +msgstr "Đổi ảnh đại diện" + +#: templates/user/edit-profile.html:139 +msgid "Change your password" +msgstr "Đổi mật khẩu" + +#: templates/user/edit-profile.html:156 msgid "Two Factor Authentication is enabled." msgstr "Two Factor Authentication đã được kích hoạt." -#: templates/user/edit-profile.html:169 -msgid "Disable" -msgstr "Tắt" - -#: templates/user/edit-profile.html:172 +#: templates/user/edit-profile.html:163 msgid "Two Factor Authentication is disabled." -msgstr "Two Factor Authentication chưa kích hoạt." +msgstr "Two Factor Authentication đã được hủy kích hoạt." -#: templates/user/edit-profile.html:173 -msgid "Enable" -msgstr "Bật" - -#: templates/user/edit-profile.html:177 -msgid "CSS background" +#: templates/user/edit-profile.html:168 +msgid "User-script" msgstr "" -#: templates/user/edit-profile.html:181 +#: templates/user/edit-profile.html:172 msgid "Update profile" msgstr "Cập nhật thông tin" @@ -6227,7 +5477,7 @@ msgstr "File người dùng" msgid "Sample" msgstr "" -#: templates/user/import/index.html:105 templates/user/user-left-sidebar.html:5 +#: templates/user/import/index.html:105 templates/user/user-left-sidebar.html:6 #: templates/user/user-list-tabs.html:8 msgid "Import" msgstr "" @@ -6236,7 +5486,7 @@ msgstr "" msgid "Organizations" msgstr "Tổ chức" -#: templates/user/pp-row.html:21 +#: templates/user/pp-row.html:22 #, python-format msgid "" "\n" @@ -6244,132 +5494,146 @@ msgid "" " " msgstr "" -#: templates/user/pp-row.html:26 +#: templates/user/pp-row.html:27 #, python-format msgid "%(pp).1fpp" msgstr "%(pp).1fpp" -#: templates/user/pp-row.html:28 +#: templates/user/pp-row.html:29 #, python-format msgid "%(pp).0fpp" msgstr "%(pp).0fpp" -#: templates/user/user-about.html:63 +#: templates/user/user-about.html:23 +#, python-format +msgid "%(counter)s problem solved" +msgid_plural "%(counter)s problems solved" +msgstr[0] "Đã giải %(counter)s bài" + +#: templates/user/user-about.html:35 +msgid "Total points" +msgstr "Tổng điểm" + +#: templates/user/user-about.html:45 +msgid "Rank by rating" +msgstr "Rank theo rating" + +#: templates/user/user-about.html:52 +msgid "Rank by points" +msgstr "Rank theo điểm" + +#: templates/user/user-about.html:64 +msgid "From" +msgstr "Đến từ" + +#: templates/user/user-about.html:75 msgid "Admin Notes" msgstr "Lưu ý của admin" -#: templates/user/user-about.html:75 +#: templates/user/user-about.html:90 msgid "You have not shared any information." msgstr "Bạn chưa chia sẻ thông tin nào." -#: templates/user/user-about.html:77 +#: templates/user/user-about.html:92 msgid "This user has not shared any information." msgstr "Người dùng này chưa chia sẻ thông tin nào." -#: templates/user/user-about.html:97 +#: templates/user/user-about.html:101 +msgid "Awards" +msgstr "Thành tích" + +#: templates/user/user-about.html:112 #, python-format msgid "%(label)s (%(date)s)" msgstr "%(label)s (%(date)s)" -#: templates/user/user-about.html:115 +#: templates/user/user-about.html:130 msgid "Mon" msgstr "Thứ 2" -#: templates/user/user-about.html:120 +#: templates/user/user-about.html:135 msgid "Tues" msgstr "Thứ 3" -#: templates/user/user-about.html:125 +#: templates/user/user-about.html:140 msgid "Wed" msgstr "Thứ 4" -#: templates/user/user-about.html:130 +#: templates/user/user-about.html:145 msgid "Thurs" msgstr "Thứ 5" -#: templates/user/user-about.html:135 +#: templates/user/user-about.html:150 msgid "Fri" msgstr "Thứ 6" -#: templates/user/user-about.html:140 +#: templates/user/user-about.html:155 msgid "Sat" msgstr "Thứ 7" -#: templates/user/user-about.html:145 +#: templates/user/user-about.html:160 msgid "Sun" msgstr "CN" -#: templates/user/user-about.html:154 +#: templates/user/user-about.html:169 msgid "Less" msgstr "Ít" -#: templates/user/user-about.html:160 +#: templates/user/user-about.html:175 msgid "More" msgstr "Nhiều" -#: templates/user/user-about.html:169 +#: templates/user/user-about.html:184 msgid "Rating History" msgstr "Các lần thi" -#: templates/user/user-about.html:236 +#: templates/user/user-about.html:255 msgid "past year" msgstr "năm ngoái" -#: templates/user/user-about.html:253 +#: templates/user/user-about.html:272 msgid "total submission(s)" msgstr "bài nộp" -#: templates/user/user-about.html:257 +#: templates/user/user-about.html:276 msgid "submissions in the last year" msgstr "bài nộp trong năm qua" -#: templates/user/user-base.html:104 +#: templates/user/user-base.html:98 msgid "Unfollow" msgstr "Bỏ theo dõi" -#: templates/user/user-base.html:107 +#: templates/user/user-base.html:101 msgid "Follow" msgstr "Theo dõi" -#: templates/user/user-base.html:115 -msgid "Message" +#: templates/user/user-base.html:118 +msgid "Send message" msgstr "Nhắn tin" -#: templates/user/user-base.html:123 +#: templates/user/user-base.html:127 msgid "Contests written" msgstr "Số kỳ thi" -#: templates/user/user-base.html:127 +#: templates/user/user-base.html:131 msgid "Min. rating:" msgstr "Min. rating:" -#: templates/user/user-base.html:131 +#: templates/user/user-base.html:135 msgid "Max rating:" msgstr "Max rating:" -#: templates/user/user-bookmarks.html:22 -msgid "Editorials" -msgstr "Lời giải" - -#: templates/user/user-bookmarks.html:25 +#: templates/user/user-bookmarks.html:14 msgid "Posts" msgstr "Bài đăng" -#: templates/user/user-bookmarks.html:71 -msgid "There is no saved problem." -msgstr "Không có bài tập nào đã lưu." +#: templates/user/user-bookmarks.html:75 +msgid "Editorials" +msgstr "Lời giải" -#: templates/user/user-bookmarks.html:100 -msgid "There is no saved contest." -msgstr "Không có kỳ thi đã lưu." - -#: templates/user/user-bookmarks.html:141 -msgid "There is no saved editorial." -msgstr "Không có lời giải nào đã lưu." - -#: templates/user/user-bookmarks.html:190 -msgid "There is no saved post." -msgstr "Không có bài đăng nào đã lưu." +#: templates/user/user-left-sidebar.html:3 templates/user/user-list-tabs.html:5 +msgid "Friends" +msgstr "Bạn bè" #: templates/user/user-problems.html:35 msgid "Points Breakdown" @@ -6396,20 +5660,24 @@ msgstr "Ẩn các bài đã giải" msgid "%(points).1f points" msgstr "%(points).1f điểm" +#: templates/user/user-problems.html:99 +msgid "Score" +msgstr "Điểm" + #: templates/user/user-problems.html:110 #, python-format msgid "%(points)s / %(total)s" msgstr "%(points)s / %(total)s" -#: templates/user/user-tabs.html:8 +#: templates/user/user-tabs.html:7 msgid "Impersonate" msgstr "Giả danh" -#: templates/user/user-tabs.html:15 +#: templates/user/user-tabs.html:14 msgid "Admin User" msgstr "Người dùng" -#: templates/user/user-tabs.html:18 +#: templates/user/user-tabs.html:17 msgid "Admin Profile" msgstr "Thông tin" @@ -6417,175 +5685,6 @@ msgstr "Thông tin" msgid "Check all" msgstr "Chọn tất cả" -#~ msgid "course title" -#~ msgstr "tiêu đề khóa học" - -#~ msgid "course content" -#~ msgstr "nội dung khóa học" - -#~ msgid "" -#~ "This image will replace the default site logo for users viewing the " -#~ "organization." -#~ msgstr "Ảnh này sẽ thay thế logo mặc định khi ở trong tổ chức." - -#~ msgid "A ticket is added or updated" -#~ msgstr "Báo cáo" - -#~ msgid "Post time" -#~ msgstr "Thời gian đăng" - -#~ msgid "My groups" -#~ msgstr "Nhóm của tôi" - -#~ msgid "Open groups" -#~ msgstr "Nhóm mở" - -#~ msgid "Private groups" -#~ msgstr "Nhóm kín" - -#~ msgid "Send message" -#~ msgstr "Nhắn tin" - -#~ msgid "Wrong" -#~ msgstr "Sai" - -#~ msgid "Timeout" -#~ msgstr "Quá thời gian" - -#~ msgid "Active Contests" -#~ msgstr "Kỳ thi bạn đang tham gia" - -#~ msgid "Past Contests" -#~ msgstr "Kỳ thi trong quá khứ" - -#~ msgid "Duration" -#~ msgstr "Thời hạn" - -#~ msgid "Submissions in {0}" -#~ msgstr "Bài nộp trong {0}" - -#~ msgid "Submissions in %s" -#~ msgstr "Bài nộp trong %s" - -#~ msgid "Hidden Rankings" -#~ msgstr "Bảng xếp hạng ẩn" - -#, fuzzy -#~| msgid "Banned from joining" -#~ msgid "banned from voting" -#~ msgstr "Bị cấm tham gia" - -#~ msgid "Already in contest" -#~ msgstr "Đã ở trong kỳ thi" - -#~ msgid "You are already in a contest: \"%s\"." -#~ msgstr "Bạn đã ở trong kỳ thi: \"%s\"." - -#~ msgid "Compete" -#~ msgstr "Thi" - -#~ msgid "General" -#~ msgstr "Chung" - -#~ msgid "custom validator file" -#~ msgstr "file trình chấm" - -#~ msgid "Leave as LaTeX" -#~ msgstr "Để định dạng LaTeX" - -#~ msgid "MathML only" -#~ msgstr "chỉ dùng MathML" - -#~ msgid "Custom validator (CPP)" -#~ msgstr "Trình chấm tự viết (C++)" - -#, fuzzy -#~| msgid "From the web" -#~ msgid "From the Web" -#~ msgstr "Từ web" - -#~ msgid "on {time}" -#~ msgstr "vào {time}" - -#, fuzzy -#~| msgid "end time" -#~ msgid "ending time" -#~ msgstr "thời gian kết thúc" - -#~ msgid "In current contest" -#~ msgstr "Trong kỳ thi hiện tại" - -#~ msgid "View status" -#~ msgstr "Xem kết quả chấm" - -#~ msgid "View raw source" -#~ msgstr "Xem mã nguồn" - -#, fuzzy -#~| msgid "contest summary" -#~ msgid "Contests Summary" -#~ msgstr "tổng kết kỳ thi" - -#~ msgid "Submit solution" -#~ msgstr "Nộp bài" - -#~ msgid "(partial)" -#~ msgstr "(thành phần)" - -#~ msgid "Following" -#~ msgstr "Bạn bè" - -#~ msgid "Other" -#~ msgstr "Thành viên khác" - -#~ msgid "Online Users" -#~ msgstr "Trực tuyến" - -#~ msgid "Group:" -#~ msgstr "Nhóm:" - -#~ msgid "Have editorial" -#~ msgstr "Có hướng dẫn" - -#~ msgid "Contest" -#~ msgstr "Kỳ thi" - -#~ msgid "0 to not show testcases, 1 to show" -#~ msgstr "0 để ẩn test, 1 để hiện" - -#~ msgid "{settings.SITE_NAME} - Email Change Request" -#~ msgstr "{settings.SITE_NAME} - Thay đổi email" - -#~ msgid "Affiliated organizations" -#~ msgstr "Tổ chức bạn muốn tham gia" - -#~ msgid "By registering, you agree to our" -#~ msgstr "Bạn đồng ý với" - -#~ msgid "Terms & Conditions" -#~ msgstr "Điều khoản của chúng tôi" - -#~ msgid "Change your avatar" -#~ msgstr "Đổi ảnh đại diện" - -#, fuzzy -#~| msgid "How did you corrupt the custom checker path?" -#~ msgid "How did you corrupt the interactor path?" -#~ msgstr "How did you corrupt the custom checker path?" - -#~ msgid "comment more" -#~ msgstr "bình luận nữa" - -#~ msgid "comments more" -#~ msgstr "bình luận nữa" - -#~ msgid "" -#~ "This comment is hidden due to too much negative feedback. Click here to view it." -#~ msgstr "" -#~ "Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở." - #, fuzzy #~| msgid "short name" #~ msgid "first name" @@ -6638,6 +5737,7 @@ msgstr "Chọn tất cả" #~ msgid "Django administration" #~ msgstr "Quản trị viên Django" +#, python-format #~ msgid "" #~ "Please enter the correct %(username)s and password for an admin account. " #~ "Note that both fields may be case-sensitive." @@ -6645,6 +5745,7 @@ msgstr "Chọn tất cả" #~ "Hãy nhập %(username)s và mật khẩu hợp lệ cho tài khoản quản trị. Chú ý cả " #~ "hai trường có phân biệt chữ Hoa-thường." +#, python-format #~ msgid "" #~ "Please enter the correct %(username)s and password for an user account. " #~ "Note that both fields may be case-sensitive." @@ -6666,32 +5767,8 @@ msgstr "Chọn tất cả" #~ msgid "Color theme" #~ msgstr "Chủ đề màu sắc" -#~ msgid "commented on {time}" -#~ msgstr "bình luận vào {time}" - -#~ msgid "Associated page" -#~ msgstr "Trang liên kết" - -#~ msgid "Page code must be ^[pcs]:[a-z0-9]+$|^b:\\d+$" -#~ msgstr "Mã trang phải có dạng ^[pcs]:[a-z0-9]+$|^b:\\d+$" - -#~ msgid "Best solutions for %(problem)s in %(contest)s" -#~ msgstr "Các bài nộp tốt nhất cho %(problem)s trong %(contest)s" - -#~ msgid "Best solutions for problem %(number)s in %(contest)s" -#~ msgstr "Các bài nộp tốt nhất cho bài %(number)s trong %(contest)s" - -#~ msgid "" -#~ "Best solutions for {0} in {2}" -#~ msgstr "" -#~ "Các bài nộp tốt nhất cho {0} trong {2}" -#~ "" - -#~ msgid "Best solutions for problem {0} in {1}" -#~ msgstr "Các bài nộp tốt nhất cho bài {0} trong {1}" - -#~ msgid "Refresh" -#~ msgstr "Làm mới" +#~ msgid "Change color theme" +#~ msgstr "Đổi chủ đề màu sắc" #~ msgid "View comments" #~ msgstr "Xem bình luận" @@ -6728,6 +5805,9 @@ msgstr "Chọn tất cả" #~ msgid "Frozen" #~ msgstr "Đã đóng băng" +#~ msgid "Show organizations" +#~ msgstr "Hiển thị tổ chức" + #~ msgid "Dislike" #~ msgstr "Không thích" @@ -6780,6 +5860,9 @@ msgstr "Chọn tất cả" #~ msgid "Voting Statistics" #~ msgstr "Thống kê" +#~ msgid "No Votes Available!" +#~ msgstr "Không có bình chọn nào!" + #~ msgid "Median:" #~ msgstr "Trung vị:" @@ -6810,12 +5893,18 @@ msgstr "Chọn tất cả" #~ msgid "Organization news" #~ msgstr "Tin tức tổ chức" +#~ msgid "There is no news at this time." +#~ msgstr "Không có tin tức." + #~ msgid "Admin organization" #~ msgstr "Trang admin tổ chức" #~ msgid "New private contests" #~ msgstr "Kỳ thi riêng tư mới" +#~ msgid "View all" +#~ msgstr "Tất cả" + #~ msgid "New private problems" #~ msgstr "Bài tập riêng tư mới" diff --git a/locale/vi/LC_MESSAGES/dmoj-user.po b/locale/vi/LC_MESSAGES/dmoj-user.po index 29ad707..fad4ecc 100644 --- a/locale/vi/LC_MESSAGES/dmoj-user.po +++ b/locale/vi/LC_MESSAGES/dmoj-user.po @@ -24,9 +24,6 @@ msgstr "Giới thiệu" msgid "Status" msgstr "Máy chấm" -msgid "Courses" -msgstr "Khóa học" - msgid "Suggestions" msgstr "Đề xuất ý tưởng" @@ -40,7 +37,7 @@ msgid "Name" msgstr "Đăng ký tên" msgid "Report" -msgstr "Báo cáo tiêu cực" +msgstr "Báo cáo" msgid "2sat" msgstr "" @@ -585,9 +582,6 @@ msgstr "" msgid "two-pointers" msgstr "" -msgid "unlabelled" -msgstr "" - msgid "VOI" msgstr "" @@ -596,12 +590,3 @@ msgstr "" msgid "z-function" msgstr "" - -#~ msgid "Bug Report" -#~ msgstr "Báo cáo lỗi" - -#~ msgid "Insert Image" -#~ msgstr "Chèn hình ảnh" - -#~ msgid "Save" -#~ msgstr "Lưu" diff --git a/manage.py b/manage.py old mode 100644 new mode 100755 diff --git a/requirements.txt b/requirements.txt index 99b2c0f..82f5384 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django>=3.2.17,<4 +Django>=3.2,<4 django_compressor>=3 django-mptt>=0.13 django-pagedown @@ -26,7 +26,7 @@ pyotp qrcode[pil] jsonfield @ git+https://github.com/DMOJ/jsonfield.git pymoss -packaging<22 +packaging celery ansi2html @ git+https://github.com/DMOJ/ansi2html.git sqlparse @@ -34,7 +34,7 @@ netaddr redis lupa websocket-client -python-memcached<1.60 +python-memcached numpy pandas markdown @@ -42,6 +42,4 @@ bleach pymdown-extensions mdx-breakless-lists beautifulsoup4 -pre-commit -django-ratelimit -lxml_html_clean \ No newline at end of file +pre-commit \ No newline at end of file diff --git a/resources/admin/css/pagedown.css b/resources/admin/css/pagedown.css index ee29196..27732de 100644 --- a/resources/admin/css/pagedown.css +++ b/resources/admin/css/pagedown.css @@ -2,12 +2,9 @@ padding-right: 15px !important; } + .wmd-preview { margin-top: 15px; padding: 15px; word-wrap: break-word; } - -.md-typeset, .wmd-input { - line-height: 1.4em !important; -} diff --git a/resources/base.scss b/resources/base.scss index 525a50d..f0a8f60 100644 --- a/resources/base.scss +++ b/resources/base.scss @@ -25,7 +25,7 @@ a { } &:active { - color: $theme_color; + color: #faa700; } } @@ -36,7 +36,7 @@ img { } * { - -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: transparent; } .full { @@ -139,7 +139,7 @@ b { h2 { font-weight: 400; - font-size: 1.7em; + font-size: 2em; border-radius: $widget_border_radius; padding: 0; margin: 0; @@ -170,17 +170,48 @@ header { } #user-links { - display: flex; - text-align: center; - padding: 4px; - margin-right: 1em; - gap: 5px; - &:hover { - color: black; - border-radius: 2px; - border: 0.5px solid black; - cursor: pointer; - padding: 3.5px; + // display: inline; + float: right; + color: #5c5954; + + .anon { + margin-top: 1em; + padding-right: 10px; + display: inline-flex; + min-height: 100%; + align-items: center; + white-space: nowrap; + } + + li { + text-transform: none; + } + + & > ul { + display: block; + margin: 0; + + & > li > a > span { + height: 36px; + padding-top: 8px; + display: block; + white-space: nowrap; + + & > img { + vertical-align: middle; + border-radius: $widget_border_radius; + display: inline; + margin: 2px 6px 0 5px; + } + + & > span { + vertical-align: middle; + display: inline; + margin-top: 11px; + margin-right: 9px; + padding: 0; + } + } } } @@ -201,8 +232,8 @@ header { position: fixed; top: 0; left: 0; - right: 10px; - height: $navbar_height; + right: 0; + height: 48px; } nav { @@ -229,12 +260,6 @@ nav { text-transform: uppercase; position: relative; - &.home-nav-element { - display: flex; - align-items: center; - margin-right: 1em; - } - &.home-nav-element a { padding: 0; height: 44px; @@ -247,12 +272,14 @@ nav { } a, button { - display: flex; - height: 100%; - align-items: center; - gap: 2px; + display: inline-block; text-decoration: none; + vertical-align: middle; color: black; + padding: 13px 7px; + height: 18px; + border-top: 2px solid transparent; + border-bottom: 2px solid transparent; font-weight: bold; font-size: initial; @@ -261,16 +288,17 @@ nav { } &:hover { - border-top: 2px solid $theme_color; - color: black; + border-top: 2px solid #9c3706; + color: lightcoral; background: rgba(255, 255, 255, 0.25); margin: 0; } &.active { // color: #FFF; - border-top: 2px solid $theme_color; - color: $theme_color; + border-top: 2px solid #9c3706; + color: #9c3706; + background: white; } .nav-expand { @@ -299,7 +327,7 @@ nav { a { color: black !important; } - + a, button { padding: 8px 20px 8px 8px !important; font-size: 0.8em; @@ -332,6 +360,16 @@ nav { } } } + + .nav-divider { + width: 1px; + vertical-align: middle; + padding-left: 3px; + display: inline-block; + height: 32px; + margin-right: 1px; + border-right: 3px solid rgba(255, 255, 255, 0.15); + } } hr { @@ -339,8 +377,7 @@ hr { } #content { - margin: $navbar_height auto 1em auto; - padding-top: 1em; + margin: 4.5em auto 1em auto; // Header width: 90%; @@ -495,12 +532,33 @@ noscript #noscript { flex: 1 1 1px; } +#user-links { + height: 100%; + padding-right: 1em; + + ul { + margin: 0; + + li { + display: block; + height: 100%; + + a { + display: block; + padding: 0; + height: 100%; + } + } + } +} + #page-container { min-height: 100%; position: relative; margin: 0 auto; border-right: 1px solid $border_gray; border-left: 1px solid $border_gray; + background: white; } // border-bottom: 1px solid rgb(204, 204, 204) @@ -518,6 +576,16 @@ noscript #noscript { margin-top: 1.2em; } +math { + font-size: 1.155em; +} + +.MathJax { + &:focus { + outline: none; + } +} + @media(max-width: 1498px) { #page-container { border-left: none; @@ -527,24 +595,21 @@ noscript #noscript { } } -@media (max-width: 799px) { +@media (max-width: 760px) { #navigation { - height: $navbar_height_mobile; - } - - #content { - margin-top: $navbar_height_mobile; + height: 36px; } #navicon { transition-duration: 0.25s; - display: flex; + display: block; + line-height: 26px; font-size: 2em; color: $widget_black; padding: 0 0.25em; margin: 4px 0.25em; white-space: nowrap; - flex-grow: 1; + float: left; &.hover { color: #4db7fe; @@ -557,7 +622,6 @@ noscript #noscript { display: none; padding: 0; margin-left: 0; - text-align: center; border-left: 4px solid $highlight_blue; position: fixed; top: 36px; @@ -574,8 +638,6 @@ noscript #noscript { a { display: block; font-weight: normal; - text-align: left; - padding: 7px 13px; .nav-expand { float: right; @@ -598,13 +660,25 @@ noscript #noscript { } } } + + #user-links { + & > ul > li { + & > a > span { + padding-top: 4px; + height: 32px; + } + + & > ul { + left: 0 !important; + margin-top: 0 !important; + } + } + } } -@media(min-width: 800px) { +@media not all and (max-width: 760px) { #nav-list { - display: flex !important; - gap: 1.5em; - flex-grow: 1; + display: inline !important; li { &.home-menu-item { @@ -631,11 +705,11 @@ noscript #noscript { } #chat-icon { - color: darkgreen; + color: lightseagreen; } #chat-icon:hover { - color: $theme_color; + color: darkgreen; } #nav-lang-icon { @@ -654,60 +728,39 @@ noscript #noscript { } .dropdown { + border-radius: 4px; + border: 0.5px solid lightgray; + margin-top: 1px; + background: white; display: none; - background-color: white; - min-width: 160px; - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); - padding: 4px 0; - z-index: 1; - border-radius: 5px; a { - display: block; - text-decoration: none; - transition: background-color 0.3s; color: black; } } .dropdown-item { - font-size: 16px; - padding: 6px 40px 6px 15px; + font-size: 15px; + padding: 6px 8px; cursor: pointer; - color: black; - font-weight: 600; - border-top: 1px solid #ccc; - - i { - width: 1.5em; - } } .dropdown-item:hover { - color: $theme_color; - background-color: #f8f8f2; + background: lightgray; } -.popper-arrow, -.popper-arrow::before { - position: absolute; - width: 8px; - height: 8px; - background: inherit; -} +.navbar-icons { + display: inline-flex; + align-items: center; + float: left; + margin-right: 0.3em; -.popper-arrow { - visibility: hidden; + .navbar-icon { + font-size: 1.6em; + } } - -.popper-arrow::before { - visibility: visible; - content: ''; - transform: rotate(45deg); -} - -.popper-arrow { - top: -4px; +.navbar-icon { + margin-right: 0.3em; } .unread_boxes { @@ -729,14 +782,19 @@ noscript #noscript { } .featherlight { - z-index: 1001 !important; + z-index: 1000 !important; } -// @media (max-width: 500px) { - // #notification { - // margin-top: 0.6em; - // } - // } +select { + visibility: hidden; + max-height: 0; +} + +@media (max-width: 500px) { + #notification { + margin-top: 0.6em; + } +} .notification-open #notification { color: green !important; @@ -791,157 +849,27 @@ noscript #noscript { background-color: bisque; } -.background-royalblue { - background-color: royalblue !important; -} - -.background-green { - background-color: #28a745 !important; -} - -.background-red { - background-color: #dc3545 !important; -} - .background-footer { color: #808080; } -.view-next-page { - margin-left: auto; - margin-right: auto; - margin-top: 1em; - margin-bottom: 1em; -} - -#loading-bar { - position: fixed; - top: 0; - left: 0; - height: 2px; - background-color: $theme_color; - width: 0; - z-index: 9999; -} - -.nav-right-text { - font-weight: normal; - font-size: small; - text-align: center; -} - -.anon { - display: flex; - gap: 1em; - padding-right: 1em; - a { - color: black; - } -} - @media (max-width: 799px) { - .nav-fa-icon { - display: none; - } - - .page-title { - margin-left: 0.5em; + #user-links, .anon { + padding-right: 0.5em; } } -@media(min-width: 800px) { - .normal-text { - font-weight: normal; - font-size: small; - text-align: left; +@media (min-width: 800px) { + .anon { + padding-right: 1em; } - #page-container { - background: #f1f2f2; + .navbar-icons { + margin-top: 6px; } +} + +@media (min-width: 800px) { #event-tab { display: none; } - #content.wrapper { - background: white; - padding: 2em; - border-radius: 1em; - } - .view-next-page { - display: none; - } } - -.colored-text { - color: black; -} - -.bold-text { - font-weight: bold; -} - -.non-italics { - font-style: normal; -} - -.margin-label{ - margin-bottom: 2.5px; - padding-bottom: 0.25em; - display: block; -} - -::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */ - color: $theme_color; - opacity: 1; /* Firefox */ - text-align: center; -} - -:-ms-input-placeholder { /* Internet Explorer 10-11 */ - color: $theme_color; - text-align: center; -} - -::-ms-input-placeholder { /* Microsoft Edge */ - color: $theme_color; - text-align: center; -} - -input::placeholder{ - color: $theme_color; - text-align: center; -} - -::-webkit-input-placeholder { - color: $theme_color; - text-align: center; -} - -:-moz-placeholder { /* Firefox 18- */ - color: $theme_color; - text-align: center; -} - -::-moz-placeholder { /* Firefox 19+ */ - color: $theme_color; - text-align: center; -} - -.nav-fa-icon { - i { - margin-right: 0.1em; - color: #000; - font-size: 21px; - } -} - -.nav-fa-icon-active { - i { - color: $theme_color; - font-size: 22.5px; - margin-right: 0.1em; - } -} - -.featherlight-content { - max-height: 80% !important; - border-radius: 10px; -} \ No newline at end of file diff --git a/resources/blog.scss b/resources/blog.scss index 1df8dc6..b422b82 100644 --- a/resources/blog.scss +++ b/resources/blog.scss @@ -32,13 +32,19 @@ } } +.blog-sidebar, +.right-sidebar { + width: 100%; + margin-left: auto; +} + .left-sidebar-item.active { - color: white; + color: green; font-weight: bold; - background-color: $theme_color; + background-color: lightgreen; .sidebar-icon { - color: white; + color: green; } } @@ -134,11 +140,11 @@ border-bottom: 1.4px solid lightgray; border-top: 1.4px solid lightgray; margin-bottom: 1.5em; + width: 90%; padding: 1em 1.25em 0.5em 1.25em; background-color: white; margin-left: auto; margin-right: auto; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); .title { margin-bottom: 0.2em; @@ -146,9 +152,8 @@ } } -.blog-box:hover, .blog-box:not(.pre-expand-blog) { +.blog-box:hover { border-color: #8a8a8a; - box-shadow: 0 0 2px rgba(0, 0, 0, 0.1); } .blog-description { @@ -157,7 +162,6 @@ overflow-wrap: anywhere; padding-bottom: 1em; clear: both; - position: relative; } .problem-feed-name { @@ -181,8 +185,6 @@ .left-sidebar-item { display: flex; align-items: center; - border-radius: .5em; - color: black; .sidebar-icon { font-size: large; @@ -197,12 +199,10 @@ .left-sidebar-item:hover { background-color: #e3e3e3; cursor: pointer; - color: black; } .left-sidebar-item.active:hover { - background-color: $theme_color; - color: white; + background-color: lightgreen; } .sidebar-icon { @@ -227,15 +227,16 @@ } .show-more { - display: flex; color: black; + font-style: italic; font-size: 16px; font-weight: 700; padding: 0px 12px; margin-top: 5px; position: absolute; - inset: 50% 0px 0px; + inset: 50% 0px 52px; background: linear-gradient(transparent, white); + display: flex; -webkit-box-pack: end; justify-content: flex-end; align-items: flex-end; @@ -255,32 +256,8 @@ } } -.middle-right-content.wrapper { - padding: 1em 0; - background: white; - border-radius: 1em; -} - -.post-content-header { - margin-left: 0; - display: inline-flex; - align-items: center; - gap: 0.2em; -} - @media (max-width: 799px) { - .blog-sidebar, - .right-sidebar { - width: 100%; - margin-left: auto; - margin-top: 2em; - } - - .actionbar-box { - margin: 8px 0; - } - .left-sidebar-header { display: none; } @@ -289,8 +266,7 @@ padding: 0.8em 0.2em 0.8em 0.2em; display: inline-block; flex: 1; - min-width: 5em; - overflow-wrap: anywhere; + border-radius: 8px; .sidebar-icon { display: none; @@ -302,15 +278,11 @@ margin-bottom: 1em; border-radius: 7px; display: flex; - background: inherit; - gap: 0.3em; - overflow-x: auto; } .blog-box { padding-left: 5%; padding-right: 5%; - margin-bottom: 0; } .post-title { @@ -320,17 +292,7 @@ @media (min-width: 800px) { .left-sidebar-item { - margin-bottom: 10px; - margin-left: 10px; - border: 1px solid lightgray; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); - background-color: white; - padding: 0.8em 0.2em 0.8em 0.8em; - } - - .sidebar-text { - overflow: hidden; - text-overflow: ellipsis; + padding: 0.8em 0.2em 0.8em 1em; } .middle-content, @@ -339,14 +301,8 @@ display: block !important; } - .blog-sidebar, - .right-sidebar { - flex: 25%; - max-width: 25%; - } - .middle-content { - margin-right: 2% !important; + margin-right: 1em !important; } #mobile.tabs { @@ -359,22 +315,25 @@ } .middle-content { - flex: 75%; max-width: 75%; + width: -webkit-fill-available; + } + + .blog-sidebar, + .right-sidebar { + width: 25%; } .left-sidebar { width: 11%; - max-width: 11%; - min-width: 11%; position: fixed; - height: calc(100vh - $navbar_height - 20px); - overflow-y: auto; + height: 100%; + margin-top: -4em; + padding-top: 4em; + } - &::-webkit-scrollbar { - width: 0; - background-color: transparent; - } + .left-sidebar-item { + border-radius: 0 0.5em 0.5em 0; } .feed-table { diff --git a/resources/bootstrap/bootstrap.min.css b/resources/bootstrap/bootstrap.min.css old mode 100644 new mode 100755 diff --git a/resources/chatbox.scss b/resources/chatbox.scss index 6c4f671..979a239 100644 --- a/resources/chatbox.scss +++ b/resources/chatbox.scss @@ -1,8 +1,3 @@ -@import "vars"; - -.chat { - background: white; -} #chat-log p { margin: 0; padding-top: 0.1em; @@ -13,6 +8,15 @@ float: right; margin-right: 1em; } +#emoji-button { + position: absolute; + right: 1em; + font-size: 2em; + color: lightgray; +} +#emoji-button:hover { + color: gray; +} #chat-log { padding: 0; padding-top: 2em; @@ -27,20 +31,21 @@ margin-top: 1em; } .big-emoji { - font-size: 1.2em; + font-size: 16px; } #chat-online { border-right: 1px solid #ccc; padding-bottom: 0 !important; + min-width: 25%; border-bottom: 0; - font-size: 1.2em; } #chat-online-content { + margin-top: 0.5em; margin-bottom: 0; overflow: hidden; overflow-wrap: break-word; overflow-y: auto; - max-height: 100%; + max-height: 77vh; } #chat-box { /*border: 1px solid #ccc;*/ @@ -51,101 +56,110 @@ overflow-y: scroll; border-bottom-left-radius: 0; border-bottom-right-radius: 0; - flex-grow: 1; - padding-left: 0.5em; + height: 75%; } #chat-input { + width: 100%; + padding: 0.4em 4em 0.6em 1.2em; + border: 0; color: black; - border: 2px solid black; -} -#chat-input::placeholder { - color: grey; + border-top-left-radius: 0; + border-top-right-radius: 0; + height: 100%; + font-size: 16px; } #chat-online-content { padding: 0; width: 100%; } -.selected-status-row { - background-color: lightgray; -} -.status_last_message { - color: darkgray; - font-size: 0.8em; -} - @media (min-width: 800px) { #chat-container { display: flex; width: 100%; - height: calc(100vh - $navbar_height); + height: 90vh; border: 1px solid #ccc; /*border-radius: 0 4px 0 0;*/ border-bottom: 0; } #chat-online { margin: 0; - min-width: 30%; - max-width: 30%; } - #chat-area { - flex-grow: 1; - min-width: 70%; - max-width: 70%; + .chat-left-panel, .chat-right-panel { + display: block !important; } } #chat-input, #chat-log .content-message { font-family: "Noto Sans", Arial, "Lucida Grande", sans-serif; } .info-pic { - height: 95%; - width: 100%; + height: 90%; + border-radius: 50%; + padding: 0.05em; + border: 0.1px solid #ccc; + margin-left: 3em; + margin-bottom: 1.5px; +} +.info-circle { + position: absolute; + cx: 86%; + cy: 80%; + r: 6px; + stroke: white; + stroke-width: 1; } - .info-name { margin-left: 10px; - font-size: 1.8em; + font-size: 2em; font-weight: bold !important; display: flex; - align-items: center; } .info-name a { display: table-caption; } #chat-info { + border-bottom: 2px solid darkgray; display: flex; - align-items: center; - box-shadow: 0px 2px 3px rgb(0 0 0 / 20%); - position: relative; - z-index: 100; +} +#refresh-button { + padding: 0; + margin-left: auto; + margin-right: 0.3em; + background: transparent; + border: none; + height: 1.5em; + width: 1.5em; +} +#refresh-button:hover { + background: lightgreen; + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + transition: 1.5s ease-in-out; } .status-pic { - height: 32px; - width: 32px; - border-radius: 50%; + height: 1.3em; + width: 1.3em; + border-radius: 0.3em; } .status-container { position: relative; display: inline-flex; - flex: 0 0 auto; - align-items: center; } .status-circle { - position: absolute; - bottom: 0; + position: absolute; + bottom: 0; right: 0; - cx: 27px; - cy: 27px; + cx: 18px; + cy: 18px; r: 4.5px; stroke: white; stroke-width: 1; } .status-row { display: flex; - padding: 15px; - padding-right: 0; - gap: 0.5em; - border-radius: 6px; + font-size: 15px; + padding: 0.2em 0.2em 0.2em 1em; + border-radius: 4px; } .status-row:hover { background: lightgray; @@ -153,7 +167,6 @@ } .status-list { padding: 0; - margin: 0; } .status-section-title { cursor: pointer; @@ -161,11 +174,9 @@ } .message-text { padding: 0.4em 0.6em 0.5em; - border-radius: 20px; + border-radius: 15px; max-width: 70%; width: fit-content; - font-size: 1rem; - line-height: 1.2; } .message-text-other { background: #eeeeee; @@ -175,32 +186,22 @@ background: rgb(0, 132, 255); color: white; } -.chat-input-icon { - color: white; - background-color: #3c8262; -} -.chat-input-icon:hover { - background: #57b28b; -} + .chat { .active-span { - color: #636363; + margin-top: 1em; margin-right: 1em; + color: #636363; } .unread-count { + float: right; color: white; background-color: darkcyan; - border-radius: 50%; - align-self: center; - flex: 0 0 1.25rem; - height: 1.25rem; - font-size: smaller; - display: flex; - align-items: center; - justify-content: center; + border-radius: 2px; + padding: 0 0.5em; } - .setting-content { + #setting-content { display: none; position: absolute; background-color: #f1f1f1; @@ -209,14 +210,14 @@ z-index: 1; right: 0; } - .setting-content a { + #setting-content li { padding: 12px 16px; text-decoration: none; display: block; + color: black; font-weight: bold; - font-size: 1rem; } - .setting-content a:hover { + #setting-content li:hover { background-color: #ddd; cursor: pointer; } @@ -224,7 +225,9 @@ @media (max-width: 799px) { #chat-area { - height: calc(100vh - $navbar_height_mobile); - max-height: -webkit-fill-available; + height: 500px; + } + #emoji-button { + display: none; } } diff --git a/resources/comments.scss b/resources/comments.scss index bceb225..47620f0 100644 --- a/resources/comments.scss +++ b/resources/comments.scss @@ -37,13 +37,6 @@ a { border: 1px solid #CCC; } - .comment-img { - display: flex; - margin-right: 4px; - height: 1.5em; - width: 1.5em; - } - .new-comments .comment-display { display: flex; margin-top: -0.25em !important; @@ -54,8 +47,9 @@ a { } .new-comments .comment .detail { + margin: 0px 15px 0px; width: 100%; - padding-right: 1em; + max-width: calc(100% - 134px); } .new-comments .comment-edits { @@ -70,7 +64,6 @@ a { border-bottom: 1px #888 solid; color: #888; text-align: right; - align-items: center; } .previous-revision, .next-revision { @@ -87,8 +80,8 @@ a { } .new-comments .gravatar { - width: 1.5em; - border-radius: 50%; + width: 75px; + max-width: 75px; } .new-comments .vote { @@ -128,28 +121,6 @@ a { margin: -50px 23px 10px -40px; padding-top: 50px; } - - .show_more_reply { - font-weight: bold; - display: flex; - margin: 16px 40px; - align-items: center; - - svg { - margin-right: 4px; - } - } - - .show_more_comment { - font-weight: bold; - display: flex; - margin: 16px -40px; - align-items: center; - - svg { - margin-right: 4px; - } - } } .no-comments-message { @@ -208,10 +179,15 @@ a { } .comment-post-wrapper { + div { + padding-bottom: 2px; + padding-right: 10px; + } + input, textarea { min-width: 100%; max-width: 100%; - font-size: 15px; + font-size: 1em; } } @@ -264,10 +240,10 @@ a { .actionbar-button { cursor: pointer; padding: 0.8em; + border: 0.2px solid lightgray; border-radius: 5em; font-weight: bold; display: inherit; - background: lightgray; } .actionbar-block { display: flex; @@ -282,7 +258,7 @@ a { border-radius: 5em 0 0 5em; } .actionbar-button:hover { - background: darkgray; + background: lightgray; } .dislike-button { padding-left: 0.5em; @@ -301,27 +277,4 @@ a { .bookmarked { color: rgb(180, 180, 7); } -} - -.show_more_comment { - margin-left: -20px; -} - -.pagedown-image-upload { - .submit-input { - display: flex; - min-width: inherit; - float: right; - } - .deletelink-box { - position: absolute; - top: 2px; - right: 1em; - } -} - -@media (max-width: 799px) { - .hide_texts_on_mobile .actionbar-text { - display: none; - } } \ No newline at end of file diff --git a/resources/common.js b/resources/common.js index 2cf67b9..68c6087 100644 --- a/resources/common.js +++ b/resources/common.js @@ -44,11 +44,11 @@ function register_toggle(link) { }); } -function register_all_toggles() { +$(function register_all_toggles() { $('.toggle').each(function () { register_toggle($(this)); }); -}; +}); function featureTest(property, value, noPrefixes) { var prop = property + ':', @@ -148,7 +148,7 @@ function register_time(elems, limit) { // in hours } window.notification_template = { - icon: '/logo.svg' + icon: '/logo.png' }; window.notification_timeout = 5000; @@ -252,17 +252,7 @@ $.fn.textWidth = function () { }; function registerPopper($trigger, $dropdown) { - const popper = Popper.createPopper($trigger[0], $dropdown[0], { - placement: 'bottom-end', - modifiers: [ - { - name: 'offset', - options: { - offset: [0, 8], - }, - }, - ], - }); + const popper = Popper.createPopper($trigger[0], $dropdown[0]); $trigger.click(function(e) { $dropdown.toggle(); popper.update(); @@ -277,313 +267,6 @@ function registerPopper($trigger, $dropdown) { }) } -function populateCopyButton() { - var copyButton; - $('pre code').each(function () { - var copyButton = $('', { - 'class': 'btn-clipboard', - 'data-clipboard-text': $(this).text(), - 'title': 'Click to copy' - }).append(''); - - if ($(this).parent().width() > 100) { - copyButton.append('Copy'); - } - - $(this).before($('
', {'class': 'copy-clipboard'}) - .append(copyButton)); - - $(copyButton.get(0)).mouseleave(function () { - $(this).attr('class', 'btn-clipboard'); - $(this).removeAttr('aria-label'); - }); - - var curClipboard = new Clipboard(copyButton.get(0)); - - curClipboard.on('success', function (e) { - e.clearSelection(); - showTooltip(e.trigger, 'Copied!'); - }); - - curClipboard.on('error', function (e) { - showTooltip(e.trigger, fallbackMessage(e.action)); - }); - }); -} - -function register_copy_clipboard($elements, callback) { - $elements.on('paste', function(event) { - const items = (event.clipboardData || event.originalEvent.clipboardData).items; - for (const index in items) { - const item = items[index]; - if (item.kind === 'file' && item.type.indexOf('image') !== -1) { - const blob = item.getAsFile(); - const formData = new FormData(); - formData.append('image', blob); - - $(this).prop('disabled', true); - - $.ajax({ - url: '/pagedown/image-upload/', - type: 'POST', - data: formData, - processData: false, - contentType: false, - success: function(data) { - // Assuming the server returns the URL of the image - const imageUrl = data.url; - const editor = $(event.target); // Get the textarea where the event was triggered - let currentMarkdown = editor.val(); - const markdownImageText = '![](' + imageUrl + ')'; // Markdown for an image - - if (currentMarkdown) currentMarkdown += "\n"; - currentMarkdown += markdownImageText; - - editor.val(currentMarkdown); - callback?.(); - }, - error: function() { - alert('There was an error uploading the image.'); - }, - complete: () => { - // Re-enable the editor - $(this).prop('disabled', false).focus(); - } - }); - - // We only handle the first image in the clipboard data - break; - } - } - }); -} - -function activateBlogBoxOnClick() { - $('.blog-box').on('click', function () { - var $description = $(this).children('.blog-description'); - var max_height = $description.css('max-height'); - if (max_height !== 'fit-content') { - $description.css('max-height', 'fit-content'); - $(this).css('cursor', 'auto'); - $(this).removeClass('pre-expand-blog'); - $(this).children().children('.show-more').hide(); - } - }); - - $('.blog-box').each(function () { - var $precontent = $(this).children('.blog-description').height(); - var $content = $(this).children().children('.content-description').height(); - if ($content == undefined) { - $content = $(this).children().children('.md-typeset').height() - } - if ($content > $precontent - 30) { - $(this).addClass('pre-expand-blog'); - $(this).css('cursor', 'pointer'); - } else { - $(this).children().children('.show-more').hide(); - } - }); -} - -function changeTabParameter(newTab) { - const url = new URL(window.location); - const searchParams = new URLSearchParams(url.search); - searchParams.set('tab', newTab); - searchParams.delete('page'); - url.search = searchParams.toString(); - return url.href; -} - -function submitFormWithParams($form, method) { - const currentUrl = new URL(window.location.href); - const searchParams = new URLSearchParams(currentUrl.search); - const formData = $form.serialize(); - - const params = new URLSearchParams(formData); - - if (searchParams.has('tab')) { - params.set('tab', searchParams.get('tab')); - } - - const fullUrl = currentUrl.pathname + '?' + params.toString(); - - if (method === "GET") { - window.location.href = fullUrl; - } - else { - var $formToSubmit = $('
') - .attr('action', fullUrl) - .attr('method', 'POST') - .appendTo('body'); - - $formToSubmit.append($('').attr({ - type: 'hidden', - name: 'csrfmiddlewaretoken', - value: $.cookie('csrftoken') - })); - - $formToSubmit.submit(); - } -} - -function initPagedown(maxRetries=5) { - // There's a race condition so we want to retry several times - let attempts = 0; - - function tryInit() { - try { - // make sure pagedown_init.js was loaded - if ('DjangoPagedown' in window) { - DjangoPagedown.init(); - } else if (attempts < maxRetries) { - attempts++; - setTimeout(tryInit, 1000); - } - } catch (error) { - // this may happen if Markdown.xyz.js was not loaded - if (attempts < maxRetries) { - attempts++; - setTimeout(tryInit, 1000); - } - } - } - - setTimeout(tryInit, 100); -} - -function navigateTo(url, reload_container, force_new_page=false) { - if (url === '#') return; - if (force_new_page) { - window.location.href = url; - return; - } - - if (!reload_container || !$(reload_container).length) { - reload_container = "#content"; - } - - if (window.currentRequest) { - window.currentRequest.abort(); - } - - const controller = new AbortController(); - const signal = controller.signal; - window.currentRequest = controller; - - $(window).off("scroll"); - - replaceLoadingPage(reload_container); - - const toUpdateElements = [ - "#nav-container", - "#js_media", - "#media", - ".left-sidebar", - "#bodyend", - ]; - - $.ajax({ - url: url, - method: 'GET', - dataType: 'html', - signal: signal, - success: function (data) { - let reload_content = $(data).find(reload_container).first(); - if (!reload_content.length) { - reload_container = "#content"; - reload_content = $(data).find(reload_container).first(); - } - - if (reload_content.length) { - window.history.pushState("", "", url); - $(window).scrollTop(0); - $("#loading-bar").stop(true, true); - $("#loading-bar").hide().css({ width: 0}); - - for (let elem of toUpdateElements) { - $(elem).replaceWith($(data).find(elem).first()); - } - - $(reload_container).replaceWith(reload_content); - - $(document).prop('title', $(data).filter('title').text()); - renderKatex($(reload_container)[0]); - initPagedown(); - onWindowReady(); - registerNavList(); - $('.xdsoft_datetimepicker').hide(); - } else { - window.location.href = url; - } - }, - error: function (xhr, status, error) { - if (status !== 'abort') { // Ignore aborted requests - window.location.href = url; - } - } - }); -} - -function isEligibleLinkToRegister($e) { - if ($e.attr('target') === '_blank') { - return false; - } - if ($e.data('initialized_navigation')) { - return false; - } - const href = $e.attr('href'); - if (!href) return false; - return ( - href.startsWith('http') - || href.startsWith('/') - || href.startsWith('#') - || href.startsWith('?') - ); -}; - -function replaceLoadingPage(reload_container) { - const loadingPage = ` -
- -
- `; - $(reload_container).fadeOut(100, function() { - $(this).html(loadingPage).fadeIn(100); - }); -} - -function registerNavigation() { - const containerMap = { - '.left-sidebar-item': '.middle-right-content', - '.pagination li a': '.middle-content', - '.tabs li a': '.middle-content', - '#control-panel a': '.middle-content', - }; - - $.each(containerMap, function(selector, target) { - $(selector).each(function() { - const href = $(this).attr('href'); - const force_new_page = $(this).data('force_new_page'); - - if (isEligibleLinkToRegister($(this))) { - $(this).data('initialized_navigation', true); - - $(this).on('click', function(e) { - e.preventDefault(); - let containerSelector = null; - for (let key in containerMap) { - if ($(this).is(key)) { - containerSelector = containerMap[key]; - break; - } - } - navigateTo(href, containerSelector, force_new_page); - }); - } - }); - }); -} - function onWindowReady() { // http://stackoverflow.com/a/1060034/1090657 var hidden = 'hidden'; @@ -657,7 +340,14 @@ function onWindowReady() { } }); - register_copy_clipboard($('textarea.wmd-input')); + setTimeout(() => { + $("[data-src]img").each(function() { + $(this).attr("src", $(this).attr("data-src")); + }) + $("[data-src]iframe").each(function() { + $(this).attr("src", $(this).attr("data-src")); + }) + }, "100"); $('form').submit(function (evt) { // Prevent multiple submissions of forms, see #565 @@ -670,37 +360,38 @@ function onWindowReady() { }) $('#logout').on('click', () => $('#logout-form').submit()); - populateCopyButton(); - - $('a').click(function() { - var href = $(this).attr('href'); - var target = $(this).attr('target'); - if (!href || href === '#' || href.startsWith("javascript") || - $(this).attr("data-featherlight") || - target === "_blank" - ) { - return; - } + var copyButton; + $('pre code').each(function () { + console.log($(this)); + $(this).parent().before($('
', {'class': 'copy-clipboard'}) + .append(copyButton = $('', { + 'class': 'btn-clipboard', + 'data-clipboard-text': $(this).text(), + 'title': 'Click to copy' + }).text('Copy'))); - $("#loading-bar").show(); - $("#loading-bar").animate({ width: "100%" }, 2000, function() { - $(this).stop(true, true); - $(this).hide().css({ width: 0}); - }); - }); + $(copyButton.get(0)).mouseleave(function () { + $(this).attr('class', 'btn-clipboard'); + $(this).removeAttr('aria-label'); + }); - $('.errorlist').each(function() { - var errorList = $(this); - errorList.nextAll('input, select, textarea').first().after(errorList); + var curClipboard = new Clipboard(copyButton.get(0)); + + curClipboard.on('success', function (e) { + e.clearSelection(); + showTooltip(e.trigger, 'Copied!'); + }); + + curClipboard.on('error', function (e) { + showTooltip(e.trigger, fallbackMessage(e.action)); + }); }); - register_all_toggles(); - activateBlogBoxOnClick(); - registerNavigation(); - registerPopper($('#nav-lang-icon'), $('#lang-dropdown')); - registerPopper($('#user-links'), $('#userlink_dropdown')); } -function registerNavList() { +$(function() { + onWindowReady(); + registerPopper($('#nav-lang-icon'), $('#lang-dropdown')); + registerPopper($('#user-links'), $('#userlink_dropdown')); var $nav_list = $('#nav-list'); $('#navicon').click(function (event) { event.stopPropagation(); @@ -739,16 +430,4 @@ function registerNavList() { $('html').click(function () { $nav_list.hide(); }); -} - -$(function() { - if (typeof window.currentRequest === 'undefined') { - window.currentRequest = null; - } - onWindowReady(); - registerNavList(); - - window.addEventListener('popstate', (e) => { - window.location.href = e.currentTarget.location.href; - }); }); \ No newline at end of file diff --git a/resources/content-description.scss b/resources/content-description.scss index 4b475f5..df4f4e4 100644 --- a/resources/content-description.scss +++ b/resources/content-description.scss @@ -2,13 +2,9 @@ .content-description { line-height: 1.6em; - font-size: 16px; - font-family: "Segoe UI", "Noto Sans", Arial, "Lucida Grande", sans-serif; - overflow-wrap: anywhere; + font-size: 15px; + font-family: "Noto Sans", Arial, "Lucida Grande", sans-serif; - h1, h2, h3, h4, h5, .admonition-title, summary { - font-family: "Noto Sans", "Segoe UI", Arial, "Lucida Grande", sans-serif; - } img { max-width: 100%; height: auto; @@ -25,9 +21,11 @@ font-family: $monospace-fonts !important; margin: 0 2px; padding: 0 5px; - background-color: var(--md-code-bg-color); + border: 1px solid $border_gray; + background-color: #f8f8f8; border-radius: $widget_border_radius; - color: var(--md-code-fg-color); + font-size: 0.95em; + color: #444; } pre { @@ -38,30 +36,28 @@ padding: 0; background: transparent; font-size: 1em; - color: var(--md-code-fg-color); + color: black; } white-space: pre-wrap; word-wrap: break-word; - padding: 0.5em 1em; - background-color: var(--md-code-bg-color); - color: var(--md-code-fg-color); - border-radius: 3px; + margin: 1.5em 0 1.5em 0; + padding: 1em; + border: 1px solid $border_gray; + background-color: #f8f8f8; + color: black; + border-radius: $widget_border_radius; } pre.no-border { - margin-top: 0.4em; + margin-top: -0.7em; padding: 0.5em; border: none; background-color: inherit; border-radius: none; } - .linenos pre { - padding-right: 0; - } - b, strong { font-weight: bold; } @@ -141,7 +137,7 @@ .linenos { width: 4%; - + pre { color: rgba(0,0,0,.26); background-color: rgba(0,0,0,.07); @@ -170,15 +166,12 @@ textarea, pre { -moz-tab-size : 4; - -o-tab-size : 4; - tab-size : 4; + -o-tab-size : 4; + tab-size : 4; } -@media (min-width: 800px) { - .content-description pre:has(code) { - min-width: 3em; - } +@media (min-width: 700px) { #common-content { display: flex; flex-direction: row-reverse; @@ -214,7 +207,7 @@ pre { } } -@media not all and (min-width: 800px) { +@media not all and (min-width: 700px) { #content-right .info-float { float: none; width: 100% !important; @@ -240,7 +233,6 @@ a.view-pdf { display: -webkit-flex; display: -ms-flexbox; display: flex; - align-items: center; .spacer { display: inline-block; diff --git a/resources/contest.scss b/resources/contest.scss index 30cbca5..95da7a8 100644 --- a/resources/contest.scss +++ b/resources/contest.scss @@ -1,30 +1,5 @@ @import "vars"; -.list-contest { - box-shadow: 0px 1px 2px lightgrey, 0px 1px 5px lightgrey; - border-radius: 15px; - padding: 20px; - margin-bottom: 20px; - width: 100%; - box-sizing: border-box; - display: flex; - background: white; - - .info-contest:first-child, .info-contest:nth-child(2) { - margin-right: 15px; - } - - .info-contest { - flex: 1; - } - - .contest-title { - font-size: 1.1em; - font-weight: 600; - margin-bottom: 5px; - } -} - #contest-calendar { border-collapse: collapse; width: 100%; @@ -123,7 +98,7 @@ text-decoration: none; text-align: center; line-height: 1.3; - font-size: 2em; + font-size: 2.3em; padding-bottom: 0.15em; &:link, &:visited { @@ -145,21 +120,64 @@ .time-left { text-align: left; - padding-bottom: 0.5em; + color: #777; + padding-top: 0.5em; } -.list-contest { +.contest-list { + td { + vertical-align: middle !important; + + &:nth-child(2) { + min-width: 4em; + } + + &:nth-child(3) { + min-width: 6em; + } + } + + tbody tr { + height: 4em; + } + + .floating-time-left { + position: absolute; + left: 0; + } + + .floating-time-right { + position: absolute; + right: 0; + line-height: 1.2em; + } + + .floating-time { + position: absolute; + right: 0; + bottom: 0; + } + .contest-tags { + padding-left: 0.75em; vertical-align: top; - display: flex; - flex-wrap: wrap; - margin-top: 5px; } .contest-tag-hidden { background-color: #000000; color: #ffffff; } + + + .participate-button { + display: inline-block; + width: 90px; + } + + .contest-block { + text-align: left; + padding: 0.5em 0.5em 0.5em 1em; + } } .first-solve { @@ -167,14 +185,12 @@ } .contest-tag { + box-shadow: inset 0 -0.1em 0 rgba(0, 0, 0, 0.12); padding: 0.15em 0.3em; border-radius: 0.15em; font-weight: 600; margin-right: 0.45em; position: relative; - display: flex; - align-items: center; - gap: 0.2em; } .contest-tag-edit { @@ -200,7 +216,7 @@ } .contest-list-title { - font-size: 1.1em; + font-size: 18px; font-weight: 600; } @@ -221,7 +237,7 @@ form.contest-join-pseudotab { } .contest-participation-operation { - margin-left: auto; + float: right; .fa { color: #444; @@ -231,7 +247,7 @@ form.contest-join-pseudotab { padding-left: 1px; } - padding-left: 5px; + padding: 0 5px; } #add-clarification { diff --git a/resources/course.scss b/resources/course.scss deleted file mode 100644 index f7c5b2d..0000000 --- a/resources/course.scss +++ /dev/null @@ -1,155 +0,0 @@ -@import "vars"; - -.course-content-title { - font-weight: bold; -} - -.course-list { - width: 100%; - margin: 0 auto; - list-style: none; - padding: 0; - - .course-item { - display: flex; - align-items: center; - border: 1px solid #ddd; - padding: 20px; - margin-bottom: 10px; - border-radius: 8px; - background-color: #fff; - box-shadow: 0 4px 6px rgba(0,0,0,0.1); - transition: transform 0.2s ease-in-out; - } - .course-item:hover { - transform: translateY(-2px); - box-shadow: 0 6px 12px rgba(0,0,0,0.15); - } - .course-image { - flex: 0 0 auto; - width: 50px; - height: 50px; - margin-right: 20px; - border-radius: 5px; - overflow: hidden; - } - .course-image img { - width: 100%; - height: 100%; - object-fit: cover; - border-radius: 5px; - } - .course-content { - flex: 1; - } - .course-name { - font-size: 1.5em; - margin-bottom: 5px; - } -} - -.lesson-list { - list-style: none; - padding: 0; - - li:hover { - box-shadow: 0 6px 12px rgba(0,0,0,0.15); - background: #ffffe0; - } - - li { - background: #fff; - border: 1px solid #ddd; - margin-bottom: 20px; - padding-top: 10px; - border-radius: 5px; - box-shadow: 0 2px 4px #ccc; - } - .lesson-title { - font-size: 1.25em; - margin-left: 1em; - margin-right: 1em; - color: initial; - display: flex; - gap: 1em; - - .lesson-points { - margin-left: auto; - font-size: 0.9em; - align-self: flex-end; - color: #636363; - } - } - .progress-container { - background: #e0e0e0; - border-radius: 3px; - height: 10px; - width: 100%; - margin-top: 10px; - } - .progress-bar { - background: forestgreen; - height: 10px; - border-radius: 3px; - line-height: 10px; - color: white; - text-align: right; - font-size: smaller; - } -} - -.course-problem-list { - list-style-type: none; - padding: 0; - font-size: 15px; - - i { - font-size: large; - } - - li { - display: flex; - align-items: center; - justify-content: space-between; - border-bottom: 1px solid #eee; - padding: 10px; - border-radius: 5px; - } - .problem-name { - margin-left: 10px; - } - - li:hover { - background: #e0e0e0; - } - .score { - font-weight: bold; - margin-left: auto; - } - a { - text-decoration: none; - color: inherit; - } -} - -.course-contest-card { - border: 1px solid #ddd; - border-radius: 8px; - margin-bottom: 20px; - padding: 15px; - box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1); - display: flex; - justify-content: space-between; - align-items: center; - - h5 { - margin: 0 0 10px; - font-size: 1.2em; - color: #333; - } - - p { - margin: 5px 0; - color: #555; - } -} \ No newline at end of file diff --git a/resources/darkmode-svg.css b/resources/darkmode-svg.css index 7a01444..83c1f21 100644 --- a/resources/darkmode-svg.css +++ b/resources/darkmode-svg.css @@ -14,12 +14,3 @@ .wmd-heading-button { background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB3aWR0aD0iMTc5MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBzdHlsZT0iZmlsdGVyOmludmVydCgxMDAlKSIgZD0iTTE2ODIgMTY2NHEtNDQgMC0xMzIuNS0zLjV0LTEzMy41LTMuNXEtNDQgMC0xMzIgMy41dC0xMzIgMy41cS0yNCAwLTM3LTIwLjV0LTEzLTQ1LjVxMC0zMSAxNy00NnQzOS0xNyA1MS03IDQ1LTE1cTMzLTIxIDMzLTE0MGwtMS0zOTFxMC0yMS0xLTMxLTEzLTQtNTAtNGgtNjc1cS0zOCAwLTUxIDQtMSAxMC0xIDMxbC0xIDM3MXEwIDE0MiAzNyAxNjQgMTYgMTAgNDggMTN0NTcgMy41IDQ1IDE1IDIwIDQ1LjVxMCAyNi0xMi41IDQ4dC0zNi41IDIycS00NyAwLTEzOS41LTMuNXQtMTM4LjUtMy41cS00MyAwLTEyOCAzLjV0LTEyNyAzLjVxLTIzIDAtMzUuNS0yMXQtMTIuNS00NXEwLTMwIDE1LjUtNDV0MzYtMTcuNSA0Ny41LTcuNSA0Mi0xNXEzMy0yMyAzMy0xNDNsLTEtNTd2LTgxM3EwLTMgLjUtMjZ0MC0zNi41LTEuNS0zOC41LTMuNS00Mi02LjUtMzYuNS0xMS0zMS41LTE2LTE4cS0xNS0xMC00NS0xMnQtNTMtMi00MS0xNC0xOC00NXEwLTI2IDEyLTQ4dDM2LTIycTQ2IDAgMTM4LjUgMy41dDEzOC41IDMuNXE0MiAwIDEyNi41LTMuNXQxMjYuNS0zLjVxMjUgMCAzNy41IDIydDEyLjUgNDhxMCAzMC0xNyA0My41dC0zOC41IDE0LjUtNDkuNSA0LTQzIDEzcS0zNSAyMS0zNSAxNjBsMSAzMjBxMCAyMSAxIDMyIDEzIDMgMzkgM2g2OTlxMjUgMCAzOC0zIDEtMTEgMS0zMmwxLTMyMHEwLTEzOS0zNS0xNjAtMTgtMTEtNTguNS0xMi41dC02Ni0xMy0yNS41LTQ5LjVxMC0yNiAxMi41LTQ4dDM3LjUtMjJxNDQgMCAxMzIgMy41dDEzMiAzLjVxNDMgMCAxMjktMy41dDEyOS0zLjVxMjUgMCAzNy41IDIydDEyLjUgNDhxMCAzMC0xNy41IDQ0dC00MCAxNC41LTUxLjUgMy00NCAxMi41cS0zNSAyMy0zNSAxNjFsMSA5NDNxMCAxMTkgMzQgMTQwIDE2IDEwIDQ2IDEzLjV0NTMuNSA0LjUgNDEuNSAxNS41IDE4IDQ0LjVxMCAyNi0xMiA0OHQtMzYgMjJ6Ii8+PC9zdmc+"); } -.wmd-undo-button { - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OHB4IiBpZD0ic3ZnMTEzMDAiIHdpZHRoPSI0OHB4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnMgaWQ9ImRlZnMzIj48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjMyNiI+PHN0b3AgaWQ9InN0b3AyMzI4IiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3AyMzMwIiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjMxNiI+PHN0b3AgaWQ9InN0b3AyMzE4IiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGEwMDA7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3AyMzIwIiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGEwMDA7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjMwOCI+PHN0b3AgaWQ9InN0b3AyMzEwIiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3AyMzEyIiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODY2MiI+PHN0b3AgaWQ9InN0b3A4NjY0IiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3A4NjY2IiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgY3g9IjI0LjgzNzEyNiIgY3k9IjM2LjQyMTEyNyIgZng9IjI0LjgzNzEyNiIgZnk9IjM2LjQyMTEyNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwMCwwLjAwMDAwMCwwLjAwMDAwMCwwLjUzNjcyMywtNi4yMjcyNjVlLTE0LDE2Ljg3MzA2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJyYWRpYWxHcmFkaWVudDg2NjgiIHI9IjE1LjY0NDczNyIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODY2MiIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMTg3Ij48c3RvcCBpZD0ic3RvcDIxODkiIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiLz48c3RvcCBpZD0ic3RvcDIxOTEiIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLjgxMzQ3MWUtMTYsLTEuMTcxOTI2LC0xLjE3MTkyNiwxLjgxMzQ3MWUtMTYsNDYuMTc0NDAsNTQuMTAxMTEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImxpbmVhckdyYWRpZW50MTc2NCIgeDE9IjE3LjA2MDgwNiIgeDI9IjEyLjYyNDMzNyIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjE4NyIgeTE9IjExLjM5NTAyIiB5Mj0iMTIuNTgzNzY5Ii8+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0ibGluZWFyR3JhZGllbnQyMzE0IiB4MT0iMjYuNSIgeDI9IjI2LjI1IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMzA4IiB5MT0iMzQuMjUiIHkyPSI0My41NzE4MzEiLz48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsaW5lYXJHcmFkaWVudDIzMjIiIHgxPSIyNi41IiB4Mj0iMjYuMjUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIzMTYiIHkxPSIzNC4yNSIgeTI9IjQzLjU3MTgzMSIvPjxyYWRpYWxHcmFkaWVudCBjeD0iMTUuMDk0MDMiIGN5PSIxMy4yODI3MjEiIGZ4PSIxNS4wOTQwMyIgZnk9IjEzLjI4MjcyMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjQ5NjAzMSwtMS4xNTE5MDVlLTE2LDEuMDYxNzU2ZS0xNiwyLjMwMDY4OSwtMjUuMTI0MDIsLTE3LjgyNjM2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJyYWRpYWxHcmFkaWVudDIzMzIiIHI9IjEwLjE2NDY2IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMzI2Ii8+PC9kZWZzPjxnIGlkPSJsYXllcjEiPjxwYXRoIGQ9Ik0gNDAuNDgxODYzIDM2LjQyMTEyNyBBIDE1LjY0NDczNyA4LjM5Njg5MzUgMCAxIDEgIDkuMTkyMzg4NSwzNi40MjExMjcgQSAxNS42NDQ3MzcgOC4zOTY4OTM1IDAgMSAxICA0MC40ODE4NjMgMzYuNDIxMTI3IHoiIGlkPSJwYXRoODY2MCIgc3R5bGU9ImludmVydDoxMDAlO29wYWNpdHk6MC4xNDExNzY0Nztjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDg2NjgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEuNDg5NzM2LDAuMDAwMDAwLDAuMDAwMDAwLC0xLjAwMTI1Miw2MC42MDQzNiw3NS4zMTI2MCkiLz48cGF0aCBkPSJNIDkuNTgyNDQxLDQ1LjAzNDM2OSBDIDQ5LjYwODI0OSw0Ni4zNTU1MDkgNDMuMjgyNDA1LDEyLjI5MzU1IDIyLjQ2MjQxMSwxMi40OTc2NSBMIDIyLjQ2MjQxMSwzLjEyMjIzOTYgTCA1LjgxMzkyOTgsMTcuNzA4ODE5IEwgMjIuNDYyNDExLDMzLjAwNjM0OSBDIDIyLjQ2MjQxMSwzMy4wMDYzNDkgMjIuNDYyNDExLDIzLjMzNzk2OSAyMi40NjI0MTEsMjMuMzM3OTY5IEMgMzYuNTI1NTIxLDIyLjc1MTk5OSA0MC42Mzk5MzksNDQuNzcwNTQ5IDkuNTgyNDQxLDQ1LjAzNDM2OSB6ICIgaWQ9InBhdGgxNDMyIiBzdHlsZT0iaW52ZXJ0OjEwMCU7b3BhY2l0eToxO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MjMxNCk7ZmlsbC1vcGFjaXR5OjEuMDtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDIzMjIpO3N0cm9rZS13aWR0aDoxLjAwMDAwMDEyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OnZpc2libGUiLz48cGF0aCBkPSJNIDMxLjAzMjI4MSwzOS4zMTU1MTkgQyA0Mi43NTUzOCwzMy4yMzU4OTIgMzkuMjIwMDczLDEzLjA4NzQ4OSAyMS40NDg3MDEsMTMuNTQ5OTU5IEwgMjEuNDQ4NzAxLDUuNDUwODY3OCBDIDIxLjQ0ODcwMSw1LjQ1MDg2NzggNy40MDA5NjI4LDE3LjcxNDU4OSA3LjQwMDk2MjgsMTcuNzE0NTg5IEwgMjEuNDQ4NzAxLDMwLjY1ODYxNyBDIDIxLjQ0ODcwMSwzMC42NTg2MTcgMjEuNDQ4NzAxLDIyLjM4MDk3OSAyMS40NDg3MDEsMjIuMzgwOTc5IEMgMzYuMjg4NTUxLDIyLjAzMjcwOSAzNS42MDg2MTEsMzUuMTM4NTc5IDMxLjAzMjI4MSwzOS4zMTU1MTkgeiAiIGlkPSJwYXRoMjE3NyIgc3R5bGU9ImludmVydDoxMDAlO29wYWNpdHk6MC42OTg4NjM2MTtjb2xvcjojMDAwMDAwO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDE3NjQpO3N0cm9rZS13aWR0aDowLjk5OTk5OTc7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OnZpc2libGUiLz48cGF0aCBkPSJNIDYuNjI5MTI2MSwxNy42ODI3OTcgTCAxMi4yODU5OCwyMy4wNzQ0ODYgQyAxOC41NjE1NTMsMjIuODk3NzA5IDE1LjczMzEyNiwxNi43MTA1MjUgMjYuOTU4NDQ2LDEzLjYxNjkzMyBMIDIyLjAwODY5OSwxMi45OTgyMTQgTCAyMS45MjAzMSw0LjMzNjE1NjIgTCA2LjYyOTEyNjEsMTcuNjgyNzk3IHogIiBpZD0icGF0aDIzMjQiIHN0eWxlPSJpbnZlcnQ6MTAwJTtvcGFjaXR5OjAuNTExMzYzNjQ7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQyMzMyKTtmaWxsLW9wYWNpdHk6MS4wO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIi8+PC9nPjwvc3ZnPg=="); -} -.wmd-redo-button { - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OHB4IiBpZD0ic3ZnMTEzMDAiIHdpZHRoPSI0OHB4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnMgaWQ9ImRlZnMzIj48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjI0MCI+PHN0b3AgaWQ9InN0b3AyMjQyIiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiM5OWIwMGI7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3AyMjQ0IiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM5OWIwMGI7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjIzMiI+PHN0b3AgaWQ9InN0b3AyMjM0IiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiM3ODg2MDA7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3AyMjM2IiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM3ODg2MDA7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NDk5MSI+PHN0b3AgaWQ9InN0b3A0OTkzIiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3A0OTk1IiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODY2MiI+PHN0b3AgaWQ9InN0b3A4NjY0IiBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7Ii8+PHN0b3AgaWQ9InN0b3A4NjY2IiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7Ii8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgY3g9IjI0LjgzNzEyNiIgY3k9IjM2LjQyMTEyNyIgZng9IjI0LjgzNzEyNiIgZnk9IjM2LjQyMTEyNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwMCwwLjAwMDAwMCwwLjAwMDAwMCwwLjUzNjcyMywtNS44MjUzMjllLTE0LDE2Ljg3MzA2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJyYWRpYWxHcmFkaWVudDg2NjgiIHI9IjE1LjY0NDczNyIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODY2MiIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMTg3Ij48c3RvcCBpZD0ic3RvcDIxODkiIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiLz48c3RvcCBpZD0ic3RvcDIxOTEiIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuODEzNDcxZS0xNiwtMS4xNzE5MjYsMS4xNzE5MjYsMS44MTM0NzFlLTE2LDEuNzgyODAxLDU0LjEwMTExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsaW5lYXJHcmFkaWVudDE3NjQiIHgxPSIxNy4wNjA4MDYiIHgyPSIxMi42MjQzMzciIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIxODciIHkxPSIxMS4zOTUwMiIgeTI9IjEyLjU4Mzc2OSIvPjxyYWRpYWxHcmFkaWVudCBjeD0iMTYuNTYzODM3IiBjeT0iMTEuMTMyMjM2IiBmeD0iMTYuNTYzODM3IiBmeT0iMTEuMTMyMjM2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLjI5MDEyN2UtMiwxLjY4NTE5NywxLjcxMzA4MiwxLjMxMTQ3NWUtMiwtMS4wNDE0OTksLTEwLjExNTcxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJyYWRpYWxHcmFkaWVudDQ5OTciIHI9IjE5LjA2MjUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5OTEiLz48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsaW5lYXJHcmFkaWVudDIyMzgiIHgxPSIzMyIgeDI9IjMxLjUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyMzIiIHkxPSIzNS43NSIgeTI9IjQyLjUiLz48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsaW5lYXJHcmFkaWVudDIyNDYiIHgxPSIzMyIgeDI9IjMxLjUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNDAiIHkxPSIzNS43NSIgeTI9IjQyLjUiLz48L2RlZnM+PGcgaWQ9ImxheWVyMSI+PHBhdGggZD0iTSA0MC40ODE4NjMgMzYuNDIxMTI3IEEgMTUuNjQ0NzM3IDguMzk2ODkzNSAwIDEgMSAgOS4xOTIzODg1LDM2LjQyMTEyNyBBIDE1LjY0NDczNyA4LjM5Njg5MzUgMCAxIDEgIDQwLjQ4MTg2MyAzNi40MjExMjcgeiIgaWQ9InBhdGg4NjYwIiBzdHlsZT0iZmlsdGVyOmludmVydCgxMDAlKTtvcGFjaXR5OjAuMTQxMTc2NDc7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ4NjY4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIHRyYW5zZm9ybT0ibWF0cml4KDEuNDg5NzM2LDAuMDAwMDAwLDAuMDAwMDAwLC0xLjAwMTI1MiwtMTIuNjQ3MTYsNzUuMzEyNjApIi8+PHBhdGggZD0iTSAzOC4zNzQ3Niw0NS4wMzQzNjkgQyAtMS42NTEwNDg2LDQ2LjM1NTUwOSA0LjY3NDc5NTQsMTIuMjkzNTUgMjUuNDk0NzksMTIuNDk3NjUgTCAyNS40OTQ3OSwzLjEyMjIzOTYgTCA0Mi4xNDMyNzEsMTcuNzA4ODE5IEwgMjUuNDk0NzksMzMuMDA2MzQ5IEMgMjUuNDk0NzksMzMuMDA2MzQ5IDI1LjQ5NDc5LDIzLjMzNzk2OSAyNS40OTQ3OSwyMy4zMzc5NjkgQyAxMS40MzE2OCwyMi43NTE5OTkgNy4zMTcyNjE0LDQ0Ljc3MDU0OSAzOC4zNzQ3Niw0NS4wMzQzNjkgeiAiIGlkPSJwYXRoMTQzMiIgc3R5bGU9ImZpbHRlcjppbnZlcnQoMTAwJSk7b3BhY2l0eToxO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MjI0Nik7ZmlsbC1vcGFjaXR5OjEuMDtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDIyMzgpO3N0cm9rZS13aWR0aDoxLjAwMDAwMDEyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OnZpc2libGUiLz48cGF0aCBkPSJNIDE2LjkyNDkyLDM5LjMxNTUxOSBDIDUuMjAxODIwNCwzMy4yMzU4OTIgOC43MzcxMjc0LDEzLjA4NzQ4OSAyNi41MDg1LDEzLjU0OTk1OSBMIDI2LjUwODUsNS40NTA4Njc4IEMgMjYuNTA4NSw1LjQ1MDg2NzggNDAuNTU2MjM4LDE3LjcxNDU4OSA0MC41NTYyMzgsMTcuNzE0NTg5IEwgMjYuNTA4NSwzMC42NTg2MTcgQyAyNi41MDg1LDMwLjY1ODYxNyAyNi41MDg1LDIyLjM4MDk3OSAyNi41MDg1LDIyLjM4MDk3OSBDIDExLjY2ODY1LDIyLjAzMjcwOSAxMi4zNDg1OSwzNS4xMzg1NzkgMTYuOTI0OTIsMzkuMzE1NTE5IHogIiBpZD0icGF0aDIxNzciIHN0eWxlPSJmaWx0ZXI6aW52ZXJ0KDEwMCUpO29wYWNpdHk6MC42OTg4NjM2MTtjb2xvcjojMDAwMDAwO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDE3NjQpO3N0cm9rZS13aWR0aDowLjk5OTk5OTc7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OnZpc2libGUiLz48cGF0aCBkPSJNIDI2LjAzNjk4OSw0LjU2ODYwOTUgTCAzNi43MjM3MjcsMTQuNzk4MjQxIEMgMjkuNzg2MjI3LDE0Ljc5ODI0IDMyLjAzNjk4OSwyMy43MzU0MjQgMjUuOTExOTg5LDI2LjYxMDQyNCBMIDI1Ljk3NDQ4OSwyMi45NDM2MDkgQyAxMC43ODY5ODksMjIuODgxMTA5IDExLjY2MTk4OSwzOC40NDM2MDkgMjIuNzI0NDg5LDQyLjY5MzYwOSBDIDMuNjM2MzQxNCwzNy44MTE2ODEgNi4yODY5OTA0LDEzLjM4MTEwOSAyNS45MTE5ODksMTIuODgxMTEgTCAyNi4wMzY5ODksNC41Njg2MDk1IHogIiBpZD0icGF0aDQ5ODkiIHN0eWxlPSJmaWx0ZXI6aW52ZXJ0KDEwMCUpO29wYWNpdHk6MC40OTQzMTgxNztjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQ5OTcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTc7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIi8+PC9nPjwvc3ZnPg=="); -} -.wmd-italic-button { - background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgogICB3aWR0aD0iNTI1LjE0MnB4IiBoZWlnaHQ9IjUyNS4xNDJweCIgdmlld0JveD0iMCAwIDUyNS4xNDIgNTI1LjE0MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTI1LjE0MiA1MjUuMTQyOyIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgogIDxnPgogICAgPHBhdGggc3R5bGU9ImZpbHRlcjppbnZlcnQoMTAwJSkiIGQ9Ik0zNzUuNTQsMC4yNDRjLTEzLjMzNiwxLjY4OS0yNi44MywyLjg3LTQwLjQ5NiwzLjU1NmMtMTUuNzQxLDAuNzk2LTI3Ljk4NywxLjE4OC0zNi43MjcsMS4xODgKICAgICAgYy0xMC4wNjcsMC0yMi4wODctMC41MTQtMzYuMDcxLTEuNTc5Yy0xMi4yMjgtMC45MTgtMjUuMjgyLTIuMDUtMzkuMTYyLTMuMzc4Yy0zLjM2Ni0wLjMyNC02Ljk1OCwyLjAxNC03LjgwMyw1LjI4OAogICAgICBjLTEuMDUzLDQuMDg4LTEuNTczLDcuNDE4LTEuNTczLDkuOTc2YzAsNi44NzMsNC44MDQsMTEuMDk1LDE0LjQyNSwxMi42OGMxMi42ODEsMS41NzksMjAuNjYxLDUuMDI1LDIzLjk0MSwxMC4zMDYKICAgICAgYzMuMjgsNS4yODIsNC4wMzksMTIuNjc1LDIuMjk1LDIyLjE5MWwtNjQuMjY2LDQwMy4zOTRjLTEuNzU2LDEwLjA0My01LjQ3OCwxNy41NzYtMTEuMTU3LDIyLjU4OQogICAgICBjLTUuNjg2LDUuMDI0LTE0LjIxLDguNTk5LTI1LjU3NSwxMC42OTdjLTQuODE2LDEuMDY1LTcuOTg3LDIuNjYyLTkuNTA0LDQuNzU1Yy0xLjU0MiwyLjExOC0yLjI5NSw1LjI4Mi0yLjI5NSw5LjUxOAogICAgICBjMCwyLjU2MywwLjI0NSw1LjMyNCwwLjcyOCw4LjI4YzAuNTQ1LDMuMzM1LDMuOTY2LDUuNjk3LDcuMzI2LDUuMzU0YzEyLjc0OC0xLjMxLDI1LjI1Ny0yLjQyNCwzNy41MjgtMy4zMjkKICAgICAgYzE0LjE5OC0xLjA2NSwyNS42NzMtMS41NzksMzQuNDI1LTEuNTc5YzEwLjA1NSwwLDIyLjk1NywwLjUxNCwzOC42OTcsMS41NzljMTMuNzY0LDAuOTI0LDI3LjY4MSwyLjA1LDQxLjc4MSwzLjM4NAogICAgICBjMy4zNjYsMC4zMTgsNi43ODctMi4wNjgsNy4zMzItNS40MDNjMC40ODMtMi45NTYsMC43MjktNS43MSwwLjcyOS04LjI4YzAtNy4zOTQtNC4xNjItMTIuMTQ4LTEyLjQ2MS0xNC4yNzIKICAgICAgYy0xMS44MDYtMi42MzgtMTkuODk2LTUuOTQyLTI0LjI2Ni05LjkwMWMtNC4zNzYtMy45Ni01LjY4Ni0xMS4yMjUtMy45MzUtMjEuNzk0TDMzMi40MTgsNjIuMDUKICAgICAgYzEuNzM4LTEwLjU2Myw1LjEyOS0xOC4yMjUsMTAuMTY1LTIyLjk4YzUuMDE5LTQuNzU1LDEzLjY2LTguMTgyLDI1LjkwNi0xMC4zMDZjNi4xMi0xLjA1MywxMC4xNzItMi42MzgsMTIuMTMtNC43NTUKICAgICAgYzEuOTcxLTIuMTA1LDIuOTUtNS4yNzUsMi45NS05LjUxMWMwLTIuNjkzLTAuMjY0LTUuNzEtMC44MDItOS4wNTFDMzgyLjI0MSwyLjExMSwzNzguODk0LTAuMTg0LDM3NS41NCwwLjI0NHoiLz4KICA8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+"); -} \ No newline at end of file diff --git a/resources/darkmode.css b/resources/darkmode.css index 81f4975..2045261 100644 --- a/resources/darkmode.css +++ b/resources/darkmode.css @@ -1,16 +1,33 @@ +/* + _______ + / \ + .==. .==. + (( ))==(( )) + / "==" "=="\ + /____|| || ||___\ + ________ ____ ________ ___ ___ + | ___ \ / \ | ___ \ | | / / + | | \ \ / /\ \ | | \ \| |_/ / + | | ) / /__\ \ | |__/ /| ___ \ + | |__/ / ______ \| ____ \| | \ \ +_______|_______/__/ ____ \__\__|___\__\__|___\__\____ +| ___ \ | ____/ / \ | ___ \ | ____| ___ \ +| | \ \| |___ / /\ \ | | \ \| |___| | \ \ +| |__/ /| ____/ /__\ \ | | ) | ____| |__/ / +| ____ \| |__/ ______ \| |__/ /| |___| ____ \ +|__| \__\____/__/ \__\_______/ |______|__| \__\ + https://darkreader.org +*/ + /*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/main/LICENSE */ /* User-Agent Style */ -@layer { html { background-color: #181a1b !important; } html { color-scheme: dark !important; } -iframe { - color-scheme: dark !important; -} html, body, input, textarea, select, button, dialog { background-color: #181a1b; } @@ -24,9 +41,6 @@ a { table { border-color: #545b5e; } -mark { - color: #e8e6e3; -} ::placeholder { color: #b2aba1; } @@ -36,8 +50,21 @@ select:-webkit-autofill { background-color: #404400 !important; color: #e8e6e3 !important; } -* { - scrollbar-color: #454a4d #202324; +::-webkit-scrollbar { + background-color: #202324; + color: #aba499; +} +::-webkit-scrollbar-thumb { + background-color: #454a4d; +} +::-webkit-scrollbar-thumb:hover { + background-color: #575e62; +} +::-webkit-scrollbar-thumb:active { + background-color: #484e51; +} +::-webkit-scrollbar-corner { + background-color: #181a1b; } ::selection { background-color: #004daa !important; @@ -47,178 +74,190 @@ select:-webkit-autofill { background-color: #004daa !important; color: #e8e6e3 !important; } -} /* Invert Style */ -.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, img.Wirisformula { +.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, #bit-notification-bar-iframe, ::-webkit-calendar-picker-indicator { filter: invert(100%) hue-rotate(180deg) contrast(90%) !important; } /* Variables Style */ :root { - --darkreader-neutral-background: #181a1b; - --darkreader-neutral-text: #e8e6e3; + --darkreader-neutral-background: #131516; + --darkreader-neutral-text: #d8d4cf; --darkreader-selection-background: #004daa; --darkreader-selection-text: #e8e6e3; } /* Modified CSS */ -:root, -[data-md-color-scheme="default"] { - --darkreader-bg--md-accent-bg-color: #181a1b; +:root, [data-md-color-scheme="default"] { + --darkreader-bg--md-default-fg-color: rgba(0, 0, 0, 0.87); + --darkreader-text--md-default-fg-color: rgba(232, 230, 227, 0.87); + --darkreader-bg--md-default-fg-color--light: rgba(0, 0, 0, 0.54); + --darkreader-text--md-default-fg-color--light: rgba(232, 230, 227, 0.54); + --darkreader-border--md-default-fg-color--light: rgba(140, 130, 115, 0.54); + --darkreader-bg--md-default-fg-color--lighter: rgba(0, 0, 0, 0.32); + --darkreader-text--md-default-fg-color--lighter: rgba(232, 230, 227, 0.32); + --darkreader-border--md-default-fg-color--lighter: rgba(140, 130, 115, 0.32); + --darkreader-bg--md-default-fg-color--lightest: rgba(0, 0, 0, 0.07); + --darkreader-text--md-default-fg-color--lightest: rgba(232, 230, 227, 0.07); + --darkreader-border--md-default-fg-color--lightest: rgba(140, 130, 115, 0.07); + --darkreader-bg--md-default-bg-color: #181a1b; + --darkreader-text--md-default-bg-color: #e8e6e3; + --darkreader-border--md-default-bg-color: #303436; + --md-default-bg-color--light: hsla(0,0%,100%,0.7); + --md-default-bg-color--lighter: hsla(0,0%,100%,0.3); + --md-default-bg-color--lightest: hsla(0,0%,100%,0.12); + --darkreader-bg--md-primary-fg-color: #334191; + --darkreader-text--md-primary-fg-color: #6d94cb; + --darkreader-border--md-primary-fg-color: #2f3c86; + --md-primary-fg-color--light: #5d6cc0; + --darkreader-bg--md-primary-fg-color--dark: #263281; + --darkreader-text--md-primary-bg-color: #e8e6e3; + --darkreader-text--md-primary-bg-color--light: rgba(232, 230, 227, 0.7); --darkreader-bg--md-accent-fg-color: #01189b; + --darkreader-text--md-accent-fg-color: #539bfe; + --darkreader-border--md-accent-fg-color: #011899; --darkreader-bg--md-accent-fg-color--transparent: rgba(1, 24, 155, 0.1); - --darkreader-bg--md-admonition-bg-color: var(--darkreader-bg--md-default-bg-color); + --darkreader-bg--md-accent-bg-color: #181a1b; + --darkreader-text--md-accent-bg-color: #e8e6e3; + --md-accent-bg-color--light: hsla(0,0%,100%,0.7); + --darkreader-text--md-code-fg-color: #beb9b0; --darkreader-bg--md-code-bg-color: #1e2021; --darkreader-bg--md-code-hl-color: rgba(153, 153, 0, 0.5); - --darkreader-bg--md-default-bg-color: #181a1b; - --darkreader-bg--md-default-fg-color: rgba(0, 0, 0, 0.87); - --darkreader-bg--md-default-fg-color--light: rgba(0, 0, 0, 0.54); - --darkreader-bg--md-default-fg-color--lighter: rgba(0, 0, 0, 0.32); - --darkreader-bg--md-default-fg-color--lightest: rgba(0, 0, 0, 0.07); - --darkreader-bg--md-footer-bg-color: rgba(0, 0, 0, 0.87); - --darkreader-bg--md-footer-bg-color--dark: rgba(0, 0, 0, 0.32); - --darkreader-bg--md-primary-fg-color: #334191; - --darkreader-bg--md-primary-fg-color--dark: #263281; - --darkreader-bg--md-shadow-z1: 0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1); - --darkreader-bg--md-shadow-z2: 0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25); - --darkreader-bg--md-shadow-z3: 0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35); - --darkreader-bg--md-typeset-del-color: rgba(165, 25, 9, 0.15); - --darkreader-bg--md-typeset-ins-color: rgba(9, 170, 90, 0.15); - --darkreader-bg--md-typeset-kbd-accent-color: #181a1b; - --darkreader-bg--md-typeset-kbd-border-color: #404548; - --darkreader-bg--md-typeset-kbd-color: #1b1d1e; - --darkreader-bg--md-typeset-mark-color: rgba(153, 153, 0, 0.5); - --darkreader-border--md-accent-fg-color: #011899; - --darkreader-border--md-default-bg-color: #303436; - --darkreader-border--md-default-fg-color--light: rgba(140, 130, 115, 0.54); - --darkreader-border--md-default-fg-color--lighter: rgba(140, 130, 115, 0.32); - --darkreader-border--md-default-fg-color--lightest: rgba(140, 130, 115, 0.07); - --darkreader-border--md-primary-fg-color: #2f3c86; - --darkreader-border--md-typeset-table-color: rgba(140, 130, 115, 0.12); - --darkreader-text--md-accent-bg-color: #e8e6e3; - --darkreader-text--md-accent-fg-color: #539bfe; - --darkreader-text--md-admonition-fg-color: var(--darkreader-text--md-default-fg-color); - --darkreader-text--md-code-fg-color: #beb9b0; - --darkreader-text--md-code-hl-comment-color: var(--darkreader-text--md-default-fg-color--light); - --darkreader-text--md-code-hl-constant-color: #7561db; - --darkreader-text--md-code-hl-function-color: #b159c0; - --darkreader-text--md-code-hl-generic-color: var(--darkreader-text--md-default-fg-color--light); - --darkreader-text--md-code-hl-keyword-color: #518ecb; - --darkreader-text--md-code-hl-name-color: var(--darkreader-text--md-code-fg-color); --darkreader-text--md-code-hl-number-color: #d93f3f; + --darkreader-text--md-code-hl-special-color: #ed3774; + --darkreader-text--md-code-hl-function-color: #b159c0; + --darkreader-text--md-code-hl-constant-color: #7561db; + --darkreader-text--md-code-hl-keyword-color: #518ecb; + --darkreader-text--md-code-hl-string-color: #7ee2b0; + --darkreader-text--md-code-hl-name-color: var(--darkreader-text--md-code-fg-color); --darkreader-text--md-code-hl-operator-color: var(--darkreader-text--md-default-fg-color--light); --darkreader-text--md-code-hl-punctuation-color: var(--darkreader-text--md-default-fg-color--light); - --darkreader-text--md-code-hl-special-color: #ed3774; - --darkreader-text--md-code-hl-string-color: #7ee2b0; + --darkreader-text--md-code-hl-comment-color: var(--darkreader-text--md-default-fg-color--light); + --darkreader-text--md-code-hl-generic-color: var(--darkreader-text--md-default-fg-color--light); --darkreader-text--md-code-hl-variable-color: var(--darkreader-text--md-default-fg-color--light); - --darkreader-text--md-default-bg-color: #e8e6e3; - --darkreader-text--md-default-fg-color: rgba(232, 230, 227, 0.87); - --darkreader-text--md-default-fg-color--light: rgba(232, 230, 227, 0.54); - --darkreader-text--md-default-fg-color--lighter: rgba(232, 230, 227, 0.32); - --darkreader-text--md-default-fg-color--lightest: rgba(232, 230, 227, 0.07); + --md-typeset-color: var(--md-default-fg-color); + --darkreader-text--md-typeset-a-color: var(--darkreader-text--md-primary-fg-color); + --darkreader-bg--md-typeset-mark-color: rgba(153, 153, 0, 0.5); + --darkreader-bg--md-typeset-del-color: rgba(165, 25, 9, 0.15); + --darkreader-bg--md-typeset-ins-color: rgba(9, 170, 90, 0.15); + --darkreader-bg--md-typeset-kbd-color: #1b1d1e; + --darkreader-bg--md-typeset-kbd-accent-color: #181a1b; + --darkreader-bg--md-typeset-kbd-border-color: #404548; + --darkreader-border--md-typeset-table-color: rgba(140, 130, 115, 0.12); + --darkreader-text--md-admonition-fg-color: var(--darkreader-text--md-default-fg-color); + --darkreader-bg--md-admonition-bg-color: var(--darkreader-bg--md-default-bg-color); --darkreader-text--md-footer-fg-color: #e8e6e3; --darkreader-text--md-footer-fg-color--light: rgba(232, 230, 227, 0.7); --darkreader-text--md-footer-fg-color--lighter: rgba(232, 230, 227, 0.3); - --darkreader-text--md-primary-bg-color: #e8e6e3; - --darkreader-text--md-primary-bg-color--light: rgba(232, 230, 227, 0.7); - --darkreader-text--md-primary-fg-color: #6d94cb; - --darkreader-text--md-typeset-a-color: var(--darkreader-text--md-primary-fg-color); - --md-accent-bg-color--light: hsla(0,0%,100%,.7); - --md-default-bg-color--light: hsla(0,0%,100%,.7); - --md-default-bg-color--lighter: hsla(0,0%,100%,.3); - --md-default-bg-color--lightest: hsla(0,0%,100%,.12); - --md-primary-fg-color--light: #5d6cc0; - --md-typeset-color: var(--md-default-fg-color); + --darkreader-bg--md-footer-bg-color: rgba(0, 0, 0, 0.87); + --darkreader-bg--md-footer-bg-color--dark: rgba(0, 0, 0, 0.32); + --darkreader-bg--md-shadow-z1: 0 0.2rem 0.5rem rgba(0,0,0,0.05), + 0 0 0.05rem rgba(0,0,0,0.1); + --darkreader-bg--md-shadow-z2: 0 0.2rem 0.5rem rgba(0,0,0,0.1), + 0 0 0.05rem rgba(0,0,0,0.25); + --darkreader-bg--md-shadow-z3: 0 0.2rem 0.5rem rgba(0,0,0,0.2), + 0 0 0.05rem rgba(0,0,0,0.35); } .md-icon svg { fill: currentcolor; } body { - --md-code-font-family: var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace; - --md-text-font-family: var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif; + --md-text-font-family: var(--md-text-font,_), + -apple-system, + BlinkMacSystemFont, + Helvetica, + Arial, + sans-serif; + --md-code-font-family: var(--md-code-font,_), + SFMono-Regular, + Consolas, + Menlo, + monospace; } :root { - --darkreader-bgimg--md-typeset-table-sort-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0ibTE4IDIxLTQtNGgzVjdoLTNsNC00IDQgNGgtM3YxMGgzTTIgMTl2LTJoMTB2Mk0yIDEzdi0yaDd2Mk0yIDdWNWg0djJIMloiLz48L3N2Zz4="); - --darkreader-bgimg--md-typeset-table-sort-icon--asc: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5IDE3aDNsLTQgNC00LTRoM1YzaDJNMiAxN2gxMHYySDJNNiA1djJIMlY1bTAgNmg3djJIMnYtMloiLz48L3N2Zz4="); - --darkreader-bgimg--md-typeset-table-sort-icon--desc: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5IDdoM2wtNC00LTQgNGgzdjE0aDJNMiAxN2gxMHYySDJNNiA1djJIMlY1bTAgNmg3djJIMnYtMloiLz48L3N2Zz4="); + --darkreader-bgimg--md-typeset-table-sort-icon: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-typeset-table-sort-icon--asc: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-typeset-table-sort-icon--desc: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset h1 { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset h5, .md-typeset h6 { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset hr { - border-bottom: .05rem solid var(--darkreader-border--md-default-fg-color--lightest); + border-bottom: 0.05rem solid var(--darkreader-border--md-default-fg-color--lightest); } .md-typeset code, .md-typeset kbd, .md-typeset pre { - color: var(--darkreader-text--md-code-fg-color, #e8e6e3); + color: var(--darkreader-text--md-code-fg-color); } .md-typeset kbd { - background-color: var(--darkreader-bg--md-typeset-kbd-color, #181a1b); - box-shadow: 0 .1rem 0 .05rem var(--darkreader-bg--md-typeset-kbd-border-color),0 .1rem 0 var(--darkreader-bg--md-typeset-kbd-border-color),0 -.1rem .2rem var(--darkreader-bg--md-typeset-kbd-accent-color) inset; - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-typeset-kbd-color); + box-shadow: 0 0.1rem 0 0.05rem var(--darkreader-bg--md-typeset-kbd-border-color), + 0 0.1rem 0 var(--darkreader-bg--md-typeset-kbd-border-color), + 0 -0.1rem 0.2rem var(--darkreader-bg--md-typeset-kbd-accent-color) inset; + color: var(--darkreader-text--md-default-fg-color); } .md-typeset mark { - background-color: var(--darkreader-bg--md-typeset-mark-color, #181a1b); + background-color: var(--darkreader-bg--md-typeset-mark-color); color: inherit; } .md-typeset abbr { - border-bottom: .05rem dotted var(--darkreader-border--md-default-fg-color--light); text-decoration-color: initial; + border-bottom: 0.05rem dotted var(--darkreader-border--md-default-fg-color--light); } @media (hover: none) { .md-typeset abbr[title]:-webkit-any(:focus, :hover)::after { - background-color: var(--darkreader-bg--md-default-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color); box-shadow: var(--darkreader-bg--md-shadow-z3); - color: var(--darkreader-text--md-default-bg-color, #e8e6e3); + color: var(--darkreader-text--md-default-bg-color); } .md-typeset abbr[title]:is(:focus, :hover)::after { - background-color: var(--darkreader-bg--md-default-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color); box-shadow: var(--darkreader-bg--md-shadow-z3); - color: var(--darkreader-text--md-default-bg-color, #e8e6e3); + color: var(--darkreader-text--md-default-bg-color); } } .md-typeset blockquote { - border-left: .2rem solid var(--darkreader-border--md-default-fg-color--lighter); + border-left: 0.2rem solid var(--darkreader-border--md-default-fg-color--lighter) ; } [dir="rtl"] .md-typeset blockquote { - border-right: .2rem solid var(--darkreader-border--md-default-fg-color--lighter); + border-right: 0.2rem solid var(--darkreader-border--md-default-fg-color--lighter) ; } .md-typeset blockquote { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset table:not([class]) { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); - border: .05rem solid var(--darkreader-border--md-typeset-table-color); + background-color: var(--darkreader-bg--md-default-bg-color); + border: 0.05rem solid var(--darkreader-border--md-typeset-table-color); } .md-typeset table:not([class]) td { - border-top: .05rem solid var(--darkreader-border--md-typeset-table-color); + border-top: 0.05rem solid var(--darkreader-border--md-typeset-table-color); } .md-typeset table:not([class]) tbody tr:hover { background-color: rgba(0, 0, 0, 0.04); - box-shadow: 0 .05rem 0 var(--darkreader-bg--md-default-bg-color) inset; + box-shadow: 0 0.05rem 0 var(--darkreader-bg--md-default-bg-color) inset; } .md-typeset table th[role="columnheader"]:hover::after { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lighter); } .md-typeset table th[role="columnheader"][aria-sort="ascending"]::after { - background-color: var(--darkreader-bg--md-default-fg-color--light, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--light); } .md-typeset table th[role="columnheader"][aria-sort="descending"]::after { - background-color: var(--darkreader-bg--md-default-fg-color--light, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--light); } .md-banner { - background-color: var(--darkreader-bg--md-footer-bg-color, #181a1b); - color: var(--darkreader-text--md-footer-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-footer-bg-color); + color: var(--darkreader-text--md-footer-fg-color); } .md-banner--warning { + color: var(--darkreader-text--md-default-fg-color); background: var(--darkreader-bg--md-typeset-mark-color); - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); } .md-banner__button { color: inherit; @@ -227,15 +266,15 @@ body { outline-color: var(--darkreader-border--md-accent-fg-color); } .md-skip { - background-color: var(--darkreader-bg--md-default-fg-color, #181a1b); - color: var(--darkreader-text--md-default-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-default-fg-color); + color: var(--darkreader-text--md-default-bg-color); outline-color: var(--darkreader-border--md-accent-fg-color); } :root { - --darkreader-bgimg--md-clipboard-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwmbHQ7c3ZnIHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJnF1b3Q7IHZpZXdCb3g9JnF1b3Q7MCAwIDI0IDI0JnF1b3Q7Jmd0OyZsdDtwYXRoIGQ9JnF1b3Q7TTE5IDIxSDhWN2gxMW0wLTJIOGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTFhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJtLTMtNEg0YTIgMiAwIDAgMC0yIDJ2MTRoMlYzaDEyVjFaJnF1b3Q7LyZndDsmbHQ7L3N2ZyZndDsiIC8+PC9zdmc+"); + --darkreader-bgimg--md-clipboard-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTkgMjFIOFY3aDExbTAtMkg4YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMWEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMm0tMy00SDRhMiAyIDAgMCAwLTIgMnYxNGgyVjNoMTJWMVoiLz48L3N2Zz4iIC8+PC9zdmc+"); } .md-clipboard { - color: var(--darkreader-text--md-default-fg-color--lightest, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lightest); outline-color: var(--darkreader-border--md-accent-fg-color); } .md-clipboard:not(.focus-visible) { @@ -243,112 +282,109 @@ body { outline-color: initial; } :hover > .md-clipboard { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-clipboard:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-clipboard:is(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-clipboard::after { background-color: currentcolor; } .md-clipboard--inline:-webkit-any(:focus, :hover) code { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); + color: var(--darkreader-text--md-accent-fg-color); } .md-clipboard--inline:is(:focus, :hover) code { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); + color: var(--darkreader-text--md-accent-fg-color); } .md-consent__overlay { background-color: rgba(0, 0, 0, 0.54); } .md-consent__inner { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); border-color: initial; - border-style: initial; - border-width: 0px; - box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 0.2rem, rgba(0, 0, 0, 0.2) 0px 0.2rem 0.4rem; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 0.2rem, + rgba(0, 0, 0, 0.2) 0px 0.2rem 0.4rem; } .md-typeset .md-content__button { - color: var(--darkreader-text--md-default-fg-color--lighter, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lighter); } .md-dialog { - background-color: var(--darkreader-bg--md-default-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color); box-shadow: var(--darkreader-bg--md-shadow-z3); } .md-dialog__inner { - color: var(--darkreader-text--md-default-bg-color, #e8e6e3); + color: var(--darkreader-text--md-default-bg-color); } .md-feedback fieldset { border-color: initial; - border-style: none; - border-width: initial; } .md-feedback__list:hover .md-icon:not(:disabled) { - color: var(--darkreader-text--md-default-fg-color--lighter, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lighter); } .md-feedback__icon { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-feedback__icon:not(:disabled).md-icon:hover { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-feedback__icon:disabled { - color: var(--darkreader-text--md-default-fg-color--lightest, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lightest); } .md-footer { - background-color: var(--darkreader-bg--md-footer-bg-color, #181a1b); - color: var(--darkreader-text--md-footer-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-footer-bg-color); + color: var(--darkreader-text--md-footer-fg-color); } .md-footer__link { outline-color: var(--darkreader-border--md-accent-fg-color); } .md-footer-meta { - background-color: var(--darkreader-bg--md-footer-bg-color--dark, #181a1b); + background-color: var(--darkreader-bg--md-footer-bg-color--dark); } html .md-footer-meta.md-typeset a { - color: var(--darkreader-text--md-footer-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-footer-fg-color--light); } html .md-footer-meta.md-typeset a:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-footer-fg-color, #e8e6e3); + color: var(--darkreader-text--md-footer-fg-color); } html .md-footer-meta.md-typeset a:is(:focus, :hover) { - color: var(--darkreader-text--md-footer-fg-color, #e8e6e3); + color: var(--darkreader-text--md-footer-fg-color); } .md-copyright { - color: var(--darkreader-text--md-footer-fg-color--lighter, #e8e6e3); + color: var(--darkreader-text--md-footer-fg-color--lighter); } .md-copyright__highlight { - color: var(--darkreader-text--md-footer-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-footer-fg-color--light); } .md-social__link svg { fill: currentcolor; } .md-typeset .md-button { border-color: initial; - color: var(--darkreader-text--md-primary-fg-color, #e8e6e3); + color: var(--darkreader-text--md-primary-fg-color); } .md-typeset .md-button--primary { - background-color: var(--darkreader-bg--md-primary-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-primary-fg-color); + color: var(--darkreader-text--md-primary-bg-color); border-color: var(--darkreader-border--md-primary-fg-color); - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); } .md-typeset .md-button:-webkit-any(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color); + color: var(--darkreader-text--md-accent-bg-color); border-color: var(--darkreader-border--md-accent-fg-color); - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); } .md-typeset .md-button:is(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color); + color: var(--darkreader-text--md-accent-bg-color); border-color: var(--darkreader-border--md-accent-fg-color); - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); } .md-typeset .md-input { - border-bottom: .1rem solid var(--darkreader-border--md-default-fg-color--lighter); box-shadow: var(--darkreader-bg--md-shadow-z1); + border-bottom: 0.1rem solid var(--darkreader-border--md-default-fg-color--lighter); } .md-typeset .md-input:-webkit-any(:focus, :hover) { border-bottom-color: var(--darkreader-border--md-accent-fg-color); @@ -359,12 +395,14 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { box-shadow: var(--darkreader-bg--md-shadow-z2); } .md-header { - background-color: var(--darkreader-bg--md-primary-fg-color, #181a1b); - box-shadow: rgba(0, 0, 0, 0) 0px 0px 0.2rem, rgba(0, 0, 0, 0) 0px 0.2rem 0.4rem; - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-primary-fg-color); + box-shadow: rgba(0, 0, 0, 0) 0px 0px 0.2rem, + rgba(0, 0, 0, 0) 0px 0.2rem 0.4rem; + color: var(--darkreader-text--md-primary-bg-color); } .md-header--shadow { - box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 0.2rem, rgba(0, 0, 0, 0.2) 0px 0.2rem 0.4rem; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 0.2rem, + rgba(0, 0, 0, 0.2) 0px 0.2rem 0.4rem; } .md-header__button { color: currentcolor; @@ -381,9 +419,9 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { fill: currentcolor; } :root { - --darkreader-bgimg--md-nav-icon--next: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTguNTkgMTYuNTggMTMuMTcgMTIgOC41OSA3LjQxIDEwIDZsNiA2LTYgNi0xLjQxLTEuNDJaIi8+PC9zdmc+"); - --darkreader-bgimg--md-nav-icon--prev: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTIwIDExdjJIOGw1LjUgNS41LTEuNDIgMS40Mkw0LjE2IDEybDcuOTItNy45MkwxMy41IDUuNSA4IDExaDEyWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-toc-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTMgOWgxNFY3SDN2Mm0wIDRoMTR2LTJIM3YybTAgNGgxNHYtMkgzdjJtMTYgMGgydi0yaC0ydjJtMC0xMHYyaDJWN2gtMm0wIDZoMnYtMmgtMnYyWiIvPjwvc3ZnPg=="); + --darkreader-bgimg--md-nav-icon--prev: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-nav-icon--next: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-toc-icon: url("data:image/svg+xml;charset=utf-8,"); } .md-nav__title .md-nav__button.md-logo :-webkit-any(img, svg) { fill: currentcolor; @@ -395,19 +433,19 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { list-style-image: initial; } .md-nav__link--passed { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-nav__item .md-nav__link--active { - color: var(--darkreader-text--md-typeset-a-color, #e8e6e3); + color: var(--darkreader-text--md-typeset-a-color); } .md-nav__link:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-nav__link:is(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-nav__link.focus-visible { - outline-color: var(--darkreader-border--md-accent-fg-color); + outline-color: var(--darkreader-border--md-accent-fg-color); } .md-nav--primary .md-nav__link[for="__toc"] .md-icon::after { background-color: currentcolor; @@ -415,37 +453,37 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { @media screen and (max-width: 76.1875em) { .md-nav--primary, .md-nav--primary .md-nav { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); } .md-nav--primary .md-nav__title { - background-color: var(--darkreader-bg--md-default-fg-color--lightest, #181a1b); - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + background-color: var(--darkreader-bg--md-default-fg-color--lightest); + color: var(--darkreader-text--md-default-fg-color--light); } .md-nav--primary .md-nav__title .md-nav__icon::after { background-color: currentcolor; } .md-nav--primary .md-nav__title ~ .md-nav__list { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); - box-shadow: 0 .05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; + background-color: var(--darkreader-bg--md-default-bg-color); + box-shadow: 0 0.05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; } .md-nav--primary .md-nav__title ~ .md-nav__list > :first-child { - border-top: 0px; + border-top-color: initial; } .md-nav--primary .md-nav__title[for="__drawer"] { - background-color: var(--darkreader-bg--md-primary-fg-color, #181a1b); - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-primary-fg-color); + color: var(--darkreader-text--md-primary-bg-color); } .md-nav--primary .md-nav__item { - border-top: .05rem solid var(--darkreader-border--md-default-fg-color--lightest); + border-top: 0.05rem solid var(--darkreader-border--md-default-fg-color--lightest); } .md-nav--primary .md-nav__item--active > .md-nav__link { - color: var(--darkreader-text--md-typeset-a-color, #e8e6e3); + color: var(--darkreader-text--md-typeset-a-color); } .md-nav--primary .md-nav__item--active > .md-nav__link:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-nav--primary .md-nav__item--active > .md-nav__link:is(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-nav--primary .md-nav__link .md-nav__icon::after { background-color: currentcolor; @@ -459,44 +497,44 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } @media screen and (max-width: 59.9375em) { .md-nav__source { - background-color: var(--darkreader-bg--md-primary-fg-color--dark, #181a1b); - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-primary-fg-color--dark); + color: var(--darkreader-text--md-primary-bg-color); } } @media screen and (min-width: 60em) { .md-nav--secondary .md-nav__title { + box-shadow: 0 0 0.4rem 0.4rem var(--darkreader-bg--md-default-bg-color); background: var(--darkreader-bg--md-default-bg-color); - box-shadow: 0 0 .4rem .4rem var(--darkreader-bg--md-default-bg-color); } } @media screen and (min-width: 76.25em) { .md-nav--primary .md-nav__title { + box-shadow: 0 0 0.4rem 0.4rem var(--darkreader-bg--md-default-bg-color); background: var(--darkreader-bg--md-default-bg-color); - box-shadow: 0 0 .4rem .4rem var(--darkreader-bg--md-default-bg-color); } .md-nav__icon:hover { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); } .md-nav__icon::after { background-color: currentcolor; } .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link { + box-shadow: 0 0 0.4rem 0.4rem var(--darkreader-bg--md-default-bg-color); background: var(--darkreader-bg--md-default-bg-color); - box-shadow: 0 0 .4rem .4rem var(--darkreader-bg--md-default-bg-color); } .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary { - border-left: .05rem solid var(--darkreader-border--md-primary-fg-color); + border-left: 0.05rem solid var(--darkreader-border--md-primary-fg-color) ; } [dir="rtl"] .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary { - border-right: .05rem solid var(--darkreader-border--md-primary-fg-color); + border-right: 0.05rem solid var(--darkreader-border--md-primary-fg-color) ; } } :root { - --darkreader-bgimg--md-search-result-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoN2MtLjQxLS4yNS0uOC0uNTYtMS4xNC0uOS0uMzMtLjMzLS42MS0uNy0uODYtMS4xSDZWNGg3djVoNXYxLjE4Yy43MS4xNiAxLjM5LjQzIDIgLjgyVjhsLTYtNm02LjMxIDE2LjljMS4zMy0yLjExLjY5LTQuOS0xLjQtNi4yMi0yLjExLTEuMzMtNC45MS0uNjgtNi4yMiAxLjQtMS4zNCAyLjExLS42OSA0Ljg5IDEuNCA2LjIyIDEuNDYuOTMgMy4zMi45MyA0Ljc5LjAyTDIyIDIzLjM5IDIzLjM5IDIybC0zLjA4LTMuMW0tMy44MS4xYTIuNSAyLjUgMCAwIDEtMi41LTIuNSAyLjUgMi41IDAgMCAxIDIuNS0yLjUgMi41IDIuNSAwIDAgMSAyLjUgMi41IDIuNSAyLjUgMCAwIDEtMi41IDIuNVoiLz48L3N2Zz4="); + --darkreader-bgimg--md-search-result-icon: url("data:image/svg+xml;charset=utf-8,"); } @media screen and (max-width: 59.9375em) { .md-search__overlay { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); } } @media screen and (min-width: 60em) { @@ -505,7 +543,7 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } } .md-search__form { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: rgba(0, 0, 0, 0) 0px 0px 0.6rem; } @media screen and (min-width: 60em) { @@ -513,46 +551,45 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { background-color: rgba(0, 0, 0, 0.26); } .md-search__form:hover { - background-color: rgba(24, 26, 27, 0.12); + background-color: rgba(24, 26, 27, 0.12); } } [data-md-toggle="search"]:checked ~ .md-header .md-search__form { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: rgba(0, 0, 0, 0.07) 0px 0px 0.6rem; - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } .md-search__input { - background-color: transparent; background-image: initial; + background-color: transparent; } .md-search__input::placeholder, .md-search__input ~ .md-search__icon { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } @media screen and (min-width: 60em) { .md-search__input { color: inherit; } .md-search__input::placeholder { - color: var(--darkreader-text--md-primary-bg-color--light, #e8e6e3); + color: var(--darkreader-text--md-primary-bg-color--light); } .md-search__input + .md-search__icon { - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); + color: var(--darkreader-text--md-primary-bg-color); } - [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, - [data-md-toggle="search"]:checked ~ .md-header .md-search__input::placeholder { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::placeholder { + color: var(--darkreader-text--md-default-fg-color--light); } } .md-search__options > * { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-search__options > :not(.focus-visible) { -webkit-tap-highlight-color: transparent; outline-color: initial; } .md-search__suggest { - color: var(--darkreader-text--md-default-fg-color--lighter, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lighter); } @media screen and (min-width: 60em) { [data-md-toggle="search"]:checked ~ .md-header .md-search__output { @@ -560,28 +597,28 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } } .md-search__scrollwrap { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); } @media screen and (min-width: 60em) { .md-search__scrollwrap::-webkit-scrollbar-thumb { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lighter); } .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color); } } .md-search-result { - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } .md-search-result__meta { - background-color: var(--darkreader-bg--md-default-fg-color--lightest, #181a1b); - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + background-color: var(--darkreader-bg--md-default-fg-color--lightest); + color: var(--darkreader-text--md-default-fg-color--light); } .md-search-result__list { list-style-image: initial; } .md-search-result__item { - box-shadow: 0 -.05rem var(--darkreader-bg--md-default-fg-color--lightest); + box-shadow: 0 -0.05rem var(--darkreader-bg--md-default-fg-color--lightest); } .md-search-result__item:first-child { box-shadow: none; @@ -590,31 +627,31 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { outline-color: initial; } .md-search-result__link:-webkit-any(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); } .md-search-result__link:is(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); } .md-search-result__more summary { - color: var(--darkreader-text--md-typeset-a-color, #e8e6e3); + color: var(--darkreader-text--md-typeset-a-color); outline-color: initial; } .md-search-result__more summary:-webkit-any(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); + color: var(--darkreader-text--md-accent-fg-color); } .md-search-result__more summary:is(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); + color: var(--darkreader-text--md-accent-fg-color); } .md-search-result__icon { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-search-result__icon::after { background-color: currentcolor; } .md-search-result__teaser { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-search-result__teaser mark { background-color: initial; @@ -622,44 +659,44 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } .md-search-result mark { background-color: initial; - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-select__inner { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: var(--darkreader-bg--md-shadow-z2); - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } .md-select__inner::after { border-bottom-color: var(--darkreader-border--md-default-bg-color); border-left-color: transparent; border-right-color: transparent; - border-top: 0px; + border-top-color: initial; } .md-select__link { outline-color: initial; } .md-select__link:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-select__link:is(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-select__link:focus { - background-color: var(--darkreader-bg--md-default-fg-color--lightest, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lightest); } @media screen and (max-width: 76.1875em) { .md-sidebar--primary { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); } [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary { box-shadow: var(--darkreader-bg--md-shadow-z3); } } .md-sidebar__scrollwrap::-webkit-scrollbar-thumb { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lighter); } .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color); } @media screen and (max-width: 76.1875em) { .md-overlay { @@ -667,10 +704,10 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } } :root { - --darkreader-bgimg--md-source-forks-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwmbHQ7c3ZnIHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJnF1b3Q7IHZpZXdCb3g9JnF1b3Q7MCAwIDE2IDE2JnF1b3Q7Jmd0OyZsdDtwYXRoIGZpbGwtcnVsZT0mcXVvdDtldmVub2RkJnF1b3Q7IGQ9JnF1b3Q7TTUgMy4yNWEuNzUuNzUgMCAxIDEtMS41IDAgLjc1Ljc1IDAgMCAxIDEuNSAwem0wIDIuMTIyYTIuMjUgMi4yNSAwIDEgMC0xLjUgMHYuODc4QTIuMjUgMi4yNSAwIDAgMCA1Ljc1IDguNWgxLjV2Mi4xMjhhMi4yNTEgMi4yNTEgMCAxIDAgMS41IDBWOC41aDEuNWEyLjI1IDIuMjUgMCAwIDAgMi4yNS0yLjI1di0uODc4YTIuMjUgMi4yNSAwIDEgMC0xLjUgMHYuODc4YS43NS43NSAwIDAgMS0uNzUuNzVoLTQuNUEuNzUuNzUgMCAwIDEgNSA2LjI1di0uODc4em0zLjc1IDcuMzc4YS43NS43NSAwIDEgMS0xLjUgMCAuNzUuNzUgMCAwIDEgMS41IDB6bTMtOC43NWEuNzUuNzUgMCAxIDAgMC0xLjUuNzUuNzUgMCAwIDAgMCAxLjV6JnF1b3Q7LyZndDsmbHQ7L3N2ZyZndDsiIC8+PC9zdmc+"); - --darkreader-bgimg--md-source-repositories-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwmbHQ7c3ZnIHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJnF1b3Q7IHZpZXdCb3g9JnF1b3Q7MCAwIDE2IDE2JnF1b3Q7Jmd0OyZsdDtwYXRoIGZpbGwtcnVsZT0mcXVvdDtldmVub2RkJnF1b3Q7IGQ9JnF1b3Q7TTIgMi41QTIuNSAyLjUgMCAwIDEgNC41IDBoOC43NWEuNzUuNzUgMCAwIDEgLjc1Ljc1djEyLjVhLjc1Ljc1IDAgMCAxLS43NS43NWgtMi41YS43NS43NSAwIDEgMSAwLTEuNWgxLjc1di0yaC04YTEgMSAwIDAgMC0uNzE0IDEuNy43NS43NSAwIDAgMS0xLjA3MiAxLjA1QTIuNDk1IDIuNDk1IDAgMCAxIDIgMTEuNXYtOXptMTAuNS0xVjloLThjLS4zNTYgMC0uNjk0LjA3NC0xIC4yMDhWMi41YTEgMSAwIDAgMSAxLTFoOHpNNSAxMi4yNXYzLjI1YS4yNS4yNSAwIDAgMCAuNC4ybDEuNDUtMS4wODdhLjI1LjI1IDAgMCAxIC4zIDBMOC42IDE1LjdhLjI1LjI1IDAgMCAwIC40LS4ydi0zLjI1YS4yNS4yNSAwIDAgMC0uMjUtLjI1aC0zLjVhLjI1LjI1IDAgMCAwLS4yNS4yNXomcXVvdDsvJmd0OyZsdDsvc3ZnJmd0OyIgLz48L3N2Zz4="); - --darkreader-bgimg--md-source-stars-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOCAuMjVhLjc1Ljc1IDAgMCAxIC42NzMuNDE4bDEuODgyIDMuODE1IDQuMjEuNjEyYS43NS43NSAwIDAgMSAuNDE2IDEuMjc5bC0zLjA0NiAyLjk3LjcxOSA0LjE5MmEuNzUuNzUgMCAwIDEtMS4wODguNzkxTDggMTIuMzQ3bC0zLjc2NiAxLjk4YS43NS43NSAwIDAgMS0xLjA4OC0uNzlsLjcyLTQuMTk0TC44MTggNi4zNzRhLjc1Ljc1IDAgMCAxIC40MTYtMS4yOGw0LjIxLS42MTFMNy4zMjcuNjY4QS43NS43NSAwIDAgMSA4IC4yNXptMCAyLjQ0NUw2LjYxNSA1LjVhLjc1Ljc1IDAgMCAxLS41NjQuNDFsLTMuMDk3LjQ1IDIuMjQgMi4xODRhLjc1Ljc1IDAgMCAxIC4yMTYuNjY0bC0uNTI4IDMuMDg0IDIuNzY5LTEuNDU2YS43NS43NSAwIDAgMSAuNjk4IDBsMi43NyAxLjQ1Ni0uNTMtMy4wODRhLjc1Ljc1IDAgMCAxIC4yMTYtLjY2NGwyLjI0LTIuMTgzLTMuMDk2LS40NWEuNzUuNzUgMCAwIDEtLjU2NC0uNDFMOCAyLjY5NHYuMDAxeiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-source-version-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwmbHQ7c3ZnIHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJnF1b3Q7IHZpZXdCb3g9JnF1b3Q7MCAwIDE2IDE2JnF1b3Q7Jmd0OyZsdDtwYXRoIGZpbGwtcnVsZT0mcXVvdDtldmVub2RkJnF1b3Q7IGQ9JnF1b3Q7TTIuNSA3Ljc3NVYyLjc1YS4yNS4yNSAwIDAgMSAuMjUtLjI1aDUuMDI1YS4yNS4yNSAwIDAgMSAuMTc3LjA3M2w2LjI1IDYuMjVhLjI1LjI1IDAgMCAxIDAgLjM1NGwtNS4wMjUgNS4wMjVhLjI1LjI1IDAgMCAxLS4zNTQgMGwtNi4yNS02LjI1YS4yNS4yNSAwIDAgMS0uMDczLS4xNzd6bS0xLjUgMFYyLjc1QzEgMS43ODQgMS43ODQgMSAyLjc1IDFoNS4wMjVjLjQ2NCAwIC45MS4xODQgMS4yMzguNTEzbDYuMjUgNi4yNWExLjc1IDEuNzUgMCAwIDEgMCAyLjQ3NGwtNS4wMjYgNS4wMjZhMS43NSAxLjc1IDAgMCAxLTIuNDc0IDBsLTYuMjUtNi4yNUExLjc1IDEuNzUgMCAwIDEgMSA3Ljc3NXpNNiA1YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnomcXVvdDsvJmd0OyZsdDsvc3ZnJmd0OyIgLz48L3N2Zz4="); + --darkreader-bgimg--md-source-forks-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDMuMjVhLjc1Ljc1IDAgMSAxLTEuNSAwIC43NS43NSAwIDAgMSAxLjUgMHptMCAyLjEyMmEyLjI1IDIuMjUgMCAxIDAtMS41IDB2Ljg3OEEyLjI1IDIuMjUgMCAwIDAgNS43NSA4LjVoMS41djIuMTI4YTIuMjUxIDIuMjUxIDAgMSAwIDEuNSAwVjguNWgxLjVhMi4yNSAyLjI1IDAgMCAwIDIuMjUtMi4yNXYtLjg3OGEyLjI1IDIuMjUgMCAxIDAtMS41IDB2Ljg3OGEuNzUuNzUgMCAwIDEtLjc1Ljc1aC00LjVBLjc1Ljc1IDAgMCAxIDUgNi4yNXYtLjg3OHptMy43NSA3LjM3OGEuNzUuNzUgMCAxIDEtMS41IDAgLjc1Ljc1IDAgMCAxIDEuNSAwem0zLTguNzVhLjc1Ljc1IDAgMSAwIDAtMS41Ljc1Ljc1IDAgMCAwIDAgMS41eiIvPjwvc3ZnPiIgLz48L3N2Zz4="); + --darkreader-bgimg--md-source-repositories-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDIuNUEyLjUgMi41IDAgMCAxIDQuNSAwaDguNzVhLjc1Ljc1IDAgMCAxIC43NS43NXYxMi41YS43NS43NSAwIDAgMS0uNzUuNzVoLTIuNWEuNzUuNzUgMCAxIDEgMC0xLjVoMS43NXYtMmgtOGExIDEgMCAwIDAtLjcxNCAxLjcuNzUuNzUgMCAwIDEtMS4wNzIgMS4wNUEyLjQ5NSAyLjQ5NSAwIDAgMSAyIDExLjV2LTl6bTEwLjUtMVY5aC04Yy0uMzU2IDAtLjY5NC4wNzQtMSAuMjA4VjIuNWExIDEgMCAwIDEgMS0xaDh6TTUgMTIuMjV2My4yNWEuMjUuMjUgMCAwIDAgLjQuMmwxLjQ1LTEuMDg3YS4yNS4yNSAwIDAgMSAuMyAwTDguNiAxNS43YS4yNS4yNSAwIDAgMCAuNC0uMnYtMy4yNWEuMjUuMjUgMCAwIDAtLjI1LS4yNWgtMy41YS4yNS4yNSAwIDAgMC0uMjUuMjV6Ii8+PC9zdmc+IiAvPjwvc3ZnPg=="); + --darkreader-bgimg--md-source-stars-icon: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-source-version-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjUgNy43NzVWMi43NWEuMjUuMjUgMCAwIDEgLjI1LS4yNWg1LjAyNWEuMjUuMjUgMCAwIDEgLjE3Ny4wNzNsNi4yNSA2LjI1YS4yNS4yNSAwIDAgMSAwIC4zNTRsLTUuMDI1IDUuMDI1YS4yNS4yNSAwIDAgMS0uMzU0IDBsLTYuMjUtNi4yNWEuMjUuMjUgMCAwIDEtLjA3My0uMTc3em0tMS41IDBWMi43NUMxIDEuNzg0IDEuNzg0IDEgMi43NSAxaDUuMDI1Yy40NjQgMCAuOTEuMTg0IDEuMjM4LjUxM2w2LjI1IDYuMjVhMS43NSAxLjc1IDAgMCAxIDAgMi40NzRsLTUuMDI2IDUuMDI2YTEuNzUgMS43NSAwIDAgMS0yLjQ3NCAwbC02LjI1LTYuMjVBMS43NSAxLjc1IDAgMCAxIDEgNy43NzV6TTYgNWExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6Ii8+PC9zdmc+IiAvPjwvc3ZnPg=="); } .md-source { outline-color: var(--darkreader-border--md-accent-fg-color); @@ -679,8 +716,8 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { background-color: currentcolor; } .md-tabs { - background-color: var(--darkreader-bg--md-primary-fg-color, #181a1b); - color: var(--darkreader-text--md-primary-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-primary-fg-color); + color: var(--darkreader-text--md-primary-bg-color); } .md-tabs__list { list-style-image: initial; @@ -697,7 +734,7 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { color: inherit; } :root { - --darkreader-bgimg--md-tag-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0ibTUuNDEgMjEgLjcxLTRoLTRsLjM1LTJoNGwxLjA2LTZoLTRsLjM1LTJoNGwuNzEtNGgybC0uNzEgNGg2bC43MS00aDJsLS43MSA0aDRsLS4zNSAyaC00bC0xLjA2IDZoNGwtLjM1IDJoLTRsLS43MSA0aC0ybC43MS00aC02bC0uNzEgNGgtMk05LjUzIDlsLTEuMDYgNmg2bDEuMDYtNmgtNloiLz48L3N2Zz4="); + --darkreader-bgimg--md-tag-icon: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset .md-tag { background: var(--darkreader-bg--md-default-fg-color--lightest); @@ -709,28 +746,28 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } .md-typeset .md-tag[href]:focus, .md-typeset .md-tag[href]:hover { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color); + color: var(--darkreader-text--md-accent-bg-color); } .md-typeset .md-tag-icon::before { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lighter); } .md-typeset .md-tag-icon:-webkit-any(a:focus, a:hover)::before { - background-color: var(--darkreader-bg--md-accent-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-bg-color); } .md-typeset .md-tag-icon:is(a:focus, a:hover)::before { - background-color: var(--darkreader-bg--md-accent-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-bg-color); } :root { --md-tooltip-width: 20rem; } .md-tooltip { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: var(--darkreader-bg--md-shadow-z2); - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } :is(.focus-visible > .md-tooltip, .md-tooltip:target) { - outline: var(--darkreader-border--md-accent-fg-color) auto; + outline: var(--darkreader-border--md-accent-fg-color) auto ; } .md-annotation { outline-color: initial; @@ -748,30 +785,30 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { color: rgb(232, 230, 227); } .md-annotation__index::after { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lighter); } :is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index) { - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-bg-color); } :is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index)::after { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color); } .md-top { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: var(--darkreader-bg--md-shadow-z2); - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); outline-color: initial; } .md-top:-webkit-any(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color); + color: var(--darkreader-text--md-accent-bg-color); } .md-top:is(:focus, :hover) { - background-color: var(--darkreader-bg--md-accent-fg-color, #181a1b); - color: var(--darkreader-text--md-accent-bg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color); + color: var(--darkreader-text--md-accent-bg-color); } :root { - --darkreader-bgimg--md-version-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMjAgNTEyIj48IS0tISBGb250IEF3ZXNvbWUgRnJlZSA2LjIuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKSBDb3B5cmlnaHQgMjAyMiBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMTM3LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMDEgMTkxLjkgMjg4IDE5MS45TDMyIDE5MmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsMTI4IDEyOHoiLz48L3N2Zz4="); + --darkreader-bgimg--md-version-icon: url("data:image/svg+xml;charset=utf-8,"); } .md-version__current { color: inherit; @@ -781,49 +818,47 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { background-color: currentcolor; } .md-version__list { - background-color: var(--darkreader-bg--md-default-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-default-bg-color); box-shadow: var(--darkreader-bg--md-shadow-z2); - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } .md-version__link { outline-color: initial; } .md-version__link:-webkit-any(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-version__link:is(:focus, :hover) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-version__link:focus { - background-color: var(--darkreader-bg--md-default-fg-color--lightest, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lightest); } :root { - --darkreader-bgimg--md-admonition-icon--abstract: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE3IDlIN1Y3aDEwbTAgNkg3di0yaDEwbS0zIDZIN3YtMmg3TTEyIDNhMSAxIDAgMCAxIDEgMSAxIDEgMCAwIDEtMSAxIDEgMSAwIDAgMS0xLTEgMSAxIDAgMCAxIDEtMW03IDBoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWNWEyIDIgMCAwIDAtMi0yWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--bug: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTExIDEzaDJ2MWgtMnYtMW0xMC04djZjMCA1LjUtMy44IDEwLjctOSAxMi01LjItMS4zLTktNi41LTktMTJWNWw5LTQgOSA0bS00IDVoLTIuMmMtLjItLjYtLjYtMS4xLTEuMS0xLjVsMS4yLTEuMi0uNy0uN0wxMi44IDhIMTJjLS4yIDAtLjUgMC0uNy4xTDkuOSA2LjZsLS44LjggMS4yIDEuMmMtLjUuMy0uOS44LTEuMSAxLjRIN3YxaDJ2MUg3djFoMnYxSDd2MWgyLjJjLjQgMS4yIDEuNSAyIDIuOCAyczIuNC0uOCAyLjgtMkgxN3YtMWgtMnYtMWgydi0xaC0ydi0xaDJ2LTFtLTYgMmgydi0xaC0ydjFaIi8+PC9zdmc+"); - --darkreader-bgimg--md-admonition-icon--danger: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0ibTExLjUgMjAgNC44Ni05LjczSDEzVjRsLTUgOS43M2gzLjVWMjBNMTIgMmMyLjc1IDAgNS4xIDEgNy4wNSAyLjk1QzIxIDYuOSAyMiA5LjI1IDIyIDEycy0xIDUuMS0yLjk1IDcuMDVDMTcuMSAyMSAxNC43NSAyMiAxMiAyMnMtNS4xLTEtNy4wNS0yLjk1QzMgMTcuMSAyIDE0Ljc1IDIgMTJzMS01LjEgMi45NS03LjA1QzYuOSAzIDkuMjUgMiAxMiAyWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--example: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTcgMnYyaDF2MTRhNCA0IDAgMCAwIDQgNCA0IDQgMCAwIDAgNC00VjRoMVYySDdtNCAxNGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMW0yLTRjLS42IDAtMS0uNC0xLTFzLjQtMSAxLTEgMSAuNCAxIDEtLjQgMS0xIDFtMS01aC00VjRoNHYzWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--failure: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5IDYuNDEgMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMiAxOSA2LjQxWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--info: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEzIDloLTJWN2gybTAgMTBoLTJ2LTZoMm0tMS05QTEwIDEwIDAgMCAwIDIgMTJhMTAgMTAgMCAwIDAgMTAgMTAgMTAgMTAgMCAwIDAgMTAtMTBBMTAgMTAgMCAwIDAgMTIgMloiLz48L3N2Zz4="); - --darkreader-bgimg--md-admonition-icon--note: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJtMy4xIDUuMDdjLjE0IDAgLjI4LjA1LjQuMTZsMS4yNyAxLjI3Yy4yMy4yMi4yMy41NyAwIC43OGwtMSAxLTIuMDUtMi4wNSAxLTFjLjEtLjExLjI0LS4xNi4zOC0uMTZtLTEuOTcgMS43NCAyLjA2IDIuMDYtNi4wNiA2LjA2SDcuMDd2LTIuMDZsNi4wNi02LjA2WiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--question: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0ibTE1LjA3IDExLjI1LS45LjkyQzEzLjQ1IDEyLjg5IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xMS40NS0yLjExIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MWEyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMC0yIDJIOGE0IDQgMCAwIDEgNC00IDQgNCAwIDAgMSA0IDQgMy4yIDMuMiAwIDAgMS0uOTMgMi4yNU0xMyAxOWgtMnYtMmgyTTEyIDJBMTAgMTAgMCAwIDAgMiAxMmExMCAxMCAwIDAgMCAxMCAxMCAxMCAxMCAwIDAgMCAxMC0xMGMwLTUuNTMtNC41LTEwLTEwLTEwWiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--quote: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE0IDE3aDNsMi00VjdoLTZ2NmgzTTYgMTdoM2wyLTRWN0g1djZoM2wtMiA0WiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-admonition-icon--success: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTIxIDcgOSAxOWwtNS41LTUuNSAxLjQxLTEuNDFMOSAxNi4xNyAxOS41OSA1LjU5IDIxIDdaIi8+PC9zdmc+"); - --darkreader-bgimg--md-admonition-icon--tip: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE3LjY2IDExLjJjLS4yMy0uMy0uNTEtLjU2LS43Ny0uODItLjY3LS42LTEuNDMtMS4wMy0yLjA3LTEuNjZDMTMuMzMgNy4yNiAxMyA0Ljg1IDEzLjk1IDNjLS45NS4yMy0xLjc4Ljc1LTIuNDkgMS4zMi0yLjU5IDIuMDgtMy42MSA1Ljc1LTIuMzkgOC45LjA0LjEuMDguMi4wOC4zMyAwIC4yMi0uMTUuNDItLjM1LjUtLjIzLjEtLjQ3LjA0LS42Ni0uMTJhLjU4LjU4IDAgMCAxLS4xNC0uMTdjLTEuMTMtMS40My0xLjMxLTMuNDgtLjU1LTUuMTJDNS43OCAxMCA0Ljg3IDEyLjMgNSAxNC40N2MuMDYuNS4xMiAxIC4yOSAxLjUuMTQuNi40MSAxLjIuNzEgMS43MyAxLjA4IDEuNzMgMi45NSAyLjk3IDQuOTYgMy4yMiAyLjE0LjI3IDQuNDMtLjEyIDYuMDctMS42IDEuODMtMS42NiAyLjQ3LTQuMzIgMS41My02LjZsLS4xMy0uMjZjLS4yMS0uNDYtLjc3LTEuMjYtLjc3LTEuMjZtLTMuMTYgNi4zYy0uMjguMjQtLjc0LjUtMS4xLjYtMS4xMi40LTIuMjQtLjE2LTIuOS0uODIgMS4xOS0uMjggMS45LTEuMTYgMi4xMS0yLjA1LjE3LS44LS4xNS0xLjQ2LS4yOC0yLjIzLS4xMi0uNzQtLjEtMS4zNy4xNy0yLjA2LjE5LjM4LjM5Ljc2LjYzIDEuMDYuNzcgMSAxLjk4IDEuNDQgMi4yNCAyLjguMDQuMTQuMDYuMjguMDYuNDMuMDMuODItLjMzIDEuNzItLjkzIDIuMjdaIi8+PC9zdmc+"); - --darkreader-bgimg--md-admonition-icon--warning: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEzIDE0aC0yVjloMm0wIDloLTJ2LTJoMk0xIDIxaDIyTDEyIDIgMSAyMVoiLz48L3N2Zz4="); + --darkreader-bgimg--md-admonition-icon--note: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--abstract: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--info: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--tip: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--success: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--question: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--warning: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--failure: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--danger: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--bug: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--example: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-admonition-icon--quote: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset .admonition, .md-typeset details { - background-color: var(--darkreader-bg--md-admonition-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-admonition-bg-color); border-color: rgb(0, 59, 158); box-shadow: var(--darkreader-bg--md-shadow-z1); - color: var(--darkreader-text--md-admonition-fg-color, #e8e6e3); + color: var(--darkreader-text--md-admonition-fg-color); } .md-typeset .admonition-title, .md-typeset summary { background-color: rgba(0, 61, 163, 0.1); border-color: initial; - border-style: none; - border-width: initial; } .md-typeset .admonition-title::before, .md-typeset summary::before { @@ -831,7 +866,7 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } .md-typeset .admonition-title code, .md-typeset summary code { - box-shadow: 0 0 0 .05rem var(--darkreader-bg--md-default-fg-color--lightest); + box-shadow: 0 0 0 0.05rem var(--darkreader-bg--md-default-fg-color--lightest); } .md-typeset :-webkit-any(.admonition, details):-webkit-any(.note) { border-color: rgb(0, 59, 158); @@ -1122,36 +1157,36 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { color: rgb(171, 163, 152); } :root { - --darkreader-bgimg--md-footnotes-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5IDd2NEg1LjgzbDMuNTgtMy41OUw4IDZsLTYgNiA2IDYgMS40MS0xLjQyTDUuODMgMTNIMjFWN2gtMloiLz48L3N2Zz4="); + --darkreader-bgimg--md-footnotes-icon: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset .footnote { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset .footnote > ol > li:target { - color: var(--darkreader-text--md-default-fg-color, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color); } .md-typeset [id^="fnref:"]:target > .footnote-ref { outline-color: initial; } .md-typeset .footnote-backref { - color: var(--darkreader-text--md-typeset-a-color, #e8e6e3); + color: var(--darkreader-text--md-typeset-a-color); } .md-typeset .footnote-backref:hover { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset .footnote-backref::before { background-color: currentcolor; } .md-typeset .headerlink { - color: var(--darkreader-text--md-default-fg-color--lighter, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--lighter); } .md-typeset .headerlink:-webkit-any(:focus, :hover), .md-typeset :target > .headerlink { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset .headerlink:is(:focus, :hover), .md-typeset :target > .headerlink { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset :target { --md-scroll-margin: 3.6rem; @@ -1172,19 +1207,19 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { --md-scroll-offset: 0.15rem; } .md-typeset del.critic { - background-color: var(--darkreader-bg--md-typeset-del-color, #181a1b); + background-color: var(--darkreader-bg--md-typeset-del-color); } .md-typeset ins.critic { - background-color: var(--darkreader-bg--md-typeset-ins-color, #181a1b); + background-color: var(--darkreader-bg--md-typeset-ins-color); } .md-typeset .critic.comment { - color: var(--darkreader-text--md-code-hl-comment-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-comment-color); } .md-typeset .critic.block { box-shadow: none; } :root { - --darkreader-bgimg--md-details-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTguNTkgMTYuNTggMTMuMTcgMTIgOC41OSA3LjQxIDEwIDZsNiA2LTYgNi0xLjQxLTEuNDJaIi8+PC9zdmc+"); + --darkreader-bgimg--md-details-icon: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset details:not([open]) { box-shadow: none; @@ -1206,122 +1241,122 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { fill: currentcolor; } .highlight :-webkit-any(.o, .ow) { - color: var(--darkreader-text--md-code-hl-operator-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-operator-color); } .highlight :is(.o, .ow) { - color: var(--darkreader-text--md-code-hl-operator-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-operator-color); } .highlight .p { - color: var(--darkreader-text--md-code-hl-punctuation-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-punctuation-color); } .highlight :-webkit-any(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) { - color: var(--darkreader-text--md-code-hl-string-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-string-color); } .highlight :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) { - color: var(--darkreader-text--md-code-hl-string-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-string-color); } .highlight :-webkit-any(.cp, .se, .sh, .sr, .sx) { - color: var(--darkreader-text--md-code-hl-special-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-special-color); } .highlight :is(.cp, .se, .sh, .sr, .sx) { - color: var(--darkreader-text--md-code-hl-special-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-special-color); } .highlight :-webkit-any(.m, .mb, .mf, .mh, .mi, .il, .mo) { - color: var(--darkreader-text--md-code-hl-number-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-number-color); } .highlight :is(.m, .mb, .mf, .mh, .mi, .il, .mo) { - color: var(--darkreader-text--md-code-hl-number-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-number-color); } .highlight :-webkit-any(.k, .kd, .kn, .kp, .kr, .kt) { - color: var(--darkreader-text--md-code-hl-keyword-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-keyword-color); } .highlight :is(.k, .kd, .kn, .kp, .kr, .kt) { - color: var(--darkreader-text--md-code-hl-keyword-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-keyword-color); } .highlight :-webkit-any(.kc, .n) { - color: var(--darkreader-text--md-code-hl-name-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-name-color); } .highlight :is(.kc, .n) { - color: var(--darkreader-text--md-code-hl-name-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-name-color); } .highlight :-webkit-any(.no, .nb, .bp) { - color: var(--darkreader-text--md-code-hl-constant-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-constant-color); } .highlight :is(.no, .nb, .bp) { - color: var(--darkreader-text--md-code-hl-constant-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-constant-color); } .highlight :-webkit-any(.nc, .ne, .nf, .nn) { - color: var(--darkreader-text--md-code-hl-function-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-function-color); } .highlight :is(.nc, .ne, .nf, .nn) { - color: var(--darkreader-text--md-code-hl-function-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-function-color); } .highlight :-webkit-any(.nd, .ni, .nl, .nt) { - color: var(--darkreader-text--md-code-hl-keyword-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-keyword-color); } .highlight :is(.nd, .ni, .nl, .nt) { - color: var(--darkreader-text--md-code-hl-keyword-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-keyword-color); } .highlight :-webkit-any(.c, .cm, .c1, .ch, .cs, .sd) { - color: var(--darkreader-text--md-code-hl-comment-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-comment-color); } .highlight :is(.c, .cm, .c1, .ch, .cs, .sd) { - color: var(--darkreader-text--md-code-hl-comment-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-comment-color); } .highlight :-webkit-any(.na, .nv, .vc, .vg, .vi) { - color: var(--darkreader-text--md-code-hl-variable-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-variable-color); } .highlight :is(.na, .nv, .vc, .vg, .vi) { - color: var(--darkreader-text--md-code-hl-variable-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-variable-color); } .highlight :-webkit-any(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) { - color: var(--darkreader-text--md-code-hl-generic-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-generic-color); } .highlight :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) { - color: var(--darkreader-text--md-code-hl-generic-color, #e8e6e3); + color: var(--darkreader-text--md-code-hl-generic-color); } .highlight .gd { - background-color: var(--darkreader-bg--md-typeset-del-color, #181a1b); + background-color: var(--darkreader-bg--md-typeset-del-color); } .highlight .gi { - background-color: var(--darkreader-bg--md-typeset-ins-color, #181a1b); + background-color: var(--darkreader-bg--md-typeset-ins-color); } .highlight .hll { - background-color: var(--darkreader-bg--md-code-hl-color, #181a1b); + background-color: var(--darkreader-bg--md-code-hl-color); } .highlight span.filename { - background-color: var(--darkreader-bg--md-default-fg-color--lighter, #181a1b); - border-bottom: .05rem solid var(--darkreader-border--md-default-fg-color--lightest); + background-color: var(--darkreader-bg--md-code-bg-color); + border-bottom: 0.05rem solid var(--darkreader-border--md-default-fg-color--lightest); } .highlight [data-linenos]::before { - background-color: var(--darkreader-bg--md-code-bg-color, #181a1b); - box-shadow: -.05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + background-color: var(--darkreader-bg--md-code-bg-color); + box-shadow: -0.05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; + color: var(--darkreader-text--md-default-fg-color--light); } .highlighttable .linenos { - background-color: var(--darkreader-bg--md-code-bg-color, #181a1b); + background-color: var(--darkreader-bg--md-code-bg-color); } .highlighttable .linenodiv { - box-shadow: -.05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; + box-shadow: -0.05rem 0 var(--darkreader-bg--md-default-fg-color--lightest) inset; } .highlighttable .linenodiv pre { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .linenodiv a { color: inherit; } .md-typeset .keys span { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } :root { - --darkreader-bgimg--md-tabbed-icon--next: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTguNTkgMTYuNTggMTMuMTcgMTIgOC41OSA3LjQxIDEwIDZsNiA2LTYgNi0xLjQxLTEuNDJaIi8+PC9zdmc+"); - --darkreader-bgimg--md-tabbed-icon--prev: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE1LjQxIDE2LjU4IDEwLjgzIDEybDQuNTgtNC41OUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MloiLz48L3N2Zz4="); + --darkreader-bgimg--md-tabbed-icon--prev: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-tabbed-icon--next: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset .tabbed-set > input:target { --md-scroll-offset: 0.625em; } .md-typeset .tabbed-labels { - box-shadow: 0 -.05rem var(--darkreader-bg--md-default-fg-color--lightest) inset; + box-shadow: 0 -0.05rem var(--darkreader-bg--md-default-fg-color--lightest) inset; } @media screen { .js .md-typeset .tabbed-labels::before { @@ -1330,26 +1365,28 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { } .md-typeset .tabbed-labels > label { border-bottom-color: transparent; - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset .tabbed-labels > label:hover { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset .tabbed-button { - color: var(--darkreader-text--md-default-fg-color--light, #e8e6e3); + color: var(--darkreader-text--md-default-fg-color--light); } .md-typeset .tabbed-button:hover { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset .tabbed-button::after { background-color: currentcolor; } .md-typeset .tabbed-control { - background: linear-gradient(to right,var(--darkreader-bg--md-default-bg-color) 60%,transparent); + background: linear-gradient(to right, + var(--darkreader-bg--md-default-bg-color) 60%,transparent); } .md-typeset .tabbed-control--next { - background: linear-gradient(to left,var(--darkreader-bg--md-default-bg-color) 60%,transparent); + background: linear-gradient(to left, + var(--darkreader-bg--md-default-bg-color) 60%,transparent); } @media screen { .md-typeset .tabbed-set > input:first-child:checked ~ .tabbed-labels > :first-child, @@ -1372,7 +1409,7 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9) { - color: var(--darkreader-text--md-accent-fg-color, #e8e6e3); + color: var(--darkreader-text--md-accent-fg-color); } .md-typeset .no-js .tabbed-set > input:first-child:checked ~ .tabbed-labels > :first-child, .md-typeset .no-js .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), @@ -1414,7 +1451,7 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { .no-js .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .no-js .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .no-js .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9) { - border-color: var(--darkreader-border--md-accent-fg-color); + border-color: var(--darkreader-border--md-accent-fg-color) ; } } .md-typeset .tabbed-set > input:first-child.focus-visible ~ .tabbed-labels > :first-child, @@ -1437,25 +1474,26 @@ html .md-footer-meta.md-typeset a:is(:focus, :hover) { .md-typeset .tabbed-set > input:nth-child(7).focus-visible ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(8).focus-visible ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(9).focus-visible ~ .tabbed-labels > :nth-child(9) { - background-color: var(--darkreader-bg--md-accent-fg-color--transparent, #181a1b); + background-color: var(--darkreader-bg--md-accent-fg-color--transparent); } :root { - --darkreader-bgimg--md-tasklist-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMSAxMkMxIDUuOTI1IDUuOTI1IDEgMTIgMXMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMVMxIDE4LjA3NSAxIDEyem0xNi4yOC0yLjcyYS43NS43NSAwIDAgMC0xLjA2LTEuMDZsLTUuOTcgNS45Ny0yLjQ3LTIuNDdhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNmwzIDNhLjc1Ljc1IDAgMCAwIDEuMDYgMGw2LjUtNi41eiIvPjwvc3ZnPg=="); - --darkreader-bgimg--md-tasklist-icon--checked: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMSAxMkMxIDUuOTI1IDUuOTI1IDEgMTIgMXMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMVMxIDE4LjA3NSAxIDEyem0xNi4yOC0yLjcyYS43NS43NSAwIDAgMC0xLjA2LTEuMDZsLTUuOTcgNS45Ny0yLjQ3LTIuNDdhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNmwzIDNhLjc1Ljc1IDAgMCAwIDEuMDYgMGw2LjUtNi41eiIvPjwvc3ZnPg=="); + --darkreader-bgimg--md-tasklist-icon: url("data:image/svg+xml;charset=utf-8,"); + --darkreader-bgimg--md-tasklist-icon--checked: url("data:image/svg+xml;charset=utf-8,"); } .md-typeset .task-list-indicator::before { - background-color: var(--darkreader-bg--md-default-fg-color--lightest, #181a1b); + background-color: var(--darkreader-bg--md-default-fg-color--lightest); } .md-typeset [type="checkbox"]:checked + .task-list-indicator::before { background-color: rgb(43, 255, 152); } :root > * { + --md-mermaid-font-family: var(--md-text-font-family), + sans-serif; --md-mermaid-edge-color: var(--md-code-fg-color); - --md-mermaid-font-family: var(--md-text-font-family),sans-serif; - --md-mermaid-label-bg-color: var(--md-default-bg-color); - --md-mermaid-label-fg-color: var(--md-code-fg-color); --md-mermaid-node-bg-color: var(--md-accent-fg-color--transparent); --md-mermaid-node-fg-color: var(--md-accent-fg-color); + --md-mermaid-label-bg-color: var(--md-default-bg-color); + --md-mermaid-label-fg-color: var(--md-code-fg-color); } a { color: rgb(94, 165, 234); @@ -1464,7 +1502,7 @@ a:hover { color: rgb(102, 177, 250); } a:active { - color: rgb(249, 146, 97); + color: rgb(255, 180, 29); } * { -webkit-tap-highlight-color: transparent; @@ -1474,59 +1512,61 @@ table.sortable thead { color: rgb(168, 160, 149); } hr { + border-top-color: initial; + border-right-color: initial; + border-left-color: initial; border-bottom-color: rgb(62, 68, 70); - border-left: 0px; - border-right: 0px; - border-top: 0px; } .dashed { border-bottom-color: rgb(62, 68, 70); } .form-area { - background-color: rgb(27, 29, 30); background-image: initial; + background-color: rgb(27, 29, 30); border-color: rgb(62, 68, 70); } footer { color: rgb(152, 143, 129); } body { - background-color: rgb(27, 29, 30); background-image: initial; + background-color: rgb(27, 29, 30); color: rgb(232, 230, 227); } header { - background-color: rgb(13, 14, 14); background-image: initial; + background-color: rgb(13, 14, 14); color: rgb(178, 172, 162); } -#user-links:hover { - border-color: rgb(140, 130, 115); - color: rgb(232, 230, 227); +#user-links { + color: rgb(176, 170, 159); } #nav-shadow { + background-image: linear-gradient(rgb(49, 53, 55), + rgba(0, 0, 0, 0)); background-color: initial; - background-image: linear-gradient(rgb(49, 53, 55), rgba(0, 0, 0, 0)); } #nav-container { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(24, 26, 27); } nav ul { - background-color: transparent; - background-image: initial; list-style-image: initial; + background-image: initial; + background-color: transparent; } nav ul li { color: rgb(232, 230, 227); } nav ul li.home-nav-element a:hover { - border-bottom: none; + border-bottom-color: initial; } nav ul li a, nav ul li button { - color: rgb(232, 230, 227); text-decoration-color: initial; + color: rgb(232, 230, 227); + border-top-color: transparent; + border-bottom-color: transparent; } nav ul li a:link, nav ul li button:link { @@ -1534,25 +1574,27 @@ nav ul li button:link { } nav ul li a:hover, nav ul li button:hover { - background-color: rgba(24, 26, 27, 0.25); - background-image: initial; border-top-color: rgb(199, 70, 8); - color: rgb(232, 230, 227); + color: rgb(239, 120, 120); + background-image: initial; + background-color: rgba(24, 26, 27, 0.25); } nav ul li a.active, nav ul li button.active { border-top-color: rgb(199, 70, 8); color: rgb(249, 146, 97); + background-image: initial; + background-color: rgb(24, 26, 27); } nav ul li ul { - background-color: rgb(24, 26, 27); - background-image: initial; - box-shadow: rgba(0, 0, 0, 0.4) 2px 2px 4px; color: rgb(232, 230, 227); + background-image: initial; + background-color: rgb(24, 26, 27); + box-shadow: rgba(0, 0, 0, 0.4) 2px 2px 4px; } nav ul li ul li:hover { - background-color: rgb(49, 53, 55); background-image: initial; + background-color: rgb(49, 53, 55); } nav ul li ul li a { color: rgb(232, 230, 227) !important; @@ -1562,16 +1604,17 @@ nav ul li ul li button { border-left-color: rgb(140, 130, 115); } nav ul li button { - background-color: initial; background-image: none; + background-color: initial; border-color: initial; - border-style: none; - border-width: initial; } nav ul li.home-nav-element a:hover { - background-color: transparent; + border-bottom-color: initial; background-image: initial; - border-bottom: 0px; + background-color: transparent; +} +nav .nav-divider { + border-right-color: rgba(48, 52, 54, 0.15); } hr { color: rgba(232, 230, 227, 0.2); @@ -1580,22 +1623,22 @@ hr { color: rgb(199, 194, 187); } footer { - background-color: rgb(34, 37, 38); - background-image: initial; border-top-color: rgb(62, 68, 70); + background-image: initial; + background-color: rgb(34, 37, 38); } a { text-decoration-color: initial; } noscript #noscript { - background-color: rgb(139, 0, 0); - background-image: initial; color: rgb(232, 230, 227); + background-image: initial; + background-color: rgb(139, 0, 0); } #announcement { - background-color: rgb(139, 0, 0); - background-image: initial; color: rgb(232, 230, 227); + background-image: initial; + background-color: rgb(139, 0, 0); } #announcement a { color: rgb(255, 174, 26); @@ -1605,52 +1648,57 @@ noscript #noscript { } #form-errors, .form-errors { - background-color: rgba(204, 0, 0, 0.3); background-image: initial; + background-color: rgba(204, 0, 0, 0.3); border-color: rgb(179, 0, 0); } #nav-placeholder { - background-color: rgb(24, 26, 27); background-image: initial; - border-left-color: rgb(62, 68, 70); + background-color: rgb(24, 26, 27); border-right-color: rgb(62, 68, 70); + border-left-color: rgb(62, 68, 70); } #contest-info a { color: rgb(232, 230, 227); } #contest-info-main { - background-color: rgba(0, 0, 0, 0.77); - background-image: initial; border-left-color: rgb(48, 52, 54); + background-image: initial; + background-color: rgba(0, 0, 0, 0.77); color: rgb(232, 230, 227); } .contest-info-toggle-mode-on { - background-color: rgba(0, 164, 0, 0.57); background-image: initial; + background-color: rgba(0, 164, 0, 0.57); } .contest-info-toggle-mode-on:hover { - background-color: rgba(0, 164, 0, 0.97); background-image: initial; + background-color: rgba(0, 164, 0, 0.97); } .contest-info-toggle-mode-off { - background-color: rgba(204, 0, 0, 0.57); background-image: initial; + background-color: rgba(204, 0, 0, 0.57); } .contest-info-toggle-mode-off:hover { - background-color: rgba(204, 0, 0, 0.97); background-image: initial; + background-color: rgba(204, 0, 0, 0.97); } #page-container { - border-left-color: rgb(62, 68, 70); border-right-color: rgb(62, 68, 70); + border-left-color: rgb(62, 68, 70); + background-image: initial; + background-color: rgb(24, 26, 27); +} +.MathJax:focus { + outline-color: initial; } @media (max-width: 1498px) { #page-container { - border-left: none; - border-right: none; + border-left-color: initial; + border-right-color: initial; } } -@media (max-width: 799px) { +@media (max-width: 760px) { #navicon { color: rgb(129, 175, 255); } @@ -1659,10 +1707,10 @@ noscript #noscript { text-shadow: rgb(24, 26, 27) 0px 0px 5px; } #nav-list { - background-color: rgb(24, 26, 27); background-image: initial; - border-color: initial; + background-color: rgb(24, 26, 27); box-shadow: none; + border-color: initial; } } #notification { @@ -1672,10 +1720,10 @@ noscript #noscript { color: rgb(178, 171, 161); } #chat-icon { - color: rgb(200, 196, 189); + color: rgb(87, 225, 217); } #chat-icon:hover { - color: rgb(249, 146, 97); + color: rgb(200, 196, 189); } #nav-lang-icon { color: rgb(51, 125, 255); @@ -1687,25 +1735,16 @@ noscript #noscript { color: rgb(152, 143, 129); } .dropdown { + border-color: rgb(60, 65, 68); + background-image: initial; background-color: rgb(24, 26, 27); - box-shadow: rgba(0, 0, 0, 0.2) 0px 8px 16px 0px; } .dropdown a { color: rgb(232, 230, 227); - text-decoration-color: initial; -} -.dropdown-item { - border-top-color: rgb(62, 68, 70); - color: rgb(232, 230, 227); } .dropdown-item:hover { - background-color: rgb(31, 31, 17); - color: rgb(249, 146, 97); -} -.popper-arrow, -.popper-arrow::before { - background-color: inherit; - background-image: inherit; + background-image: initial; + background-color: rgb(49, 53, 55); } .unread_boxes { background-color: rgb(204, 0, 0); @@ -1753,75 +1792,16 @@ noscript #noscript { .background-bisque { background-color: rgb(86, 47, 0); } -.background-royalblue { - background-color: rgb(25, 58, 158) !important; -} -.background-green { - background-color: rgb(32, 134, 55) !important; -} -.background-red { - background-color: rgb(165, 29, 42) !important; -} .background-footer { color: rgb(152, 143, 129); } -#loading-bar { - background-color: rgb(125, 44, 5); -} -.anon a { - color: rgb(232, 230, 227); -} -@media (min-width: 800px) { - #page-container { - background-color: rgb(32, 34, 36); - background-image: initial; - } - #content.wrapper { - background-color: rgb(24, 26, 27); - background-image: initial; - } -} -.colored-text { - color: rgb(232, 230, 227); -} -::-webkit-input-placeholder { - color: rgb(249, 146, 97); -} -::placeholder { - color: rgb(249, 146, 97); -} -input::-webkit-input-placeholder { - color: rgb(249, 146, 97); -} -input::placeholder { - color: rgb(249, 146, 97); -} -::-webkit-input-placeholder { - color: rgb(249, 146, 97); -} -.nav-fa-icon i { - color: rgb(232, 230, 227); -} -.nav-fa-icon-active i { - color: rgb(249, 146, 97); -} .table { - background-color: rgba(0, 0, 0, 0.01); background-image: initial; + background-color: rgba(0, 0, 0, 0.01); } .table.striped tr:nth-child(2n) { + background-image: initial; background-color: rgb(29, 31, 32); - background-image: initial; -} -.table.striped tr:nth-child(2n+1) { - background-color: rgb(24, 26, 27); - background-image: initial; -} -.table.no-border td, -.table.no-border th { - border-color: initial; - border-style: none; - border-width: initial; } .table td:first-child { border-color: rgb(62, 68, 70); @@ -1829,10 +1809,13 @@ input::placeholder { .table tr:last-child td { border-color: rgb(62, 68, 70); } -.table th { - background-color: rgb(174, 132, 26); +.table tr:last-child td:first-child { border-color: rgb(62, 68, 70); +} +.table th { color: rgb(232, 230, 227); + background-color: rgb(0, 0, 100); + border-color: rgb(62, 68, 70); } .table td { border-color: rgb(62, 68, 70); @@ -1845,16 +1828,16 @@ input::placeholder { color: rgb(232, 230, 227); } .AC { - background-color: rgb(0, 102, 0); - color: rgb(232, 230, 227); + background-color: rgb(62, 163, 11); + color: rgb(114, 255, 114); } ._AC { - background-color: rgb(93, 132, 0); - color: rgb(232, 230, 227); + background-color: rgb(139, 153, 0); + color: rgb(114, 255, 114); } .WA { - background-color: rgb(204, 0, 0); - color: rgb(232, 230, 227); + background-color: rgb(53, 57, 59); + color: rgb(240, 48, 99); } .TLE, .MLE { @@ -1878,8 +1861,8 @@ input::placeholder { } .QU, .G { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(24, 26, 27); color: rgb(232, 230, 227); } .judge-online { @@ -1898,17 +1881,17 @@ input::placeholder { color: rgb(255, 70, 70) !important; } .left-sidebar-item.active { - background-color: rgb(125, 44, 5); - color: rgb(232, 230, 227); + color: rgb(114, 255, 114); + background-color: rgb(40, 111, 17); } .left-sidebar-item.active .sidebar-icon { - color: rgb(232, 230, 227); + color: rgb(114, 255, 114); } .blog-sidebox .contest { border-bottom-color: rgb(62, 68, 70); } .blog-sidebox .contest:last-child { - border-bottom: none; + border-bottom-color: initial; } .blog-sidebox .contest .name a { color: rgb(104, 149, 191) !important; @@ -1923,21 +1906,18 @@ input::placeholder { color: rgb(178, 172, 162); } .rssatom span { - background-color: initial; - background-image: linear-gradient(135deg, rgb(175, 79, 22) 0px, rgb(169, 90, 3) 47%, rgb(175, 79, 22) 100%); - border-color: rgb(174, 78, 16); color: rgb(232, 230, 227); + border-color: rgb(174, 78, 16); + background-image: linear-gradient(135deg, + rgb(175, 79, 22) 0px, + rgb(169, 90, 3) 47%, + rgb(175, 79, 22) 100%); + background-color: initial; } .blog-box { - background-color: rgb(24, 26, 27); border-bottom-color: rgb(60, 65, 68); border-top-color: rgb(60, 65, 68); - box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 5px; -} -.blog-box:hover, -.blog-box:not(.pre-expand-blog) { - border-color: rgb(81, 88, 91); - box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 2px; + background-color: rgb(24, 26, 27); } .problem-feed-name a { color: rgb(102, 177, 250); @@ -1945,16 +1925,11 @@ input::placeholder { .problem-feed-types { color: rgb(152, 143, 129); } -.left-sidebar-item { - color: rgb(232, 230, 227); -} .left-sidebar-item:hover { background-color: rgb(40, 43, 45); - color: rgb(232, 230, 227); } .left-sidebar-item.active:hover { - background-color: rgb(125, 44, 5); - color: rgb(232, 230, 227); + background-color: rgb(40, 111, 17); } .sidebar-icon { color: rgb(232, 230, 227); @@ -1964,37 +1939,19 @@ input::placeholder { color: rgb(232, 230, 227); } .show-more { - background-color: initial; - background-image: linear-gradient(rgba(0, 0, 0, 0), rgb(24, 26, 27)); - color: rgb(232, 230, 227); -} -.middle-right-content.wrapper { - background-color: rgb(24, 26, 27); - background-image: initial; -} -@media (max-width: 799px) { - .left-sidebar { - background-color: inherit; - background-image: inherit; - } + color: white; + background: linear-gradient(rgba(0, 0, 0, 0), rgb(24, 26, 27)); } + @media (min-width: 800px) { - .left-sidebar-item { - background-color: rgb(24, 26, 27); - border-color: rgb(60, 65, 68); - box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 5px; - } - .left-sidebar::-webkit-scrollbar { - background-color: transparent; - } .blog-box { border-left-color: rgb(60, 65, 68); border-right-color: rgb(60, 65, 68); } } #problem-table tr:hover { - background-color: rgb(36, 39, 40); background-image: initial; + background-color: rgb(36, 39, 40); } ul.problem-list { list-style-image: initial; @@ -2015,8 +1972,8 @@ ul.problem-list { color: rgb(255, 26, 26); } .organization-tag { + box-shadow: rgba(0, 0, 0, 0.12) 0px -0.1em 0px inset; background-color: rgb(53, 57, 59); - color: initial; } .organization-tag a { color: rgb(232, 230, 227); @@ -2025,8 +1982,8 @@ ul.problem-list { color: rgb(242, 59, 63); } .pdf-icon .pdf-icon-bar { - background-color: rgb(170, 11, 15); background-image: initial; + background-color: rgb(170, 11, 15); } .license a { color: rgb(152, 143, 129); @@ -2037,12 +1994,12 @@ ul.problem-list { color: rgb(158, 150, 137); } #problem_submit #language-select2 .select2-results__option { - background-color: rgb(24, 26, 27) !important; - background-image: initial !important; color: rgb(158, 150, 137) !important; + background-image: initial !important; + background-color: rgb(24, 26, 27) !important; } #problem_submit #language-select2 .select2-results__option--highlighted { - text-decoration-color: initial; + text-decoration-color: initial; } #problem_submit #language-select2 .select2-results__option[aria-selected="true"] { color: rgb(232, 230, 227) !important; @@ -2050,6 +2007,16 @@ ul.problem-list { #problem-table th a { color: inherit; } +.problem-feed-option-item { + background-image: initial; + background-color: rgb(49, 53, 55); + color: rgb(152, 143, 129); +} +.problem-feed-option-item.active { + background-image: initial; + background-color: rgb(27, 73, 88); + color: rgb(121, 170, 255); +} .problem-data-form .bad-file input, .problem-data-form .bad-file .select2-selection { border-color: rgb(179, 0, 0); @@ -2070,10 +2037,6 @@ ul.problem-list { #comment-announcement:hover { background-color: rgb(96, 104, 108); } -.new-problem-info { - background-color: rgb(54, 39, 0); - border-color: rgb(140, 130, 115); -} .admin a, .admin { color: rgb(232, 230, 227) !important; @@ -2126,8 +2089,8 @@ svg.rate-box.rate-target path { fill: rgb(255, 37, 37); } svg.rate-box.rate-target circle:last-child { - fill: rgb(255, 37, 37); stroke: none; + fill: rgb(255, 37, 37); } .rate-none, .rate-none a { @@ -2172,19 +2135,19 @@ svg.rate-box.rate-target circle:last-child { color: rgb(232, 230, 227); } #users-table th a:hover { - color: rgb(255, 211, 147); + color: rgb(26, 255, 26); } #users-table tr:hover { - background-color: rgb(36, 39, 40); background-image: initial; + background-color: rgb(36, 39, 40); } #users-table tr.highlight { - background-color: rgb(85, 79, 0); background-image: initial; + background-color: rgb(85, 79, 0); } #users-table tr:target { - background-color: rgb(85, 79, 0); background-image: initial; + background-color: rgb(85, 79, 0); } #users-table .organization-column a { color: rgb(152, 143, 129) !important; @@ -2193,8 +2156,8 @@ svg.rate-box.rate-target circle:last-child { background-color: rgb(103, 0, 0) !important; } #users-table .frozen { - background-color: rgb(5, 77, 121) !important; background-image: initial !important; + background-color: rgb(5, 77, 121) !important; } #users-table .full-score, #users-table .full-score a { @@ -2230,7 +2193,7 @@ svg.rate-box.rate-target circle:last-child { border-top-color: rgb(84, 91, 94); } #users-table .fullname-column { - border-right: none !important; + border-right-color: initial !important; } #users-table .fullname-column span { color: rgb(152, 143, 129) !important; @@ -2251,46 +2214,43 @@ a.user-redirect:hover { border-left-color: rgb(62, 68, 70); } .hide-solved-problems > span::before { - background-color: rgba(0, 0, 0, 0.2); background-image: initial; -} -.user-img { - background-color: rgb(43, 47, 49); + background-color: rgba(0, 0, 0, 0.2); } .pp-table .pp-weighted { color: rgb(157, 148, 136); } .pp-table div.sub-pp { - border-left: none; + border-left-color: initial; } #pp-load-link-wrapper { border-color: rgb(62, 68, 70); } #rating-tooltip { - background-color: rgba(0, 0, 0, 0.7); background-image: initial; + background-color: rgba(0, 0, 0, 0.7); color: rgb(232, 230, 227); } #rating-tooltip.rate-group { color: rgb(232, 230, 227); } .follow { - background-color: rgb(0, 102, 0); background-image: initial; + background-color: rgb(0, 102, 0); border-color: rgb(19, 122, 19); } .follow:hover { - background-color: rgb(0, 80, 0); background-image: initial; + background-color: rgb(0, 80, 0); } .unfollow { - background-color: rgb(204, 0, 0); background-image: initial; + background-color: rgb(204, 0, 0); border-color: rgb(121, 0, 21); } .unfollow:hover { - background-color: rgb(111, 0, 0); background-image: initial; + background-color: rgb(111, 0, 0); } #submission-activity #submission-activity-actions #year { color: rgb(189, 183, 175); @@ -2325,20 +2285,6 @@ a.user-redirect:hover { .user-stat-header { color: rgb(152, 143, 129); } -.profile-card { - border-color: rgb(58, 62, 65); - box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px; -} -.profile-card:hover { - box-shadow: rgba(0, 0, 0, 0.2) 0px 8px 16px; -} -.profile-card .card-header { - background-color: rgb(29, 31, 32); -} -.profile-card .medal-count { - background-color: rgba(37, 40, 42, 0.7); - color: rgb(232, 230, 227); -} .content-description pre, .content-description code, .content-description kbd, @@ -2348,51 +2294,47 @@ a.user-redirect:hover { } .content-description code, .content-description span.code { - background-color: var(--darkreader-bg--md-code-bg-color, #181a1b); - color: var(--darkreader-text--md-code-fg-color, #e8e6e3); + border-color: rgb(62, 68, 70); + background-color: rgb(28, 30, 31); + color: rgb(189, 183, 175); } .content-description pre { - background-color: var(--darkreader-bg--md-code-bg-color, #181a1b); - color: var(--darkreader-text--md-code-fg-color, #e8e6e3); + border-color: rgb(62, 68, 70); + background-color: rgb(28, 30, 31); + color: rgb(232, 230, 227); } .content-description pre code, .content-description pre div.code { - background-color: transparent; - background-image: initial; border-color: initial; - border-style: initial; - border-width: 0px; - color: var(--darkreader-text--md-code-fg-color, #e8e6e3); + background-image: initial; + background-color: transparent; + color: rgb(232, 230, 227); } .content-description pre.no-border { - background-color: inherit; border-color: initial; - border-style: none; - border-width: initial; + background-color: inherit; } .content-description ins { - background-color: rgb(84, 84, 0); background-image: initial; + background-color: rgb(84, 84, 0); color: rgb(232, 230, 227); text-decoration-color: initial; } .content-description mark { - background-color: rgb(153, 153, 0); background-image: initial; + background-color: rgb(153, 153, 0); color: rgb(232, 230, 227); } .content-description img { border-color: initial; - border-style: initial; - border-width: 0px; } .codehilitetable pre { background-color: rgba(35, 38, 39, 0.5); } .codehilitetable .linenos pre { - background-color: rgba(0, 0, 0, 0.07); - border-right: 0px; color: rgba(232, 230, 227, 0.26); + background-color: rgba(0, 0, 0, 0.07); + border-right-color: initial; } .info-float .fa { color: rgb(232, 230, 227); @@ -2404,136 +2346,102 @@ a.user-redirect:hover { color: rgb(132, 183, 237); } .gplus-this i { - color: rgb(224, 90, 72); + color: rgb(224, 90, 72); } -.button, -button, -input[type="submit"] { - background-color: rgb(125, 44, 5); +.button, button, input[type="submit"] { + background-color: rgb(200, 80, 0); border-color: transparent; box-shadow: rgba(0, 0, 0, 0.02) 0px 1px 3px 0px; - color: rgb(232, 230, 227) !important; text-decoration-color: initial; + color: rgb(232, 230, 227) !important; } -.button.disabled, -.button[disabled], -button.disabled, -button[disabled], -input[type="submit"].disabled, -input[type="submit"][disabled] { +.button.disabled, button.disabled, input[type="submit"].disabled { + background-image: linear-gradient(rgb(73, 79, 82) 0px, + rgb(96, 104, 108) 100%) !important; background-color: initial !important; - background-image: linear-gradient(rgb(73, 79, 82) 0px, rgb(96, 104, 108) 100%) !important; - border-color: rgb(84, 91, 94) !important; + border-color: rgb(84, 91, 94) !important; } -.button.btn-gray, -button.btn-gray, -input[type="submit"].btn-gray { - background-color: rgb(96, 104, 108); +.button.btn-gray, button.btn-gray, input[type="submit"].btn-gray { background-image: initial; + background-color: rgb(96, 104, 108); } -.button.btn-hovergray:hover, -button.btn-hovergray:hover, -input[type="submit"].btn-hovergray:hover { - background-color: rgb(49, 53, 55); +.button.btn-hovergray:hover, button.btn-hovergray:hover, input[type="submit"].btn-hovergray:hover { background-image: initial; + background-color: rgb(49, 53, 55); } -.button.btn-green, -button.btn-green, -input[type="submit"].btn-green { - background-color: rgb(32, 134, 55); +.button.btn-green, button.btn-green, input[type="submit"].btn-green { background-image: initial; + background-color: rgb(0, 102, 0); } -.button.btn-green:hover, -button.btn-green:hover, -input[type="submit"].btn-green:hover { - background-color: rgb(0, 102, 0); +.button.btn-green:hover, button.btn-green:hover, input[type="submit"].btn-green:hover { background-image: initial; + background-color: rgb(35, 121, 60); } -.button.btn-darkred, -button.btn-darkred, -input[type="submit"].btn-darkred { - background-color: rgb(111, 0, 0); +.button.btn-darkred, button.btn-darkred, input[type="submit"].btn-darkred { background-image: initial; + background-color: rgb(111, 0, 0); } -.button.btn-darkred:hover, -button.btn-darkred:hover, -input[type="submit"].btn-darkred:hover { - background-color: rgb(132, 34, 34); +.button.btn-darkred:hover, button.btn-darkred:hover, input[type="submit"].btn-darkred:hover { background-image: initial; + background-color: rgb(132, 34, 34); } -.button.btn-midnightblue, -button.btn-midnightblue, -input[type="submit"].btn-midnightblue { - background-color: rgb(20, 20, 90); +.button.btn-midnightblue, button.btn-midnightblue, input[type="submit"].btn-midnightblue { background-image: initial; + background-color: rgb(20, 20, 90); } -.button.btn-midnightblue:hover, -button.btn-midnightblue:hover, -input[type="submit"].btn-midnightblue:hover { - background-color: rgb(0, 0, 111); +.button.btn-midnightblue:hover, button.btn-midnightblue:hover, input[type="submit"].btn-midnightblue:hover { background-image: initial; + background-color: rgb(0, 0, 111); } -.button.btn-darkGreen, -button.btn-darkGreen, -input[type="submit"].btn-darkGreen { - background-color: rgb(125, 44, 5); - background-image: initial; +.button:hover, button:hover, input[type="submit"]:hover { + background-color: rgb(173, 72, 3); + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px; } -.button:hover, -button:hover, -input[type="submit"]:hover { - background-color: rgb(125, 44, 5); - box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px; +.button:focus, button:focus, input[type="submit"]:focus { + background-color: rgb(173, 72, 3); + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px; } -.button:focus, -button:focus, -input[type="submit"]:focus { - background-color: rgb(125, 44, 5); - box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px; +.button:active, button:active, input[type="submit"]:hover { + background-color: rgb(160, 64, 0); + box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 4px; } -.button:active, -button:active, -input[type="submit"]:hover { - background-color: rgb(125, 44, 5); - box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 4px; -} -input[type="text"], -input[type="password"], -input[type="email"], -input[type="number"], -input[type="datetime-local"], -input[type="date"] { - background-color: rgb(24, 26, 27); +input[type="text"], input[type="password"], input[type="email"], input[type="number"] { + color: rgb(178, 172, 162); background-image: none; + background-color: rgb(24, 26, 27); border-color: rgb(62, 68, 70); box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset; - color: rgb(178, 172, 162); } textarea { - background-color: rgb(24, 26, 27); + color: rgb(178, 172, 162); background-image: none; + background-color: rgb(24, 26, 27); border-color: rgb(62, 68, 70); box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset; } textarea:hover { - border-color: rgb(140, 130, 115); -} -input[type="text"]:hover, -input[type="password"]:hover { border-color: rgba(16, 87, 144, 0.8); - box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, rgba(16, 91, 150, 0.6) 0px 0px 4px; + box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, + rgba(16, 91, 150, 0.6) 0px 0px 4px; +} +input[type="text"]:hover, input[type="password"]:hover { + border-color: rgba(16, 87, 144, 0.8); + box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, + rgba(16, 91, 150, 0.6) 0px 0px 4px; } textarea:focus { - border-color: rgb(140, 130, 115); - outline-color: initial; -} -input[type="text"]:focus, -input[type="password"]:focus { border-color: rgba(16, 87, 144, 0.8); - box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, rgba(16, 91, 150, 0.6) 0px 0px 8px; + box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, + rgba(16, 91, 150, 0.6) 0px 0px 8px; outline-color: initial; +} +input[type="text"]:focus, input[type="password"]:focus { + border-color: rgba(16, 87, 144, 0.8); + box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px inset, + rgba(16, 91, 150, 0.6) 0px 0px 8px; outline-color: initial; } -.btn-clipboard:hover { +.btn-clipboard { + color: rgb(157, 149, 136); background-color: rgb(24, 26, 27); border-color: rgb(55, 60, 62); } @@ -2544,10 +2452,9 @@ input[type="password"]:focus { .tabs > ul > li.active > span:hover, .tabs > ul > li.active > a, .tabs > ul > li.active > span { - background-color: transparent; - background-image: initial; - border-bottom-color: rgb(199, 70, 8); - color: rgb(249, 146, 97); + color: rgb(232, 230, 227); + background-color: rgb(24, 26, 27); + border-color: rgb(62, 68, 70) rgb(62, 68, 70) transparent; } .tabs { border-bottom-color: rgb(62, 68, 70); @@ -2568,70 +2475,61 @@ input[type="password"]:focus { .tabs > ul { list-style-image: none; } -.tabs > ul::-webkit-scrollbar { - background-color: transparent; -} -.tabs > ul::-webkit-scrollbar-thumb { - background-color: transparent; -} .tabs > ul > li > a, .tabs > ul > li > span { + border-color: transparent; color: rgb(178, 172, 162); text-decoration-color: initial; } -.tabs > ul > li > a:hover, -.tabs > ul > li > span:hover { - border-bottom-color: rgb(0, 217, 0); -} ul.pagination a:hover { - background-color: rgb(163, 62, 18); - background-image: initial; color: rgb(232, 230, 227); + background-image: initial; + background-color: rgba(0, 0, 0, 0.55); } ul.pagination > li > a, ul.pagination > li > span { - background-color: rgb(24, 26, 27); - border-color: rgb(199, 70, 8); - color: rgb(249, 146, 97); text-decoration-color: initial; + color: rgb(232, 230, 227); + background-color: rgb(0, 0, 100); + border-color: rgb(114, 106, 93); } ul.pagination > .disabled-page > a { - background-color: rgb(137, 78, 57); - border-color: rgb(199, 68, 21); - color: rgb(223, 220, 215); + color: rgb(157, 148, 136); + background-color: rgb(0, 0, 100); + border-color: rgb(127, 118, 104); } ul.pagination > .disabled-page > span { - background-color: rgb(137, 78, 57); - border-color: rgb(199, 68, 21); - color: rgb(223, 220, 215); + color: rgb(157, 148, 136); + background-color: rgb(0, 0, 100); + border-color: rgb(114, 106, 93); } ul.pagination > .active-page > a { - background-color: rgb(125, 44, 5); - border-color: transparent; color: rgb(232, 230, 227); + background-color: rgb(0, 73, 129); + border-color: transparent; } ul.pagination > .active-page > span { + color: rgb(232, 230, 227); background-color: rgb(24, 26, 27); border-color: transparent; - color: rgb(232, 230, 227); } .alert { border-color: transparent; } .alert-info { + color: rgb(117, 178, 208); background-color: rgb(14, 48, 65); border-color: rgb(22, 90, 104); - color: rgb(117, 178, 208); } .alert-warning { + color: rgb(198, 171, 123); background-color: rgb(47, 40, 5); border-color: rgb(108, 76, 11); - color: rgb(198, 171, 123); } .alert-danger { + color: rgb(194, 102, 100); background-color: rgb(56, 22, 22); border-color: rgb(89, 35, 43); - color: rgb(194, 102, 100); } .alert-dismissable .close, .alert-dismissible .close { @@ -2653,37 +2551,32 @@ a.close:hover { text-decoration-color: initial; } .badge { - background-color: rgb(155, 19, 19); color: rgb(232, 230, 227); + background-color: rgb(155, 19, 19); } .form-submit-group { border-top-color: rgb(53, 57, 59); } .sidebox h3 { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(3, 66, 54); + color: rgb(232, 230, 227); } .sidebox h3 .fa { - background-color: rgb(125, 44, 5); - background-image: initial; color: rgb(232, 230, 227); } .sidebox-content { - background-color: rgb(24, 26, 27); - background-image: initial; - border-top: none; + border-right-color: rgb(62, 68, 70); + border-bottom-color: rgb(62, 68, 70); + border-left-color: rgb(62, 68, 70); + border-top-color: initial; } .sidebox-content.sidebox-table { border-color: initial; - border-style: none; - border-width: initial; -} -.sidebox { - box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 5px; } .ws-closed { - background-color: rgb(139, 0, 0); background-image: initial; + background-color: rgb(139, 0, 0); } .ws-closed a { color: rgb(232, 230, 227); @@ -2692,51 +2585,47 @@ a.close:hover { border-color: transparent; } .messages li.debug { + color: rgb(194, 188, 180); background-color: rgb(40, 43, 44); border-color: rgb(59, 64, 66); - color: rgb(194, 188, 180); } .messages li.info { + color: rgb(142, 227, 241); background-color: rgb(20, 59, 67); border-color: rgb(30, 89, 97); - color: rgb(142, 227, 241); } .messages li.success { + color: rgb(153, 230, 171); background-color: rgb(26, 62, 41); border-color: rgb(37, 90, 50); - color: rgb(153, 230, 171); } .messages li.warning { + color: rgb(251, 215, 112); background-color: rgb(61, 46, 0); border-color: rgb(123, 92, 0); - color: rgb(251, 215, 112); } .messages li.error { + color: rgb(225, 134, 143); background-color: rgb(67, 12, 17); border-color: rgb(104, 18, 27); - color: rgb(225, 134, 143); } .spoiler-text { - background-color: rgb(34, 36, 38); - background-image: initial; border-color: rgb(140, 130, 115); + background-image: initial; + background-color: rgb(34, 36, 38); } .spoiler-summary { text-decoration-color: initial; } .control-button { + background-image: initial; + background-color: rgb(49, 53, 55); border-color: initial; - border-style: initial; - border-width: 0px; color: rgb(232, 230, 227) !important; } .control-button:hover { - background-color: rgb(96, 104, 108); background-image: initial; -} -ul.errorlist { - color: rgb(255, 26, 26); - list-style-image: initial; + background-color: rgb(96, 104, 108); } .registration-form .block-header { color: rgb(178, 172, 162); @@ -2748,9 +2637,12 @@ ul.errorlist { color: rgb(255, 26, 26); } .registration-form #edit-form { - background-color: unset; - background-image: unset; border-color: unset; + background-image: unset; + background-color: unset; +} +.registration-form ul.errorlist { + list-style-image: initial; } #login-panel .google-icon i { color: rgb(224, 90, 72); @@ -2761,64 +2653,23 @@ ul.errorlist { #login-panel .github-icon i { color: rgb(232, 230, 227); } -.btn:hover { - color: rgb(209, 205, 199); - text-decoration-color: initial; -} -.link-row a { - color: inherit; - text-decoration-color: initial; -} -.link-row:hover { - background-color: rgb(31, 31, 17); - color: rgb(249, 146, 97); -} -button:hover, -button:focus { - box-shadow: none; - outline-color: initial; - text-decoration-color: initial; -} -.btn { - box-shadow: rgba(0, 0, 0, 0.12) 0px 10px 20px -6px; -} -.btn .icon { - background-color: rgb(24, 26, 27); - background-image: initial; -} -.btn:hover, -.btn:active, -.btn:focus { - outline-color: initial; -} -.btn.btn-primary { - color: rgb(232, 230, 227); -} -.btn.btn-primary .icon i { - color: rgb(97, 217, 124); -} -.btn.btn-disabled { - background-color: rgb(96, 104, 108); - background-image: initial; - border-color: rgb(84, 91, 94); - color: rgb(232, 230, 227); -} a.upvote-link, a.downvote-link { color: rgb(232, 230, 227); } a.voted { - text-shadow: rgb(0, 0, 0) 0px 0px 4px, rgb(0, 0, 204) 0px 0px 9px; + text-shadow: rgb(0, 0, 0) 0px 0px 4px, + rgb(0, 0, 204) 0px 0px 9px; } .comment-area .featherlight-edit .featherlight-content { - background-color: rgb(27, 29, 30); background-image: initial; + background-color: rgb(27, 29, 30); border-color: rgb(62, 68, 70); } .comment-area .new-comments .comment-display { - background-color: rgb(27, 29, 30); - background-image: initial; border-color: rgb(62, 68, 70); + background-image: initial; + background-color: rgb(27, 29, 30); } .comment-area .new-comments .comment .detail .header { border-bottom-color: rgb(82, 88, 92); @@ -2838,10 +2689,10 @@ a.voted { color: rgb(200, 195, 188); } .comment-header { - background-color: rgba(0, 0, 0, 0.1); - background-image: initial; - border-color: rgb(62, 68, 70); color: rgb(231, 229, 226); + background-image: initial; + background-color: rgba(0, 0, 0, 0.1); + border-color: rgb(62, 68, 70); } .comment-edits:not(:empty) { color: rgb(189, 183, 175); @@ -2850,9 +2701,9 @@ a.voted { color: rgb(189, 183, 175); } .comment-box { - background-color: rgba(0, 0, 0, 0.01); - background-image: initial; border-color: rgb(62, 68, 70); + background-image: initial; + background-color: rgba(0, 0, 0, 0.01); } .comment { list-style-image: none; @@ -2861,15 +2712,14 @@ a.voted { border-left-color: rgb(48, 52, 54); } .actionbar .actionbar-button { - background-color: rgb(49, 53, 55); - background-image: initial; + border-color: rgb(60, 65, 68); } .actionbar .actionbar-button:hover { - background-color: rgb(73, 79, 82); background-image: initial; + background-color: rgb(49, 53, 55); } .actionbar .dislike-button { - border-left: 0px; + border-left-color: initial; } .actionbar .like-button.voted { color: rgb(51, 125, 255); @@ -2880,20 +2730,37 @@ a.voted { .actionbar .bookmarked { color: rgb(248, 248, 80); } -.submission-row { - background-color: rgb(24, 26, 27); +#submissions-table { background-image: initial; - box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 4px; + background-color: rgba(0, 0, 0, 0.01); } -.submission-row .sub-result .language { - background-color: rgb(41, 44, 46); +.submission-row { + border-left-color: rgb(62, 68, 70); + border-right-color: rgb(62, 68, 70); } -.submission-row .sub-info .sub-problem:hover { - text-decoration-color: initial; +.submission-row:hover { + background-image: initial; + background-color: rgb(31, 34, 35); +} +.submission-row:first-of-type { + border-top-color: rgb(62, 68, 70); +} +.submission-row > div { + border-bottom-color: rgb(62, 68, 70); +} +.submission-row .sub-result { + border-bottom-color: rgb(48, 52, 54); + border-right-color: rgb(62, 68, 70); +} +.submission-row .sub-result .score { + color: rgb(232, 230, 227); } .submission-row .sub-testcase { color: rgb(178, 172, 162); } +.submission-row .sub-usage { + border-left-color: rgb(62, 68, 70); +} #statistics-table tr:not(:first-child) td { border-top-color: rgb(48, 52, 54) !important; } @@ -2903,6 +2770,19 @@ a.voted { .submission-contest { color: rgb(178, 172, 162); } +.source-ln { + color: rgb(152, 143, 129); + border-right-color: rgb(84, 91, 94); +} +.source-ln a { + color: rgb(152, 143, 129); +} +.source-ln a:hover { + text-decoration-color: initial; +} +.source-wrap { + border-color: rgb(72, 78, 81); +} .statistics-table .count { color: rgb(232, 230, 227); } @@ -2911,28 +2791,36 @@ a.voted { color: rgb(211, 207, 201); } #test-cases .case-output { - border-color: rgba(128, 119, 105, 0.15); box-shadow: rgba(27, 29, 30, 0.15) 0px 1px 2px 0px; + border-color: rgba(128, 119, 105, 0.15); } #test-cases .testcases-table { border-color: initial; } .overall-result-AC { + background-image: linear-gradient(45deg, + rgb(68, 132, 0), + rgb(0, 132, 102)); background-color: initial; - background-image: linear-gradient(45deg, rgb(68, 132, 0), rgb(0, 132, 102)); } .overall-result-WA { + background-image: linear-gradient(45deg, + rgb(153, 153, 0), + rgb(204, 0, 0)); background-color: initial; - background-image: linear-gradient(45deg, rgb(153, 153, 0), rgb(204, 0, 0)); } .overall-result-TLE { + background-image: linear-gradient(45deg, + rgb(42, 45, 47), + rgb(83, 91, 112)); background-color: initial; - background-image: linear-gradient(45deg, rgb(42, 45, 47), rgb(83, 91, 112)); } .overall-result-RTE, .overall-result-MLE { + background-image: linear-gradient(45deg, + rgb(67, 49, 3), + rgb(198, 145, 0)); background-color: initial; - background-image: linear-gradient(45deg, rgb(67, 49, 3), rgb(198, 145, 0)); } .case-AC { color: rgb(114, 255, 114); @@ -2954,17 +2842,12 @@ a.voted { color: rgb(255, 174, 26); } .source-wrap a:active .line .highlighter { - background-color: rgba(153, 127, 0, 0.48); background-image: initial; + background-color: rgba(153, 127, 0, 0.48); } .submission-info .submission-date { color: rgb(152, 143, 129); } -.list-contest { - background-color: rgb(24, 26, 27); - background-image: initial; - box-shadow: rgb(49, 53, 55) 0px 1px 2px, rgb(49, 53, 55) 0px 1px 5px; -} #contest-calendar th { border-bottom-color: rgb(62, 68, 70); } @@ -2978,14 +2861,14 @@ a.voted { #contest-calendar th.thu, #contest-calendar th.fri, #contest-calendar th.sat { - background-color: rgb(27, 29, 30); - background-image: initial; border-right-color: rgb(62, 68, 70); + background-image: initial; + background-color: rgb(27, 29, 30); } #contest-calendar td { - border-bottom-color: rgb(62, 68, 70); - border-right-color: rgb(62, 68, 70); color: rgb(232, 230, 227); + border-right-color: rgb(62, 68, 70); + border-bottom-color: rgb(62, 68, 70); } #contest-calendar td .num { border-bottom-color: rgb(62, 68, 70); @@ -2997,24 +2880,24 @@ a.voted { color: rgb(255, 174, 26); } #contest-calendar td ul li a { - color: rgb(211, 207, 201); text-decoration-color: initial; + color: rgb(211, 207, 201); } #contest-calendar td ul li a:hover { text-decoration-color: initial; } #contest-calendar td:hover { - background-color: rgba(0, 0, 204, 0.3); background-image: initial; + background-color: rgba(0, 0, 204, 0.3); color: rgb(232, 230, 227); } #contest-calendar .noday { - background-color: rgb(32, 35, 36); background-image: initial; + background-color: rgb(32, 35, 36); } #contest-calendar .today { - background-color: rgba(108, 108, 0, 0.5); background-image: initial; + background-color: rgba(108, 108, 0, 0.5); } #contest-calendar tr td:first-child { border-left-color: rgb(72, 78, 81); @@ -3032,13 +2915,19 @@ a.voted { #banner .time { color: rgb(178, 172, 162); } -.list-contest .contest-tag-hidden { +.time-left { + color: rgb(157, 148, 136); +} +.contest-list .contest-tag-hidden { background-color: rgb(0, 0, 0); color: rgb(232, 230, 227); } .first-solve { - background-color: rgb(0, 199, 129); background-image: initial; + background-color: rgb(0, 199, 129); +} +.contest-tag { + box-shadow: rgba(0, 0, 0, 0.12) 0px -0.1em 0px inset; } .contest-tag-edit { background-color: rgb(0, 102, 0); @@ -3070,93 +2959,91 @@ a.voted { color: rgb(26, 255, 255); } #judge-versions .version-blank { - background-color: rgb(34, 36, 38); background-image: initial; + background-color: rgb(34, 36, 38); } #judge-versions .version-latest { - background-color: rgba(88, 125, 0, 0.9); background-image: initial; + background-color: rgba(88, 125, 0, 0.9); } #judge-versions .version-outdated { - background-color: rgba(204, 0, 0, 0.8); background-image: initial; + background-color: rgba(204, 0, 0, 0.8); color: rgb(232, 230, 227); } -.chat { - background-color: rgb(24, 26, 27); - background-image: initial; +#emoji-button { + color: rgb(204, 200, 193); +} +#emoji-button:hover { + color: rgb(152, 143, 129); } #chat-online { - border-bottom: 0px; border-right-color: rgb(62, 68, 70); + border-bottom-color: initial; } #chat-input { - border-color: rgb(140, 130, 115); + border-color: initial; color: rgb(232, 230, 227); } -#chat-input::-webkit-input-placeholder { - color: rgb(152, 143, 129); -} -#chat-input::placeholder { - color: rgb(152, 143, 129); -} -.selected-status-row { - background-color: rgb(49, 53, 55); -} -.status_last_message { - color: rgb(178, 171, 161); -} @media (min-width: 800px) { #chat-container { - border-bottom: 0px; - border-left-color: rgb(62, 68, 70); - border-right-color: rgb(62, 68, 70); border-top-color: rgb(62, 68, 70); + border-right-color: rgb(62, 68, 70); + border-left-color: rgb(62, 68, 70); + border-bottom-color: initial; } } +.info-pic { + border-color: rgb(62, 68, 70); +} +.info-circle { + stroke: rgb(232, 230, 227); +} #chat-info { - box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 3px; + border-bottom-color: rgb(72, 78, 81); +} +#refresh-button { + background-image: initial; + background-color: transparent; + border-color: initial; +} +#refresh-button:hover { + background-image: initial; + background-color: rgb(40, 111, 17); } .status-circle { stroke: rgb(232, 230, 227); } .status-row:hover { - background-color: rgb(49, 53, 55); background-image: initial; + background-color: rgb(49, 53, 55); } .message-text-other { - background-color: rgb(34, 36, 38); background-image: initial; + background-color: rgb(34, 36, 38); color: rgb(232, 230, 227); } .message-text-myself { + background-image: initial; background-color: rgb(0, 106, 204); - background-image: initial; color: rgb(232, 230, 227); } -.chat-input-icon { - background-color: rgb(48, 104, 78); - color: rgb(232, 230, 227); -} -.chat-input-icon:hover { - background-color: rgb(62, 136, 112); - background-image: initial; -} .chat .active-span { color: rgb(169, 162, 151); } .chat .unread-count { - background-color: rgb(0, 111, 111); color: rgb(232, 230, 227); + background-color: rgb(0, 111, 111); } -.chat .setting-content { +.chat #setting-content { background-color: rgb(32, 35, 36); box-shadow: rgba(0, 0, 0, 0.2) 0px 8px 16px 0px; } -.chat .setting-content a { +.chat #setting-content li { text-decoration-color: initial; + color: rgb(232, 230, 227); } -.chat .setting-content a:hover { +.chat #setting-content li:hover { background-color: rgb(43, 47, 49); } .leave-organization, @@ -3167,38 +3054,25 @@ a.voted { border-bottom-color: rgb(140, 130, 115); } #pending-count-box { - background-color: rgb(204, 0, 0); background-image: initial; + background-color: rgb(204, 0, 0); color: rgb(232, 230, 227); } -.organization-card { - background-color: rgb(24, 26, 27); - border-color: rgb(58, 62, 65); - box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 4px; - color: inherit; - text-decoration-color: initial; -} -.organization-card:hover { - color: rgb(249, 146, 97); -} -.organization-card img.org-logo { - background-color: rgb(32, 35, 37); -} .organization-row { - border-bottom-color: rgb(62, 68, 70); - border-top: none; + border-bottom-color: rgb(84, 91, 94); + border-top-color: initial; color: rgb(232, 230, 227); } .organization-row:hover { background-color: rgb(31, 33, 35); } -.org-help-text { - color: rgb(152, 143, 129); +.organization-container { + border-color: rgb(84, 91, 94); } .ticket-container #content > h2:first-child small { color: rgb(168, 160, 149); } -.ticket-container #content > h2:first-child .fa-check-circle { +.ticket-container #content > h2:first-child .fa-check-circle-o { color: rgb(86, 255, 86); } .ticket-container #content > h2:first-child .fa-exclamation-circle { @@ -3208,51 +3082,53 @@ a.voted { border-color: rgb(77, 83, 86); } .ticket-container .info-title { - background-color: rgb(34, 36, 38); - background-image: initial; border-bottom-color: rgb(77, 83, 86); + background-image: initial; + background-color: rgb(34, 36, 38); } .ticket-container .info-empty { color: rgb(168, 160, 149); } .ticket-container .close-ticket { + background-image: linear-gradient(rgb(60, 138, 0) 0%, + rgb(31, 109, 14) 100%); background-color: initial; - background-image: linear-gradient(rgb(60, 138, 0) 0%, rgb(31, 109, 14) 100%); border-color: rgb(61, 193, 24); } .ticket-container .close-ticket:hover { - background-color: rgb(29, 90, 11); background-image: initial; + background-color: rgb(29, 90, 11); } .ticket-container .open-ticket { + background-image: linear-gradient(rgb(195, 3, 0), + rgb(141, 49, 18)); background-color: initial; - background-image: linear-gradient(rgb(195, 3, 0), rgb(141, 49, 18)); border-color: rgb(186, 67, 24); } .ticket-container .open-ticket:hover { - background-color: rgb(106, 38, 14); background-image: initial; + background-color: rgb(106, 38, 14); } .ticket-container .message .detail { border-color: rgb(77, 83, 86); } .ticket-container .message .header { - background-color: rgb(34, 36, 38); background-image: initial; - border-bottom-color: rgb(77, 83, 86); + background-color: rgb(34, 36, 38); color: rgb(157, 148, 136); + border-bottom-color: rgb(77, 83, 86); } .wmd-button-bar { background-color: rgb(24, 26, 27); } .wmd-input { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(24, 26, 27); border-color: rgb(72, 78, 81); } .wmd-preview { - background-color: initial; background-image: none; + background-color: initial; } .wmd-button { list-style-image: initial; @@ -3261,16 +3137,16 @@ a.voted { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iOCIgaGVpZ2h0PSI4Ij48ZGVmcz48ZmlsdGVyIGlkPSJkYXJrcmVhZGVyLWltYWdlLWZpbHRlciI+PGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAuMjQ5IC0wLjYxNCAtMC42NzIgMC4wMDAgMS4wMzUgLTAuNjQ2IDAuMjg4IC0wLjY2NCAwLjAwMCAxLjAyMCAtMC42MzYgLTAuNjA5IDAuMjUwIDAuMDAwIDAuOTk0IDAuMDAwIDAuMDAwIDAuMDAwIDEuMDAwIDAuMDAwIiAvPjwvZmlsdGVyPjwvZGVmcz48aW1hZ2Ugd2lkdGg9IjgiIGhlaWdodD0iOCIgZmlsdGVyPSJ1cmwoI2RhcmtyZWFkZXItaW1hZ2UtZmlsdGVyKSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpT0hCNElpQm9aV2xuYUhROUlqaHdlQ0lnZG1sbGQwSnZlRDBpTUNBd0lEZ2dPQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajROQ2lBZ1BIQmhkR2dnWkQwaVRUQWdNSFl4WXk0MU5TQXdJREVnTGpRMUlERWdNWFkwWXpBZ0xqVTFMUzQwTlNBeExURWdNWFl4YURVdU5XTXhMak00SURBZ01pNDFMVEV1TVRJZ01pNDFMVEl1TlNBd0xURXRMalU1TFRFdU9EVXRNUzQwTkMweUxqSTFMakkzTFM0ek5DNDBOQzB1TnpndU5EUXRNUzR5TlNBd0xURXVNUzB1T0RrdE1pMHlMVEpvTFRWNmJUTWdNV2d4WXk0MU5TQXdJREVnTGpRMUlERWdNWE10TGpRMUlERXRNU0F4YUMweGRpMHllbTB3SUROb01TNDFZeTQ0TXlBd0lERXVOUzQyTnlBeExqVWdNUzQxY3kwdU5qY2dNUzQxTFRFdU5TQXhMalZvTFRFdU5YWXRNM29pSUM4K0RRbzhMM04yWno0PSIgLz48L3N2Zz4="); } .wmd-italic-button { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjUyNSI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSI1MjUiIGhlaWdodD0iNTI1IiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSIiIC8+PC9zdmc+"); + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjUyNSI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSI1MjUiIGhlaWdodD0iNTI1IiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIyWlhKemFXOXVQU0l4TGpFaUlHbGtQU0pEWVhCaFh6RWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR3hwYm1zaUlIZzlJakJ3ZUNJZ2VUMGlNSEI0SWcwS0lDQWdkMmxrZEdnOUlqVXlOUzR4TkRKd2VDSWdhR1ZwWjJoMFBTSTFNalV1TVRReWNIZ2lJSFpwWlhkQ2IzZzlJakFnTUNBMU1qVXVNVFF5SURVeU5TNHhORElpSUhOMGVXeGxQU0psYm1GaWJHVXRZbUZqYTJkeWIzVnVaRHB1WlhjZ01DQXdJRFV5TlM0eE5ESWdOVEkxTGpFME1qc2lEUW9nSUNCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5DanhuUGcwS0lDQThaejROQ2lBZ0lDQThjR0YwYUNCa1BTSk5NemMxTGpVMExEQXVNalEwWXkweE15NHpNellzTVM0Mk9Ea3RNall1T0RNc01pNDROeTAwTUM0ME9UWXNNeTQxTlRaakxURTFMamMwTVN3d0xqYzVOaTB5Tnk0NU9EY3NNUzR4T0RndE16WXVOekkzTERFdU1UZzREUW9nSUNBZ0lDQmpMVEV3TGpBMk55d3dMVEl5TGpBNE55MHdMalV4TkMwek5pNHdOekV0TVM0MU56bGpMVEV5TGpJeU9DMHdMamt4T0MweU5TNHlPREl0TWk0d05TMHpPUzR4TmpJdE15NHpOemhqTFRNdU16WTJMVEF1TXpJMExUWXVPVFU0TERJdU1ERTBMVGN1T0RBekxEVXVNamc0RFFvZ0lDQWdJQ0JqTFRFdU1EVXpMRFF1TURnNExURXVOVGN6TERjdU5ERTRMVEV1TlRjekxEa3VPVGMyWXpBc05pNDROek1zTkM0NE1EUXNNVEV1TURrMUxERTBMalF5TlN3eE1pNDJPR014TWk0Mk9ERXNNUzQxTnprc01qQXVOall4TERVdU1ESTFMREl6TGprME1Td3hNQzR6TURZTkNpQWdJQ0FnSUdNekxqSTRMRFV1TWpneUxEUXVNRE01TERFeUxqWTNOU3d5TGpJNU5Td3lNaTR4T1RGc0xUWTBMakkyTml3ME1ETXVNemswWXkweExqYzFOaXd4TUM0d05ETXROUzQwTnpnc01UY3VOVGMyTFRFeExqRTFOeXd5TWk0MU9Ea05DaUFnSUNBZ0lHTXROUzQyT0RZc05TNHdNalF0TVRRdU1qRXNPQzQxT1RrdE1qVXVOVGMxTERFd0xqWTVOMk10TkM0NE1UWXNNUzR3TmpVdE55NDVPRGNzTWk0Mk5qSXRPUzQxTURRc05DNDNOVFZqTFRFdU5UUXlMREl1TVRFNExUSXVNamsxTERVdU1qZ3lMVEl1TWprMUxEa3VOVEU0RFFvZ0lDQWdJQ0JqTUN3eUxqVTJNeXd3TGpJME5TdzFMak15TkN3d0xqY3lPQ3c0TGpJNFl6QXVOVFExTERNdU16TTFMRE11T1RZMkxEVXVOamszTERjdU16STJMRFV1TXpVMFl6RXlMamMwT0MweExqTXhMREkxTGpJMU55MHlMalF5TkN3ek55NDFNamd0TXk0ek1qa05DaUFnSUNBZ0lHTXhOQzR4T1RndE1TNHdOalVzTWpVdU5qY3pMVEV1TlRjNUxETTBMalF5TlMweExqVTNPV014TUM0d05UVXNNQ3d5TWk0NU5UY3NNQzQxTVRRc016Z3VOamszTERFdU5UYzVZekV6TGpjMk5Dd3dMamt5TkN3eU55NDJPREVzTWk0d05TdzBNUzQzT0RFc015NHpPRFFOQ2lBZ0lDQWdJR016TGpNMk5pd3dMak14T0N3MkxqYzROeTB5TGpBMk9DdzNMak16TWkwMUxqUXdNMk13TGpRNE15MHlMamsxTml3d0xqY3lPUzAxTGpjeExEQXVOekk1TFRndU1qaGpNQzAzTGpNNU5DMDBMakUyTWkweE1pNHhORGd0TVRJdU5EWXhMVEUwTGpJM01nMEtJQ0FnSUNBZ1l5MHhNUzQ0TURZdE1pNDJNemd0TVRrdU9EazJMVFV1T1RReUxUSTBMakkyTmkwNUxqa3dNV010TkM0ek56WXRNeTQ1TmkwMUxqWTROaTB4TVM0eU1qVXRNeTQ1TXpVdE1qRXVOemswVERNek1pNDBNVGdzTmpJdU1EVU5DaUFnSUNBZ0lHTXhMamN6T0MweE1DNDFOak1zTlM0eE1qa3RNVGd1TWpJMUxERXdMakUyTlMweU1pNDVPR00xTGpBeE9TMDBMamMxTlN3eE15NDJOaTA0TGpFNE1pd3lOUzQ1TURZdE1UQXVNekEyWXpZdU1USXRNUzR3TlRNc01UQXVNVGN5TFRJdU5qTTRMREV5TGpFekxUUXVOelUxRFFvZ0lDQWdJQ0JqTVM0NU56RXRNaTR4TURVc01pNDVOUzAxTGpJM05Td3lMamsxTFRrdU5URXhZekF0TWk0Mk9UTXRNQzR5TmpRdE5TNDNNUzB3TGpnd01pMDVMakExTVVNek9ESXVNalF4TERJdU1URXhMRE0zT0M0NE9UUXRNQzR4T0RRc016YzFMalUwTERBdU1qUTBlaUl2UGcwS0lDQThMMmMrRFFvOEwyYytEUW84Wno0TkNqd3ZaejROQ2p4blBnMEtQQzluUGcwS1BHYytEUW84TDJjK0RRbzhaejROQ2p3dlp6NE5DanhuUGcwS1BDOW5QZzBLUEdjK0RRbzhMMmMrRFFvOFp6NE5Dand2Wno0TkNqeG5QZzBLUEM5blBnMEtQR2MrRFFvOEwyYytEUW84Wno0TkNqd3ZaejROQ2p4blBnMEtQQzluUGcwS1BHYytEUW84TDJjK0RRbzhaejROQ2p3dlp6NE5DanhuUGcwS1BDOW5QZzBLUEdjK0RRbzhMMmMrRFFvOEwzTjJaejROQ2c9PSIgLz48L3N2Zz4="); } .wmd-latex-button { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QmxibUZpYkdVdFltRmphMmR5YjNWdVpEMGlibVYzSURBZ01DQTJOQ0EyTkNJZ2FHVnBaMmgwUFNJMk5IQjRJaUJwWkQwaVRHRjVaWEpmTVNJZ2RtVnljMmx2YmowaU1TNHhJaUIyYVdWM1FtOTRQU0l3SURBZ05qUWdOalFpSUhkcFpIUm9QU0kyTkhCNElpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzYVc1cklqNDhjR0YwYUNCa1BTSk5ORFV1TnpNc05qUklNelF1TnpVeVl5MHdMamN4TlN3d0xURXVNamsxTFRBdU1UY3pMVEV1TnpNNExUQXVOVEp6TFRBdU56azBMVEF1TnpVNExURXVNRFUyTFRFdU1qTTBiQzA1TGpRNE5DMHhOaTQxTmpRZ0lHTXRNQzR4TnpRc01DNDBOemd0TUM0ek5qa3NNQzQ0T0RjdE1DNDFPRFFzTVM0eU16UnNMVGd1T0RNMUxERTFMak16WXkwd0xqTXdOQ3d3TGpRek5DMHdMalkyTVN3d0xqZ3pOQzB4TGpBM01pd3hMakl3TVVNeE1TNDFOeklzTmpNdU9ERTJMREV4TGpBME1TdzJOQ3d4TUM0ek9URXNOalJJTUM0eE1qY2dJRXd4TlM0ek5pd3pPUzQyTkRGTU1DNDNNVElzTVRZdU5qYzFTREV4TGpZNVl6QXVOekUwTERBc01TNHlOQ3d3TGpBNU15d3hMalUzTml3d0xqSTNObU13TGpNek5Td3dMakU0TlN3d0xqWXpOQ3d3TGpRNU15d3dMamc1TXl3d0xqa3lObXc1TGpReUxERTFMamswT0NBZ1l6QXVNVEE0TFRBdU1qZ3NNQzR5TXpJdE1DNDFOVElzTUM0ek56UXRNQzQ0TVRKak1DNHhOQzB3TGpJMk1pd3dMakk1Tnkwd0xqVXpNU3d3TGpRM01TMHdMamd4TTJ3NExqSTFMVEUwTGpFMk1XTXdMak13TlMwd0xqUTNOeXd3TGpZeU1pMHdMamd5TXl3d0xqazFPQzB4TGpBMElDQmpNQzR6TXpZdE1DNHlNVGNzTUM0M05USXRNQzR6TWpVc01TNHlOVEV0TUM0ek1qVm9NVEF1TlRJMFRETXdMalUyTWl3ek9TNHhPRFpNTkRVdU56TXNOalI2SWk4K1BIQmhkR2dnWkQwaVRUWXhMamcwTERJekxqZzJZekF1TmpZM0xEQXNNUzR4T1RNc01DNHhPRE1zTVM0MU9Dd3dMalUxWXpBdU16ZzNMREF1TXpZMkxEQXVOVGdzTUM0NE5Td3dMalU0TERFdU5EVjJNeTQyU0RRekxqVXlNWFl0TW1Nd0xUQXVNemczTERBdU1EYzVMVEF1T0N3d0xqSXpPUzB4TGpJMElDQmpNQzR4Tmkwd0xqUXpPU3d3TGpRMExUQXVPRFFzTUM0NE5DMHhMakpzT0M0MExUZ3VORFpqTUM0M01qRXRNQzQzTWl3eExqTTBOeTB4TGpRd05pd3hMamc0TVMweUxqQTJZekF1TlRNekxUQXVOalV6TERBdU9UY3pMVEV1TWprM0xERXVNekU1TFRFdU9UTWdJR013TGpNME55MHdMall6TkN3d0xqWXdOaTB4TGpJMk55d3dMamM0TFRFdU9XTXdMakUzTXkwd0xqWXpNeXd3TGpJMkxURXVNekEwTERBdU1qWXRNaTR3TVdNd0xURXVNVFl0TUM0eU56Y3RNaTR3TlMwd0xqZ3pMVEl1TmpjZ0lHTXRNQzQxTlRNdE1DNDJNaTB4TGpNNU5pMHdMamt6TFRJdU5USTVMVEF1T1ROakxUQXVPVElzTUMweExqWTVOeXd3TGpJME15MHlMak16TERBdU56TmpMVEF1TmpNMExEQXVORGczTFRFdU1EY3NNUzR3T1MweExqTXhNU3d4TGpneElDQmpMVEF1TWpjNUxEQXVOek16TFRBdU5qUTJMREV1TWpJdE1TNHhMREV1TkRaakxUQXVORFV6TERBdU1qUXRNUzR4TERBdU1qa3pMVEV1T1RRc01DNHhObXd0TXk0eU9DMHdMalU0WXpBdU1qRXpMVEV1TkRVekxEQXVOakl6TFRJdU56SXNNUzR5TXkwekxqZ2dJR013TGpZd05pMHhMakE0TERFdU16VTVMVEV1T1Rnc01pNHlOaTB5TGpkak1DNDVMVEF1TnpJc01TNDVNeTB4TGpJMU55d3pMakE1TFRFdU5qRkROVEV1TmpZc01DNHhOemNzTlRJdU9UQTJMREFzTlRRdU1qUXNNR014TGpRek9Td3dMREl1TnpNMkxEQXVNakVzTXk0NE9URXNNQzQyTXlBZ1l6RXVNVFV5TERBdU5ESXNNaTR4TXpjc01TNHdNRE1zTWk0NU5Ea3NNUzQzTldNd0xqZ3hNeXd3TGpjME55d3hMalF6T0N3eExqWXpOeXd4TGpnM0xESXVOamRETmpNdU16Z3pMRFl1TURnekxEWXpMallzTnk0eU1pdzJNeTQyTERndU5EWWdJR013TERFdU1EWTJMVEF1TVRRNUxESXVNRFUwTFRBdU5EUTVMREl1T1RaakxUQXVNekF4TERBdU9UQTNMVEF1TnpFc01TNDNOekV0TVM0eU15d3lMalU1WXkwd0xqVXlMREF1T0RJdE1TNHhNak1zTVM0Mk1UTXRNUzQ0TVN3eUxqTTRJQ0JqTFRBdU5qZzNMREF1TnpZNExURXVOREUzTERFdU5UUTBMVEl1TVRrc01pNHpNMnd0TlM0Mk9Ua3NOUzQ0TkdNd0xqY3pNaTB3TGpJeU55d3hMalExT1Mwd0xqTTVPU3d5TGpFNExUQXVOVEpqTUM0M01pMHdMakV5TERFdU16ZzNMVEF1TVRnc01pMHdMakU0U0RZeExqZzBlaUl2UGp3dmMzWm5QZz09IiAvPjwvc3ZnPg=="); } .wmd-latex-button-display { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/latex-display.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/latex-display.svg"); } .wmd-link-button { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/link.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/link.svg"); } .wmd-user-reference-button { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlBL1BqeHpkbWNnYUdWcFoyaDBQU0l5TkNJZ2RtVnljMmx2YmowaU1TNHhJaUIzYVdSMGFEMGlNalFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnZUcxc2JuTTZZMk05SW1oMGRIQTZMeTlqY21WaGRHbDJaV052YlcxdmJuTXViM0puTDI1ekl5SWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQanhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVEV3TWpndU5Da2lQanh3WVhSb0lHUTlJbTB4TWlBd1l5MHdMalF3TlNBd0xUQXVPREExSURBdU1EWXdNekkyTFRFdU1UZzRJREF1TVRVMk1qVXRNQzR5TWpRZ01DNHdOVFkzT0Mwd0xqUTBJREF1TVRNeE16VXRNQzQyTlRZZ01DNHlNVGczTlMwd0xqQTRNeUF3TGpBek5EQXhMVEF1TVRZM09TQXdMakExTlRNMExUQXVNalE1T0NBd0xqQTVNemMxTFRBdU1ETTBJREF1TURFMU9ETXRNQzR3TmlBd0xqQTBOVGswTFRBdU1Ea3pOeUF3TGpBMk1qVXRNQzR5TURNeUlEQXVNVEF3TlRndE1DNDBNREl4SURBdU1qRTNNRFF0TUM0MU9UTTNJREF1TXpRek56VXRNQzR3TWpjZ01DNHdNVGMwTFRBdU1EWTNNU0F3TGpBeE16TTVMVEF1TURrek9DQXdMakF6TVRJMUxUQXVNRFUyTXlBd0xqQXpPRFkwTFRBdU1UQXhJREF1TURnME1Ua3RNQzR4TlRZeUlEQXVNVEkwT1RVdE1DNHhOVFk1SURBdU1URXlOaTB3TGpNeU1UWWdNQzR5TVRZdE1DNDBOamc0SURBdU16UXpPQzB3TGpFek5ESWdNQzR4TWpBM0xUQXVNalE1TkNBd0xqSTNNalF0TUM0ek56VWdNQzQwTURZeUxUQXVOREkxTVNBd0xqUXpOVGt0TUM0M09UTTJJREF1T0RrM01TMHhMakE1TXpnZ01TNDBNemMyTFRBdU5URTFOQ0F3TGprd016UXRNQzQ1TURBeUlERXVPVEl3TlMweExqQTJNalFnTWk0NU5qZzNMVEF1TURjNE15MHdMakF4TmpVdE1DNHhOVEF4TFRBdU1ESXlOQzB3TGpJeE9EZ2dNQzB3TGpVeU5URWdNQzR4TnpFdE1DNDJOVFExSURFdU1UWTROUzB3TGpNeE1qVWdNaTR5TVRnM0lEQXVNakF3TnlBd0xqWXhOak1nTUM0MU16UTJJREV1TVRBeE5TQXdMamczTlNBeExqTTNOU0F3TGpRMU56TWdNUzQzTnpjNElERXVOREkxTnlBekxqSTFPVGdnTWk0Mk9EYzFJRFF1TVRnM09IWXhMakF6TVd3dE1TQXhMVElnTVdNdE1TNDJNVGN6SURBdU9EQXhMVE11TWpJNE5DQXhMall3TlMwMExqZzBNemdnTWk0ME1EWXRNQzQ0T1RVeE15QXdMalUwTFRFdU1qUXhOU0F4TGpZdE1TNHhOVFl5SURJdU5UazBJREF1TURReE5qWTBJREF1TmpJMkxUQXVNVGcwTkRnZ01TNDBNamNnTUM0ME16YzFJREV1T0RRMElEQXVOVGt3T1NBd0xqTXdOQ0F4TGpJNU5Ua2dNQzR4TURZZ01TNDVNemMxSURBdU1UVTJJREV1T0RjMk5pMHdMakF3TVNBekxqYzBPRFFnTUNBMUxqWXlOU0F3SURJdU5qWTVJREF1TURBeElEVXVNek14SURBZ09DQXdJREl1TXpZM0lEQWdOQzQzTWpjZ01DNHdNRFFnTnk0d09UUWdNQ0F3TGpjMk9DMHdMakExTkNBd0xqazRNUzB3TGpnMk5TQXdMamt3TmkweExqVWdNQzR3TVRRdE1DNDVNeklnTUM0d05qa3RNUzQ1TnpZdE1DNDJOVFl0TWk0Mk9EZ3RNQzQxT1RJdE1DNDJNREl0TVM0ME16UXRNQzQ0TkMweUxqRTFOaTB4TGpJMUxURXVNRFl4TFRBdU5USTFMVEl1TVRJNExURXVNRE0zTFRNdU1UZzRMVEV1TlRZeWJDMHlMVEV0TVMweGRpMHhMakF6TVdNeExqSTJNaTB3TGpreU9DQXlMakl6TFRJdU5ERWdNaTQyT0RndE5DNHhPRGM0SURBdU16UXRNQzR5TnpNMklEQXVOamMwTFRBdU56VTRPQ0F3TGpnM05DMHhMak0zTlNBd0xqTTBNaTB4TGpBMU1ESWdNQzR5TVRNdE1pNHdORGMzTFRBdU16RXlMVEl1TWpFNE55MHdMakEyT1Mwd0xqQXlNalF0TUM0eE5DMHdMakF4TmpVdE1DNHlNVGtnTUMwd0xqRTJNaTB4TGpBME9ESXRNQzQxTkRjdE1pNHdOalV6TFRFdU1EWXlMVEl1T1RZNE55MHdMak10TUM0MU5EQTFMVEF1TmpZNUxURXVNREF4TnkweExqQTVOQzB4TGpRek56WXRNQzR4TWpZdE1DNHhNek00TFRBdU1qUXhMVEF1TWpnMU5TMHdMak0zTlMwd0xqUXdOakl0TUM0d01EWXRNQzR3TURVMUxUQXVNREkxSURBdU1EQTFOUzB3TGpBek1TQXdMVEF1TXpreUxUQXVNelE1T1Mwd0xqZ3lOeTB3TGpZeE9EazBMVEV1TWpneExUQXVPRFF6TnpVdE1DNHhNVFV0TUM0d05UWXlNaTB3TGpJeU55MHdMakV3T0RVMExUQXVNelEwTFRBdU1UVTJNalV0TUM0d09EUXRNQzR3TXpRd01TMHdMakUyTlMwd0xqQTJOREkyTFRBdU1qVXRNQzR3T1RNM05TMHdMakkxTlMwd0xqQTRPRFE0TFRBdU5URTJMVEF1TVRjek5UWXRNQzQzT0RJdE1DNHlNVGczTlMwd0xqQXlMVEF1TURBek5EQTFMVEF1TURReUlEQXVNREF6TVRRNExUQXVNRFl5SURBdE1DNHlORGt0TUM0d016a3hORFF0TUM0ME9UVXRNQzR3TmpVeU5TMHdMamMxTFRBdU1EWXlOWG9pSUdacGJHdzlJaU16TkRRNU5XVWlJSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RBZ01UQXlPQzQwS1NJdlBqeHdZWFJvSUdROUltMHdJREV3TlRFdU5HTXdMakF5TmpReE9TQXdMak1nTUM0eE1qWTFNU0F3TGpZZ01DNDBNemMxSURBdU9DQXdMalU1TURrZ01DNHpJREV1TWprMU9TQXdMakVnTVM0NU16YzFJREF1TW1nMUxqWXlOU0E0SURjdU1EazBZekF1TlRjMkxUQXVNU0F3TGpnME1pMHdMalVnTUM0NU1EWXRNV2d0TWpSNklpQm1hV3hzUFNJak1tTXpaVFV3SWk4K1BDOW5Qand2YzNablBnPT0iIC8+PC9zdmc+"); @@ -3279,10 +3155,10 @@ a.voted { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlBL1Bqd2hSRTlEVkZsUVJTQnpkbWNnSUZCVlFreEpReUFuTFM4dlZ6TkRMeTlFVkVRZ1UxWkhJREV1TVM4dlJVNG5JQ0FuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2UjNKaGNHaHBZM012VTFaSEx6RXVNUzlFVkVRdmMzWm5NVEV1WkhSa0p6NDhjM1puSUdWdVlXSnNaUzFpWVdOclozSnZkVzVrUFNKdVpYY2dNQ0F3SURRNElEUTRJaUJvWldsbmFIUTlJalE0Y0hnaUlHbGtQU0pNWVhsbGNsOHpJaUIyWlhKemFXOXVQU0l4TGpFaUlIWnBaWGRDYjNnOUlqQWdNQ0EwT0NBME9DSWdkMmxrZEdnOUlqUTRjSGdpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpUGp4blBqeHdZWFJvSUdROUlrMHdMREk0TGpNM05XZ3hNaTQyTjJNdE1DNHdOaklzTXk0ek1TMHhMak16T0N3MkxqTXhNeTB6TGpRd015dzRMalpqTFRBdU9UUTFMREF1T0RreUxURXVPVGd5TERFdU5EQTRMVEl1T0RjNUxERXVOekEySUNBZ1l5MHhMakVzTUM0ek1qZ3RNaTR5Tml3d0xqTTVOaTB5TGpnNE15d3dMalF3T0Vnd2RqSXVNamcyYURndU56VjJMVEF1TURBell6Y3VNakExTFRBdU1ETXlMREV6TGpBME15MDFMamd4Tml3eE15NHhOemN0TVRJdU9UazNTREl5ZGkweU1rZ3dWakk0TGpNM05Yb2lJR1pwYkd3OUlpTXlOREZHTWpBaUx6NDhjR0YwYUNCa1BTSk5NallzTmk0ek56VjJNakpvTVRJdU56UmpNQ3d5TGprNU1TMHhMRFV1TnpReUxUSXVOamMwTERjdU9UVTJZeTB3TGpnek9Td3hMakE0T1MweExqZ3lPQ3d4TGpjNU1pMHlMamMyTVN3eUxqSXpNeUFnSUdNdE1DNHdNRGdzTUM0d01EUXRNQzR3TVRZc01DNHdNRGd0TUM0d01qTXNNQzR3TVRKakxUQXVNVE01TERBdU1EWTFMVEF1TWpjMExEQXVNVEl5TFRBdU5EQTVMREF1TVRjMll5MHhMalV4TkN3d0xqVTFOeTB6TGpreE5Td3dMalU0Tnkwekxqa3hOU3d3TGpVNE4wZ3lObll5TGpJNE5tZzRMamMxSUNBZ1l6Y3VNekUzTERBc01UTXVNalV0TlM0NU16TXNNVE11TWpVdE1UTXVNalYyTFRJeVNESTJlaUlnWm1sc2JEMGlJekkwTVVZeU1DSXZQand2Wno0OEwzTjJaejQ9IiAvPjwvc3ZnPg=="); } .wmd-code-button { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/code.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/code.svg"); } .wmd-image-button { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/image.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/image.svg"); } .wmd-olist-button { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlBL1BqeHpkbWNnWm1sc2JEMGlibTl1WlNJZ2FHVnBaMmgwUFNJeU5DSWdkbWxsZDBKdmVEMGlNQ0F3SURJMElESTBJaUIzYVdSMGFEMGlNalFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEhCaGRHZ2daRDBpVFRZdU1EQXdNU0F5TGpjMVF6WXVNREF3TVNBeUxqTTVOVGMzSURVdU56VXlNamNnTWk0d09EazROQ0ExTGpRd05UYzJJREl1TURFMk16TkROUzR3TmpBeE1TQXhMamswTXlBMExqY3hNRE1nTWk0eE1qQTROaUEwTGpVMk5UZ2dNaTQwTkRNd00wdzBMalUyTkRJMklESXVORFEyTXpkRE5DNDFOakl5TmlBeUxqUTFNRFkzSURRdU5UVTRORElnTWk0ME5UZzRNU0EwTGpVMU1qYzFJREl1TkRjd05ESkROQzQxTkRFMElESXVORGt6TmpZZ05DNDFNakk0TWlBeUxqVXpNRFUxSURRdU5EazNNRFFnTWk0MU56Z3dPRU0wTGpRME5USTNJREl1Tmpjek5UWWdOQzR6TmpVNE5DQXlMamd3T1RRMUlEUXVNalU1TkNBeUxqazJNalE0UXpRdU1EUXhOellnTXk0eU56VXpOeUF6TGpjek5UTTRJRE11TmpJME9EZ2dNeTR6TlRJM05TQXpMamcyTXpreFF6TXVNREF4TkRRZ05DNHdPRE16TmlBeUxqZzVORFUySURRdU5UUTJNRFVnTXk0eE1UUXdNU0EwTGpnNU56TTFRek11TXpNek5EWWdOUzR5TkRnMk5pQXpMamM1TmpFMUlEVXVNelUxTlRRZ05DNHhORGMwTmlBMUxqRXpOakE1UXpRdU1qY3lNRFVnTlM0d05UZ3lOaUEwTGpNNE9UVTJJRFF1T1RjME56TWdOQzQxTURBeElEUXVPRGczTmpWV055NHlOVU0wTGpVd01ERWdOeTQyTmpReU1TQTBMamd6TlRnNUlEZ2dOUzR5TlRBeElEaEROUzQyTmpRek1TQTRJRFl1TURBd01TQTNMalkyTkRJeElEWXVNREF3TVNBM0xqSTFWakl1TnpWYUlpQm1hV3hzUFNJak1qRXlNVEl4SWk4K1BIQmhkR2dnWkQwaVRURTVMalE1T1RVZ01UaElNVEF1T1RrNU5Vd3hNQzQ0T0RJNUlERTRMakF3TmpkRE1UQXVNemcxTmlBeE9DNHdOalExSURrdU9UazVOVEVnTVRndU5EZzNNaUE1TGprNU9UVXhJREU1UXprdU9UazVOVEVnTVRrdU5UVXlNeUF4TUM0ME5EY3lJREl3SURFd0xqazVPVFVnTWpCSU1Ua3VORGs1TlV3eE9TNDJNVFl4SURFNUxqazVNek5ETWpBdU1URXpOU0F4T1M0NU16VTFJREl3TGpRNU9UVWdNVGt1TlRFeU9DQXlNQzQwT1RrMUlERTVRekl3TGpRNU9UVWdNVGd1TkRRM055QXlNQzR3TlRFNElERTRJREU1TGpRNU9UVWdNVGhhSWlCbWFXeHNQU0lqTWpFeU1USXhJaTgrUEhCaGRHZ2daRDBpVFRFNUxqUTVPVFVnTVRFdU5VZ3hNQzQ1T1RrMVRERXdMamc0TWprZ01URXVOVEEyTjBNeE1DNHpPRFUySURFeExqVTJORFVnT1M0NU9UazFNU0F4TVM0NU9EY3lJRGt1T1RrNU5URWdNVEl1TlVNNUxqazVPVFV4SURFekxqQTFNak1nTVRBdU5EUTNNaUF4TXk0MUlERXdMams1T1RVZ01UTXVOVWd4T1M0ME9UazFUREU1TGpZeE5qRWdNVE11TkRrek0wTXlNQzR4TVRNMUlERXpMalF6TlRVZ01qQXVORGs1TlNBeE15NHdNVEk0SURJd0xqUTVPVFVnTVRJdU5VTXlNQzQwT1RrMUlERXhMamswTnpjZ01qQXVNRFV4T0NBeE1TNDFJREU1TGpRNU9UVWdNVEV1TlZvaUlHWnBiR3c5SWlNeU1USXhNakVpTHo0OGNHRjBhQ0JrUFNKTk1Ua3VORGs1TlNBMVNERXdMams1T1RWTU1UQXVPRGd5T1NBMUxqQXdOamN6UXpFd0xqTTROVFlnTlM0d05qUTBPU0E1TGprNU9UVXhJRFV1TkRnM01UWWdPUzQ1T1RrMU1TQTJRemt1T1RrNU5URWdOaTQxTlRJeU9DQXhNQzQwTkRjeUlEY2dNVEF1T1RrNU5TQTNTREU1TGpRNU9UVk1NVGt1TmpFMk1TQTJMams1TXpJM1F6SXdMakV4TXpVZ05pNDVNelUxTVNBeU1DNDBPVGsxSURZdU5URXlPRFFnTWpBdU5EazVOU0EyUXpJd0xqUTVPVFVnTlM0ME5EYzNNaUF5TUM0d05URTRJRFVnTVRrdU5EazVOU0ExV2lJZ1ptbHNiRDBpSXpJeE1qRXlNU0l2UGp4d1lYUm9JR1E5SWswMUxqRTFNRGt6SURFd0xqVXhPVGxETkM0NE5EazFOeUF4TUM0ME5qWTNJRFF1TkRjME5EUWdNVEF1TlRnMk15QTBMakk0TURNeElERXdMamM0TURSRE15NDVPRGMwTVNBeE1TNHdOek16SURNdU5URXlOVE1nTVRFdU1EY3pNeUF6TGpJeE9UWTFJREV3TGpjNE1EUkRNaTQ1TWpZM055QXhNQzQwT0RjMElESXVPVEkyTnpnZ01UQXVNREV5TmlBekxqSXhPVFk1SURrdU56RTVOamxETXk0M056VTFOaUE1TGpFMk16ZzFJRFF1TmpVd05EUWdPQzQ1TURnMElEVXVOREV4TlRjZ09TNHdOREkzUXpVdU9EQTVJRGt1TVRFeU9ETWdOaTR5TVRjeklEa3VNamszTVNBMkxqVXlOekl5SURrdU5qUTRNelJETmk0NE5ESTJJREV3TGpBd05UZ2dOeUF4TUM0ME56STNJRGNnTVRGRE55QXhNUzQyTVRrMUlEWXVOekk0T1RVZ01USXVNRGdnTmk0ek9UUXdOaUF4TWk0ME1qQTFRell1TVRFMk15QXhNaTQzTURJNUlEVXVOell6TVRVZ01USXVPVE14SURVdU5EZzRNallnTVRNdU1UQTROa3cxTGpRd09EYzBJREV6TGpFMk1ERkROUzR5TVRNME9DQXhNeTR5T0RjZ05TNHdOVFF5T0NBeE15NHpPVGNnTkM0NU1qWTROaUF4TXk0MVNEWXVNalZETmk0Mk5qUXlNU0F4TXk0MUlEY2dNVE11T0RNMU9DQTNJREUwTGpJMVF6Y2dNVFF1TmpZME1pQTJMalkyTkRJZ01UVWdOaTR5TkRrNU9TQXhOVWd6TGpjMVF6TXVNek0xTnprZ01UVWdNeUF4TkM0Mk5qUXlJRE1nTVRRdU1qVkRNeUF4TWk0NU16WTBJRE11T1Rnek9EVWdNVEl1TWprM01TQTBMalUzTlRBMUlERXhMamt4TTB3MExqWXpOVEl5SURFeExqZzNNemxETkM0NU5USTFPU0F4TVM0Mk5qYzNJRFV1TVRZNE5ETWdNVEV1TlRJM05TQTFMak15TkRZNUlERXhMak0yT0RaRE5TNDBOVGcxTlNBeE1TNHlNekkxSURVdU5TQXhNUzR4TXpBMklEVXVOU0F4TVVNMUxqVWdNVEF1TnpjM05DQTFMalF6T0RZMUlERXdMalk0TVRnZ05TNDBNREkwTnlBeE1DNDJOREE0UXpVdU16WXdPRE1nTVRBdU5Ua3pOaUExTGpJNE5EYzFJREV3TGpVME16VWdOUzR4TlRBNU15QXhNQzQxTVRrNVdpSWdabWxzYkQwaUl6SXhNakV5TVNJdlBqeHdZWFJvSUdROUlrMHlMamsyT1RZM0lESXhMakk0TURORE1pNDVOamsyTnlBeU1TNHlPREF6SURNdU1EWXlOVEVnTWpFdU16WTBNU0F5TGprM05ESTJJREl4TGpJNE5EbE1NaTQ1TnprMk1pQXlNUzR5T1RBeFRESXVPVGt5T1NBeU1TNHpNREk0UXpNdU1EQXlPRGNnTWpFdU16RXlNU0F6TGpBeE5UQTVJREl4TGpNeU16TWdNeTR3TWprMU5pQXlNUzR6TXpVNVF6TXVNRFU0TkRnZ01qRXVNell4TWlBekxqQTVOalV6SURJeExqTTVNamNnTXk0eE5ETTNOU0F5TVM0ME1qZ3hRek11TWpNNE1TQXlNUzQwT1RnNUlETXVNelk1T1RZZ01qRXVOVGcySURNdU5UTTVOVGtnTWpFdU5qY3dPRU16TGpnNE1UTXhJREl4TGpnME1UY2dOQzR6TnpBME15QXlNaUExSURJeVF6VXVOak01TWpFZ01qSWdOaTR4T1RVNU5pQXlNUzQ0TVRnMklEWXVOakF4TXpJZ01qRXVORFl3TlVNM0xqQXdPVEl5SURJeExqRXdNREVnTnk0eU1URTJNeUF5TUM0Mk1ETXlJRGN1TVRrMU5UTWdNakF1TVRBeFF6Y3VNVGd5TVRrZ01Ua3VOamcwTmlBM0xqQXlPVEF6SURFNUxqTXdOVE1nTmk0M05qazROaUF4T1VNM0xqQXlPVEF6SURFNExqWTVORGNnTnk0eE9ESXhPU0F4T0M0ek1UVTBJRGN1TVRrMU5UTWdNVGN1T0RrNVF6Y3VNakV4TmpNZ01UY3VNemsyT0NBM0xqQXdPVEl5SURFMkxqZzVPVGtnTmk0Mk1ERXpNaUF4Tmk0MU16azFRell1TVRrMU9UWWdNVFl1TVRneE5DQTFMall6T1RJeElERTJJRFVnTVRaRE5DNHpOekEwTXlBeE5pQXpMamc0TVRNeElERTJMakUxT0RNZ015NDFNemsxT1NBeE5pNHpNamt5UXpNdU16WTVPVFlnTVRZdU5ERTBJRE11TWpNNE1TQXhOaTQxTURFeElETXVNVFF6TnpVZ01UWXVOVGN4T1VNekxqQTVOalV6SURFMkxqWXdOek1nTXk0d05UZzBPQ0F4Tmk0Mk16ZzRJRE11TURJNU5UWWdNVFl1TmpZME1VTXpMakF4TlRBNUlERTJMalkzTmpjZ015NHdNREk0TnlBeE5pNDJPRGM1SURJdU9Ua3lPU0F4Tmk0Mk9UY3lUREl1T1RjNU5qSWdNVFl1TnpBNU9Vd3lMamszTkRJeklERTJMamN4TlRGTU1pNDVOekU0T1NBeE5pNDNNVGMxVERJdU9UY3dPVEVnTVRZdU56RTROVXd5TGprMk9UWTNJREUyTGpjeE9UZERNaTQyTnpZM09DQXhOeTR3TVRJMklESXVOamMyTnpnZ01UY3VORGczTkNBeUxqazJPVFkzSURFM0xqYzRNRE5ETXk0eU5UZzJJREU0TGpBMk9UTWdNeTQzTWpRMk1pQXhPQzR3TnpNeUlEUXVNREU0TXpRZ01UY3VOemt5TVVNMExqQXlNVGNnTVRjdU56ZzVNaUEwTGpBek1ERTRJREUzTGpjNE1pQTBMakEwTXpjMUlERTNMamMzTVRsRE5DNHdOelEwSURFM0xqYzBPRGtnTkM0eE16QXdOQ0F4Tnk0M01URWdOQzR5TVRBME1TQXhOeTQyTnpBNFF6UXVNelk0TmprZ01UY3VOVGt4TnlBMExqWXlPVFUzSURFM0xqVWdOU0F4Tnk0MVF6VXVNell3TnprZ01UY3VOU0ExTGpVek5qQXhJREUzTGpVNU9Ua2dOUzQyTURneE1pQXhOeTQyTmpNMlF6VXVOamMzTmpnZ01UY3VOekkxTVNBMUxqWTVPREl6SURFM0xqYzVNRGNnTlM0Mk9UWXpJREUzTGpnMU1VTTFMalk1TkRJeklERTNMamt4TlRVZ05TNDJOalF3TXlBeE9DNHdNREkzSURVdU5UY3lOemdnTVRndU1EZ3hPRU0xTGpRNE5EVWdNVGd1TVRVNE5DQTFMak13T1RZeUlERTRMakkxSURVZ01UZ3VNalZETkM0MU9EVTNPU0F4T0M0eU5TQTBMakkxSURFNExqVTROVGdnTkM0eU5TQXhPVU0wTGpJMUlERTVMalF4TkRJZ05DNDFPRFUzT1NBeE9TNDNOU0ExSURFNUxqYzFRelV1TXpBNU5qSWdNVGt1TnpVZ05TNDBPRFExSURFNUxqZzBNVFlnTlM0MU56STNPQ0F4T1M0NU1UZ3lRelV1TmpZME1ETWdNVGt1T1RrM015QTFMalk1TkRJeklESXdMakE0TkRVZ05TNDJPVFl6SURJd0xqRTBPVU0xTGpZNU9ESXpJREl3TGpJd09UTWdOUzQyTnpjMk9DQXlNQzR5TnpRNUlEVXVOakE0TVRJZ01qQXVNek0yTkVNMUxqVXpOakF4SURJd0xqUXdNREVnTlM0ek5qQTNPU0F5TUM0MUlEVWdNakF1TlVNMExqWXlPVFUzSURJd0xqVWdOQzR6TmpnMk9TQXlNQzQwTURneklEUXVNakV3TkRFZ01qQXVNekk1TWtNMExqRXpNREEwSURJd0xqSTRPU0EwTGpBM05EUWdNakF1TWpVeE1TQTBMakEwTXpjMUlESXdMakl5T0RGRE5DNHdNekF4T0NBeU1DNHlNVGdnTkM0d01qRTNJREl3TGpJeE1EZ2dOQzR3TVRnek5DQXlNQzR5TURjNVF6TXVOekkwTmpJZ01Ua3VPVEkyT0NBekxqSTFPRFlnTVRrdU9UTXdOeUF5TGprMk9UWTNJREl3TGpJeE9UZERNaTQyTnpZM09DQXlNQzQxTVRJMklESXVOamMyTnpnZ01qQXVPVGczTkNBeUxqazJPVFkzSURJeExqSTRNRE5hVFRJdU9UY3hPRGtnTVRZdU56RTNOVXd5TGprM01Ea3hJREUyTGpjeE9EVkRNaTQ1TnpjMklERTJMamN4TWprZ015NHhOekU0TWlBeE5pNDFOVEUxSURJdU9UY3hPRGtnTVRZdU56RTNOVm9pSUdacGJHdzlJaU15TVRJeE1qRWlMejQ4TDNOMlp6ND0iIC8+PC9zdmc+"); @@ -3291,16 +3167,16 @@ a.voted { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlBL1BqeHpkbWNnWm1sc2JEMGlibTl1WlNJZ2FHVnBaMmgwUFNJeU1DSWdkbWxsZDBKdmVEMGlNQ0F3SURJd0lESXdJaUIzYVdSMGFEMGlNakFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEhCaGRHZ2daRDBpVFRNdU1qVWdOME16TGprME1ETTJJRGNnTkM0MUlEWXVORFF3TXpZZ05DNDFJRFV1TnpWRE5DNDFJRFV1TURVNU5qUWdNeTQ1TkRBek5pQTBMalVnTXk0eU5TQTBMalZETWk0MU5UazJOQ0EwTGpVZ01pQTFMakExT1RZMElESWdOUzQzTlVNeUlEWXVORFF3TXpZZ01pNDFOVGsyTkNBM0lETXVNalVnTjFwTk55QTFMamMxUXpjZ05TNHpNelUzT1NBM0xqTXpOVGM1SURVZ055NDNOU0ExU0RFM0xqSTFRekUzTGpZMk5ESWdOU0F4T0NBMUxqTXpOVGM1SURFNElEVXVOelZETVRnZ05pNHhOalF5TVNBeE55NDJOalF5SURZdU5TQXhOeTR5TlNBMkxqVklOeTQzTlVNM0xqTXpOVGM1SURZdU5TQTNJRFl1TVRZME1qRWdOeUExTGpjMVdrMDNMamMxSURFd1F6Y3VNek0xTnprZ01UQWdOeUF4TUM0ek16VTRJRGNnTVRBdU56VkROeUF4TVM0eE5qUXlJRGN1TXpNMU56a2dNVEV1TlNBM0xqYzFJREV4TGpWSU1UY3VNalZETVRjdU5qWTBNaUF4TVM0MUlERTRJREV4TGpFMk5ESWdNVGdnTVRBdU56VkRNVGdnTVRBdU16TTFPQ0F4Tnk0Mk5qUXlJREV3SURFM0xqSTFJREV3U0RjdU56VmFUVGN1TnpVZ01UVkROeTR6TXpVM09TQXhOU0EzSURFMUxqTXpOVGdnTnlBeE5TNDNOVU0zSURFMkxqRTJORElnTnk0ek16VTNPU0F4Tmk0MUlEY3VOelVnTVRZdU5VZ3hOeTR5TlVNeE55NDJOalF5SURFMkxqVWdNVGdnTVRZdU1UWTBNaUF4T0NBeE5TNDNOVU14T0NBeE5TNHpNelU0SURFM0xqWTJORElnTVRVZ01UY3VNalVnTVRWSU55NDNOVnBOTkM0MUlERXdMamMxUXpRdU5TQXhNUzQwTkRBMElETXVPVFF3TXpZZ01USWdNeTR5TlNBeE1rTXlMalUxT1RZMElERXlJRElnTVRFdU5EUXdOQ0F5SURFd0xqYzFReklnTVRBdU1EVTVOaUF5TGpVMU9UWTBJRGt1TlNBekxqSTFJRGt1TlVNekxqazBNRE0ySURrdU5TQTBMalVnTVRBdU1EVTVOaUEwTGpVZ01UQXVOelZhVFRNdU1qVWdNVGRETXk0NU5EQXpOaUF4TnlBMExqVWdNVFl1TkRRd05DQTBMalVnTVRVdU56VkROQzQxSURFMUxqQTFPVFlnTXk0NU5EQXpOaUF4TkM0MUlETXVNalVnTVRRdU5VTXlMalUxT1RZMElERTBMalVnTWlBeE5TNHdOVGsySURJZ01UVXVOelZETWlBeE5pNDBOREEwSURJdU5UVTVOalFnTVRjZ015NHlOU0F4TjFvaUlHWnBiR3c5SWlNeU1USXhNakVpTHo0OEwzTjJaejQ9IiAvPjwvc3ZnPg=="); } .wmd-heading-button { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIj48ZGVmcz48ZmlsdGVyIGlkPSJkYXJrcmVhZGVyLWltYWdlLWZpbHRlciI+PGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAuMjQ5IC0wLjYxNCAtMC42NzIgMC4wMDAgMS4wMzUgLTAuNjQ2IDAuMjg4IC0wLjY2NCAwLjAwMCAxLjAyMCAtMC42MzYgLTAuNjA5IDAuMjUwIDAuMDAwIDAuOTk0IDAuMDAwIDAuMDAwIDAuMDAwIDEuMDAwIDAuMDAwIiAvPjwvZmlsdGVyPjwvZGVmcz48aW1hZ2Ugd2lkdGg9IjE3OTIiIGhlaWdodD0iMTc5MiIgZmlsdGVyPSJ1cmwoI2RhcmtyZWFkZXItaW1hZ2UtZmlsdGVyKSIgeGxpbms6aHJlZj0iIiAvPjwvc3ZnPg=="); + background-image: url("http://localhost:8000/static/pagedown/resources/heading.svg"); } .wmd-hr-button { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQS9Qanh6ZG1jZ2RtbGxkMEp2ZUQwaU1DQXdJREl3SURJd0lpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBqeHdZWFJvSUdROUlrMHhJREZvTW5ZeVNERldNWHB0TUNBMGFESjJNa2d4VmpWNmJUQWdOR2d4T0hZeVNERldPWHB0TUNBMGFESjJNa2d4ZGkweWVtMHdJRFJvTW5ZeVNERjJMVEo2VFRVZ01XZ3lkakpJTlZZeGVtMHdJREUyYURKMk1rZzFkaTB5ZWswNUlERm9Nbll5U0RsV01YcHRNQ0EwYURKMk1rZzVWalY2YlRBZ09HZ3lkakpJT1hZdE1ucHRNQ0EwYURKMk1rZzVkaTB5ZW0wMExURTJhREoyTW1ndE1sWXhlbTB3SURFMmFESjJNbWd0TW5ZdE1ucHROQzB4Tm1neWRqSm9MVEpXTVhwdE1DQTBhREoyTW1ndE1sWTFlbTB3SURob01uWXlhQzB5ZGkweWVtMHdJRFJvTW5ZeWFDMHlkaTB5ZWlJdlBqd3ZjM1puUGc9PSIgLz48L3N2Zz4="); } .wmd-undo-button { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/undo.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/undo.svg"); } .wmd-redo-button { - background-image: url("http://127.0.0.1:8000/static/pagedown/resources/redo.svg"); + background-image: url("http://localhost:8000/static/pagedown/resources/redo.svg"); } .wmd-admonition-button { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PGRlZnM+PGZpbHRlciBpZD0iZGFya3JlYWRlci1pbWFnZS1maWx0ZXIiPjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwLjI0OSAtMC42MTQgLTAuNjcyIDAuMDAwIDEuMDM1IC0wLjY0NiAwLjI4OCAtMC42NjQgMC4wMDAgMS4wMjAgLTAuNjM2IC0wLjYwOSAwLjI1MCAwLjAwMCAwLjk5NCAwLjAwMCAwLjAwMCAwLjAwMCAxLjAwMCAwLjAwMCIgLz48L2ZpbHRlcj48L2RlZnM+PGltYWdlIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiBmaWx0ZXI9InVybCgjZGFya3JlYWRlci1pbWFnZS1maWx0ZXIpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQS9QandoUkU5RFZGbFFSU0J6ZG1jZ0lGQlZRa3hKUXlBbkxTOHZWek5ETHk5RVZFUWdVMVpISURFdU1TOHZSVTRuSUNBbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdlIzSmhjR2hwWTNNdlUxWkhMekV1TVM5RVZFUXZjM1puTVRFdVpIUmtKejQ4YzNabklHVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a1BTSnVaWGNnTUNBd0lEVXhNaUExTVRJaUlHbGtQU0pNWVhsbGNsOHhJaUIyWlhKemFXOXVQU0l4TGpFaUlIWnBaWGRDYjNnOUlqQWdNQ0ExTVRJZ05URXlJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhodGJHNXpPbmhzYVc1clBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNoc2FXNXJJajQ4Wno0OFp6NDhjR0YwYUNCa1BTSk5NelkxTERFMk55NDRTREl5T0M0eVl5MDFMamNzTUMweE1DNDBMVFF1TnkweE1DNDBMVEV3TGpSMkxUQXVPR013TFRVdU55dzBMamN0TVRBdU5Dd3hNQzQwTFRFd0xqUklNelkxWXpVdU55d3dMREV3TGpRc05DNDNMREV3TGpRc01UQXVOQ0FnSUNCMk1DNDRRek0zTlM0MUxERTJNeTR4TERNM01DNDRMREUyTnk0NExETTJOU3d4TmpjdU9Ib2lJR1pwYkd3OUlpTXpNRE5CTTBZaUx6NDhjR0YwYUNCa1BTSk5NelkxTERJeU9DNDRTREUxTXk0NVl5MDFMamNzTUMweE1DNDBMVFF1TnkweE1DNDBMVEV3TGpSMkxUQXVPR013TFRVdU55dzBMamN0TVRBdU5Dd3hNQzQwTFRFd0xqUklNelkxWXpVdU55d3dMREV3TGpRc05DNDNMREV3TGpRc01UQXVOQ0FnSUNCMk1DNDRRek0zTlM0MUxESXlOQzR4TERNM01DNDRMREl5T0M0NExETTJOU3d5TWpndU9Ib2lJR1pwYkd3OUlpTXpNRE5CTTBZaUx6NDhjR0YwYUNCa1BTSk5NelkxTERJNE9TNDRTREUxTXk0NVl5MDFMamNzTUMweE1DNDBMVFF1TnkweE1DNDBMVEV3TGpSMkxUQXVPR013TFRVdU55dzBMamN0TVRBdU5Dd3hNQzQwTFRFd0xqUklNelkxWXpVdU55d3dMREV3TGpRc05DNDNMREV3TGpRc01UQXVOQ0FnSUNCMk1DNDRRek0zTlM0MUxESTROUzR4TERNM01DNDRMREk0T1M0NExETTJOU3d5T0RrdU9Ib2lJR1pwYkd3OUlpTXpNRE5CTTBZaUx6NDhjR0YwYUNCa1BTSk5NelkxTERNMU1DNDVTREUxTXk0NVl5MDFMamNzTUMweE1DNDBMVFF1TnkweE1DNDBMVEV3TGpSMkxUQXVPR013TFRVdU55dzBMamN0TVRBdU5Dd3hNQzQwTFRFd0xqUklNelkxWXpVdU55d3dMREV3TGpRc05DNDNMREV3TGpRc01UQXVOQ0FnSUNCMk1DNDRRek0zTlM0MUxETTBOaTR5TERNM01DNDRMRE0xTUM0NUxETTJOU3d6TlRBdU9Yb2lJR1pwYkd3OUlpTXpNRE5CTTBZaUx6NDhjR0YwYUNCa1BTSk5NelkxTERReE1TNDVTREUxTXk0NVl5MDFMamNzTUMweE1DNDBMVFF1TnkweE1DNDBMVEV3TGpSMkxUQXVPR013TFRVdU55dzBMamN0TVRBdU5Dd3hNQzQwTFRFd0xqUklNelkxWXpVdU55d3dMREV3TGpRc05DNDNMREV3TGpRc01UQXVOQ0FnSUNCMk1DNDRRek0zTlM0MUxEUXdOeTR5TERNM01DNDRMRFF4TVM0NUxETTJOU3cwTVRFdU9Yb2lJR1pwYkd3OUlpTXpNRE5CTTBZaUx6NDhMMmMrUEhCaGRHZ2daRDBpVFRNNU1pdzBNeTQxU0RFM09TNHliRE00TGpZc05URXVOR2d4TkRRdU4yTXlOeTR5TERBc05Ea3VOU3d5TWk0ekxEUTVMalVzTkRrdU5YWXlOamt1TTJNd0xESTNMakl0TWpJdU15dzBPUzQxTFRRNUxqVXNORGt1TlVneE5UUXVOQ0FnSUdNdE1qY3VNaXd3TFRRNUxqVXRNakl1TXkwME9TNDFMVFE1TGpWV01UVXdMamxNTmpVdU15dzVPQzQwWXkwd0xqTXNNaTQzTFRBdU9DdzFMak10TUM0NExEaDJNelF5TGpOak1Dd3pOQzQyTERJNExqTXNOak1zTmpNc05qTklNemt5WXpNMExqWXNNQ3cyTXkweU9DNHpMRFl6TFRZelZqRXdOaTQwSUNBZ1F6UTFOQzQ1TERjeExqZ3NOREkyTGpZc05ETXVOU3d6T1RJc05ETXVOWG9pSUdacGJHdzlJaU16TUROQk0wWWlMejQ4Wno0OGNHRjBhQ0JrUFNKTk1USTFMalVzTVRRNUxqaHNOamd1TXl3eU5XTXpMallzTVM0ekxEWXVOUzB3TGpjc05pNHpMVFF1Tm13dE15NHlMVGN5TGpkakxUQXVNUzB4TGpVdE1DNDFMVEl1T1MweExqTXROQzR6YkRBdU1TMHdMakVnSUNBZ1l5MHdMakV0TUM0eUxUQXVNeTB3TGpRdE1DNDBMVEF1Tm13dE5EZ3VPQzAyTmk0MmJDMHhOaXd4TVM0M2JEUTBMakVzTmpBdU1tTXhMamdzTWk0MExERXVNaXcxTGpndE1TNHlMRGN1Tm13dE15NDRMREl1T0dNdE1pNDBMREV1T0MwMUxqZ3NNUzR5TFRjdU5pMHhMakpNTVRFNExEUTJMamtnSUNBZ2JDMHhOUzQ0TERFeExqWnNORFF1TkN3Mk1DNDNZekV1Tml3eUxqSXNNUzR4TERVdU1pMHhMakVzTmk0NGJDMDBMamNzTXk0MVl5MHlMaklzTVM0MkxUVXVNaXd4TGpFdE5pNDRMVEV1TVV3NE9TNDJMRFkzTGpaTU56SXVOaXc0TUd3ME55NHlMRFkwTGpRZ0lDQWdRekV5TVN3eE5EWXVPQ3d4TWpNc01UUTRMamtzTVRJMUxqVXNNVFE1TGpoNklFMHhNemdzTVRReExqbHNORGN1Tmkwek5DNDVZekl1T1MweUxqRXNOeTQyTERFdU15dzNMamdzTlM0NGJERXVNU3d6T1M0M1l5MHdMamNzTUM0eUxURXVOQ3d3TGpNdE1pd3dMamRzTFRFMExqSXNNVEF1TkNBZ0lDQmpMVEF1TVN3d0xqRXRNQzR6TERBdE1DNHpMREF1TVd3dE16WXVPQzB4TWk0MlF6RXpOeXd4TkRrdU5pd3hNelV1TVN3eE5EUXNNVE00TERFME1TNDVlaUlnWm1sc2JEMGlJek13TTBFelJpSXZQanh3WVhSb0lHUTlJazAyT0M0NUxEYzFMak5zTFRVdU55MDNMamRqTFRFd0xqVXRNVFF1TXkwM0xqTXRNelF1TlN3M0xUUTFiREl5TFRFMkxqRmpNVFF1TXkweE1DNDFMRE0wTGpVdE55NHpMRFExTERkc05TNDNMRGN1TjB3Mk9DNDVMRGMxTGpONklpQm1hV3hzUFNJak16QXpRVE5HSWk4K1BDOW5Qand2Wno0OEwzTjJaejQ9IiAvPjwvc3ZnPg=="); @@ -3315,148 +3191,255 @@ a.voted { background-color: rgb(0, 0, 0); } .wmd-prompt-dialog { - background-color: rgb(30, 32, 33); border-color: rgb(77, 83, 86); + background-color: rgb(30, 32, 33); } .wmd-prompt-dialog > form > input[type="text"] { border-color: rgb(77, 83, 86); - color: rgb(232, 230, 227); + color: rgb(232, 230, 227); } .wmd-prompt-dialog > form > input[type="button"] { border-color: rgb(82, 88, 92); } .wmd-preview { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(24, 26, 27); border-color: rgb(72, 78, 81); } .pagedown-image-upload { - background-color: rgb(24, 26, 27); background-image: initial; + background-color: rgb(24, 26, 27); box-shadow: rgba(0, 0, 0, 0.5) 2px 2px 10px 0px; } .pagedown-image-upload .submit-loading { border-color: rgb(46, 91, 113) rgb(51, 56, 58) rgb(51, 56, 58); } div.dmmd-preview-update { - background-color: rgb(53, 57, 59); background-image: initial; + background-color: rgb(53, 57, 59); color: rgb(200, 195, 188); } div.dmmd-preview-stale { + background-image: repeating-linear-gradient(-45deg, + rgb(24, 26, 27), + rgb(24, 26, 27) 10px, + rgb(28, 30, 31) 10px, + rgb(28, 30, 31) 20px); background-color: initial; - background-image: repeating-linear-gradient(-45deg, rgb(24, 26, 27), rgb(24, 26, 27) 10px, rgb(28, 30, 31) 10px, rgb(28, 30, 31) 20px); } -.course-list { - list-style-image: initial; +code .hll { + background-color: rgb(61, 61, 0); } -.course-list .course-item { - background-color: rgb(24, 26, 27); - border-color: rgb(58, 62, 65); - box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px; +code .c { + color: rgb(162, 154, 142); } -.course-list .course-item:hover { - box-shadow: rgba(0, 0, 0, 0.15) 0px 6px 12px; +code .err { + color: rgb(233, 94, 94); + background-color: rgb(58, 36, 36); } -.lesson-list { - list-style-image: initial; -} -.lesson-list li:hover { - background-color: rgb(52, 52, 0); - background-image: initial; - box-shadow: rgba(0, 0, 0, 0.15) 0px 6px 12px; -} -.lesson-list li { - background-color: rgb(24, 26, 27); - background-image: initial; - border-color: rgb(58, 62, 65); - box-shadow: rgb(53, 57, 59) 0px 2px 4px; -} -.lesson-list .lesson-title { - color: initial; -} -.lesson-list .lesson-title .lesson-points { - color: rgb(169, 162, 151); -} -.lesson-list .progress-container { - background-color: rgb(42, 45, 47); - background-image: initial; -} -.lesson-list .progress-bar { - background-color: rgb(27, 111, 27); - background-image: initial; +code .k { color: rgb(232, 230, 227); } -.course-problem-list li { - border-bottom-color: rgb(53, 57, 59); +code .o { + color: rgb(232, 230, 227); } -.course-problem-list li:hover { - background-color: rgb(42, 45, 47); - background-image: initial; +code .cm { + color: rgb(162, 154, 142); } -.course-problem-list a { - color: inherit; - text-decoration-color: initial; +code .cp { + color: rgb(168, 160, 149); } -.course-contest-card { - border-color: rgb(58, 62, 65); - box-shadow: rgba(0, 0, 0, 0.1) 2px 2px 10px; +code .c1 { + color: rgb(162, 154, 142); } -.course-contest-card h5 { - color: rgb(200, 195, 188); +code .cs { + color: rgb(168, 160, 149); } -.course-contest-card p { +code .gd { + color: rgb(232, 230, 227); + background-color: rgb(71, 0, 0); +} +code .ge { + color: rgb(232, 230, 227); +} +code .gr { + color: rgb(255, 85, 85); +} +code .gh { + color: rgb(168, 160, 149); +} +code .gi { + color: rgb(232, 230, 227); + background-color: rgb(18, 71, 0); +} +code .go { + color: rgb(157, 148, 136); +} +code .gp { color: rgb(178, 172, 162); } -.fa-border { - border: var(--darkreader-border--fa-border-width, .08em) var(--darkreader-border--fa-border-style, solid) var(--darkreader-border--fa-border-color, #35393b); +code .gu { + color: rgb(178, 172, 162); } -.fa-spin-reverse { - --fa-animation-direction: reverse; +code .gt { + color: rgb(255, 85, 85); +} +code .kc { + color: rgb(232, 230, 227); +} +code .kd { + color: rgb(232, 230, 227); +} +code .kn { + color: rgb(232, 230, 227); +} +code .kp { + color: rgb(232, 230, 227); +} +code .kr { + color: rgb(232, 230, 227); +} +code .kt { + color: rgb(139, 166, 197); +} +code .m { + color: rgb(97, 255, 255); +} +code .s { + color: rgb(240, 62, 107); +} +code .na { + color: rgb(114, 255, 255); +} +code .nb { + color: rgb(79, 211, 255); +} +code .nc { + color: rgb(139, 166, 197); +} +code .no { + color: rgb(114, 255, 255); +} +code .nd { + color: rgb(184, 178, 168); +} +code .ni { + color: rgb(255, 114, 255); +} +code .ne { + color: rgb(255, 97, 97); +} +code .nf { + color: rgb(255, 97, 97); +} +code .nl { + color: rgb(255, 97, 97); +} +code .nn { + color: rgb(178, 172, 162); +} +code .nt { + color: rgb(127, 174, 255); +} +code .nv { + color: rgb(114, 255, 255); +} +code .ow { + color: rgb(232, 230, 227); +} +code .w { + color: rgb(189, 183, 175); +} +code .mf { + color: rgb(97, 255, 255); +} +code .mh { + color: rgb(97, 255, 255); +} +code .mi { + color: rgb(97, 255, 255); +} +code .mo { + color: rgb(97, 255, 255); +} +code .sb { + color: rgb(240, 62, 107); +} +code .sc { + color: rgb(240, 62, 107); +} +code .sd { + color: rgb(240, 62, 107); +} +code .s2 { + color: rgb(240, 62, 107); +} +code .se { + color: rgb(240, 62, 107); +} +code .sh { + color: rgb(240, 62, 107); +} +code .si { + color: rgb(240, 62, 107); +} +code .sx { + color: rgb(240, 62, 107); +} +code .sr { + color: rgb(97, 255, 136); +} +code .s1 { + color: rgb(240, 62, 107); +} +code .ss { + color: rgb(255, 97, 216); +} +code .bp { + color: rgb(168, 160, 149); +} +code .vc { + color: rgb(114, 255, 255); +} +code .vg { + color: rgb(114, 255, 255); +} +code .vi { + color: rgb(114, 255, 255); +} +code .il { + color: rgb(97, 255, 255); +} +.fa-border { + border-color: rgb(53, 57, 59); } .fa-inverse { - color: var(--darkreader-text--fa-inverse, #e8e6e3); -} -:host, -:root { - --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; - --fa-style-family-brands: "Font Awesome 6 Brands"; -} -:host, -:root { - --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; -} -:host, -:root { - --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; - --fa-style-family-classic: "Font Awesome 6 Free"; + color: rgb(232, 230, 227); } @media all { .featherlight { - background-color: rgba(0, 0, 0, 0); background-image: initial; + background-color: rgba(0, 0, 0, 0); } .featherlight:last-of-type { - background-color: rgba(0, 0, 0, 0.8); background-image: initial; + background-color: rgba(0, 0, 0, 0.8); } .featherlight .featherlight-content { - background-color: rgb(24, 26, 27); - background-image: initial; border-bottom-color: transparent; + background-image: initial; + background-color: rgb(24, 26, 27); } .featherlight .featherlight-close-icon { - background-color: rgba(24, 26, 27, 0.3); background-image: initial; + background-color: rgba(24, 26, 27, 0.3); color: rgb(232, 230, 227); } .featherlight-iframe .featherlight-content { - border-bottom: 0px; + border-bottom-color: initial; } .featherlight iframe { border-color: initial; - border-style: initial; - border-width: 0px; } } @media only screen and (max-width: 1024px) { @@ -3465,15 +3448,15 @@ div.dmmd-preview-stale { } } .tooltipped::after { - background-color: rgba(0, 0, 0, 0.8); - background-image: initial; color: rgb(232, 230, 227); text-decoration-color: initial; text-shadow: none; + background-image: initial; + background-color: rgba(0, 0, 0, 0.8); } .tooltipped::before { - border-color: transparent; color: rgba(232, 230, 227, 0.8); + border-color: transparent; } .tooltipped:hover::before, .tooltipped:hover::after, @@ -3501,8 +3484,6 @@ div.dmmd-preview-stale { } .select2-container .select2-search--inline .select2-search__field { border-color: initial; - border-style: none; - border-width: initial; } .select2-dropdown { background-color: rgb(24, 26, 27); @@ -3512,21 +3493,17 @@ div.dmmd-preview-stale { list-style-image: initial; } .select2-container--open .select2-dropdown--above { - border-bottom: none; + border-bottom-color: initial; } .select2-container--open .select2-dropdown--below { - border-top: none; + border-top-color: initial; } .select2-close-mask { - background-color: rgb(24, 26, 27); border-color: initial; - border-style: initial; - border-width: 0px; + background-color: rgb(24, 26, 27); } .select2-hidden-accessible { border-color: initial !important; - border-style: initial !important; - border-width: 0px !important; } .select2-container--default .select2-selection--single { background-color: rgb(24, 26, 27); @@ -3575,19 +3552,13 @@ div.dmmd-preview-stale { background-color: rgb(34, 36, 38); } .select2-container--default .select2-search--dropdown .select2-search__field { - border-color: rgb(72, 78, 81); + border-color: rgb(72, 78, 81); } .select2-container--default .select2-search--inline .select2-search__field { - background-color: transparent; - background-image: initial; - border-color: initial; - border-style: none; - border-width: initial; - box-shadow: none; - outline-color: initial; + background-image: initial; background-color: transparent; border-color: initial; outline-color: initial; box-shadow: none; } .select2-container--default .select2-results__option[aria-disabled="true"] { - color: rgb(168, 160, 149); + color: rgb(168, 160, 149); } .select2-container--default .select2-results__option[aria-selected="true"] { background-color: rgb(43, 47, 49); @@ -3598,9 +3569,10 @@ div.dmmd-preview-stale { } .select2-container--classic .select2-selection--single { background-color: rgb(29, 31, 32); - background-image: linear-gradient(rgb(24, 26, 27) 50%, rgb(34, 36, 38) 100%); border-color: rgb(72, 78, 81); outline-color: initial; + background-image: linear-gradient(rgb(24, 26, 27) 50%, + rgb(34, 36, 38) 100%); } .select2-container--classic .select2-selection--single:focus { border-color: rgb(4, 60, 150); @@ -3613,41 +3585,42 @@ div.dmmd-preview-stale { } .select2-container--classic .select2-selection--single .select2-selection__arrow { background-color: rgb(43, 47, 49); - background-image: linear-gradient(rgb(34, 36, 38) 50%, rgb(53, 57, 59) 100%); - border-bottom: none; + border-top-color: initial; + border-right-color: initial; + border-bottom-color: initial; border-left-color: rgb(72, 78, 81); - border-right: none; - border-top: none; + background-image: linear-gradient(rgb(34, 36, 38) 50%, + rgb(53, 57, 59) 100%); } .select2-container--classic .select2-selection--single .select2-selection__arrow b { - border-color: rgb(82, 88, 92) transparent transparent; + border-color: rgb(82, 88, 92) transparent transparent; } .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { - border-bottom: none; - border-left: none; + border-top-color: initial; + border-bottom-color: initial; + border-left-color: initial; border-right-color: rgb(72, 78, 81); - border-top: none; } .select2-container--classic.select2-container--open .select2-selection--single { border-color: rgb(4, 60, 150); } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { - background-color: transparent; background-image: initial; + background-color: transparent; border-color: initial; - border-style: none; - border-width: initial; } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent rgb(82, 88, 92); } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { - background-image: linear-gradient(rgb(24, 26, 27) 0%, rgb(34, 36, 38) 50%); - border-top: none; + border-top-color: initial; + background-image: linear-gradient(rgb(24, 26, 27) 0%, + rgb(34, 36, 38) 50%); } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { - background-image: linear-gradient(rgb(34, 36, 38) 50%, rgb(24, 26, 27) 100%); - border-bottom: none; + border-bottom-color: initial; + background-image: linear-gradient(rgb(34, 36, 38) 50%, + rgb(24, 26, 27) 100%); } .select2-container--classic .select2-selection--multiple { background-color: rgb(24, 26, 27); @@ -3674,28 +3647,27 @@ div.dmmd-preview-stale { border-color: rgb(4, 60, 150); } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { - border-top: none; + border-top-color: initial; } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom: none; + border-bottom-color: initial; } .select2-container--classic .select2-search--dropdown .select2-search__field { border-color: rgb(72, 78, 81); outline-color: initial; } .select2-container--classic .select2-search--inline .select2-search__field { - box-shadow: none; outline-color: initial; + box-shadow: none; } .select2-container--classic .select2-dropdown { - background-color: rgb(24, 26, 27); - border-color: transparent; + background-color: rgb(24, 26, 27); border-color: transparent; } .select2-container--classic .select2-dropdown--above { - border-bottom: none; + border-bottom-color: initial; } .select2-container--classic .select2-dropdown--below { - border-top: none; + border-top-color: initial; } .select2-container--classic .select2-results__option[aria-disabled="true"] { color: rgb(152, 143, 129); @@ -3715,46 +3687,113 @@ div.dmmd-preview-stale { } .sr-only { border-color: initial; - border-style: initial; - border-width: 0px; } -.katex * { - border-color: currentcolor; -} -.katex .katex-mathml { +.CtxtMenu_InfoContent { border-color: initial; - border-style: initial; - border-width: 0px; + background-color: rgb(34, 36, 38); } -.katex .rule { +.CtxtMenu_Info.CtxtMenu_MousePost { + outline-color: initial; +} +.CtxtMenu_Info { border-color: initial; - border-style: solid; - border-width: 0px; + background-color: rgb(43, 47, 49); + color: rgb(232, 230, 227); + box-shadow: rgb(96, 104, 108) 0px 10px 20px; } -.katex svg { - fill: currentcolor; - stroke: currentcolor; +.CtxtMenu_MenuClose { + border-color: rgb(72, 78, 81); + color: rgb(223, 220, 215); } -.katex svg path { - stroke: none; -} -.katex .fbox, -.katex .fcolorbox { +.CtxtMenu_MenuClose span { + background-color: rgb(72, 78, 81); border-color: initial; } -.katex .angl { - border-right-color: initial; - border-top-color: initial; +.CtxtMenu_MenuClose:hover { + color: rgb(232, 230, 227) !important; + border-color: rgb(62, 68, 70) !important; +} +.CtxtMenu_MenuClose:hover span { + background-color: rgb(53, 57, 59) !important; +} +.CtxtMenu_MenuClose:hover:focus { + outline-color: initial; +} +.CtxtMenu_Menu { + background-color: rgb(24, 26, 27); + color: rgb(232, 230, 227); + border-color: rgb(62, 68, 70); + box-shadow: rgb(96, 104, 108) 0px 10px 20px; +} +.CtxtMenu_MenuItem { + background-image: initial; + background-color: transparent; +} +.CtxtMenu_MenuArrow { + color: rgb(168, 160, 149); +} +.CtxtMenu_MenuActive .CtxtMenu_MenuArrow { + color: rgb(232, 230, 227); +} +.CtxtMenu_MenuInputBox { + color: rgb(168, 160, 149); +} +.CtxtMenu_SliderValue { + color: rgb(200, 195, 188); +} +.CtxtMenu_SliderBar { + outline-color: initial; + background-image: initial; + background-color: rgb(49, 53, 55); +} +.CtxtMenu_MenuRule { + border-top-color: rgb(58, 62, 65); +} +.CtxtMenu_MenuDisabled { + color: rgb(152, 143, 129); +} +.CtxtMenu_MenuActive { + background-color: rgb(79, 86, 89); + color: rgb(232, 230, 227); +} +.CtxtMenu_MenuDisabled:focus { + background-color: rgb(37, 40, 42); +} +.CtxtMenu_MenuLabel:focus { + background-color: rgb(37, 40, 42); +} +.CtxtMenu_ContextMenu:focus { + outline-color: initial; +} +.CtxtMenu_ContextMenu .CtxtMenu_MenuItem:focus { + outline-color: initial; +} +.CtxtMenu_SelectionMenu { + border-bottom-color: initial; + box-shadow: none; +} +.CtxtMenu_SelectionBox { + background-color: rgb(24, 26, 27); +} +.CtxtMenu_SelectionDivider { + border-top-color: rgb(140, 130, 115); +} +mjx-merror { + color: rgb(255, 26, 26); + background-color: rgb(153, 153, 0); +} +mjx-assistive-mml { + border-color: initial !important; +} +.recently-attempted ul { + list-style-image: initial; } /* Override Style */ .vimvixen-hint { - background-color: #684b00 !important; - border-color: #9e7e00 !important; - color: #d7d4cf !important; -} -#vimvixen-console-frame { - color-scheme: light !important; + background-color: #7b5300 !important; + border-color: #d8b013 !important; + color: #f3e8c8 !important; } ::placeholder { opacity: 0.5 !important; @@ -3765,7 +3804,7 @@ div.dmmd-preview-stale { color: var(--darkreader-neutral-text) !important; } gr-main-header { - background-color: #1b4958 !important; + background-color: #0f3a48 !important; } .tou-z65h9k, .tou-mignzq, @@ -3774,7 +3813,7 @@ gr-main-header { background-color: var(--darkreader-neutral-background) !important; } .tou-75mvi { - background-color: #0f3a47 !important; + background-color: #032029 !important; } .tou-ta9e87, .tou-1w3fhi0, @@ -3783,52 +3822,11 @@ gr-main-header { .tou-1lpmd9d, .tou-1frrtv8, .tou-17ezmgn { - background-color: #1e2021 !important; + background-color: #0a0a0a !important; } .tou-uknfeu { - background-color: #432c09 !important; + background-color: #231603 !important; } .tou-6i3zyv { - background-color: #245d70 !important; -} -div.mermaid-viewer-control-panel .btn { - background-color: var(--darkreader-neutral-background); - fill: var(--darkreader-neutral-text); -} -svg g rect.er { - fill: var(--darkreader-neutral-background) !important; -} -svg g rect.er.entityBox { - fill: var(--darkreader-neutral-background) !important; -} -svg g rect.er.attributeBoxOdd { - fill: var(--darkreader-neutral-background) !important; -} -svg g rect.er.attributeBoxEven { - fill: var(--darkreader-selection-background); - fill-opacity: 0.8 !important; -} -svg rect.er.relationshipLabelBox { - fill: var(--darkreader-neutral-background) !important; -} -svg g g.nodes rect, -svg g g.nodes polygon { - fill: var(--darkreader-neutral-background) !important; -} -svg g rect.task { - fill: var(--darkreader-selection-background) !important; -} -svg line.messageLine0, -svg line.messageLine1 { - stroke: var(--darkreader-neutral-text) !important; -} -div.mermaid .actor { - fill: var(--darkreader-neutral-background) !important; -} -mitid-authenticators-code-app > .code-app-container { - background-color: white !important; - padding-top: 1rem; -} -iframe#unpaywall[src$="unpaywall.html"] { - color-scheme: light !important; + background-color: #19576c !important; } diff --git a/resources/datetime-picker/datetimepicker.full.min.js b/resources/datetime-picker/datetimepicker.full.min.js deleted file mode 100644 index a2a09c6..0000000 --- a/resources/datetime-picker/datetimepicker.full.min.js +++ /dev/null @@ -1 +0,0 @@ -var DateFormatter;!function(){"use strict";var e,t,a,r,n,o,i;o=864e5,i=3600,e=function(e,t){return"string"==typeof e&&"string"==typeof t&&e.toLowerCase()===t.toLowerCase()},t=function(e,a,r){var n=r||"0",o=e.toString();return o.lengths?"20":"19")+i):s,h=!0;break;case"m":case"n":case"M":case"F":if(isNaN(s)){if(!((u=m.getMonth(i))>0))return null;D.month=u}else{if(!(s>=1&&12>=s))return null;D.month=s}h=!0;break;case"d":case"j":if(!(s>=1&&31>=s))return null;D.day=s,h=!0;break;case"g":case"h":if(d=r.indexOf("a")>-1?r.indexOf("a"):r.indexOf("A")>-1?r.indexOf("A"):-1,c=n[d],d>-1)l=e(c,p.meridiem[0])?0:e(c,p.meridiem[1])?12:-1,s>=1&&12>=s&&l>-1?D.hour=s+l-1:s>=0&&23>=s&&(D.hour=s);else{if(!(s>=0&&23>=s))return null;D.hour=s}g=!0;break;case"G":case"H":if(!(s>=0&&23>=s))return null;D.hour=s,g=!0;break;case"i":if(!(s>=0&&59>=s))return null;D.min=s,g=!0;break;case"s":if(!(s>=0&&59>=s))return null;D.sec=s,g=!0}if(!0===h&&D.year&&D.month&&D.day)D.date=new Date(D.year,D.month-1,D.day,D.hour,D.min,D.sec,0);else{if(!0!==g)return null;D.date=new Date(0,0,0,D.hour,D.min,D.sec,0)}return D.date},guessDate:function(e,t){if("string"!=typeof e)return e;var a,r,n,o,i,s,u=this,d=e.replace(u.separators,"\0").split("\0"),l=/^[djmn]/g,f=t.match(u.validParts),c=new Date,m=0;if(!l.test(f[0]))return e;for(n=0;na?a:4,!(r=parseInt(4>a?r.toString().substr(0,4-a)+i:i.substr(0,4))))return null;c.setFullYear(r);break;case 3:c.setHours(s);break;case 4:c.setMinutes(s);break;case 5:c.setSeconds(s)}(o=i.substr(m)).length>0&&d.splice(n+1,0,o)}return c},parseFormat:function(e,a){var r,n=this,s=n.dateSettings,u=/\\?(.?)/gi,d=function(e,t){return r[e]?r[e]():t};return r={d:function(){return t(r.j(),2)},D:function(){return s.daysShort[r.w()]},j:function(){return a.getDate()},l:function(){return s.days[r.w()]},N:function(){return r.w()||7},w:function(){return a.getDay()},z:function(){var e=new Date(r.Y(),r.n()-1,r.j()),t=new Date(r.Y(),0,1);return Math.round((e-t)/o)},W:function(){var e=new Date(r.Y(),r.n()-1,r.j()-r.N()+3),a=new Date(e.getFullYear(),0,4);return t(1+Math.round((e-a)/o/7),2)},F:function(){return s.months[a.getMonth()]},m:function(){return t(r.n(),2)},M:function(){return s.monthsShort[a.getMonth()]},n:function(){return a.getMonth()+1},t:function(){return new Date(r.Y(),r.n(),0).getDate()},L:function(){var e=r.Y();return e%4==0&&e%100!=0||e%400==0?1:0},o:function(){var e=r.n(),t=r.W();return r.Y()+(12===e&&9>t?1:1===e&&t>9?-1:0)},Y:function(){return a.getFullYear()},y:function(){return r.Y().toString().slice(-2)},a:function(){return r.A().toLowerCase()},A:function(){var e=r.G()<12?0:1;return s.meridiem[e]},B:function(){var e=a.getUTCHours()*i,r=60*a.getUTCMinutes(),n=a.getUTCSeconds();return t(Math.floor((e+r+n+i)/86.4)%1e3,3)},g:function(){return r.G()%12||12},G:function(){return a.getHours()},h:function(){return t(r.g(),2)},H:function(){return t(r.G(),2)},i:function(){return t(a.getMinutes(),2)},s:function(){return t(a.getSeconds(),2)},u:function(){return t(1e3*a.getMilliseconds(),6)},e:function(){return/\((.*)\)/.exec(String(a))[1]||"Coordinated Universal Time"},I:function(){return new Date(r.Y(),0)-Date.UTC(r.Y(),0)!=new Date(r.Y(),6)-Date.UTC(r.Y(),6)?1:0},O:function(){var e=a.getTimezoneOffset(),r=Math.abs(e);return(e>0?"-":"+")+t(100*Math.floor(r/60)+r%60,4)},P:function(){var e=r.O();return e.substr(0,3)+":"+e.substr(3,2)},T:function(){return(String(a).match(n.tzParts)||[""]).pop().replace(n.tzClip,"")||"UTC"},Z:function(){return 60*-a.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(u,d)},r:function(){return"D, d M Y H:i:s O".replace(u,d)},U:function(){return a.getTime()/1e3||0}},d(e,e)},formatDate:function(e,t){var a,r,n,o,i,s=this,u="";if("string"==typeof e&&!(e=s.parseDate(e,t)))return null;if(e instanceof Date){for(n=t.length,a=0;n>a;a++)"S"!==(i=t.charAt(a))&&"\\"!==i&&(a>0&&"\\"===t.charAt(a-1)?u+=i:(o=s.parseFormat(i,e),a!==n-1&&s.intParts.test(i)&&"S"===t.charAt(a+1)&&(r=parseInt(o)||0,o+=s.dateSettings.ordinal(r)),u+=o));return u}return""}}}();var datetimepickerFactory=function(e){"use strict";function t(e,t,a){this.date=e,this.desc=t,this.style=a}var a={i18n:{ar:{months:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],dayOfWeekShort:["ن","ث","ع","خ","ج","س","ح"],dayOfWeek:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"]},ro:{months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],dayOfWeekShort:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],dayOfWeek:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"]},id:{months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],dayOfWeekShort:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],dayOfWeek:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},is:{months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],dayOfWeekShort:["Sun","Mán","Þrið","Mið","Fim","Fös","Lau"],dayOfWeek:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"]},bg:{months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],dayOfWeekShort:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"]},fa:{months:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],dayOfWeekShort:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayOfWeek:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"]},ru:{months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],dayOfWeekShort:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"]},uk:{months:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],dayOfWeekShort:["Ндл","Пнд","Втр","Срд","Чтв","Птн","Сбт"],dayOfWeek:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"]},en:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},el:{months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],dayOfWeekShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayOfWeek:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"]},de:{months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],dayOfWeekShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayOfWeek:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},nl:{months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],dayOfWeekShort:["zo","ma","di","wo","do","vr","za"],dayOfWeek:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},tr:{months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],dayOfWeekShort:["Paz","Pts","Sal","Çar","Per","Cum","Cts"],dayOfWeek:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},fr:{months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],dayOfWeekShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayOfWeek:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},es:{months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],dayOfWeekShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],dayOfWeek:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]},th:{months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],dayOfWeekShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayOfWeek:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"]},pl:{months:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],dayOfWeekShort:["nd","pn","wt","śr","cz","pt","sb"],dayOfWeek:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},pt:{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},ch:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"]},se:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},km:{months:["មករា​","កុម្ភៈ","មិនា​","មេសា​","ឧសភា​","មិថុនា​","កក្កដា​","សីហា​","កញ្ញា​","តុលា​","វិច្ឆិកា","ធ្នូ​"],dayOfWeekShort:["អាទិ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហ​​","សុក្រ​","សៅរ៍"],dayOfWeek:["អាទិត្យ​","ច័ន្ទ​","អង្គារ​","ពុធ​","ព្រហស្បតិ៍​","សុក្រ​","សៅរ៍"]},kr:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},it:{months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayOfWeek:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]},da:{months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},no:{months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"]},ja:{months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeekShort:["日","月","火","水","木","金","土"],dayOfWeek:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"]},vi:{months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayOfWeekShort:["CN","T2","T3","T4","T5","T6","T7"],dayOfWeek:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},sl:{months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],dayOfWeekShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayOfWeek:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},cs:{months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],dayOfWeekShort:["Ne","Po","Út","St","Čt","Pá","So"]},hu:{months:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],dayOfWeekShort:["Va","Hé","Ke","Sze","Cs","Pé","Szo"],dayOfWeek:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},az:{months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],dayOfWeekShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayOfWeek:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"]},bs:{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ca:{months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],dayOfWeekShort:["Dg","Dl","Dt","Dc","Dj","Dv","Ds"],dayOfWeek:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"]},"en-GB":{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},et:{months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],dayOfWeekShort:["P","E","T","K","N","R","L"],dayOfWeek:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"]},eu:{months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],dayOfWeekShort:["Ig.","Al.","Ar.","Az.","Og.","Or.","La."],dayOfWeek:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"]},fi:{months:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],dayOfWeekShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayOfWeek:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},gl:{months:["Xan","Feb","Maz","Abr","Mai","Xun","Xul","Ago","Set","Out","Nov","Dec"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Xov","Ven","Sab"],dayOfWeek:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"]},hr:{months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ko:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},lt:{months:["Sausio","Vasario","Kovo","Balandžio","Gegužės","Birželio","Liepos","Rugpjūčio","Rugsėjo","Spalio","Lapkričio","Gruodžio"],dayOfWeekShort:["Sek","Pir","Ant","Tre","Ket","Pen","Šeš"],dayOfWeek:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"]},lv:{months:["Janvāris","Februāris","Marts","Aprīlis ","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],dayOfWeekShort:["Sv","Pr","Ot","Tr","Ct","Pk","St"],dayOfWeek:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"]},mk:{months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],dayOfWeekShort:["нед","пон","вто","сре","чет","пет","саб"],dayOfWeek:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"]},mn:{months:["1-р сар","2-р сар","3-р сар","4-р сар","5-р сар","6-р сар","7-р сар","8-р сар","9-р сар","10-р сар","11-р сар","12-р сар"],dayOfWeekShort:["Дав","Мяг","Лха","Пүр","Бсн","Бям","Ням"],dayOfWeek:["Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба","Ням"]},"pt-BR":{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},sk:{months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],dayOfWeekShort:["Ne","Po","Ut","St","Št","Pi","So"],dayOfWeek:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},sq:{months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],dayOfWeekShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],dayOfWeek:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"]},"sr-YU":{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sre","čet","Pet","Sub"],dayOfWeek:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},sr:{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],dayOfWeekShort:["нед","пон","уто","сре","чет","пет","суб"],dayOfWeek:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},sv:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayOfWeek:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"]},"zh-TW":{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},zh:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},ug:{months:["1-ئاي","2-ئاي","3-ئاي","4-ئاي","5-ئاي","6-ئاي","7-ئاي","8-ئاي","9-ئاي","10-ئاي","11-ئاي","12-ئاي"],dayOfWeek:["يەكشەنبە","دۈشەنبە","سەيشەنبە","چارشەنبە","پەيشەنبە","جۈمە","شەنبە"]},he:{months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],dayOfWeekShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayOfWeek:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"]},hy:{months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],dayOfWeekShort:["Կի","Երկ","Երք","Չոր","Հնգ","Ուրբ","Շբթ"],dayOfWeek:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"]},kg:{months:["Үчтүн айы","Бирдин айы","Жалган Куран","Чын Куран","Бугу","Кулжа","Теке","Баш Оона","Аяк Оона","Тогуздун айы","Жетинин айы","Бештин айы"],dayOfWeekShort:["Жек","Дүй","Шей","Шар","Бей","Жум","Ише"],dayOfWeek:["Жекшемб","Дүйшөмб","Шейшемб","Шаршемб","Бейшемби","Жума","Ишенб"]},rm:{months:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],dayOfWeekShort:["Du","Gli","Ma","Me","Gie","Ve","So"],dayOfWeek:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"]},ka:{months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],dayOfWeekShort:["კვ","ორშ","სამშ","ოთხ","ხუთ","პარ","შაბ"],dayOfWeek:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"]}},ownerDocument:document,contentWindow:window,value:"",rtl:!1,format:"Y/m/d H:i",formatTime:"H:i",formatDate:"Y/m/d",startDate:!1,step:60,monthChangeSpinner:!0,closeOnDateSelect:!1,closeOnTimeSelect:!0,closeOnWithoutClick:!0,closeOnInputClick:!0,openOnFocus:!0,timepicker:!0,datepicker:!0,weeks:!1,defaultTime:!1,defaultDate:!1,minDate:!1,maxDate:!1,minTime:!1,maxTime:!1,minDateTime:!1,maxDateTime:!1,allowTimes:[],opened:!1,initTime:!0,inline:!1,theme:"",touchMovedThreshold:5,onSelectDate:function(){},onSelectTime:function(){},onChangeMonth:function(){},onGetWeekOfYear:function(){},onChangeYear:function(){},onChangeDateTime:function(){},onShow:function(){},onClose:function(){},onGenerate:function(){},withoutCopyright:!0,inverseButton:!1,hours12:!1,next:"xdsoft_next",prev:"xdsoft_prev",dayOfWeekStart:0,parentID:"body",timeHeightInTimePicker:25,timepickerScrollbar:!0,todayButton:!0,prevButton:!0,nextButton:!0,defaultSelect:!0,scrollMonth:!0,scrollTime:!0,scrollInput:!0,lazyInit:!1,mask:!1,validateOnBlur:!0,allowBlank:!0,yearStart:1950,yearEnd:2050,monthStart:0,monthEnd:11,style:"",id:"",fixed:!1,roundTime:"round",className:"",weekends:[],highlightedDates:[],highlightedPeriods:[],allowDates:[],allowDateRe:null,disabledDates:[],disabledWeekDays:[],yearOffset:0,beforeShowDay:null,enterLikeTab:!0,showApplyButton:!1},r=null,n=null,o="en",i={meridiem:["AM","PM"]},s=function(){var t=a.i18n[o],s={days:t.dayOfWeek,daysShort:t.dayOfWeekShort,months:t.months,monthsShort:e.map(t.months,function(e){return e.substring(0,3)})};"function"==typeof DateFormatter&&(r=n=new DateFormatter({dateSettings:e.extend({},i,s)}))},u={moment:{default_options:{format:"YYYY/MM/DD HH:mm",formatDate:"YYYY/MM/DD",formatTime:"HH:mm"},formatter:{parseDate:function(e,t){if(l(t))return n.parseDate(e,t);var a=moment(e,t);return!!a.isValid()&&a.toDate()},formatDate:function(e,t){return l(t)?n.formatDate(e,t):moment(e).format(t)},formatMask:function(e){return e.replace(/Y{4}/g,"9999").replace(/Y{2}/g,"99").replace(/M{2}/g,"19").replace(/D{2}/g,"39").replace(/H{2}/g,"29").replace(/m{2}/g,"59").replace(/s{2}/g,"59")}}}};e.datetimepicker={setLocale:function(e){var t=a.i18n[e]?e:"en";o!==t&&(o=t,s())},setDateFormatter:function(t){if("string"==typeof t&&u.hasOwnProperty(t)){var n=u[t];e.extend(a,n.default_options),r=n.formatter}else r=t}};var d={RFC_2822:"D, d M Y H:i:s O",ATOM:"Y-m-dTH:i:sP",ISO_8601:"Y-m-dTH:i:sO",RFC_822:"D, d M y H:i:s O",RFC_850:"l, d-M-y H:i:s T",RFC_1036:"D, d M y H:i:s O",RFC_1123:"D, d M Y H:i:s O",RSS:"D, d M Y H:i:s O",W3C:"Y-m-dTH:i:sP"},l=function(e){return-1!==Object.values(d).indexOf(e)};e.extend(e.datetimepicker,d),s(),window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var a=/(-([a-z]))/g;return"float"===t&&(t="styleFloat"),a.test(t)&&(t=t.replace(a,function(e,t,a){return a.toUpperCase()})),e.currentStyle[t]||null},this}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,t){var a,r;for(a=t||0,r=this.length;a
'),s=e('
'),i.append(s),u.addClass("xdsoft_scroller_box").append(i),D=function(e){var t=d(e).y-c+p;t<0&&(t=0),t+s[0].offsetHeight>h&&(t=h-s[0].offsetHeight),u.trigger("scroll_element.xdsoft_scroller",[l?t/l:0])},s.on("touchstart.xdsoft_scroller mousedown.xdsoft_scroller",function(r){n||u.trigger("resize_scroll.xdsoft_scroller",[a]),c=d(r).y,p=parseInt(s.css("margin-top"),10),h=i[0].offsetHeight,"mousedown"===r.type||"touchstart"===r.type?(t.ownerDocument&&e(t.ownerDocument.body).addClass("xdsoft_noselect"),e([t.ownerDocument.body,t.contentWindow]).on("touchend mouseup.xdsoft_scroller",function a(){e([t.ownerDocument.body,t.contentWindow]).off("touchend mouseup.xdsoft_scroller",a).off("mousemove.xdsoft_scroller",D).removeClass("xdsoft_noselect")}),e(t.ownerDocument.body).on("mousemove.xdsoft_scroller",D)):(g=!0,r.stopPropagation(),r.preventDefault())}).on("touchmove",function(e){g&&(e.preventDefault(),D(e))}).on("touchend touchcancel",function(){g=!1,p=0}),u.on("scroll_element.xdsoft_scroller",function(e,t){n||u.trigger("resize_scroll.xdsoft_scroller",[t,!0]),t=t>1?1:t<0||isNaN(t)?0:t,s.css("margin-top",l*t),setTimeout(function(){r.css("marginTop",-parseInt((r[0].offsetHeight-n)*t,10))},10)}).on("resize_scroll.xdsoft_scroller",function(e,t,a){var d,f;n=u[0].clientHeight,o=r[0].offsetHeight,f=(d=n/o)*i[0].offsetHeight,d>1?s.hide():(s.show(),s.css("height",parseInt(f>10?f:10,10)),l=i[0].offsetHeight-s[0].offsetHeight,!0!==a&&u.trigger("scroll_element.xdsoft_scroller",[t||Math.abs(parseInt(r.css("marginTop"),10))/(o-n)]))}),u.on("mousewheel",function(e){var t=Math.abs(parseInt(r.css("marginTop"),10));return(t-=20*e.deltaY)<0&&(t=0),u.trigger("scroll_element.xdsoft_scroller",[t/(o-n)]),e.stopPropagation(),!1}),u.on("touchstart",function(e){f=d(e),m=Math.abs(parseInt(r.css("marginTop"),10))}),u.on("touchmove",function(e){if(f){e.preventDefault();var t=d(e);u.trigger("scroll_element.xdsoft_scroller",[(m-(t.y-f.y))/(o-n)])}}),u.on("touchend touchcancel",function(){f=!1,m=0})),u.trigger("resize_scroll.xdsoft_scroller",[a])):u.find(".xdsoft_scrollbar").hide()})},e.fn.datetimepicker=function(n,i){var s,u,d=this,l=48,f=57,c=96,m=105,h=17,g=46,p=13,D=27,v=8,y=37,b=38,k=39,x=40,T=9,S=116,M=65,w=67,O=86,W=90,_=89,F=!1,C=e.isPlainObject(n)||!n?e.extend(!0,{},a,n):e.extend(!0,{},a),P=0,Y=function(e){e.on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function t(){e.is(":disabled")||e.data("xdsoft_datetimepicker")||(clearTimeout(P),P=setTimeout(function(){e.data("xdsoft_datetimepicker")||s(e),e.off("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",t).trigger("open.xdsoft")},100))})};return s=function(a){function i(){var e,t=!1;return C.startDate?t=A.strToDate(C.startDate):(t=C.value||(a&&a.val&&a.val()?a.val():""))?(t=A.strToDateTime(t),C.yearOffset&&(t=new Date(t.getFullYear()-C.yearOffset,t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()))):C.defaultDate&&(t=A.strToDateTime(C.defaultDate),C.defaultTime&&(e=A.strtotime(C.defaultTime),t.setHours(e.getHours()),t.setMinutes(e.getMinutes()))),t&&A.isValidDate(t)?j.data("changed",!0):t="",t||0}function s(t){var n=function(e,t){var a=e.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g,"\\$1").replace(/_/g,"{digit+}").replace(/([0-9]{1})/g,"{digit$1}").replace(/\{digit([0-9]{1})\}/g,"[0-$1_]{1}").replace(/\{digit[\+]\}/g,"[0-9_]{1}");return new RegExp(a).test(t)},o=function(e,a){if(!(e="string"==typeof e||e instanceof String?t.ownerDocument.getElementById(e):e))return!1;if(e.createTextRange){var r=e.createTextRange();return r.collapse(!0),r.moveEnd("character",a),r.moveStart("character",a),r.select(),!0}return!!e.setSelectionRange&&(e.setSelectionRange(a,a),!0)};t.mask&&a.off("keydown.xdsoft"),!0===t.mask&&(r.formatMask?t.mask=r.formatMask(t.format):t.mask=t.format.replace(/Y/g,"9999").replace(/F/g,"9999").replace(/m/g,"19").replace(/d/g,"39").replace(/H/g,"29").replace(/i/g,"59").replace(/s/g,"59")),"string"===e.type(t.mask)&&(n(t.mask,a.val())||(a.val(t.mask.replace(/[0-9]/g,"_")),o(a[0],0)),a.on("paste.xdsoft",function(r){var i=(r.clipboardData||r.originalEvent.clipboardData||window.clipboardData).getData("text"),s=this.value,u=this.selectionStart;return s=s.substr(0,u)+i+s.substr(u+i.length),u+=i.length,n(t.mask,s)?(this.value=s,o(this,u)):""===e.trim(s)?this.value=t.mask.replace(/[0-9]/g,"_"):a.trigger("error_input.xdsoft"),r.preventDefault(),!1}),a.on("keydown.xdsoft",function(r){var i,s=this.value,u=r.which,d=this.selectionStart,C=this.selectionEnd,P=d!==C;if(u>=l&&u<=f||u>=c&&u<=m||u===v||u===g){for(i=u===v||u===g?"_":String.fromCharCode(c<=u&&u<=m?u-l:u),u===v&&d&&!P&&(d-=1);;){var Y=t.mask.substr(d,1),A=d0;if(!(/[^0-9_]/.test(Y)&&A&&H))break;d+=u!==v||P?1:-1}if(P){var j=C-d,J=t.mask.replace(/[0-9]/g,"_"),z=J.substr(d,j).substr(1);s=s.substr(0,d)+(i+z)+s.substr(d+j)}else s=s.substr(0,d)+i+s.substr(d+1);if(""===e.trim(s))s=J;else if(d===t.mask.length)return r.preventDefault(),!1;for(d+=u===v?0:1;/[^0-9_]/.test(t.mask.substr(d,1))&&d0;)d+=u===v?0:1;n(t.mask,s)?(this.value=s,o(this,d)):""===e.trim(s)?this.value=t.mask.replace(/[0-9]/g,"_"):a.trigger("error_input.xdsoft")}else if(-1!==[M,w,O,W,_].indexOf(u)&&F||-1!==[D,b,x,y,k,S,h,T,p].indexOf(u))return!0;return r.preventDefault(),!1}))}var u,d,P,Y,A,H,j=e('
'),J=e(''),z=e('
'),I=e('
'),N=e('
'),L=e('
'),E=L.find(".xdsoft_time_box").eq(0),R=e('
'),V=e(''),B=e('
'),G=e('
'),U=!1,q=0;C.id&&j.attr("id",C.id),C.style&&j.attr("style",C.style),C.weeks&&j.addClass("xdsoft_showweeks"),C.rtl&&j.addClass("xdsoft_rtl"),j.addClass("xdsoft_"+C.theme),j.addClass(C.className),I.find(".xdsoft_month span").after(B),I.find(".xdsoft_year span").after(G),I.find(".xdsoft_month,.xdsoft_year").on("touchstart mousedown.xdsoft",function(t){var a,r,n=e(this).find(".xdsoft_select").eq(0),o=0,i=0,s=n.is(":visible");for(I.find(".xdsoft_select").hide(),A.currentTime&&(o=A.currentTime[e(this).hasClass("xdsoft_month")?"getMonth":"getFullYear"]()),n[s?"hide":"show"](),a=n.find("div.xdsoft_option"),r=0;rC.touchMovedThreshold&&(this.touchMoved=!0)};I.find(".xdsoft_select").xdsoftScroller(C).on("touchstart mousedown.xdsoft",function(e){var t=e.originalEvent;this.touchMoved=!1,this.touchStartPosition=t.touches?t.touches[0]:t,e.stopPropagation(),e.preventDefault()}).on("touchmove",".xdsoft_option",X).on("touchend mousedown.xdsoft",".xdsoft_option",function(){if(!this.touchMoved){void 0!==A.currentTime&&null!==A.currentTime||(A.currentTime=A.now());var t=A.currentTime.getFullYear();A&&A.currentTime&&A.currentTime[e(this).parent().parent().hasClass("xdsoft_monthselect")?"setMonth":"setFullYear"](e(this).data("value")),e(this).parent().parent().hide(),j.trigger("xchange.xdsoft"),C.onChangeMonth&&e.isFunction(C.onChangeMonth)&&C.onChangeMonth.call(j,A.currentTime,j.data("input")),t!==A.currentTime.getFullYear()&&e.isFunction(C.onChangeYear)&&C.onChangeYear.call(j,A.currentTime,j.data("input"))}}),j.getValue=function(){return A.getCurrentTime()},j.setOptions=function(n){var o={};C=e.extend(!0,{},C,n),n.allowTimes&&e.isArray(n.allowTimes)&&n.allowTimes.length&&(C.allowTimes=e.extend(!0,[],n.allowTimes)),n.weekends&&e.isArray(n.weekends)&&n.weekends.length&&(C.weekends=e.extend(!0,[],n.weekends)),n.allowDates&&e.isArray(n.allowDates)&&n.allowDates.length&&(C.allowDates=e.extend(!0,[],n.allowDates)),n.allowDateRe&&"[object String]"===Object.prototype.toString.call(n.allowDateRe)&&(C.allowDateRe=new RegExp(n.allowDateRe)),n.highlightedDates&&e.isArray(n.highlightedDates)&&n.highlightedDates.length&&(e.each(n.highlightedDates,function(a,n){var i,s=e.map(n.split(","),e.trim),u=new t(r.parseDate(s[0],C.formatDate),s[1],s[2]),d=r.formatDate(u.date,C.formatDate);void 0!==o[d]?(i=o[d].desc)&&i.length&&u.desc&&u.desc.length&&(o[d].desc=i+"\n"+u.desc):o[d]=u}),C.highlightedDates=e.extend(!0,[],o)),n.highlightedPeriods&&e.isArray(n.highlightedPeriods)&&n.highlightedPeriods.length&&(o=e.extend(!0,[],C.highlightedDates),e.each(n.highlightedPeriods,function(a,n){var i,s,u,d,l,f,c;if(e.isArray(n))i=n[0],s=n[1],u=n[2],c=n[3];else{var m=e.map(n.split(","),e.trim);i=r.parseDate(m[0],C.formatDate),s=r.parseDate(m[1],C.formatDate),u=m[2],c=m[3]}for(;i<=s;)d=new t(i,u,c),l=r.formatDate(i,C.formatDate),i.setDate(i.getDate()+1),void 0!==o[l]?(f=o[l].desc)&&f.length&&d.desc&&d.desc.length&&(o[l].desc=f+"\n"+d.desc):o[l]=d}),C.highlightedDates=e.extend(!0,[],o)),n.disabledDates&&e.isArray(n.disabledDates)&&n.disabledDates.length&&(C.disabledDates=e.extend(!0,[],n.disabledDates)),n.disabledWeekDays&&e.isArray(n.disabledWeekDays)&&n.disabledWeekDays.length&&(C.disabledWeekDays=e.extend(!0,[],n.disabledWeekDays)),!C.open&&!C.opened||C.inline||a.trigger("open.xdsoft"),C.inline&&(U=!0,j.addClass("xdsoft_inline"),a.after(j).hide()),C.inverseButton&&(C.next="xdsoft_prev",C.prev="xdsoft_next"),C.datepicker?z.addClass("active"):z.removeClass("active"),C.timepicker?L.addClass("active"):L.removeClass("active"),C.value&&(A.setCurrentTime(C.value),a&&a.val&&a.val(A.str)),isNaN(C.dayOfWeekStart)?C.dayOfWeekStart=0:C.dayOfWeekStart=parseInt(C.dayOfWeekStart,10)%7,C.timepickerScrollbar||E.xdsoftScroller(C,"hide"),C.minDate&&/^[\+\-](.*)$/.test(C.minDate)&&(C.minDate=r.formatDate(A.strToDateTime(C.minDate),C.formatDate)),C.maxDate&&/^[\+\-](.*)$/.test(C.maxDate)&&(C.maxDate=r.formatDate(A.strToDateTime(C.maxDate),C.formatDate)),C.minDateTime&&/^\+(.*)$/.test(C.minDateTime)&&(C.minDateTime=A.strToDateTime(C.minDateTime).dateFormat(C.formatDate)),C.maxDateTime&&/^\+(.*)$/.test(C.maxDateTime)&&(C.maxDateTime=A.strToDateTime(C.maxDateTime).dateFormat(C.formatDate)),V.toggle(C.showApplyButton),I.find(".xdsoft_today_button").css("visibility",C.todayButton?"visible":"hidden"),I.find("."+C.prev).css("visibility",C.prevButton?"visible":"hidden"),I.find("."+C.next).css("visibility",C.nextButton?"visible":"hidden"),s(C),C.validateOnBlur&&a.off("blur.xdsoft").on("blur.xdsoft",function(){if(C.allowBlank&&(!e.trim(e(this).val()).length||"string"==typeof C.mask&&e.trim(e(this).val())===C.mask.replace(/[0-9]/g,"_")))e(this).val(null),j.data("xdsoft_datetime").empty();else{var t=r.parseDate(e(this).val(),C.format);if(t)e(this).val(r.formatDate(t,C.format));else{var a=+[e(this).val()[0],e(this).val()[1]].join(""),n=+[e(this).val()[2],e(this).val()[3]].join("");!C.datepicker&&C.timepicker&&a>=0&&a<24&&n>=0&&n<60?e(this).val([a,n].map(function(e){return e>9?e:"0"+e}).join(":")):e(this).val(r.formatDate(A.now(),C.format))}j.data("xdsoft_datetime").setCurrentTime(e(this).val())}j.trigger("changedatetime.xdsoft"),j.trigger("close.xdsoft")}),C.dayOfWeekStartPrev=0===C.dayOfWeekStart?6:C.dayOfWeekStart-1,j.trigger("xchange.xdsoft").trigger("afterOpen.xdsoft")},j.data("options",C).on("touchstart mousedown.xdsoft",function(e){return e.stopPropagation(),e.preventDefault(),G.hide(),B.hide(),!1}),E.append(R),E.xdsoftScroller(C),j.on("afterOpen.xdsoft",function(){E.xdsoftScroller(C)}),j.append(z).append(L),!0!==C.withoutCopyright&&j.append(J),z.append(I).append(N).append(V),e(C.parentID).append(j),A=new function(){var t=this;t.now=function(e){var a,r,n=new Date;return!e&&C.defaultDate&&(a=t.strToDateTime(C.defaultDate),n.setFullYear(a.getFullYear()),n.setMonth(a.getMonth()),n.setDate(a.getDate())),n.setFullYear(n.getFullYear()),!e&&C.defaultTime&&(r=t.strtotime(C.defaultTime),n.setHours(r.getHours()),n.setMinutes(r.getMinutes()),n.setSeconds(r.getSeconds()),n.setMilliseconds(r.getMilliseconds())),n},t.isValidDate=function(e){return"[object Date]"===Object.prototype.toString.call(e)&&!isNaN(e.getTime())},t.setCurrentTime=function(e,a){"string"==typeof e?t.currentTime=t.strToDateTime(e):t.isValidDate(e)?t.currentTime=e:e||a||!C.allowBlank||C.inline?t.currentTime=t.now():t.currentTime=null,j.trigger("xchange.xdsoft")},t.empty=function(){t.currentTime=null},t.getCurrentTime=function(){return t.currentTime},t.nextMonth=function(){void 0!==t.currentTime&&null!==t.currentTime||(t.currentTime=t.now());var a,r=t.currentTime.getMonth()+1;return 12===r&&(t.currentTime.setFullYear(t.currentTime.getFullYear()+1),r=0),a=t.currentTime.getFullYear(),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),r+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(r),C.onChangeMonth&&e.isFunction(C.onChangeMonth)&&C.onChangeMonth.call(j,A.currentTime,j.data("input")),a!==t.currentTime.getFullYear()&&e.isFunction(C.onChangeYear)&&C.onChangeYear.call(j,A.currentTime,j.data("input")),j.trigger("xchange.xdsoft"),r},t.prevMonth=function(){void 0!==t.currentTime&&null!==t.currentTime||(t.currentTime=t.now());var a=t.currentTime.getMonth()-1;return-1===a&&(t.currentTime.setFullYear(t.currentTime.getFullYear()-1),a=11),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),a+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(a),C.onChangeMonth&&e.isFunction(C.onChangeMonth)&&C.onChangeMonth.call(j,A.currentTime,j.data("input")),j.trigger("xchange.xdsoft"),a},t.getWeekOfYear=function(t){if(C.onGetWeekOfYear&&e.isFunction(C.onGetWeekOfYear)){var a=C.onGetWeekOfYear.call(j,t);if(void 0!==a)return a}var r=new Date(t.getFullYear(),0,1);return 4!==r.getDay()&&r.setMonth(0,1+(4-r.getDay()+7)%7),Math.ceil(((t-r)/864e5+r.getDay()+1)/7)},t.strToDateTime=function(e){var a,n,o=[];return e&&e instanceof Date&&t.isValidDate(e)?e:((o=/^([+-]{1})(.*)$/.exec(e))&&(o[2]=r.parseDate(o[2],C.formatDate)),o&&o[2]?(a=o[2].getTime()-6e4*o[2].getTimezoneOffset(),n=new Date(t.now(!0).getTime()+parseInt(o[1]+"1",10)*a)):n=e?r.parseDate(e,C.format):t.now(),t.isValidDate(n)||(n=t.now()),n)},t.strToDate=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var a=e?r.parseDate(e,C.formatDate):t.now(!0);return t.isValidDate(a)||(a=t.now(!0)),a},t.strtotime=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var a=e?r.parseDate(e,C.formatTime):t.now(!0);return t.isValidDate(a)||(a=t.now(!0)),a},t.str=function(){var e=C.format;return C.yearOffset&&(e=(e=e.replace("Y",t.currentTime.getFullYear()+C.yearOffset)).replace("y",String(t.currentTime.getFullYear()+C.yearOffset).substring(2,4))),r.formatDate(t.currentTime,e)},t.currentTime=this.now()},V.on("touchend click",function(e){e.preventDefault(),j.data("changed",!0),A.setCurrentTime(i()),a.val(A.str()),j.trigger("close.xdsoft")}),I.find(".xdsoft_today_button").on("touchend mousedown.xdsoft",function(){j.data("changed",!0),A.setCurrentTime(0,!0),j.trigger("afterOpen.xdsoft")}).on("dblclick.xdsoft",function(){var e,t,r=A.getCurrentTime();r=new Date(r.getFullYear(),r.getMonth(),r.getDate()),e=A.strToDate(C.minDate),r<(e=new Date(e.getFullYear(),e.getMonth(),e.getDate()))||(t=A.strToDate(C.maxDate),r>(t=new Date(t.getFullYear(),t.getMonth(),t.getDate()))||(a.val(A.str()),a.trigger("change"),j.trigger("close.xdsoft")))}),I.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),a=0,r=!1;!function e(n){t.hasClass(C.next)?A.nextMonth():t.hasClass(C.prev)&&A.prevMonth(),C.monthChangeSpinner&&(r||(a=setTimeout(e,n||100)))}(500),e([C.ownerDocument.body,C.contentWindow]).on("touchend mouseup.xdsoft",function t(){clearTimeout(a),r=!0,e([C.ownerDocument.body,C.contentWindow]).off("touchend mouseup.xdsoft",t)})}),L.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),a=0,r=!1,n=110;!function e(o){var i=E[0].clientHeight,s=R[0].offsetHeight,u=Math.abs(parseInt(R.css("marginTop"),10));t.hasClass(C.next)&&s-i-C.timeHeightInTimePicker>=u?R.css("marginTop","-"+(u+C.timeHeightInTimePicker)+"px"):t.hasClass(C.prev)&&u-C.timeHeightInTimePicker>=0&&R.css("marginTop","-"+(u-C.timeHeightInTimePicker)+"px"),E.trigger("scroll_element.xdsoft_scroller",[Math.abs(parseInt(R[0].style.marginTop,10)/(s-i))]),n=n>10?10:n-10,r||(a=setTimeout(e,o||n))}(500),e([C.ownerDocument.body,C.contentWindow]).on("touchend mouseup.xdsoft",function t(){clearTimeout(a),r=!0,e([C.ownerDocument.body,C.contentWindow]).off("touchend mouseup.xdsoft",t)})}),u=0,j.on("xchange.xdsoft",function(t){clearTimeout(u),u=setTimeout(function(){void 0!==A.currentTime&&null!==A.currentTime||(A.currentTime=A.now());for(var t,i,s,u,d,l,f,c,m,h,g="",p=new Date(A.currentTime.getFullYear(),A.currentTime.getMonth(),1,12,0,0),D=0,v=A.now(),y=!1,b=!1,k=!1,x=!1,T=[],S=!0,M="";p.getDay()!==C.dayOfWeekStart;)p.setDate(p.getDate()-1);for(g+="",C.weeks&&(g+=""),t=0;t<7;t+=1)g+="";g+="",g+="",!1!==C.maxDate&&(y=A.strToDate(C.maxDate),y=new Date(y.getFullYear(),y.getMonth(),y.getDate(),23,59,59,999)),!1!==C.minDate&&(b=A.strToDate(C.minDate),b=new Date(b.getFullYear(),b.getMonth(),b.getDate())),!1!==C.minDateTime&&(k=A.strToDate(C.minDateTime),k=new Date(k.getFullYear(),k.getMonth(),k.getDate(),k.getHours(),k.getMinutes(),k.getSeconds())),!1!==C.maxDateTime&&(x=A.strToDate(C.maxDateTime),x=new Date(x.getFullYear(),x.getMonth(),x.getDate(),x.getHours(),x.getMinutes(),x.getSeconds()));var w;for(!1!==x&&(w=31*(12*x.getFullYear()+x.getMonth())+x.getDate());D0&&-1===C.allowDates.indexOf(r.formatDate(p,C.formatDate))&&T.push("xdsoft_disabled");var O=31*(12*p.getFullYear()+p.getMonth())+p.getDate();(!1!==y&&p>y||!1!==k&&pw||c&&!1===c[0])&&T.push("xdsoft_disabled"),-1!==C.disabledDates.indexOf(r.formatDate(p,C.formatDate))&&T.push("xdsoft_disabled"),-1!==C.disabledWeekDays.indexOf(s)&&T.push("xdsoft_disabled"),a.is("[disabled]")&&T.push("xdsoft_disabled"),c&&""!==c[1]&&T.push(c[1]),A.currentTime.getMonth()!==l&&T.push("xdsoft_other_month"),(C.defaultSelect||j.data("changed"))&&r.formatDate(A.currentTime,C.formatDate)===r.formatDate(p,C.formatDate)&&T.push("xdsoft_current"),r.formatDate(v,C.formatDate)===r.formatDate(p,C.formatDate)&&T.push("xdsoft_today"),0!==p.getDay()&&6!==p.getDay()&&-1===C.weekends.indexOf(r.formatDate(p,C.formatDate))||T.push("xdsoft_weekend"),void 0!==C.highlightedDates[r.formatDate(p,C.formatDate)]&&(i=C.highlightedDates[r.formatDate(p,C.formatDate)],T.push(void 0===i.style?"xdsoft_highlighted_default":i.style),h=void 0===i.desc?"":i.desc),C.beforeShowDay&&e.isFunction(C.beforeShowDay)&&T.push(C.beforeShowDay(p)),S&&(g+="",S=!1,C.weeks&&(g+="")),g+='",p.getDay()===C.dayOfWeekStartPrev&&(g+="",S=!0),p.setDate(u+1)}g+="
"+C.i18n[o].dayOfWeekShort[(t+C.dayOfWeekStart)%7]+"
"+f+"
'+u+"
",N.html(g),I.find(".xdsoft_label span").eq(0).text(C.i18n[o].months[A.currentTime.getMonth()]),I.find(".xdsoft_label span").eq(1).text(A.currentTime.getFullYear()+C.yearOffset),M="",l="";var W=0;if(!1!==C.minTime){F=A.strtotime(C.minTime);W=60*F.getHours()+F.getMinutes()}var _=1440;if(!1!==C.maxTime){F=A.strtotime(C.maxTime);_=60*F.getHours()+F.getMinutes()}if(!1!==C.minDateTime){F=A.strToDateTime(C.minDateTime);r.formatDate(A.currentTime,C.formatDate)===r.formatDate(F,C.formatDate)&&(l=60*F.getHours()+F.getMinutes())>W&&(W=l)}if(!1!==C.maxDateTime){var F=A.strToDateTime(C.maxDateTime);r.formatDate(A.currentTime,C.formatDate)===r.formatDate(F,C.formatDate)&&(l=60*F.getHours()+F.getMinutes())<_&&(_=l)}if(m=function(t,n){var o,i=A.now(),s=C.allowTimes&&e.isArray(C.allowTimes)&&C.allowTimes.length;i.setHours(t),t=parseInt(i.getHours(),10),i.setMinutes(n),n=parseInt(i.getMinutes(),10),T=[];var u=60*t+n;(a.is("[disabled]")||u>=_||u59||o.getMinutes()===parseInt(n,10))&&(C.defaultSelect||j.data("changed")?T.push("xdsoft_current"):C.initTime&&T.push("xdsoft_init_time")),parseInt(v.getHours(),10)===parseInt(t,10)&&parseInt(v.getMinutes(),10)===parseInt(n,10)&&T.push("xdsoft_today"),M+='
'+r.formatDate(i,C.formatTime)+"
"},C.allowTimes&&e.isArray(C.allowTimes)&&C.allowTimes.length)for(D=0;D=_||m((D<10?"0":"")+D,l=(t<10?"0":"")+t))}for(R.html(M),n="",D=parseInt(C.yearStart,10);D<=parseInt(C.yearEnd,10);D+=1)n+='
'+(D+C.yearOffset)+"
";for(G.children().eq(0).html(n),D=parseInt(C.monthStart,10),n="";D<=parseInt(C.monthEnd,10);D+=1)n+='
'+C.i18n[o].months[D]+"
";B.children().eq(0).html(n),e(j).trigger("generate.xdsoft")},10),t.stopPropagation()}).on("afterOpen.xdsoft",function(){if(C.timepicker){var e,t,a,r;R.find(".xdsoft_current").length?e=".xdsoft_current":R.find(".xdsoft_init_time").length&&(e=".xdsoft_init_time"),e?(t=E[0].clientHeight,(a=R[0].offsetHeight)-t<(r=R.find(e).index()*C.timeHeightInTimePicker+1)&&(r=a-t),E.trigger("scroll_element.xdsoft_scroller",[parseInt(r,10)/(a-t)])):E.trigger("scroll_element.xdsoft_scroller",[0])}}),d=0,N.on("touchend click.xdsoft","td",function(t){t.stopPropagation(),d+=1;var r=e(this),n=A.currentTime;if(void 0!==n&&null!==n||(A.currentTime=A.now(),n=A.currentTime),r.hasClass("xdsoft_disabled"))return!1;n.setDate(1),n.setFullYear(r.data("year")),n.setMonth(r.data("month")),n.setDate(r.data("date")),j.trigger("select.xdsoft",[n]),a.val(A.str()),C.onSelectDate&&e.isFunction(C.onSelectDate)&&C.onSelectDate.call(j,A.currentTime,j.data("input"),t),j.data("changed",!0),j.trigger("xchange.xdsoft"),j.trigger("changedatetime.xdsoft"),(d>1||!0===C.closeOnDateSelect||!1===C.closeOnDateSelect&&!C.timepicker)&&!C.inline&&j.trigger("close.xdsoft"),setTimeout(function(){d=0},200)}),R.on("touchstart","div",function(e){this.touchMoved=!1}).on("touchmove","div",X).on("touchend click.xdsoft","div",function(t){if(!this.touchMoved){t.stopPropagation();var a=e(this),r=A.currentTime;if(void 0!==r&&null!==r||(A.currentTime=A.now(),r=A.currentTime),a.hasClass("xdsoft_disabled"))return!1;r.setHours(a.data("hour")),r.setMinutes(a.data("minute")),j.trigger("select.xdsoft",[r]),j.data("input").val(A.str()),C.onSelectTime&&e.isFunction(C.onSelectTime)&&C.onSelectTime.call(j,A.currentTime,j.data("input"),t),j.data("changed",!0),j.trigger("xchange.xdsoft"),j.trigger("changedatetime.xdsoft"),!0!==C.inline&&!0===C.closeOnTimeSelect&&j.trigger("close.xdsoft")}}),z.on("mousewheel.xdsoft",function(e){return!C.scrollMonth||(e.deltaY<0?A.nextMonth():A.prevMonth(),!1)}),a.on("mousewheel.xdsoft",function(e){return!C.scrollInput||(!C.datepicker&&C.timepicker?((P=R.find(".xdsoft_current").length?R.find(".xdsoft_current").eq(0).index():0)+e.deltaY>=0&&P+e.deltaYc+m?(l="bottom",r=c+m-t.top):r-=m):r+j[0].offsetHeight>c+m&&(r=t.top-j[0].offsetHeight+1),r<0&&(r=0),n+a.offsetWidth>d&&(n=d-a.offsetWidth)),i=j[0],H(i,function(e){if("relative"===C.contentWindow.getComputedStyle(e).getPropertyValue("position")&&d>=e.offsetWidth)return n-=(d-e.offsetWidth)/2,!1}),(f={position:o,left:n,top:"",bottom:""})[l]=r,j.css(f)},j.on("open.xdsoft",function(t){var a=!0;C.onShow&&e.isFunction(C.onShow)&&(a=C.onShow.call(j,A.currentTime,j.data("input"),t)),!1!==a&&(j.show(),Y(),e(C.contentWindow).off("resize.xdsoft",Y).on("resize.xdsoft",Y),C.closeOnWithoutClick&&e([C.ownerDocument.body,C.contentWindow]).on("touchstart mousedown.xdsoft",function t(){j.trigger("close.xdsoft"),e([C.ownerDocument.body,C.contentWindow]).off("touchstart mousedown.xdsoft",t)}))}).on("close.xdsoft",function(t){var a=!0;I.find(".xdsoft_month,.xdsoft_year").find(".xdsoft_select").hide(),C.onClose&&e.isFunction(C.onClose)&&(a=C.onClose.call(j,A.currentTime,j.data("input"),t)),!1===a||C.opened||C.inline||j.hide(),t.stopPropagation()}).on("toggle.xdsoft",function(){j.is(":visible")?j.trigger("close.xdsoft"):j.trigger("open.xdsoft")}).data("input",a),q=0,j.data("xdsoft_datetime",A),j.setOptions(C),A.setCurrentTime(i()),a.data("xdsoft_datetimepicker",j).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function(){a.is(":disabled")||a.data("xdsoft_datetimepicker").is(":visible")&&C.closeOnInputClick||C.openOnFocus&&(clearTimeout(q),q=setTimeout(function(){a.is(":disabled")||(U=!0,A.setCurrentTime(i(),!0),C.mask&&s(C),j.trigger("open.xdsoft"))},100))}).on("keydown.xdsoft",function(t){var a,r=t.which;return-1!==[p].indexOf(r)&&C.enterLikeTab?(a=e("input:visible,textarea:visible,button:visible,a:visible"),j.trigger("close.xdsoft"),a.eq(a.index(this)+1).focus(),!1):-1!==[T].indexOf(r)?(j.trigger("close.xdsoft"),!0):void 0}).on("blur.xdsoft",function(){j.trigger("close.xdsoft")})},u=function(t){var a=t.data("xdsoft_datetimepicker");a&&(a.data("xdsoft_datetime",null),a.remove(),t.data("xdsoft_datetimepicker",null).off(".xdsoft"),e(C.contentWindow).off("resize.xdsoft"),e([C.contentWindow,C.ownerDocument.body]).off("mousedown.xdsoft touchstart"),t.unmousewheel&&t.unmousewheel())},e(C.ownerDocument).off("keydown.xdsoftctrl keyup.xdsoftctrl").on("keydown.xdsoftctrl",function(e){e.keyCode===h&&(F=!0)}).on("keyup.xdsoftctrl",function(e){e.keyCode===h&&(F=!1)}),this.each(function(){var t=e(this).data("xdsoft_datetimepicker");if(t){if("string"===e.type(n))switch(n){case"show":e(this).select().focus(),t.trigger("open.xdsoft");break;case"hide":t.trigger("close.xdsoft");break;case"toggle":t.trigger("toggle.xdsoft");break;case"destroy":u(e(this));break;case"reset":this.value=this.defaultValue,this.value&&t.data("xdsoft_datetime").isValidDate(r.parseDate(this.value,C.format))||t.data("changed",!1),t.data("xdsoft_datetime").setCurrentTime(this.value);break;case"validate":t.data("input").trigger("blur.xdsoft");break;default:t[n]&&e.isFunction(t[n])&&(d=t[n](i))}else t.setOptions(n);return 0}"string"!==e.type(n)&&(!C.lazyInit||C.open||C.inline?s(e(this)):Y(e(this)))}),d},e.fn.datetimepicker.defaults=a};!function(e){"function"==typeof define&&define.amd?define(["jquery","jquery-mousewheel"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(datetimepickerFactory),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var i=t||window.event,s=u.call(arguments,1),d=0,f=0,c=0,m=0,h=0,g=0;if(t=e.event.fix(i),t.type="mousewheel","detail"in i&&(c=-1*i.detail),"wheelDelta"in i&&(c=i.wheelDelta),"wheelDeltaY"in i&&(c=i.wheelDeltaY),"wheelDeltaX"in i&&(f=-1*i.wheelDeltaX),"axis"in i&&i.axis===i.HORIZONTAL_AXIS&&(f=-1*c,c=0),d=0===c?f:c,"deltaY"in i&&(d=c=-1*i.deltaY),"deltaX"in i&&(f=i.deltaX,0===c&&(d=-1*f)),0!==c||0!==f){if(1===i.deltaMode){var p=e.data(this,"mousewheel-line-height");d*=p,c*=p,f*=p}else if(2===i.deltaMode){var D=e.data(this,"mousewheel-page-height");d*=D,c*=D,f*=D}if(m=Math.max(Math.abs(c),Math.abs(f)),(!o||m=1?"floor":"ceil"](d/o),f=Math[f>=1?"floor":"ceil"](f/o),c=Math[c>=1?"floor":"ceil"](c/o),l.settings.normalizeOffset&&this.getBoundingClientRect){var v=this.getBoundingClientRect();h=t.clientX-v.left,g=t.clientY-v.top}return t.deltaX=f,t.deltaY=c,t.deltaFactor=o,t.offsetX=h,t.offsetY=g,t.deltaMode=0,s.unshift(t,d,f,c),n&&clearTimeout(n),n=setTimeout(a,200),(e.event.dispatch||e.event.handle).apply(this,s)}}function a(){o=null}function r(e,t){return l.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}var n,o,i=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],s="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],u=Array.prototype.slice;if(e.event.fixHooks)for(var d=i.length;d;)e.event.fixHooks[i[--d]]=e.event.mouseHooks;var l=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var a=s.length;a;)this.addEventListener(s[--a],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",l.getLineHeight(this)),e.data(this,"mousewheel-page-height",l.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var a=s.length;a;)this.removeEventListener(s[--a],t,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var a=e(t),r=a["offsetParent"in e.fn?"offsetParent":"parent"]();return r.length||(r=e("body")),parseInt(r.css("fontSize"),10)||parseInt(a.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}); \ No newline at end of file diff --git a/resources/datetime-picker/datetimepicker.min.css b/resources/datetime-picker/datetimepicker.min.css deleted file mode 100644 index 14a08a1..0000000 --- a/resources/datetime-picker/datetimepicker.min.css +++ /dev/null @@ -1 +0,0 @@ -.xdsoft_datetimepicker{box-shadow:0 5px 15px -5px rgba(0,0,0,0.506);background:#fff;border-bottom:1px solid #bbb;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px;padding-left:0;padding-top:2px;position:absolute;z-index:9999;-moz-box-sizing:border-box;box-sizing:border-box;display:none}.xdsoft_datetimepicker.xdsoft_rtl{padding:8px 0 8px 8px}.xdsoft_datetimepicker iframe{position:absolute;left:0;top:0;width:75px;height:210px;background:transparent;border:0}.xdsoft_datetimepicker button{border:none !important}.xdsoft_noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.xdsoft_noselect::selection{background:transparent}.xdsoft_noselect::-moz-selection{background:transparent}.xdsoft_datetimepicker.xdsoft_inline{display:inline-block;position:static;box-shadow:none}.xdsoft_datetimepicker *{-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin:0}.xdsoft_datetimepicker .xdsoft_datepicker,.xdsoft_datetimepicker .xdsoft_timepicker{display:none}.xdsoft_datetimepicker .xdsoft_datepicker.active,.xdsoft_datetimepicker .xdsoft_timepicker.active{display:block}.xdsoft_datetimepicker .xdsoft_datepicker{width:224px;float:left;margin-left:8px}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker{float:right;margin-right:8px;margin-left:0}.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker{width:256px}.xdsoft_datetimepicker .xdsoft_timepicker{width:58px;float:left;text-align:center;margin-left:8px;margin-top:0}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker{float:right;margin-right:8px;margin-left:0}.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{margin-top:8px;margin-bottom:3px}.xdsoft_datetimepicker .xdsoft_monthpicker{position:relative;text-align:center}.xdsoft_datetimepicker .xdsoft_label i,.xdsoft_datetimepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_today_button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC)}.xdsoft_datetimepicker .xdsoft_label i{opacity:.5;background-position:-92px -19px;display:inline-block;width:9px;height:20px;vertical-align:middle}.xdsoft_datetimepicker .xdsoft_prev{float:left;background-position:-20px 0}.xdsoft_datetimepicker .xdsoft_today_button{float:left;background-position:-70px 0;margin-left:5px}.xdsoft_datetimepicker .xdsoft_next{float:right;background-position:0 0}.xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_today_button{background-color:transparent;background-repeat:no-repeat;border:0 none;cursor:pointer;display:block;height:30px;opacity:.5;-ms-filter:"alpha(opacity=50)";outline:medium none;overflow:hidden;padding:0;position:relative;text-indent:100%;white-space:nowrap;width:20px;min-width:0}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{float:none;background-position:-40px -15px;height:15px;width:30px;display:block;margin-left:14px;margin-top:7px}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev,.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next{float:none;margin-left:0;margin-right:14px}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{background-position:-40px 0;margin-bottom:7px;margin-top:0}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{height:151px;overflow:hidden;border-bottom:1px solid #ddd}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div{background:#f5f5f5;border-top:1px solid #ddd;color:#666;font-size:12px;text-align:center;border-collapse:collapse;cursor:pointer;border-bottom-width:0;height:25px;line-height:25px}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div:first-child{border-top-width:0}.xdsoft_datetimepicker .xdsoft_today_button:hover,.xdsoft_datetimepicker .xdsoft_next:hover,.xdsoft_datetimepicker .xdsoft_prev:hover{opacity:1;-ms-filter:"alpha(opacity=100)"}.xdsoft_datetimepicker .xdsoft_label{display:inline;position:relative;z-index:9999;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:bold;background-color:#fff;float:left;width:182px;text-align:center;cursor:pointer}.xdsoft_datetimepicker .xdsoft_label:hover>span{text-decoration:underline}.xdsoft_datetimepicker .xdsoft_label:hover i{opacity:1.0}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select{border:1px solid #ccc;position:absolute;right:0;top:30px;z-index:101;display:none;background:#fff;max-height:160px;overflow-y:hidden}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select.xdsoft_monthselect{right:-7px}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select.xdsoft_yearselect{right:2px}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option:hover{color:#fff;background:#ff8000}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option{padding:2px 10px 2px 5px;text-decoration:none !important}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option.xdsoft_current{background:#3af;box-shadow:#178fe5 0 1px 3px 0 inset;color:#fff;font-weight:700}.xdsoft_datetimepicker .xdsoft_month{width:100px;text-align:right}.xdsoft_datetimepicker .xdsoft_calendar{clear:both}.xdsoft_datetimepicker .xdsoft_year{width:48px;margin-left:5px}.xdsoft_datetimepicker .xdsoft_calendar table{border-collapse:collapse;width:100%}.xdsoft_datetimepicker .xdsoft_calendar td>div{padding-right:5px}.xdsoft_datetimepicker .xdsoft_calendar th{height:25px}.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{width:14.2857142%;background:#f5f5f5;border:1px solid #ddd;color:#666;font-size:12px;text-align:right;vertical-align:middle;padding:0;border-collapse:collapse;cursor:pointer;height:25px}.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th{width:12.5%}.xdsoft_datetimepicker .xdsoft_calendar th{background:#f1f1f1}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{color:#3af}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default{background:#ffe9d2;box-shadow:#ffb871 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint{background:#c1ffc9;box-shadow:#00dd1c 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current{background:#3af;box-shadow:#178fe5 0 1px 3px 0 inset;color:#fff;font-weight:700}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,.xdsoft_datetimepicker .xdsoft_time_box>div>div.xdsoft_disabled{opacity:.5;-ms-filter:"alpha(opacity=50)";cursor:default}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{opacity:.2;-ms-filter:"alpha(opacity=20)"}.xdsoft_datetimepicker .xdsoft_calendar td:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div:hover{color:#fff !important;background:#ff8000 !important;box-shadow:none !important}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover{background:#3af !important;box-shadow:#178fe5 0 1px 3px 0 inset !important;color:#fff !important}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_disabled:hover{color:inherit !important;background:inherit !important;box-shadow:inherit !important}.xdsoft_datetimepicker .xdsoft_calendar th{font-weight:700;text-align:center;color:#999;cursor:default}.xdsoft_datetimepicker .xdsoft_copyright{color:#ccc !important;font-size:10px;clear:both;float:none;margin-left:8px}.xdsoft_datetimepicker .xdsoft_copyright a{color:#eee !important}.xdsoft_datetimepicker .xdsoft_copyright a:hover{color:#aaa !important}.xdsoft_time_box{position:relative;border:1px solid #ccc}.xdsoft_scrollbar>.xdsoft_scroller{background:#ccc !important;height:20px;border-radius:3px}.xdsoft_scrollbar{position:absolute;width:7px;right:0;top:0;bottom:0;cursor:pointer}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar{left:0;right:auto}.xdsoft_scroller_box{position:relative}.xdsoft_datetimepicker.xdsoft_dark{box-shadow:0 5px 15px -5px rgba(255,255,255,0.506);background:#000;border-bottom:1px solid #444;border-left:1px solid #333;border-right:1px solid #333;border-top:1px solid #333;color:#ccc}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box{border-bottom:1px solid #222}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div{background:#0a0a0a;border-top:1px solid #222;color:#999}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label{background-color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select{border:1px solid #333;background:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select>div>.xdsoft_option:hover{color:#000;background:#007fff}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select>div>.xdsoft_option.xdsoft_current{background:#c50;box-shadow:#b03e00 0 1px 3px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==)}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{background:#0a0a0a;border:1px solid #222;color:#999}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{background:#0e0e0e}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today{color:#c50}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default{background:#ffe9d2;box-shadow:#ffb871 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint{background:#c1ffc9;box-shadow:#00dd1c 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current{background:#c50;box-shadow:#b03e00 0 1px 3px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div:hover{color:#000 !important;background:#007fff !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{color:#666}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright{color:#333 !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a{color:#111 !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover{color:#555 !important}.xdsoft_dark .xdsoft_time_box{border:1px solid #333}.xdsoft_dark .xdsoft_scrollbar>.xdsoft_scroller{background:#333 !important}.xdsoft_datetimepicker .xdsoft_save_selected{display:block;border:1px solid #ddd !important;margin-top:5px;width:100%;color:#454551;font-size:13px}.xdsoft_datetimepicker .blue-gradient-button{font-family:"museo-sans","Book Antiqua",sans-serif;font-size:12px;font-weight:300;color:#82878c;height:28px;position:relative;padding:4px 17px 4px 33px;border:1px solid #d7d8da;background:-moz-linear-gradient(top,#fff 0,#f4f8fa 73%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(73%,#f4f8fa));background:-webkit-linear-gradient(top,#fff 0,#f4f8fa 73%);background:-o-linear-gradient(top,#fff 0,#f4f8fa 73%);background:-ms-linear-gradient(top,#fff 0,#f4f8fa 73%);background:linear-gradient(to bottom,#fff 0,#f4f8fa 73%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff',endColorstr='#f4f8fa',GradientType=0)}.xdsoft_datetimepicker .blue-gradient-button:hover,.xdsoft_datetimepicker .blue-gradient-button:focus,.xdsoft_datetimepicker .blue-gradient-button:hover span,.xdsoft_datetimepicker .blue-gradient-button:focus span{color:#454551;background:-moz-linear-gradient(top,#f4f8fa 0,#FFF 73%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f4f8fa),color-stop(73%,#FFF));background:-webkit-linear-gradient(top,#f4f8fa 0,#FFF 73%);background:-o-linear-gradient(top,#f4f8fa 0,#FFF 73%);background:-ms-linear-gradient(top,#f4f8fa 0,#FFF 73%);background:linear-gradient(to bottom,#f4f8fa 0,#FFF 73%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4f8fa',endColorstr='#FFF',GradientType=0)} \ No newline at end of file diff --git a/resources/dmmd-preview.css b/resources/dmmd-preview.css index c768a0e..7a7fd1d 100644 --- a/resources/dmmd-preview.css +++ b/resources/dmmd-preview.css @@ -13,7 +13,7 @@ div.dmmd-preview-update { } div.dmmd-preview-content { - padding: 0 8px; + padding: 0 7px; } div.dmmd-preview.dmmd-preview-has-content div.dmmd-preview-update { @@ -21,8 +21,7 @@ div.dmmd-preview.dmmd-preview-has-content div.dmmd-preview-update { } div.dmmd-preview-has-content div.dmmd-preview-content { - padding-bottom: 8px; - padding-top: 8px; + padding-bottom: 7px; } div.dmmd-no-button div.dmmd-preview-update { diff --git a/resources/dmmd-preview.js b/resources/dmmd-preview.js index 2646503..2450ea8 100644 --- a/resources/dmmd-preview.js +++ b/resources/dmmd-preview.js @@ -23,8 +23,38 @@ $(function () { csrfmiddlewaretoken: $.cookie('csrftoken') }, function (result) { $content.html(result); + $(".dmmd-preview-content [data-src]img").each(function() { + $(this).attr("src", $(this).attr("data-src")); + }) + $(".dmmd-preview-content [data-src]iframe").each(function() { + $(this).attr("src", $(this).attr("data-src")); + }) $preview.addClass('dmmd-preview-has-content').removeClass('dmmd-preview-stale'); - renderKatex($content[0]); + + var $jax = $content.find('.require-mathjax-support'); + if ($jax.length) { + if (!('MathJax' in window)) { + $.ajax({ + type: 'GET', + url: $jax.attr('data-config'), + dataType: 'script', + cache: true, + success: function () { + $.ajax({ + type: 'GET', + url: 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js', + dataType: 'script', + cache: true, + success: function () { + MathJax.typeset(); + } + }); + } + }); + } else { + MathJax.typeset($content[0]); + } + } }); } else { $content.empty(); diff --git a/resources/dmmd-preview.scss b/resources/dmmd-preview.scss index 98cdbaa..a3236b7 100644 --- a/resources/dmmd-preview.scss +++ b/resources/dmmd-preview.scss @@ -25,17 +25,17 @@ div.dmmd-preview-has-content div.dmmd-preview-content { } div.dmmd-no-button div.dmmd-preview-update { - display: none; + display: none; } div.dmmd-no-button div.dmmd-preview-content { - padding-bottom: 0; + padding-bottom: 0; } div.dmmd-no-button:not(.dmmd-preview-has-content) { - display: none; + display: none; } div.dmmd-preview-stale { - background: repeating-linear-gradient(-45deg, #fff, #fff 10px, #f8f8f8 10px, #f8f8f8 20px); + background: repeating-linear-gradient(-45deg, #fff, #fff 10px, #f8f8f8 10px, #f8f8f8 20px); } diff --git a/resources/event.js b/resources/event.js index 73f9302..e9beb68 100644 --- a/resources/event.js +++ b/resources/event.js @@ -7,7 +7,6 @@ function EventReceiver(websocket, poller, channels, last_msg, onmessage) { if (onmessage) this.onmessage = onmessage; var receiver = this; - var time_retry = 1000; function init_poll() { function long_poll() { @@ -63,8 +62,7 @@ function EventReceiver(websocket, poller, channels, last_msg, onmessage) { if (event.code != 1000 && receiver.onwsclose !== null) receiver.onwsclose(event); if (event.code == 1006) { - setTimeout(connect, time_retry); - time_retry += 2000; + setTimeout(connect, 1000); } } } diff --git a/resources/fine-uploader/placeholders/not_available-generic.png b/resources/fine-uploader/placeholders/not_available-generic.png old mode 100644 new mode 100755 diff --git a/resources/fine-uploader/placeholders/waiting-generic.png b/resources/fine-uploader/placeholders/waiting-generic.png old mode 100644 new mode 100755 diff --git a/resources/fine-uploader/templates/default.html b/resources/fine-uploader/templates/default.html index 11c1502..e3285ad 100644 --- a/resources/fine-uploader/templates/default.html +++ b/resources/fine-uploader/templates/default.html @@ -4,59 +4,59 @@ if you are not yet familiar with Fine Uploader UI. --> diff --git a/resources/fine-uploader/templates/gallery.html b/resources/fine-uploader/templates/gallery.html index 44827a6..3c7d69e 100644 --- a/resources/fine-uploader/templates/gallery.html +++ b/resources/fine-uploader/templates/gallery.html @@ -5,78 +5,78 @@ on how to customize this template. --> diff --git a/resources/fine-uploader/templates/simple-thumbnails.html b/resources/fine-uploader/templates/simple-thumbnails.html index 767d2d1..668c0c0 100644 --- a/resources/fine-uploader/templates/simple-thumbnails.html +++ b/resources/fine-uploader/templates/simple-thumbnails.html @@ -5,60 +5,60 @@ on how to customize this template. --> diff --git a/resources/fontawesome/css/all.css b/resources/fontawesome/css/all.css deleted file mode 100644 index 7e4dfe1..0000000 --- a/resources/fontawesome/css/all.css +++ /dev/null @@ -1,8030 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -.fa { - font-family: var(--fa-style-family, "Font Awesome 6 Free"); - font-weight: var(--fa-style, 900); } - -.fa, -.fa-classic, -.fa-sharp, -.fas, -.fa-solid, -.far, -.fa-regular, -.fab, -.fa-brands { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: var(--fa-display, inline-block); - font-style: normal; - font-variant: normal; - line-height: 1; - text-rendering: auto; } - -.fas, -.fa-classic, -.fa-solid, -.far, -.fa-regular { - font-family: 'Font Awesome 6 Free'; } - -.fab, -.fa-brands { - font-family: 'Font Awesome 6 Brands'; } - -.fa-1x { - font-size: 1em; } - -.fa-2x { - font-size: 2em; } - -.fa-3x { - font-size: 3em; } - -.fa-4x { - font-size: 4em; } - -.fa-5x { - font-size: 5em; } - -.fa-6x { - font-size: 6em; } - -.fa-7x { - font-size: 7em; } - -.fa-8x { - font-size: 8em; } - -.fa-9x { - font-size: 9em; } - -.fa-10x { - font-size: 10em; } - -.fa-2xs { - font-size: 0.625em; - line-height: 0.1em; - vertical-align: 0.225em; } - -.fa-xs { - font-size: 0.75em; - line-height: 0.08333em; - vertical-align: 0.125em; } - -.fa-sm { - font-size: 0.875em; - line-height: 0.07143em; - vertical-align: 0.05357em; } - -.fa-lg { - font-size: 1.25em; - line-height: 0.05em; - vertical-align: -0.075em; } - -.fa-xl { - font-size: 1.5em; - line-height: 0.04167em; - vertical-align: -0.125em; } - -.fa-2xl { - font-size: 2em; - line-height: 0.03125em; - vertical-align: -0.1875em; } - -.fa-fw { - text-align: center; - width: 1.25em; } - -.fa-ul { - list-style-type: none; - margin-left: var(--fa-li-margin, 2.5em); - padding-left: 0; } - .fa-ul > li { - position: relative; } - -.fa-li { - left: calc(var(--fa-li-width, 2em) * -1); - position: absolute; - text-align: center; - width: var(--fa-li-width, 2em); - line-height: inherit; } - -.fa-border { - border-color: var(--fa-border-color, #eee); - border-radius: var(--fa-border-radius, 0.1em); - border-style: var(--fa-border-style, solid); - border-width: var(--fa-border-width, 0.08em); - padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } - -.fa-pull-left { - float: left; - margin-right: var(--fa-pull-margin, 0.3em); } - -.fa-pull-right { - float: right; - margin-left: var(--fa-pull-margin, 0.3em); } - -.fa-beat { - -webkit-animation-name: fa-beat; - animation-name: fa-beat; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } - -.fa-bounce { - -webkit-animation-name: fa-bounce; - animation-name: fa-bounce; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } - -.fa-fade { - -webkit-animation-name: fa-fade; - animation-name: fa-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } - -.fa-beat-fade { - -webkit-animation-name: fa-beat-fade; - animation-name: fa-beat-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } - -.fa-flip { - -webkit-animation-name: fa-flip; - animation-name: fa-flip; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } - -.fa-shake { - -webkit-animation-name: fa-shake; - animation-name: fa-shake; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, linear); - animation-timing-function: var(--fa-animation-timing, linear); } - -.fa-spin { - -webkit-animation-name: fa-spin; - animation-name: fa-spin; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 2s); - animation-duration: var(--fa-animation-duration, 2s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, linear); - animation-timing-function: var(--fa-animation-timing, linear); } - -.fa-spin-reverse { - --fa-animation-direction: reverse; } - -.fa-pulse, -.fa-spin-pulse { - -webkit-animation-name: fa-spin; - animation-name: fa-spin; - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); - animation-timing-function: var(--fa-animation-timing, steps(8)); } - -@media (prefers-reduced-motion: reduce) { - .fa-beat, - .fa-bounce, - .fa-fade, - .fa-beat-fade, - .fa-flip, - .fa-pulse, - .fa-shake, - .fa-spin, - .fa-spin-pulse { - -webkit-animation-delay: -1ms; - animation-delay: -1ms; - -webkit-animation-duration: 1ms; - animation-duration: 1ms; - -webkit-animation-iteration-count: 1; - animation-iteration-count: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - -webkit-transition-duration: 0s; - transition-duration: 0s; } } - -@-webkit-keyframes fa-beat { - 0%, 90% { - -webkit-transform: scale(1); - transform: scale(1); } - 45% { - -webkit-transform: scale(var(--fa-beat-scale, 1.25)); - transform: scale(var(--fa-beat-scale, 1.25)); } } - -@keyframes fa-beat { - 0%, 90% { - -webkit-transform: scale(1); - transform: scale(1); } - 45% { - -webkit-transform: scale(var(--fa-beat-scale, 1.25)); - transform: scale(var(--fa-beat-scale, 1.25)); } } - -@-webkit-keyframes fa-bounce { - 0% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 10% { - -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); - transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } - 30% { - -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); - transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } - 50% { - -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); - transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } - 57% { - -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } - 64% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 100% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } } - -@keyframes fa-bounce { - 0% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 10% { - -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); - transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } - 30% { - -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); - transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } - 50% { - -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); - transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } - 57% { - -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } - 64% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 100% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } } - -@-webkit-keyframes fa-fade { - 50% { - opacity: var(--fa-fade-opacity, 0.4); } } - -@keyframes fa-fade { - 50% { - opacity: var(--fa-fade-opacity, 0.4); } } - -@-webkit-keyframes fa-beat-fade { - 0%, 100% { - opacity: var(--fa-beat-fade-opacity, 0.4); - -webkit-transform: scale(1); - transform: scale(1); } - 50% { - opacity: 1; - -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } - -@keyframes fa-beat-fade { - 0%, 100% { - opacity: var(--fa-beat-fade-opacity, 0.4); - -webkit-transform: scale(1); - transform: scale(1); } - 50% { - opacity: 1; - -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } - -@-webkit-keyframes fa-flip { - 50% { - -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); - transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } - -@keyframes fa-flip { - 50% { - -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); - transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } - -@-webkit-keyframes fa-shake { - 0% { - -webkit-transform: rotate(-15deg); - transform: rotate(-15deg); } - 4% { - -webkit-transform: rotate(15deg); - transform: rotate(15deg); } - 8%, 24% { - -webkit-transform: rotate(-18deg); - transform: rotate(-18deg); } - 12%, 28% { - -webkit-transform: rotate(18deg); - transform: rotate(18deg); } - 16% { - -webkit-transform: rotate(-22deg); - transform: rotate(-22deg); } - 20% { - -webkit-transform: rotate(22deg); - transform: rotate(22deg); } - 32% { - -webkit-transform: rotate(-12deg); - transform: rotate(-12deg); } - 36% { - -webkit-transform: rotate(12deg); - transform: rotate(12deg); } - 40%, 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } } - -@keyframes fa-shake { - 0% { - -webkit-transform: rotate(-15deg); - transform: rotate(-15deg); } - 4% { - -webkit-transform: rotate(15deg); - transform: rotate(15deg); } - 8%, 24% { - -webkit-transform: rotate(-18deg); - transform: rotate(-18deg); } - 12%, 28% { - -webkit-transform: rotate(18deg); - transform: rotate(18deg); } - 16% { - -webkit-transform: rotate(-22deg); - transform: rotate(-22deg); } - 20% { - -webkit-transform: rotate(22deg); - transform: rotate(22deg); } - 32% { - -webkit-transform: rotate(-12deg); - transform: rotate(-12deg); } - 36% { - -webkit-transform: rotate(12deg); - transform: rotate(12deg); } - 40%, 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } } - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -.fa-rotate-90 { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } - -.fa-rotate-180 { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - -.fa-rotate-270 { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } - -.fa-flip-horizontal { - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.fa-flip-vertical { - -webkit-transform: scale(1, -1); - transform: scale(1, -1); } - -.fa-flip-both, -.fa-flip-horizontal.fa-flip-vertical { - -webkit-transform: scale(-1, -1); - transform: scale(-1, -1); } - -.fa-rotate-by { - -webkit-transform: rotate(var(--fa-rotate-angle, 0)); - transform: rotate(var(--fa-rotate-angle, 0)); } - -.fa-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2.5em; } - -.fa-stack-1x, -.fa-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; - z-index: var(--fa-stack-z-index, auto); } - -.fa-stack-1x { - line-height: inherit; } - -.fa-stack-2x { - font-size: 2em; } - -.fa-inverse { - color: var(--fa-inverse, #fff); } - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ - -.fa-0::before { - content: "\30"; } - -.fa-1::before { - content: "\31"; } - -.fa-2::before { - content: "\32"; } - -.fa-3::before { - content: "\33"; } - -.fa-4::before { - content: "\34"; } - -.fa-5::before { - content: "\35"; } - -.fa-6::before { - content: "\36"; } - -.fa-7::before { - content: "\37"; } - -.fa-8::before { - content: "\38"; } - -.fa-9::before { - content: "\39"; } - -.fa-fill-drip::before { - content: "\f576"; } - -.fa-arrows-to-circle::before { - content: "\e4bd"; } - -.fa-circle-chevron-right::before { - content: "\f138"; } - -.fa-chevron-circle-right::before { - content: "\f138"; } - -.fa-at::before { - content: "\40"; } - -.fa-trash-can::before { - content: "\f2ed"; } - -.fa-trash-alt::before { - content: "\f2ed"; } - -.fa-text-height::before { - content: "\f034"; } - -.fa-user-xmark::before { - content: "\f235"; } - -.fa-user-times::before { - content: "\f235"; } - -.fa-stethoscope::before { - content: "\f0f1"; } - -.fa-message::before { - content: "\f27a"; } - -.fa-comment-alt::before { - content: "\f27a"; } - -.fa-info::before { - content: "\f129"; } - -.fa-down-left-and-up-right-to-center::before { - content: "\f422"; } - -.fa-compress-alt::before { - content: "\f422"; } - -.fa-explosion::before { - content: "\e4e9"; } - -.fa-file-lines::before { - content: "\f15c"; } - -.fa-file-alt::before { - content: "\f15c"; } - -.fa-file-text::before { - content: "\f15c"; } - -.fa-wave-square::before { - content: "\f83e"; } - -.fa-ring::before { - content: "\f70b"; } - -.fa-building-un::before { - content: "\e4d9"; } - -.fa-dice-three::before { - content: "\f527"; } - -.fa-calendar-days::before { - content: "\f073"; } - -.fa-calendar-alt::before { - content: "\f073"; } - -.fa-anchor-circle-check::before { - content: "\e4aa"; } - -.fa-building-circle-arrow-right::before { - content: "\e4d1"; } - -.fa-volleyball::before { - content: "\f45f"; } - -.fa-volleyball-ball::before { - content: "\f45f"; } - -.fa-arrows-up-to-line::before { - content: "\e4c2"; } - -.fa-sort-down::before { - content: "\f0dd"; } - -.fa-sort-desc::before { - content: "\f0dd"; } - -.fa-circle-minus::before { - content: "\f056"; } - -.fa-minus-circle::before { - content: "\f056"; } - -.fa-door-open::before { - content: "\f52b"; } - -.fa-right-from-bracket::before { - content: "\f2f5"; } - -.fa-sign-out-alt::before { - content: "\f2f5"; } - -.fa-atom::before { - content: "\f5d2"; } - -.fa-soap::before { - content: "\e06e"; } - -.fa-icons::before { - content: "\f86d"; } - -.fa-heart-music-camera-bolt::before { - content: "\f86d"; } - -.fa-microphone-lines-slash::before { - content: "\f539"; } - -.fa-microphone-alt-slash::before { - content: "\f539"; } - -.fa-bridge-circle-check::before { - content: "\e4c9"; } - -.fa-pump-medical::before { - content: "\e06a"; } - -.fa-fingerprint::before { - content: "\f577"; } - -.fa-hand-point-right::before { - content: "\f0a4"; } - -.fa-magnifying-glass-location::before { - content: "\f689"; } - -.fa-search-location::before { - content: "\f689"; } - -.fa-forward-step::before { - content: "\f051"; } - -.fa-step-forward::before { - content: "\f051"; } - -.fa-face-smile-beam::before { - content: "\f5b8"; } - -.fa-smile-beam::before { - content: "\f5b8"; } - -.fa-flag-checkered::before { - content: "\f11e"; } - -.fa-football::before { - content: "\f44e"; } - -.fa-football-ball::before { - content: "\f44e"; } - -.fa-school-circle-exclamation::before { - content: "\e56c"; } - -.fa-crop::before { - content: "\f125"; } - -.fa-angles-down::before { - content: "\f103"; } - -.fa-angle-double-down::before { - content: "\f103"; } - -.fa-users-rectangle::before { - content: "\e594"; } - -.fa-people-roof::before { - content: "\e537"; } - -.fa-people-line::before { - content: "\e534"; } - -.fa-beer-mug-empty::before { - content: "\f0fc"; } - -.fa-beer::before { - content: "\f0fc"; } - -.fa-diagram-predecessor::before { - content: "\e477"; } - -.fa-arrow-up-long::before { - content: "\f176"; } - -.fa-long-arrow-up::before { - content: "\f176"; } - -.fa-fire-flame-simple::before { - content: "\f46a"; } - -.fa-burn::before { - content: "\f46a"; } - -.fa-person::before { - content: "\f183"; } - -.fa-male::before { - content: "\f183"; } - -.fa-laptop::before { - content: "\f109"; } - -.fa-file-csv::before { - content: "\f6dd"; } - -.fa-menorah::before { - content: "\f676"; } - -.fa-truck-plane::before { - content: "\e58f"; } - -.fa-record-vinyl::before { - content: "\f8d9"; } - -.fa-face-grin-stars::before { - content: "\f587"; } - -.fa-grin-stars::before { - content: "\f587"; } - -.fa-bong::before { - content: "\f55c"; } - -.fa-spaghetti-monster-flying::before { - content: "\f67b"; } - -.fa-pastafarianism::before { - content: "\f67b"; } - -.fa-arrow-down-up-across-line::before { - content: "\e4af"; } - -.fa-spoon::before { - content: "\f2e5"; } - -.fa-utensil-spoon::before { - content: "\f2e5"; } - -.fa-jar-wheat::before { - content: "\e517"; } - -.fa-envelopes-bulk::before { - content: "\f674"; } - -.fa-mail-bulk::before { - content: "\f674"; } - -.fa-file-circle-exclamation::before { - content: "\e4eb"; } - -.fa-circle-h::before { - content: "\f47e"; } - -.fa-hospital-symbol::before { - content: "\f47e"; } - -.fa-pager::before { - content: "\f815"; } - -.fa-address-book::before { - content: "\f2b9"; } - -.fa-contact-book::before { - content: "\f2b9"; } - -.fa-strikethrough::before { - content: "\f0cc"; } - -.fa-k::before { - content: "\4b"; } - -.fa-landmark-flag::before { - content: "\e51c"; } - -.fa-pencil::before { - content: "\f303"; } - -.fa-pencil-alt::before { - content: "\f303"; } - -.fa-backward::before { - content: "\f04a"; } - -.fa-caret-right::before { - content: "\f0da"; } - -.fa-comments::before { - content: "\f086"; } - -.fa-paste::before { - content: "\f0ea"; } - -.fa-file-clipboard::before { - content: "\f0ea"; } - -.fa-code-pull-request::before { - content: "\e13c"; } - -.fa-clipboard-list::before { - content: "\f46d"; } - -.fa-truck-ramp-box::before { - content: "\f4de"; } - -.fa-truck-loading::before { - content: "\f4de"; } - -.fa-user-check::before { - content: "\f4fc"; } - -.fa-vial-virus::before { - content: "\e597"; } - -.fa-sheet-plastic::before { - content: "\e571"; } - -.fa-blog::before { - content: "\f781"; } - -.fa-user-ninja::before { - content: "\f504"; } - -.fa-person-arrow-up-from-line::before { - content: "\e539"; } - -.fa-scroll-torah::before { - content: "\f6a0"; } - -.fa-torah::before { - content: "\f6a0"; } - -.fa-broom-ball::before { - content: "\f458"; } - -.fa-quidditch::before { - content: "\f458"; } - -.fa-quidditch-broom-ball::before { - content: "\f458"; } - -.fa-toggle-off::before { - content: "\f204"; } - -.fa-box-archive::before { - content: "\f187"; } - -.fa-archive::before { - content: "\f187"; } - -.fa-person-drowning::before { - content: "\e545"; } - -.fa-arrow-down-9-1::before { - content: "\f886"; } - -.fa-sort-numeric-desc::before { - content: "\f886"; } - -.fa-sort-numeric-down-alt::before { - content: "\f886"; } - -.fa-face-grin-tongue-squint::before { - content: "\f58a"; } - -.fa-grin-tongue-squint::before { - content: "\f58a"; } - -.fa-spray-can::before { - content: "\f5bd"; } - -.fa-truck-monster::before { - content: "\f63b"; } - -.fa-w::before { - content: "\57"; } - -.fa-earth-africa::before { - content: "\f57c"; } - -.fa-globe-africa::before { - content: "\f57c"; } - -.fa-rainbow::before { - content: "\f75b"; } - -.fa-circle-notch::before { - content: "\f1ce"; } - -.fa-tablet-screen-button::before { - content: "\f3fa"; } - -.fa-tablet-alt::before { - content: "\f3fa"; } - -.fa-paw::before { - content: "\f1b0"; } - -.fa-cloud::before { - content: "\f0c2"; } - -.fa-trowel-bricks::before { - content: "\e58a"; } - -.fa-face-flushed::before { - content: "\f579"; } - -.fa-flushed::before { - content: "\f579"; } - -.fa-hospital-user::before { - content: "\f80d"; } - -.fa-tent-arrow-left-right::before { - content: "\e57f"; } - -.fa-gavel::before { - content: "\f0e3"; } - -.fa-legal::before { - content: "\f0e3"; } - -.fa-binoculars::before { - content: "\f1e5"; } - -.fa-microphone-slash::before { - content: "\f131"; } - -.fa-box-tissue::before { - content: "\e05b"; } - -.fa-motorcycle::before { - content: "\f21c"; } - -.fa-bell-concierge::before { - content: "\f562"; } - -.fa-concierge-bell::before { - content: "\f562"; } - -.fa-pen-ruler::before { - content: "\f5ae"; } - -.fa-pencil-ruler::before { - content: "\f5ae"; } - -.fa-people-arrows::before { - content: "\e068"; } - -.fa-people-arrows-left-right::before { - content: "\e068"; } - -.fa-mars-and-venus-burst::before { - content: "\e523"; } - -.fa-square-caret-right::before { - content: "\f152"; } - -.fa-caret-square-right::before { - content: "\f152"; } - -.fa-scissors::before { - content: "\f0c4"; } - -.fa-cut::before { - content: "\f0c4"; } - -.fa-sun-plant-wilt::before { - content: "\e57a"; } - -.fa-toilets-portable::before { - content: "\e584"; } - -.fa-hockey-puck::before { - content: "\f453"; } - -.fa-table::before { - content: "\f0ce"; } - -.fa-magnifying-glass-arrow-right::before { - content: "\e521"; } - -.fa-tachograph-digital::before { - content: "\f566"; } - -.fa-digital-tachograph::before { - content: "\f566"; } - -.fa-users-slash::before { - content: "\e073"; } - -.fa-clover::before { - content: "\e139"; } - -.fa-reply::before { - content: "\f3e5"; } - -.fa-mail-reply::before { - content: "\f3e5"; } - -.fa-star-and-crescent::before { - content: "\f699"; } - -.fa-house-fire::before { - content: "\e50c"; } - -.fa-square-minus::before { - content: "\f146"; } - -.fa-minus-square::before { - content: "\f146"; } - -.fa-helicopter::before { - content: "\f533"; } - -.fa-compass::before { - content: "\f14e"; } - -.fa-square-caret-down::before { - content: "\f150"; } - -.fa-caret-square-down::before { - content: "\f150"; } - -.fa-file-circle-question::before { - content: "\e4ef"; } - -.fa-laptop-code::before { - content: "\f5fc"; } - -.fa-swatchbook::before { - content: "\f5c3"; } - -.fa-prescription-bottle::before { - content: "\f485"; } - -.fa-bars::before { - content: "\f0c9"; } - -.fa-navicon::before { - content: "\f0c9"; } - -.fa-people-group::before { - content: "\e533"; } - -.fa-hourglass-end::before { - content: "\f253"; } - -.fa-hourglass-3::before { - content: "\f253"; } - -.fa-heart-crack::before { - content: "\f7a9"; } - -.fa-heart-broken::before { - content: "\f7a9"; } - -.fa-square-up-right::before { - content: "\f360"; } - -.fa-external-link-square-alt::before { - content: "\f360"; } - -.fa-face-kiss-beam::before { - content: "\f597"; } - -.fa-kiss-beam::before { - content: "\f597"; } - -.fa-film::before { - content: "\f008"; } - -.fa-ruler-horizontal::before { - content: "\f547"; } - -.fa-people-robbery::before { - content: "\e536"; } - -.fa-lightbulb::before { - content: "\f0eb"; } - -.fa-caret-left::before { - content: "\f0d9"; } - -.fa-circle-exclamation::before { - content: "\f06a"; } - -.fa-exclamation-circle::before { - content: "\f06a"; } - -.fa-school-circle-xmark::before { - content: "\e56d"; } - -.fa-arrow-right-from-bracket::before { - content: "\f08b"; } - -.fa-sign-out::before { - content: "\f08b"; } - -.fa-circle-chevron-down::before { - content: "\f13a"; } - -.fa-chevron-circle-down::before { - content: "\f13a"; } - -.fa-unlock-keyhole::before { - content: "\f13e"; } - -.fa-unlock-alt::before { - content: "\f13e"; } - -.fa-cloud-showers-heavy::before { - content: "\f740"; } - -.fa-headphones-simple::before { - content: "\f58f"; } - -.fa-headphones-alt::before { - content: "\f58f"; } - -.fa-sitemap::before { - content: "\f0e8"; } - -.fa-circle-dollar-to-slot::before { - content: "\f4b9"; } - -.fa-donate::before { - content: "\f4b9"; } - -.fa-memory::before { - content: "\f538"; } - -.fa-road-spikes::before { - content: "\e568"; } - -.fa-fire-burner::before { - content: "\e4f1"; } - -.fa-flag::before { - content: "\f024"; } - -.fa-hanukiah::before { - content: "\f6e6"; } - -.fa-feather::before { - content: "\f52d"; } - -.fa-volume-low::before { - content: "\f027"; } - -.fa-volume-down::before { - content: "\f027"; } - -.fa-comment-slash::before { - content: "\f4b3"; } - -.fa-cloud-sun-rain::before { - content: "\f743"; } - -.fa-compress::before { - content: "\f066"; } - -.fa-wheat-awn::before { - content: "\e2cd"; } - -.fa-wheat-alt::before { - content: "\e2cd"; } - -.fa-ankh::before { - content: "\f644"; } - -.fa-hands-holding-child::before { - content: "\e4fa"; } - -.fa-asterisk::before { - content: "\2a"; } - -.fa-square-check::before { - content: "\f14a"; } - -.fa-check-square::before { - content: "\f14a"; } - -.fa-peseta-sign::before { - content: "\e221"; } - -.fa-heading::before { - content: "\f1dc"; } - -.fa-header::before { - content: "\f1dc"; } - -.fa-ghost::before { - content: "\f6e2"; } - -.fa-list::before { - content: "\f03a"; } - -.fa-list-squares::before { - content: "\f03a"; } - -.fa-square-phone-flip::before { - content: "\f87b"; } - -.fa-phone-square-alt::before { - content: "\f87b"; } - -.fa-cart-plus::before { - content: "\f217"; } - -.fa-gamepad::before { - content: "\f11b"; } - -.fa-circle-dot::before { - content: "\f192"; } - -.fa-dot-circle::before { - content: "\f192"; } - -.fa-face-dizzy::before { - content: "\f567"; } - -.fa-dizzy::before { - content: "\f567"; } - -.fa-egg::before { - content: "\f7fb"; } - -.fa-house-medical-circle-xmark::before { - content: "\e513"; } - -.fa-campground::before { - content: "\f6bb"; } - -.fa-folder-plus::before { - content: "\f65e"; } - -.fa-futbol::before { - content: "\f1e3"; } - -.fa-futbol-ball::before { - content: "\f1e3"; } - -.fa-soccer-ball::before { - content: "\f1e3"; } - -.fa-paintbrush::before { - content: "\f1fc"; } - -.fa-paint-brush::before { - content: "\f1fc"; } - -.fa-lock::before { - content: "\f023"; } - -.fa-gas-pump::before { - content: "\f52f"; } - -.fa-hot-tub-person::before { - content: "\f593"; } - -.fa-hot-tub::before { - content: "\f593"; } - -.fa-map-location::before { - content: "\f59f"; } - -.fa-map-marked::before { - content: "\f59f"; } - -.fa-house-flood-water::before { - content: "\e50e"; } - -.fa-tree::before { - content: "\f1bb"; } - -.fa-bridge-lock::before { - content: "\e4cc"; } - -.fa-sack-dollar::before { - content: "\f81d"; } - -.fa-pen-to-square::before { - content: "\f044"; } - -.fa-edit::before { - content: "\f044"; } - -.fa-car-side::before { - content: "\f5e4"; } - -.fa-share-nodes::before { - content: "\f1e0"; } - -.fa-share-alt::before { - content: "\f1e0"; } - -.fa-heart-circle-minus::before { - content: "\e4ff"; } - -.fa-hourglass-half::before { - content: "\f252"; } - -.fa-hourglass-2::before { - content: "\f252"; } - -.fa-microscope::before { - content: "\f610"; } - -.fa-sink::before { - content: "\e06d"; } - -.fa-bag-shopping::before { - content: "\f290"; } - -.fa-shopping-bag::before { - content: "\f290"; } - -.fa-arrow-down-z-a::before { - content: "\f881"; } - -.fa-sort-alpha-desc::before { - content: "\f881"; } - -.fa-sort-alpha-down-alt::before { - content: "\f881"; } - -.fa-mitten::before { - content: "\f7b5"; } - -.fa-person-rays::before { - content: "\e54d"; } - -.fa-users::before { - content: "\f0c0"; } - -.fa-eye-slash::before { - content: "\f070"; } - -.fa-flask-vial::before { - content: "\e4f3"; } - -.fa-hand::before { - content: "\f256"; } - -.fa-hand-paper::before { - content: "\f256"; } - -.fa-om::before { - content: "\f679"; } - -.fa-worm::before { - content: "\e599"; } - -.fa-house-circle-xmark::before { - content: "\e50b"; } - -.fa-plug::before { - content: "\f1e6"; } - -.fa-chevron-up::before { - content: "\f077"; } - -.fa-hand-spock::before { - content: "\f259"; } - -.fa-stopwatch::before { - content: "\f2f2"; } - -.fa-face-kiss::before { - content: "\f596"; } - -.fa-kiss::before { - content: "\f596"; } - -.fa-bridge-circle-xmark::before { - content: "\e4cb"; } - -.fa-face-grin-tongue::before { - content: "\f589"; } - -.fa-grin-tongue::before { - content: "\f589"; } - -.fa-chess-bishop::before { - content: "\f43a"; } - -.fa-face-grin-wink::before { - content: "\f58c"; } - -.fa-grin-wink::before { - content: "\f58c"; } - -.fa-ear-deaf::before { - content: "\f2a4"; } - -.fa-deaf::before { - content: "\f2a4"; } - -.fa-deafness::before { - content: "\f2a4"; } - -.fa-hard-of-hearing::before { - content: "\f2a4"; } - -.fa-road-circle-check::before { - content: "\e564"; } - -.fa-dice-five::before { - content: "\f523"; } - -.fa-square-rss::before { - content: "\f143"; } - -.fa-rss-square::before { - content: "\f143"; } - -.fa-land-mine-on::before { - content: "\e51b"; } - -.fa-i-cursor::before { - content: "\f246"; } - -.fa-stamp::before { - content: "\f5bf"; } - -.fa-stairs::before { - content: "\e289"; } - -.fa-i::before { - content: "\49"; } - -.fa-hryvnia-sign::before { - content: "\f6f2"; } - -.fa-hryvnia::before { - content: "\f6f2"; } - -.fa-pills::before { - content: "\f484"; } - -.fa-face-grin-wide::before { - content: "\f581"; } - -.fa-grin-alt::before { - content: "\f581"; } - -.fa-tooth::before { - content: "\f5c9"; } - -.fa-v::before { - content: "\56"; } - -.fa-bangladeshi-taka-sign::before { - content: "\e2e6"; } - -.fa-bicycle::before { - content: "\f206"; } - -.fa-staff-snake::before { - content: "\e579"; } - -.fa-rod-asclepius::before { - content: "\e579"; } - -.fa-rod-snake::before { - content: "\e579"; } - -.fa-staff-aesculapius::before { - content: "\e579"; } - -.fa-head-side-cough-slash::before { - content: "\e062"; } - -.fa-truck-medical::before { - content: "\f0f9"; } - -.fa-ambulance::before { - content: "\f0f9"; } - -.fa-wheat-awn-circle-exclamation::before { - content: "\e598"; } - -.fa-snowman::before { - content: "\f7d0"; } - -.fa-mortar-pestle::before { - content: "\f5a7"; } - -.fa-road-barrier::before { - content: "\e562"; } - -.fa-school::before { - content: "\f549"; } - -.fa-igloo::before { - content: "\f7ae"; } - -.fa-joint::before { - content: "\f595"; } - -.fa-angle-right::before { - content: "\f105"; } - -.fa-horse::before { - content: "\f6f0"; } - -.fa-q::before { - content: "\51"; } - -.fa-g::before { - content: "\47"; } - -.fa-notes-medical::before { - content: "\f481"; } - -.fa-temperature-half::before { - content: "\f2c9"; } - -.fa-temperature-2::before { - content: "\f2c9"; } - -.fa-thermometer-2::before { - content: "\f2c9"; } - -.fa-thermometer-half::before { - content: "\f2c9"; } - -.fa-dong-sign::before { - content: "\e169"; } - -.fa-capsules::before { - content: "\f46b"; } - -.fa-poo-storm::before { - content: "\f75a"; } - -.fa-poo-bolt::before { - content: "\f75a"; } - -.fa-face-frown-open::before { - content: "\f57a"; } - -.fa-frown-open::before { - content: "\f57a"; } - -.fa-hand-point-up::before { - content: "\f0a6"; } - -.fa-money-bill::before { - content: "\f0d6"; } - -.fa-bookmark::before { - content: "\f02e"; } - -.fa-align-justify::before { - content: "\f039"; } - -.fa-umbrella-beach::before { - content: "\f5ca"; } - -.fa-helmet-un::before { - content: "\e503"; } - -.fa-bullseye::before { - content: "\f140"; } - -.fa-bacon::before { - content: "\f7e5"; } - -.fa-hand-point-down::before { - content: "\f0a7"; } - -.fa-arrow-up-from-bracket::before { - content: "\e09a"; } - -.fa-folder::before { - content: "\f07b"; } - -.fa-folder-blank::before { - content: "\f07b"; } - -.fa-file-waveform::before { - content: "\f478"; } - -.fa-file-medical-alt::before { - content: "\f478"; } - -.fa-radiation::before { - content: "\f7b9"; } - -.fa-chart-simple::before { - content: "\e473"; } - -.fa-mars-stroke::before { - content: "\f229"; } - -.fa-vial::before { - content: "\f492"; } - -.fa-gauge::before { - content: "\f624"; } - -.fa-dashboard::before { - content: "\f624"; } - -.fa-gauge-med::before { - content: "\f624"; } - -.fa-tachometer-alt-average::before { - content: "\f624"; } - -.fa-wand-magic-sparkles::before { - content: "\e2ca"; } - -.fa-magic-wand-sparkles::before { - content: "\e2ca"; } - -.fa-e::before { - content: "\45"; } - -.fa-pen-clip::before { - content: "\f305"; } - -.fa-pen-alt::before { - content: "\f305"; } - -.fa-bridge-circle-exclamation::before { - content: "\e4ca"; } - -.fa-user::before { - content: "\f007"; } - -.fa-school-circle-check::before { - content: "\e56b"; } - -.fa-dumpster::before { - content: "\f793"; } - -.fa-van-shuttle::before { - content: "\f5b6"; } - -.fa-shuttle-van::before { - content: "\f5b6"; } - -.fa-building-user::before { - content: "\e4da"; } - -.fa-square-caret-left::before { - content: "\f191"; } - -.fa-caret-square-left::before { - content: "\f191"; } - -.fa-highlighter::before { - content: "\f591"; } - -.fa-key::before { - content: "\f084"; } - -.fa-bullhorn::before { - content: "\f0a1"; } - -.fa-globe::before { - content: "\f0ac"; } - -.fa-synagogue::before { - content: "\f69b"; } - -.fa-person-half-dress::before { - content: "\e548"; } - -.fa-road-bridge::before { - content: "\e563"; } - -.fa-location-arrow::before { - content: "\f124"; } - -.fa-c::before { - content: "\43"; } - -.fa-tablet-button::before { - content: "\f10a"; } - -.fa-building-lock::before { - content: "\e4d6"; } - -.fa-pizza-slice::before { - content: "\f818"; } - -.fa-money-bill-wave::before { - content: "\f53a"; } - -.fa-chart-area::before { - content: "\f1fe"; } - -.fa-area-chart::before { - content: "\f1fe"; } - -.fa-house-flag::before { - content: "\e50d"; } - -.fa-person-circle-minus::before { - content: "\e540"; } - -.fa-ban::before { - content: "\f05e"; } - -.fa-cancel::before { - content: "\f05e"; } - -.fa-camera-rotate::before { - content: "\e0d8"; } - -.fa-spray-can-sparkles::before { - content: "\f5d0"; } - -.fa-air-freshener::before { - content: "\f5d0"; } - -.fa-star::before { - content: "\f005"; } - -.fa-repeat::before { - content: "\f363"; } - -.fa-cross::before { - content: "\f654"; } - -.fa-box::before { - content: "\f466"; } - -.fa-venus-mars::before { - content: "\f228"; } - -.fa-arrow-pointer::before { - content: "\f245"; } - -.fa-mouse-pointer::before { - content: "\f245"; } - -.fa-maximize::before { - content: "\f31e"; } - -.fa-expand-arrows-alt::before { - content: "\f31e"; } - -.fa-charging-station::before { - content: "\f5e7"; } - -.fa-shapes::before { - content: "\f61f"; } - -.fa-triangle-circle-square::before { - content: "\f61f"; } - -.fa-shuffle::before { - content: "\f074"; } - -.fa-random::before { - content: "\f074"; } - -.fa-person-running::before { - content: "\f70c"; } - -.fa-running::before { - content: "\f70c"; } - -.fa-mobile-retro::before { - content: "\e527"; } - -.fa-grip-lines-vertical::before { - content: "\f7a5"; } - -.fa-spider::before { - content: "\f717"; } - -.fa-hands-bound::before { - content: "\e4f9"; } - -.fa-file-invoice-dollar::before { - content: "\f571"; } - -.fa-plane-circle-exclamation::before { - content: "\e556"; } - -.fa-x-ray::before { - content: "\f497"; } - -.fa-spell-check::before { - content: "\f891"; } - -.fa-slash::before { - content: "\f715"; } - -.fa-computer-mouse::before { - content: "\f8cc"; } - -.fa-mouse::before { - content: "\f8cc"; } - -.fa-arrow-right-to-bracket::before { - content: "\f090"; } - -.fa-sign-in::before { - content: "\f090"; } - -.fa-shop-slash::before { - content: "\e070"; } - -.fa-store-alt-slash::before { - content: "\e070"; } - -.fa-server::before { - content: "\f233"; } - -.fa-virus-covid-slash::before { - content: "\e4a9"; } - -.fa-shop-lock::before { - content: "\e4a5"; } - -.fa-hourglass-start::before { - content: "\f251"; } - -.fa-hourglass-1::before { - content: "\f251"; } - -.fa-blender-phone::before { - content: "\f6b6"; } - -.fa-building-wheat::before { - content: "\e4db"; } - -.fa-person-breastfeeding::before { - content: "\e53a"; } - -.fa-right-to-bracket::before { - content: "\f2f6"; } - -.fa-sign-in-alt::before { - content: "\f2f6"; } - -.fa-venus::before { - content: "\f221"; } - -.fa-passport::before { - content: "\f5ab"; } - -.fa-heart-pulse::before { - content: "\f21e"; } - -.fa-heartbeat::before { - content: "\f21e"; } - -.fa-people-carry-box::before { - content: "\f4ce"; } - -.fa-people-carry::before { - content: "\f4ce"; } - -.fa-temperature-high::before { - content: "\f769"; } - -.fa-microchip::before { - content: "\f2db"; } - -.fa-crown::before { - content: "\f521"; } - -.fa-weight-hanging::before { - content: "\f5cd"; } - -.fa-xmarks-lines::before { - content: "\e59a"; } - -.fa-file-prescription::before { - content: "\f572"; } - -.fa-weight-scale::before { - content: "\f496"; } - -.fa-weight::before { - content: "\f496"; } - -.fa-user-group::before { - content: "\f500"; } - -.fa-user-friends::before { - content: "\f500"; } - -.fa-arrow-up-a-z::before { - content: "\f15e"; } - -.fa-sort-alpha-up::before { - content: "\f15e"; } - -.fa-chess-knight::before { - content: "\f441"; } - -.fa-face-laugh-squint::before { - content: "\f59b"; } - -.fa-laugh-squint::before { - content: "\f59b"; } - -.fa-wheelchair::before { - content: "\f193"; } - -.fa-circle-arrow-up::before { - content: "\f0aa"; } - -.fa-arrow-circle-up::before { - content: "\f0aa"; } - -.fa-toggle-on::before { - content: "\f205"; } - -.fa-person-walking::before { - content: "\f554"; } - -.fa-walking::before { - content: "\f554"; } - -.fa-l::before { - content: "\4c"; } - -.fa-fire::before { - content: "\f06d"; } - -.fa-bed-pulse::before { - content: "\f487"; } - -.fa-procedures::before { - content: "\f487"; } - -.fa-shuttle-space::before { - content: "\f197"; } - -.fa-space-shuttle::before { - content: "\f197"; } - -.fa-face-laugh::before { - content: "\f599"; } - -.fa-laugh::before { - content: "\f599"; } - -.fa-folder-open::before { - content: "\f07c"; } - -.fa-heart-circle-plus::before { - content: "\e500"; } - -.fa-code-fork::before { - content: "\e13b"; } - -.fa-city::before { - content: "\f64f"; } - -.fa-microphone-lines::before { - content: "\f3c9"; } - -.fa-microphone-alt::before { - content: "\f3c9"; } - -.fa-pepper-hot::before { - content: "\f816"; } - -.fa-unlock::before { - content: "\f09c"; } - -.fa-colon-sign::before { - content: "\e140"; } - -.fa-headset::before { - content: "\f590"; } - -.fa-store-slash::before { - content: "\e071"; } - -.fa-road-circle-xmark::before { - content: "\e566"; } - -.fa-user-minus::before { - content: "\f503"; } - -.fa-mars-stroke-up::before { - content: "\f22a"; } - -.fa-mars-stroke-v::before { - content: "\f22a"; } - -.fa-champagne-glasses::before { - content: "\f79f"; } - -.fa-glass-cheers::before { - content: "\f79f"; } - -.fa-clipboard::before { - content: "\f328"; } - -.fa-house-circle-exclamation::before { - content: "\e50a"; } - -.fa-file-arrow-up::before { - content: "\f574"; } - -.fa-file-upload::before { - content: "\f574"; } - -.fa-wifi::before { - content: "\f1eb"; } - -.fa-wifi-3::before { - content: "\f1eb"; } - -.fa-wifi-strong::before { - content: "\f1eb"; } - -.fa-bath::before { - content: "\f2cd"; } - -.fa-bathtub::before { - content: "\f2cd"; } - -.fa-underline::before { - content: "\f0cd"; } - -.fa-user-pen::before { - content: "\f4ff"; } - -.fa-user-edit::before { - content: "\f4ff"; } - -.fa-signature::before { - content: "\f5b7"; } - -.fa-stroopwafel::before { - content: "\f551"; } - -.fa-bold::before { - content: "\f032"; } - -.fa-anchor-lock::before { - content: "\e4ad"; } - -.fa-building-ngo::before { - content: "\e4d7"; } - -.fa-manat-sign::before { - content: "\e1d5"; } - -.fa-not-equal::before { - content: "\f53e"; } - -.fa-border-top-left::before { - content: "\f853"; } - -.fa-border-style::before { - content: "\f853"; } - -.fa-map-location-dot::before { - content: "\f5a0"; } - -.fa-map-marked-alt::before { - content: "\f5a0"; } - -.fa-jedi::before { - content: "\f669"; } - -.fa-square-poll-vertical::before { - content: "\f681"; } - -.fa-poll::before { - content: "\f681"; } - -.fa-mug-hot::before { - content: "\f7b6"; } - -.fa-car-battery::before { - content: "\f5df"; } - -.fa-battery-car::before { - content: "\f5df"; } - -.fa-gift::before { - content: "\f06b"; } - -.fa-dice-two::before { - content: "\f528"; } - -.fa-chess-queen::before { - content: "\f445"; } - -.fa-glasses::before { - content: "\f530"; } - -.fa-chess-board::before { - content: "\f43c"; } - -.fa-building-circle-check::before { - content: "\e4d2"; } - -.fa-person-chalkboard::before { - content: "\e53d"; } - -.fa-mars-stroke-right::before { - content: "\f22b"; } - -.fa-mars-stroke-h::before { - content: "\f22b"; } - -.fa-hand-back-fist::before { - content: "\f255"; } - -.fa-hand-rock::before { - content: "\f255"; } - -.fa-square-caret-up::before { - content: "\f151"; } - -.fa-caret-square-up::before { - content: "\f151"; } - -.fa-cloud-showers-water::before { - content: "\e4e4"; } - -.fa-chart-bar::before { - content: "\f080"; } - -.fa-bar-chart::before { - content: "\f080"; } - -.fa-hands-bubbles::before { - content: "\e05e"; } - -.fa-hands-wash::before { - content: "\e05e"; } - -.fa-less-than-equal::before { - content: "\f537"; } - -.fa-train::before { - content: "\f238"; } - -.fa-eye-low-vision::before { - content: "\f2a8"; } - -.fa-low-vision::before { - content: "\f2a8"; } - -.fa-crow::before { - content: "\f520"; } - -.fa-sailboat::before { - content: "\e445"; } - -.fa-window-restore::before { - content: "\f2d2"; } - -.fa-square-plus::before { - content: "\f0fe"; } - -.fa-plus-square::before { - content: "\f0fe"; } - -.fa-torii-gate::before { - content: "\f6a1"; } - -.fa-frog::before { - content: "\f52e"; } - -.fa-bucket::before { - content: "\e4cf"; } - -.fa-image::before { - content: "\f03e"; } - -.fa-microphone::before { - content: "\f130"; } - -.fa-cow::before { - content: "\f6c8"; } - -.fa-caret-up::before { - content: "\f0d8"; } - -.fa-screwdriver::before { - content: "\f54a"; } - -.fa-folder-closed::before { - content: "\e185"; } - -.fa-house-tsunami::before { - content: "\e515"; } - -.fa-square-nfi::before { - content: "\e576"; } - -.fa-arrow-up-from-ground-water::before { - content: "\e4b5"; } - -.fa-martini-glass::before { - content: "\f57b"; } - -.fa-glass-martini-alt::before { - content: "\f57b"; } - -.fa-rotate-left::before { - content: "\f2ea"; } - -.fa-rotate-back::before { - content: "\f2ea"; } - -.fa-rotate-backward::before { - content: "\f2ea"; } - -.fa-undo-alt::before { - content: "\f2ea"; } - -.fa-table-columns::before { - content: "\f0db"; } - -.fa-columns::before { - content: "\f0db"; } - -.fa-lemon::before { - content: "\f094"; } - -.fa-head-side-mask::before { - content: "\e063"; } - -.fa-handshake::before { - content: "\f2b5"; } - -.fa-gem::before { - content: "\f3a5"; } - -.fa-dolly::before { - content: "\f472"; } - -.fa-dolly-box::before { - content: "\f472"; } - -.fa-smoking::before { - content: "\f48d"; } - -.fa-minimize::before { - content: "\f78c"; } - -.fa-compress-arrows-alt::before { - content: "\f78c"; } - -.fa-monument::before { - content: "\f5a6"; } - -.fa-snowplow::before { - content: "\f7d2"; } - -.fa-angles-right::before { - content: "\f101"; } - -.fa-angle-double-right::before { - content: "\f101"; } - -.fa-cannabis::before { - content: "\f55f"; } - -.fa-circle-play::before { - content: "\f144"; } - -.fa-play-circle::before { - content: "\f144"; } - -.fa-tablets::before { - content: "\f490"; } - -.fa-ethernet::before { - content: "\f796"; } - -.fa-euro-sign::before { - content: "\f153"; } - -.fa-eur::before { - content: "\f153"; } - -.fa-euro::before { - content: "\f153"; } - -.fa-chair::before { - content: "\f6c0"; } - -.fa-circle-check::before { - content: "\f058"; } - -.fa-check-circle::before { - content: "\f058"; } - -.fa-circle-stop::before { - content: "\f28d"; } - -.fa-stop-circle::before { - content: "\f28d"; } - -.fa-compass-drafting::before { - content: "\f568"; } - -.fa-drafting-compass::before { - content: "\f568"; } - -.fa-plate-wheat::before { - content: "\e55a"; } - -.fa-icicles::before { - content: "\f7ad"; } - -.fa-person-shelter::before { - content: "\e54f"; } - -.fa-neuter::before { - content: "\f22c"; } - -.fa-id-badge::before { - content: "\f2c1"; } - -.fa-marker::before { - content: "\f5a1"; } - -.fa-face-laugh-beam::before { - content: "\f59a"; } - -.fa-laugh-beam::before { - content: "\f59a"; } - -.fa-helicopter-symbol::before { - content: "\e502"; } - -.fa-universal-access::before { - content: "\f29a"; } - -.fa-circle-chevron-up::before { - content: "\f139"; } - -.fa-chevron-circle-up::before { - content: "\f139"; } - -.fa-lari-sign::before { - content: "\e1c8"; } - -.fa-volcano::before { - content: "\f770"; } - -.fa-person-walking-dashed-line-arrow-right::before { - content: "\e553"; } - -.fa-sterling-sign::before { - content: "\f154"; } - -.fa-gbp::before { - content: "\f154"; } - -.fa-pound-sign::before { - content: "\f154"; } - -.fa-viruses::before { - content: "\e076"; } - -.fa-square-person-confined::before { - content: "\e577"; } - -.fa-user-tie::before { - content: "\f508"; } - -.fa-arrow-down-long::before { - content: "\f175"; } - -.fa-long-arrow-down::before { - content: "\f175"; } - -.fa-tent-arrow-down-to-line::before { - content: "\e57e"; } - -.fa-certificate::before { - content: "\f0a3"; } - -.fa-reply-all::before { - content: "\f122"; } - -.fa-mail-reply-all::before { - content: "\f122"; } - -.fa-suitcase::before { - content: "\f0f2"; } - -.fa-person-skating::before { - content: "\f7c5"; } - -.fa-skating::before { - content: "\f7c5"; } - -.fa-filter-circle-dollar::before { - content: "\f662"; } - -.fa-funnel-dollar::before { - content: "\f662"; } - -.fa-camera-retro::before { - content: "\f083"; } - -.fa-circle-arrow-down::before { - content: "\f0ab"; } - -.fa-arrow-circle-down::before { - content: "\f0ab"; } - -.fa-file-import::before { - content: "\f56f"; } - -.fa-arrow-right-to-file::before { - content: "\f56f"; } - -.fa-square-arrow-up-right::before { - content: "\f14c"; } - -.fa-external-link-square::before { - content: "\f14c"; } - -.fa-box-open::before { - content: "\f49e"; } - -.fa-scroll::before { - content: "\f70e"; } - -.fa-spa::before { - content: "\f5bb"; } - -.fa-location-pin-lock::before { - content: "\e51f"; } - -.fa-pause::before { - content: "\f04c"; } - -.fa-hill-avalanche::before { - content: "\e507"; } - -.fa-temperature-empty::before { - content: "\f2cb"; } - -.fa-temperature-0::before { - content: "\f2cb"; } - -.fa-thermometer-0::before { - content: "\f2cb"; } - -.fa-thermometer-empty::before { - content: "\f2cb"; } - -.fa-bomb::before { - content: "\f1e2"; } - -.fa-registered::before { - content: "\f25d"; } - -.fa-address-card::before { - content: "\f2bb"; } - -.fa-contact-card::before { - content: "\f2bb"; } - -.fa-vcard::before { - content: "\f2bb"; } - -.fa-scale-unbalanced-flip::before { - content: "\f516"; } - -.fa-balance-scale-right::before { - content: "\f516"; } - -.fa-subscript::before { - content: "\f12c"; } - -.fa-diamond-turn-right::before { - content: "\f5eb"; } - -.fa-directions::before { - content: "\f5eb"; } - -.fa-burst::before { - content: "\e4dc"; } - -.fa-house-laptop::before { - content: "\e066"; } - -.fa-laptop-house::before { - content: "\e066"; } - -.fa-face-tired::before { - content: "\f5c8"; } - -.fa-tired::before { - content: "\f5c8"; } - -.fa-money-bills::before { - content: "\e1f3"; } - -.fa-smog::before { - content: "\f75f"; } - -.fa-crutch::before { - content: "\f7f7"; } - -.fa-cloud-arrow-up::before { - content: "\f0ee"; } - -.fa-cloud-upload::before { - content: "\f0ee"; } - -.fa-cloud-upload-alt::before { - content: "\f0ee"; } - -.fa-palette::before { - content: "\f53f"; } - -.fa-arrows-turn-right::before { - content: "\e4c0"; } - -.fa-vest::before { - content: "\e085"; } - -.fa-ferry::before { - content: "\e4ea"; } - -.fa-arrows-down-to-people::before { - content: "\e4b9"; } - -.fa-seedling::before { - content: "\f4d8"; } - -.fa-sprout::before { - content: "\f4d8"; } - -.fa-left-right::before { - content: "\f337"; } - -.fa-arrows-alt-h::before { - content: "\f337"; } - -.fa-boxes-packing::before { - content: "\e4c7"; } - -.fa-circle-arrow-left::before { - content: "\f0a8"; } - -.fa-arrow-circle-left::before { - content: "\f0a8"; } - -.fa-group-arrows-rotate::before { - content: "\e4f6"; } - -.fa-bowl-food::before { - content: "\e4c6"; } - -.fa-candy-cane::before { - content: "\f786"; } - -.fa-arrow-down-wide-short::before { - content: "\f160"; } - -.fa-sort-amount-asc::before { - content: "\f160"; } - -.fa-sort-amount-down::before { - content: "\f160"; } - -.fa-cloud-bolt::before { - content: "\f76c"; } - -.fa-thunderstorm::before { - content: "\f76c"; } - -.fa-text-slash::before { - content: "\f87d"; } - -.fa-remove-format::before { - content: "\f87d"; } - -.fa-face-smile-wink::before { - content: "\f4da"; } - -.fa-smile-wink::before { - content: "\f4da"; } - -.fa-file-word::before { - content: "\f1c2"; } - -.fa-file-powerpoint::before { - content: "\f1c4"; } - -.fa-arrows-left-right::before { - content: "\f07e"; } - -.fa-arrows-h::before { - content: "\f07e"; } - -.fa-house-lock::before { - content: "\e510"; } - -.fa-cloud-arrow-down::before { - content: "\f0ed"; } - -.fa-cloud-download::before { - content: "\f0ed"; } - -.fa-cloud-download-alt::before { - content: "\f0ed"; } - -.fa-children::before { - content: "\e4e1"; } - -.fa-chalkboard::before { - content: "\f51b"; } - -.fa-blackboard::before { - content: "\f51b"; } - -.fa-user-large-slash::before { - content: "\f4fa"; } - -.fa-user-alt-slash::before { - content: "\f4fa"; } - -.fa-envelope-open::before { - content: "\f2b6"; } - -.fa-handshake-simple-slash::before { - content: "\e05f"; } - -.fa-handshake-alt-slash::before { - content: "\e05f"; } - -.fa-mattress-pillow::before { - content: "\e525"; } - -.fa-guarani-sign::before { - content: "\e19a"; } - -.fa-arrows-rotate::before { - content: "\f021"; } - -.fa-refresh::before { - content: "\f021"; } - -.fa-sync::before { - content: "\f021"; } - -.fa-fire-extinguisher::before { - content: "\f134"; } - -.fa-cruzeiro-sign::before { - content: "\e152"; } - -.fa-greater-than-equal::before { - content: "\f532"; } - -.fa-shield-halved::before { - content: "\f3ed"; } - -.fa-shield-alt::before { - content: "\f3ed"; } - -.fa-book-atlas::before { - content: "\f558"; } - -.fa-atlas::before { - content: "\f558"; } - -.fa-virus::before { - content: "\e074"; } - -.fa-envelope-circle-check::before { - content: "\e4e8"; } - -.fa-layer-group::before { - content: "\f5fd"; } - -.fa-arrows-to-dot::before { - content: "\e4be"; } - -.fa-archway::before { - content: "\f557"; } - -.fa-heart-circle-check::before { - content: "\e4fd"; } - -.fa-house-chimney-crack::before { - content: "\f6f1"; } - -.fa-house-damage::before { - content: "\f6f1"; } - -.fa-file-zipper::before { - content: "\f1c6"; } - -.fa-file-archive::before { - content: "\f1c6"; } - -.fa-square::before { - content: "\f0c8"; } - -.fa-martini-glass-empty::before { - content: "\f000"; } - -.fa-glass-martini::before { - content: "\f000"; } - -.fa-couch::before { - content: "\f4b8"; } - -.fa-cedi-sign::before { - content: "\e0df"; } - -.fa-italic::before { - content: "\f033"; } - -.fa-table-cells-column-lock::before { - content: "\e678"; } - -.fa-church::before { - content: "\f51d"; } - -.fa-comments-dollar::before { - content: "\f653"; } - -.fa-democrat::before { - content: "\f747"; } - -.fa-z::before { - content: "\5a"; } - -.fa-person-skiing::before { - content: "\f7c9"; } - -.fa-skiing::before { - content: "\f7c9"; } - -.fa-road-lock::before { - content: "\e567"; } - -.fa-a::before { - content: "\41"; } - -.fa-temperature-arrow-down::before { - content: "\e03f"; } - -.fa-temperature-down::before { - content: "\e03f"; } - -.fa-feather-pointed::before { - content: "\f56b"; } - -.fa-feather-alt::before { - content: "\f56b"; } - -.fa-p::before { - content: "\50"; } - -.fa-snowflake::before { - content: "\f2dc"; } - -.fa-newspaper::before { - content: "\f1ea"; } - -.fa-rectangle-ad::before { - content: "\f641"; } - -.fa-ad::before { - content: "\f641"; } - -.fa-circle-arrow-right::before { - content: "\f0a9"; } - -.fa-arrow-circle-right::before { - content: "\f0a9"; } - -.fa-filter-circle-xmark::before { - content: "\e17b"; } - -.fa-locust::before { - content: "\e520"; } - -.fa-sort::before { - content: "\f0dc"; } - -.fa-unsorted::before { - content: "\f0dc"; } - -.fa-list-ol::before { - content: "\f0cb"; } - -.fa-list-1-2::before { - content: "\f0cb"; } - -.fa-list-numeric::before { - content: "\f0cb"; } - -.fa-person-dress-burst::before { - content: "\e544"; } - -.fa-money-check-dollar::before { - content: "\f53d"; } - -.fa-money-check-alt::before { - content: "\f53d"; } - -.fa-vector-square::before { - content: "\f5cb"; } - -.fa-bread-slice::before { - content: "\f7ec"; } - -.fa-language::before { - content: "\f1ab"; } - -.fa-face-kiss-wink-heart::before { - content: "\f598"; } - -.fa-kiss-wink-heart::before { - content: "\f598"; } - -.fa-filter::before { - content: "\f0b0"; } - -.fa-question::before { - content: "\3f"; } - -.fa-file-signature::before { - content: "\f573"; } - -.fa-up-down-left-right::before { - content: "\f0b2"; } - -.fa-arrows-alt::before { - content: "\f0b2"; } - -.fa-house-chimney-user::before { - content: "\e065"; } - -.fa-hand-holding-heart::before { - content: "\f4be"; } - -.fa-puzzle-piece::before { - content: "\f12e"; } - -.fa-money-check::before { - content: "\f53c"; } - -.fa-star-half-stroke::before { - content: "\f5c0"; } - -.fa-star-half-alt::before { - content: "\f5c0"; } - -.fa-code::before { - content: "\f121"; } - -.fa-whiskey-glass::before { - content: "\f7a0"; } - -.fa-glass-whiskey::before { - content: "\f7a0"; } - -.fa-building-circle-exclamation::before { - content: "\e4d3"; } - -.fa-magnifying-glass-chart::before { - content: "\e522"; } - -.fa-arrow-up-right-from-square::before { - content: "\f08e"; } - -.fa-external-link::before { - content: "\f08e"; } - -.fa-cubes-stacked::before { - content: "\e4e6"; } - -.fa-won-sign::before { - content: "\f159"; } - -.fa-krw::before { - content: "\f159"; } - -.fa-won::before { - content: "\f159"; } - -.fa-virus-covid::before { - content: "\e4a8"; } - -.fa-austral-sign::before { - content: "\e0a9"; } - -.fa-f::before { - content: "\46"; } - -.fa-leaf::before { - content: "\f06c"; } - -.fa-road::before { - content: "\f018"; } - -.fa-taxi::before { - content: "\f1ba"; } - -.fa-cab::before { - content: "\f1ba"; } - -.fa-person-circle-plus::before { - content: "\e541"; } - -.fa-chart-pie::before { - content: "\f200"; } - -.fa-pie-chart::before { - content: "\f200"; } - -.fa-bolt-lightning::before { - content: "\e0b7"; } - -.fa-sack-xmark::before { - content: "\e56a"; } - -.fa-file-excel::before { - content: "\f1c3"; } - -.fa-file-contract::before { - content: "\f56c"; } - -.fa-fish-fins::before { - content: "\e4f2"; } - -.fa-building-flag::before { - content: "\e4d5"; } - -.fa-face-grin-beam::before { - content: "\f582"; } - -.fa-grin-beam::before { - content: "\f582"; } - -.fa-object-ungroup::before { - content: "\f248"; } - -.fa-poop::before { - content: "\f619"; } - -.fa-location-pin::before { - content: "\f041"; } - -.fa-map-marker::before { - content: "\f041"; } - -.fa-kaaba::before { - content: "\f66b"; } - -.fa-toilet-paper::before { - content: "\f71e"; } - -.fa-helmet-safety::before { - content: "\f807"; } - -.fa-hard-hat::before { - content: "\f807"; } - -.fa-hat-hard::before { - content: "\f807"; } - -.fa-eject::before { - content: "\f052"; } - -.fa-circle-right::before { - content: "\f35a"; } - -.fa-arrow-alt-circle-right::before { - content: "\f35a"; } - -.fa-plane-circle-check::before { - content: "\e555"; } - -.fa-face-rolling-eyes::before { - content: "\f5a5"; } - -.fa-meh-rolling-eyes::before { - content: "\f5a5"; } - -.fa-object-group::before { - content: "\f247"; } - -.fa-chart-line::before { - content: "\f201"; } - -.fa-line-chart::before { - content: "\f201"; } - -.fa-mask-ventilator::before { - content: "\e524"; } - -.fa-arrow-right::before { - content: "\f061"; } - -.fa-signs-post::before { - content: "\f277"; } - -.fa-map-signs::before { - content: "\f277"; } - -.fa-cash-register::before { - content: "\f788"; } - -.fa-person-circle-question::before { - content: "\e542"; } - -.fa-h::before { - content: "\48"; } - -.fa-tarp::before { - content: "\e57b"; } - -.fa-screwdriver-wrench::before { - content: "\f7d9"; } - -.fa-tools::before { - content: "\f7d9"; } - -.fa-arrows-to-eye::before { - content: "\e4bf"; } - -.fa-plug-circle-bolt::before { - content: "\e55b"; } - -.fa-heart::before { - content: "\f004"; } - -.fa-mars-and-venus::before { - content: "\f224"; } - -.fa-house-user::before { - content: "\e1b0"; } - -.fa-home-user::before { - content: "\e1b0"; } - -.fa-dumpster-fire::before { - content: "\f794"; } - -.fa-house-crack::before { - content: "\e3b1"; } - -.fa-martini-glass-citrus::before { - content: "\f561"; } - -.fa-cocktail::before { - content: "\f561"; } - -.fa-face-surprise::before { - content: "\f5c2"; } - -.fa-surprise::before { - content: "\f5c2"; } - -.fa-bottle-water::before { - content: "\e4c5"; } - -.fa-circle-pause::before { - content: "\f28b"; } - -.fa-pause-circle::before { - content: "\f28b"; } - -.fa-toilet-paper-slash::before { - content: "\e072"; } - -.fa-apple-whole::before { - content: "\f5d1"; } - -.fa-apple-alt::before { - content: "\f5d1"; } - -.fa-kitchen-set::before { - content: "\e51a"; } - -.fa-r::before { - content: "\52"; } - -.fa-temperature-quarter::before { - content: "\f2ca"; } - -.fa-temperature-1::before { - content: "\f2ca"; } - -.fa-thermometer-1::before { - content: "\f2ca"; } - -.fa-thermometer-quarter::before { - content: "\f2ca"; } - -.fa-cube::before { - content: "\f1b2"; } - -.fa-bitcoin-sign::before { - content: "\e0b4"; } - -.fa-shield-dog::before { - content: "\e573"; } - -.fa-solar-panel::before { - content: "\f5ba"; } - -.fa-lock-open::before { - content: "\f3c1"; } - -.fa-elevator::before { - content: "\e16d"; } - -.fa-money-bill-transfer::before { - content: "\e528"; } - -.fa-money-bill-trend-up::before { - content: "\e529"; } - -.fa-house-flood-water-circle-arrow-right::before { - content: "\e50f"; } - -.fa-square-poll-horizontal::before { - content: "\f682"; } - -.fa-poll-h::before { - content: "\f682"; } - -.fa-circle::before { - content: "\f111"; } - -.fa-backward-fast::before { - content: "\f049"; } - -.fa-fast-backward::before { - content: "\f049"; } - -.fa-recycle::before { - content: "\f1b8"; } - -.fa-user-astronaut::before { - content: "\f4fb"; } - -.fa-plane-slash::before { - content: "\e069"; } - -.fa-trademark::before { - content: "\f25c"; } - -.fa-basketball::before { - content: "\f434"; } - -.fa-basketball-ball::before { - content: "\f434"; } - -.fa-satellite-dish::before { - content: "\f7c0"; } - -.fa-circle-up::before { - content: "\f35b"; } - -.fa-arrow-alt-circle-up::before { - content: "\f35b"; } - -.fa-mobile-screen-button::before { - content: "\f3cd"; } - -.fa-mobile-alt::before { - content: "\f3cd"; } - -.fa-volume-high::before { - content: "\f028"; } - -.fa-volume-up::before { - content: "\f028"; } - -.fa-users-rays::before { - content: "\e593"; } - -.fa-wallet::before { - content: "\f555"; } - -.fa-clipboard-check::before { - content: "\f46c"; } - -.fa-file-audio::before { - content: "\f1c7"; } - -.fa-burger::before { - content: "\f805"; } - -.fa-hamburger::before { - content: "\f805"; } - -.fa-wrench::before { - content: "\f0ad"; } - -.fa-bugs::before { - content: "\e4d0"; } - -.fa-rupee-sign::before { - content: "\f156"; } - -.fa-rupee::before { - content: "\f156"; } - -.fa-file-image::before { - content: "\f1c5"; } - -.fa-circle-question::before { - content: "\f059"; } - -.fa-question-circle::before { - content: "\f059"; } - -.fa-plane-departure::before { - content: "\f5b0"; } - -.fa-handshake-slash::before { - content: "\e060"; } - -.fa-book-bookmark::before { - content: "\e0bb"; } - -.fa-code-branch::before { - content: "\f126"; } - -.fa-hat-cowboy::before { - content: "\f8c0"; } - -.fa-bridge::before { - content: "\e4c8"; } - -.fa-phone-flip::before { - content: "\f879"; } - -.fa-phone-alt::before { - content: "\f879"; } - -.fa-truck-front::before { - content: "\e2b7"; } - -.fa-cat::before { - content: "\f6be"; } - -.fa-anchor-circle-exclamation::before { - content: "\e4ab"; } - -.fa-truck-field::before { - content: "\e58d"; } - -.fa-route::before { - content: "\f4d7"; } - -.fa-clipboard-question::before { - content: "\e4e3"; } - -.fa-panorama::before { - content: "\e209"; } - -.fa-comment-medical::before { - content: "\f7f5"; } - -.fa-teeth-open::before { - content: "\f62f"; } - -.fa-file-circle-minus::before { - content: "\e4ed"; } - -.fa-tags::before { - content: "\f02c"; } - -.fa-wine-glass::before { - content: "\f4e3"; } - -.fa-forward-fast::before { - content: "\f050"; } - -.fa-fast-forward::before { - content: "\f050"; } - -.fa-face-meh-blank::before { - content: "\f5a4"; } - -.fa-meh-blank::before { - content: "\f5a4"; } - -.fa-square-parking::before { - content: "\f540"; } - -.fa-parking::before { - content: "\f540"; } - -.fa-house-signal::before { - content: "\e012"; } - -.fa-bars-progress::before { - content: "\f828"; } - -.fa-tasks-alt::before { - content: "\f828"; } - -.fa-faucet-drip::before { - content: "\e006"; } - -.fa-cart-flatbed::before { - content: "\f474"; } - -.fa-dolly-flatbed::before { - content: "\f474"; } - -.fa-ban-smoking::before { - content: "\f54d"; } - -.fa-smoking-ban::before { - content: "\f54d"; } - -.fa-terminal::before { - content: "\f120"; } - -.fa-mobile-button::before { - content: "\f10b"; } - -.fa-house-medical-flag::before { - content: "\e514"; } - -.fa-basket-shopping::before { - content: "\f291"; } - -.fa-shopping-basket::before { - content: "\f291"; } - -.fa-tape::before { - content: "\f4db"; } - -.fa-bus-simple::before { - content: "\f55e"; } - -.fa-bus-alt::before { - content: "\f55e"; } - -.fa-eye::before { - content: "\f06e"; } - -.fa-face-sad-cry::before { - content: "\f5b3"; } - -.fa-sad-cry::before { - content: "\f5b3"; } - -.fa-audio-description::before { - content: "\f29e"; } - -.fa-person-military-to-person::before { - content: "\e54c"; } - -.fa-file-shield::before { - content: "\e4f0"; } - -.fa-user-slash::before { - content: "\f506"; } - -.fa-pen::before { - content: "\f304"; } - -.fa-tower-observation::before { - content: "\e586"; } - -.fa-file-code::before { - content: "\f1c9"; } - -.fa-signal::before { - content: "\f012"; } - -.fa-signal-5::before { - content: "\f012"; } - -.fa-signal-perfect::before { - content: "\f012"; } - -.fa-bus::before { - content: "\f207"; } - -.fa-heart-circle-xmark::before { - content: "\e501"; } - -.fa-house-chimney::before { - content: "\e3af"; } - -.fa-home-lg::before { - content: "\e3af"; } - -.fa-window-maximize::before { - content: "\f2d0"; } - -.fa-face-frown::before { - content: "\f119"; } - -.fa-frown::before { - content: "\f119"; } - -.fa-prescription::before { - content: "\f5b1"; } - -.fa-shop::before { - content: "\f54f"; } - -.fa-store-alt::before { - content: "\f54f"; } - -.fa-floppy-disk::before { - content: "\f0c7"; } - -.fa-save::before { - content: "\f0c7"; } - -.fa-vihara::before { - content: "\f6a7"; } - -.fa-scale-unbalanced::before { - content: "\f515"; } - -.fa-balance-scale-left::before { - content: "\f515"; } - -.fa-sort-up::before { - content: "\f0de"; } - -.fa-sort-asc::before { - content: "\f0de"; } - -.fa-comment-dots::before { - content: "\f4ad"; } - -.fa-commenting::before { - content: "\f4ad"; } - -.fa-plant-wilt::before { - content: "\e5aa"; } - -.fa-diamond::before { - content: "\f219"; } - -.fa-face-grin-squint::before { - content: "\f585"; } - -.fa-grin-squint::before { - content: "\f585"; } - -.fa-hand-holding-dollar::before { - content: "\f4c0"; } - -.fa-hand-holding-usd::before { - content: "\f4c0"; } - -.fa-bacterium::before { - content: "\e05a"; } - -.fa-hand-pointer::before { - content: "\f25a"; } - -.fa-drum-steelpan::before { - content: "\f56a"; } - -.fa-hand-scissors::before { - content: "\f257"; } - -.fa-hands-praying::before { - content: "\f684"; } - -.fa-praying-hands::before { - content: "\f684"; } - -.fa-arrow-rotate-right::before { - content: "\f01e"; } - -.fa-arrow-right-rotate::before { - content: "\f01e"; } - -.fa-arrow-rotate-forward::before { - content: "\f01e"; } - -.fa-redo::before { - content: "\f01e"; } - -.fa-biohazard::before { - content: "\f780"; } - -.fa-location-crosshairs::before { - content: "\f601"; } - -.fa-location::before { - content: "\f601"; } - -.fa-mars-double::before { - content: "\f227"; } - -.fa-child-dress::before { - content: "\e59c"; } - -.fa-users-between-lines::before { - content: "\e591"; } - -.fa-lungs-virus::before { - content: "\e067"; } - -.fa-face-grin-tears::before { - content: "\f588"; } - -.fa-grin-tears::before { - content: "\f588"; } - -.fa-phone::before { - content: "\f095"; } - -.fa-calendar-xmark::before { - content: "\f273"; } - -.fa-calendar-times::before { - content: "\f273"; } - -.fa-child-reaching::before { - content: "\e59d"; } - -.fa-head-side-virus::before { - content: "\e064"; } - -.fa-user-gear::before { - content: "\f4fe"; } - -.fa-user-cog::before { - content: "\f4fe"; } - -.fa-arrow-up-1-9::before { - content: "\f163"; } - -.fa-sort-numeric-up::before { - content: "\f163"; } - -.fa-door-closed::before { - content: "\f52a"; } - -.fa-shield-virus::before { - content: "\e06c"; } - -.fa-dice-six::before { - content: "\f526"; } - -.fa-mosquito-net::before { - content: "\e52c"; } - -.fa-bridge-water::before { - content: "\e4ce"; } - -.fa-person-booth::before { - content: "\f756"; } - -.fa-text-width::before { - content: "\f035"; } - -.fa-hat-wizard::before { - content: "\f6e8"; } - -.fa-pen-fancy::before { - content: "\f5ac"; } - -.fa-person-digging::before { - content: "\f85e"; } - -.fa-digging::before { - content: "\f85e"; } - -.fa-trash::before { - content: "\f1f8"; } - -.fa-gauge-simple::before { - content: "\f629"; } - -.fa-gauge-simple-med::before { - content: "\f629"; } - -.fa-tachometer-average::before { - content: "\f629"; } - -.fa-book-medical::before { - content: "\f7e6"; } - -.fa-poo::before { - content: "\f2fe"; } - -.fa-quote-right::before { - content: "\f10e"; } - -.fa-quote-right-alt::before { - content: "\f10e"; } - -.fa-shirt::before { - content: "\f553"; } - -.fa-t-shirt::before { - content: "\f553"; } - -.fa-tshirt::before { - content: "\f553"; } - -.fa-cubes::before { - content: "\f1b3"; } - -.fa-divide::before { - content: "\f529"; } - -.fa-tenge-sign::before { - content: "\f7d7"; } - -.fa-tenge::before { - content: "\f7d7"; } - -.fa-headphones::before { - content: "\f025"; } - -.fa-hands-holding::before { - content: "\f4c2"; } - -.fa-hands-clapping::before { - content: "\e1a8"; } - -.fa-republican::before { - content: "\f75e"; } - -.fa-arrow-left::before { - content: "\f060"; } - -.fa-person-circle-xmark::before { - content: "\e543"; } - -.fa-ruler::before { - content: "\f545"; } - -.fa-align-left::before { - content: "\f036"; } - -.fa-dice-d6::before { - content: "\f6d1"; } - -.fa-restroom::before { - content: "\f7bd"; } - -.fa-j::before { - content: "\4a"; } - -.fa-users-viewfinder::before { - content: "\e595"; } - -.fa-file-video::before { - content: "\f1c8"; } - -.fa-up-right-from-square::before { - content: "\f35d"; } - -.fa-external-link-alt::before { - content: "\f35d"; } - -.fa-table-cells::before { - content: "\f00a"; } - -.fa-th::before { - content: "\f00a"; } - -.fa-file-pdf::before { - content: "\f1c1"; } - -.fa-book-bible::before { - content: "\f647"; } - -.fa-bible::before { - content: "\f647"; } - -.fa-o::before { - content: "\4f"; } - -.fa-suitcase-medical::before { - content: "\f0fa"; } - -.fa-medkit::before { - content: "\f0fa"; } - -.fa-user-secret::before { - content: "\f21b"; } - -.fa-otter::before { - content: "\f700"; } - -.fa-person-dress::before { - content: "\f182"; } - -.fa-female::before { - content: "\f182"; } - -.fa-comment-dollar::before { - content: "\f651"; } - -.fa-business-time::before { - content: "\f64a"; } - -.fa-briefcase-clock::before { - content: "\f64a"; } - -.fa-table-cells-large::before { - content: "\f009"; } - -.fa-th-large::before { - content: "\f009"; } - -.fa-book-tanakh::before { - content: "\f827"; } - -.fa-tanakh::before { - content: "\f827"; } - -.fa-phone-volume::before { - content: "\f2a0"; } - -.fa-volume-control-phone::before { - content: "\f2a0"; } - -.fa-hat-cowboy-side::before { - content: "\f8c1"; } - -.fa-clipboard-user::before { - content: "\f7f3"; } - -.fa-child::before { - content: "\f1ae"; } - -.fa-lira-sign::before { - content: "\f195"; } - -.fa-satellite::before { - content: "\f7bf"; } - -.fa-plane-lock::before { - content: "\e558"; } - -.fa-tag::before { - content: "\f02b"; } - -.fa-comment::before { - content: "\f075"; } - -.fa-cake-candles::before { - content: "\f1fd"; } - -.fa-birthday-cake::before { - content: "\f1fd"; } - -.fa-cake::before { - content: "\f1fd"; } - -.fa-envelope::before { - content: "\f0e0"; } - -.fa-angles-up::before { - content: "\f102"; } - -.fa-angle-double-up::before { - content: "\f102"; } - -.fa-paperclip::before { - content: "\f0c6"; } - -.fa-arrow-right-to-city::before { - content: "\e4b3"; } - -.fa-ribbon::before { - content: "\f4d6"; } - -.fa-lungs::before { - content: "\f604"; } - -.fa-arrow-up-9-1::before { - content: "\f887"; } - -.fa-sort-numeric-up-alt::before { - content: "\f887"; } - -.fa-litecoin-sign::before { - content: "\e1d3"; } - -.fa-border-none::before { - content: "\f850"; } - -.fa-circle-nodes::before { - content: "\e4e2"; } - -.fa-parachute-box::before { - content: "\f4cd"; } - -.fa-indent::before { - content: "\f03c"; } - -.fa-truck-field-un::before { - content: "\e58e"; } - -.fa-hourglass::before { - content: "\f254"; } - -.fa-hourglass-empty::before { - content: "\f254"; } - -.fa-mountain::before { - content: "\f6fc"; } - -.fa-user-doctor::before { - content: "\f0f0"; } - -.fa-user-md::before { - content: "\f0f0"; } - -.fa-circle-info::before { - content: "\f05a"; } - -.fa-info-circle::before { - content: "\f05a"; } - -.fa-cloud-meatball::before { - content: "\f73b"; } - -.fa-camera::before { - content: "\f030"; } - -.fa-camera-alt::before { - content: "\f030"; } - -.fa-square-virus::before { - content: "\e578"; } - -.fa-meteor::before { - content: "\f753"; } - -.fa-car-on::before { - content: "\e4dd"; } - -.fa-sleigh::before { - content: "\f7cc"; } - -.fa-arrow-down-1-9::before { - content: "\f162"; } - -.fa-sort-numeric-asc::before { - content: "\f162"; } - -.fa-sort-numeric-down::before { - content: "\f162"; } - -.fa-hand-holding-droplet::before { - content: "\f4c1"; } - -.fa-hand-holding-water::before { - content: "\f4c1"; } - -.fa-water::before { - content: "\f773"; } - -.fa-calendar-check::before { - content: "\f274"; } - -.fa-braille::before { - content: "\f2a1"; } - -.fa-prescription-bottle-medical::before { - content: "\f486"; } - -.fa-prescription-bottle-alt::before { - content: "\f486"; } - -.fa-landmark::before { - content: "\f66f"; } - -.fa-truck::before { - content: "\f0d1"; } - -.fa-crosshairs::before { - content: "\f05b"; } - -.fa-person-cane::before { - content: "\e53c"; } - -.fa-tent::before { - content: "\e57d"; } - -.fa-vest-patches::before { - content: "\e086"; } - -.fa-check-double::before { - content: "\f560"; } - -.fa-arrow-down-a-z::before { - content: "\f15d"; } - -.fa-sort-alpha-asc::before { - content: "\f15d"; } - -.fa-sort-alpha-down::before { - content: "\f15d"; } - -.fa-money-bill-wheat::before { - content: "\e52a"; } - -.fa-cookie::before { - content: "\f563"; } - -.fa-arrow-rotate-left::before { - content: "\f0e2"; } - -.fa-arrow-left-rotate::before { - content: "\f0e2"; } - -.fa-arrow-rotate-back::before { - content: "\f0e2"; } - -.fa-arrow-rotate-backward::before { - content: "\f0e2"; } - -.fa-undo::before { - content: "\f0e2"; } - -.fa-hard-drive::before { - content: "\f0a0"; } - -.fa-hdd::before { - content: "\f0a0"; } - -.fa-face-grin-squint-tears::before { - content: "\f586"; } - -.fa-grin-squint-tears::before { - content: "\f586"; } - -.fa-dumbbell::before { - content: "\f44b"; } - -.fa-rectangle-list::before { - content: "\f022"; } - -.fa-list-alt::before { - content: "\f022"; } - -.fa-tarp-droplet::before { - content: "\e57c"; } - -.fa-house-medical-circle-check::before { - content: "\e511"; } - -.fa-person-skiing-nordic::before { - content: "\f7ca"; } - -.fa-skiing-nordic::before { - content: "\f7ca"; } - -.fa-calendar-plus::before { - content: "\f271"; } - -.fa-plane-arrival::before { - content: "\f5af"; } - -.fa-circle-left::before { - content: "\f359"; } - -.fa-arrow-alt-circle-left::before { - content: "\f359"; } - -.fa-train-subway::before { - content: "\f239"; } - -.fa-subway::before { - content: "\f239"; } - -.fa-chart-gantt::before { - content: "\e0e4"; } - -.fa-indian-rupee-sign::before { - content: "\e1bc"; } - -.fa-indian-rupee::before { - content: "\e1bc"; } - -.fa-inr::before { - content: "\e1bc"; } - -.fa-crop-simple::before { - content: "\f565"; } - -.fa-crop-alt::before { - content: "\f565"; } - -.fa-money-bill-1::before { - content: "\f3d1"; } - -.fa-money-bill-alt::before { - content: "\f3d1"; } - -.fa-left-long::before { - content: "\f30a"; } - -.fa-long-arrow-alt-left::before { - content: "\f30a"; } - -.fa-dna::before { - content: "\f471"; } - -.fa-virus-slash::before { - content: "\e075"; } - -.fa-minus::before { - content: "\f068"; } - -.fa-subtract::before { - content: "\f068"; } - -.fa-chess::before { - content: "\f439"; } - -.fa-arrow-left-long::before { - content: "\f177"; } - -.fa-long-arrow-left::before { - content: "\f177"; } - -.fa-plug-circle-check::before { - content: "\e55c"; } - -.fa-street-view::before { - content: "\f21d"; } - -.fa-franc-sign::before { - content: "\e18f"; } - -.fa-volume-off::before { - content: "\f026"; } - -.fa-hands-asl-interpreting::before { - content: "\f2a3"; } - -.fa-american-sign-language-interpreting::before { - content: "\f2a3"; } - -.fa-asl-interpreting::before { - content: "\f2a3"; } - -.fa-hands-american-sign-language-interpreting::before { - content: "\f2a3"; } - -.fa-gear::before { - content: "\f013"; } - -.fa-cog::before { - content: "\f013"; } - -.fa-droplet-slash::before { - content: "\f5c7"; } - -.fa-tint-slash::before { - content: "\f5c7"; } - -.fa-mosque::before { - content: "\f678"; } - -.fa-mosquito::before { - content: "\e52b"; } - -.fa-star-of-david::before { - content: "\f69a"; } - -.fa-person-military-rifle::before { - content: "\e54b"; } - -.fa-cart-shopping::before { - content: "\f07a"; } - -.fa-shopping-cart::before { - content: "\f07a"; } - -.fa-vials::before { - content: "\f493"; } - -.fa-plug-circle-plus::before { - content: "\e55f"; } - -.fa-place-of-worship::before { - content: "\f67f"; } - -.fa-grip-vertical::before { - content: "\f58e"; } - -.fa-arrow-turn-up::before { - content: "\f148"; } - -.fa-level-up::before { - content: "\f148"; } - -.fa-u::before { - content: "\55"; } - -.fa-square-root-variable::before { - content: "\f698"; } - -.fa-square-root-alt::before { - content: "\f698"; } - -.fa-clock::before { - content: "\f017"; } - -.fa-clock-four::before { - content: "\f017"; } - -.fa-backward-step::before { - content: "\f048"; } - -.fa-step-backward::before { - content: "\f048"; } - -.fa-pallet::before { - content: "\f482"; } - -.fa-faucet::before { - content: "\e005"; } - -.fa-baseball-bat-ball::before { - content: "\f432"; } - -.fa-s::before { - content: "\53"; } - -.fa-timeline::before { - content: "\e29c"; } - -.fa-keyboard::before { - content: "\f11c"; } - -.fa-caret-down::before { - content: "\f0d7"; } - -.fa-house-chimney-medical::before { - content: "\f7f2"; } - -.fa-clinic-medical::before { - content: "\f7f2"; } - -.fa-temperature-three-quarters::before { - content: "\f2c8"; } - -.fa-temperature-3::before { - content: "\f2c8"; } - -.fa-thermometer-3::before { - content: "\f2c8"; } - -.fa-thermometer-three-quarters::before { - content: "\f2c8"; } - -.fa-mobile-screen::before { - content: "\f3cf"; } - -.fa-mobile-android-alt::before { - content: "\f3cf"; } - -.fa-plane-up::before { - content: "\e22d"; } - -.fa-piggy-bank::before { - content: "\f4d3"; } - -.fa-battery-half::before { - content: "\f242"; } - -.fa-battery-3::before { - content: "\f242"; } - -.fa-mountain-city::before { - content: "\e52e"; } - -.fa-coins::before { - content: "\f51e"; } - -.fa-khanda::before { - content: "\f66d"; } - -.fa-sliders::before { - content: "\f1de"; } - -.fa-sliders-h::before { - content: "\f1de"; } - -.fa-folder-tree::before { - content: "\f802"; } - -.fa-network-wired::before { - content: "\f6ff"; } - -.fa-map-pin::before { - content: "\f276"; } - -.fa-hamsa::before { - content: "\f665"; } - -.fa-cent-sign::before { - content: "\e3f5"; } - -.fa-flask::before { - content: "\f0c3"; } - -.fa-person-pregnant::before { - content: "\e31e"; } - -.fa-wand-sparkles::before { - content: "\f72b"; } - -.fa-ellipsis-vertical::before { - content: "\f142"; } - -.fa-ellipsis-v::before { - content: "\f142"; } - -.fa-ticket::before { - content: "\f145"; } - -.fa-power-off::before { - content: "\f011"; } - -.fa-right-long::before { - content: "\f30b"; } - -.fa-long-arrow-alt-right::before { - content: "\f30b"; } - -.fa-flag-usa::before { - content: "\f74d"; } - -.fa-laptop-file::before { - content: "\e51d"; } - -.fa-tty::before { - content: "\f1e4"; } - -.fa-teletype::before { - content: "\f1e4"; } - -.fa-diagram-next::before { - content: "\e476"; } - -.fa-person-rifle::before { - content: "\e54e"; } - -.fa-house-medical-circle-exclamation::before { - content: "\e512"; } - -.fa-closed-captioning::before { - content: "\f20a"; } - -.fa-person-hiking::before { - content: "\f6ec"; } - -.fa-hiking::before { - content: "\f6ec"; } - -.fa-venus-double::before { - content: "\f226"; } - -.fa-images::before { - content: "\f302"; } - -.fa-calculator::before { - content: "\f1ec"; } - -.fa-people-pulling::before { - content: "\e535"; } - -.fa-n::before { - content: "\4e"; } - -.fa-cable-car::before { - content: "\f7da"; } - -.fa-tram::before { - content: "\f7da"; } - -.fa-cloud-rain::before { - content: "\f73d"; } - -.fa-building-circle-xmark::before { - content: "\e4d4"; } - -.fa-ship::before { - content: "\f21a"; } - -.fa-arrows-down-to-line::before { - content: "\e4b8"; } - -.fa-download::before { - content: "\f019"; } - -.fa-face-grin::before { - content: "\f580"; } - -.fa-grin::before { - content: "\f580"; } - -.fa-delete-left::before { - content: "\f55a"; } - -.fa-backspace::before { - content: "\f55a"; } - -.fa-eye-dropper::before { - content: "\f1fb"; } - -.fa-eye-dropper-empty::before { - content: "\f1fb"; } - -.fa-eyedropper::before { - content: "\f1fb"; } - -.fa-file-circle-check::before { - content: "\e5a0"; } - -.fa-forward::before { - content: "\f04e"; } - -.fa-mobile::before { - content: "\f3ce"; } - -.fa-mobile-android::before { - content: "\f3ce"; } - -.fa-mobile-phone::before { - content: "\f3ce"; } - -.fa-face-meh::before { - content: "\f11a"; } - -.fa-meh::before { - content: "\f11a"; } - -.fa-align-center::before { - content: "\f037"; } - -.fa-book-skull::before { - content: "\f6b7"; } - -.fa-book-dead::before { - content: "\f6b7"; } - -.fa-id-card::before { - content: "\f2c2"; } - -.fa-drivers-license::before { - content: "\f2c2"; } - -.fa-outdent::before { - content: "\f03b"; } - -.fa-dedent::before { - content: "\f03b"; } - -.fa-heart-circle-exclamation::before { - content: "\e4fe"; } - -.fa-house::before { - content: "\f015"; } - -.fa-home::before { - content: "\f015"; } - -.fa-home-alt::before { - content: "\f015"; } - -.fa-home-lg-alt::before { - content: "\f015"; } - -.fa-calendar-week::before { - content: "\f784"; } - -.fa-laptop-medical::before { - content: "\f812"; } - -.fa-b::before { - content: "\42"; } - -.fa-file-medical::before { - content: "\f477"; } - -.fa-dice-one::before { - content: "\f525"; } - -.fa-kiwi-bird::before { - content: "\f535"; } - -.fa-arrow-right-arrow-left::before { - content: "\f0ec"; } - -.fa-exchange::before { - content: "\f0ec"; } - -.fa-rotate-right::before { - content: "\f2f9"; } - -.fa-redo-alt::before { - content: "\f2f9"; } - -.fa-rotate-forward::before { - content: "\f2f9"; } - -.fa-utensils::before { - content: "\f2e7"; } - -.fa-cutlery::before { - content: "\f2e7"; } - -.fa-arrow-up-wide-short::before { - content: "\f161"; } - -.fa-sort-amount-up::before { - content: "\f161"; } - -.fa-mill-sign::before { - content: "\e1ed"; } - -.fa-bowl-rice::before { - content: "\e2eb"; } - -.fa-skull::before { - content: "\f54c"; } - -.fa-tower-broadcast::before { - content: "\f519"; } - -.fa-broadcast-tower::before { - content: "\f519"; } - -.fa-truck-pickup::before { - content: "\f63c"; } - -.fa-up-long::before { - content: "\f30c"; } - -.fa-long-arrow-alt-up::before { - content: "\f30c"; } - -.fa-stop::before { - content: "\f04d"; } - -.fa-code-merge::before { - content: "\f387"; } - -.fa-upload::before { - content: "\f093"; } - -.fa-hurricane::before { - content: "\f751"; } - -.fa-mound::before { - content: "\e52d"; } - -.fa-toilet-portable::before { - content: "\e583"; } - -.fa-compact-disc::before { - content: "\f51f"; } - -.fa-file-arrow-down::before { - content: "\f56d"; } - -.fa-file-download::before { - content: "\f56d"; } - -.fa-caravan::before { - content: "\f8ff"; } - -.fa-shield-cat::before { - content: "\e572"; } - -.fa-bolt::before { - content: "\f0e7"; } - -.fa-zap::before { - content: "\f0e7"; } - -.fa-glass-water::before { - content: "\e4f4"; } - -.fa-oil-well::before { - content: "\e532"; } - -.fa-vault::before { - content: "\e2c5"; } - -.fa-mars::before { - content: "\f222"; } - -.fa-toilet::before { - content: "\f7d8"; } - -.fa-plane-circle-xmark::before { - content: "\e557"; } - -.fa-yen-sign::before { - content: "\f157"; } - -.fa-cny::before { - content: "\f157"; } - -.fa-jpy::before { - content: "\f157"; } - -.fa-rmb::before { - content: "\f157"; } - -.fa-yen::before { - content: "\f157"; } - -.fa-ruble-sign::before { - content: "\f158"; } - -.fa-rouble::before { - content: "\f158"; } - -.fa-rub::before { - content: "\f158"; } - -.fa-ruble::before { - content: "\f158"; } - -.fa-sun::before { - content: "\f185"; } - -.fa-guitar::before { - content: "\f7a6"; } - -.fa-face-laugh-wink::before { - content: "\f59c"; } - -.fa-laugh-wink::before { - content: "\f59c"; } - -.fa-horse-head::before { - content: "\f7ab"; } - -.fa-bore-hole::before { - content: "\e4c3"; } - -.fa-industry::before { - content: "\f275"; } - -.fa-circle-down::before { - content: "\f358"; } - -.fa-arrow-alt-circle-down::before { - content: "\f358"; } - -.fa-arrows-turn-to-dots::before { - content: "\e4c1"; } - -.fa-florin-sign::before { - content: "\e184"; } - -.fa-arrow-down-short-wide::before { - content: "\f884"; } - -.fa-sort-amount-desc::before { - content: "\f884"; } - -.fa-sort-amount-down-alt::before { - content: "\f884"; } - -.fa-less-than::before { - content: "\3c"; } - -.fa-angle-down::before { - content: "\f107"; } - -.fa-car-tunnel::before { - content: "\e4de"; } - -.fa-head-side-cough::before { - content: "\e061"; } - -.fa-grip-lines::before { - content: "\f7a4"; } - -.fa-thumbs-down::before { - content: "\f165"; } - -.fa-user-lock::before { - content: "\f502"; } - -.fa-arrow-right-long::before { - content: "\f178"; } - -.fa-long-arrow-right::before { - content: "\f178"; } - -.fa-anchor-circle-xmark::before { - content: "\e4ac"; } - -.fa-ellipsis::before { - content: "\f141"; } - -.fa-ellipsis-h::before { - content: "\f141"; } - -.fa-chess-pawn::before { - content: "\f443"; } - -.fa-kit-medical::before { - content: "\f479"; } - -.fa-first-aid::before { - content: "\f479"; } - -.fa-person-through-window::before { - content: "\e5a9"; } - -.fa-toolbox::before { - content: "\f552"; } - -.fa-hands-holding-circle::before { - content: "\e4fb"; } - -.fa-bug::before { - content: "\f188"; } - -.fa-credit-card::before { - content: "\f09d"; } - -.fa-credit-card-alt::before { - content: "\f09d"; } - -.fa-car::before { - content: "\f1b9"; } - -.fa-automobile::before { - content: "\f1b9"; } - -.fa-hand-holding-hand::before { - content: "\e4f7"; } - -.fa-book-open-reader::before { - content: "\f5da"; } - -.fa-book-reader::before { - content: "\f5da"; } - -.fa-mountain-sun::before { - content: "\e52f"; } - -.fa-arrows-left-right-to-line::before { - content: "\e4ba"; } - -.fa-dice-d20::before { - content: "\f6cf"; } - -.fa-truck-droplet::before { - content: "\e58c"; } - -.fa-file-circle-xmark::before { - content: "\e5a1"; } - -.fa-temperature-arrow-up::before { - content: "\e040"; } - -.fa-temperature-up::before { - content: "\e040"; } - -.fa-medal::before { - content: "\f5a2"; } - -.fa-bed::before { - content: "\f236"; } - -.fa-square-h::before { - content: "\f0fd"; } - -.fa-h-square::before { - content: "\f0fd"; } - -.fa-podcast::before { - content: "\f2ce"; } - -.fa-temperature-full::before { - content: "\f2c7"; } - -.fa-temperature-4::before { - content: "\f2c7"; } - -.fa-thermometer-4::before { - content: "\f2c7"; } - -.fa-thermometer-full::before { - content: "\f2c7"; } - -.fa-bell::before { - content: "\f0f3"; } - -.fa-superscript::before { - content: "\f12b"; } - -.fa-plug-circle-xmark::before { - content: "\e560"; } - -.fa-star-of-life::before { - content: "\f621"; } - -.fa-phone-slash::before { - content: "\f3dd"; } - -.fa-paint-roller::before { - content: "\f5aa"; } - -.fa-handshake-angle::before { - content: "\f4c4"; } - -.fa-hands-helping::before { - content: "\f4c4"; } - -.fa-location-dot::before { - content: "\f3c5"; } - -.fa-map-marker-alt::before { - content: "\f3c5"; } - -.fa-file::before { - content: "\f15b"; } - -.fa-greater-than::before { - content: "\3e"; } - -.fa-person-swimming::before { - content: "\f5c4"; } - -.fa-swimmer::before { - content: "\f5c4"; } - -.fa-arrow-down::before { - content: "\f063"; } - -.fa-droplet::before { - content: "\f043"; } - -.fa-tint::before { - content: "\f043"; } - -.fa-eraser::before { - content: "\f12d"; } - -.fa-earth-americas::before { - content: "\f57d"; } - -.fa-earth::before { - content: "\f57d"; } - -.fa-earth-america::before { - content: "\f57d"; } - -.fa-globe-americas::before { - content: "\f57d"; } - -.fa-person-burst::before { - content: "\e53b"; } - -.fa-dove::before { - content: "\f4ba"; } - -.fa-battery-empty::before { - content: "\f244"; } - -.fa-battery-0::before { - content: "\f244"; } - -.fa-socks::before { - content: "\f696"; } - -.fa-inbox::before { - content: "\f01c"; } - -.fa-section::before { - content: "\e447"; } - -.fa-gauge-high::before { - content: "\f625"; } - -.fa-tachometer-alt::before { - content: "\f625"; } - -.fa-tachometer-alt-fast::before { - content: "\f625"; } - -.fa-envelope-open-text::before { - content: "\f658"; } - -.fa-hospital::before { - content: "\f0f8"; } - -.fa-hospital-alt::before { - content: "\f0f8"; } - -.fa-hospital-wide::before { - content: "\f0f8"; } - -.fa-wine-bottle::before { - content: "\f72f"; } - -.fa-chess-rook::before { - content: "\f447"; } - -.fa-bars-staggered::before { - content: "\f550"; } - -.fa-reorder::before { - content: "\f550"; } - -.fa-stream::before { - content: "\f550"; } - -.fa-dharmachakra::before { - content: "\f655"; } - -.fa-hotdog::before { - content: "\f80f"; } - -.fa-person-walking-with-cane::before { - content: "\f29d"; } - -.fa-blind::before { - content: "\f29d"; } - -.fa-drum::before { - content: "\f569"; } - -.fa-ice-cream::before { - content: "\f810"; } - -.fa-heart-circle-bolt::before { - content: "\e4fc"; } - -.fa-fax::before { - content: "\f1ac"; } - -.fa-paragraph::before { - content: "\f1dd"; } - -.fa-check-to-slot::before { - content: "\f772"; } - -.fa-vote-yea::before { - content: "\f772"; } - -.fa-star-half::before { - content: "\f089"; } - -.fa-boxes-stacked::before { - content: "\f468"; } - -.fa-boxes::before { - content: "\f468"; } - -.fa-boxes-alt::before { - content: "\f468"; } - -.fa-link::before { - content: "\f0c1"; } - -.fa-chain::before { - content: "\f0c1"; } - -.fa-ear-listen::before { - content: "\f2a2"; } - -.fa-assistive-listening-systems::before { - content: "\f2a2"; } - -.fa-tree-city::before { - content: "\e587"; } - -.fa-play::before { - content: "\f04b"; } - -.fa-font::before { - content: "\f031"; } - -.fa-table-cells-row-lock::before { - content: "\e67a"; } - -.fa-rupiah-sign::before { - content: "\e23d"; } - -.fa-magnifying-glass::before { - content: "\f002"; } - -.fa-search::before { - content: "\f002"; } - -.fa-table-tennis-paddle-ball::before { - content: "\f45d"; } - -.fa-ping-pong-paddle-ball::before { - content: "\f45d"; } - -.fa-table-tennis::before { - content: "\f45d"; } - -.fa-person-dots-from-line::before { - content: "\f470"; } - -.fa-diagnoses::before { - content: "\f470"; } - -.fa-trash-can-arrow-up::before { - content: "\f82a"; } - -.fa-trash-restore-alt::before { - content: "\f82a"; } - -.fa-naira-sign::before { - content: "\e1f6"; } - -.fa-cart-arrow-down::before { - content: "\f218"; } - -.fa-walkie-talkie::before { - content: "\f8ef"; } - -.fa-file-pen::before { - content: "\f31c"; } - -.fa-file-edit::before { - content: "\f31c"; } - -.fa-receipt::before { - content: "\f543"; } - -.fa-square-pen::before { - content: "\f14b"; } - -.fa-pen-square::before { - content: "\f14b"; } - -.fa-pencil-square::before { - content: "\f14b"; } - -.fa-suitcase-rolling::before { - content: "\f5c1"; } - -.fa-person-circle-exclamation::before { - content: "\e53f"; } - -.fa-chevron-down::before { - content: "\f078"; } - -.fa-battery-full::before { - content: "\f240"; } - -.fa-battery::before { - content: "\f240"; } - -.fa-battery-5::before { - content: "\f240"; } - -.fa-skull-crossbones::before { - content: "\f714"; } - -.fa-code-compare::before { - content: "\e13a"; } - -.fa-list-ul::before { - content: "\f0ca"; } - -.fa-list-dots::before { - content: "\f0ca"; } - -.fa-school-lock::before { - content: "\e56f"; } - -.fa-tower-cell::before { - content: "\e585"; } - -.fa-down-long::before { - content: "\f309"; } - -.fa-long-arrow-alt-down::before { - content: "\f309"; } - -.fa-ranking-star::before { - content: "\e561"; } - -.fa-chess-king::before { - content: "\f43f"; } - -.fa-person-harassing::before { - content: "\e549"; } - -.fa-brazilian-real-sign::before { - content: "\e46c"; } - -.fa-landmark-dome::before { - content: "\f752"; } - -.fa-landmark-alt::before { - content: "\f752"; } - -.fa-arrow-up::before { - content: "\f062"; } - -.fa-tv::before { - content: "\f26c"; } - -.fa-television::before { - content: "\f26c"; } - -.fa-tv-alt::before { - content: "\f26c"; } - -.fa-shrimp::before { - content: "\e448"; } - -.fa-list-check::before { - content: "\f0ae"; } - -.fa-tasks::before { - content: "\f0ae"; } - -.fa-jug-detergent::before { - content: "\e519"; } - -.fa-circle-user::before { - content: "\f2bd"; } - -.fa-user-circle::before { - content: "\f2bd"; } - -.fa-user-shield::before { - content: "\f505"; } - -.fa-wind::before { - content: "\f72e"; } - -.fa-car-burst::before { - content: "\f5e1"; } - -.fa-car-crash::before { - content: "\f5e1"; } - -.fa-y::before { - content: "\59"; } - -.fa-person-snowboarding::before { - content: "\f7ce"; } - -.fa-snowboarding::before { - content: "\f7ce"; } - -.fa-truck-fast::before { - content: "\f48b"; } - -.fa-shipping-fast::before { - content: "\f48b"; } - -.fa-fish::before { - content: "\f578"; } - -.fa-user-graduate::before { - content: "\f501"; } - -.fa-circle-half-stroke::before { - content: "\f042"; } - -.fa-adjust::before { - content: "\f042"; } - -.fa-clapperboard::before { - content: "\e131"; } - -.fa-circle-radiation::before { - content: "\f7ba"; } - -.fa-radiation-alt::before { - content: "\f7ba"; } - -.fa-baseball::before { - content: "\f433"; } - -.fa-baseball-ball::before { - content: "\f433"; } - -.fa-jet-fighter-up::before { - content: "\e518"; } - -.fa-diagram-project::before { - content: "\f542"; } - -.fa-project-diagram::before { - content: "\f542"; } - -.fa-copy::before { - content: "\f0c5"; } - -.fa-volume-xmark::before { - content: "\f6a9"; } - -.fa-volume-mute::before { - content: "\f6a9"; } - -.fa-volume-times::before { - content: "\f6a9"; } - -.fa-hand-sparkles::before { - content: "\e05d"; } - -.fa-grip::before { - content: "\f58d"; } - -.fa-grip-horizontal::before { - content: "\f58d"; } - -.fa-share-from-square::before { - content: "\f14d"; } - -.fa-share-square::before { - content: "\f14d"; } - -.fa-child-combatant::before { - content: "\e4e0"; } - -.fa-child-rifle::before { - content: "\e4e0"; } - -.fa-gun::before { - content: "\e19b"; } - -.fa-square-phone::before { - content: "\f098"; } - -.fa-phone-square::before { - content: "\f098"; } - -.fa-plus::before { - content: "\2b"; } - -.fa-add::before { - content: "\2b"; } - -.fa-expand::before { - content: "\f065"; } - -.fa-computer::before { - content: "\e4e5"; } - -.fa-xmark::before { - content: "\f00d"; } - -.fa-close::before { - content: "\f00d"; } - -.fa-multiply::before { - content: "\f00d"; } - -.fa-remove::before { - content: "\f00d"; } - -.fa-times::before { - content: "\f00d"; } - -.fa-arrows-up-down-left-right::before { - content: "\f047"; } - -.fa-arrows::before { - content: "\f047"; } - -.fa-chalkboard-user::before { - content: "\f51c"; } - -.fa-chalkboard-teacher::before { - content: "\f51c"; } - -.fa-peso-sign::before { - content: "\e222"; } - -.fa-building-shield::before { - content: "\e4d8"; } - -.fa-baby::before { - content: "\f77c"; } - -.fa-users-line::before { - content: "\e592"; } - -.fa-quote-left::before { - content: "\f10d"; } - -.fa-quote-left-alt::before { - content: "\f10d"; } - -.fa-tractor::before { - content: "\f722"; } - -.fa-trash-arrow-up::before { - content: "\f829"; } - -.fa-trash-restore::before { - content: "\f829"; } - -.fa-arrow-down-up-lock::before { - content: "\e4b0"; } - -.fa-lines-leaning::before { - content: "\e51e"; } - -.fa-ruler-combined::before { - content: "\f546"; } - -.fa-copyright::before { - content: "\f1f9"; } - -.fa-equals::before { - content: "\3d"; } - -.fa-blender::before { - content: "\f517"; } - -.fa-teeth::before { - content: "\f62e"; } - -.fa-shekel-sign::before { - content: "\f20b"; } - -.fa-ils::before { - content: "\f20b"; } - -.fa-shekel::before { - content: "\f20b"; } - -.fa-sheqel::before { - content: "\f20b"; } - -.fa-sheqel-sign::before { - content: "\f20b"; } - -.fa-map::before { - content: "\f279"; } - -.fa-rocket::before { - content: "\f135"; } - -.fa-photo-film::before { - content: "\f87c"; } - -.fa-photo-video::before { - content: "\f87c"; } - -.fa-folder-minus::before { - content: "\f65d"; } - -.fa-store::before { - content: "\f54e"; } - -.fa-arrow-trend-up::before { - content: "\e098"; } - -.fa-plug-circle-minus::before { - content: "\e55e"; } - -.fa-sign-hanging::before { - content: "\f4d9"; } - -.fa-sign::before { - content: "\f4d9"; } - -.fa-bezier-curve::before { - content: "\f55b"; } - -.fa-bell-slash::before { - content: "\f1f6"; } - -.fa-tablet::before { - content: "\f3fb"; } - -.fa-tablet-android::before { - content: "\f3fb"; } - -.fa-school-flag::before { - content: "\e56e"; } - -.fa-fill::before { - content: "\f575"; } - -.fa-angle-up::before { - content: "\f106"; } - -.fa-drumstick-bite::before { - content: "\f6d7"; } - -.fa-holly-berry::before { - content: "\f7aa"; } - -.fa-chevron-left::before { - content: "\f053"; } - -.fa-bacteria::before { - content: "\e059"; } - -.fa-hand-lizard::before { - content: "\f258"; } - -.fa-notdef::before { - content: "\e1fe"; } - -.fa-disease::before { - content: "\f7fa"; } - -.fa-briefcase-medical::before { - content: "\f469"; } - -.fa-genderless::before { - content: "\f22d"; } - -.fa-chevron-right::before { - content: "\f054"; } - -.fa-retweet::before { - content: "\f079"; } - -.fa-car-rear::before { - content: "\f5de"; } - -.fa-car-alt::before { - content: "\f5de"; } - -.fa-pump-soap::before { - content: "\e06b"; } - -.fa-video-slash::before { - content: "\f4e2"; } - -.fa-battery-quarter::before { - content: "\f243"; } - -.fa-battery-2::before { - content: "\f243"; } - -.fa-radio::before { - content: "\f8d7"; } - -.fa-baby-carriage::before { - content: "\f77d"; } - -.fa-carriage-baby::before { - content: "\f77d"; } - -.fa-traffic-light::before { - content: "\f637"; } - -.fa-thermometer::before { - content: "\f491"; } - -.fa-vr-cardboard::before { - content: "\f729"; } - -.fa-hand-middle-finger::before { - content: "\f806"; } - -.fa-percent::before { - content: "\25"; } - -.fa-percentage::before { - content: "\25"; } - -.fa-truck-moving::before { - content: "\f4df"; } - -.fa-glass-water-droplet::before { - content: "\e4f5"; } - -.fa-display::before { - content: "\e163"; } - -.fa-face-smile::before { - content: "\f118"; } - -.fa-smile::before { - content: "\f118"; } - -.fa-thumbtack::before { - content: "\f08d"; } - -.fa-thumb-tack::before { - content: "\f08d"; } - -.fa-trophy::before { - content: "\f091"; } - -.fa-person-praying::before { - content: "\f683"; } - -.fa-pray::before { - content: "\f683"; } - -.fa-hammer::before { - content: "\f6e3"; } - -.fa-hand-peace::before { - content: "\f25b"; } - -.fa-rotate::before { - content: "\f2f1"; } - -.fa-sync-alt::before { - content: "\f2f1"; } - -.fa-spinner::before { - content: "\f110"; } - -.fa-robot::before { - content: "\f544"; } - -.fa-peace::before { - content: "\f67c"; } - -.fa-gears::before { - content: "\f085"; } - -.fa-cogs::before { - content: "\f085"; } - -.fa-warehouse::before { - content: "\f494"; } - -.fa-arrow-up-right-dots::before { - content: "\e4b7"; } - -.fa-splotch::before { - content: "\f5bc"; } - -.fa-face-grin-hearts::before { - content: "\f584"; } - -.fa-grin-hearts::before { - content: "\f584"; } - -.fa-dice-four::before { - content: "\f524"; } - -.fa-sim-card::before { - content: "\f7c4"; } - -.fa-transgender::before { - content: "\f225"; } - -.fa-transgender-alt::before { - content: "\f225"; } - -.fa-mercury::before { - content: "\f223"; } - -.fa-arrow-turn-down::before { - content: "\f149"; } - -.fa-level-down::before { - content: "\f149"; } - -.fa-person-falling-burst::before { - content: "\e547"; } - -.fa-award::before { - content: "\f559"; } - -.fa-ticket-simple::before { - content: "\f3ff"; } - -.fa-ticket-alt::before { - content: "\f3ff"; } - -.fa-building::before { - content: "\f1ad"; } - -.fa-angles-left::before { - content: "\f100"; } - -.fa-angle-double-left::before { - content: "\f100"; } - -.fa-qrcode::before { - content: "\f029"; } - -.fa-clock-rotate-left::before { - content: "\f1da"; } - -.fa-history::before { - content: "\f1da"; } - -.fa-face-grin-beam-sweat::before { - content: "\f583"; } - -.fa-grin-beam-sweat::before { - content: "\f583"; } - -.fa-file-export::before { - content: "\f56e"; } - -.fa-arrow-right-from-file::before { - content: "\f56e"; } - -.fa-shield::before { - content: "\f132"; } - -.fa-shield-blank::before { - content: "\f132"; } - -.fa-arrow-up-short-wide::before { - content: "\f885"; } - -.fa-sort-amount-up-alt::before { - content: "\f885"; } - -.fa-house-medical::before { - content: "\e3b2"; } - -.fa-golf-ball-tee::before { - content: "\f450"; } - -.fa-golf-ball::before { - content: "\f450"; } - -.fa-circle-chevron-left::before { - content: "\f137"; } - -.fa-chevron-circle-left::before { - content: "\f137"; } - -.fa-house-chimney-window::before { - content: "\e00d"; } - -.fa-pen-nib::before { - content: "\f5ad"; } - -.fa-tent-arrow-turn-left::before { - content: "\e580"; } - -.fa-tents::before { - content: "\e582"; } - -.fa-wand-magic::before { - content: "\f0d0"; } - -.fa-magic::before { - content: "\f0d0"; } - -.fa-dog::before { - content: "\f6d3"; } - -.fa-carrot::before { - content: "\f787"; } - -.fa-moon::before { - content: "\f186"; } - -.fa-wine-glass-empty::before { - content: "\f5ce"; } - -.fa-wine-glass-alt::before { - content: "\f5ce"; } - -.fa-cheese::before { - content: "\f7ef"; } - -.fa-yin-yang::before { - content: "\f6ad"; } - -.fa-music::before { - content: "\f001"; } - -.fa-code-commit::before { - content: "\f386"; } - -.fa-temperature-low::before { - content: "\f76b"; } - -.fa-person-biking::before { - content: "\f84a"; } - -.fa-biking::before { - content: "\f84a"; } - -.fa-broom::before { - content: "\f51a"; } - -.fa-shield-heart::before { - content: "\e574"; } - -.fa-gopuram::before { - content: "\f664"; } - -.fa-earth-oceania::before { - content: "\e47b"; } - -.fa-globe-oceania::before { - content: "\e47b"; } - -.fa-square-xmark::before { - content: "\f2d3"; } - -.fa-times-square::before { - content: "\f2d3"; } - -.fa-xmark-square::before { - content: "\f2d3"; } - -.fa-hashtag::before { - content: "\23"; } - -.fa-up-right-and-down-left-from-center::before { - content: "\f424"; } - -.fa-expand-alt::before { - content: "\f424"; } - -.fa-oil-can::before { - content: "\f613"; } - -.fa-t::before { - content: "\54"; } - -.fa-hippo::before { - content: "\f6ed"; } - -.fa-chart-column::before { - content: "\e0e3"; } - -.fa-infinity::before { - content: "\f534"; } - -.fa-vial-circle-check::before { - content: "\e596"; } - -.fa-person-arrow-down-to-line::before { - content: "\e538"; } - -.fa-voicemail::before { - content: "\f897"; } - -.fa-fan::before { - content: "\f863"; } - -.fa-person-walking-luggage::before { - content: "\e554"; } - -.fa-up-down::before { - content: "\f338"; } - -.fa-arrows-alt-v::before { - content: "\f338"; } - -.fa-cloud-moon-rain::before { - content: "\f73c"; } - -.fa-calendar::before { - content: "\f133"; } - -.fa-trailer::before { - content: "\e041"; } - -.fa-bahai::before { - content: "\f666"; } - -.fa-haykal::before { - content: "\f666"; } - -.fa-sd-card::before { - content: "\f7c2"; } - -.fa-dragon::before { - content: "\f6d5"; } - -.fa-shoe-prints::before { - content: "\f54b"; } - -.fa-circle-plus::before { - content: "\f055"; } - -.fa-plus-circle::before { - content: "\f055"; } - -.fa-face-grin-tongue-wink::before { - content: "\f58b"; } - -.fa-grin-tongue-wink::before { - content: "\f58b"; } - -.fa-hand-holding::before { - content: "\f4bd"; } - -.fa-plug-circle-exclamation::before { - content: "\e55d"; } - -.fa-link-slash::before { - content: "\f127"; } - -.fa-chain-broken::before { - content: "\f127"; } - -.fa-chain-slash::before { - content: "\f127"; } - -.fa-unlink::before { - content: "\f127"; } - -.fa-clone::before { - content: "\f24d"; } - -.fa-person-walking-arrow-loop-left::before { - content: "\e551"; } - -.fa-arrow-up-z-a::before { - content: "\f882"; } - -.fa-sort-alpha-up-alt::before { - content: "\f882"; } - -.fa-fire-flame-curved::before { - content: "\f7e4"; } - -.fa-fire-alt::before { - content: "\f7e4"; } - -.fa-tornado::before { - content: "\f76f"; } - -.fa-file-circle-plus::before { - content: "\e494"; } - -.fa-book-quran::before { - content: "\f687"; } - -.fa-quran::before { - content: "\f687"; } - -.fa-anchor::before { - content: "\f13d"; } - -.fa-border-all::before { - content: "\f84c"; } - -.fa-face-angry::before { - content: "\f556"; } - -.fa-angry::before { - content: "\f556"; } - -.fa-cookie-bite::before { - content: "\f564"; } - -.fa-arrow-trend-down::before { - content: "\e097"; } - -.fa-rss::before { - content: "\f09e"; } - -.fa-feed::before { - content: "\f09e"; } - -.fa-draw-polygon::before { - content: "\f5ee"; } - -.fa-scale-balanced::before { - content: "\f24e"; } - -.fa-balance-scale::before { - content: "\f24e"; } - -.fa-gauge-simple-high::before { - content: "\f62a"; } - -.fa-tachometer::before { - content: "\f62a"; } - -.fa-tachometer-fast::before { - content: "\f62a"; } - -.fa-shower::before { - content: "\f2cc"; } - -.fa-desktop::before { - content: "\f390"; } - -.fa-desktop-alt::before { - content: "\f390"; } - -.fa-m::before { - content: "\4d"; } - -.fa-table-list::before { - content: "\f00b"; } - -.fa-th-list::before { - content: "\f00b"; } - -.fa-comment-sms::before { - content: "\f7cd"; } - -.fa-sms::before { - content: "\f7cd"; } - -.fa-book::before { - content: "\f02d"; } - -.fa-user-plus::before { - content: "\f234"; } - -.fa-check::before { - content: "\f00c"; } - -.fa-battery-three-quarters::before { - content: "\f241"; } - -.fa-battery-4::before { - content: "\f241"; } - -.fa-house-circle-check::before { - content: "\e509"; } - -.fa-angle-left::before { - content: "\f104"; } - -.fa-diagram-successor::before { - content: "\e47a"; } - -.fa-truck-arrow-right::before { - content: "\e58b"; } - -.fa-arrows-split-up-and-left::before { - content: "\e4bc"; } - -.fa-hand-fist::before { - content: "\f6de"; } - -.fa-fist-raised::before { - content: "\f6de"; } - -.fa-cloud-moon::before { - content: "\f6c3"; } - -.fa-briefcase::before { - content: "\f0b1"; } - -.fa-person-falling::before { - content: "\e546"; } - -.fa-image-portrait::before { - content: "\f3e0"; } - -.fa-portrait::before { - content: "\f3e0"; } - -.fa-user-tag::before { - content: "\f507"; } - -.fa-rug::before { - content: "\e569"; } - -.fa-earth-europe::before { - content: "\f7a2"; } - -.fa-globe-europe::before { - content: "\f7a2"; } - -.fa-cart-flatbed-suitcase::before { - content: "\f59d"; } - -.fa-luggage-cart::before { - content: "\f59d"; } - -.fa-rectangle-xmark::before { - content: "\f410"; } - -.fa-rectangle-times::before { - content: "\f410"; } - -.fa-times-rectangle::before { - content: "\f410"; } - -.fa-window-close::before { - content: "\f410"; } - -.fa-baht-sign::before { - content: "\e0ac"; } - -.fa-book-open::before { - content: "\f518"; } - -.fa-book-journal-whills::before { - content: "\f66a"; } - -.fa-journal-whills::before { - content: "\f66a"; } - -.fa-handcuffs::before { - content: "\e4f8"; } - -.fa-triangle-exclamation::before { - content: "\f071"; } - -.fa-exclamation-triangle::before { - content: "\f071"; } - -.fa-warning::before { - content: "\f071"; } - -.fa-database::before { - content: "\f1c0"; } - -.fa-share::before { - content: "\f064"; } - -.fa-mail-forward::before { - content: "\f064"; } - -.fa-bottle-droplet::before { - content: "\e4c4"; } - -.fa-mask-face::before { - content: "\e1d7"; } - -.fa-hill-rockslide::before { - content: "\e508"; } - -.fa-right-left::before { - content: "\f362"; } - -.fa-exchange-alt::before { - content: "\f362"; } - -.fa-paper-plane::before { - content: "\f1d8"; } - -.fa-road-circle-exclamation::before { - content: "\e565"; } - -.fa-dungeon::before { - content: "\f6d9"; } - -.fa-align-right::before { - content: "\f038"; } - -.fa-money-bill-1-wave::before { - content: "\f53b"; } - -.fa-money-bill-wave-alt::before { - content: "\f53b"; } - -.fa-life-ring::before { - content: "\f1cd"; } - -.fa-hands::before { - content: "\f2a7"; } - -.fa-sign-language::before { - content: "\f2a7"; } - -.fa-signing::before { - content: "\f2a7"; } - -.fa-calendar-day::before { - content: "\f783"; } - -.fa-water-ladder::before { - content: "\f5c5"; } - -.fa-ladder-water::before { - content: "\f5c5"; } - -.fa-swimming-pool::before { - content: "\f5c5"; } - -.fa-arrows-up-down::before { - content: "\f07d"; } - -.fa-arrows-v::before { - content: "\f07d"; } - -.fa-face-grimace::before { - content: "\f57f"; } - -.fa-grimace::before { - content: "\f57f"; } - -.fa-wheelchair-move::before { - content: "\e2ce"; } - -.fa-wheelchair-alt::before { - content: "\e2ce"; } - -.fa-turn-down::before { - content: "\f3be"; } - -.fa-level-down-alt::before { - content: "\f3be"; } - -.fa-person-walking-arrow-right::before { - content: "\e552"; } - -.fa-square-envelope::before { - content: "\f199"; } - -.fa-envelope-square::before { - content: "\f199"; } - -.fa-dice::before { - content: "\f522"; } - -.fa-bowling-ball::before { - content: "\f436"; } - -.fa-brain::before { - content: "\f5dc"; } - -.fa-bandage::before { - content: "\f462"; } - -.fa-band-aid::before { - content: "\f462"; } - -.fa-calendar-minus::before { - content: "\f272"; } - -.fa-circle-xmark::before { - content: "\f057"; } - -.fa-times-circle::before { - content: "\f057"; } - -.fa-xmark-circle::before { - content: "\f057"; } - -.fa-gifts::before { - content: "\f79c"; } - -.fa-hotel::before { - content: "\f594"; } - -.fa-earth-asia::before { - content: "\f57e"; } - -.fa-globe-asia::before { - content: "\f57e"; } - -.fa-id-card-clip::before { - content: "\f47f"; } - -.fa-id-card-alt::before { - content: "\f47f"; } - -.fa-magnifying-glass-plus::before { - content: "\f00e"; } - -.fa-search-plus::before { - content: "\f00e"; } - -.fa-thumbs-up::before { - content: "\f164"; } - -.fa-user-clock::before { - content: "\f4fd"; } - -.fa-hand-dots::before { - content: "\f461"; } - -.fa-allergies::before { - content: "\f461"; } - -.fa-file-invoice::before { - content: "\f570"; } - -.fa-window-minimize::before { - content: "\f2d1"; } - -.fa-mug-saucer::before { - content: "\f0f4"; } - -.fa-coffee::before { - content: "\f0f4"; } - -.fa-brush::before { - content: "\f55d"; } - -.fa-mask::before { - content: "\f6fa"; } - -.fa-magnifying-glass-minus::before { - content: "\f010"; } - -.fa-search-minus::before { - content: "\f010"; } - -.fa-ruler-vertical::before { - content: "\f548"; } - -.fa-user-large::before { - content: "\f406"; } - -.fa-user-alt::before { - content: "\f406"; } - -.fa-train-tram::before { - content: "\e5b4"; } - -.fa-user-nurse::before { - content: "\f82f"; } - -.fa-syringe::before { - content: "\f48e"; } - -.fa-cloud-sun::before { - content: "\f6c4"; } - -.fa-stopwatch-20::before { - content: "\e06f"; } - -.fa-square-full::before { - content: "\f45c"; } - -.fa-magnet::before { - content: "\f076"; } - -.fa-jar::before { - content: "\e516"; } - -.fa-note-sticky::before { - content: "\f249"; } - -.fa-sticky-note::before { - content: "\f249"; } - -.fa-bug-slash::before { - content: "\e490"; } - -.fa-arrow-up-from-water-pump::before { - content: "\e4b6"; } - -.fa-bone::before { - content: "\f5d7"; } - -.fa-user-injured::before { - content: "\f728"; } - -.fa-face-sad-tear::before { - content: "\f5b4"; } - -.fa-sad-tear::before { - content: "\f5b4"; } - -.fa-plane::before { - content: "\f072"; } - -.fa-tent-arrows-down::before { - content: "\e581"; } - -.fa-exclamation::before { - content: "\21"; } - -.fa-arrows-spin::before { - content: "\e4bb"; } - -.fa-print::before { - content: "\f02f"; } - -.fa-turkish-lira-sign::before { - content: "\e2bb"; } - -.fa-try::before { - content: "\e2bb"; } - -.fa-turkish-lira::before { - content: "\e2bb"; } - -.fa-dollar-sign::before { - content: "\24"; } - -.fa-dollar::before { - content: "\24"; } - -.fa-usd::before { - content: "\24"; } - -.fa-x::before { - content: "\58"; } - -.fa-magnifying-glass-dollar::before { - content: "\f688"; } - -.fa-search-dollar::before { - content: "\f688"; } - -.fa-users-gear::before { - content: "\f509"; } - -.fa-users-cog::before { - content: "\f509"; } - -.fa-person-military-pointing::before { - content: "\e54a"; } - -.fa-building-columns::before { - content: "\f19c"; } - -.fa-bank::before { - content: "\f19c"; } - -.fa-institution::before { - content: "\f19c"; } - -.fa-museum::before { - content: "\f19c"; } - -.fa-university::before { - content: "\f19c"; } - -.fa-umbrella::before { - content: "\f0e9"; } - -.fa-trowel::before { - content: "\e589"; } - -.fa-d::before { - content: "\44"; } - -.fa-stapler::before { - content: "\e5af"; } - -.fa-masks-theater::before { - content: "\f630"; } - -.fa-theater-masks::before { - content: "\f630"; } - -.fa-kip-sign::before { - content: "\e1c4"; } - -.fa-hand-point-left::before { - content: "\f0a5"; } - -.fa-handshake-simple::before { - content: "\f4c6"; } - -.fa-handshake-alt::before { - content: "\f4c6"; } - -.fa-jet-fighter::before { - content: "\f0fb"; } - -.fa-fighter-jet::before { - content: "\f0fb"; } - -.fa-square-share-nodes::before { - content: "\f1e1"; } - -.fa-share-alt-square::before { - content: "\f1e1"; } - -.fa-barcode::before { - content: "\f02a"; } - -.fa-plus-minus::before { - content: "\e43c"; } - -.fa-video::before { - content: "\f03d"; } - -.fa-video-camera::before { - content: "\f03d"; } - -.fa-graduation-cap::before { - content: "\f19d"; } - -.fa-mortar-board::before { - content: "\f19d"; } - -.fa-hand-holding-medical::before { - content: "\e05c"; } - -.fa-person-circle-check::before { - content: "\e53e"; } - -.fa-turn-up::before { - content: "\f3bf"; } - -.fa-level-up-alt::before { - content: "\f3bf"; } - -.sr-only, -.fa-sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } - -.sr-only-focusable:not(:focus), -.fa-sr-only-focusable:not(:focus) { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } -:root, :host { - --fa-style-family-brands: 'Font Awesome 6 Brands'; - --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } - -@font-face { - font-family: 'Font Awesome 6 Brands'; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -.fab, -.fa-brands { - font-weight: 400; } - -.fa-monero:before { - content: "\f3d0"; } - -.fa-hooli:before { - content: "\f427"; } - -.fa-yelp:before { - content: "\f1e9"; } - -.fa-cc-visa:before { - content: "\f1f0"; } - -.fa-lastfm:before { - content: "\f202"; } - -.fa-shopware:before { - content: "\f5b5"; } - -.fa-creative-commons-nc:before { - content: "\f4e8"; } - -.fa-aws:before { - content: "\f375"; } - -.fa-redhat:before { - content: "\f7bc"; } - -.fa-yoast:before { - content: "\f2b1"; } - -.fa-cloudflare:before { - content: "\e07d"; } - -.fa-ups:before { - content: "\f7e0"; } - -.fa-pixiv:before { - content: "\e640"; } - -.fa-wpexplorer:before { - content: "\f2de"; } - -.fa-dyalog:before { - content: "\f399"; } - -.fa-bity:before { - content: "\f37a"; } - -.fa-stackpath:before { - content: "\f842"; } - -.fa-buysellads:before { - content: "\f20d"; } - -.fa-first-order:before { - content: "\f2b0"; } - -.fa-modx:before { - content: "\f285"; } - -.fa-guilded:before { - content: "\e07e"; } - -.fa-vnv:before { - content: "\f40b"; } - -.fa-square-js:before { - content: "\f3b9"; } - -.fa-js-square:before { - content: "\f3b9"; } - -.fa-microsoft:before { - content: "\f3ca"; } - -.fa-qq:before { - content: "\f1d6"; } - -.fa-orcid:before { - content: "\f8d2"; } - -.fa-java:before { - content: "\f4e4"; } - -.fa-invision:before { - content: "\f7b0"; } - -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; } - -.fa-centercode:before { - content: "\f380"; } - -.fa-glide-g:before { - content: "\f2a6"; } - -.fa-drupal:before { - content: "\f1a9"; } - -.fa-jxl:before { - content: "\e67b"; } - -.fa-hire-a-helper:before { - content: "\f3b0"; } - -.fa-creative-commons-by:before { - content: "\f4e7"; } - -.fa-unity:before { - content: "\e049"; } - -.fa-whmcs:before { - content: "\f40d"; } - -.fa-rocketchat:before { - content: "\f3e8"; } - -.fa-vk:before { - content: "\f189"; } - -.fa-untappd:before { - content: "\f405"; } - -.fa-mailchimp:before { - content: "\f59e"; } - -.fa-css3-alt:before { - content: "\f38b"; } - -.fa-square-reddit:before { - content: "\f1a2"; } - -.fa-reddit-square:before { - content: "\f1a2"; } - -.fa-vimeo-v:before { - content: "\f27d"; } - -.fa-contao:before { - content: "\f26d"; } - -.fa-square-font-awesome:before { - content: "\e5ad"; } - -.fa-deskpro:before { - content: "\f38f"; } - -.fa-brave:before { - content: "\e63c"; } - -.fa-sistrix:before { - content: "\f3ee"; } - -.fa-square-instagram:before { - content: "\e055"; } - -.fa-instagram-square:before { - content: "\e055"; } - -.fa-battle-net:before { - content: "\f835"; } - -.fa-the-red-yeti:before { - content: "\f69d"; } - -.fa-square-hacker-news:before { - content: "\f3af"; } - -.fa-hacker-news-square:before { - content: "\f3af"; } - -.fa-edge:before { - content: "\f282"; } - -.fa-threads:before { - content: "\e618"; } - -.fa-napster:before { - content: "\f3d2"; } - -.fa-square-snapchat:before { - content: "\f2ad"; } - -.fa-snapchat-square:before { - content: "\f2ad"; } - -.fa-google-plus-g:before { - content: "\f0d5"; } - -.fa-artstation:before { - content: "\f77a"; } - -.fa-markdown:before { - content: "\f60f"; } - -.fa-sourcetree:before { - content: "\f7d3"; } - -.fa-google-plus:before { - content: "\f2b3"; } - -.fa-diaspora:before { - content: "\f791"; } - -.fa-foursquare:before { - content: "\f180"; } - -.fa-stack-overflow:before { - content: "\f16c"; } - -.fa-github-alt:before { - content: "\f113"; } - -.fa-phoenix-squadron:before { - content: "\f511"; } - -.fa-pagelines:before { - content: "\f18c"; } - -.fa-algolia:before { - content: "\f36c"; } - -.fa-red-river:before { - content: "\f3e3"; } - -.fa-creative-commons-sa:before { - content: "\f4ef"; } - -.fa-safari:before { - content: "\f267"; } - -.fa-google:before { - content: "\f1a0"; } - -.fa-square-font-awesome-stroke:before { - content: "\f35c"; } - -.fa-font-awesome-alt:before { - content: "\f35c"; } - -.fa-atlassian:before { - content: "\f77b"; } - -.fa-linkedin-in:before { - content: "\f0e1"; } - -.fa-digital-ocean:before { - content: "\f391"; } - -.fa-nimblr:before { - content: "\f5a8"; } - -.fa-chromecast:before { - content: "\f838"; } - -.fa-evernote:before { - content: "\f839"; } - -.fa-hacker-news:before { - content: "\f1d4"; } - -.fa-creative-commons-sampling:before { - content: "\f4f0"; } - -.fa-adversal:before { - content: "\f36a"; } - -.fa-creative-commons:before { - content: "\f25e"; } - -.fa-watchman-monitoring:before { - content: "\e087"; } - -.fa-fonticons:before { - content: "\f280"; } - -.fa-weixin:before { - content: "\f1d7"; } - -.fa-shirtsinbulk:before { - content: "\f214"; } - -.fa-codepen:before { - content: "\f1cb"; } - -.fa-git-alt:before { - content: "\f841"; } - -.fa-lyft:before { - content: "\f3c3"; } - -.fa-rev:before { - content: "\f5b2"; } - -.fa-windows:before { - content: "\f17a"; } - -.fa-wizards-of-the-coast:before { - content: "\f730"; } - -.fa-square-viadeo:before { - content: "\f2aa"; } - -.fa-viadeo-square:before { - content: "\f2aa"; } - -.fa-meetup:before { - content: "\f2e0"; } - -.fa-centos:before { - content: "\f789"; } - -.fa-adn:before { - content: "\f170"; } - -.fa-cloudsmith:before { - content: "\f384"; } - -.fa-opensuse:before { - content: "\e62b"; } - -.fa-pied-piper-alt:before { - content: "\f1a8"; } - -.fa-square-dribbble:before { - content: "\f397"; } - -.fa-dribbble-square:before { - content: "\f397"; } - -.fa-codiepie:before { - content: "\f284"; } - -.fa-node:before { - content: "\f419"; } - -.fa-mix:before { - content: "\f3cb"; } - -.fa-steam:before { - content: "\f1b6"; } - -.fa-cc-apple-pay:before { - content: "\f416"; } - -.fa-scribd:before { - content: "\f28a"; } - -.fa-debian:before { - content: "\e60b"; } - -.fa-openid:before { - content: "\f19b"; } - -.fa-instalod:before { - content: "\e081"; } - -.fa-expeditedssl:before { - content: "\f23e"; } - -.fa-sellcast:before { - content: "\f2da"; } - -.fa-square-twitter:before { - content: "\f081"; } - -.fa-twitter-square:before { - content: "\f081"; } - -.fa-r-project:before { - content: "\f4f7"; } - -.fa-delicious:before { - content: "\f1a5"; } - -.fa-freebsd:before { - content: "\f3a4"; } - -.fa-vuejs:before { - content: "\f41f"; } - -.fa-accusoft:before { - content: "\f369"; } - -.fa-ioxhost:before { - content: "\f208"; } - -.fa-fonticons-fi:before { - content: "\f3a2"; } - -.fa-app-store:before { - content: "\f36f"; } - -.fa-cc-mastercard:before { - content: "\f1f1"; } - -.fa-itunes-note:before { - content: "\f3b5"; } - -.fa-golang:before { - content: "\e40f"; } - -.fa-kickstarter:before { - content: "\f3bb"; } - -.fa-square-kickstarter:before { - content: "\f3bb"; } - -.fa-grav:before { - content: "\f2d6"; } - -.fa-weibo:before { - content: "\f18a"; } - -.fa-uncharted:before { - content: "\e084"; } - -.fa-firstdraft:before { - content: "\f3a1"; } - -.fa-square-youtube:before { - content: "\f431"; } - -.fa-youtube-square:before { - content: "\f431"; } - -.fa-wikipedia-w:before { - content: "\f266"; } - -.fa-wpressr:before { - content: "\f3e4"; } - -.fa-rendact:before { - content: "\f3e4"; } - -.fa-angellist:before { - content: "\f209"; } - -.fa-galactic-republic:before { - content: "\f50c"; } - -.fa-nfc-directional:before { - content: "\e530"; } - -.fa-skype:before { - content: "\f17e"; } - -.fa-joget:before { - content: "\f3b7"; } - -.fa-fedora:before { - content: "\f798"; } - -.fa-stripe-s:before { - content: "\f42a"; } - -.fa-meta:before { - content: "\e49b"; } - -.fa-laravel:before { - content: "\f3bd"; } - -.fa-hotjar:before { - content: "\f3b1"; } - -.fa-bluetooth-b:before { - content: "\f294"; } - -.fa-square-letterboxd:before { - content: "\e62e"; } - -.fa-sticker-mule:before { - content: "\f3f7"; } - -.fa-creative-commons-zero:before { - content: "\f4f3"; } - -.fa-hips:before { - content: "\f452"; } - -.fa-behance:before { - content: "\f1b4"; } - -.fa-reddit:before { - content: "\f1a1"; } - -.fa-discord:before { - content: "\f392"; } - -.fa-chrome:before { - content: "\f268"; } - -.fa-app-store-ios:before { - content: "\f370"; } - -.fa-cc-discover:before { - content: "\f1f2"; } - -.fa-wpbeginner:before { - content: "\f297"; } - -.fa-confluence:before { - content: "\f78d"; } - -.fa-shoelace:before { - content: "\e60c"; } - -.fa-mdb:before { - content: "\f8ca"; } - -.fa-dochub:before { - content: "\f394"; } - -.fa-accessible-icon:before { - content: "\f368"; } - -.fa-ebay:before { - content: "\f4f4"; } - -.fa-amazon:before { - content: "\f270"; } - -.fa-unsplash:before { - content: "\e07c"; } - -.fa-yarn:before { - content: "\f7e3"; } - -.fa-square-steam:before { - content: "\f1b7"; } - -.fa-steam-square:before { - content: "\f1b7"; } - -.fa-500px:before { - content: "\f26e"; } - -.fa-square-vimeo:before { - content: "\f194"; } - -.fa-vimeo-square:before { - content: "\f194"; } - -.fa-asymmetrik:before { - content: "\f372"; } - -.fa-font-awesome:before { - content: "\f2b4"; } - -.fa-font-awesome-flag:before { - content: "\f2b4"; } - -.fa-font-awesome-logo-full:before { - content: "\f2b4"; } - -.fa-gratipay:before { - content: "\f184"; } - -.fa-apple:before { - content: "\f179"; } - -.fa-hive:before { - content: "\e07f"; } - -.fa-gitkraken:before { - content: "\f3a6"; } - -.fa-keybase:before { - content: "\f4f5"; } - -.fa-apple-pay:before { - content: "\f415"; } - -.fa-padlet:before { - content: "\e4a0"; } - -.fa-amazon-pay:before { - content: "\f42c"; } - -.fa-square-github:before { - content: "\f092"; } - -.fa-github-square:before { - content: "\f092"; } - -.fa-stumbleupon:before { - content: "\f1a4"; } - -.fa-fedex:before { - content: "\f797"; } - -.fa-phoenix-framework:before { - content: "\f3dc"; } - -.fa-shopify:before { - content: "\e057"; } - -.fa-neos:before { - content: "\f612"; } - -.fa-square-threads:before { - content: "\e619"; } - -.fa-hackerrank:before { - content: "\f5f7"; } - -.fa-researchgate:before { - content: "\f4f8"; } - -.fa-swift:before { - content: "\f8e1"; } - -.fa-angular:before { - content: "\f420"; } - -.fa-speakap:before { - content: "\f3f3"; } - -.fa-angrycreative:before { - content: "\f36e"; } - -.fa-y-combinator:before { - content: "\f23b"; } - -.fa-empire:before { - content: "\f1d1"; } - -.fa-envira:before { - content: "\f299"; } - -.fa-google-scholar:before { - content: "\e63b"; } - -.fa-square-gitlab:before { - content: "\e5ae"; } - -.fa-gitlab-square:before { - content: "\e5ae"; } - -.fa-studiovinari:before { - content: "\f3f8"; } - -.fa-pied-piper:before { - content: "\f2ae"; } - -.fa-wordpress:before { - content: "\f19a"; } - -.fa-product-hunt:before { - content: "\f288"; } - -.fa-firefox:before { - content: "\f269"; } - -.fa-linode:before { - content: "\f2b8"; } - -.fa-goodreads:before { - content: "\f3a8"; } - -.fa-square-odnoklassniki:before { - content: "\f264"; } - -.fa-odnoklassniki-square:before { - content: "\f264"; } - -.fa-jsfiddle:before { - content: "\f1cc"; } - -.fa-sith:before { - content: "\f512"; } - -.fa-themeisle:before { - content: "\f2b2"; } - -.fa-page4:before { - content: "\f3d7"; } - -.fa-hashnode:before { - content: "\e499"; } - -.fa-react:before { - content: "\f41b"; } - -.fa-cc-paypal:before { - content: "\f1f4"; } - -.fa-squarespace:before { - content: "\f5be"; } - -.fa-cc-stripe:before { - content: "\f1f5"; } - -.fa-creative-commons-share:before { - content: "\f4f2"; } - -.fa-bitcoin:before { - content: "\f379"; } - -.fa-keycdn:before { - content: "\f3ba"; } - -.fa-opera:before { - content: "\f26a"; } - -.fa-itch-io:before { - content: "\f83a"; } - -.fa-umbraco:before { - content: "\f8e8"; } - -.fa-galactic-senate:before { - content: "\f50d"; } - -.fa-ubuntu:before { - content: "\f7df"; } - -.fa-draft2digital:before { - content: "\f396"; } - -.fa-stripe:before { - content: "\f429"; } - -.fa-houzz:before { - content: "\f27c"; } - -.fa-gg:before { - content: "\f260"; } - -.fa-dhl:before { - content: "\f790"; } - -.fa-square-pinterest:before { - content: "\f0d3"; } - -.fa-pinterest-square:before { - content: "\f0d3"; } - -.fa-xing:before { - content: "\f168"; } - -.fa-blackberry:before { - content: "\f37b"; } - -.fa-creative-commons-pd:before { - content: "\f4ec"; } - -.fa-playstation:before { - content: "\f3df"; } - -.fa-quinscape:before { - content: "\f459"; } - -.fa-less:before { - content: "\f41d"; } - -.fa-blogger-b:before { - content: "\f37d"; } - -.fa-opencart:before { - content: "\f23d"; } - -.fa-vine:before { - content: "\f1ca"; } - -.fa-signal-messenger:before { - content: "\e663"; } - -.fa-paypal:before { - content: "\f1ed"; } - -.fa-gitlab:before { - content: "\f296"; } - -.fa-typo3:before { - content: "\f42b"; } - -.fa-reddit-alien:before { - content: "\f281"; } - -.fa-yahoo:before { - content: "\f19e"; } - -.fa-dailymotion:before { - content: "\e052"; } - -.fa-affiliatetheme:before { - content: "\f36b"; } - -.fa-pied-piper-pp:before { - content: "\f1a7"; } - -.fa-bootstrap:before { - content: "\f836"; } - -.fa-odnoklassniki:before { - content: "\f263"; } - -.fa-nfc-symbol:before { - content: "\e531"; } - -.fa-mintbit:before { - content: "\e62f"; } - -.fa-ethereum:before { - content: "\f42e"; } - -.fa-speaker-deck:before { - content: "\f83c"; } - -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; } - -.fa-patreon:before { - content: "\f3d9"; } - -.fa-avianex:before { - content: "\f374"; } - -.fa-ello:before { - content: "\f5f1"; } - -.fa-gofore:before { - content: "\f3a7"; } - -.fa-bimobject:before { - content: "\f378"; } - -.fa-brave-reverse:before { - content: "\e63d"; } - -.fa-facebook-f:before { - content: "\f39e"; } - -.fa-square-google-plus:before { - content: "\f0d4"; } - -.fa-google-plus-square:before { - content: "\f0d4"; } - -.fa-web-awesome:before { - content: "\e682"; } - -.fa-mandalorian:before { - content: "\f50f"; } - -.fa-first-order-alt:before { - content: "\f50a"; } - -.fa-osi:before { - content: "\f41a"; } - -.fa-google-wallet:before { - content: "\f1ee"; } - -.fa-d-and-d-beyond:before { - content: "\f6ca"; } - -.fa-periscope:before { - content: "\f3da"; } - -.fa-fulcrum:before { - content: "\f50b"; } - -.fa-cloudscale:before { - content: "\f383"; } - -.fa-forumbee:before { - content: "\f211"; } - -.fa-mizuni:before { - content: "\f3cc"; } - -.fa-schlix:before { - content: "\f3ea"; } - -.fa-square-xing:before { - content: "\f169"; } - -.fa-xing-square:before { - content: "\f169"; } - -.fa-bandcamp:before { - content: "\f2d5"; } - -.fa-wpforms:before { - content: "\f298"; } - -.fa-cloudversify:before { - content: "\f385"; } - -.fa-usps:before { - content: "\f7e1"; } - -.fa-megaport:before { - content: "\f5a3"; } - -.fa-magento:before { - content: "\f3c4"; } - -.fa-spotify:before { - content: "\f1bc"; } - -.fa-optin-monster:before { - content: "\f23c"; } - -.fa-fly:before { - content: "\f417"; } - -.fa-aviato:before { - content: "\f421"; } - -.fa-itunes:before { - content: "\f3b4"; } - -.fa-cuttlefish:before { - content: "\f38c"; } - -.fa-blogger:before { - content: "\f37c"; } - -.fa-flickr:before { - content: "\f16e"; } - -.fa-viber:before { - content: "\f409"; } - -.fa-soundcloud:before { - content: "\f1be"; } - -.fa-digg:before { - content: "\f1a6"; } - -.fa-tencent-weibo:before { - content: "\f1d5"; } - -.fa-letterboxd:before { - content: "\e62d"; } - -.fa-symfony:before { - content: "\f83d"; } - -.fa-maxcdn:before { - content: "\f136"; } - -.fa-etsy:before { - content: "\f2d7"; } - -.fa-facebook-messenger:before { - content: "\f39f"; } - -.fa-audible:before { - content: "\f373"; } - -.fa-think-peaks:before { - content: "\f731"; } - -.fa-bilibili:before { - content: "\e3d9"; } - -.fa-erlang:before { - content: "\f39d"; } - -.fa-x-twitter:before { - content: "\e61b"; } - -.fa-cotton-bureau:before { - content: "\f89e"; } - -.fa-dashcube:before { - content: "\f210"; } - -.fa-42-group:before { - content: "\e080"; } - -.fa-innosoft:before { - content: "\e080"; } - -.fa-stack-exchange:before { - content: "\f18d"; } - -.fa-elementor:before { - content: "\f430"; } - -.fa-square-pied-piper:before { - content: "\e01e"; } - -.fa-pied-piper-square:before { - content: "\e01e"; } - -.fa-creative-commons-nd:before { - content: "\f4eb"; } - -.fa-palfed:before { - content: "\f3d8"; } - -.fa-superpowers:before { - content: "\f2dd"; } - -.fa-resolving:before { - content: "\f3e7"; } - -.fa-xbox:before { - content: "\f412"; } - -.fa-square-web-awesome-stroke:before { - content: "\e684"; } - -.fa-searchengin:before { - content: "\f3eb"; } - -.fa-tiktok:before { - content: "\e07b"; } - -.fa-square-facebook:before { - content: "\f082"; } - -.fa-facebook-square:before { - content: "\f082"; } - -.fa-renren:before { - content: "\f18b"; } - -.fa-linux:before { - content: "\f17c"; } - -.fa-glide:before { - content: "\f2a5"; } - -.fa-linkedin:before { - content: "\f08c"; } - -.fa-hubspot:before { - content: "\f3b2"; } - -.fa-deploydog:before { - content: "\f38e"; } - -.fa-twitch:before { - content: "\f1e8"; } - -.fa-ravelry:before { - content: "\f2d9"; } - -.fa-mixer:before { - content: "\e056"; } - -.fa-square-lastfm:before { - content: "\f203"; } - -.fa-lastfm-square:before { - content: "\f203"; } - -.fa-vimeo:before { - content: "\f40a"; } - -.fa-mendeley:before { - content: "\f7b3"; } - -.fa-uniregistry:before { - content: "\f404"; } - -.fa-figma:before { - content: "\f799"; } - -.fa-creative-commons-remix:before { - content: "\f4ee"; } - -.fa-cc-amazon-pay:before { - content: "\f42d"; } - -.fa-dropbox:before { - content: "\f16b"; } - -.fa-instagram:before { - content: "\f16d"; } - -.fa-cmplid:before { - content: "\e360"; } - -.fa-upwork:before { - content: "\e641"; } - -.fa-facebook:before { - content: "\f09a"; } - -.fa-gripfire:before { - content: "\f3ac"; } - -.fa-jedi-order:before { - content: "\f50e"; } - -.fa-uikit:before { - content: "\f403"; } - -.fa-fort-awesome-alt:before { - content: "\f3a3"; } - -.fa-phabricator:before { - content: "\f3db"; } - -.fa-ussunnah:before { - content: "\f407"; } - -.fa-earlybirds:before { - content: "\f39a"; } - -.fa-trade-federation:before { - content: "\f513"; } - -.fa-autoprefixer:before { - content: "\f41c"; } - -.fa-whatsapp:before { - content: "\f232"; } - -.fa-square-upwork:before { - content: "\e67c"; } - -.fa-slideshare:before { - content: "\f1e7"; } - -.fa-google-play:before { - content: "\f3ab"; } - -.fa-viadeo:before { - content: "\f2a9"; } - -.fa-line:before { - content: "\f3c0"; } - -.fa-google-drive:before { - content: "\f3aa"; } - -.fa-servicestack:before { - content: "\f3ec"; } - -.fa-simplybuilt:before { - content: "\f215"; } - -.fa-bitbucket:before { - content: "\f171"; } - -.fa-imdb:before { - content: "\f2d8"; } - -.fa-deezer:before { - content: "\e077"; } - -.fa-raspberry-pi:before { - content: "\f7bb"; } - -.fa-jira:before { - content: "\f7b1"; } - -.fa-docker:before { - content: "\f395"; } - -.fa-screenpal:before { - content: "\e570"; } - -.fa-bluetooth:before { - content: "\f293"; } - -.fa-gitter:before { - content: "\f426"; } - -.fa-d-and-d:before { - content: "\f38d"; } - -.fa-microblog:before { - content: "\e01a"; } - -.fa-cc-diners-club:before { - content: "\f24c"; } - -.fa-gg-circle:before { - content: "\f261"; } - -.fa-pied-piper-hat:before { - content: "\f4e5"; } - -.fa-kickstarter-k:before { - content: "\f3bc"; } - -.fa-yandex:before { - content: "\f413"; } - -.fa-readme:before { - content: "\f4d5"; } - -.fa-html5:before { - content: "\f13b"; } - -.fa-sellsy:before { - content: "\f213"; } - -.fa-square-web-awesome:before { - content: "\e683"; } - -.fa-sass:before { - content: "\f41e"; } - -.fa-wirsindhandwerk:before { - content: "\e2d0"; } - -.fa-wsh:before { - content: "\e2d0"; } - -.fa-buromobelexperte:before { - content: "\f37f"; } - -.fa-salesforce:before { - content: "\f83b"; } - -.fa-octopus-deploy:before { - content: "\e082"; } - -.fa-medapps:before { - content: "\f3c6"; } - -.fa-ns8:before { - content: "\f3d5"; } - -.fa-pinterest-p:before { - content: "\f231"; } - -.fa-apper:before { - content: "\f371"; } - -.fa-fort-awesome:before { - content: "\f286"; } - -.fa-waze:before { - content: "\f83f"; } - -.fa-bluesky:before { - content: "\e671"; } - -.fa-cc-jcb:before { - content: "\f24b"; } - -.fa-snapchat:before { - content: "\f2ab"; } - -.fa-snapchat-ghost:before { - content: "\f2ab"; } - -.fa-fantasy-flight-games:before { - content: "\f6dc"; } - -.fa-rust:before { - content: "\e07a"; } - -.fa-wix:before { - content: "\f5cf"; } - -.fa-square-behance:before { - content: "\f1b5"; } - -.fa-behance-square:before { - content: "\f1b5"; } - -.fa-supple:before { - content: "\f3f9"; } - -.fa-webflow:before { - content: "\e65c"; } - -.fa-rebel:before { - content: "\f1d0"; } - -.fa-css3:before { - content: "\f13c"; } - -.fa-staylinked:before { - content: "\f3f5"; } - -.fa-kaggle:before { - content: "\f5fa"; } - -.fa-space-awesome:before { - content: "\e5ac"; } - -.fa-deviantart:before { - content: "\f1bd"; } - -.fa-cpanel:before { - content: "\f388"; } - -.fa-goodreads-g:before { - content: "\f3a9"; } - -.fa-square-git:before { - content: "\f1d2"; } - -.fa-git-square:before { - content: "\f1d2"; } - -.fa-square-tumblr:before { - content: "\f174"; } - -.fa-tumblr-square:before { - content: "\f174"; } - -.fa-trello:before { - content: "\f181"; } - -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; } - -.fa-get-pocket:before { - content: "\f265"; } - -.fa-perbyte:before { - content: "\e083"; } - -.fa-grunt:before { - content: "\f3ad"; } - -.fa-weebly:before { - content: "\f5cc"; } - -.fa-connectdevelop:before { - content: "\f20e"; } - -.fa-leanpub:before { - content: "\f212"; } - -.fa-black-tie:before { - content: "\f27e"; } - -.fa-themeco:before { - content: "\f5c6"; } - -.fa-python:before { - content: "\f3e2"; } - -.fa-android:before { - content: "\f17b"; } - -.fa-bots:before { - content: "\e340"; } - -.fa-free-code-camp:before { - content: "\f2c5"; } - -.fa-hornbill:before { - content: "\f592"; } - -.fa-js:before { - content: "\f3b8"; } - -.fa-ideal:before { - content: "\e013"; } - -.fa-git:before { - content: "\f1d3"; } - -.fa-dev:before { - content: "\f6cc"; } - -.fa-sketch:before { - content: "\f7c6"; } - -.fa-yandex-international:before { - content: "\f414"; } - -.fa-cc-amex:before { - content: "\f1f3"; } - -.fa-uber:before { - content: "\f402"; } - -.fa-github:before { - content: "\f09b"; } - -.fa-php:before { - content: "\f457"; } - -.fa-alipay:before { - content: "\f642"; } - -.fa-youtube:before { - content: "\f167"; } - -.fa-skyatlas:before { - content: "\f216"; } - -.fa-firefox-browser:before { - content: "\e007"; } - -.fa-replyd:before { - content: "\f3e6"; } - -.fa-suse:before { - content: "\f7d6"; } - -.fa-jenkins:before { - content: "\f3b6"; } - -.fa-twitter:before { - content: "\f099"; } - -.fa-rockrms:before { - content: "\f3e9"; } - -.fa-pinterest:before { - content: "\f0d2"; } - -.fa-buffer:before { - content: "\f837"; } - -.fa-npm:before { - content: "\f3d4"; } - -.fa-yammer:before { - content: "\f840"; } - -.fa-btc:before { - content: "\f15a"; } - -.fa-dribbble:before { - content: "\f17d"; } - -.fa-stumbleupon-circle:before { - content: "\f1a3"; } - -.fa-internet-explorer:before { - content: "\f26b"; } - -.fa-stubber:before { - content: "\e5c7"; } - -.fa-telegram:before { - content: "\f2c6"; } - -.fa-telegram-plane:before { - content: "\f2c6"; } - -.fa-old-republic:before { - content: "\f510"; } - -.fa-odysee:before { - content: "\e5c6"; } - -.fa-square-whatsapp:before { - content: "\f40c"; } - -.fa-whatsapp-square:before { - content: "\f40c"; } - -.fa-node-js:before { - content: "\f3d3"; } - -.fa-edge-legacy:before { - content: "\e078"; } - -.fa-slack:before { - content: "\f198"; } - -.fa-slack-hash:before { - content: "\f198"; } - -.fa-medrt:before { - content: "\f3c8"; } - -.fa-usb:before { - content: "\f287"; } - -.fa-tumblr:before { - content: "\f173"; } - -.fa-vaadin:before { - content: "\f408"; } - -.fa-quora:before { - content: "\f2c4"; } - -.fa-square-x-twitter:before { - content: "\e61a"; } - -.fa-reacteurope:before { - content: "\f75d"; } - -.fa-medium:before { - content: "\f23a"; } - -.fa-medium-m:before { - content: "\f23a"; } - -.fa-amilia:before { - content: "\f36d"; } - -.fa-mixcloud:before { - content: "\f289"; } - -.fa-flipboard:before { - content: "\f44d"; } - -.fa-viacoin:before { - content: "\f237"; } - -.fa-critical-role:before { - content: "\f6c9"; } - -.fa-sitrox:before { - content: "\e44a"; } - -.fa-discourse:before { - content: "\f393"; } - -.fa-joomla:before { - content: "\f1aa"; } - -.fa-mastodon:before { - content: "\f4f6"; } - -.fa-airbnb:before { - content: "\f834"; } - -.fa-wolf-pack-battalion:before { - content: "\f514"; } - -.fa-buy-n-large:before { - content: "\f8a6"; } - -.fa-gulp:before { - content: "\f3ae"; } - -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; } - -.fa-strava:before { - content: "\f428"; } - -.fa-ember:before { - content: "\f423"; } - -.fa-canadian-maple-leaf:before { - content: "\f785"; } - -.fa-teamspeak:before { - content: "\f4f9"; } - -.fa-pushed:before { - content: "\f3e1"; } - -.fa-wordpress-simple:before { - content: "\f411"; } - -.fa-nutritionix:before { - content: "\f3d6"; } - -.fa-wodu:before { - content: "\e088"; } - -.fa-google-pay:before { - content: "\e079"; } - -.fa-intercom:before { - content: "\f7af"; } - -.fa-zhihu:before { - content: "\f63f"; } - -.fa-korvue:before { - content: "\f42f"; } - -.fa-pix:before { - content: "\e43a"; } - -.fa-steam-symbol:before { - content: "\f3f6"; } -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } - -@font-face { - font-family: 'Font Awesome 6 Free'; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } - -.far, -.fa-regular { - font-weight: 400; } -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } - -@font-face { - font-family: 'Font Awesome 6 Free'; - font-style: normal; - font-weight: 900; - font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -.fas, -.fa-solid { - font-weight: 900; } -@font-face { - font-family: 'Font Awesome 5 Brands'; - font-display: block; - font-weight: 400; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -@font-face { - font-family: 'Font Awesome 5 Free'; - font-display: block; - font-weight: 900; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -@font-face { - font-family: 'Font Awesome 5 Free'; - font-display: block; - font-weight: 400; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); - unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); - unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/resources/fontawesome/css/all.min.css b/resources/fontawesome/css/all.min.css deleted file mode 100644 index 45072b3..0000000 --- a/resources/fontawesome/css/all.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} - -.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} -.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/resources/fontawesome/css/brands.css b/resources/fontawesome/css/brands.css deleted file mode 100644 index 12ad3aa..0000000 --- a/resources/fontawesome/css/brands.css +++ /dev/null @@ -1,1594 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:root, :host { - --fa-style-family-brands: 'Font Awesome 6 Brands'; - --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } - -@font-face { - font-family: 'Font Awesome 6 Brands'; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -.fab, -.fa-brands { - font-weight: 400; } - -.fa-monero:before { - content: "\f3d0"; } - -.fa-hooli:before { - content: "\f427"; } - -.fa-yelp:before { - content: "\f1e9"; } - -.fa-cc-visa:before { - content: "\f1f0"; } - -.fa-lastfm:before { - content: "\f202"; } - -.fa-shopware:before { - content: "\f5b5"; } - -.fa-creative-commons-nc:before { - content: "\f4e8"; } - -.fa-aws:before { - content: "\f375"; } - -.fa-redhat:before { - content: "\f7bc"; } - -.fa-yoast:before { - content: "\f2b1"; } - -.fa-cloudflare:before { - content: "\e07d"; } - -.fa-ups:before { - content: "\f7e0"; } - -.fa-pixiv:before { - content: "\e640"; } - -.fa-wpexplorer:before { - content: "\f2de"; } - -.fa-dyalog:before { - content: "\f399"; } - -.fa-bity:before { - content: "\f37a"; } - -.fa-stackpath:before { - content: "\f842"; } - -.fa-buysellads:before { - content: "\f20d"; } - -.fa-first-order:before { - content: "\f2b0"; } - -.fa-modx:before { - content: "\f285"; } - -.fa-guilded:before { - content: "\e07e"; } - -.fa-vnv:before { - content: "\f40b"; } - -.fa-square-js:before { - content: "\f3b9"; } - -.fa-js-square:before { - content: "\f3b9"; } - -.fa-microsoft:before { - content: "\f3ca"; } - -.fa-qq:before { - content: "\f1d6"; } - -.fa-orcid:before { - content: "\f8d2"; } - -.fa-java:before { - content: "\f4e4"; } - -.fa-invision:before { - content: "\f7b0"; } - -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; } - -.fa-centercode:before { - content: "\f380"; } - -.fa-glide-g:before { - content: "\f2a6"; } - -.fa-drupal:before { - content: "\f1a9"; } - -.fa-jxl:before { - content: "\e67b"; } - -.fa-hire-a-helper:before { - content: "\f3b0"; } - -.fa-creative-commons-by:before { - content: "\f4e7"; } - -.fa-unity:before { - content: "\e049"; } - -.fa-whmcs:before { - content: "\f40d"; } - -.fa-rocketchat:before { - content: "\f3e8"; } - -.fa-vk:before { - content: "\f189"; } - -.fa-untappd:before { - content: "\f405"; } - -.fa-mailchimp:before { - content: "\f59e"; } - -.fa-css3-alt:before { - content: "\f38b"; } - -.fa-square-reddit:before { - content: "\f1a2"; } - -.fa-reddit-square:before { - content: "\f1a2"; } - -.fa-vimeo-v:before { - content: "\f27d"; } - -.fa-contao:before { - content: "\f26d"; } - -.fa-square-font-awesome:before { - content: "\e5ad"; } - -.fa-deskpro:before { - content: "\f38f"; } - -.fa-brave:before { - content: "\e63c"; } - -.fa-sistrix:before { - content: "\f3ee"; } - -.fa-square-instagram:before { - content: "\e055"; } - -.fa-instagram-square:before { - content: "\e055"; } - -.fa-battle-net:before { - content: "\f835"; } - -.fa-the-red-yeti:before { - content: "\f69d"; } - -.fa-square-hacker-news:before { - content: "\f3af"; } - -.fa-hacker-news-square:before { - content: "\f3af"; } - -.fa-edge:before { - content: "\f282"; } - -.fa-threads:before { - content: "\e618"; } - -.fa-napster:before { - content: "\f3d2"; } - -.fa-square-snapchat:before { - content: "\f2ad"; } - -.fa-snapchat-square:before { - content: "\f2ad"; } - -.fa-google-plus-g:before { - content: "\f0d5"; } - -.fa-artstation:before { - content: "\f77a"; } - -.fa-markdown:before { - content: "\f60f"; } - -.fa-sourcetree:before { - content: "\f7d3"; } - -.fa-google-plus:before { - content: "\f2b3"; } - -.fa-diaspora:before { - content: "\f791"; } - -.fa-foursquare:before { - content: "\f180"; } - -.fa-stack-overflow:before { - content: "\f16c"; } - -.fa-github-alt:before { - content: "\f113"; } - -.fa-phoenix-squadron:before { - content: "\f511"; } - -.fa-pagelines:before { - content: "\f18c"; } - -.fa-algolia:before { - content: "\f36c"; } - -.fa-red-river:before { - content: "\f3e3"; } - -.fa-creative-commons-sa:before { - content: "\f4ef"; } - -.fa-safari:before { - content: "\f267"; } - -.fa-google:before { - content: "\f1a0"; } - -.fa-square-font-awesome-stroke:before { - content: "\f35c"; } - -.fa-font-awesome-alt:before { - content: "\f35c"; } - -.fa-atlassian:before { - content: "\f77b"; } - -.fa-linkedin-in:before { - content: "\f0e1"; } - -.fa-digital-ocean:before { - content: "\f391"; } - -.fa-nimblr:before { - content: "\f5a8"; } - -.fa-chromecast:before { - content: "\f838"; } - -.fa-evernote:before { - content: "\f839"; } - -.fa-hacker-news:before { - content: "\f1d4"; } - -.fa-creative-commons-sampling:before { - content: "\f4f0"; } - -.fa-adversal:before { - content: "\f36a"; } - -.fa-creative-commons:before { - content: "\f25e"; } - -.fa-watchman-monitoring:before { - content: "\e087"; } - -.fa-fonticons:before { - content: "\f280"; } - -.fa-weixin:before { - content: "\f1d7"; } - -.fa-shirtsinbulk:before { - content: "\f214"; } - -.fa-codepen:before { - content: "\f1cb"; } - -.fa-git-alt:before { - content: "\f841"; } - -.fa-lyft:before { - content: "\f3c3"; } - -.fa-rev:before { - content: "\f5b2"; } - -.fa-windows:before { - content: "\f17a"; } - -.fa-wizards-of-the-coast:before { - content: "\f730"; } - -.fa-square-viadeo:before { - content: "\f2aa"; } - -.fa-viadeo-square:before { - content: "\f2aa"; } - -.fa-meetup:before { - content: "\f2e0"; } - -.fa-centos:before { - content: "\f789"; } - -.fa-adn:before { - content: "\f170"; } - -.fa-cloudsmith:before { - content: "\f384"; } - -.fa-opensuse:before { - content: "\e62b"; } - -.fa-pied-piper-alt:before { - content: "\f1a8"; } - -.fa-square-dribbble:before { - content: "\f397"; } - -.fa-dribbble-square:before { - content: "\f397"; } - -.fa-codiepie:before { - content: "\f284"; } - -.fa-node:before { - content: "\f419"; } - -.fa-mix:before { - content: "\f3cb"; } - -.fa-steam:before { - content: "\f1b6"; } - -.fa-cc-apple-pay:before { - content: "\f416"; } - -.fa-scribd:before { - content: "\f28a"; } - -.fa-debian:before { - content: "\e60b"; } - -.fa-openid:before { - content: "\f19b"; } - -.fa-instalod:before { - content: "\e081"; } - -.fa-expeditedssl:before { - content: "\f23e"; } - -.fa-sellcast:before { - content: "\f2da"; } - -.fa-square-twitter:before { - content: "\f081"; } - -.fa-twitter-square:before { - content: "\f081"; } - -.fa-r-project:before { - content: "\f4f7"; } - -.fa-delicious:before { - content: "\f1a5"; } - -.fa-freebsd:before { - content: "\f3a4"; } - -.fa-vuejs:before { - content: "\f41f"; } - -.fa-accusoft:before { - content: "\f369"; } - -.fa-ioxhost:before { - content: "\f208"; } - -.fa-fonticons-fi:before { - content: "\f3a2"; } - -.fa-app-store:before { - content: "\f36f"; } - -.fa-cc-mastercard:before { - content: "\f1f1"; } - -.fa-itunes-note:before { - content: "\f3b5"; } - -.fa-golang:before { - content: "\e40f"; } - -.fa-kickstarter:before { - content: "\f3bb"; } - -.fa-square-kickstarter:before { - content: "\f3bb"; } - -.fa-grav:before { - content: "\f2d6"; } - -.fa-weibo:before { - content: "\f18a"; } - -.fa-uncharted:before { - content: "\e084"; } - -.fa-firstdraft:before { - content: "\f3a1"; } - -.fa-square-youtube:before { - content: "\f431"; } - -.fa-youtube-square:before { - content: "\f431"; } - -.fa-wikipedia-w:before { - content: "\f266"; } - -.fa-wpressr:before { - content: "\f3e4"; } - -.fa-rendact:before { - content: "\f3e4"; } - -.fa-angellist:before { - content: "\f209"; } - -.fa-galactic-republic:before { - content: "\f50c"; } - -.fa-nfc-directional:before { - content: "\e530"; } - -.fa-skype:before { - content: "\f17e"; } - -.fa-joget:before { - content: "\f3b7"; } - -.fa-fedora:before { - content: "\f798"; } - -.fa-stripe-s:before { - content: "\f42a"; } - -.fa-meta:before { - content: "\e49b"; } - -.fa-laravel:before { - content: "\f3bd"; } - -.fa-hotjar:before { - content: "\f3b1"; } - -.fa-bluetooth-b:before { - content: "\f294"; } - -.fa-square-letterboxd:before { - content: "\e62e"; } - -.fa-sticker-mule:before { - content: "\f3f7"; } - -.fa-creative-commons-zero:before { - content: "\f4f3"; } - -.fa-hips:before { - content: "\f452"; } - -.fa-behance:before { - content: "\f1b4"; } - -.fa-reddit:before { - content: "\f1a1"; } - -.fa-discord:before { - content: "\f392"; } - -.fa-chrome:before { - content: "\f268"; } - -.fa-app-store-ios:before { - content: "\f370"; } - -.fa-cc-discover:before { - content: "\f1f2"; } - -.fa-wpbeginner:before { - content: "\f297"; } - -.fa-confluence:before { - content: "\f78d"; } - -.fa-shoelace:before { - content: "\e60c"; } - -.fa-mdb:before { - content: "\f8ca"; } - -.fa-dochub:before { - content: "\f394"; } - -.fa-accessible-icon:before { - content: "\f368"; } - -.fa-ebay:before { - content: "\f4f4"; } - -.fa-amazon:before { - content: "\f270"; } - -.fa-unsplash:before { - content: "\e07c"; } - -.fa-yarn:before { - content: "\f7e3"; } - -.fa-square-steam:before { - content: "\f1b7"; } - -.fa-steam-square:before { - content: "\f1b7"; } - -.fa-500px:before { - content: "\f26e"; } - -.fa-square-vimeo:before { - content: "\f194"; } - -.fa-vimeo-square:before { - content: "\f194"; } - -.fa-asymmetrik:before { - content: "\f372"; } - -.fa-font-awesome:before { - content: "\f2b4"; } - -.fa-font-awesome-flag:before { - content: "\f2b4"; } - -.fa-font-awesome-logo-full:before { - content: "\f2b4"; } - -.fa-gratipay:before { - content: "\f184"; } - -.fa-apple:before { - content: "\f179"; } - -.fa-hive:before { - content: "\e07f"; } - -.fa-gitkraken:before { - content: "\f3a6"; } - -.fa-keybase:before { - content: "\f4f5"; } - -.fa-apple-pay:before { - content: "\f415"; } - -.fa-padlet:before { - content: "\e4a0"; } - -.fa-amazon-pay:before { - content: "\f42c"; } - -.fa-square-github:before { - content: "\f092"; } - -.fa-github-square:before { - content: "\f092"; } - -.fa-stumbleupon:before { - content: "\f1a4"; } - -.fa-fedex:before { - content: "\f797"; } - -.fa-phoenix-framework:before { - content: "\f3dc"; } - -.fa-shopify:before { - content: "\e057"; } - -.fa-neos:before { - content: "\f612"; } - -.fa-square-threads:before { - content: "\e619"; } - -.fa-hackerrank:before { - content: "\f5f7"; } - -.fa-researchgate:before { - content: "\f4f8"; } - -.fa-swift:before { - content: "\f8e1"; } - -.fa-angular:before { - content: "\f420"; } - -.fa-speakap:before { - content: "\f3f3"; } - -.fa-angrycreative:before { - content: "\f36e"; } - -.fa-y-combinator:before { - content: "\f23b"; } - -.fa-empire:before { - content: "\f1d1"; } - -.fa-envira:before { - content: "\f299"; } - -.fa-google-scholar:before { - content: "\e63b"; } - -.fa-square-gitlab:before { - content: "\e5ae"; } - -.fa-gitlab-square:before { - content: "\e5ae"; } - -.fa-studiovinari:before { - content: "\f3f8"; } - -.fa-pied-piper:before { - content: "\f2ae"; } - -.fa-wordpress:before { - content: "\f19a"; } - -.fa-product-hunt:before { - content: "\f288"; } - -.fa-firefox:before { - content: "\f269"; } - -.fa-linode:before { - content: "\f2b8"; } - -.fa-goodreads:before { - content: "\f3a8"; } - -.fa-square-odnoklassniki:before { - content: "\f264"; } - -.fa-odnoklassniki-square:before { - content: "\f264"; } - -.fa-jsfiddle:before { - content: "\f1cc"; } - -.fa-sith:before { - content: "\f512"; } - -.fa-themeisle:before { - content: "\f2b2"; } - -.fa-page4:before { - content: "\f3d7"; } - -.fa-hashnode:before { - content: "\e499"; } - -.fa-react:before { - content: "\f41b"; } - -.fa-cc-paypal:before { - content: "\f1f4"; } - -.fa-squarespace:before { - content: "\f5be"; } - -.fa-cc-stripe:before { - content: "\f1f5"; } - -.fa-creative-commons-share:before { - content: "\f4f2"; } - -.fa-bitcoin:before { - content: "\f379"; } - -.fa-keycdn:before { - content: "\f3ba"; } - -.fa-opera:before { - content: "\f26a"; } - -.fa-itch-io:before { - content: "\f83a"; } - -.fa-umbraco:before { - content: "\f8e8"; } - -.fa-galactic-senate:before { - content: "\f50d"; } - -.fa-ubuntu:before { - content: "\f7df"; } - -.fa-draft2digital:before { - content: "\f396"; } - -.fa-stripe:before { - content: "\f429"; } - -.fa-houzz:before { - content: "\f27c"; } - -.fa-gg:before { - content: "\f260"; } - -.fa-dhl:before { - content: "\f790"; } - -.fa-square-pinterest:before { - content: "\f0d3"; } - -.fa-pinterest-square:before { - content: "\f0d3"; } - -.fa-xing:before { - content: "\f168"; } - -.fa-blackberry:before { - content: "\f37b"; } - -.fa-creative-commons-pd:before { - content: "\f4ec"; } - -.fa-playstation:before { - content: "\f3df"; } - -.fa-quinscape:before { - content: "\f459"; } - -.fa-less:before { - content: "\f41d"; } - -.fa-blogger-b:before { - content: "\f37d"; } - -.fa-opencart:before { - content: "\f23d"; } - -.fa-vine:before { - content: "\f1ca"; } - -.fa-signal-messenger:before { - content: "\e663"; } - -.fa-paypal:before { - content: "\f1ed"; } - -.fa-gitlab:before { - content: "\f296"; } - -.fa-typo3:before { - content: "\f42b"; } - -.fa-reddit-alien:before { - content: "\f281"; } - -.fa-yahoo:before { - content: "\f19e"; } - -.fa-dailymotion:before { - content: "\e052"; } - -.fa-affiliatetheme:before { - content: "\f36b"; } - -.fa-pied-piper-pp:before { - content: "\f1a7"; } - -.fa-bootstrap:before { - content: "\f836"; } - -.fa-odnoklassniki:before { - content: "\f263"; } - -.fa-nfc-symbol:before { - content: "\e531"; } - -.fa-mintbit:before { - content: "\e62f"; } - -.fa-ethereum:before { - content: "\f42e"; } - -.fa-speaker-deck:before { - content: "\f83c"; } - -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; } - -.fa-patreon:before { - content: "\f3d9"; } - -.fa-avianex:before { - content: "\f374"; } - -.fa-ello:before { - content: "\f5f1"; } - -.fa-gofore:before { - content: "\f3a7"; } - -.fa-bimobject:before { - content: "\f378"; } - -.fa-brave-reverse:before { - content: "\e63d"; } - -.fa-facebook-f:before { - content: "\f39e"; } - -.fa-square-google-plus:before { - content: "\f0d4"; } - -.fa-google-plus-square:before { - content: "\f0d4"; } - -.fa-web-awesome:before { - content: "\e682"; } - -.fa-mandalorian:before { - content: "\f50f"; } - -.fa-first-order-alt:before { - content: "\f50a"; } - -.fa-osi:before { - content: "\f41a"; } - -.fa-google-wallet:before { - content: "\f1ee"; } - -.fa-d-and-d-beyond:before { - content: "\f6ca"; } - -.fa-periscope:before { - content: "\f3da"; } - -.fa-fulcrum:before { - content: "\f50b"; } - -.fa-cloudscale:before { - content: "\f383"; } - -.fa-forumbee:before { - content: "\f211"; } - -.fa-mizuni:before { - content: "\f3cc"; } - -.fa-schlix:before { - content: "\f3ea"; } - -.fa-square-xing:before { - content: "\f169"; } - -.fa-xing-square:before { - content: "\f169"; } - -.fa-bandcamp:before { - content: "\f2d5"; } - -.fa-wpforms:before { - content: "\f298"; } - -.fa-cloudversify:before { - content: "\f385"; } - -.fa-usps:before { - content: "\f7e1"; } - -.fa-megaport:before { - content: "\f5a3"; } - -.fa-magento:before { - content: "\f3c4"; } - -.fa-spotify:before { - content: "\f1bc"; } - -.fa-optin-monster:before { - content: "\f23c"; } - -.fa-fly:before { - content: "\f417"; } - -.fa-aviato:before { - content: "\f421"; } - -.fa-itunes:before { - content: "\f3b4"; } - -.fa-cuttlefish:before { - content: "\f38c"; } - -.fa-blogger:before { - content: "\f37c"; } - -.fa-flickr:before { - content: "\f16e"; } - -.fa-viber:before { - content: "\f409"; } - -.fa-soundcloud:before { - content: "\f1be"; } - -.fa-digg:before { - content: "\f1a6"; } - -.fa-tencent-weibo:before { - content: "\f1d5"; } - -.fa-letterboxd:before { - content: "\e62d"; } - -.fa-symfony:before { - content: "\f83d"; } - -.fa-maxcdn:before { - content: "\f136"; } - -.fa-etsy:before { - content: "\f2d7"; } - -.fa-facebook-messenger:before { - content: "\f39f"; } - -.fa-audible:before { - content: "\f373"; } - -.fa-think-peaks:before { - content: "\f731"; } - -.fa-bilibili:before { - content: "\e3d9"; } - -.fa-erlang:before { - content: "\f39d"; } - -.fa-x-twitter:before { - content: "\e61b"; } - -.fa-cotton-bureau:before { - content: "\f89e"; } - -.fa-dashcube:before { - content: "\f210"; } - -.fa-42-group:before { - content: "\e080"; } - -.fa-innosoft:before { - content: "\e080"; } - -.fa-stack-exchange:before { - content: "\f18d"; } - -.fa-elementor:before { - content: "\f430"; } - -.fa-square-pied-piper:before { - content: "\e01e"; } - -.fa-pied-piper-square:before { - content: "\e01e"; } - -.fa-creative-commons-nd:before { - content: "\f4eb"; } - -.fa-palfed:before { - content: "\f3d8"; } - -.fa-superpowers:before { - content: "\f2dd"; } - -.fa-resolving:before { - content: "\f3e7"; } - -.fa-xbox:before { - content: "\f412"; } - -.fa-square-web-awesome-stroke:before { - content: "\e684"; } - -.fa-searchengin:before { - content: "\f3eb"; } - -.fa-tiktok:before { - content: "\e07b"; } - -.fa-square-facebook:before { - content: "\f082"; } - -.fa-facebook-square:before { - content: "\f082"; } - -.fa-renren:before { - content: "\f18b"; } - -.fa-linux:before { - content: "\f17c"; } - -.fa-glide:before { - content: "\f2a5"; } - -.fa-linkedin:before { - content: "\f08c"; } - -.fa-hubspot:before { - content: "\f3b2"; } - -.fa-deploydog:before { - content: "\f38e"; } - -.fa-twitch:before { - content: "\f1e8"; } - -.fa-ravelry:before { - content: "\f2d9"; } - -.fa-mixer:before { - content: "\e056"; } - -.fa-square-lastfm:before { - content: "\f203"; } - -.fa-lastfm-square:before { - content: "\f203"; } - -.fa-vimeo:before { - content: "\f40a"; } - -.fa-mendeley:before { - content: "\f7b3"; } - -.fa-uniregistry:before { - content: "\f404"; } - -.fa-figma:before { - content: "\f799"; } - -.fa-creative-commons-remix:before { - content: "\f4ee"; } - -.fa-cc-amazon-pay:before { - content: "\f42d"; } - -.fa-dropbox:before { - content: "\f16b"; } - -.fa-instagram:before { - content: "\f16d"; } - -.fa-cmplid:before { - content: "\e360"; } - -.fa-upwork:before { - content: "\e641"; } - -.fa-facebook:before { - content: "\f09a"; } - -.fa-gripfire:before { - content: "\f3ac"; } - -.fa-jedi-order:before { - content: "\f50e"; } - -.fa-uikit:before { - content: "\f403"; } - -.fa-fort-awesome-alt:before { - content: "\f3a3"; } - -.fa-phabricator:before { - content: "\f3db"; } - -.fa-ussunnah:before { - content: "\f407"; } - -.fa-earlybirds:before { - content: "\f39a"; } - -.fa-trade-federation:before { - content: "\f513"; } - -.fa-autoprefixer:before { - content: "\f41c"; } - -.fa-whatsapp:before { - content: "\f232"; } - -.fa-square-upwork:before { - content: "\e67c"; } - -.fa-slideshare:before { - content: "\f1e7"; } - -.fa-google-play:before { - content: "\f3ab"; } - -.fa-viadeo:before { - content: "\f2a9"; } - -.fa-line:before { - content: "\f3c0"; } - -.fa-google-drive:before { - content: "\f3aa"; } - -.fa-servicestack:before { - content: "\f3ec"; } - -.fa-simplybuilt:before { - content: "\f215"; } - -.fa-bitbucket:before { - content: "\f171"; } - -.fa-imdb:before { - content: "\f2d8"; } - -.fa-deezer:before { - content: "\e077"; } - -.fa-raspberry-pi:before { - content: "\f7bb"; } - -.fa-jira:before { - content: "\f7b1"; } - -.fa-docker:before { - content: "\f395"; } - -.fa-screenpal:before { - content: "\e570"; } - -.fa-bluetooth:before { - content: "\f293"; } - -.fa-gitter:before { - content: "\f426"; } - -.fa-d-and-d:before { - content: "\f38d"; } - -.fa-microblog:before { - content: "\e01a"; } - -.fa-cc-diners-club:before { - content: "\f24c"; } - -.fa-gg-circle:before { - content: "\f261"; } - -.fa-pied-piper-hat:before { - content: "\f4e5"; } - -.fa-kickstarter-k:before { - content: "\f3bc"; } - -.fa-yandex:before { - content: "\f413"; } - -.fa-readme:before { - content: "\f4d5"; } - -.fa-html5:before { - content: "\f13b"; } - -.fa-sellsy:before { - content: "\f213"; } - -.fa-square-web-awesome:before { - content: "\e683"; } - -.fa-sass:before { - content: "\f41e"; } - -.fa-wirsindhandwerk:before { - content: "\e2d0"; } - -.fa-wsh:before { - content: "\e2d0"; } - -.fa-buromobelexperte:before { - content: "\f37f"; } - -.fa-salesforce:before { - content: "\f83b"; } - -.fa-octopus-deploy:before { - content: "\e082"; } - -.fa-medapps:before { - content: "\f3c6"; } - -.fa-ns8:before { - content: "\f3d5"; } - -.fa-pinterest-p:before { - content: "\f231"; } - -.fa-apper:before { - content: "\f371"; } - -.fa-fort-awesome:before { - content: "\f286"; } - -.fa-waze:before { - content: "\f83f"; } - -.fa-bluesky:before { - content: "\e671"; } - -.fa-cc-jcb:before { - content: "\f24b"; } - -.fa-snapchat:before { - content: "\f2ab"; } - -.fa-snapchat-ghost:before { - content: "\f2ab"; } - -.fa-fantasy-flight-games:before { - content: "\f6dc"; } - -.fa-rust:before { - content: "\e07a"; } - -.fa-wix:before { - content: "\f5cf"; } - -.fa-square-behance:before { - content: "\f1b5"; } - -.fa-behance-square:before { - content: "\f1b5"; } - -.fa-supple:before { - content: "\f3f9"; } - -.fa-webflow:before { - content: "\e65c"; } - -.fa-rebel:before { - content: "\f1d0"; } - -.fa-css3:before { - content: "\f13c"; } - -.fa-staylinked:before { - content: "\f3f5"; } - -.fa-kaggle:before { - content: "\f5fa"; } - -.fa-space-awesome:before { - content: "\e5ac"; } - -.fa-deviantart:before { - content: "\f1bd"; } - -.fa-cpanel:before { - content: "\f388"; } - -.fa-goodreads-g:before { - content: "\f3a9"; } - -.fa-square-git:before { - content: "\f1d2"; } - -.fa-git-square:before { - content: "\f1d2"; } - -.fa-square-tumblr:before { - content: "\f174"; } - -.fa-tumblr-square:before { - content: "\f174"; } - -.fa-trello:before { - content: "\f181"; } - -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; } - -.fa-get-pocket:before { - content: "\f265"; } - -.fa-perbyte:before { - content: "\e083"; } - -.fa-grunt:before { - content: "\f3ad"; } - -.fa-weebly:before { - content: "\f5cc"; } - -.fa-connectdevelop:before { - content: "\f20e"; } - -.fa-leanpub:before { - content: "\f212"; } - -.fa-black-tie:before { - content: "\f27e"; } - -.fa-themeco:before { - content: "\f5c6"; } - -.fa-python:before { - content: "\f3e2"; } - -.fa-android:before { - content: "\f17b"; } - -.fa-bots:before { - content: "\e340"; } - -.fa-free-code-camp:before { - content: "\f2c5"; } - -.fa-hornbill:before { - content: "\f592"; } - -.fa-js:before { - content: "\f3b8"; } - -.fa-ideal:before { - content: "\e013"; } - -.fa-git:before { - content: "\f1d3"; } - -.fa-dev:before { - content: "\f6cc"; } - -.fa-sketch:before { - content: "\f7c6"; } - -.fa-yandex-international:before { - content: "\f414"; } - -.fa-cc-amex:before { - content: "\f1f3"; } - -.fa-uber:before { - content: "\f402"; } - -.fa-github:before { - content: "\f09b"; } - -.fa-php:before { - content: "\f457"; } - -.fa-alipay:before { - content: "\f642"; } - -.fa-youtube:before { - content: "\f167"; } - -.fa-skyatlas:before { - content: "\f216"; } - -.fa-firefox-browser:before { - content: "\e007"; } - -.fa-replyd:before { - content: "\f3e6"; } - -.fa-suse:before { - content: "\f7d6"; } - -.fa-jenkins:before { - content: "\f3b6"; } - -.fa-twitter:before { - content: "\f099"; } - -.fa-rockrms:before { - content: "\f3e9"; } - -.fa-pinterest:before { - content: "\f0d2"; } - -.fa-buffer:before { - content: "\f837"; } - -.fa-npm:before { - content: "\f3d4"; } - -.fa-yammer:before { - content: "\f840"; } - -.fa-btc:before { - content: "\f15a"; } - -.fa-dribbble:before { - content: "\f17d"; } - -.fa-stumbleupon-circle:before { - content: "\f1a3"; } - -.fa-internet-explorer:before { - content: "\f26b"; } - -.fa-stubber:before { - content: "\e5c7"; } - -.fa-telegram:before { - content: "\f2c6"; } - -.fa-telegram-plane:before { - content: "\f2c6"; } - -.fa-old-republic:before { - content: "\f510"; } - -.fa-odysee:before { - content: "\e5c6"; } - -.fa-square-whatsapp:before { - content: "\f40c"; } - -.fa-whatsapp-square:before { - content: "\f40c"; } - -.fa-node-js:before { - content: "\f3d3"; } - -.fa-edge-legacy:before { - content: "\e078"; } - -.fa-slack:before { - content: "\f198"; } - -.fa-slack-hash:before { - content: "\f198"; } - -.fa-medrt:before { - content: "\f3c8"; } - -.fa-usb:before { - content: "\f287"; } - -.fa-tumblr:before { - content: "\f173"; } - -.fa-vaadin:before { - content: "\f408"; } - -.fa-quora:before { - content: "\f2c4"; } - -.fa-square-x-twitter:before { - content: "\e61a"; } - -.fa-reacteurope:before { - content: "\f75d"; } - -.fa-medium:before { - content: "\f23a"; } - -.fa-medium-m:before { - content: "\f23a"; } - -.fa-amilia:before { - content: "\f36d"; } - -.fa-mixcloud:before { - content: "\f289"; } - -.fa-flipboard:before { - content: "\f44d"; } - -.fa-viacoin:before { - content: "\f237"; } - -.fa-critical-role:before { - content: "\f6c9"; } - -.fa-sitrox:before { - content: "\e44a"; } - -.fa-discourse:before { - content: "\f393"; } - -.fa-joomla:before { - content: "\f1aa"; } - -.fa-mastodon:before { - content: "\f4f6"; } - -.fa-airbnb:before { - content: "\f834"; } - -.fa-wolf-pack-battalion:before { - content: "\f514"; } - -.fa-buy-n-large:before { - content: "\f8a6"; } - -.fa-gulp:before { - content: "\f3ae"; } - -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; } - -.fa-strava:before { - content: "\f428"; } - -.fa-ember:before { - content: "\f423"; } - -.fa-canadian-maple-leaf:before { - content: "\f785"; } - -.fa-teamspeak:before { - content: "\f4f9"; } - -.fa-pushed:before { - content: "\f3e1"; } - -.fa-wordpress-simple:before { - content: "\f411"; } - -.fa-nutritionix:before { - content: "\f3d6"; } - -.fa-wodu:before { - content: "\e088"; } - -.fa-google-pay:before { - content: "\e079"; } - -.fa-intercom:before { - content: "\f7af"; } - -.fa-zhihu:before { - content: "\f63f"; } - -.fa-korvue:before { - content: "\f42f"; } - -.fa-pix:before { - content: "\e43a"; } - -.fa-steam-symbol:before { - content: "\f3f6"; } diff --git a/resources/fontawesome/css/brands.min.css b/resources/fontawesome/css/brands.min.css deleted file mode 100644 index 3e70760..0000000 --- a/resources/fontawesome/css/brands.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/resources/fontawesome/css/fontawesome.min.css b/resources/fontawesome/css/fontawesome.min.css deleted file mode 100644 index 7e1c254..0000000 --- a/resources/fontawesome/css/fontawesome.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} - -.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} -.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/resources/fontawesome/css/regular.css b/resources/fontawesome/css/regular.css deleted file mode 100644 index dfb7e76..0000000 --- a/resources/fontawesome/css/regular.css +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } - -@font-face { - font-family: 'Font Awesome 6 Free'; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } - -.far, -.fa-regular { - font-weight: 400; } diff --git a/resources/fontawesome/css/regular.min.css b/resources/fontawesome/css/regular.min.css deleted file mode 100644 index 7f1cb00..0000000 --- a/resources/fontawesome/css/regular.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400} \ No newline at end of file diff --git a/resources/fontawesome/css/solid.css b/resources/fontawesome/css/solid.css deleted file mode 100644 index 3897c23..0000000 --- a/resources/fontawesome/css/solid.css +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } - -@font-face { - font-family: 'Font Awesome 6 Free'; - font-style: normal; - font-weight: 900; - font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -.fas, -.fa-solid { - font-weight: 900; } diff --git a/resources/fontawesome/css/solid.min.css b/resources/fontawesome/css/solid.min.css deleted file mode 100644 index e7d97d2..0000000 --- a/resources/fontawesome/css/solid.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} \ No newline at end of file diff --git a/resources/fontawesome/css/svg-with-js.css b/resources/fontawesome/css/svg-with-js.css deleted file mode 100644 index 85b8e6d..0000000 --- a/resources/fontawesome/css/svg-with-js.css +++ /dev/null @@ -1,640 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:root, :host { - --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid'; - --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular'; - --fa-font-light: normal 300 1em/1 'Font Awesome 6 Light'; - --fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin'; - --fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone'; - --fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp'; - --fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp'; - --fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp'; - --fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 6 Sharp'; - --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } - -svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa { - overflow: visible; - box-sizing: content-box; } - -.svg-inline--fa { - display: var(--fa-display, inline-block); - height: 1em; - overflow: visible; - vertical-align: -.125em; } - .svg-inline--fa.fa-2xs { - vertical-align: 0.1em; } - .svg-inline--fa.fa-xs { - vertical-align: 0em; } - .svg-inline--fa.fa-sm { - vertical-align: -0.07143em; } - .svg-inline--fa.fa-lg { - vertical-align: -0.2em; } - .svg-inline--fa.fa-xl { - vertical-align: -0.25em; } - .svg-inline--fa.fa-2xl { - vertical-align: -0.3125em; } - .svg-inline--fa.fa-pull-left { - margin-right: var(--fa-pull-margin, 0.3em); - width: auto; } - .svg-inline--fa.fa-pull-right { - margin-left: var(--fa-pull-margin, 0.3em); - width: auto; } - .svg-inline--fa.fa-li { - width: var(--fa-li-width, 2em); - top: 0.25em; } - .svg-inline--fa.fa-fw { - width: var(--fa-fw-width, 1.25em); } - -.fa-layers svg.svg-inline--fa { - bottom: 0; - left: 0; - margin: auto; - position: absolute; - right: 0; - top: 0; } - -.fa-layers-text, .fa-layers-counter { - display: inline-block; - position: absolute; - text-align: center; } - -.fa-layers { - display: inline-block; - height: 1em; - position: relative; - text-align: center; - vertical-align: -.125em; - width: 1em; } - .fa-layers svg.svg-inline--fa { - -webkit-transform-origin: center center; - transform-origin: center center; } - -.fa-layers-text { - left: 50%; - top: 50%; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - -webkit-transform-origin: center center; - transform-origin: center center; } - -.fa-layers-counter { - background-color: var(--fa-counter-background-color, #ff253a); - border-radius: var(--fa-counter-border-radius, 1em); - box-sizing: border-box; - color: var(--fa-inverse, #fff); - line-height: var(--fa-counter-line-height, 1); - max-width: var(--fa-counter-max-width, 5em); - min-width: var(--fa-counter-min-width, 1.5em); - overflow: hidden; - padding: var(--fa-counter-padding, 0.25em 0.5em); - right: var(--fa-right, 0); - text-overflow: ellipsis; - top: var(--fa-top, 0); - -webkit-transform: scale(var(--fa-counter-scale, 0.25)); - transform: scale(var(--fa-counter-scale, 0.25)); - -webkit-transform-origin: top right; - transform-origin: top right; } - -.fa-layers-bottom-right { - bottom: var(--fa-bottom, 0); - right: var(--fa-right, 0); - top: auto; - -webkit-transform: scale(var(--fa-layers-scale, 0.25)); - transform: scale(var(--fa-layers-scale, 0.25)); - -webkit-transform-origin: bottom right; - transform-origin: bottom right; } - -.fa-layers-bottom-left { - bottom: var(--fa-bottom, 0); - left: var(--fa-left, 0); - right: auto; - top: auto; - -webkit-transform: scale(var(--fa-layers-scale, 0.25)); - transform: scale(var(--fa-layers-scale, 0.25)); - -webkit-transform-origin: bottom left; - transform-origin: bottom left; } - -.fa-layers-top-right { - top: var(--fa-top, 0); - right: var(--fa-right, 0); - -webkit-transform: scale(var(--fa-layers-scale, 0.25)); - transform: scale(var(--fa-layers-scale, 0.25)); - -webkit-transform-origin: top right; - transform-origin: top right; } - -.fa-layers-top-left { - left: var(--fa-left, 0); - right: auto; - top: var(--fa-top, 0); - -webkit-transform: scale(var(--fa-layers-scale, 0.25)); - transform: scale(var(--fa-layers-scale, 0.25)); - -webkit-transform-origin: top left; - transform-origin: top left; } - -.fa-1x { - font-size: 1em; } - -.fa-2x { - font-size: 2em; } - -.fa-3x { - font-size: 3em; } - -.fa-4x { - font-size: 4em; } - -.fa-5x { - font-size: 5em; } - -.fa-6x { - font-size: 6em; } - -.fa-7x { - font-size: 7em; } - -.fa-8x { - font-size: 8em; } - -.fa-9x { - font-size: 9em; } - -.fa-10x { - font-size: 10em; } - -.fa-2xs { - font-size: 0.625em; - line-height: 0.1em; - vertical-align: 0.225em; } - -.fa-xs { - font-size: 0.75em; - line-height: 0.08333em; - vertical-align: 0.125em; } - -.fa-sm { - font-size: 0.875em; - line-height: 0.07143em; - vertical-align: 0.05357em; } - -.fa-lg { - font-size: 1.25em; - line-height: 0.05em; - vertical-align: -0.075em; } - -.fa-xl { - font-size: 1.5em; - line-height: 0.04167em; - vertical-align: -0.125em; } - -.fa-2xl { - font-size: 2em; - line-height: 0.03125em; - vertical-align: -0.1875em; } - -.fa-fw { - text-align: center; - width: 1.25em; } - -.fa-ul { - list-style-type: none; - margin-left: var(--fa-li-margin, 2.5em); - padding-left: 0; } - .fa-ul > li { - position: relative; } - -.fa-li { - left: calc(var(--fa-li-width, 2em) * -1); - position: absolute; - text-align: center; - width: var(--fa-li-width, 2em); - line-height: inherit; } - -.fa-border { - border-color: var(--fa-border-color, #eee); - border-radius: var(--fa-border-radius, 0.1em); - border-style: var(--fa-border-style, solid); - border-width: var(--fa-border-width, 0.08em); - padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } - -.fa-pull-left { - float: left; - margin-right: var(--fa-pull-margin, 0.3em); } - -.fa-pull-right { - float: right; - margin-left: var(--fa-pull-margin, 0.3em); } - -.fa-beat { - -webkit-animation-name: fa-beat; - animation-name: fa-beat; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } - -.fa-bounce { - -webkit-animation-name: fa-bounce; - animation-name: fa-bounce; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } - -.fa-fade { - -webkit-animation-name: fa-fade; - animation-name: fa-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } - -.fa-beat-fade { - -webkit-animation-name: fa-beat-fade; - animation-name: fa-beat-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } - -.fa-flip { - -webkit-animation-name: fa-flip; - animation-name: fa-flip; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } - -.fa-shake { - -webkit-animation-name: fa-shake; - animation-name: fa-shake; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, linear); - animation-timing-function: var(--fa-animation-timing, linear); } - -.fa-spin { - -webkit-animation-name: fa-spin; - animation-name: fa-spin; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 2s); - animation-duration: var(--fa-animation-duration, 2s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, linear); - animation-timing-function: var(--fa-animation-timing, linear); } - -.fa-spin-reverse { - --fa-animation-direction: reverse; } - -.fa-pulse, -.fa-spin-pulse { - -webkit-animation-name: fa-spin; - animation-name: fa-spin; - -webkit-animation-direction: var(--fa-animation-direction, normal); - animation-direction: var(--fa-animation-direction, normal); - -webkit-animation-duration: var(--fa-animation-duration, 1s); - animation-duration: var(--fa-animation-duration, 1s); - -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-iteration-count: var(--fa-animation-iteration-count, infinite); - -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); - animation-timing-function: var(--fa-animation-timing, steps(8)); } - -@media (prefers-reduced-motion: reduce) { - .fa-beat, - .fa-bounce, - .fa-fade, - .fa-beat-fade, - .fa-flip, - .fa-pulse, - .fa-shake, - .fa-spin, - .fa-spin-pulse { - -webkit-animation-delay: -1ms; - animation-delay: -1ms; - -webkit-animation-duration: 1ms; - animation-duration: 1ms; - -webkit-animation-iteration-count: 1; - animation-iteration-count: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - -webkit-transition-duration: 0s; - transition-duration: 0s; } } - -@-webkit-keyframes fa-beat { - 0%, 90% { - -webkit-transform: scale(1); - transform: scale(1); } - 45% { - -webkit-transform: scale(var(--fa-beat-scale, 1.25)); - transform: scale(var(--fa-beat-scale, 1.25)); } } - -@keyframes fa-beat { - 0%, 90% { - -webkit-transform: scale(1); - transform: scale(1); } - 45% { - -webkit-transform: scale(var(--fa-beat-scale, 1.25)); - transform: scale(var(--fa-beat-scale, 1.25)); } } - -@-webkit-keyframes fa-bounce { - 0% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 10% { - -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); - transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } - 30% { - -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); - transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } - 50% { - -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); - transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } - 57% { - -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } - 64% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 100% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } } - -@keyframes fa-bounce { - 0% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 10% { - -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); - transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } - 30% { - -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); - transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } - 50% { - -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); - transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } - 57% { - -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } - 64% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } - 100% { - -webkit-transform: scale(1, 1) translateY(0); - transform: scale(1, 1) translateY(0); } } - -@-webkit-keyframes fa-fade { - 50% { - opacity: var(--fa-fade-opacity, 0.4); } } - -@keyframes fa-fade { - 50% { - opacity: var(--fa-fade-opacity, 0.4); } } - -@-webkit-keyframes fa-beat-fade { - 0%, 100% { - opacity: var(--fa-beat-fade-opacity, 0.4); - -webkit-transform: scale(1); - transform: scale(1); } - 50% { - opacity: 1; - -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } - -@keyframes fa-beat-fade { - 0%, 100% { - opacity: var(--fa-beat-fade-opacity, 0.4); - -webkit-transform: scale(1); - transform: scale(1); } - 50% { - opacity: 1; - -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } - -@-webkit-keyframes fa-flip { - 50% { - -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); - transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } - -@keyframes fa-flip { - 50% { - -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); - transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } - -@-webkit-keyframes fa-shake { - 0% { - -webkit-transform: rotate(-15deg); - transform: rotate(-15deg); } - 4% { - -webkit-transform: rotate(15deg); - transform: rotate(15deg); } - 8%, 24% { - -webkit-transform: rotate(-18deg); - transform: rotate(-18deg); } - 12%, 28% { - -webkit-transform: rotate(18deg); - transform: rotate(18deg); } - 16% { - -webkit-transform: rotate(-22deg); - transform: rotate(-22deg); } - 20% { - -webkit-transform: rotate(22deg); - transform: rotate(22deg); } - 32% { - -webkit-transform: rotate(-12deg); - transform: rotate(-12deg); } - 36% { - -webkit-transform: rotate(12deg); - transform: rotate(12deg); } - 40%, 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } } - -@keyframes fa-shake { - 0% { - -webkit-transform: rotate(-15deg); - transform: rotate(-15deg); } - 4% { - -webkit-transform: rotate(15deg); - transform: rotate(15deg); } - 8%, 24% { - -webkit-transform: rotate(-18deg); - transform: rotate(-18deg); } - 12%, 28% { - -webkit-transform: rotate(18deg); - transform: rotate(18deg); } - 16% { - -webkit-transform: rotate(-22deg); - transform: rotate(-22deg); } - 20% { - -webkit-transform: rotate(22deg); - transform: rotate(22deg); } - 32% { - -webkit-transform: rotate(-12deg); - transform: rotate(-12deg); } - 36% { - -webkit-transform: rotate(12deg); - transform: rotate(12deg); } - 40%, 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } } - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -.fa-rotate-90 { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } - -.fa-rotate-180 { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - -.fa-rotate-270 { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } - -.fa-flip-horizontal { - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.fa-flip-vertical { - -webkit-transform: scale(1, -1); - transform: scale(1, -1); } - -.fa-flip-both, -.fa-flip-horizontal.fa-flip-vertical { - -webkit-transform: scale(-1, -1); - transform: scale(-1, -1); } - -.fa-rotate-by { - -webkit-transform: rotate(var(--fa-rotate-angle, 0)); - transform: rotate(var(--fa-rotate-angle, 0)); } - -.fa-stack { - display: inline-block; - vertical-align: middle; - height: 2em; - position: relative; - width: 2.5em; } - -.fa-stack-1x, -.fa-stack-2x { - bottom: 0; - left: 0; - margin: auto; - position: absolute; - right: 0; - top: 0; - z-index: var(--fa-stack-z-index, auto); } - -.svg-inline--fa.fa-stack-1x { - height: 1em; - width: 1.25em; } - -.svg-inline--fa.fa-stack-2x { - height: 2em; - width: 2.5em; } - -.fa-inverse { - color: var(--fa-inverse, #fff); } - -.sr-only, -.fa-sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } - -.sr-only-focusable:not(:focus), -.fa-sr-only-focusable:not(:focus) { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } - -.svg-inline--fa .fa-primary { - fill: var(--fa-primary-color, currentColor); - opacity: var(--fa-primary-opacity, 1); } - -.svg-inline--fa .fa-secondary { - fill: var(--fa-secondary-color, currentColor); - opacity: var(--fa-secondary-opacity, 0.4); } - -.svg-inline--fa.fa-swap-opacity .fa-primary { - opacity: var(--fa-secondary-opacity, 0.4); } - -.svg-inline--fa.fa-swap-opacity .fa-secondary { - opacity: var(--fa-primary-opacity, 1); } - -.svg-inline--fa mask .fa-primary, -.svg-inline--fa mask .fa-secondary { - fill: black; } - -.fad.fa-inverse, -.fa-duotone.fa-inverse { - color: var(--fa-inverse, #fff); } diff --git a/resources/fontawesome/css/svg-with-js.min.css b/resources/fontawesome/css/svg-with-js.min.css deleted file mode 100644 index a99cebb..0000000 --- a/resources/fontawesome/css/svg-with-js.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-thin:normal 100 1em/1 "Font Awesome 6 Sharp";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)} \ No newline at end of file diff --git a/resources/fontawesome/css/v4-font-face.css b/resources/fontawesome/css/v4-font-face.css deleted file mode 100644 index 9e02283..0000000 --- a/resources/fontawesome/css/v4-font-face.css +++ /dev/null @@ -1,26 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); - unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } - -@font-face { - font-family: 'FontAwesome'; - font-display: block; - src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); - unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/resources/fontawesome/css/v4-font-face.min.css b/resources/fontawesome/css/v4-font-face.min.css deleted file mode 100644 index 140e09d..0000000 --- a/resources/fontawesome/css/v4-font-face.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/resources/fontawesome/css/v4-shims.css b/resources/fontawesome/css/v4-shims.css deleted file mode 100644 index ea60ea4..0000000 --- a/resources/fontawesome/css/v4-shims.css +++ /dev/null @@ -1,2194 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -.fa.fa-glass:before { - content: "\f000"; } - -.fa.fa-envelope-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-envelope-o:before { - content: "\f0e0"; } - -.fa.fa-star-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-star-o:before { - content: "\f005"; } - -.fa.fa-remove:before { - content: "\f00d"; } - -.fa.fa-close:before { - content: "\f00d"; } - -.fa.fa-gear:before { - content: "\f013"; } - -.fa.fa-trash-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-trash-o:before { - content: "\f2ed"; } - -.fa.fa-home:before { - content: "\f015"; } - -.fa.fa-file-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-o:before { - content: "\f15b"; } - -.fa.fa-clock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-clock-o:before { - content: "\f017"; } - -.fa.fa-arrow-circle-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-arrow-circle-o-down:before { - content: "\f358"; } - -.fa.fa-arrow-circle-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-arrow-circle-o-up:before { - content: "\f35b"; } - -.fa.fa-play-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-play-circle-o:before { - content: "\f144"; } - -.fa.fa-repeat:before { - content: "\f01e"; } - -.fa.fa-rotate-right:before { - content: "\f01e"; } - -.fa.fa-refresh:before { - content: "\f021"; } - -.fa.fa-list-alt { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-list-alt:before { - content: "\f022"; } - -.fa.fa-dedent:before { - content: "\f03b"; } - -.fa.fa-video-camera:before { - content: "\f03d"; } - -.fa.fa-picture-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-picture-o:before { - content: "\f03e"; } - -.fa.fa-photo { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-photo:before { - content: "\f03e"; } - -.fa.fa-image { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-image:before { - content: "\f03e"; } - -.fa.fa-map-marker:before { - content: "\f3c5"; } - -.fa.fa-pencil-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-pencil-square-o:before { - content: "\f044"; } - -.fa.fa-edit { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-edit:before { - content: "\f044"; } - -.fa.fa-share-square-o:before { - content: "\f14d"; } - -.fa.fa-check-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-check-square-o:before { - content: "\f14a"; } - -.fa.fa-arrows:before { - content: "\f0b2"; } - -.fa.fa-times-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-times-circle-o:before { - content: "\f057"; } - -.fa.fa-check-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-check-circle-o:before { - content: "\f058"; } - -.fa.fa-mail-forward:before { - content: "\f064"; } - -.fa.fa-expand:before { - content: "\f424"; } - -.fa.fa-compress:before { - content: "\f422"; } - -.fa.fa-eye { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-eye-slash { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-warning:before { - content: "\f071"; } - -.fa.fa-calendar:before { - content: "\f073"; } - -.fa.fa-arrows-v:before { - content: "\f338"; } - -.fa.fa-arrows-h:before { - content: "\f337"; } - -.fa.fa-bar-chart:before { - content: "\e0e3"; } - -.fa.fa-bar-chart-o:before { - content: "\e0e3"; } - -.fa.fa-twitter-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-twitter-square:before { - content: "\f081"; } - -.fa.fa-facebook-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-facebook-square:before { - content: "\f082"; } - -.fa.fa-gears:before { - content: "\f085"; } - -.fa.fa-thumbs-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-thumbs-o-up:before { - content: "\f164"; } - -.fa.fa-thumbs-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-thumbs-o-down:before { - content: "\f165"; } - -.fa.fa-heart-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-heart-o:before { - content: "\f004"; } - -.fa.fa-sign-out:before { - content: "\f2f5"; } - -.fa.fa-linkedin-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-linkedin-square:before { - content: "\f08c"; } - -.fa.fa-thumb-tack:before { - content: "\f08d"; } - -.fa.fa-external-link:before { - content: "\f35d"; } - -.fa.fa-sign-in:before { - content: "\f2f6"; } - -.fa.fa-github-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-github-square:before { - content: "\f092"; } - -.fa.fa-lemon-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-lemon-o:before { - content: "\f094"; } - -.fa.fa-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-square-o:before { - content: "\f0c8"; } - -.fa.fa-bookmark-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-bookmark-o:before { - content: "\f02e"; } - -.fa.fa-twitter { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-facebook { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-facebook:before { - content: "\f39e"; } - -.fa.fa-facebook-f { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-facebook-f:before { - content: "\f39e"; } - -.fa.fa-github { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-credit-card { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-feed:before { - content: "\f09e"; } - -.fa.fa-hdd-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hdd-o:before { - content: "\f0a0"; } - -.fa.fa-hand-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-o-right:before { - content: "\f0a4"; } - -.fa.fa-hand-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-o-left:before { - content: "\f0a5"; } - -.fa.fa-hand-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-o-up:before { - content: "\f0a6"; } - -.fa.fa-hand-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-o-down:before { - content: "\f0a7"; } - -.fa.fa-globe:before { - content: "\f57d"; } - -.fa.fa-tasks:before { - content: "\f828"; } - -.fa.fa-arrows-alt:before { - content: "\f31e"; } - -.fa.fa-group:before { - content: "\f0c0"; } - -.fa.fa-chain:before { - content: "\f0c1"; } - -.fa.fa-cut:before { - content: "\f0c4"; } - -.fa.fa-files-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-files-o:before { - content: "\f0c5"; } - -.fa.fa-floppy-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-floppy-o:before { - content: "\f0c7"; } - -.fa.fa-save { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-save:before { - content: "\f0c7"; } - -.fa.fa-navicon:before { - content: "\f0c9"; } - -.fa.fa-reorder:before { - content: "\f0c9"; } - -.fa.fa-magic:before { - content: "\e2ca"; } - -.fa.fa-pinterest { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pinterest-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pinterest-square:before { - content: "\f0d3"; } - -.fa.fa-google-plus-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-plus-square:before { - content: "\f0d4"; } - -.fa.fa-google-plus { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-plus:before { - content: "\f0d5"; } - -.fa.fa-money:before { - content: "\f3d1"; } - -.fa.fa-unsorted:before { - content: "\f0dc"; } - -.fa.fa-sort-desc:before { - content: "\f0dd"; } - -.fa.fa-sort-asc:before { - content: "\f0de"; } - -.fa.fa-linkedin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-linkedin:before { - content: "\f0e1"; } - -.fa.fa-rotate-left:before { - content: "\f0e2"; } - -.fa.fa-legal:before { - content: "\f0e3"; } - -.fa.fa-tachometer:before { - content: "\f625"; } - -.fa.fa-dashboard:before { - content: "\f625"; } - -.fa.fa-comment-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-comment-o:before { - content: "\f075"; } - -.fa.fa-comments-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-comments-o:before { - content: "\f086"; } - -.fa.fa-flash:before { - content: "\f0e7"; } - -.fa.fa-clipboard:before { - content: "\f0ea"; } - -.fa.fa-lightbulb-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-lightbulb-o:before { - content: "\f0eb"; } - -.fa.fa-exchange:before { - content: "\f362"; } - -.fa.fa-cloud-download:before { - content: "\f0ed"; } - -.fa.fa-cloud-upload:before { - content: "\f0ee"; } - -.fa.fa-bell-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-bell-o:before { - content: "\f0f3"; } - -.fa.fa-cutlery:before { - content: "\f2e7"; } - -.fa.fa-file-text-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-text-o:before { - content: "\f15c"; } - -.fa.fa-building-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-building-o:before { - content: "\f1ad"; } - -.fa.fa-hospital-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hospital-o:before { - content: "\f0f8"; } - -.fa.fa-tablet:before { - content: "\f3fa"; } - -.fa.fa-mobile:before { - content: "\f3cd"; } - -.fa.fa-mobile-phone:before { - content: "\f3cd"; } - -.fa.fa-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-circle-o:before { - content: "\f111"; } - -.fa.fa-mail-reply:before { - content: "\f3e5"; } - -.fa.fa-github-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-folder-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-folder-o:before { - content: "\f07b"; } - -.fa.fa-folder-open-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-folder-open-o:before { - content: "\f07c"; } - -.fa.fa-smile-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-smile-o:before { - content: "\f118"; } - -.fa.fa-frown-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-frown-o:before { - content: "\f119"; } - -.fa.fa-meh-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-meh-o:before { - content: "\f11a"; } - -.fa.fa-keyboard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-keyboard-o:before { - content: "\f11c"; } - -.fa.fa-flag-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-flag-o:before { - content: "\f024"; } - -.fa.fa-mail-reply-all:before { - content: "\f122"; } - -.fa.fa-star-half-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-star-half-o:before { - content: "\f5c0"; } - -.fa.fa-star-half-empty { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-star-half-empty:before { - content: "\f5c0"; } - -.fa.fa-star-half-full { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-star-half-full:before { - content: "\f5c0"; } - -.fa.fa-code-fork:before { - content: "\f126"; } - -.fa.fa-chain-broken:before { - content: "\f127"; } - -.fa.fa-unlink:before { - content: "\f127"; } - -.fa.fa-calendar-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-calendar-o:before { - content: "\f133"; } - -.fa.fa-maxcdn { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-html5 { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-css3 { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-unlock-alt:before { - content: "\f09c"; } - -.fa.fa-minus-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-minus-square-o:before { - content: "\f146"; } - -.fa.fa-level-up:before { - content: "\f3bf"; } - -.fa.fa-level-down:before { - content: "\f3be"; } - -.fa.fa-pencil-square:before { - content: "\f14b"; } - -.fa.fa-external-link-square:before { - content: "\f360"; } - -.fa.fa-compass { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-caret-square-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-caret-square-o-down:before { - content: "\f150"; } - -.fa.fa-toggle-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-toggle-down:before { - content: "\f150"; } - -.fa.fa-caret-square-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-caret-square-o-up:before { - content: "\f151"; } - -.fa.fa-toggle-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-toggle-up:before { - content: "\f151"; } - -.fa.fa-caret-square-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-caret-square-o-right:before { - content: "\f152"; } - -.fa.fa-toggle-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-toggle-right:before { - content: "\f152"; } - -.fa.fa-eur:before { - content: "\f153"; } - -.fa.fa-euro:before { - content: "\f153"; } - -.fa.fa-gbp:before { - content: "\f154"; } - -.fa.fa-usd:before { - content: "\24"; } - -.fa.fa-dollar:before { - content: "\24"; } - -.fa.fa-inr:before { - content: "\e1bc"; } - -.fa.fa-rupee:before { - content: "\e1bc"; } - -.fa.fa-jpy:before { - content: "\f157"; } - -.fa.fa-cny:before { - content: "\f157"; } - -.fa.fa-rmb:before { - content: "\f157"; } - -.fa.fa-yen:before { - content: "\f157"; } - -.fa.fa-rub:before { - content: "\f158"; } - -.fa.fa-ruble:before { - content: "\f158"; } - -.fa.fa-rouble:before { - content: "\f158"; } - -.fa.fa-krw:before { - content: "\f159"; } - -.fa.fa-won:before { - content: "\f159"; } - -.fa.fa-btc { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bitcoin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bitcoin:before { - content: "\f15a"; } - -.fa.fa-file-text:before { - content: "\f15c"; } - -.fa.fa-sort-alpha-asc:before { - content: "\f15d"; } - -.fa.fa-sort-alpha-desc:before { - content: "\f881"; } - -.fa.fa-sort-amount-asc:before { - content: "\f884"; } - -.fa.fa-sort-amount-desc:before { - content: "\f160"; } - -.fa.fa-sort-numeric-asc:before { - content: "\f162"; } - -.fa.fa-sort-numeric-desc:before { - content: "\f886"; } - -.fa.fa-youtube-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-youtube-square:before { - content: "\f431"; } - -.fa.fa-youtube { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-xing { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-xing-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-xing-square:before { - content: "\f169"; } - -.fa.fa-youtube-play { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-youtube-play:before { - content: "\f167"; } - -.fa.fa-dropbox { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-stack-overflow { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-instagram { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-flickr { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-adn { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bitbucket { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bitbucket-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bitbucket-square:before { - content: "\f171"; } - -.fa.fa-tumblr { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-tumblr-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-tumblr-square:before { - content: "\f174"; } - -.fa.fa-long-arrow-down:before { - content: "\f309"; } - -.fa.fa-long-arrow-up:before { - content: "\f30c"; } - -.fa.fa-long-arrow-left:before { - content: "\f30a"; } - -.fa.fa-long-arrow-right:before { - content: "\f30b"; } - -.fa.fa-apple { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-windows { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-android { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-linux { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-dribbble { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-skype { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-foursquare { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-trello { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gratipay { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gittip { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gittip:before { - content: "\f184"; } - -.fa.fa-sun-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-sun-o:before { - content: "\f185"; } - -.fa.fa-moon-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-moon-o:before { - content: "\f186"; } - -.fa.fa-vk { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-weibo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-renren { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pagelines { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-stack-exchange { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-arrow-circle-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-arrow-circle-o-right:before { - content: "\f35a"; } - -.fa.fa-arrow-circle-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-arrow-circle-o-left:before { - content: "\f359"; } - -.fa.fa-caret-square-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-caret-square-o-left:before { - content: "\f191"; } - -.fa.fa-toggle-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-toggle-left:before { - content: "\f191"; } - -.fa.fa-dot-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-dot-circle-o:before { - content: "\f192"; } - -.fa.fa-vimeo-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-vimeo-square:before { - content: "\f194"; } - -.fa.fa-try:before { - content: "\e2bb"; } - -.fa.fa-turkish-lira:before { - content: "\e2bb"; } - -.fa.fa-plus-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-plus-square-o:before { - content: "\f0fe"; } - -.fa.fa-slack { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wordpress { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-openid { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-institution:before { - content: "\f19c"; } - -.fa.fa-bank:before { - content: "\f19c"; } - -.fa.fa-mortar-board:before { - content: "\f19d"; } - -.fa.fa-yahoo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-reddit { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-reddit-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-reddit-square:before { - content: "\f1a2"; } - -.fa.fa-stumbleupon-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-stumbleupon { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-delicious { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-digg { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pied-piper-pp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pied-piper-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-drupal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-joomla { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-behance { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-behance-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-behance-square:before { - content: "\f1b5"; } - -.fa.fa-steam { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-steam-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-steam-square:before { - content: "\f1b7"; } - -.fa.fa-automobile:before { - content: "\f1b9"; } - -.fa.fa-cab:before { - content: "\f1ba"; } - -.fa.fa-spotify { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-deviantart { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-soundcloud { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-file-pdf-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-pdf-o:before { - content: "\f1c1"; } - -.fa.fa-file-word-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-word-o:before { - content: "\f1c2"; } - -.fa.fa-file-excel-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-excel-o:before { - content: "\f1c3"; } - -.fa.fa-file-powerpoint-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-powerpoint-o:before { - content: "\f1c4"; } - -.fa.fa-file-image-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-image-o:before { - content: "\f1c5"; } - -.fa.fa-file-photo-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-photo-o:before { - content: "\f1c5"; } - -.fa.fa-file-picture-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-picture-o:before { - content: "\f1c5"; } - -.fa.fa-file-archive-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-archive-o:before { - content: "\f1c6"; } - -.fa.fa-file-zip-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-zip-o:before { - content: "\f1c6"; } - -.fa.fa-file-audio-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-audio-o:before { - content: "\f1c7"; } - -.fa.fa-file-sound-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-sound-o:before { - content: "\f1c7"; } - -.fa.fa-file-video-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-video-o:before { - content: "\f1c8"; } - -.fa.fa-file-movie-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-movie-o:before { - content: "\f1c8"; } - -.fa.fa-file-code-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-file-code-o:before { - content: "\f1c9"; } - -.fa.fa-vine { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-codepen { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-jsfiddle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-life-bouy:before { - content: "\f1cd"; } - -.fa.fa-life-buoy:before { - content: "\f1cd"; } - -.fa.fa-life-saver:before { - content: "\f1cd"; } - -.fa.fa-support:before { - content: "\f1cd"; } - -.fa.fa-circle-o-notch:before { - content: "\f1ce"; } - -.fa.fa-rebel { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-ra { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-ra:before { - content: "\f1d0"; } - -.fa.fa-resistance { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-resistance:before { - content: "\f1d0"; } - -.fa.fa-empire { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-ge { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-ge:before { - content: "\f1d1"; } - -.fa.fa-git-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-git-square:before { - content: "\f1d2"; } - -.fa.fa-git { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-hacker-news { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-y-combinator-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-y-combinator-square:before { - content: "\f1d4"; } - -.fa.fa-yc-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-yc-square:before { - content: "\f1d4"; } - -.fa.fa-tencent-weibo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-qq { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-weixin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wechat { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wechat:before { - content: "\f1d7"; } - -.fa.fa-send:before { - content: "\f1d8"; } - -.fa.fa-paper-plane-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-paper-plane-o:before { - content: "\f1d8"; } - -.fa.fa-send-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-send-o:before { - content: "\f1d8"; } - -.fa.fa-circle-thin { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-circle-thin:before { - content: "\f111"; } - -.fa.fa-header:before { - content: "\f1dc"; } - -.fa.fa-futbol-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-futbol-o:before { - content: "\f1e3"; } - -.fa.fa-soccer-ball-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-soccer-ball-o:before { - content: "\f1e3"; } - -.fa.fa-slideshare { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-twitch { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-yelp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-newspaper-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-newspaper-o:before { - content: "\f1ea"; } - -.fa.fa-paypal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-wallet { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-visa { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-mastercard { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-discover { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-amex { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-paypal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-stripe { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bell-slash-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-bell-slash-o:before { - content: "\f1f6"; } - -.fa.fa-trash:before { - content: "\f2ed"; } - -.fa.fa-copyright { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-eyedropper:before { - content: "\f1fb"; } - -.fa.fa-area-chart:before { - content: "\f1fe"; } - -.fa.fa-pie-chart:before { - content: "\f200"; } - -.fa.fa-line-chart:before { - content: "\f201"; } - -.fa.fa-lastfm { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-lastfm-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-lastfm-square:before { - content: "\f203"; } - -.fa.fa-ioxhost { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-angellist { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-cc:before { - content: "\f20a"; } - -.fa.fa-ils:before { - content: "\f20b"; } - -.fa.fa-shekel:before { - content: "\f20b"; } - -.fa.fa-sheqel:before { - content: "\f20b"; } - -.fa.fa-buysellads { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-connectdevelop { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-dashcube { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-forumbee { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-leanpub { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-sellsy { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-shirtsinbulk { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-simplybuilt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-skyatlas { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-diamond { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-diamond:before { - content: "\f3a5"; } - -.fa.fa-transgender:before { - content: "\f224"; } - -.fa.fa-intersex:before { - content: "\f224"; } - -.fa.fa-transgender-alt:before { - content: "\f225"; } - -.fa.fa-facebook-official { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-facebook-official:before { - content: "\f09a"; } - -.fa.fa-pinterest-p { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-whatsapp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-hotel:before { - content: "\f236"; } - -.fa.fa-viacoin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-medium { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-y-combinator { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-yc { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-yc:before { - content: "\f23b"; } - -.fa.fa-optin-monster { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-opencart { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-expeditedssl { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-battery-4:before { - content: "\f240"; } - -.fa.fa-battery:before { - content: "\f240"; } - -.fa.fa-battery-3:before { - content: "\f241"; } - -.fa.fa-battery-2:before { - content: "\f242"; } - -.fa.fa-battery-1:before { - content: "\f243"; } - -.fa.fa-battery-0:before { - content: "\f244"; } - -.fa.fa-object-group { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-object-ungroup { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-sticky-note-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-sticky-note-o:before { - content: "\f249"; } - -.fa.fa-cc-jcb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-cc-diners-club { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-clone { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hourglass-o:before { - content: "\f254"; } - -.fa.fa-hourglass-1:before { - content: "\f251"; } - -.fa.fa-hourglass-2:before { - content: "\f252"; } - -.fa.fa-hourglass-3:before { - content: "\f253"; } - -.fa.fa-hand-rock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-rock-o:before { - content: "\f255"; } - -.fa.fa-hand-grab-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-grab-o:before { - content: "\f255"; } - -.fa.fa-hand-paper-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-paper-o:before { - content: "\f256"; } - -.fa.fa-hand-stop-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-stop-o:before { - content: "\f256"; } - -.fa.fa-hand-scissors-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-scissors-o:before { - content: "\f257"; } - -.fa.fa-hand-lizard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-lizard-o:before { - content: "\f258"; } - -.fa.fa-hand-spock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-spock-o:before { - content: "\f259"; } - -.fa.fa-hand-pointer-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-pointer-o:before { - content: "\f25a"; } - -.fa.fa-hand-peace-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-hand-peace-o:before { - content: "\f25b"; } - -.fa.fa-registered { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-creative-commons { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gg { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gg-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-odnoklassniki { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-odnoklassniki-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-odnoklassniki-square:before { - content: "\f264"; } - -.fa.fa-get-pocket { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wikipedia-w { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-safari { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-chrome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-firefox { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-opera { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-internet-explorer { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-television:before { - content: "\f26c"; } - -.fa.fa-contao { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-500px { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-amazon { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-calendar-plus-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-calendar-plus-o:before { - content: "\f271"; } - -.fa.fa-calendar-minus-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-calendar-minus-o:before { - content: "\f272"; } - -.fa.fa-calendar-times-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-calendar-times-o:before { - content: "\f273"; } - -.fa.fa-calendar-check-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-calendar-check-o:before { - content: "\f274"; } - -.fa.fa-map-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-map-o:before { - content: "\f279"; } - -.fa.fa-commenting:before { - content: "\f4ad"; } - -.fa.fa-commenting-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-commenting-o:before { - content: "\f4ad"; } - -.fa.fa-houzz { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-vimeo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-vimeo:before { - content: "\f27d"; } - -.fa.fa-black-tie { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-fonticons { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-reddit-alien { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-edge { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-credit-card-alt:before { - content: "\f09d"; } - -.fa.fa-codiepie { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-modx { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-fort-awesome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-usb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-product-hunt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-mixcloud { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-scribd { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-pause-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-pause-circle-o:before { - content: "\f28b"; } - -.fa.fa-stop-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-stop-circle-o:before { - content: "\f28d"; } - -.fa.fa-bluetooth { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-bluetooth-b { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-gitlab { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wpbeginner { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wpforms { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-envira { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wheelchair-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wheelchair-alt:before { - content: "\f368"; } - -.fa.fa-question-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-question-circle-o:before { - content: "\f059"; } - -.fa.fa-volume-control-phone:before { - content: "\f2a0"; } - -.fa.fa-asl-interpreting:before { - content: "\f2a3"; } - -.fa.fa-deafness:before { - content: "\f2a4"; } - -.fa.fa-hard-of-hearing:before { - content: "\f2a4"; } - -.fa.fa-glide { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-glide-g { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-signing:before { - content: "\f2a7"; } - -.fa.fa-viadeo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-viadeo-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-viadeo-square:before { - content: "\f2aa"; } - -.fa.fa-snapchat { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-snapchat-ghost { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-snapchat-ghost:before { - content: "\f2ab"; } - -.fa.fa-snapchat-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-snapchat-square:before { - content: "\f2ad"; } - -.fa.fa-pied-piper { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-first-order { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-yoast { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-themeisle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-plus-official { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-plus-official:before { - content: "\f2b3"; } - -.fa.fa-google-plus-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-google-plus-circle:before { - content: "\f2b3"; } - -.fa.fa-font-awesome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-fa { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-fa:before { - content: "\f2b4"; } - -.fa.fa-handshake-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-handshake-o:before { - content: "\f2b5"; } - -.fa.fa-envelope-open-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-envelope-open-o:before { - content: "\f2b6"; } - -.fa.fa-linode { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-address-book-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-address-book-o:before { - content: "\f2b9"; } - -.fa.fa-vcard:before { - content: "\f2bb"; } - -.fa.fa-address-card-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-address-card-o:before { - content: "\f2bb"; } - -.fa.fa-vcard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-vcard-o:before { - content: "\f2bb"; } - -.fa.fa-user-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-user-circle-o:before { - content: "\f2bd"; } - -.fa.fa-user-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-user-o:before { - content: "\f007"; } - -.fa.fa-id-badge { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-drivers-license:before { - content: "\f2c2"; } - -.fa.fa-id-card-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-id-card-o:before { - content: "\f2c2"; } - -.fa.fa-drivers-license-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-drivers-license-o:before { - content: "\f2c2"; } - -.fa.fa-quora { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-free-code-camp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-telegram { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-thermometer-4:before { - content: "\f2c7"; } - -.fa.fa-thermometer:before { - content: "\f2c7"; } - -.fa.fa-thermometer-3:before { - content: "\f2c8"; } - -.fa.fa-thermometer-2:before { - content: "\f2c9"; } - -.fa.fa-thermometer-1:before { - content: "\f2ca"; } - -.fa.fa-thermometer-0:before { - content: "\f2cb"; } - -.fa.fa-bathtub:before { - content: "\f2cd"; } - -.fa.fa-s15:before { - content: "\f2cd"; } - -.fa.fa-window-maximize { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-window-restore { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-times-rectangle:before { - content: "\f410"; } - -.fa.fa-window-close-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-window-close-o:before { - content: "\f410"; } - -.fa.fa-times-rectangle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-times-rectangle-o:before { - content: "\f410"; } - -.fa.fa-bandcamp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-grav { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-etsy { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-imdb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-ravelry { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-eercast { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-eercast:before { - content: "\f2da"; } - -.fa.fa-snowflake-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } - -.fa.fa-snowflake-o:before { - content: "\f2dc"; } - -.fa.fa-superpowers { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-wpexplorer { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } - -.fa.fa-meetup { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } diff --git a/resources/fontawesome/css/v4-shims.min.css b/resources/fontawesome/css/v4-shims.min.css deleted file mode 100644 index 09baf5f..0000000 --- a/resources/fontawesome/css/v4-shims.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/resources/fontawesome/css/v5-font-face.css b/resources/fontawesome/css/v5-font-face.css deleted file mode 100644 index 7b736b1..0000000 --- a/resources/fontawesome/css/v5-font-face.css +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -@font-face { - font-family: 'Font Awesome 5 Brands'; - font-display: block; - font-weight: 400; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - -@font-face { - font-family: 'Font Awesome 5 Free'; - font-display: block; - font-weight: 900; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - -@font-face { - font-family: 'Font Awesome 5 Free'; - font-display: block; - font-weight: 400; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } diff --git a/resources/fontawesome/css/v5-font-face.min.css b/resources/fontawesome/css/v5-font-face.min.css deleted file mode 100644 index 0cb8f13..0000000 --- a/resources/fontawesome/css/v5-font-face.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */ -@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")} \ No newline at end of file diff --git a/resources/fontawesome/css/fontawesome.css b/resources/fontawesome/fontawesome.css old mode 100644 new mode 100755 similarity index 98% rename from resources/fontawesome/css/fontawesome.css rename to resources/fontawesome/fontawesome.css index ca00c63..e7eb5fe --- a/resources/fontawesome/css/fontawesome.css +++ b/resources/fontawesome/fontawesome.css @@ -1,19 +1,23 @@ /*! - * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. + * Copyright 2022 Fonticons, Inc. */ .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-weight: var(--fa-style, 900); } .fa, -.fa-classic, -.fa-sharp, .fas, .fa-solid, .far, .fa-regular, +.fal, +.fa-light, +.fat, +.fa-thin, +.fad, +.fa-duotone, .fab, .fa-brands { -moz-osx-font-smoothing: grayscale; @@ -24,17 +28,6 @@ line-height: 1; text-rendering: auto; } -.fas, -.fa-classic, -.fa-solid, -.far, -.fa-regular { - font-family: 'Font Awesome 6 Free'; } - -.fab, -.fa-brands { - font-family: 'Font Awesome 6 Brands'; } - .fa-1x { font-size: 1em; } @@ -131,8 +124,8 @@ .fa-beat { -webkit-animation-name: fa-beat; animation-name: fa-beat; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -145,8 +138,8 @@ .fa-bounce { -webkit-animation-name: fa-bounce; animation-name: fa-bounce; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -159,8 +152,8 @@ .fa-fade { -webkit-animation-name: fa-fade; animation-name: fa-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -173,8 +166,8 @@ .fa-beat-fade { -webkit-animation-name: fa-beat-fade; animation-name: fa-beat-fade; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -187,8 +180,8 @@ .fa-flip { -webkit-animation-name: fa-flip; animation-name: fa-flip; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -201,8 +194,8 @@ .fa-shake { -webkit-animation-name: fa-shake; animation-name: fa-shake; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 1s); @@ -215,8 +208,8 @@ .fa-spin { -webkit-animation-name: fa-spin; animation-name: fa-spin; - -webkit-animation-delay: var(--fa-animation-delay, 0s); - animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); -webkit-animation-direction: var(--fa-animation-direction, normal); animation-direction: var(--fa-animation-direction, normal); -webkit-animation-duration: var(--fa-animation-duration, 2s); @@ -258,10 +251,8 @@ animation-duration: 1ms; -webkit-animation-iteration-count: 1; animation-iteration-count: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - -webkit-transition-duration: 0s; - transition-duration: 0s; } } + transition-delay: 0s; + transition-duration: 0s; } } @-webkit-keyframes fa-beat { 0%, 90% { @@ -463,8 +454,8 @@ transform: scale(-1, -1); } .fa-rotate-by { - -webkit-transform: rotate(var(--fa-rotate-angle, 0)); - transform: rotate(var(--fa-rotate-angle, 0)); } + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } .fa-stack { display: inline-block; @@ -493,7 +484,6 @@ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ - .fa-0::before { content: "\30"; } @@ -524,284 +514,8 @@ readers do not read off random characters that represent icons */ .fa-9::before { content: "\39"; } -.fa-fill-drip::before { - content: "\f576"; } - -.fa-arrows-to-circle::before { - content: "\e4bd"; } - -.fa-circle-chevron-right::before { - content: "\f138"; } - -.fa-chevron-circle-right::before { - content: "\f138"; } - -.fa-at::before { - content: "\40"; } - -.fa-trash-can::before { - content: "\f2ed"; } - -.fa-trash-alt::before { - content: "\f2ed"; } - -.fa-text-height::before { - content: "\f034"; } - -.fa-user-xmark::before { - content: "\f235"; } - -.fa-user-times::before { - content: "\f235"; } - -.fa-stethoscope::before { - content: "\f0f1"; } - -.fa-message::before { - content: "\f27a"; } - -.fa-comment-alt::before { - content: "\f27a"; } - -.fa-info::before { - content: "\f129"; } - -.fa-down-left-and-up-right-to-center::before { - content: "\f422"; } - -.fa-compress-alt::before { - content: "\f422"; } - -.fa-explosion::before { - content: "\e4e9"; } - -.fa-file-lines::before { - content: "\f15c"; } - -.fa-file-alt::before { - content: "\f15c"; } - -.fa-file-text::before { - content: "\f15c"; } - -.fa-wave-square::before { - content: "\f83e"; } - -.fa-ring::before { - content: "\f70b"; } - -.fa-building-un::before { - content: "\e4d9"; } - -.fa-dice-three::before { - content: "\f527"; } - -.fa-calendar-days::before { - content: "\f073"; } - -.fa-calendar-alt::before { - content: "\f073"; } - -.fa-anchor-circle-check::before { - content: "\e4aa"; } - -.fa-building-circle-arrow-right::before { - content: "\e4d1"; } - -.fa-volleyball::before { - content: "\f45f"; } - -.fa-volleyball-ball::before { - content: "\f45f"; } - -.fa-arrows-up-to-line::before { - content: "\e4c2"; } - -.fa-sort-down::before { - content: "\f0dd"; } - -.fa-sort-desc::before { - content: "\f0dd"; } - -.fa-circle-minus::before { - content: "\f056"; } - -.fa-minus-circle::before { - content: "\f056"; } - -.fa-door-open::before { - content: "\f52b"; } - -.fa-right-from-bracket::before { - content: "\f2f5"; } - -.fa-sign-out-alt::before { - content: "\f2f5"; } - -.fa-atom::before { - content: "\f5d2"; } - -.fa-soap::before { - content: "\e06e"; } - -.fa-icons::before { - content: "\f86d"; } - -.fa-heart-music-camera-bolt::before { - content: "\f86d"; } - -.fa-microphone-lines-slash::before { - content: "\f539"; } - -.fa-microphone-alt-slash::before { - content: "\f539"; } - -.fa-bridge-circle-check::before { - content: "\e4c9"; } - -.fa-pump-medical::before { - content: "\e06a"; } - -.fa-fingerprint::before { - content: "\f577"; } - -.fa-hand-point-right::before { - content: "\f0a4"; } - -.fa-magnifying-glass-location::before { - content: "\f689"; } - -.fa-search-location::before { - content: "\f689"; } - -.fa-forward-step::before { - content: "\f051"; } - -.fa-step-forward::before { - content: "\f051"; } - -.fa-face-smile-beam::before { - content: "\f5b8"; } - -.fa-smile-beam::before { - content: "\f5b8"; } - -.fa-flag-checkered::before { - content: "\f11e"; } - -.fa-football::before { - content: "\f44e"; } - -.fa-football-ball::before { - content: "\f44e"; } - -.fa-school-circle-exclamation::before { - content: "\e56c"; } - -.fa-crop::before { - content: "\f125"; } - -.fa-angles-down::before { - content: "\f103"; } - -.fa-angle-double-down::before { - content: "\f103"; } - -.fa-users-rectangle::before { - content: "\e594"; } - -.fa-people-roof::before { - content: "\e537"; } - -.fa-people-line::before { - content: "\e534"; } - -.fa-beer-mug-empty::before { - content: "\f0fc"; } - -.fa-beer::before { - content: "\f0fc"; } - -.fa-diagram-predecessor::before { - content: "\e477"; } - -.fa-arrow-up-long::before { - content: "\f176"; } - -.fa-long-arrow-up::before { - content: "\f176"; } - -.fa-fire-flame-simple::before { - content: "\f46a"; } - -.fa-burn::before { - content: "\f46a"; } - -.fa-person::before { - content: "\f183"; } - -.fa-male::before { - content: "\f183"; } - -.fa-laptop::before { - content: "\f109"; } - -.fa-file-csv::before { - content: "\f6dd"; } - -.fa-menorah::before { - content: "\f676"; } - -.fa-truck-plane::before { - content: "\e58f"; } - -.fa-record-vinyl::before { - content: "\f8d9"; } - -.fa-face-grin-stars::before { - content: "\f587"; } - -.fa-grin-stars::before { - content: "\f587"; } - -.fa-bong::before { - content: "\f55c"; } - -.fa-spaghetti-monster-flying::before { - content: "\f67b"; } - -.fa-pastafarianism::before { - content: "\f67b"; } - -.fa-arrow-down-up-across-line::before { - content: "\e4af"; } - -.fa-spoon::before { - content: "\f2e5"; } - -.fa-utensil-spoon::before { - content: "\f2e5"; } - -.fa-jar-wheat::before { - content: "\e517"; } - -.fa-envelopes-bulk::before { - content: "\f674"; } - -.fa-mail-bulk::before { - content: "\f674"; } - -.fa-file-circle-exclamation::before { - content: "\e4eb"; } - -.fa-circle-h::before { - content: "\f47e"; } - -.fa-hospital-symbol::before { - content: "\f47e"; } - -.fa-pager::before { - content: "\f815"; } +.fa-a::before { + content: "\41"; } .fa-address-book::before { content: "\f2b9"; } @@ -809,1704 +523,6 @@ readers do not read off random characters that represent icons */ .fa-contact-book::before { content: "\f2b9"; } -.fa-strikethrough::before { - content: "\f0cc"; } - -.fa-k::before { - content: "\4b"; } - -.fa-landmark-flag::before { - content: "\e51c"; } - -.fa-pencil::before { - content: "\f303"; } - -.fa-pencil-alt::before { - content: "\f303"; } - -.fa-backward::before { - content: "\f04a"; } - -.fa-caret-right::before { - content: "\f0da"; } - -.fa-comments::before { - content: "\f086"; } - -.fa-paste::before { - content: "\f0ea"; } - -.fa-file-clipboard::before { - content: "\f0ea"; } - -.fa-code-pull-request::before { - content: "\e13c"; } - -.fa-clipboard-list::before { - content: "\f46d"; } - -.fa-truck-ramp-box::before { - content: "\f4de"; } - -.fa-truck-loading::before { - content: "\f4de"; } - -.fa-user-check::before { - content: "\f4fc"; } - -.fa-vial-virus::before { - content: "\e597"; } - -.fa-sheet-plastic::before { - content: "\e571"; } - -.fa-blog::before { - content: "\f781"; } - -.fa-user-ninja::before { - content: "\f504"; } - -.fa-person-arrow-up-from-line::before { - content: "\e539"; } - -.fa-scroll-torah::before { - content: "\f6a0"; } - -.fa-torah::before { - content: "\f6a0"; } - -.fa-broom-ball::before { - content: "\f458"; } - -.fa-quidditch::before { - content: "\f458"; } - -.fa-quidditch-broom-ball::before { - content: "\f458"; } - -.fa-toggle-off::before { - content: "\f204"; } - -.fa-box-archive::before { - content: "\f187"; } - -.fa-archive::before { - content: "\f187"; } - -.fa-person-drowning::before { - content: "\e545"; } - -.fa-arrow-down-9-1::before { - content: "\f886"; } - -.fa-sort-numeric-desc::before { - content: "\f886"; } - -.fa-sort-numeric-down-alt::before { - content: "\f886"; } - -.fa-face-grin-tongue-squint::before { - content: "\f58a"; } - -.fa-grin-tongue-squint::before { - content: "\f58a"; } - -.fa-spray-can::before { - content: "\f5bd"; } - -.fa-truck-monster::before { - content: "\f63b"; } - -.fa-w::before { - content: "\57"; } - -.fa-earth-africa::before { - content: "\f57c"; } - -.fa-globe-africa::before { - content: "\f57c"; } - -.fa-rainbow::before { - content: "\f75b"; } - -.fa-circle-notch::before { - content: "\f1ce"; } - -.fa-tablet-screen-button::before { - content: "\f3fa"; } - -.fa-tablet-alt::before { - content: "\f3fa"; } - -.fa-paw::before { - content: "\f1b0"; } - -.fa-cloud::before { - content: "\f0c2"; } - -.fa-trowel-bricks::before { - content: "\e58a"; } - -.fa-face-flushed::before { - content: "\f579"; } - -.fa-flushed::before { - content: "\f579"; } - -.fa-hospital-user::before { - content: "\f80d"; } - -.fa-tent-arrow-left-right::before { - content: "\e57f"; } - -.fa-gavel::before { - content: "\f0e3"; } - -.fa-legal::before { - content: "\f0e3"; } - -.fa-binoculars::before { - content: "\f1e5"; } - -.fa-microphone-slash::before { - content: "\f131"; } - -.fa-box-tissue::before { - content: "\e05b"; } - -.fa-motorcycle::before { - content: "\f21c"; } - -.fa-bell-concierge::before { - content: "\f562"; } - -.fa-concierge-bell::before { - content: "\f562"; } - -.fa-pen-ruler::before { - content: "\f5ae"; } - -.fa-pencil-ruler::before { - content: "\f5ae"; } - -.fa-people-arrows::before { - content: "\e068"; } - -.fa-people-arrows-left-right::before { - content: "\e068"; } - -.fa-mars-and-venus-burst::before { - content: "\e523"; } - -.fa-square-caret-right::before { - content: "\f152"; } - -.fa-caret-square-right::before { - content: "\f152"; } - -.fa-scissors::before { - content: "\f0c4"; } - -.fa-cut::before { - content: "\f0c4"; } - -.fa-sun-plant-wilt::before { - content: "\e57a"; } - -.fa-toilets-portable::before { - content: "\e584"; } - -.fa-hockey-puck::before { - content: "\f453"; } - -.fa-table::before { - content: "\f0ce"; } - -.fa-magnifying-glass-arrow-right::before { - content: "\e521"; } - -.fa-tachograph-digital::before { - content: "\f566"; } - -.fa-digital-tachograph::before { - content: "\f566"; } - -.fa-users-slash::before { - content: "\e073"; } - -.fa-clover::before { - content: "\e139"; } - -.fa-reply::before { - content: "\f3e5"; } - -.fa-mail-reply::before { - content: "\f3e5"; } - -.fa-star-and-crescent::before { - content: "\f699"; } - -.fa-house-fire::before { - content: "\e50c"; } - -.fa-square-minus::before { - content: "\f146"; } - -.fa-minus-square::before { - content: "\f146"; } - -.fa-helicopter::before { - content: "\f533"; } - -.fa-compass::before { - content: "\f14e"; } - -.fa-square-caret-down::before { - content: "\f150"; } - -.fa-caret-square-down::before { - content: "\f150"; } - -.fa-file-circle-question::before { - content: "\e4ef"; } - -.fa-laptop-code::before { - content: "\f5fc"; } - -.fa-swatchbook::before { - content: "\f5c3"; } - -.fa-prescription-bottle::before { - content: "\f485"; } - -.fa-bars::before { - content: "\f0c9"; } - -.fa-navicon::before { - content: "\f0c9"; } - -.fa-people-group::before { - content: "\e533"; } - -.fa-hourglass-end::before { - content: "\f253"; } - -.fa-hourglass-3::before { - content: "\f253"; } - -.fa-heart-crack::before { - content: "\f7a9"; } - -.fa-heart-broken::before { - content: "\f7a9"; } - -.fa-square-up-right::before { - content: "\f360"; } - -.fa-external-link-square-alt::before { - content: "\f360"; } - -.fa-face-kiss-beam::before { - content: "\f597"; } - -.fa-kiss-beam::before { - content: "\f597"; } - -.fa-film::before { - content: "\f008"; } - -.fa-ruler-horizontal::before { - content: "\f547"; } - -.fa-people-robbery::before { - content: "\e536"; } - -.fa-lightbulb::before { - content: "\f0eb"; } - -.fa-caret-left::before { - content: "\f0d9"; } - -.fa-circle-exclamation::before { - content: "\f06a"; } - -.fa-exclamation-circle::before { - content: "\f06a"; } - -.fa-school-circle-xmark::before { - content: "\e56d"; } - -.fa-arrow-right-from-bracket::before { - content: "\f08b"; } - -.fa-sign-out::before { - content: "\f08b"; } - -.fa-circle-chevron-down::before { - content: "\f13a"; } - -.fa-chevron-circle-down::before { - content: "\f13a"; } - -.fa-unlock-keyhole::before { - content: "\f13e"; } - -.fa-unlock-alt::before { - content: "\f13e"; } - -.fa-cloud-showers-heavy::before { - content: "\f740"; } - -.fa-headphones-simple::before { - content: "\f58f"; } - -.fa-headphones-alt::before { - content: "\f58f"; } - -.fa-sitemap::before { - content: "\f0e8"; } - -.fa-circle-dollar-to-slot::before { - content: "\f4b9"; } - -.fa-donate::before { - content: "\f4b9"; } - -.fa-memory::before { - content: "\f538"; } - -.fa-road-spikes::before { - content: "\e568"; } - -.fa-fire-burner::before { - content: "\e4f1"; } - -.fa-flag::before { - content: "\f024"; } - -.fa-hanukiah::before { - content: "\f6e6"; } - -.fa-feather::before { - content: "\f52d"; } - -.fa-volume-low::before { - content: "\f027"; } - -.fa-volume-down::before { - content: "\f027"; } - -.fa-comment-slash::before { - content: "\f4b3"; } - -.fa-cloud-sun-rain::before { - content: "\f743"; } - -.fa-compress::before { - content: "\f066"; } - -.fa-wheat-awn::before { - content: "\e2cd"; } - -.fa-wheat-alt::before { - content: "\e2cd"; } - -.fa-ankh::before { - content: "\f644"; } - -.fa-hands-holding-child::before { - content: "\e4fa"; } - -.fa-asterisk::before { - content: "\2a"; } - -.fa-square-check::before { - content: "\f14a"; } - -.fa-check-square::before { - content: "\f14a"; } - -.fa-peseta-sign::before { - content: "\e221"; } - -.fa-heading::before { - content: "\f1dc"; } - -.fa-header::before { - content: "\f1dc"; } - -.fa-ghost::before { - content: "\f6e2"; } - -.fa-list::before { - content: "\f03a"; } - -.fa-list-squares::before { - content: "\f03a"; } - -.fa-square-phone-flip::before { - content: "\f87b"; } - -.fa-phone-square-alt::before { - content: "\f87b"; } - -.fa-cart-plus::before { - content: "\f217"; } - -.fa-gamepad::before { - content: "\f11b"; } - -.fa-circle-dot::before { - content: "\f192"; } - -.fa-dot-circle::before { - content: "\f192"; } - -.fa-face-dizzy::before { - content: "\f567"; } - -.fa-dizzy::before { - content: "\f567"; } - -.fa-egg::before { - content: "\f7fb"; } - -.fa-house-medical-circle-xmark::before { - content: "\e513"; } - -.fa-campground::before { - content: "\f6bb"; } - -.fa-folder-plus::before { - content: "\f65e"; } - -.fa-futbol::before { - content: "\f1e3"; } - -.fa-futbol-ball::before { - content: "\f1e3"; } - -.fa-soccer-ball::before { - content: "\f1e3"; } - -.fa-paintbrush::before { - content: "\f1fc"; } - -.fa-paint-brush::before { - content: "\f1fc"; } - -.fa-lock::before { - content: "\f023"; } - -.fa-gas-pump::before { - content: "\f52f"; } - -.fa-hot-tub-person::before { - content: "\f593"; } - -.fa-hot-tub::before { - content: "\f593"; } - -.fa-map-location::before { - content: "\f59f"; } - -.fa-map-marked::before { - content: "\f59f"; } - -.fa-house-flood-water::before { - content: "\e50e"; } - -.fa-tree::before { - content: "\f1bb"; } - -.fa-bridge-lock::before { - content: "\e4cc"; } - -.fa-sack-dollar::before { - content: "\f81d"; } - -.fa-pen-to-square::before { - content: "\f044"; } - -.fa-edit::before { - content: "\f044"; } - -.fa-car-side::before { - content: "\f5e4"; } - -.fa-share-nodes::before { - content: "\f1e0"; } - -.fa-share-alt::before { - content: "\f1e0"; } - -.fa-heart-circle-minus::before { - content: "\e4ff"; } - -.fa-hourglass-half::before { - content: "\f252"; } - -.fa-hourglass-2::before { - content: "\f252"; } - -.fa-microscope::before { - content: "\f610"; } - -.fa-sink::before { - content: "\e06d"; } - -.fa-bag-shopping::before { - content: "\f290"; } - -.fa-shopping-bag::before { - content: "\f290"; } - -.fa-arrow-down-z-a::before { - content: "\f881"; } - -.fa-sort-alpha-desc::before { - content: "\f881"; } - -.fa-sort-alpha-down-alt::before { - content: "\f881"; } - -.fa-mitten::before { - content: "\f7b5"; } - -.fa-person-rays::before { - content: "\e54d"; } - -.fa-users::before { - content: "\f0c0"; } - -.fa-eye-slash::before { - content: "\f070"; } - -.fa-flask-vial::before { - content: "\e4f3"; } - -.fa-hand::before { - content: "\f256"; } - -.fa-hand-paper::before { - content: "\f256"; } - -.fa-om::before { - content: "\f679"; } - -.fa-worm::before { - content: "\e599"; } - -.fa-house-circle-xmark::before { - content: "\e50b"; } - -.fa-plug::before { - content: "\f1e6"; } - -.fa-chevron-up::before { - content: "\f077"; } - -.fa-hand-spock::before { - content: "\f259"; } - -.fa-stopwatch::before { - content: "\f2f2"; } - -.fa-face-kiss::before { - content: "\f596"; } - -.fa-kiss::before { - content: "\f596"; } - -.fa-bridge-circle-xmark::before { - content: "\e4cb"; } - -.fa-face-grin-tongue::before { - content: "\f589"; } - -.fa-grin-tongue::before { - content: "\f589"; } - -.fa-chess-bishop::before { - content: "\f43a"; } - -.fa-face-grin-wink::before { - content: "\f58c"; } - -.fa-grin-wink::before { - content: "\f58c"; } - -.fa-ear-deaf::before { - content: "\f2a4"; } - -.fa-deaf::before { - content: "\f2a4"; } - -.fa-deafness::before { - content: "\f2a4"; } - -.fa-hard-of-hearing::before { - content: "\f2a4"; } - -.fa-road-circle-check::before { - content: "\e564"; } - -.fa-dice-five::before { - content: "\f523"; } - -.fa-square-rss::before { - content: "\f143"; } - -.fa-rss-square::before { - content: "\f143"; } - -.fa-land-mine-on::before { - content: "\e51b"; } - -.fa-i-cursor::before { - content: "\f246"; } - -.fa-stamp::before { - content: "\f5bf"; } - -.fa-stairs::before { - content: "\e289"; } - -.fa-i::before { - content: "\49"; } - -.fa-hryvnia-sign::before { - content: "\f6f2"; } - -.fa-hryvnia::before { - content: "\f6f2"; } - -.fa-pills::before { - content: "\f484"; } - -.fa-face-grin-wide::before { - content: "\f581"; } - -.fa-grin-alt::before { - content: "\f581"; } - -.fa-tooth::before { - content: "\f5c9"; } - -.fa-v::before { - content: "\56"; } - -.fa-bangladeshi-taka-sign::before { - content: "\e2e6"; } - -.fa-bicycle::before { - content: "\f206"; } - -.fa-staff-snake::before { - content: "\e579"; } - -.fa-rod-asclepius::before { - content: "\e579"; } - -.fa-rod-snake::before { - content: "\e579"; } - -.fa-staff-aesculapius::before { - content: "\e579"; } - -.fa-head-side-cough-slash::before { - content: "\e062"; } - -.fa-truck-medical::before { - content: "\f0f9"; } - -.fa-ambulance::before { - content: "\f0f9"; } - -.fa-wheat-awn-circle-exclamation::before { - content: "\e598"; } - -.fa-snowman::before { - content: "\f7d0"; } - -.fa-mortar-pestle::before { - content: "\f5a7"; } - -.fa-road-barrier::before { - content: "\e562"; } - -.fa-school::before { - content: "\f549"; } - -.fa-igloo::before { - content: "\f7ae"; } - -.fa-joint::before { - content: "\f595"; } - -.fa-angle-right::before { - content: "\f105"; } - -.fa-horse::before { - content: "\f6f0"; } - -.fa-q::before { - content: "\51"; } - -.fa-g::before { - content: "\47"; } - -.fa-notes-medical::before { - content: "\f481"; } - -.fa-temperature-half::before { - content: "\f2c9"; } - -.fa-temperature-2::before { - content: "\f2c9"; } - -.fa-thermometer-2::before { - content: "\f2c9"; } - -.fa-thermometer-half::before { - content: "\f2c9"; } - -.fa-dong-sign::before { - content: "\e169"; } - -.fa-capsules::before { - content: "\f46b"; } - -.fa-poo-storm::before { - content: "\f75a"; } - -.fa-poo-bolt::before { - content: "\f75a"; } - -.fa-face-frown-open::before { - content: "\f57a"; } - -.fa-frown-open::before { - content: "\f57a"; } - -.fa-hand-point-up::before { - content: "\f0a6"; } - -.fa-money-bill::before { - content: "\f0d6"; } - -.fa-bookmark::before { - content: "\f02e"; } - -.fa-align-justify::before { - content: "\f039"; } - -.fa-umbrella-beach::before { - content: "\f5ca"; } - -.fa-helmet-un::before { - content: "\e503"; } - -.fa-bullseye::before { - content: "\f140"; } - -.fa-bacon::before { - content: "\f7e5"; } - -.fa-hand-point-down::before { - content: "\f0a7"; } - -.fa-arrow-up-from-bracket::before { - content: "\e09a"; } - -.fa-folder::before { - content: "\f07b"; } - -.fa-folder-blank::before { - content: "\f07b"; } - -.fa-file-waveform::before { - content: "\f478"; } - -.fa-file-medical-alt::before { - content: "\f478"; } - -.fa-radiation::before { - content: "\f7b9"; } - -.fa-chart-simple::before { - content: "\e473"; } - -.fa-mars-stroke::before { - content: "\f229"; } - -.fa-vial::before { - content: "\f492"; } - -.fa-gauge::before { - content: "\f624"; } - -.fa-dashboard::before { - content: "\f624"; } - -.fa-gauge-med::before { - content: "\f624"; } - -.fa-tachometer-alt-average::before { - content: "\f624"; } - -.fa-wand-magic-sparkles::before { - content: "\e2ca"; } - -.fa-magic-wand-sparkles::before { - content: "\e2ca"; } - -.fa-e::before { - content: "\45"; } - -.fa-pen-clip::before { - content: "\f305"; } - -.fa-pen-alt::before { - content: "\f305"; } - -.fa-bridge-circle-exclamation::before { - content: "\e4ca"; } - -.fa-user::before { - content: "\f007"; } - -.fa-school-circle-check::before { - content: "\e56b"; } - -.fa-dumpster::before { - content: "\f793"; } - -.fa-van-shuttle::before { - content: "\f5b6"; } - -.fa-shuttle-van::before { - content: "\f5b6"; } - -.fa-building-user::before { - content: "\e4da"; } - -.fa-square-caret-left::before { - content: "\f191"; } - -.fa-caret-square-left::before { - content: "\f191"; } - -.fa-highlighter::before { - content: "\f591"; } - -.fa-key::before { - content: "\f084"; } - -.fa-bullhorn::before { - content: "\f0a1"; } - -.fa-globe::before { - content: "\f0ac"; } - -.fa-synagogue::before { - content: "\f69b"; } - -.fa-person-half-dress::before { - content: "\e548"; } - -.fa-road-bridge::before { - content: "\e563"; } - -.fa-location-arrow::before { - content: "\f124"; } - -.fa-c::before { - content: "\43"; } - -.fa-tablet-button::before { - content: "\f10a"; } - -.fa-building-lock::before { - content: "\e4d6"; } - -.fa-pizza-slice::before { - content: "\f818"; } - -.fa-money-bill-wave::before { - content: "\f53a"; } - -.fa-chart-area::before { - content: "\f1fe"; } - -.fa-area-chart::before { - content: "\f1fe"; } - -.fa-house-flag::before { - content: "\e50d"; } - -.fa-person-circle-minus::before { - content: "\e540"; } - -.fa-ban::before { - content: "\f05e"; } - -.fa-cancel::before { - content: "\f05e"; } - -.fa-camera-rotate::before { - content: "\e0d8"; } - -.fa-spray-can-sparkles::before { - content: "\f5d0"; } - -.fa-air-freshener::before { - content: "\f5d0"; } - -.fa-star::before { - content: "\f005"; } - -.fa-repeat::before { - content: "\f363"; } - -.fa-cross::before { - content: "\f654"; } - -.fa-box::before { - content: "\f466"; } - -.fa-venus-mars::before { - content: "\f228"; } - -.fa-arrow-pointer::before { - content: "\f245"; } - -.fa-mouse-pointer::before { - content: "\f245"; } - -.fa-maximize::before { - content: "\f31e"; } - -.fa-expand-arrows-alt::before { - content: "\f31e"; } - -.fa-charging-station::before { - content: "\f5e7"; } - -.fa-shapes::before { - content: "\f61f"; } - -.fa-triangle-circle-square::before { - content: "\f61f"; } - -.fa-shuffle::before { - content: "\f074"; } - -.fa-random::before { - content: "\f074"; } - -.fa-person-running::before { - content: "\f70c"; } - -.fa-running::before { - content: "\f70c"; } - -.fa-mobile-retro::before { - content: "\e527"; } - -.fa-grip-lines-vertical::before { - content: "\f7a5"; } - -.fa-spider::before { - content: "\f717"; } - -.fa-hands-bound::before { - content: "\e4f9"; } - -.fa-file-invoice-dollar::before { - content: "\f571"; } - -.fa-plane-circle-exclamation::before { - content: "\e556"; } - -.fa-x-ray::before { - content: "\f497"; } - -.fa-spell-check::before { - content: "\f891"; } - -.fa-slash::before { - content: "\f715"; } - -.fa-computer-mouse::before { - content: "\f8cc"; } - -.fa-mouse::before { - content: "\f8cc"; } - -.fa-arrow-right-to-bracket::before { - content: "\f090"; } - -.fa-sign-in::before { - content: "\f090"; } - -.fa-shop-slash::before { - content: "\e070"; } - -.fa-store-alt-slash::before { - content: "\e070"; } - -.fa-server::before { - content: "\f233"; } - -.fa-virus-covid-slash::before { - content: "\e4a9"; } - -.fa-shop-lock::before { - content: "\e4a5"; } - -.fa-hourglass-start::before { - content: "\f251"; } - -.fa-hourglass-1::before { - content: "\f251"; } - -.fa-blender-phone::before { - content: "\f6b6"; } - -.fa-building-wheat::before { - content: "\e4db"; } - -.fa-person-breastfeeding::before { - content: "\e53a"; } - -.fa-right-to-bracket::before { - content: "\f2f6"; } - -.fa-sign-in-alt::before { - content: "\f2f6"; } - -.fa-venus::before { - content: "\f221"; } - -.fa-passport::before { - content: "\f5ab"; } - -.fa-heart-pulse::before { - content: "\f21e"; } - -.fa-heartbeat::before { - content: "\f21e"; } - -.fa-people-carry-box::before { - content: "\f4ce"; } - -.fa-people-carry::before { - content: "\f4ce"; } - -.fa-temperature-high::before { - content: "\f769"; } - -.fa-microchip::before { - content: "\f2db"; } - -.fa-crown::before { - content: "\f521"; } - -.fa-weight-hanging::before { - content: "\f5cd"; } - -.fa-xmarks-lines::before { - content: "\e59a"; } - -.fa-file-prescription::before { - content: "\f572"; } - -.fa-weight-scale::before { - content: "\f496"; } - -.fa-weight::before { - content: "\f496"; } - -.fa-user-group::before { - content: "\f500"; } - -.fa-user-friends::before { - content: "\f500"; } - -.fa-arrow-up-a-z::before { - content: "\f15e"; } - -.fa-sort-alpha-up::before { - content: "\f15e"; } - -.fa-chess-knight::before { - content: "\f441"; } - -.fa-face-laugh-squint::before { - content: "\f59b"; } - -.fa-laugh-squint::before { - content: "\f59b"; } - -.fa-wheelchair::before { - content: "\f193"; } - -.fa-circle-arrow-up::before { - content: "\f0aa"; } - -.fa-arrow-circle-up::before { - content: "\f0aa"; } - -.fa-toggle-on::before { - content: "\f205"; } - -.fa-person-walking::before { - content: "\f554"; } - -.fa-walking::before { - content: "\f554"; } - -.fa-l::before { - content: "\4c"; } - -.fa-fire::before { - content: "\f06d"; } - -.fa-bed-pulse::before { - content: "\f487"; } - -.fa-procedures::before { - content: "\f487"; } - -.fa-shuttle-space::before { - content: "\f197"; } - -.fa-space-shuttle::before { - content: "\f197"; } - -.fa-face-laugh::before { - content: "\f599"; } - -.fa-laugh::before { - content: "\f599"; } - -.fa-folder-open::before { - content: "\f07c"; } - -.fa-heart-circle-plus::before { - content: "\e500"; } - -.fa-code-fork::before { - content: "\e13b"; } - -.fa-city::before { - content: "\f64f"; } - -.fa-microphone-lines::before { - content: "\f3c9"; } - -.fa-microphone-alt::before { - content: "\f3c9"; } - -.fa-pepper-hot::before { - content: "\f816"; } - -.fa-unlock::before { - content: "\f09c"; } - -.fa-colon-sign::before { - content: "\e140"; } - -.fa-headset::before { - content: "\f590"; } - -.fa-store-slash::before { - content: "\e071"; } - -.fa-road-circle-xmark::before { - content: "\e566"; } - -.fa-user-minus::before { - content: "\f503"; } - -.fa-mars-stroke-up::before { - content: "\f22a"; } - -.fa-mars-stroke-v::before { - content: "\f22a"; } - -.fa-champagne-glasses::before { - content: "\f79f"; } - -.fa-glass-cheers::before { - content: "\f79f"; } - -.fa-clipboard::before { - content: "\f328"; } - -.fa-house-circle-exclamation::before { - content: "\e50a"; } - -.fa-file-arrow-up::before { - content: "\f574"; } - -.fa-file-upload::before { - content: "\f574"; } - -.fa-wifi::before { - content: "\f1eb"; } - -.fa-wifi-3::before { - content: "\f1eb"; } - -.fa-wifi-strong::before { - content: "\f1eb"; } - -.fa-bath::before { - content: "\f2cd"; } - -.fa-bathtub::before { - content: "\f2cd"; } - -.fa-underline::before { - content: "\f0cd"; } - -.fa-user-pen::before { - content: "\f4ff"; } - -.fa-user-edit::before { - content: "\f4ff"; } - -.fa-signature::before { - content: "\f5b7"; } - -.fa-stroopwafel::before { - content: "\f551"; } - -.fa-bold::before { - content: "\f032"; } - -.fa-anchor-lock::before { - content: "\e4ad"; } - -.fa-building-ngo::before { - content: "\e4d7"; } - -.fa-manat-sign::before { - content: "\e1d5"; } - -.fa-not-equal::before { - content: "\f53e"; } - -.fa-border-top-left::before { - content: "\f853"; } - -.fa-border-style::before { - content: "\f853"; } - -.fa-map-location-dot::before { - content: "\f5a0"; } - -.fa-map-marked-alt::before { - content: "\f5a0"; } - -.fa-jedi::before { - content: "\f669"; } - -.fa-square-poll-vertical::before { - content: "\f681"; } - -.fa-poll::before { - content: "\f681"; } - -.fa-mug-hot::before { - content: "\f7b6"; } - -.fa-car-battery::before { - content: "\f5df"; } - -.fa-battery-car::before { - content: "\f5df"; } - -.fa-gift::before { - content: "\f06b"; } - -.fa-dice-two::before { - content: "\f528"; } - -.fa-chess-queen::before { - content: "\f445"; } - -.fa-glasses::before { - content: "\f530"; } - -.fa-chess-board::before { - content: "\f43c"; } - -.fa-building-circle-check::before { - content: "\e4d2"; } - -.fa-person-chalkboard::before { - content: "\e53d"; } - -.fa-mars-stroke-right::before { - content: "\f22b"; } - -.fa-mars-stroke-h::before { - content: "\f22b"; } - -.fa-hand-back-fist::before { - content: "\f255"; } - -.fa-hand-rock::before { - content: "\f255"; } - -.fa-square-caret-up::before { - content: "\f151"; } - -.fa-caret-square-up::before { - content: "\f151"; } - -.fa-cloud-showers-water::before { - content: "\e4e4"; } - -.fa-chart-bar::before { - content: "\f080"; } - -.fa-bar-chart::before { - content: "\f080"; } - -.fa-hands-bubbles::before { - content: "\e05e"; } - -.fa-hands-wash::before { - content: "\e05e"; } - -.fa-less-than-equal::before { - content: "\f537"; } - -.fa-train::before { - content: "\f238"; } - -.fa-eye-low-vision::before { - content: "\f2a8"; } - -.fa-low-vision::before { - content: "\f2a8"; } - -.fa-crow::before { - content: "\f520"; } - -.fa-sailboat::before { - content: "\e445"; } - -.fa-window-restore::before { - content: "\f2d2"; } - -.fa-square-plus::before { - content: "\f0fe"; } - -.fa-plus-square::before { - content: "\f0fe"; } - -.fa-torii-gate::before { - content: "\f6a1"; } - -.fa-frog::before { - content: "\f52e"; } - -.fa-bucket::before { - content: "\e4cf"; } - -.fa-image::before { - content: "\f03e"; } - -.fa-microphone::before { - content: "\f130"; } - -.fa-cow::before { - content: "\f6c8"; } - -.fa-caret-up::before { - content: "\f0d8"; } - -.fa-screwdriver::before { - content: "\f54a"; } - -.fa-folder-closed::before { - content: "\e185"; } - -.fa-house-tsunami::before { - content: "\e515"; } - -.fa-square-nfi::before { - content: "\e576"; } - -.fa-arrow-up-from-ground-water::before { - content: "\e4b5"; } - -.fa-martini-glass::before { - content: "\f57b"; } - -.fa-glass-martini-alt::before { - content: "\f57b"; } - -.fa-rotate-left::before { - content: "\f2ea"; } - -.fa-rotate-back::before { - content: "\f2ea"; } - -.fa-rotate-backward::before { - content: "\f2ea"; } - -.fa-undo-alt::before { - content: "\f2ea"; } - -.fa-table-columns::before { - content: "\f0db"; } - -.fa-columns::before { - content: "\f0db"; } - -.fa-lemon::before { - content: "\f094"; } - -.fa-head-side-mask::before { - content: "\e063"; } - -.fa-handshake::before { - content: "\f2b5"; } - -.fa-gem::before { - content: "\f3a5"; } - -.fa-dolly::before { - content: "\f472"; } - -.fa-dolly-box::before { - content: "\f472"; } - -.fa-smoking::before { - content: "\f48d"; } - -.fa-minimize::before { - content: "\f78c"; } - -.fa-compress-arrows-alt::before { - content: "\f78c"; } - -.fa-monument::before { - content: "\f5a6"; } - -.fa-snowplow::before { - content: "\f7d2"; } - -.fa-angles-right::before { - content: "\f101"; } - -.fa-angle-double-right::before { - content: "\f101"; } - -.fa-cannabis::before { - content: "\f55f"; } - -.fa-circle-play::before { - content: "\f144"; } - -.fa-play-circle::before { - content: "\f144"; } - -.fa-tablets::before { - content: "\f490"; } - -.fa-ethernet::before { - content: "\f796"; } - -.fa-euro-sign::before { - content: "\f153"; } - -.fa-eur::before { - content: "\f153"; } - -.fa-euro::before { - content: "\f153"; } - -.fa-chair::before { - content: "\f6c0"; } - -.fa-circle-check::before { - content: "\f058"; } - -.fa-check-circle::before { - content: "\f058"; } - -.fa-circle-stop::before { - content: "\f28d"; } - -.fa-stop-circle::before { - content: "\f28d"; } - -.fa-compass-drafting::before { - content: "\f568"; } - -.fa-drafting-compass::before { - content: "\f568"; } - -.fa-plate-wheat::before { - content: "\e55a"; } - -.fa-icicles::before { - content: "\f7ad"; } - -.fa-person-shelter::before { - content: "\e54f"; } - -.fa-neuter::before { - content: "\f22c"; } - -.fa-id-badge::before { - content: "\f2c1"; } - -.fa-marker::before { - content: "\f5a1"; } - -.fa-face-laugh-beam::before { - content: "\f59a"; } - -.fa-laugh-beam::before { - content: "\f59a"; } - -.fa-helicopter-symbol::before { - content: "\e502"; } - -.fa-universal-access::before { - content: "\f29a"; } - -.fa-circle-chevron-up::before { - content: "\f139"; } - -.fa-chevron-circle-up::before { - content: "\f139"; } - -.fa-lari-sign::before { - content: "\e1c8"; } - -.fa-volcano::before { - content: "\f770"; } - -.fa-person-walking-dashed-line-arrow-right::before { - content: "\e553"; } - -.fa-sterling-sign::before { - content: "\f154"; } - -.fa-gbp::before { - content: "\f154"; } - -.fa-pound-sign::before { - content: "\f154"; } - -.fa-viruses::before { - content: "\e076"; } - -.fa-square-person-confined::before { - content: "\e577"; } - -.fa-user-tie::before { - content: "\f508"; } - -.fa-arrow-down-long::before { - content: "\f175"; } - -.fa-long-arrow-down::before { - content: "\f175"; } - -.fa-tent-arrow-down-to-line::before { - content: "\e57e"; } - -.fa-certificate::before { - content: "\f0a3"; } - -.fa-reply-all::before { - content: "\f122"; } - -.fa-mail-reply-all::before { - content: "\f122"; } - -.fa-suitcase::before { - content: "\f0f2"; } - -.fa-person-skating::before { - content: "\f7c5"; } - -.fa-skating::before { - content: "\f7c5"; } - -.fa-filter-circle-dollar::before { - content: "\f662"; } - -.fa-funnel-dollar::before { - content: "\f662"; } - -.fa-camera-retro::before { - content: "\f083"; } - -.fa-circle-arrow-down::before { - content: "\f0ab"; } - -.fa-arrow-circle-down::before { - content: "\f0ab"; } - -.fa-file-import::before { - content: "\f56f"; } - -.fa-arrow-right-to-file::before { - content: "\f56f"; } - -.fa-square-arrow-up-right::before { - content: "\f14c"; } - -.fa-external-link-square::before { - content: "\f14c"; } - -.fa-box-open::before { - content: "\f49e"; } - -.fa-scroll::before { - content: "\f70e"; } - -.fa-spa::before { - content: "\f5bb"; } - -.fa-location-pin-lock::before { - content: "\e51f"; } - -.fa-pause::before { - content: "\f04c"; } - -.fa-hill-avalanche::before { - content: "\e507"; } - -.fa-temperature-empty::before { - content: "\f2cb"; } - -.fa-temperature-0::before { - content: "\f2cb"; } - -.fa-thermometer-0::before { - content: "\f2cb"; } - -.fa-thermometer-empty::before { - content: "\f2cb"; } - -.fa-bomb::before { - content: "\f1e2"; } - -.fa-registered::before { - content: "\f25d"; } - .fa-address-card::before { content: "\f2bb"; } @@ -2516,1304 +532,62 @@ readers do not read off random characters that represent icons */ .fa-vcard::before { content: "\f2bb"; } -.fa-scale-unbalanced-flip::before { - content: "\f516"; } +.fa-align-center::before { + content: "\f037"; } -.fa-balance-scale-right::before { - content: "\f516"; } - -.fa-subscript::before { - content: "\f12c"; } - -.fa-diamond-turn-right::before { - content: "\f5eb"; } - -.fa-directions::before { - content: "\f5eb"; } - -.fa-burst::before { - content: "\e4dc"; } - -.fa-house-laptop::before { - content: "\e066"; } - -.fa-laptop-house::before { - content: "\e066"; } - -.fa-face-tired::before { - content: "\f5c8"; } - -.fa-tired::before { - content: "\f5c8"; } - -.fa-money-bills::before { - content: "\e1f3"; } - -.fa-smog::before { - content: "\f75f"; } - -.fa-crutch::before { - content: "\f7f7"; } - -.fa-cloud-arrow-up::before { - content: "\f0ee"; } - -.fa-cloud-upload::before { - content: "\f0ee"; } - -.fa-cloud-upload-alt::before { - content: "\f0ee"; } - -.fa-palette::before { - content: "\f53f"; } - -.fa-arrows-turn-right::before { - content: "\e4c0"; } - -.fa-vest::before { - content: "\e085"; } - -.fa-ferry::before { - content: "\e4ea"; } - -.fa-arrows-down-to-people::before { - content: "\e4b9"; } - -.fa-seedling::before { - content: "\f4d8"; } - -.fa-sprout::before { - content: "\f4d8"; } - -.fa-left-right::before { - content: "\f337"; } - -.fa-arrows-alt-h::before { - content: "\f337"; } - -.fa-boxes-packing::before { - content: "\e4c7"; } - -.fa-circle-arrow-left::before { - content: "\f0a8"; } - -.fa-arrow-circle-left::before { - content: "\f0a8"; } - -.fa-group-arrows-rotate::before { - content: "\e4f6"; } - -.fa-bowl-food::before { - content: "\e4c6"; } - -.fa-candy-cane::before { - content: "\f786"; } - -.fa-arrow-down-wide-short::before { - content: "\f160"; } - -.fa-sort-amount-asc::before { - content: "\f160"; } - -.fa-sort-amount-down::before { - content: "\f160"; } - -.fa-cloud-bolt::before { - content: "\f76c"; } - -.fa-thunderstorm::before { - content: "\f76c"; } - -.fa-text-slash::before { - content: "\f87d"; } - -.fa-remove-format::before { - content: "\f87d"; } - -.fa-face-smile-wink::before { - content: "\f4da"; } - -.fa-smile-wink::before { - content: "\f4da"; } - -.fa-file-word::before { - content: "\f1c2"; } - -.fa-file-powerpoint::before { - content: "\f1c4"; } - -.fa-arrows-left-right::before { - content: "\f07e"; } - -.fa-arrows-h::before { - content: "\f07e"; } - -.fa-house-lock::before { - content: "\e510"; } - -.fa-cloud-arrow-down::before { - content: "\f0ed"; } - -.fa-cloud-download::before { - content: "\f0ed"; } - -.fa-cloud-download-alt::before { - content: "\f0ed"; } - -.fa-children::before { - content: "\e4e1"; } - -.fa-chalkboard::before { - content: "\f51b"; } - -.fa-blackboard::before { - content: "\f51b"; } - -.fa-user-large-slash::before { - content: "\f4fa"; } - -.fa-user-alt-slash::before { - content: "\f4fa"; } - -.fa-envelope-open::before { - content: "\f2b6"; } - -.fa-handshake-simple-slash::before { - content: "\e05f"; } - -.fa-handshake-alt-slash::before { - content: "\e05f"; } - -.fa-mattress-pillow::before { - content: "\e525"; } - -.fa-guarani-sign::before { - content: "\e19a"; } - -.fa-arrows-rotate::before { - content: "\f021"; } - -.fa-refresh::before { - content: "\f021"; } - -.fa-sync::before { - content: "\f021"; } - -.fa-fire-extinguisher::before { - content: "\f134"; } - -.fa-cruzeiro-sign::before { - content: "\e152"; } - -.fa-greater-than-equal::before { - content: "\f532"; } - -.fa-shield-halved::before { - content: "\f3ed"; } - -.fa-shield-alt::before { - content: "\f3ed"; } - -.fa-book-atlas::before { - content: "\f558"; } - -.fa-atlas::before { - content: "\f558"; } - -.fa-virus::before { - content: "\e074"; } - -.fa-envelope-circle-check::before { - content: "\e4e8"; } - -.fa-layer-group::before { - content: "\f5fd"; } - -.fa-arrows-to-dot::before { - content: "\e4be"; } - -.fa-archway::before { - content: "\f557"; } - -.fa-heart-circle-check::before { - content: "\e4fd"; } - -.fa-house-chimney-crack::before { - content: "\f6f1"; } - -.fa-house-damage::before { - content: "\f6f1"; } - -.fa-file-zipper::before { - content: "\f1c6"; } - -.fa-file-archive::before { - content: "\f1c6"; } - -.fa-square::before { - content: "\f0c8"; } - -.fa-martini-glass-empty::before { - content: "\f000"; } - -.fa-glass-martini::before { - content: "\f000"; } - -.fa-couch::before { - content: "\f4b8"; } - -.fa-cedi-sign::before { - content: "\e0df"; } - -.fa-italic::before { - content: "\f033"; } - -.fa-table-cells-column-lock::before { - content: "\e678"; } - -.fa-church::before { - content: "\f51d"; } - -.fa-comments-dollar::before { - content: "\f653"; } - -.fa-democrat::before { - content: "\f747"; } - -.fa-z::before { - content: "\5a"; } - -.fa-person-skiing::before { - content: "\f7c9"; } - -.fa-skiing::before { - content: "\f7c9"; } - -.fa-road-lock::before { - content: "\e567"; } - -.fa-a::before { - content: "\41"; } - -.fa-temperature-arrow-down::before { - content: "\e03f"; } - -.fa-temperature-down::before { - content: "\e03f"; } - -.fa-feather-pointed::before { - content: "\f56b"; } - -.fa-feather-alt::before { - content: "\f56b"; } - -.fa-p::before { - content: "\50"; } - -.fa-snowflake::before { - content: "\f2dc"; } - -.fa-newspaper::before { - content: "\f1ea"; } - -.fa-rectangle-ad::before { - content: "\f641"; } - -.fa-ad::before { - content: "\f641"; } - -.fa-circle-arrow-right::before { - content: "\f0a9"; } - -.fa-arrow-circle-right::before { - content: "\f0a9"; } - -.fa-filter-circle-xmark::before { - content: "\e17b"; } - -.fa-locust::before { - content: "\e520"; } - -.fa-sort::before { - content: "\f0dc"; } - -.fa-unsorted::before { - content: "\f0dc"; } - -.fa-list-ol::before { - content: "\f0cb"; } - -.fa-list-1-2::before { - content: "\f0cb"; } - -.fa-list-numeric::before { - content: "\f0cb"; } - -.fa-person-dress-burst::before { - content: "\e544"; } - -.fa-money-check-dollar::before { - content: "\f53d"; } - -.fa-money-check-alt::before { - content: "\f53d"; } - -.fa-vector-square::before { - content: "\f5cb"; } - -.fa-bread-slice::before { - content: "\f7ec"; } - -.fa-language::before { - content: "\f1ab"; } - -.fa-face-kiss-wink-heart::before { - content: "\f598"; } - -.fa-kiss-wink-heart::before { - content: "\f598"; } - -.fa-filter::before { - content: "\f0b0"; } - -.fa-question::before { - content: "\3f"; } - -.fa-file-signature::before { - content: "\f573"; } - -.fa-up-down-left-right::before { - content: "\f0b2"; } - -.fa-arrows-alt::before { - content: "\f0b2"; } - -.fa-house-chimney-user::before { - content: "\e065"; } - -.fa-hand-holding-heart::before { - content: "\f4be"; } - -.fa-puzzle-piece::before { - content: "\f12e"; } - -.fa-money-check::before { - content: "\f53c"; } - -.fa-star-half-stroke::before { - content: "\f5c0"; } - -.fa-star-half-alt::before { - content: "\f5c0"; } - -.fa-code::before { - content: "\f121"; } - -.fa-whiskey-glass::before { - content: "\f7a0"; } - -.fa-glass-whiskey::before { - content: "\f7a0"; } - -.fa-building-circle-exclamation::before { - content: "\e4d3"; } - -.fa-magnifying-glass-chart::before { - content: "\e522"; } - -.fa-arrow-up-right-from-square::before { - content: "\f08e"; } - -.fa-external-link::before { - content: "\f08e"; } - -.fa-cubes-stacked::before { - content: "\e4e6"; } - -.fa-won-sign::before { - content: "\f159"; } - -.fa-krw::before { - content: "\f159"; } - -.fa-won::before { - content: "\f159"; } - -.fa-virus-covid::before { - content: "\e4a8"; } - -.fa-austral-sign::before { - content: "\e0a9"; } - -.fa-f::before { - content: "\46"; } - -.fa-leaf::before { - content: "\f06c"; } - -.fa-road::before { - content: "\f018"; } - -.fa-taxi::before { - content: "\f1ba"; } - -.fa-cab::before { - content: "\f1ba"; } - -.fa-person-circle-plus::before { - content: "\e541"; } - -.fa-chart-pie::before { - content: "\f200"; } - -.fa-pie-chart::before { - content: "\f200"; } - -.fa-bolt-lightning::before { - content: "\e0b7"; } - -.fa-sack-xmark::before { - content: "\e56a"; } - -.fa-file-excel::before { - content: "\f1c3"; } - -.fa-file-contract::before { - content: "\f56c"; } - -.fa-fish-fins::before { - content: "\e4f2"; } - -.fa-building-flag::before { - content: "\e4d5"; } - -.fa-face-grin-beam::before { - content: "\f582"; } - -.fa-grin-beam::before { - content: "\f582"; } - -.fa-object-ungroup::before { - content: "\f248"; } - -.fa-poop::before { - content: "\f619"; } - -.fa-location-pin::before { - content: "\f041"; } - -.fa-map-marker::before { - content: "\f041"; } - -.fa-kaaba::before { - content: "\f66b"; } - -.fa-toilet-paper::before { - content: "\f71e"; } - -.fa-helmet-safety::before { - content: "\f807"; } - -.fa-hard-hat::before { - content: "\f807"; } - -.fa-hat-hard::before { - content: "\f807"; } - -.fa-eject::before { - content: "\f052"; } - -.fa-circle-right::before { - content: "\f35a"; } - -.fa-arrow-alt-circle-right::before { - content: "\f35a"; } - -.fa-plane-circle-check::before { - content: "\e555"; } - -.fa-face-rolling-eyes::before { - content: "\f5a5"; } - -.fa-meh-rolling-eyes::before { - content: "\f5a5"; } - -.fa-object-group::before { - content: "\f247"; } - -.fa-chart-line::before { - content: "\f201"; } - -.fa-line-chart::before { - content: "\f201"; } - -.fa-mask-ventilator::before { - content: "\e524"; } - -.fa-arrow-right::before { - content: "\f061"; } - -.fa-signs-post::before { - content: "\f277"; } - -.fa-map-signs::before { - content: "\f277"; } - -.fa-cash-register::before { - content: "\f788"; } - -.fa-person-circle-question::before { - content: "\e542"; } - -.fa-h::before { - content: "\48"; } - -.fa-tarp::before { - content: "\e57b"; } - -.fa-screwdriver-wrench::before { - content: "\f7d9"; } - -.fa-tools::before { - content: "\f7d9"; } - -.fa-arrows-to-eye::before { - content: "\e4bf"; } - -.fa-plug-circle-bolt::before { - content: "\e55b"; } - -.fa-heart::before { - content: "\f004"; } - -.fa-mars-and-venus::before { - content: "\f224"; } - -.fa-house-user::before { - content: "\e1b0"; } - -.fa-home-user::before { - content: "\e1b0"; } - -.fa-dumpster-fire::before { - content: "\f794"; } - -.fa-house-crack::before { - content: "\e3b1"; } - -.fa-martini-glass-citrus::before { - content: "\f561"; } - -.fa-cocktail::before { - content: "\f561"; } - -.fa-face-surprise::before { - content: "\f5c2"; } - -.fa-surprise::before { - content: "\f5c2"; } - -.fa-bottle-water::before { - content: "\e4c5"; } - -.fa-circle-pause::before { - content: "\f28b"; } - -.fa-pause-circle::before { - content: "\f28b"; } - -.fa-toilet-paper-slash::before { - content: "\e072"; } - -.fa-apple-whole::before { - content: "\f5d1"; } - -.fa-apple-alt::before { - content: "\f5d1"; } - -.fa-kitchen-set::before { - content: "\e51a"; } - -.fa-r::before { - content: "\52"; } - -.fa-temperature-quarter::before { - content: "\f2ca"; } - -.fa-temperature-1::before { - content: "\f2ca"; } - -.fa-thermometer-1::before { - content: "\f2ca"; } - -.fa-thermometer-quarter::before { - content: "\f2ca"; } - -.fa-cube::before { - content: "\f1b2"; } - -.fa-bitcoin-sign::before { - content: "\e0b4"; } - -.fa-shield-dog::before { - content: "\e573"; } - -.fa-solar-panel::before { - content: "\f5ba"; } - -.fa-lock-open::before { - content: "\f3c1"; } - -.fa-elevator::before { - content: "\e16d"; } - -.fa-money-bill-transfer::before { - content: "\e528"; } - -.fa-money-bill-trend-up::before { - content: "\e529"; } - -.fa-house-flood-water-circle-arrow-right::before { - content: "\e50f"; } - -.fa-square-poll-horizontal::before { - content: "\f682"; } - -.fa-poll-h::before { - content: "\f682"; } - -.fa-circle::before { - content: "\f111"; } - -.fa-backward-fast::before { - content: "\f049"; } - -.fa-fast-backward::before { - content: "\f049"; } - -.fa-recycle::before { - content: "\f1b8"; } - -.fa-user-astronaut::before { - content: "\f4fb"; } - -.fa-plane-slash::before { - content: "\e069"; } - -.fa-trademark::before { - content: "\f25c"; } - -.fa-basketball::before { - content: "\f434"; } - -.fa-basketball-ball::before { - content: "\f434"; } - -.fa-satellite-dish::before { - content: "\f7c0"; } - -.fa-circle-up::before { - content: "\f35b"; } - -.fa-arrow-alt-circle-up::before { - content: "\f35b"; } - -.fa-mobile-screen-button::before { - content: "\f3cd"; } - -.fa-mobile-alt::before { - content: "\f3cd"; } - -.fa-volume-high::before { - content: "\f028"; } - -.fa-volume-up::before { - content: "\f028"; } - -.fa-users-rays::before { - content: "\e593"; } - -.fa-wallet::before { - content: "\f555"; } - -.fa-clipboard-check::before { - content: "\f46c"; } - -.fa-file-audio::before { - content: "\f1c7"; } - -.fa-burger::before { - content: "\f805"; } - -.fa-hamburger::before { - content: "\f805"; } - -.fa-wrench::before { - content: "\f0ad"; } - -.fa-bugs::before { - content: "\e4d0"; } - -.fa-rupee-sign::before { - content: "\f156"; } - -.fa-rupee::before { - content: "\f156"; } - -.fa-file-image::before { - content: "\f1c5"; } - -.fa-circle-question::before { - content: "\f059"; } - -.fa-question-circle::before { - content: "\f059"; } - -.fa-plane-departure::before { - content: "\f5b0"; } - -.fa-handshake-slash::before { - content: "\e060"; } - -.fa-book-bookmark::before { - content: "\e0bb"; } - -.fa-code-branch::before { - content: "\f126"; } - -.fa-hat-cowboy::before { - content: "\f8c0"; } - -.fa-bridge::before { - content: "\e4c8"; } - -.fa-phone-flip::before { - content: "\f879"; } - -.fa-phone-alt::before { - content: "\f879"; } - -.fa-truck-front::before { - content: "\e2b7"; } - -.fa-cat::before { - content: "\f6be"; } - -.fa-anchor-circle-exclamation::before { - content: "\e4ab"; } - -.fa-truck-field::before { - content: "\e58d"; } - -.fa-route::before { - content: "\f4d7"; } - -.fa-clipboard-question::before { - content: "\e4e3"; } - -.fa-panorama::before { - content: "\e209"; } - -.fa-comment-medical::before { - content: "\f7f5"; } - -.fa-teeth-open::before { - content: "\f62f"; } - -.fa-file-circle-minus::before { - content: "\e4ed"; } - -.fa-tags::before { - content: "\f02c"; } - -.fa-wine-glass::before { - content: "\f4e3"; } - -.fa-forward-fast::before { - content: "\f050"; } - -.fa-fast-forward::before { - content: "\f050"; } - -.fa-face-meh-blank::before { - content: "\f5a4"; } - -.fa-meh-blank::before { - content: "\f5a4"; } - -.fa-square-parking::before { - content: "\f540"; } - -.fa-parking::before { - content: "\f540"; } - -.fa-house-signal::before { - content: "\e012"; } - -.fa-bars-progress::before { - content: "\f828"; } - -.fa-tasks-alt::before { - content: "\f828"; } - -.fa-faucet-drip::before { - content: "\e006"; } - -.fa-cart-flatbed::before { - content: "\f474"; } - -.fa-dolly-flatbed::before { - content: "\f474"; } - -.fa-ban-smoking::before { - content: "\f54d"; } - -.fa-smoking-ban::before { - content: "\f54d"; } - -.fa-terminal::before { - content: "\f120"; } - -.fa-mobile-button::before { - content: "\f10b"; } - -.fa-house-medical-flag::before { - content: "\e514"; } - -.fa-basket-shopping::before { - content: "\f291"; } - -.fa-shopping-basket::before { - content: "\f291"; } - -.fa-tape::before { - content: "\f4db"; } - -.fa-bus-simple::before { - content: "\f55e"; } - -.fa-bus-alt::before { - content: "\f55e"; } - -.fa-eye::before { - content: "\f06e"; } - -.fa-face-sad-cry::before { - content: "\f5b3"; } - -.fa-sad-cry::before { - content: "\f5b3"; } - -.fa-audio-description::before { - content: "\f29e"; } - -.fa-person-military-to-person::before { - content: "\e54c"; } - -.fa-file-shield::before { - content: "\e4f0"; } - -.fa-user-slash::before { - content: "\f506"; } - -.fa-pen::before { - content: "\f304"; } - -.fa-tower-observation::before { - content: "\e586"; } - -.fa-file-code::before { - content: "\f1c9"; } - -.fa-signal::before { - content: "\f012"; } - -.fa-signal-5::before { - content: "\f012"; } - -.fa-signal-perfect::before { - content: "\f012"; } - -.fa-bus::before { - content: "\f207"; } - -.fa-heart-circle-xmark::before { - content: "\e501"; } - -.fa-house-chimney::before { - content: "\e3af"; } - -.fa-home-lg::before { - content: "\e3af"; } - -.fa-window-maximize::before { - content: "\f2d0"; } - -.fa-face-frown::before { - content: "\f119"; } - -.fa-frown::before { - content: "\f119"; } - -.fa-prescription::before { - content: "\f5b1"; } - -.fa-shop::before { - content: "\f54f"; } - -.fa-store-alt::before { - content: "\f54f"; } - -.fa-floppy-disk::before { - content: "\f0c7"; } - -.fa-save::before { - content: "\f0c7"; } - -.fa-vihara::before { - content: "\f6a7"; } - -.fa-scale-unbalanced::before { - content: "\f515"; } - -.fa-balance-scale-left::before { - content: "\f515"; } - -.fa-sort-up::before { - content: "\f0de"; } - -.fa-sort-asc::before { - content: "\f0de"; } - -.fa-comment-dots::before { - content: "\f4ad"; } - -.fa-commenting::before { - content: "\f4ad"; } - -.fa-plant-wilt::before { - content: "\e5aa"; } - -.fa-diamond::before { - content: "\f219"; } - -.fa-face-grin-squint::before { - content: "\f585"; } - -.fa-grin-squint::before { - content: "\f585"; } - -.fa-hand-holding-dollar::before { - content: "\f4c0"; } - -.fa-hand-holding-usd::before { - content: "\f4c0"; } - -.fa-bacterium::before { - content: "\e05a"; } - -.fa-hand-pointer::before { - content: "\f25a"; } - -.fa-drum-steelpan::before { - content: "\f56a"; } - -.fa-hand-scissors::before { - content: "\f257"; } - -.fa-hands-praying::before { - content: "\f684"; } - -.fa-praying-hands::before { - content: "\f684"; } - -.fa-arrow-rotate-right::before { - content: "\f01e"; } - -.fa-arrow-right-rotate::before { - content: "\f01e"; } - -.fa-arrow-rotate-forward::before { - content: "\f01e"; } - -.fa-redo::before { - content: "\f01e"; } - -.fa-biohazard::before { - content: "\f780"; } - -.fa-location-crosshairs::before { - content: "\f601"; } - -.fa-location::before { - content: "\f601"; } - -.fa-mars-double::before { - content: "\f227"; } - -.fa-child-dress::before { - content: "\e59c"; } - -.fa-users-between-lines::before { - content: "\e591"; } - -.fa-lungs-virus::before { - content: "\e067"; } - -.fa-face-grin-tears::before { - content: "\f588"; } - -.fa-grin-tears::before { - content: "\f588"; } - -.fa-phone::before { - content: "\f095"; } - -.fa-calendar-xmark::before { - content: "\f273"; } - -.fa-calendar-times::before { - content: "\f273"; } - -.fa-child-reaching::before { - content: "\e59d"; } - -.fa-head-side-virus::before { - content: "\e064"; } - -.fa-user-gear::before { - content: "\f4fe"; } - -.fa-user-cog::before { - content: "\f4fe"; } - -.fa-arrow-up-1-9::before { - content: "\f163"; } - -.fa-sort-numeric-up::before { - content: "\f163"; } - -.fa-door-closed::before { - content: "\f52a"; } - -.fa-shield-virus::before { - content: "\e06c"; } - -.fa-dice-six::before { - content: "\f526"; } - -.fa-mosquito-net::before { - content: "\e52c"; } - -.fa-bridge-water::before { - content: "\e4ce"; } - -.fa-person-booth::before { - content: "\f756"; } - -.fa-text-width::before { - content: "\f035"; } - -.fa-hat-wizard::before { - content: "\f6e8"; } - -.fa-pen-fancy::before { - content: "\f5ac"; } - -.fa-person-digging::before { - content: "\f85e"; } - -.fa-digging::before { - content: "\f85e"; } - -.fa-trash::before { - content: "\f1f8"; } - -.fa-gauge-simple::before { - content: "\f629"; } - -.fa-gauge-simple-med::before { - content: "\f629"; } - -.fa-tachometer-average::before { - content: "\f629"; } - -.fa-book-medical::before { - content: "\f7e6"; } - -.fa-poo::before { - content: "\f2fe"; } - -.fa-quote-right::before { - content: "\f10e"; } - -.fa-quote-right-alt::before { - content: "\f10e"; } - -.fa-shirt::before { - content: "\f553"; } - -.fa-t-shirt::before { - content: "\f553"; } - -.fa-tshirt::before { - content: "\f553"; } - -.fa-cubes::before { - content: "\f1b3"; } - -.fa-divide::before { - content: "\f529"; } - -.fa-tenge-sign::before { - content: "\f7d7"; } - -.fa-tenge::before { - content: "\f7d7"; } - -.fa-headphones::before { - content: "\f025"; } - -.fa-hands-holding::before { - content: "\f4c2"; } - -.fa-hands-clapping::before { - content: "\e1a8"; } - -.fa-republican::before { - content: "\f75e"; } - -.fa-arrow-left::before { - content: "\f060"; } - -.fa-person-circle-xmark::before { - content: "\e543"; } - -.fa-ruler::before { - content: "\f545"; } +.fa-align-justify::before { + content: "\f039"; } .fa-align-left::before { content: "\f036"; } -.fa-dice-d6::before { - content: "\f6d1"; } +.fa-align-right::before { + content: "\f038"; } -.fa-restroom::before { - content: "\f7bd"; } +.fa-anchor::before { + content: "\f13d"; } -.fa-j::before { - content: "\4a"; } +.fa-anchor-circle-check::before { + content: "\e4aa"; } -.fa-users-viewfinder::before { - content: "\e595"; } +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } -.fa-file-video::before { - content: "\f1c8"; } +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } -.fa-up-right-from-square::before { - content: "\f35d"; } +.fa-anchor-lock::before { + content: "\e4ad"; } -.fa-external-link-alt::before { - content: "\f35d"; } +.fa-angle-down::before { + content: "\f107"; } -.fa-table-cells::before { - content: "\f00a"; } +.fa-angle-left::before { + content: "\f104"; } -.fa-th::before { - content: "\f00a"; } +.fa-angle-right::before { + content: "\f105"; } -.fa-file-pdf::before { - content: "\f1c1"; } +.fa-angle-up::before { + content: "\f106"; } -.fa-book-bible::before { - content: "\f647"; } +.fa-angles-down::before { + content: "\f103"; } -.fa-bible::before { - content: "\f647"; } +.fa-angle-double-down::before { + content: "\f103"; } -.fa-o::before { - content: "\4f"; } +.fa-angles-left::before { + content: "\f100"; } -.fa-suitcase-medical::before { - content: "\f0fa"; } +.fa-angle-double-left::before { + content: "\f100"; } -.fa-medkit::before { - content: "\f0fa"; } +.fa-angles-right::before { + content: "\f101"; } -.fa-user-secret::before { - content: "\f21b"; } - -.fa-otter::before { - content: "\f700"; } - -.fa-person-dress::before { - content: "\f182"; } - -.fa-female::before { - content: "\f182"; } - -.fa-comment-dollar::before { - content: "\f651"; } - -.fa-business-time::before { - content: "\f64a"; } - -.fa-briefcase-clock::before { - content: "\f64a"; } - -.fa-table-cells-large::before { - content: "\f009"; } - -.fa-th-large::before { - content: "\f009"; } - -.fa-book-tanakh::before { - content: "\f827"; } - -.fa-tanakh::before { - content: "\f827"; } - -.fa-phone-volume::before { - content: "\f2a0"; } - -.fa-volume-control-phone::before { - content: "\f2a0"; } - -.fa-hat-cowboy-side::before { - content: "\f8c1"; } - -.fa-clipboard-user::before { - content: "\f7f3"; } - -.fa-child::before { - content: "\f1ae"; } - -.fa-lira-sign::before { - content: "\f195"; } - -.fa-satellite::before { - content: "\f7bf"; } - -.fa-plane-lock::before { - content: "\e558"; } - -.fa-tag::before { - content: "\f02b"; } - -.fa-comment::before { - content: "\f075"; } - -.fa-cake-candles::before { - content: "\f1fd"; } - -.fa-birthday-cake::before { - content: "\f1fd"; } - -.fa-cake::before { - content: "\f1fd"; } - -.fa-envelope::before { - content: "\f0e0"; } +.fa-angle-double-right::before { + content: "\f101"; } .fa-angles-up::before { content: "\f102"; } @@ -3821,83 +595,20 @@ readers do not read off random characters that represent icons */ .fa-angle-double-up::before { content: "\f102"; } -.fa-paperclip::before { - content: "\f0c6"; } +.fa-ankh::before { + content: "\f644"; } -.fa-arrow-right-to-city::before { - content: "\e4b3"; } +.fa-apple-whole::before { + content: "\f5d1"; } -.fa-ribbon::before { - content: "\f4d6"; } +.fa-apple-alt::before { + content: "\f5d1"; } -.fa-lungs::before { - content: "\f604"; } +.fa-archway::before { + content: "\f557"; } -.fa-arrow-up-9-1::before { - content: "\f887"; } - -.fa-sort-numeric-up-alt::before { - content: "\f887"; } - -.fa-litecoin-sign::before { - content: "\e1d3"; } - -.fa-border-none::before { - content: "\f850"; } - -.fa-circle-nodes::before { - content: "\e4e2"; } - -.fa-parachute-box::before { - content: "\f4cd"; } - -.fa-indent::before { - content: "\f03c"; } - -.fa-truck-field-un::before { - content: "\e58e"; } - -.fa-hourglass::before { - content: "\f254"; } - -.fa-hourglass-empty::before { - content: "\f254"; } - -.fa-mountain::before { - content: "\f6fc"; } - -.fa-user-doctor::before { - content: "\f0f0"; } - -.fa-user-md::before { - content: "\f0f0"; } - -.fa-circle-info::before { - content: "\f05a"; } - -.fa-info-circle::before { - content: "\f05a"; } - -.fa-cloud-meatball::before { - content: "\f73b"; } - -.fa-camera::before { - content: "\f030"; } - -.fa-camera-alt::before { - content: "\f030"; } - -.fa-square-virus::before { - content: "\e578"; } - -.fa-meteor::before { - content: "\f753"; } - -.fa-car-on::before { - content: "\e4dd"; } - -.fa-sleigh::before { - content: "\f7cc"; } +.fa-arrow-down::before { + content: "\f063"; } .fa-arrow-down-1-9::before { content: "\f162"; } @@ -3908,47 +619,14 @@ readers do not read off random characters that represent icons */ .fa-sort-numeric-down::before { content: "\f162"; } -.fa-hand-holding-droplet::before { - content: "\f4c1"; } +.fa-arrow-down-9-1::before { + content: "\f886"; } -.fa-hand-holding-water::before { - content: "\f4c1"; } +.fa-sort-numeric-desc::before { + content: "\f886"; } -.fa-water::before { - content: "\f773"; } - -.fa-calendar-check::before { - content: "\f274"; } - -.fa-braille::before { - content: "\f2a1"; } - -.fa-prescription-bottle-medical::before { - content: "\f486"; } - -.fa-prescription-bottle-alt::before { - content: "\f486"; } - -.fa-landmark::before { - content: "\f66f"; } - -.fa-truck::before { - content: "\f0d1"; } - -.fa-crosshairs::before { - content: "\f05b"; } - -.fa-person-cane::before { - content: "\e53c"; } - -.fa-tent::before { - content: "\e57d"; } - -.fa-vest-patches::before { - content: "\e086"; } - -.fa-check-double::before { - content: "\f560"; } +.fa-sort-numeric-down-alt::before { + content: "\f886"; } .fa-arrow-down-a-z::before { content: "\f15d"; } @@ -3959,11 +637,89 @@ readers do not read off random characters that represent icons */ .fa-sort-alpha-down::before { content: "\f15d"; } -.fa-money-bill-wheat::before { - content: "\e52a"; } +.fa-arrow-down-long::before { + content: "\f175"; } -.fa-cookie::before { - content: "\f563"; } +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } .fa-arrow-rotate-left::before { content: "\f0e2"; } @@ -3980,173 +736,29 @@ readers do not read off random characters that represent icons */ .fa-undo::before { content: "\f0e2"; } -.fa-hard-drive::before { - content: "\f0a0"; } +.fa-arrow-rotate-right::before { + content: "\f01e"; } -.fa-hdd::before { - content: "\f0a0"; } +.fa-arrow-right-rotate::before { + content: "\f01e"; } -.fa-face-grin-squint-tears::before { - content: "\f586"; } +.fa-arrow-rotate-forward::before { + content: "\f01e"; } -.fa-grin-squint-tears::before { - content: "\f586"; } +.fa-redo::before { + content: "\f01e"; } -.fa-dumbbell::before { - content: "\f44b"; } +.fa-arrow-trend-down::before { + content: "\e097"; } -.fa-rectangle-list::before { - content: "\f022"; } +.fa-arrow-trend-up::before { + content: "\e098"; } -.fa-list-alt::before { - content: "\f022"; } +.fa-arrow-turn-down::before { + content: "\f149"; } -.fa-tarp-droplet::before { - content: "\e57c"; } - -.fa-house-medical-circle-check::before { - content: "\e511"; } - -.fa-person-skiing-nordic::before { - content: "\f7ca"; } - -.fa-skiing-nordic::before { - content: "\f7ca"; } - -.fa-calendar-plus::before { - content: "\f271"; } - -.fa-plane-arrival::before { - content: "\f5af"; } - -.fa-circle-left::before { - content: "\f359"; } - -.fa-arrow-alt-circle-left::before { - content: "\f359"; } - -.fa-train-subway::before { - content: "\f239"; } - -.fa-subway::before { - content: "\f239"; } - -.fa-chart-gantt::before { - content: "\e0e4"; } - -.fa-indian-rupee-sign::before { - content: "\e1bc"; } - -.fa-indian-rupee::before { - content: "\e1bc"; } - -.fa-inr::before { - content: "\e1bc"; } - -.fa-crop-simple::before { - content: "\f565"; } - -.fa-crop-alt::before { - content: "\f565"; } - -.fa-money-bill-1::before { - content: "\f3d1"; } - -.fa-money-bill-alt::before { - content: "\f3d1"; } - -.fa-left-long::before { - content: "\f30a"; } - -.fa-long-arrow-alt-left::before { - content: "\f30a"; } - -.fa-dna::before { - content: "\f471"; } - -.fa-virus-slash::before { - content: "\e075"; } - -.fa-minus::before { - content: "\f068"; } - -.fa-subtract::before { - content: "\f068"; } - -.fa-chess::before { - content: "\f439"; } - -.fa-arrow-left-long::before { - content: "\f177"; } - -.fa-long-arrow-left::before { - content: "\f177"; } - -.fa-plug-circle-check::before { - content: "\e55c"; } - -.fa-street-view::before { - content: "\f21d"; } - -.fa-franc-sign::before { - content: "\e18f"; } - -.fa-volume-off::before { - content: "\f026"; } - -.fa-hands-asl-interpreting::before { - content: "\f2a3"; } - -.fa-american-sign-language-interpreting::before { - content: "\f2a3"; } - -.fa-asl-interpreting::before { - content: "\f2a3"; } - -.fa-hands-american-sign-language-interpreting::before { - content: "\f2a3"; } - -.fa-gear::before { - content: "\f013"; } - -.fa-cog::before { - content: "\f013"; } - -.fa-droplet-slash::before { - content: "\f5c7"; } - -.fa-tint-slash::before { - content: "\f5c7"; } - -.fa-mosque::before { - content: "\f678"; } - -.fa-mosquito::before { - content: "\e52b"; } - -.fa-star-of-david::before { - content: "\f69a"; } - -.fa-person-military-rifle::before { - content: "\e54b"; } - -.fa-cart-shopping::before { - content: "\f07a"; } - -.fa-shopping-cart::before { - content: "\f07a"; } - -.fa-vials::before { - content: "\f493"; } - -.fa-plug-circle-plus::before { - content: "\e55f"; } - -.fa-place-of-worship::before { - content: "\f67f"; } - -.fa-grip-vertical::before { - content: "\f58e"; } +.fa-level-down::before { + content: "\f149"; } .fa-arrow-turn-up::before { content: "\f148"; } @@ -4154,323 +766,56 @@ readers do not read off random characters that represent icons */ .fa-level-up::before { content: "\f148"; } -.fa-u::before { - content: "\55"; } +.fa-arrow-up::before { + content: "\f062"; } -.fa-square-root-variable::before { - content: "\f698"; } +.fa-arrow-up-1-9::before { + content: "\f163"; } -.fa-square-root-alt::before { - content: "\f698"; } +.fa-sort-numeric-up::before { + content: "\f163"; } -.fa-clock::before { - content: "\f017"; } +.fa-arrow-up-9-1::before { + content: "\f887"; } -.fa-clock-four::before { - content: "\f017"; } +.fa-sort-numeric-up-alt::before { + content: "\f887"; } -.fa-backward-step::before { - content: "\f048"; } +.fa-arrow-up-a-z::before { + content: "\f15e"; } -.fa-step-backward::before { - content: "\f048"; } +.fa-sort-alpha-up::before { + content: "\f15e"; } -.fa-pallet::before { - content: "\f482"; } +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } -.fa-faucet::before { - content: "\e005"; } +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } -.fa-baseball-bat-ball::before { - content: "\f432"; } +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } -.fa-s::before { - content: "\53"; } +.fa-arrow-up-long::before { + content: "\f176"; } -.fa-timeline::before { - content: "\e29c"; } +.fa-long-arrow-up::before { + content: "\f176"; } -.fa-keyboard::before { - content: "\f11c"; } +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } -.fa-caret-down::before { - content: "\f0d7"; } +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } -.fa-house-chimney-medical::before { - content: "\f7f2"; } +.fa-external-link::before { + content: "\f08e"; } -.fa-clinic-medical::before { - content: "\f7f2"; } +.fa-arrow-up-short-wide::before { + content: "\f885"; } -.fa-temperature-three-quarters::before { - content: "\f2c8"; } - -.fa-temperature-3::before { - content: "\f2c8"; } - -.fa-thermometer-3::before { - content: "\f2c8"; } - -.fa-thermometer-three-quarters::before { - content: "\f2c8"; } - -.fa-mobile-screen::before { - content: "\f3cf"; } - -.fa-mobile-android-alt::before { - content: "\f3cf"; } - -.fa-plane-up::before { - content: "\e22d"; } - -.fa-piggy-bank::before { - content: "\f4d3"; } - -.fa-battery-half::before { - content: "\f242"; } - -.fa-battery-3::before { - content: "\f242"; } - -.fa-mountain-city::before { - content: "\e52e"; } - -.fa-coins::before { - content: "\f51e"; } - -.fa-khanda::before { - content: "\f66d"; } - -.fa-sliders::before { - content: "\f1de"; } - -.fa-sliders-h::before { - content: "\f1de"; } - -.fa-folder-tree::before { - content: "\f802"; } - -.fa-network-wired::before { - content: "\f6ff"; } - -.fa-map-pin::before { - content: "\f276"; } - -.fa-hamsa::before { - content: "\f665"; } - -.fa-cent-sign::before { - content: "\e3f5"; } - -.fa-flask::before { - content: "\f0c3"; } - -.fa-person-pregnant::before { - content: "\e31e"; } - -.fa-wand-sparkles::before { - content: "\f72b"; } - -.fa-ellipsis-vertical::before { - content: "\f142"; } - -.fa-ellipsis-v::before { - content: "\f142"; } - -.fa-ticket::before { - content: "\f145"; } - -.fa-power-off::before { - content: "\f011"; } - -.fa-right-long::before { - content: "\f30b"; } - -.fa-long-arrow-alt-right::before { - content: "\f30b"; } - -.fa-flag-usa::before { - content: "\f74d"; } - -.fa-laptop-file::before { - content: "\e51d"; } - -.fa-tty::before { - content: "\f1e4"; } - -.fa-teletype::before { - content: "\f1e4"; } - -.fa-diagram-next::before { - content: "\e476"; } - -.fa-person-rifle::before { - content: "\e54e"; } - -.fa-house-medical-circle-exclamation::before { - content: "\e512"; } - -.fa-closed-captioning::before { - content: "\f20a"; } - -.fa-person-hiking::before { - content: "\f6ec"; } - -.fa-hiking::before { - content: "\f6ec"; } - -.fa-venus-double::before { - content: "\f226"; } - -.fa-images::before { - content: "\f302"; } - -.fa-calculator::before { - content: "\f1ec"; } - -.fa-people-pulling::before { - content: "\e535"; } - -.fa-n::before { - content: "\4e"; } - -.fa-cable-car::before { - content: "\f7da"; } - -.fa-tram::before { - content: "\f7da"; } - -.fa-cloud-rain::before { - content: "\f73d"; } - -.fa-building-circle-xmark::before { - content: "\e4d4"; } - -.fa-ship::before { - content: "\f21a"; } - -.fa-arrows-down-to-line::before { - content: "\e4b8"; } - -.fa-download::before { - content: "\f019"; } - -.fa-face-grin::before { - content: "\f580"; } - -.fa-grin::before { - content: "\f580"; } - -.fa-delete-left::before { - content: "\f55a"; } - -.fa-backspace::before { - content: "\f55a"; } - -.fa-eye-dropper::before { - content: "\f1fb"; } - -.fa-eye-dropper-empty::before { - content: "\f1fb"; } - -.fa-eyedropper::before { - content: "\f1fb"; } - -.fa-file-circle-check::before { - content: "\e5a0"; } - -.fa-forward::before { - content: "\f04e"; } - -.fa-mobile::before { - content: "\f3ce"; } - -.fa-mobile-android::before { - content: "\f3ce"; } - -.fa-mobile-phone::before { - content: "\f3ce"; } - -.fa-face-meh::before { - content: "\f11a"; } - -.fa-meh::before { - content: "\f11a"; } - -.fa-align-center::before { - content: "\f037"; } - -.fa-book-skull::before { - content: "\f6b7"; } - -.fa-book-dead::before { - content: "\f6b7"; } - -.fa-id-card::before { - content: "\f2c2"; } - -.fa-drivers-license::before { - content: "\f2c2"; } - -.fa-outdent::before { - content: "\f03b"; } - -.fa-dedent::before { - content: "\f03b"; } - -.fa-heart-circle-exclamation::before { - content: "\e4fe"; } - -.fa-house::before { - content: "\f015"; } - -.fa-home::before { - content: "\f015"; } - -.fa-home-alt::before { - content: "\f015"; } - -.fa-home-lg-alt::before { - content: "\f015"; } - -.fa-calendar-week::before { - content: "\f784"; } - -.fa-laptop-medical::before { - content: "\f812"; } - -.fa-b::before { - content: "\42"; } - -.fa-file-medical::before { - content: "\f477"; } - -.fa-dice-one::before { - content: "\f525"; } - -.fa-kiwi-bird::before { - content: "\f535"; } - -.fa-arrow-right-arrow-left::before { - content: "\f0ec"; } - -.fa-exchange::before { - content: "\f0ec"; } - -.fa-rotate-right::before { - content: "\f2f9"; } - -.fa-redo-alt::before { - content: "\f2f9"; } - -.fa-rotate-forward::before { - content: "\f2f9"; } - -.fa-utensils::before { - content: "\f2e7"; } - -.fa-cutlery::before { - content: "\f2e7"; } +.fa-sort-amount-up-alt::before { + content: "\f885"; } .fa-arrow-up-wide-short::before { content: "\f161"; } @@ -4478,395 +823,170 @@ readers do not read off random characters that represent icons */ .fa-sort-amount-up::before { content: "\f161"; } -.fa-mill-sign::before { - content: "\e1ed"; } +.fa-arrow-up-z-a::before { + content: "\f882"; } -.fa-bowl-rice::before { - content: "\e2eb"; } +.fa-sort-alpha-up-alt::before { + content: "\f882"; } -.fa-skull::before { - content: "\f54c"; } +.fa-arrows-down-to-line::before { + content: "\e4b8"; } -.fa-tower-broadcast::before { - content: "\f519"; } +.fa-arrows-down-to-people::before { + content: "\e4b9"; } -.fa-broadcast-tower::before { - content: "\f519"; } +.fa-arrows-left-right::before { + content: "\f07e"; } -.fa-truck-pickup::before { - content: "\f63c"; } - -.fa-up-long::before { - content: "\f30c"; } - -.fa-long-arrow-alt-up::before { - content: "\f30c"; } - -.fa-stop::before { - content: "\f04d"; } - -.fa-code-merge::before { - content: "\f387"; } - -.fa-upload::before { - content: "\f093"; } - -.fa-hurricane::before { - content: "\f751"; } - -.fa-mound::before { - content: "\e52d"; } - -.fa-toilet-portable::before { - content: "\e583"; } - -.fa-compact-disc::before { - content: "\f51f"; } - -.fa-file-arrow-down::before { - content: "\f56d"; } - -.fa-file-download::before { - content: "\f56d"; } - -.fa-caravan::before { - content: "\f8ff"; } - -.fa-shield-cat::before { - content: "\e572"; } - -.fa-bolt::before { - content: "\f0e7"; } - -.fa-zap::before { - content: "\f0e7"; } - -.fa-glass-water::before { - content: "\e4f4"; } - -.fa-oil-well::before { - content: "\e532"; } - -.fa-vault::before { - content: "\e2c5"; } - -.fa-mars::before { - content: "\f222"; } - -.fa-toilet::before { - content: "\f7d8"; } - -.fa-plane-circle-xmark::before { - content: "\e557"; } - -.fa-yen-sign::before { - content: "\f157"; } - -.fa-cny::before { - content: "\f157"; } - -.fa-jpy::before { - content: "\f157"; } - -.fa-rmb::before { - content: "\f157"; } - -.fa-yen::before { - content: "\f157"; } - -.fa-ruble-sign::before { - content: "\f158"; } - -.fa-rouble::before { - content: "\f158"; } - -.fa-rub::before { - content: "\f158"; } - -.fa-ruble::before { - content: "\f158"; } - -.fa-sun::before { - content: "\f185"; } - -.fa-guitar::before { - content: "\f7a6"; } - -.fa-face-laugh-wink::before { - content: "\f59c"; } - -.fa-laugh-wink::before { - content: "\f59c"; } - -.fa-horse-head::before { - content: "\f7ab"; } - -.fa-bore-hole::before { - content: "\e4c3"; } - -.fa-industry::before { - content: "\f275"; } - -.fa-circle-down::before { - content: "\f358"; } - -.fa-arrow-alt-circle-down::before { - content: "\f358"; } - -.fa-arrows-turn-to-dots::before { - content: "\e4c1"; } - -.fa-florin-sign::before { - content: "\e184"; } - -.fa-arrow-down-short-wide::before { - content: "\f884"; } - -.fa-sort-amount-desc::before { - content: "\f884"; } - -.fa-sort-amount-down-alt::before { - content: "\f884"; } - -.fa-less-than::before { - content: "\3c"; } - -.fa-angle-down::before { - content: "\f107"; } - -.fa-car-tunnel::before { - content: "\e4de"; } - -.fa-head-side-cough::before { - content: "\e061"; } - -.fa-grip-lines::before { - content: "\f7a4"; } - -.fa-thumbs-down::before { - content: "\f165"; } - -.fa-user-lock::before { - content: "\f502"; } - -.fa-arrow-right-long::before { - content: "\f178"; } - -.fa-long-arrow-right::before { - content: "\f178"; } - -.fa-anchor-circle-xmark::before { - content: "\e4ac"; } - -.fa-ellipsis::before { - content: "\f141"; } - -.fa-ellipsis-h::before { - content: "\f141"; } - -.fa-chess-pawn::before { - content: "\f443"; } - -.fa-kit-medical::before { - content: "\f479"; } - -.fa-first-aid::before { - content: "\f479"; } - -.fa-person-through-window::before { - content: "\e5a9"; } - -.fa-toolbox::before { - content: "\f552"; } - -.fa-hands-holding-circle::before { - content: "\e4fb"; } - -.fa-bug::before { - content: "\f188"; } - -.fa-credit-card::before { - content: "\f09d"; } - -.fa-credit-card-alt::before { - content: "\f09d"; } - -.fa-car::before { - content: "\f1b9"; } - -.fa-automobile::before { - content: "\f1b9"; } - -.fa-hand-holding-hand::before { - content: "\e4f7"; } - -.fa-book-open-reader::before { - content: "\f5da"; } - -.fa-book-reader::before { - content: "\f5da"; } - -.fa-mountain-sun::before { - content: "\e52f"; } +.fa-arrows-h::before { + content: "\f07e"; } .fa-arrows-left-right-to-line::before { content: "\e4ba"; } -.fa-dice-d20::before { - content: "\f6cf"; } +.fa-arrows-rotate::before { + content: "\f021"; } -.fa-truck-droplet::before { - content: "\e58c"; } +.fa-refresh::before { + content: "\f021"; } -.fa-file-circle-xmark::before { - content: "\e5a1"; } +.fa-sync::before { + content: "\f021"; } -.fa-temperature-arrow-up::before { - content: "\e040"; } +.fa-arrows-spin::before { + content: "\e4bb"; } -.fa-temperature-up::before { - content: "\e040"; } +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } -.fa-medal::before { - content: "\f5a2"; } +.fa-arrows-to-circle::before { + content: "\e4bd"; } -.fa-bed::before { - content: "\f236"; } +.fa-arrows-to-dot::before { + content: "\e4be"; } -.fa-square-h::before { - content: "\f0fd"; } +.fa-arrows-to-eye::before { + content: "\e4bf"; } -.fa-h-square::before { - content: "\f0fd"; } +.fa-arrows-turn-right::before { + content: "\e4c0"; } -.fa-podcast::before { - content: "\f2ce"; } +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } -.fa-temperature-full::before { - content: "\f2c7"; } +.fa-arrows-up-down::before { + content: "\f07d"; } -.fa-temperature-4::before { - content: "\f2c7"; } +.fa-arrows-v::before { + content: "\f07d"; } -.fa-thermometer-4::before { - content: "\f2c7"; } +.fa-arrows-up-down-left-right::before { + content: "\f047"; } -.fa-thermometer-full::before { - content: "\f2c7"; } +.fa-arrows::before { + content: "\f047"; } -.fa-bell::before { - content: "\f0f3"; } +.fa-arrows-up-to-line::before { + content: "\e4c2"; } -.fa-superscript::before { - content: "\f12b"; } +.fa-asterisk::before { + content: "\2a"; } -.fa-plug-circle-xmark::before { - content: "\e560"; } +.fa-at::before { + content: "\40"; } -.fa-star-of-life::before { - content: "\f621"; } +.fa-atom::before { + content: "\f5d2"; } -.fa-phone-slash::before { - content: "\f3dd"; } +.fa-audio-description::before { + content: "\f29e"; } -.fa-paint-roller::before { - content: "\f5aa"; } +.fa-austral-sign::before { + content: "\e0a9"; } -.fa-handshake-angle::before { - content: "\f4c4"; } +.fa-award::before { + content: "\f559"; } -.fa-hands-helping::before { - content: "\f4c4"; } +.fa-b::before { + content: "\42"; } -.fa-location-dot::before { - content: "\f3c5"; } +.fa-baby::before { + content: "\f77c"; } -.fa-map-marker-alt::before { - content: "\f3c5"; } +.fa-baby-carriage::before { + content: "\f77d"; } -.fa-file::before { - content: "\f15b"; } +.fa-carriage-baby::before { + content: "\f77d"; } -.fa-greater-than::before { - content: "\3e"; } +.fa-backward::before { + content: "\f04a"; } -.fa-person-swimming::before { - content: "\f5c4"; } +.fa-backward-fast::before { + content: "\f049"; } -.fa-swimmer::before { - content: "\f5c4"; } +.fa-fast-backward::before { + content: "\f049"; } -.fa-arrow-down::before { - content: "\f063"; } +.fa-backward-step::before { + content: "\f048"; } -.fa-droplet::before { - content: "\f043"; } +.fa-step-backward::before { + content: "\f048"; } -.fa-tint::before { - content: "\f043"; } +.fa-bacon::before { + content: "\f7e5"; } -.fa-eraser::before { - content: "\f12d"; } +.fa-bacteria::before { + content: "\e059"; } -.fa-earth-americas::before { - content: "\f57d"; } +.fa-bacterium::before { + content: "\e05a"; } -.fa-earth::before { - content: "\f57d"; } +.fa-bag-shopping::before { + content: "\f290"; } -.fa-earth-america::before { - content: "\f57d"; } +.fa-shopping-bag::before { + content: "\f290"; } -.fa-globe-americas::before { - content: "\f57d"; } +.fa-bahai::before { + content: "\f666"; } -.fa-person-burst::before { - content: "\e53b"; } +.fa-baht-sign::before { + content: "\e0ac"; } -.fa-dove::before { - content: "\f4ba"; } +.fa-ban::before { + content: "\f05e"; } -.fa-battery-empty::before { - content: "\f244"; } +.fa-cancel::before { + content: "\f05e"; } -.fa-battery-0::before { - content: "\f244"; } +.fa-ban-smoking::before { + content: "\f54d"; } -.fa-socks::before { - content: "\f696"; } +.fa-smoking-ban::before { + content: "\f54d"; } -.fa-inbox::before { - content: "\f01c"; } +.fa-bandage::before { + content: "\f462"; } -.fa-section::before { - content: "\e447"; } +.fa-band-aid::before { + content: "\f462"; } -.fa-gauge-high::before { - content: "\f625"; } +.fa-barcode::before { + content: "\f02a"; } -.fa-tachometer-alt::before { - content: "\f625"; } +.fa-bars::before { + content: "\f0c9"; } -.fa-tachometer-alt-fast::before { - content: "\f625"; } +.fa-navicon::before { + content: "\f0c9"; } -.fa-envelope-open-text::before { - content: "\f658"; } +.fa-bars-progress::before { + content: "\f828"; } -.fa-hospital::before { - content: "\f0f8"; } - -.fa-hospital-alt::before { - content: "\f0f8"; } - -.fa-hospital-wide::before { - content: "\f0f8"; } - -.fa-wine-bottle::before { - content: "\f72f"; } - -.fa-chess-rook::before { - content: "\f447"; } +.fa-tasks-alt::before { + content: "\f828"; } .fa-bars-staggered::before { content: "\f550"; } @@ -4877,140 +997,38 @@ readers do not read off random characters that represent icons */ .fa-stream::before { content: "\f550"; } -.fa-dharmachakra::before { - content: "\f655"; } +.fa-baseball::before { + content: "\f433"; } -.fa-hotdog::before { - content: "\f80f"; } +.fa-baseball-ball::before { + content: "\f433"; } -.fa-person-walking-with-cane::before { - content: "\f29d"; } +.fa-baseball-bat-ball::before { + content: "\f432"; } -.fa-blind::before { - content: "\f29d"; } +.fa-basket-shopping::before { + content: "\f291"; } -.fa-drum::before { - content: "\f569"; } +.fa-shopping-basket::before { + content: "\f291"; } -.fa-ice-cream::before { - content: "\f810"; } +.fa-basketball::before { + content: "\f434"; } -.fa-heart-circle-bolt::before { - content: "\e4fc"; } +.fa-basketball-ball::before { + content: "\f434"; } -.fa-fax::before { - content: "\f1ac"; } +.fa-bath::before { + content: "\f2cd"; } -.fa-paragraph::before { - content: "\f1dd"; } +.fa-bathtub::before { + content: "\f2cd"; } -.fa-check-to-slot::before { - content: "\f772"; } +.fa-battery-empty::before { + content: "\f244"; } -.fa-vote-yea::before { - content: "\f772"; } - -.fa-star-half::before { - content: "\f089"; } - -.fa-boxes-stacked::before { - content: "\f468"; } - -.fa-boxes::before { - content: "\f468"; } - -.fa-boxes-alt::before { - content: "\f468"; } - -.fa-link::before { - content: "\f0c1"; } - -.fa-chain::before { - content: "\f0c1"; } - -.fa-ear-listen::before { - content: "\f2a2"; } - -.fa-assistive-listening-systems::before { - content: "\f2a2"; } - -.fa-tree-city::before { - content: "\e587"; } - -.fa-play::before { - content: "\f04b"; } - -.fa-font::before { - content: "\f031"; } - -.fa-table-cells-row-lock::before { - content: "\e67a"; } - -.fa-rupiah-sign::before { - content: "\e23d"; } - -.fa-magnifying-glass::before { - content: "\f002"; } - -.fa-search::before { - content: "\f002"; } - -.fa-table-tennis-paddle-ball::before { - content: "\f45d"; } - -.fa-ping-pong-paddle-ball::before { - content: "\f45d"; } - -.fa-table-tennis::before { - content: "\f45d"; } - -.fa-person-dots-from-line::before { - content: "\f470"; } - -.fa-diagnoses::before { - content: "\f470"; } - -.fa-trash-can-arrow-up::before { - content: "\f82a"; } - -.fa-trash-restore-alt::before { - content: "\f82a"; } - -.fa-naira-sign::before { - content: "\e1f6"; } - -.fa-cart-arrow-down::before { - content: "\f218"; } - -.fa-walkie-talkie::before { - content: "\f8ef"; } - -.fa-file-pen::before { - content: "\f31c"; } - -.fa-file-edit::before { - content: "\f31c"; } - -.fa-receipt::before { - content: "\f543"; } - -.fa-square-pen::before { - content: "\f14b"; } - -.fa-pen-square::before { - content: "\f14b"; } - -.fa-pencil-square::before { - content: "\f14b"; } - -.fa-suitcase-rolling::before { - content: "\f5c1"; } - -.fa-person-circle-exclamation::before { - content: "\e53f"; } - -.fa-chevron-down::before { - content: "\f078"; } +.fa-battery-0::before { + content: "\f244"; } .fa-battery-full::before { content: "\f240"; } @@ -5021,380 +1039,11 @@ readers do not read off random characters that represent icons */ .fa-battery-5::before { content: "\f240"; } -.fa-skull-crossbones::before { - content: "\f714"; } +.fa-battery-half::before { + content: "\f242"; } -.fa-code-compare::before { - content: "\e13a"; } - -.fa-list-ul::before { - content: "\f0ca"; } - -.fa-list-dots::before { - content: "\f0ca"; } - -.fa-school-lock::before { - content: "\e56f"; } - -.fa-tower-cell::before { - content: "\e585"; } - -.fa-down-long::before { - content: "\f309"; } - -.fa-long-arrow-alt-down::before { - content: "\f309"; } - -.fa-ranking-star::before { - content: "\e561"; } - -.fa-chess-king::before { - content: "\f43f"; } - -.fa-person-harassing::before { - content: "\e549"; } - -.fa-brazilian-real-sign::before { - content: "\e46c"; } - -.fa-landmark-dome::before { - content: "\f752"; } - -.fa-landmark-alt::before { - content: "\f752"; } - -.fa-arrow-up::before { - content: "\f062"; } - -.fa-tv::before { - content: "\f26c"; } - -.fa-television::before { - content: "\f26c"; } - -.fa-tv-alt::before { - content: "\f26c"; } - -.fa-shrimp::before { - content: "\e448"; } - -.fa-list-check::before { - content: "\f0ae"; } - -.fa-tasks::before { - content: "\f0ae"; } - -.fa-jug-detergent::before { - content: "\e519"; } - -.fa-circle-user::before { - content: "\f2bd"; } - -.fa-user-circle::before { - content: "\f2bd"; } - -.fa-user-shield::before { - content: "\f505"; } - -.fa-wind::before { - content: "\f72e"; } - -.fa-car-burst::before { - content: "\f5e1"; } - -.fa-car-crash::before { - content: "\f5e1"; } - -.fa-y::before { - content: "\59"; } - -.fa-person-snowboarding::before { - content: "\f7ce"; } - -.fa-snowboarding::before { - content: "\f7ce"; } - -.fa-truck-fast::before { - content: "\f48b"; } - -.fa-shipping-fast::before { - content: "\f48b"; } - -.fa-fish::before { - content: "\f578"; } - -.fa-user-graduate::before { - content: "\f501"; } - -.fa-circle-half-stroke::before { - content: "\f042"; } - -.fa-adjust::before { - content: "\f042"; } - -.fa-clapperboard::before { - content: "\e131"; } - -.fa-circle-radiation::before { - content: "\f7ba"; } - -.fa-radiation-alt::before { - content: "\f7ba"; } - -.fa-baseball::before { - content: "\f433"; } - -.fa-baseball-ball::before { - content: "\f433"; } - -.fa-jet-fighter-up::before { - content: "\e518"; } - -.fa-diagram-project::before { - content: "\f542"; } - -.fa-project-diagram::before { - content: "\f542"; } - -.fa-copy::before { - content: "\f0c5"; } - -.fa-volume-xmark::before { - content: "\f6a9"; } - -.fa-volume-mute::before { - content: "\f6a9"; } - -.fa-volume-times::before { - content: "\f6a9"; } - -.fa-hand-sparkles::before { - content: "\e05d"; } - -.fa-grip::before { - content: "\f58d"; } - -.fa-grip-horizontal::before { - content: "\f58d"; } - -.fa-share-from-square::before { - content: "\f14d"; } - -.fa-share-square::before { - content: "\f14d"; } - -.fa-child-combatant::before { - content: "\e4e0"; } - -.fa-child-rifle::before { - content: "\e4e0"; } - -.fa-gun::before { - content: "\e19b"; } - -.fa-square-phone::before { - content: "\f098"; } - -.fa-phone-square::before { - content: "\f098"; } - -.fa-plus::before { - content: "\2b"; } - -.fa-add::before { - content: "\2b"; } - -.fa-expand::before { - content: "\f065"; } - -.fa-computer::before { - content: "\e4e5"; } - -.fa-xmark::before { - content: "\f00d"; } - -.fa-close::before { - content: "\f00d"; } - -.fa-multiply::before { - content: "\f00d"; } - -.fa-remove::before { - content: "\f00d"; } - -.fa-times::before { - content: "\f00d"; } - -.fa-arrows-up-down-left-right::before { - content: "\f047"; } - -.fa-arrows::before { - content: "\f047"; } - -.fa-chalkboard-user::before { - content: "\f51c"; } - -.fa-chalkboard-teacher::before { - content: "\f51c"; } - -.fa-peso-sign::before { - content: "\e222"; } - -.fa-building-shield::before { - content: "\e4d8"; } - -.fa-baby::before { - content: "\f77c"; } - -.fa-users-line::before { - content: "\e592"; } - -.fa-quote-left::before { - content: "\f10d"; } - -.fa-quote-left-alt::before { - content: "\f10d"; } - -.fa-tractor::before { - content: "\f722"; } - -.fa-trash-arrow-up::before { - content: "\f829"; } - -.fa-trash-restore::before { - content: "\f829"; } - -.fa-arrow-down-up-lock::before { - content: "\e4b0"; } - -.fa-lines-leaning::before { - content: "\e51e"; } - -.fa-ruler-combined::before { - content: "\f546"; } - -.fa-copyright::before { - content: "\f1f9"; } - -.fa-equals::before { - content: "\3d"; } - -.fa-blender::before { - content: "\f517"; } - -.fa-teeth::before { - content: "\f62e"; } - -.fa-shekel-sign::before { - content: "\f20b"; } - -.fa-ils::before { - content: "\f20b"; } - -.fa-shekel::before { - content: "\f20b"; } - -.fa-sheqel::before { - content: "\f20b"; } - -.fa-sheqel-sign::before { - content: "\f20b"; } - -.fa-map::before { - content: "\f279"; } - -.fa-rocket::before { - content: "\f135"; } - -.fa-photo-film::before { - content: "\f87c"; } - -.fa-photo-video::before { - content: "\f87c"; } - -.fa-folder-minus::before { - content: "\f65d"; } - -.fa-store::before { - content: "\f54e"; } - -.fa-arrow-trend-up::before { - content: "\e098"; } - -.fa-plug-circle-minus::before { - content: "\e55e"; } - -.fa-sign-hanging::before { - content: "\f4d9"; } - -.fa-sign::before { - content: "\f4d9"; } - -.fa-bezier-curve::before { - content: "\f55b"; } - -.fa-bell-slash::before { - content: "\f1f6"; } - -.fa-tablet::before { - content: "\f3fb"; } - -.fa-tablet-android::before { - content: "\f3fb"; } - -.fa-school-flag::before { - content: "\e56e"; } - -.fa-fill::before { - content: "\f575"; } - -.fa-angle-up::before { - content: "\f106"; } - -.fa-drumstick-bite::before { - content: "\f6d7"; } - -.fa-holly-berry::before { - content: "\f7aa"; } - -.fa-chevron-left::before { - content: "\f053"; } - -.fa-bacteria::before { - content: "\e059"; } - -.fa-hand-lizard::before { - content: "\f258"; } - -.fa-notdef::before { - content: "\e1fe"; } - -.fa-disease::before { - content: "\f7fa"; } - -.fa-briefcase-medical::before { - content: "\f469"; } - -.fa-genderless::before { - content: "\f22d"; } - -.fa-chevron-right::before { - content: "\f054"; } - -.fa-retweet::before { - content: "\f079"; } - -.fa-car-rear::before { - content: "\f5de"; } - -.fa-car-alt::before { - content: "\f5de"; } - -.fa-pump-soap::before { - content: "\e06b"; } - -.fa-video-slash::before { - content: "\f4e2"; } +.fa-battery-3::before { + content: "\f242"; } .fa-battery-quarter::before { content: "\f243"; } @@ -5402,554 +1051,101 @@ readers do not read off random characters that represent icons */ .fa-battery-2::before { content: "\f243"; } -.fa-radio::before { - content: "\f8d7"; } - -.fa-baby-carriage::before { - content: "\f77d"; } - -.fa-carriage-baby::before { - content: "\f77d"; } - -.fa-traffic-light::before { - content: "\f637"; } - -.fa-thermometer::before { - content: "\f491"; } - -.fa-vr-cardboard::before { - content: "\f729"; } - -.fa-hand-middle-finger::before { - content: "\f806"; } - -.fa-percent::before { - content: "\25"; } - -.fa-percentage::before { - content: "\25"; } - -.fa-truck-moving::before { - content: "\f4df"; } - -.fa-glass-water-droplet::before { - content: "\e4f5"; } - -.fa-display::before { - content: "\e163"; } - -.fa-face-smile::before { - content: "\f118"; } - -.fa-smile::before { - content: "\f118"; } - -.fa-thumbtack::before { - content: "\f08d"; } - -.fa-thumb-tack::before { - content: "\f08d"; } - -.fa-trophy::before { - content: "\f091"; } - -.fa-person-praying::before { - content: "\f683"; } - -.fa-pray::before { - content: "\f683"; } - -.fa-hammer::before { - content: "\f6e3"; } - -.fa-hand-peace::before { - content: "\f25b"; } - -.fa-rotate::before { - content: "\f2f1"; } - -.fa-sync-alt::before { - content: "\f2f1"; } - -.fa-spinner::before { - content: "\f110"; } - -.fa-robot::before { - content: "\f544"; } - -.fa-peace::before { - content: "\f67c"; } - -.fa-gears::before { - content: "\f085"; } - -.fa-cogs::before { - content: "\f085"; } - -.fa-warehouse::before { - content: "\f494"; } - -.fa-arrow-up-right-dots::before { - content: "\e4b7"; } - -.fa-splotch::before { - content: "\f5bc"; } - -.fa-face-grin-hearts::before { - content: "\f584"; } - -.fa-grin-hearts::before { - content: "\f584"; } - -.fa-dice-four::before { - content: "\f524"; } - -.fa-sim-card::before { - content: "\f7c4"; } - -.fa-transgender::before { - content: "\f225"; } - -.fa-transgender-alt::before { - content: "\f225"; } - -.fa-mercury::before { - content: "\f223"; } - -.fa-arrow-turn-down::before { - content: "\f149"; } - -.fa-level-down::before { - content: "\f149"; } - -.fa-person-falling-burst::before { - content: "\e547"; } - -.fa-award::before { - content: "\f559"; } - -.fa-ticket-simple::before { - content: "\f3ff"; } - -.fa-ticket-alt::before { - content: "\f3ff"; } - -.fa-building::before { - content: "\f1ad"; } - -.fa-angles-left::before { - content: "\f100"; } - -.fa-angle-double-left::before { - content: "\f100"; } - -.fa-qrcode::before { - content: "\f029"; } - -.fa-clock-rotate-left::before { - content: "\f1da"; } - -.fa-history::before { - content: "\f1da"; } - -.fa-face-grin-beam-sweat::before { - content: "\f583"; } - -.fa-grin-beam-sweat::before { - content: "\f583"; } - -.fa-file-export::before { - content: "\f56e"; } - -.fa-arrow-right-from-file::before { - content: "\f56e"; } - -.fa-shield::before { - content: "\f132"; } - -.fa-shield-blank::before { - content: "\f132"; } - -.fa-arrow-up-short-wide::before { - content: "\f885"; } - -.fa-sort-amount-up-alt::before { - content: "\f885"; } - -.fa-house-medical::before { - content: "\e3b2"; } - -.fa-golf-ball-tee::before { - content: "\f450"; } - -.fa-golf-ball::before { - content: "\f450"; } - -.fa-circle-chevron-left::before { - content: "\f137"; } - -.fa-chevron-circle-left::before { - content: "\f137"; } - -.fa-house-chimney-window::before { - content: "\e00d"; } - -.fa-pen-nib::before { - content: "\f5ad"; } - -.fa-tent-arrow-turn-left::before { - content: "\e580"; } - -.fa-tents::before { - content: "\e582"; } - -.fa-wand-magic::before { - content: "\f0d0"; } - -.fa-magic::before { - content: "\f0d0"; } - -.fa-dog::before { - content: "\f6d3"; } - -.fa-carrot::before { - content: "\f787"; } - -.fa-moon::before { - content: "\f186"; } - -.fa-wine-glass-empty::before { - content: "\f5ce"; } - -.fa-wine-glass-alt::before { - content: "\f5ce"; } - -.fa-cheese::before { - content: "\f7ef"; } - -.fa-yin-yang::before { - content: "\f6ad"; } - -.fa-music::before { - content: "\f001"; } - -.fa-code-commit::before { - content: "\f386"; } - -.fa-temperature-low::before { - content: "\f76b"; } - -.fa-person-biking::before { - content: "\f84a"; } - -.fa-biking::before { - content: "\f84a"; } - -.fa-broom::before { - content: "\f51a"; } - -.fa-shield-heart::before { - content: "\e574"; } - -.fa-gopuram::before { - content: "\f664"; } - -.fa-earth-oceania::before { - content: "\e47b"; } - -.fa-globe-oceania::before { - content: "\e47b"; } - -.fa-square-xmark::before { - content: "\f2d3"; } - -.fa-times-square::before { - content: "\f2d3"; } - -.fa-xmark-square::before { - content: "\f2d3"; } - -.fa-hashtag::before { - content: "\23"; } - -.fa-up-right-and-down-left-from-center::before { - content: "\f424"; } - -.fa-expand-alt::before { - content: "\f424"; } - -.fa-oil-can::before { - content: "\f613"; } - -.fa-t::before { - content: "\54"; } - -.fa-hippo::before { - content: "\f6ed"; } - -.fa-chart-column::before { - content: "\e0e3"; } - -.fa-infinity::before { - content: "\f534"; } - -.fa-vial-circle-check::before { - content: "\e596"; } - -.fa-person-arrow-down-to-line::before { - content: "\e538"; } - -.fa-voicemail::before { - content: "\f897"; } - -.fa-fan::before { - content: "\f863"; } - -.fa-person-walking-luggage::before { - content: "\e554"; } - -.fa-up-down::before { - content: "\f338"; } - -.fa-arrows-alt-v::before { - content: "\f338"; } - -.fa-cloud-moon-rain::before { - content: "\f73c"; } - -.fa-calendar::before { - content: "\f133"; } - -.fa-trailer::before { - content: "\e041"; } - -.fa-bahai::before { - content: "\f666"; } - -.fa-haykal::before { - content: "\f666"; } - -.fa-sd-card::before { - content: "\f7c2"; } - -.fa-dragon::before { - content: "\f6d5"; } - -.fa-shoe-prints::before { - content: "\f54b"; } - -.fa-circle-plus::before { - content: "\f055"; } - -.fa-plus-circle::before { - content: "\f055"; } - -.fa-face-grin-tongue-wink::before { - content: "\f58b"; } - -.fa-grin-tongue-wink::before { - content: "\f58b"; } - -.fa-hand-holding::before { - content: "\f4bd"; } - -.fa-plug-circle-exclamation::before { - content: "\e55d"; } - -.fa-link-slash::before { - content: "\f127"; } - -.fa-chain-broken::before { - content: "\f127"; } - -.fa-chain-slash::before { - content: "\f127"; } - -.fa-unlink::before { - content: "\f127"; } - -.fa-clone::before { - content: "\f24d"; } - -.fa-person-walking-arrow-loop-left::before { - content: "\e551"; } - -.fa-arrow-up-z-a::before { - content: "\f882"; } - -.fa-sort-alpha-up-alt::before { - content: "\f882"; } - -.fa-fire-flame-curved::before { - content: "\f7e4"; } - -.fa-fire-alt::before { - content: "\f7e4"; } - -.fa-tornado::before { - content: "\f76f"; } - -.fa-file-circle-plus::before { - content: "\e494"; } - -.fa-book-quran::before { - content: "\f687"; } - -.fa-quran::before { - content: "\f687"; } - -.fa-anchor::before { - content: "\f13d"; } - -.fa-border-all::before { - content: "\f84c"; } - -.fa-face-angry::before { - content: "\f556"; } - -.fa-angry::before { - content: "\f556"; } - -.fa-cookie-bite::before { - content: "\f564"; } - -.fa-arrow-trend-down::before { - content: "\e097"; } - -.fa-rss::before { - content: "\f09e"; } - -.fa-feed::before { - content: "\f09e"; } - -.fa-draw-polygon::before { - content: "\f5ee"; } - -.fa-scale-balanced::before { - content: "\f24e"; } - -.fa-balance-scale::before { - content: "\f24e"; } - -.fa-gauge-simple-high::before { - content: "\f62a"; } - -.fa-tachometer::before { - content: "\f62a"; } - -.fa-tachometer-fast::before { - content: "\f62a"; } - -.fa-shower::before { - content: "\f2cc"; } - -.fa-desktop::before { - content: "\f390"; } - -.fa-desktop-alt::before { - content: "\f390"; } - -.fa-m::before { - content: "\4d"; } - -.fa-table-list::before { - content: "\f00b"; } - -.fa-th-list::before { - content: "\f00b"; } - -.fa-comment-sms::before { - content: "\f7cd"; } - -.fa-sms::before { - content: "\f7cd"; } - -.fa-book::before { - content: "\f02d"; } - -.fa-user-plus::before { - content: "\f234"; } - -.fa-check::before { - content: "\f00c"; } - .fa-battery-three-quarters::before { content: "\f241"; } .fa-battery-4::before { content: "\f241"; } -.fa-house-circle-check::before { - content: "\e509"; } +.fa-bed::before { + content: "\f236"; } -.fa-angle-left::before { - content: "\f104"; } +.fa-bed-pulse::before { + content: "\f487"; } -.fa-diagram-successor::before { - content: "\e47a"; } +.fa-procedures::before { + content: "\f487"; } -.fa-truck-arrow-right::before { - content: "\e58b"; } +.fa-beer-mug-empty::before { + content: "\f0fc"; } -.fa-arrows-split-up-and-left::before { - content: "\e4bc"; } +.fa-beer::before { + content: "\f0fc"; } -.fa-hand-fist::before { - content: "\f6de"; } +.fa-bell::before { + content: "\f0f3"; } -.fa-fist-raised::before { - content: "\f6de"; } +.fa-bell-concierge::before { + content: "\f562"; } -.fa-cloud-moon::before { - content: "\f6c3"; } +.fa-concierge-bell::before { + content: "\f562"; } -.fa-briefcase::before { - content: "\f0b1"; } +.fa-bell-slash::before { + content: "\f1f6"; } -.fa-person-falling::before { - content: "\e546"; } +.fa-bezier-curve::before { + content: "\f55b"; } -.fa-image-portrait::before { - content: "\f3e0"; } +.fa-bicycle::before { + content: "\f206"; } -.fa-portrait::before { - content: "\f3e0"; } +.fa-binoculars::before { + content: "\f1e5"; } -.fa-user-tag::before { - content: "\f507"; } +.fa-biohazard::before { + content: "\f780"; } -.fa-rug::before { - content: "\e569"; } +.fa-bitcoin-sign::before { + content: "\e0b4"; } -.fa-earth-europe::before { - content: "\f7a2"; } +.fa-blender::before { + content: "\f517"; } -.fa-globe-europe::before { - content: "\f7a2"; } +.fa-blender-phone::before { + content: "\f6b6"; } -.fa-cart-flatbed-suitcase::before { - content: "\f59d"; } +.fa-blog::before { + content: "\f781"; } -.fa-luggage-cart::before { - content: "\f59d"; } +.fa-bold::before { + content: "\f032"; } -.fa-rectangle-xmark::before { - content: "\f410"; } +.fa-bolt::before { + content: "\f0e7"; } -.fa-rectangle-times::before { - content: "\f410"; } +.fa-zap::before { + content: "\f0e7"; } -.fa-times-rectangle::before { - content: "\f410"; } +.fa-bolt-lightning::before { + content: "\e0b7"; } -.fa-window-close::before { - content: "\f410"; } +.fa-bomb::before { + content: "\f1e2"; } -.fa-baht-sign::before { - content: "\e0ac"; } +.fa-bone::before { + content: "\f5d7"; } -.fa-book-open::before { - content: "\f518"; } +.fa-bong::before { + content: "\f55c"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } .fa-book-journal-whills::before { content: "\f66a"; } @@ -5957,311 +1153,167 @@ readers do not read off random characters that represent icons */ .fa-journal-whills::before { content: "\f66a"; } -.fa-handcuffs::before { - content: "\e4f8"; } +.fa-book-medical::before { + content: "\f7e6"; } -.fa-triangle-exclamation::before { - content: "\f071"; } +.fa-book-open::before { + content: "\f518"; } -.fa-exclamation-triangle::before { - content: "\f071"; } +.fa-book-open-reader::before { + content: "\f5da"; } -.fa-warning::before { - content: "\f071"; } +.fa-book-reader::before { + content: "\f5da"; } -.fa-database::before { - content: "\f1c0"; } +.fa-book-quran::before { + content: "\f687"; } -.fa-share::before { - content: "\f064"; } +.fa-quran::before { + content: "\f687"; } -.fa-mail-forward::before { - content: "\f064"; } +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-bore-hole::before { + content: "\e4c3"; } .fa-bottle-droplet::before { content: "\e4c4"; } -.fa-mask-face::before { - content: "\e1d7"; } +.fa-bottle-water::before { + content: "\e4c5"; } -.fa-hill-rockslide::before { - content: "\e508"; } +.fa-bowl-food::before { + content: "\e4c6"; } -.fa-right-left::before { - content: "\f362"; } - -.fa-exchange-alt::before { - content: "\f362"; } - -.fa-paper-plane::before { - content: "\f1d8"; } - -.fa-road-circle-exclamation::before { - content: "\e565"; } - -.fa-dungeon::before { - content: "\f6d9"; } - -.fa-align-right::before { - content: "\f038"; } - -.fa-money-bill-1-wave::before { - content: "\f53b"; } - -.fa-money-bill-wave-alt::before { - content: "\f53b"; } - -.fa-life-ring::before { - content: "\f1cd"; } - -.fa-hands::before { - content: "\f2a7"; } - -.fa-sign-language::before { - content: "\f2a7"; } - -.fa-signing::before { - content: "\f2a7"; } - -.fa-calendar-day::before { - content: "\f783"; } - -.fa-water-ladder::before { - content: "\f5c5"; } - -.fa-ladder-water::before { - content: "\f5c5"; } - -.fa-swimming-pool::before { - content: "\f5c5"; } - -.fa-arrows-up-down::before { - content: "\f07d"; } - -.fa-arrows-v::before { - content: "\f07d"; } - -.fa-face-grimace::before { - content: "\f57f"; } - -.fa-grimace::before { - content: "\f57f"; } - -.fa-wheelchair-move::before { - content: "\e2ce"; } - -.fa-wheelchair-alt::before { - content: "\e2ce"; } - -.fa-turn-down::before { - content: "\f3be"; } - -.fa-level-down-alt::before { - content: "\f3be"; } - -.fa-person-walking-arrow-right::before { - content: "\e552"; } - -.fa-square-envelope::before { - content: "\f199"; } - -.fa-envelope-square::before { - content: "\f199"; } - -.fa-dice::before { - content: "\f522"; } +.fa-bowl-rice::before { + content: "\e2eb"; } .fa-bowling-ball::before { content: "\f436"; } +.fa-box::before { + content: "\f466"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-braille::before { + content: "\f2a1"; } + .fa-brain::before { content: "\f5dc"; } -.fa-bandage::before { - content: "\f462"; } +.fa-brazilian-real-sign::before { + content: "\e46c"; } -.fa-band-aid::before { - content: "\f462"; } +.fa-bread-slice::before { + content: "\f7ec"; } -.fa-calendar-minus::before { - content: "\f272"; } +.fa-bridge::before { + content: "\e4c8"; } -.fa-circle-xmark::before { - content: "\f057"; } +.fa-bridge-circle-check::before { + content: "\e4c9"; } -.fa-times-circle::before { - content: "\f057"; } +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } -.fa-xmark-circle::before { - content: "\f057"; } +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } -.fa-gifts::before { - content: "\f79c"; } +.fa-bridge-lock::before { + content: "\e4cc"; } -.fa-hotel::before { - content: "\f594"; } +.fa-bridge-water::before { + content: "\e4ce"; } -.fa-earth-asia::before { - content: "\f57e"; } +.fa-briefcase::before { + content: "\f0b1"; } -.fa-globe-asia::before { - content: "\f57e"; } +.fa-briefcase-medical::before { + content: "\f469"; } -.fa-id-card-clip::before { - content: "\f47f"; } +.fa-broom::before { + content: "\f51a"; } -.fa-id-card-alt::before { - content: "\f47f"; } +.fa-broom-ball::before { + content: "\f458"; } -.fa-magnifying-glass-plus::before { - content: "\f00e"; } +.fa-quidditch::before { + content: "\f458"; } -.fa-search-plus::before { - content: "\f00e"; } - -.fa-thumbs-up::before { - content: "\f164"; } - -.fa-user-clock::before { - content: "\f4fd"; } - -.fa-hand-dots::before { - content: "\f461"; } - -.fa-allergies::before { - content: "\f461"; } - -.fa-file-invoice::before { - content: "\f570"; } - -.fa-window-minimize::before { - content: "\f2d1"; } - -.fa-mug-saucer::before { - content: "\f0f4"; } - -.fa-coffee::before { - content: "\f0f4"; } +.fa-quidditch-broom-ball::before { + content: "\f458"; } .fa-brush::before { content: "\f55d"; } -.fa-mask::before { - content: "\f6fa"; } +.fa-bucket::before { + content: "\e4cf"; } -.fa-magnifying-glass-minus::before { - content: "\f010"; } - -.fa-search-minus::before { - content: "\f010"; } - -.fa-ruler-vertical::before { - content: "\f548"; } - -.fa-user-large::before { - content: "\f406"; } - -.fa-user-alt::before { - content: "\f406"; } - -.fa-train-tram::before { - content: "\e5b4"; } - -.fa-user-nurse::before { - content: "\f82f"; } - -.fa-syringe::before { - content: "\f48e"; } - -.fa-cloud-sun::before { - content: "\f6c4"; } - -.fa-stopwatch-20::before { - content: "\e06f"; } - -.fa-square-full::before { - content: "\f45c"; } - -.fa-magnet::before { - content: "\f076"; } - -.fa-jar::before { - content: "\e516"; } - -.fa-note-sticky::before { - content: "\f249"; } - -.fa-sticky-note::before { - content: "\f249"; } +.fa-bug::before { + content: "\f188"; } .fa-bug-slash::before { content: "\e490"; } -.fa-arrow-up-from-water-pump::before { - content: "\e4b6"; } +.fa-bugs::before { + content: "\e4d0"; } -.fa-bone::before { - content: "\f5d7"; } +.fa-building::before { + content: "\f1ad"; } -.fa-user-injured::before { - content: "\f728"; } +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } -.fa-face-sad-tear::before { - content: "\f5b4"; } +.fa-building-circle-check::before { + content: "\e4d2"; } -.fa-sad-tear::before { - content: "\f5b4"; } +.fa-building-circle-exclamation::before { + content: "\e4d3"; } -.fa-plane::before { - content: "\f072"; } - -.fa-tent-arrows-down::before { - content: "\e581"; } - -.fa-exclamation::before { - content: "\21"; } - -.fa-arrows-spin::before { - content: "\e4bb"; } - -.fa-print::before { - content: "\f02f"; } - -.fa-turkish-lira-sign::before { - content: "\e2bb"; } - -.fa-try::before { - content: "\e2bb"; } - -.fa-turkish-lira::before { - content: "\e2bb"; } - -.fa-dollar-sign::before { - content: "\24"; } - -.fa-dollar::before { - content: "\24"; } - -.fa-usd::before { - content: "\24"; } - -.fa-x::before { - content: "\58"; } - -.fa-magnifying-glass-dollar::before { - content: "\f688"; } - -.fa-search-dollar::before { - content: "\f688"; } - -.fa-users-gear::before { - content: "\f509"; } - -.fa-users-cog::before { - content: "\f509"; } - -.fa-person-military-pointing::before { - content: "\e54a"; } +.fa-building-circle-xmark::before { + content: "\e4d4"; } .fa-building-columns::before { content: "\f19c"; } @@ -6278,59 +1330,1670 @@ readers do not read off random characters that represent icons */ .fa-university::before { content: "\f19c"; } -.fa-umbrella::before { - content: "\f0e9"; } +.fa-building-flag::before { + content: "\e4d5"; } -.fa-trowel::before { - content: "\e589"; } +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-c::before { + content: "\43"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-code::before { + content: "\f121"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } .fa-d::before { content: "\44"; } -.fa-stapler::before { - content: "\e5af"; } +.fa-database::before { + content: "\f1c0"; } -.fa-masks-theater::before { - content: "\f630"; } +.fa-delete-left::before { + content: "\f55a"; } -.fa-theater-masks::before { - content: "\f630"; } +.fa-backspace::before { + content: "\f55a"; } -.fa-kip-sign::before { - content: "\e1c4"; } +.fa-democrat::before { + content: "\f747"; } -.fa-hand-point-left::before { - content: "\f0a5"; } +.fa-desktop::before { + content: "\f390"; } -.fa-handshake-simple::before { - content: "\f4c6"; } +.fa-desktop-alt::before { + content: "\f390"; } -.fa-handshake-alt::before { - content: "\f4c6"; } +.fa-dharmachakra::before { + content: "\f655"; } -.fa-jet-fighter::before { - content: "\f0fb"; } +.fa-diagram-next::before { + content: "\e476"; } -.fa-fighter-jet::before { - content: "\f0fb"; } +.fa-diagram-predecessor::before { + content: "\e477"; } -.fa-square-share-nodes::before { - content: "\f1e1"; } +.fa-diagram-project::before { + content: "\f542"; } -.fa-share-alt-square::before { - content: "\f1e1"; } +.fa-project-diagram::before { + content: "\f542"; } -.fa-barcode::before { - content: "\f02a"; } +.fa-diagram-successor::before { + content: "\e47a"; } -.fa-plus-minus::before { - content: "\e43c"; } +.fa-diamond::before { + content: "\f219"; } -.fa-video::before { - content: "\f03d"; } +.fa-diamond-turn-right::before { + content: "\f5eb"; } -.fa-video-camera::before { - content: "\f03d"; } +.fa-directions::before { + content: "\f5eb"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-display::before { + content: "\e163"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-download::before { + content: "\f019"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-e::before { + content: "\45"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-f::before { + content: "\46"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-file-circle-check::before { + content: "\e493"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-file-circle-plus::before { + content: "\e4ee"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-file-circle-xmark::before { + content: "\e494"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-film::before { + content: "\f008"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-font::before { + content: "\f031"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-g::before { + content: "\47"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-gopuram::before { + content: "\f664"; } .fa-graduation-cap::before { content: "\f19d"; } @@ -6338,18 +3001,3318 @@ readers do not read off random characters that represent icons */ .fa-mortar-board::before { content: "\f19d"; } +.fa-greater-than::before { + content: "\3e"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-h::before { + content: "\48"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + .fa-hand-holding-medical::before { content: "\e05c"; } +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-2::before { + content: "\f254"; } + +.fa-hourglass-half::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f252"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-i::before { + content: "\49"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-images::before { + content: "\f302"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-info::before { + content: "\f129"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-j::before { + content: "\4a"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-k::before { + content: "\4b"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-key::before { + content: "\f084"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-l::before { + content: "\4c"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-m::before { + content: "\4d"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-map::before { + content: "\f279"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-music::before { + content: "\f001"; } + +.fa-n::before { + content: "\4e"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-o::before { + content: "\4f"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-om::before { + content: "\f679"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-p::before { + content: "\50"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + .fa-person-circle-check::before { content: "\e53e"; } +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-person-through-window::before { + content: "\e433"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-plant-wilt::before { + content: "\e43b"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-q::before { + content: "\51"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-question::before { + content: "\3f"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-r::before { + content: "\52"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-road::before { + content: "\f018"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-s::before { + content: "\53"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-school::before { + content: "\f549"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-section::before { + content: "\e447"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-server::before { + content: "\f233"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-share::before { + content: "\f064"; } + +.fa-arrow-turn-right::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-star::before { + content: "\f005"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-t::before { + content: "\54"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-train::before { + content: "\f238"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-train-tram::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + .fa-turn-up::before { content: "\f3bf"; } .fa-level-up-alt::before { content: "\f3bf"; } +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-u::before { + content: "\55"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-user::before { + content: "\f007"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-v::before { + content: "\56"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-w::before { + content: "\57"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-water::before { + content: "\f773"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-x::before { + content: "\58"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-y::before { + content: "\59"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-z::before { + content: "\5a"; } + .sr-only, .fa-sr-only { position: absolute; diff --git a/resources/fontawesome/svgs/brands/42-group.svg b/resources/fontawesome/svgs/brands/42-group.svg deleted file mode 100644 index 1b5e45d..0000000 --- a/resources/fontawesome/svgs/brands/42-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/500px.svg b/resources/fontawesome/svgs/brands/500px.svg deleted file mode 100644 index 1f17fc8..0000000 --- a/resources/fontawesome/svgs/brands/500px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/accessible-icon.svg b/resources/fontawesome/svgs/brands/accessible-icon.svg deleted file mode 100644 index 6b6aff6..0000000 --- a/resources/fontawesome/svgs/brands/accessible-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/accusoft.svg b/resources/fontawesome/svgs/brands/accusoft.svg deleted file mode 100644 index 5f6a73e..0000000 --- a/resources/fontawesome/svgs/brands/accusoft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/adn.svg b/resources/fontawesome/svgs/brands/adn.svg deleted file mode 100644 index 54982ba..0000000 --- a/resources/fontawesome/svgs/brands/adn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/adversal.svg b/resources/fontawesome/svgs/brands/adversal.svg deleted file mode 100644 index cddc08d..0000000 --- a/resources/fontawesome/svgs/brands/adversal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/affiliatetheme.svg b/resources/fontawesome/svgs/brands/affiliatetheme.svg deleted file mode 100644 index 1f2b266..0000000 --- a/resources/fontawesome/svgs/brands/affiliatetheme.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/airbnb.svg b/resources/fontawesome/svgs/brands/airbnb.svg deleted file mode 100644 index ecd4172..0000000 --- a/resources/fontawesome/svgs/brands/airbnb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/algolia.svg b/resources/fontawesome/svgs/brands/algolia.svg deleted file mode 100644 index fa5afbf..0000000 --- a/resources/fontawesome/svgs/brands/algolia.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/alipay.svg b/resources/fontawesome/svgs/brands/alipay.svg deleted file mode 100644 index 10b10c9..0000000 --- a/resources/fontawesome/svgs/brands/alipay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/amazon-pay.svg b/resources/fontawesome/svgs/brands/amazon-pay.svg deleted file mode 100644 index cdca9ad..0000000 --- a/resources/fontawesome/svgs/brands/amazon-pay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/amazon.svg b/resources/fontawesome/svgs/brands/amazon.svg deleted file mode 100644 index e33ea7a..0000000 --- a/resources/fontawesome/svgs/brands/amazon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/amilia.svg b/resources/fontawesome/svgs/brands/amilia.svg deleted file mode 100644 index ca939b3..0000000 --- a/resources/fontawesome/svgs/brands/amilia.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/android.svg b/resources/fontawesome/svgs/brands/android.svg deleted file mode 100644 index c287199..0000000 --- a/resources/fontawesome/svgs/brands/android.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/angellist.svg b/resources/fontawesome/svgs/brands/angellist.svg deleted file mode 100644 index 50b5cfd..0000000 --- a/resources/fontawesome/svgs/brands/angellist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/angrycreative.svg b/resources/fontawesome/svgs/brands/angrycreative.svg deleted file mode 100644 index b510344..0000000 --- a/resources/fontawesome/svgs/brands/angrycreative.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/angular.svg b/resources/fontawesome/svgs/brands/angular.svg deleted file mode 100644 index feb2a49..0000000 --- a/resources/fontawesome/svgs/brands/angular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/app-store-ios.svg b/resources/fontawesome/svgs/brands/app-store-ios.svg deleted file mode 100644 index 25cf325..0000000 --- a/resources/fontawesome/svgs/brands/app-store-ios.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/app-store.svg b/resources/fontawesome/svgs/brands/app-store.svg deleted file mode 100644 index 999b116..0000000 --- a/resources/fontawesome/svgs/brands/app-store.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/apper.svg b/resources/fontawesome/svgs/brands/apper.svg deleted file mode 100644 index e579c54..0000000 --- a/resources/fontawesome/svgs/brands/apper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/apple-pay.svg b/resources/fontawesome/svgs/brands/apple-pay.svg deleted file mode 100644 index 9c90232..0000000 --- a/resources/fontawesome/svgs/brands/apple-pay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/apple.svg b/resources/fontawesome/svgs/brands/apple.svg deleted file mode 100644 index 2540c78..0000000 --- a/resources/fontawesome/svgs/brands/apple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/artstation.svg b/resources/fontawesome/svgs/brands/artstation.svg deleted file mode 100644 index 520d755..0000000 --- a/resources/fontawesome/svgs/brands/artstation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/asymmetrik.svg b/resources/fontawesome/svgs/brands/asymmetrik.svg deleted file mode 100644 index 5a016a8..0000000 --- a/resources/fontawesome/svgs/brands/asymmetrik.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/atlassian.svg b/resources/fontawesome/svgs/brands/atlassian.svg deleted file mode 100644 index e4c2e50..0000000 --- a/resources/fontawesome/svgs/brands/atlassian.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/audible.svg b/resources/fontawesome/svgs/brands/audible.svg deleted file mode 100644 index e010329..0000000 --- a/resources/fontawesome/svgs/brands/audible.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/autoprefixer.svg b/resources/fontawesome/svgs/brands/autoprefixer.svg deleted file mode 100644 index b8c4bbc..0000000 --- a/resources/fontawesome/svgs/brands/autoprefixer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/avianex.svg b/resources/fontawesome/svgs/brands/avianex.svg deleted file mode 100644 index c52e8c8..0000000 --- a/resources/fontawesome/svgs/brands/avianex.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/aviato.svg b/resources/fontawesome/svgs/brands/aviato.svg deleted file mode 100644 index 8c26685..0000000 --- a/resources/fontawesome/svgs/brands/aviato.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/aws.svg b/resources/fontawesome/svgs/brands/aws.svg deleted file mode 100644 index 1547fa0..0000000 --- a/resources/fontawesome/svgs/brands/aws.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bandcamp.svg b/resources/fontawesome/svgs/brands/bandcamp.svg deleted file mode 100644 index 24aeb08..0000000 --- a/resources/fontawesome/svgs/brands/bandcamp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/battle-net.svg b/resources/fontawesome/svgs/brands/battle-net.svg deleted file mode 100644 index 1b49d11..0000000 --- a/resources/fontawesome/svgs/brands/battle-net.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/behance.svg b/resources/fontawesome/svgs/brands/behance.svg deleted file mode 100644 index 0ec1746..0000000 --- a/resources/fontawesome/svgs/brands/behance.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bilibili.svg b/resources/fontawesome/svgs/brands/bilibili.svg deleted file mode 100644 index 8b8aff0..0000000 --- a/resources/fontawesome/svgs/brands/bilibili.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bimobject.svg b/resources/fontawesome/svgs/brands/bimobject.svg deleted file mode 100644 index 2c4f1e2..0000000 --- a/resources/fontawesome/svgs/brands/bimobject.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bitbucket.svg b/resources/fontawesome/svgs/brands/bitbucket.svg deleted file mode 100644 index e17035a..0000000 --- a/resources/fontawesome/svgs/brands/bitbucket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bitcoin.svg b/resources/fontawesome/svgs/brands/bitcoin.svg deleted file mode 100644 index 86b569d..0000000 --- a/resources/fontawesome/svgs/brands/bitcoin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bity.svg b/resources/fontawesome/svgs/brands/bity.svg deleted file mode 100644 index 13e4dee..0000000 --- a/resources/fontawesome/svgs/brands/bity.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/black-tie.svg b/resources/fontawesome/svgs/brands/black-tie.svg deleted file mode 100644 index 9879475..0000000 --- a/resources/fontawesome/svgs/brands/black-tie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/blackberry.svg b/resources/fontawesome/svgs/brands/blackberry.svg deleted file mode 100644 index 220d866..0000000 --- a/resources/fontawesome/svgs/brands/blackberry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/blogger-b.svg b/resources/fontawesome/svgs/brands/blogger-b.svg deleted file mode 100644 index 701068f..0000000 --- a/resources/fontawesome/svgs/brands/blogger-b.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/blogger.svg b/resources/fontawesome/svgs/brands/blogger.svg deleted file mode 100644 index 8eea140..0000000 --- a/resources/fontawesome/svgs/brands/blogger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bluesky.svg b/resources/fontawesome/svgs/brands/bluesky.svg deleted file mode 100644 index 5fe8ad3..0000000 --- a/resources/fontawesome/svgs/brands/bluesky.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bluetooth-b.svg b/resources/fontawesome/svgs/brands/bluetooth-b.svg deleted file mode 100644 index 43cd196..0000000 --- a/resources/fontawesome/svgs/brands/bluetooth-b.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bluetooth.svg b/resources/fontawesome/svgs/brands/bluetooth.svg deleted file mode 100644 index 3b9f5a5..0000000 --- a/resources/fontawesome/svgs/brands/bluetooth.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bootstrap.svg b/resources/fontawesome/svgs/brands/bootstrap.svg deleted file mode 100644 index 2644ad4..0000000 --- a/resources/fontawesome/svgs/brands/bootstrap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/bots.svg b/resources/fontawesome/svgs/brands/bots.svg deleted file mode 100644 index 4c4e68e..0000000 --- a/resources/fontawesome/svgs/brands/bots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/brave-reverse.svg b/resources/fontawesome/svgs/brands/brave-reverse.svg deleted file mode 100644 index 61055b5..0000000 --- a/resources/fontawesome/svgs/brands/brave-reverse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/brave.svg b/resources/fontawesome/svgs/brands/brave.svg deleted file mode 100644 index 5003d78..0000000 --- a/resources/fontawesome/svgs/brands/brave.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/btc.svg b/resources/fontawesome/svgs/brands/btc.svg deleted file mode 100644 index e83566e..0000000 --- a/resources/fontawesome/svgs/brands/btc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/buffer.svg b/resources/fontawesome/svgs/brands/buffer.svg deleted file mode 100644 index 1001127..0000000 --- a/resources/fontawesome/svgs/brands/buffer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/buromobelexperte.svg b/resources/fontawesome/svgs/brands/buromobelexperte.svg deleted file mode 100644 index 39bd62c..0000000 --- a/resources/fontawesome/svgs/brands/buromobelexperte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/buy-n-large.svg b/resources/fontawesome/svgs/brands/buy-n-large.svg deleted file mode 100644 index 60ebc1d..0000000 --- a/resources/fontawesome/svgs/brands/buy-n-large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/buysellads.svg b/resources/fontawesome/svgs/brands/buysellads.svg deleted file mode 100644 index 36f4a8f..0000000 --- a/resources/fontawesome/svgs/brands/buysellads.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/canadian-maple-leaf.svg b/resources/fontawesome/svgs/brands/canadian-maple-leaf.svg deleted file mode 100644 index 7024795..0000000 --- a/resources/fontawesome/svgs/brands/canadian-maple-leaf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-amazon-pay.svg b/resources/fontawesome/svgs/brands/cc-amazon-pay.svg deleted file mode 100644 index c3aaee7..0000000 --- a/resources/fontawesome/svgs/brands/cc-amazon-pay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-amex.svg b/resources/fontawesome/svgs/brands/cc-amex.svg deleted file mode 100644 index aa6c8df..0000000 --- a/resources/fontawesome/svgs/brands/cc-amex.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-apple-pay.svg b/resources/fontawesome/svgs/brands/cc-apple-pay.svg deleted file mode 100644 index dab0dcb..0000000 --- a/resources/fontawesome/svgs/brands/cc-apple-pay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-diners-club.svg b/resources/fontawesome/svgs/brands/cc-diners-club.svg deleted file mode 100644 index 85c7922..0000000 --- a/resources/fontawesome/svgs/brands/cc-diners-club.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-discover.svg b/resources/fontawesome/svgs/brands/cc-discover.svg deleted file mode 100644 index a5d13ad..0000000 --- a/resources/fontawesome/svgs/brands/cc-discover.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-jcb.svg b/resources/fontawesome/svgs/brands/cc-jcb.svg deleted file mode 100644 index 9a0c6b6..0000000 --- a/resources/fontawesome/svgs/brands/cc-jcb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-mastercard.svg b/resources/fontawesome/svgs/brands/cc-mastercard.svg deleted file mode 100644 index b7b3b85..0000000 --- a/resources/fontawesome/svgs/brands/cc-mastercard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-paypal.svg b/resources/fontawesome/svgs/brands/cc-paypal.svg deleted file mode 100644 index d5281da..0000000 --- a/resources/fontawesome/svgs/brands/cc-paypal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-stripe.svg b/resources/fontawesome/svgs/brands/cc-stripe.svg deleted file mode 100644 index 9a93918..0000000 --- a/resources/fontawesome/svgs/brands/cc-stripe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cc-visa.svg b/resources/fontawesome/svgs/brands/cc-visa.svg deleted file mode 100644 index 23526c1..0000000 --- a/resources/fontawesome/svgs/brands/cc-visa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/centercode.svg b/resources/fontawesome/svgs/brands/centercode.svg deleted file mode 100644 index d3ebe7c..0000000 --- a/resources/fontawesome/svgs/brands/centercode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/centos.svg b/resources/fontawesome/svgs/brands/centos.svg deleted file mode 100644 index 01bb0d1..0000000 --- a/resources/fontawesome/svgs/brands/centos.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/chrome.svg b/resources/fontawesome/svgs/brands/chrome.svg deleted file mode 100644 index 70f9182..0000000 --- a/resources/fontawesome/svgs/brands/chrome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/chromecast.svg b/resources/fontawesome/svgs/brands/chromecast.svg deleted file mode 100644 index 5308a4e..0000000 --- a/resources/fontawesome/svgs/brands/chromecast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cloudflare.svg b/resources/fontawesome/svgs/brands/cloudflare.svg deleted file mode 100644 index 5d68627..0000000 --- a/resources/fontawesome/svgs/brands/cloudflare.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cloudscale.svg b/resources/fontawesome/svgs/brands/cloudscale.svg deleted file mode 100644 index d107163..0000000 --- a/resources/fontawesome/svgs/brands/cloudscale.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cloudsmith.svg b/resources/fontawesome/svgs/brands/cloudsmith.svg deleted file mode 100644 index c9f0ad7..0000000 --- a/resources/fontawesome/svgs/brands/cloudsmith.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cloudversify.svg b/resources/fontawesome/svgs/brands/cloudversify.svg deleted file mode 100644 index b1fd5b2..0000000 --- a/resources/fontawesome/svgs/brands/cloudversify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cmplid.svg b/resources/fontawesome/svgs/brands/cmplid.svg deleted file mode 100644 index 52e273e..0000000 --- a/resources/fontawesome/svgs/brands/cmplid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/codepen.svg b/resources/fontawesome/svgs/brands/codepen.svg deleted file mode 100644 index 3c2bb5d..0000000 --- a/resources/fontawesome/svgs/brands/codepen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/codiepie.svg b/resources/fontawesome/svgs/brands/codiepie.svg deleted file mode 100644 index 53188c9..0000000 --- a/resources/fontawesome/svgs/brands/codiepie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/confluence.svg b/resources/fontawesome/svgs/brands/confluence.svg deleted file mode 100644 index 02e4f0b..0000000 --- a/resources/fontawesome/svgs/brands/confluence.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/connectdevelop.svg b/resources/fontawesome/svgs/brands/connectdevelop.svg deleted file mode 100644 index 105a86a..0000000 --- a/resources/fontawesome/svgs/brands/connectdevelop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/contao.svg b/resources/fontawesome/svgs/brands/contao.svg deleted file mode 100644 index bb56e78..0000000 --- a/resources/fontawesome/svgs/brands/contao.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cotton-bureau.svg b/resources/fontawesome/svgs/brands/cotton-bureau.svg deleted file mode 100644 index 0cb6a4d..0000000 --- a/resources/fontawesome/svgs/brands/cotton-bureau.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cpanel.svg b/resources/fontawesome/svgs/brands/cpanel.svg deleted file mode 100644 index 914a85b..0000000 --- a/resources/fontawesome/svgs/brands/cpanel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-by.svg b/resources/fontawesome/svgs/brands/creative-commons-by.svg deleted file mode 100644 index 8771d65..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-by.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-nc-eu.svg b/resources/fontawesome/svgs/brands/creative-commons-nc-eu.svg deleted file mode 100644 index 6faf966..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-nc-eu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-nc-jp.svg b/resources/fontawesome/svgs/brands/creative-commons-nc-jp.svg deleted file mode 100644 index e72abe6..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-nc-jp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-nc.svg b/resources/fontawesome/svgs/brands/creative-commons-nc.svg deleted file mode 100644 index 1c8c294..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-nc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-nd.svg b/resources/fontawesome/svgs/brands/creative-commons-nd.svg deleted file mode 100644 index 5643f60..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-nd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-pd-alt.svg b/resources/fontawesome/svgs/brands/creative-commons-pd-alt.svg deleted file mode 100644 index 18fd93d..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-pd-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-pd.svg b/resources/fontawesome/svgs/brands/creative-commons-pd.svg deleted file mode 100644 index 96f4f14..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-pd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-remix.svg b/resources/fontawesome/svgs/brands/creative-commons-remix.svg deleted file mode 100644 index 4e64088..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-remix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-sa.svg b/resources/fontawesome/svgs/brands/creative-commons-sa.svg deleted file mode 100644 index 183ef72..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-sa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-sampling-plus.svg b/resources/fontawesome/svgs/brands/creative-commons-sampling-plus.svg deleted file mode 100644 index 1eebde4..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-sampling-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-sampling.svg b/resources/fontawesome/svgs/brands/creative-commons-sampling.svg deleted file mode 100644 index f7ac9d2..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-sampling.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-share.svg b/resources/fontawesome/svgs/brands/creative-commons-share.svg deleted file mode 100644 index 34cda89..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-share.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons-zero.svg b/resources/fontawesome/svgs/brands/creative-commons-zero.svg deleted file mode 100644 index 1228a4a..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons-zero.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/creative-commons.svg b/resources/fontawesome/svgs/brands/creative-commons.svg deleted file mode 100644 index 6ec3aab..0000000 --- a/resources/fontawesome/svgs/brands/creative-commons.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/critical-role.svg b/resources/fontawesome/svgs/brands/critical-role.svg deleted file mode 100644 index 0821856..0000000 --- a/resources/fontawesome/svgs/brands/critical-role.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/css3-alt.svg b/resources/fontawesome/svgs/brands/css3-alt.svg deleted file mode 100644 index b74cdd7..0000000 --- a/resources/fontawesome/svgs/brands/css3-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/css3.svg b/resources/fontawesome/svgs/brands/css3.svg deleted file mode 100644 index 93fe0de..0000000 --- a/resources/fontawesome/svgs/brands/css3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/cuttlefish.svg b/resources/fontawesome/svgs/brands/cuttlefish.svg deleted file mode 100644 index 17c93fe..0000000 --- a/resources/fontawesome/svgs/brands/cuttlefish.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/d-and-d-beyond.svg b/resources/fontawesome/svgs/brands/d-and-d-beyond.svg deleted file mode 100644 index f0f7827..0000000 --- a/resources/fontawesome/svgs/brands/d-and-d-beyond.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/d-and-d.svg b/resources/fontawesome/svgs/brands/d-and-d.svg deleted file mode 100644 index 946a86b..0000000 --- a/resources/fontawesome/svgs/brands/d-and-d.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dailymotion.svg b/resources/fontawesome/svgs/brands/dailymotion.svg deleted file mode 100644 index d4f44c5..0000000 --- a/resources/fontawesome/svgs/brands/dailymotion.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dashcube.svg b/resources/fontawesome/svgs/brands/dashcube.svg deleted file mode 100644 index d06d976..0000000 --- a/resources/fontawesome/svgs/brands/dashcube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/debian.svg b/resources/fontawesome/svgs/brands/debian.svg deleted file mode 100644 index 27e2d6d..0000000 --- a/resources/fontawesome/svgs/brands/debian.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/deezer.svg b/resources/fontawesome/svgs/brands/deezer.svg deleted file mode 100644 index 9b3d891..0000000 --- a/resources/fontawesome/svgs/brands/deezer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/delicious.svg b/resources/fontawesome/svgs/brands/delicious.svg deleted file mode 100644 index 73495ba..0000000 --- a/resources/fontawesome/svgs/brands/delicious.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/deploydog.svg b/resources/fontawesome/svgs/brands/deploydog.svg deleted file mode 100644 index 2c92fc6..0000000 --- a/resources/fontawesome/svgs/brands/deploydog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/deskpro.svg b/resources/fontawesome/svgs/brands/deskpro.svg deleted file mode 100644 index 6fea4bb..0000000 --- a/resources/fontawesome/svgs/brands/deskpro.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dev.svg b/resources/fontawesome/svgs/brands/dev.svg deleted file mode 100644 index 51be392..0000000 --- a/resources/fontawesome/svgs/brands/dev.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/deviantart.svg b/resources/fontawesome/svgs/brands/deviantart.svg deleted file mode 100644 index 19c56a4..0000000 --- a/resources/fontawesome/svgs/brands/deviantart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dhl.svg b/resources/fontawesome/svgs/brands/dhl.svg deleted file mode 100644 index c357ea0..0000000 --- a/resources/fontawesome/svgs/brands/dhl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/diaspora.svg b/resources/fontawesome/svgs/brands/diaspora.svg deleted file mode 100644 index 98d60e7..0000000 --- a/resources/fontawesome/svgs/brands/diaspora.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/digg.svg b/resources/fontawesome/svgs/brands/digg.svg deleted file mode 100644 index d01d751..0000000 --- a/resources/fontawesome/svgs/brands/digg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/digital-ocean.svg b/resources/fontawesome/svgs/brands/digital-ocean.svg deleted file mode 100644 index c7b07a0..0000000 --- a/resources/fontawesome/svgs/brands/digital-ocean.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/discord.svg b/resources/fontawesome/svgs/brands/discord.svg deleted file mode 100644 index 7883ac3..0000000 --- a/resources/fontawesome/svgs/brands/discord.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/discourse.svg b/resources/fontawesome/svgs/brands/discourse.svg deleted file mode 100644 index 70cb7c5..0000000 --- a/resources/fontawesome/svgs/brands/discourse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dochub.svg b/resources/fontawesome/svgs/brands/dochub.svg deleted file mode 100644 index e4e865f..0000000 --- a/resources/fontawesome/svgs/brands/dochub.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/docker.svg b/resources/fontawesome/svgs/brands/docker.svg deleted file mode 100644 index 1d2fd1a..0000000 --- a/resources/fontawesome/svgs/brands/docker.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/draft2digital.svg b/resources/fontawesome/svgs/brands/draft2digital.svg deleted file mode 100644 index e9194c7..0000000 --- a/resources/fontawesome/svgs/brands/draft2digital.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dribbble.svg b/resources/fontawesome/svgs/brands/dribbble.svg deleted file mode 100644 index 2ce74c8..0000000 --- a/resources/fontawesome/svgs/brands/dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dropbox.svg b/resources/fontawesome/svgs/brands/dropbox.svg deleted file mode 100644 index 09a94f9..0000000 --- a/resources/fontawesome/svgs/brands/dropbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/drupal.svg b/resources/fontawesome/svgs/brands/drupal.svg deleted file mode 100644 index d4a8cfe..0000000 --- a/resources/fontawesome/svgs/brands/drupal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/dyalog.svg b/resources/fontawesome/svgs/brands/dyalog.svg deleted file mode 100644 index 57d4fce..0000000 --- a/resources/fontawesome/svgs/brands/dyalog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/earlybirds.svg b/resources/fontawesome/svgs/brands/earlybirds.svg deleted file mode 100644 index 21b89ce..0000000 --- a/resources/fontawesome/svgs/brands/earlybirds.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ebay.svg b/resources/fontawesome/svgs/brands/ebay.svg deleted file mode 100644 index 5fe4944..0000000 --- a/resources/fontawesome/svgs/brands/ebay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/edge-legacy.svg b/resources/fontawesome/svgs/brands/edge-legacy.svg deleted file mode 100644 index 1c1c152..0000000 --- a/resources/fontawesome/svgs/brands/edge-legacy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/edge.svg b/resources/fontawesome/svgs/brands/edge.svg deleted file mode 100644 index 58dded3..0000000 --- a/resources/fontawesome/svgs/brands/edge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/elementor.svg b/resources/fontawesome/svgs/brands/elementor.svg deleted file mode 100644 index 633c896..0000000 --- a/resources/fontawesome/svgs/brands/elementor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ello.svg b/resources/fontawesome/svgs/brands/ello.svg deleted file mode 100644 index 0fe83d5..0000000 --- a/resources/fontawesome/svgs/brands/ello.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ember.svg b/resources/fontawesome/svgs/brands/ember.svg deleted file mode 100644 index 62916cf..0000000 --- a/resources/fontawesome/svgs/brands/ember.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/empire.svg b/resources/fontawesome/svgs/brands/empire.svg deleted file mode 100644 index c8db252..0000000 --- a/resources/fontawesome/svgs/brands/empire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/envira.svg b/resources/fontawesome/svgs/brands/envira.svg deleted file mode 100644 index 77fd55b..0000000 --- a/resources/fontawesome/svgs/brands/envira.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/erlang.svg b/resources/fontawesome/svgs/brands/erlang.svg deleted file mode 100644 index 80a7eb5..0000000 --- a/resources/fontawesome/svgs/brands/erlang.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ethereum.svg b/resources/fontawesome/svgs/brands/ethereum.svg deleted file mode 100644 index a7911bd..0000000 --- a/resources/fontawesome/svgs/brands/ethereum.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/etsy.svg b/resources/fontawesome/svgs/brands/etsy.svg deleted file mode 100644 index 34b15f6..0000000 --- a/resources/fontawesome/svgs/brands/etsy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/evernote.svg b/resources/fontawesome/svgs/brands/evernote.svg deleted file mode 100644 index 4a0dd3b..0000000 --- a/resources/fontawesome/svgs/brands/evernote.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/expeditedssl.svg b/resources/fontawesome/svgs/brands/expeditedssl.svg deleted file mode 100644 index 96c39ad..0000000 --- a/resources/fontawesome/svgs/brands/expeditedssl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/facebook-f.svg b/resources/fontawesome/svgs/brands/facebook-f.svg deleted file mode 100644 index 2c9e341..0000000 --- a/resources/fontawesome/svgs/brands/facebook-f.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/facebook-messenger.svg b/resources/fontawesome/svgs/brands/facebook-messenger.svg deleted file mode 100644 index a46911f..0000000 --- a/resources/fontawesome/svgs/brands/facebook-messenger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/facebook.svg b/resources/fontawesome/svgs/brands/facebook.svg deleted file mode 100644 index d095174..0000000 --- a/resources/fontawesome/svgs/brands/facebook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fantasy-flight-games.svg b/resources/fontawesome/svgs/brands/fantasy-flight-games.svg deleted file mode 100644 index 58ba450..0000000 --- a/resources/fontawesome/svgs/brands/fantasy-flight-games.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fedex.svg b/resources/fontawesome/svgs/brands/fedex.svg deleted file mode 100644 index dd00f49..0000000 --- a/resources/fontawesome/svgs/brands/fedex.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fedora.svg b/resources/fontawesome/svgs/brands/fedora.svg deleted file mode 100644 index 1d1db06..0000000 --- a/resources/fontawesome/svgs/brands/fedora.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/figma.svg b/resources/fontawesome/svgs/brands/figma.svg deleted file mode 100644 index d56446a..0000000 --- a/resources/fontawesome/svgs/brands/figma.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/firefox-browser.svg b/resources/fontawesome/svgs/brands/firefox-browser.svg deleted file mode 100644 index 511b09f..0000000 --- a/resources/fontawesome/svgs/brands/firefox-browser.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/firefox.svg b/resources/fontawesome/svgs/brands/firefox.svg deleted file mode 100644 index f816fdd..0000000 --- a/resources/fontawesome/svgs/brands/firefox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/first-order-alt.svg b/resources/fontawesome/svgs/brands/first-order-alt.svg deleted file mode 100644 index 6d6e00a..0000000 --- a/resources/fontawesome/svgs/brands/first-order-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/first-order.svg b/resources/fontawesome/svgs/brands/first-order.svg deleted file mode 100644 index 5dbf41e..0000000 --- a/resources/fontawesome/svgs/brands/first-order.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/firstdraft.svg b/resources/fontawesome/svgs/brands/firstdraft.svg deleted file mode 100644 index a3ee8a0..0000000 --- a/resources/fontawesome/svgs/brands/firstdraft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/flickr.svg b/resources/fontawesome/svgs/brands/flickr.svg deleted file mode 100644 index f716d9e..0000000 --- a/resources/fontawesome/svgs/brands/flickr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/flipboard.svg b/resources/fontawesome/svgs/brands/flipboard.svg deleted file mode 100644 index 6b95f3d..0000000 --- a/resources/fontawesome/svgs/brands/flipboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fly.svg b/resources/fontawesome/svgs/brands/fly.svg deleted file mode 100644 index 1064145..0000000 --- a/resources/fontawesome/svgs/brands/fly.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/font-awesome.svg b/resources/fontawesome/svgs/brands/font-awesome.svg deleted file mode 100644 index 13f10eb..0000000 --- a/resources/fontawesome/svgs/brands/font-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fonticons-fi.svg b/resources/fontawesome/svgs/brands/fonticons-fi.svg deleted file mode 100644 index 2faeeef..0000000 --- a/resources/fontawesome/svgs/brands/fonticons-fi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fonticons.svg b/resources/fontawesome/svgs/brands/fonticons.svg deleted file mode 100644 index b273cfd..0000000 --- a/resources/fontawesome/svgs/brands/fonticons.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fort-awesome-alt.svg b/resources/fontawesome/svgs/brands/fort-awesome-alt.svg deleted file mode 100644 index e3f412b..0000000 --- a/resources/fontawesome/svgs/brands/fort-awesome-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fort-awesome.svg b/resources/fontawesome/svgs/brands/fort-awesome.svg deleted file mode 100644 index 58261d6..0000000 --- a/resources/fontawesome/svgs/brands/fort-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/forumbee.svg b/resources/fontawesome/svgs/brands/forumbee.svg deleted file mode 100644 index 09db08b..0000000 --- a/resources/fontawesome/svgs/brands/forumbee.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/foursquare.svg b/resources/fontawesome/svgs/brands/foursquare.svg deleted file mode 100644 index 9eff37c..0000000 --- a/resources/fontawesome/svgs/brands/foursquare.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/free-code-camp.svg b/resources/fontawesome/svgs/brands/free-code-camp.svg deleted file mode 100644 index 50cccbd..0000000 --- a/resources/fontawesome/svgs/brands/free-code-camp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/freebsd.svg b/resources/fontawesome/svgs/brands/freebsd.svg deleted file mode 100644 index aff4ae6..0000000 --- a/resources/fontawesome/svgs/brands/freebsd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/fulcrum.svg b/resources/fontawesome/svgs/brands/fulcrum.svg deleted file mode 100644 index 02a07ab..0000000 --- a/resources/fontawesome/svgs/brands/fulcrum.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/galactic-republic.svg b/resources/fontawesome/svgs/brands/galactic-republic.svg deleted file mode 100644 index 7616551..0000000 --- a/resources/fontawesome/svgs/brands/galactic-republic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/galactic-senate.svg b/resources/fontawesome/svgs/brands/galactic-senate.svg deleted file mode 100644 index 7395fb3..0000000 --- a/resources/fontawesome/svgs/brands/galactic-senate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/get-pocket.svg b/resources/fontawesome/svgs/brands/get-pocket.svg deleted file mode 100644 index ecf0398..0000000 --- a/resources/fontawesome/svgs/brands/get-pocket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gg-circle.svg b/resources/fontawesome/svgs/brands/gg-circle.svg deleted file mode 100644 index 2e853b5..0000000 --- a/resources/fontawesome/svgs/brands/gg-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gg.svg b/resources/fontawesome/svgs/brands/gg.svg deleted file mode 100644 index 3ecbea9..0000000 --- a/resources/fontawesome/svgs/brands/gg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/git-alt.svg b/resources/fontawesome/svgs/brands/git-alt.svg deleted file mode 100644 index 1775079..0000000 --- a/resources/fontawesome/svgs/brands/git-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/git.svg b/resources/fontawesome/svgs/brands/git.svg deleted file mode 100644 index 071485e..0000000 --- a/resources/fontawesome/svgs/brands/git.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/github-alt.svg b/resources/fontawesome/svgs/brands/github-alt.svg deleted file mode 100644 index 75ab0dc..0000000 --- a/resources/fontawesome/svgs/brands/github-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/github.svg b/resources/fontawesome/svgs/brands/github.svg deleted file mode 100644 index b3da6fe..0000000 --- a/resources/fontawesome/svgs/brands/github.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gitkraken.svg b/resources/fontawesome/svgs/brands/gitkraken.svg deleted file mode 100644 index 4930871..0000000 --- a/resources/fontawesome/svgs/brands/gitkraken.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gitlab.svg b/resources/fontawesome/svgs/brands/gitlab.svg deleted file mode 100644 index feb6910..0000000 --- a/resources/fontawesome/svgs/brands/gitlab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gitter.svg b/resources/fontawesome/svgs/brands/gitter.svg deleted file mode 100644 index c467578..0000000 --- a/resources/fontawesome/svgs/brands/gitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/glide-g.svg b/resources/fontawesome/svgs/brands/glide-g.svg deleted file mode 100644 index 21733cf..0000000 --- a/resources/fontawesome/svgs/brands/glide-g.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/glide.svg b/resources/fontawesome/svgs/brands/glide.svg deleted file mode 100644 index 1500966..0000000 --- a/resources/fontawesome/svgs/brands/glide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gofore.svg b/resources/fontawesome/svgs/brands/gofore.svg deleted file mode 100644 index 975983d..0000000 --- a/resources/fontawesome/svgs/brands/gofore.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/golang.svg b/resources/fontawesome/svgs/brands/golang.svg deleted file mode 100644 index ef17055..0000000 --- a/resources/fontawesome/svgs/brands/golang.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/goodreads-g.svg b/resources/fontawesome/svgs/brands/goodreads-g.svg deleted file mode 100644 index 2203692..0000000 --- a/resources/fontawesome/svgs/brands/goodreads-g.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/goodreads.svg b/resources/fontawesome/svgs/brands/goodreads.svg deleted file mode 100644 index e440af3..0000000 --- a/resources/fontawesome/svgs/brands/goodreads.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-drive.svg b/resources/fontawesome/svgs/brands/google-drive.svg deleted file mode 100644 index ee672e4..0000000 --- a/resources/fontawesome/svgs/brands/google-drive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-pay.svg b/resources/fontawesome/svgs/brands/google-pay.svg deleted file mode 100644 index e94e4b7..0000000 --- a/resources/fontawesome/svgs/brands/google-pay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-play.svg b/resources/fontawesome/svgs/brands/google-play.svg deleted file mode 100644 index 22f0f3a..0000000 --- a/resources/fontawesome/svgs/brands/google-play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-plus-g.svg b/resources/fontawesome/svgs/brands/google-plus-g.svg deleted file mode 100644 index e1298a5..0000000 --- a/resources/fontawesome/svgs/brands/google-plus-g.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-plus.svg b/resources/fontawesome/svgs/brands/google-plus.svg deleted file mode 100644 index 2febc73..0000000 --- a/resources/fontawesome/svgs/brands/google-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-scholar.svg b/resources/fontawesome/svgs/brands/google-scholar.svg deleted file mode 100644 index 2f92bce..0000000 --- a/resources/fontawesome/svgs/brands/google-scholar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google-wallet.svg b/resources/fontawesome/svgs/brands/google-wallet.svg deleted file mode 100644 index 669d5f4..0000000 --- a/resources/fontawesome/svgs/brands/google-wallet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/google.svg b/resources/fontawesome/svgs/brands/google.svg deleted file mode 100644 index 1109139..0000000 --- a/resources/fontawesome/svgs/brands/google.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gratipay.svg b/resources/fontawesome/svgs/brands/gratipay.svg deleted file mode 100644 index 43d5320..0000000 --- a/resources/fontawesome/svgs/brands/gratipay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/grav.svg b/resources/fontawesome/svgs/brands/grav.svg deleted file mode 100644 index bca5462..0000000 --- a/resources/fontawesome/svgs/brands/grav.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gripfire.svg b/resources/fontawesome/svgs/brands/gripfire.svg deleted file mode 100644 index a851266..0000000 --- a/resources/fontawesome/svgs/brands/gripfire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/grunt.svg b/resources/fontawesome/svgs/brands/grunt.svg deleted file mode 100644 index cfe601b..0000000 --- a/resources/fontawesome/svgs/brands/grunt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/guilded.svg b/resources/fontawesome/svgs/brands/guilded.svg deleted file mode 100644 index 0e3bd5a..0000000 --- a/resources/fontawesome/svgs/brands/guilded.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/gulp.svg b/resources/fontawesome/svgs/brands/gulp.svg deleted file mode 100644 index ffff701..0000000 --- a/resources/fontawesome/svgs/brands/gulp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hacker-news.svg b/resources/fontawesome/svgs/brands/hacker-news.svg deleted file mode 100644 index 6f34313..0000000 --- a/resources/fontawesome/svgs/brands/hacker-news.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hackerrank.svg b/resources/fontawesome/svgs/brands/hackerrank.svg deleted file mode 100644 index e059aa0..0000000 --- a/resources/fontawesome/svgs/brands/hackerrank.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hashnode.svg b/resources/fontawesome/svgs/brands/hashnode.svg deleted file mode 100644 index 82751d9..0000000 --- a/resources/fontawesome/svgs/brands/hashnode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hips.svg b/resources/fontawesome/svgs/brands/hips.svg deleted file mode 100644 index 0e050ab..0000000 --- a/resources/fontawesome/svgs/brands/hips.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hire-a-helper.svg b/resources/fontawesome/svgs/brands/hire-a-helper.svg deleted file mode 100644 index 9e99cea..0000000 --- a/resources/fontawesome/svgs/brands/hire-a-helper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hive.svg b/resources/fontawesome/svgs/brands/hive.svg deleted file mode 100644 index 55ffa87..0000000 --- a/resources/fontawesome/svgs/brands/hive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hooli.svg b/resources/fontawesome/svgs/brands/hooli.svg deleted file mode 100644 index 1f92e73..0000000 --- a/resources/fontawesome/svgs/brands/hooli.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hornbill.svg b/resources/fontawesome/svgs/brands/hornbill.svg deleted file mode 100644 index 262c2b8..0000000 --- a/resources/fontawesome/svgs/brands/hornbill.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hotjar.svg b/resources/fontawesome/svgs/brands/hotjar.svg deleted file mode 100644 index 43f2ab6..0000000 --- a/resources/fontawesome/svgs/brands/hotjar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/houzz.svg b/resources/fontawesome/svgs/brands/houzz.svg deleted file mode 100644 index db6570b..0000000 --- a/resources/fontawesome/svgs/brands/houzz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/html5.svg b/resources/fontawesome/svgs/brands/html5.svg deleted file mode 100644 index c24f74b..0000000 --- a/resources/fontawesome/svgs/brands/html5.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/hubspot.svg b/resources/fontawesome/svgs/brands/hubspot.svg deleted file mode 100644 index ec51746..0000000 --- a/resources/fontawesome/svgs/brands/hubspot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ideal.svg b/resources/fontawesome/svgs/brands/ideal.svg deleted file mode 100644 index 36ce435..0000000 --- a/resources/fontawesome/svgs/brands/ideal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/imdb.svg b/resources/fontawesome/svgs/brands/imdb.svg deleted file mode 100644 index 92f3b78..0000000 --- a/resources/fontawesome/svgs/brands/imdb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/instagram.svg b/resources/fontawesome/svgs/brands/instagram.svg deleted file mode 100644 index b20889e..0000000 --- a/resources/fontawesome/svgs/brands/instagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/instalod.svg b/resources/fontawesome/svgs/brands/instalod.svg deleted file mode 100644 index cc7427d..0000000 --- a/resources/fontawesome/svgs/brands/instalod.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/intercom.svg b/resources/fontawesome/svgs/brands/intercom.svg deleted file mode 100644 index 0523bd6..0000000 --- a/resources/fontawesome/svgs/brands/intercom.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/internet-explorer.svg b/resources/fontawesome/svgs/brands/internet-explorer.svg deleted file mode 100644 index d56d69a..0000000 --- a/resources/fontawesome/svgs/brands/internet-explorer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/invision.svg b/resources/fontawesome/svgs/brands/invision.svg deleted file mode 100644 index 6da0abb..0000000 --- a/resources/fontawesome/svgs/brands/invision.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ioxhost.svg b/resources/fontawesome/svgs/brands/ioxhost.svg deleted file mode 100644 index 952e62e..0000000 --- a/resources/fontawesome/svgs/brands/ioxhost.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/itch-io.svg b/resources/fontawesome/svgs/brands/itch-io.svg deleted file mode 100644 index bc49ec1..0000000 --- a/resources/fontawesome/svgs/brands/itch-io.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/itunes-note.svg b/resources/fontawesome/svgs/brands/itunes-note.svg deleted file mode 100644 index 4eecc98..0000000 --- a/resources/fontawesome/svgs/brands/itunes-note.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/itunes.svg b/resources/fontawesome/svgs/brands/itunes.svg deleted file mode 100644 index 0242728..0000000 --- a/resources/fontawesome/svgs/brands/itunes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/java.svg b/resources/fontawesome/svgs/brands/java.svg deleted file mode 100644 index 8401466..0000000 --- a/resources/fontawesome/svgs/brands/java.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/jedi-order.svg b/resources/fontawesome/svgs/brands/jedi-order.svg deleted file mode 100644 index 0dffe58..0000000 --- a/resources/fontawesome/svgs/brands/jedi-order.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/jenkins.svg b/resources/fontawesome/svgs/brands/jenkins.svg deleted file mode 100644 index e2dc8f1..0000000 --- a/resources/fontawesome/svgs/brands/jenkins.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/jira.svg b/resources/fontawesome/svgs/brands/jira.svg deleted file mode 100644 index c263775..0000000 --- a/resources/fontawesome/svgs/brands/jira.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/joget.svg b/resources/fontawesome/svgs/brands/joget.svg deleted file mode 100644 index 17f95b3..0000000 --- a/resources/fontawesome/svgs/brands/joget.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/joomla.svg b/resources/fontawesome/svgs/brands/joomla.svg deleted file mode 100644 index f47e8f9..0000000 --- a/resources/fontawesome/svgs/brands/joomla.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/js.svg b/resources/fontawesome/svgs/brands/js.svg deleted file mode 100644 index ffdc5fa..0000000 --- a/resources/fontawesome/svgs/brands/js.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/jsfiddle.svg b/resources/fontawesome/svgs/brands/jsfiddle.svg deleted file mode 100644 index b5d1623..0000000 --- a/resources/fontawesome/svgs/brands/jsfiddle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/jxl.svg b/resources/fontawesome/svgs/brands/jxl.svg deleted file mode 100644 index 93457cb..0000000 --- a/resources/fontawesome/svgs/brands/jxl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/kaggle.svg b/resources/fontawesome/svgs/brands/kaggle.svg deleted file mode 100644 index 42be3e1..0000000 --- a/resources/fontawesome/svgs/brands/kaggle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/keybase.svg b/resources/fontawesome/svgs/brands/keybase.svg deleted file mode 100644 index 2862751..0000000 --- a/resources/fontawesome/svgs/brands/keybase.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/keycdn.svg b/resources/fontawesome/svgs/brands/keycdn.svg deleted file mode 100644 index 14e8ca8..0000000 --- a/resources/fontawesome/svgs/brands/keycdn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/kickstarter-k.svg b/resources/fontawesome/svgs/brands/kickstarter-k.svg deleted file mode 100644 index 3f124cd..0000000 --- a/resources/fontawesome/svgs/brands/kickstarter-k.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/kickstarter.svg b/resources/fontawesome/svgs/brands/kickstarter.svg deleted file mode 100644 index 6c85fe8..0000000 --- a/resources/fontawesome/svgs/brands/kickstarter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/korvue.svg b/resources/fontawesome/svgs/brands/korvue.svg deleted file mode 100644 index c5f64b3..0000000 --- a/resources/fontawesome/svgs/brands/korvue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/laravel.svg b/resources/fontawesome/svgs/brands/laravel.svg deleted file mode 100644 index 4813f2f..0000000 --- a/resources/fontawesome/svgs/brands/laravel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/lastfm.svg b/resources/fontawesome/svgs/brands/lastfm.svg deleted file mode 100644 index a28d83c..0000000 --- a/resources/fontawesome/svgs/brands/lastfm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/leanpub.svg b/resources/fontawesome/svgs/brands/leanpub.svg deleted file mode 100644 index 6cc0b27..0000000 --- a/resources/fontawesome/svgs/brands/leanpub.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/less.svg b/resources/fontawesome/svgs/brands/less.svg deleted file mode 100644 index c20dab7..0000000 --- a/resources/fontawesome/svgs/brands/less.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/letterboxd.svg b/resources/fontawesome/svgs/brands/letterboxd.svg deleted file mode 100644 index f9a5f60..0000000 --- a/resources/fontawesome/svgs/brands/letterboxd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/line.svg b/resources/fontawesome/svgs/brands/line.svg deleted file mode 100644 index 5444888..0000000 --- a/resources/fontawesome/svgs/brands/line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/linkedin-in.svg b/resources/fontawesome/svgs/brands/linkedin-in.svg deleted file mode 100644 index e6455f6..0000000 --- a/resources/fontawesome/svgs/brands/linkedin-in.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/linkedin.svg b/resources/fontawesome/svgs/brands/linkedin.svg deleted file mode 100644 index 2c9f2ce..0000000 --- a/resources/fontawesome/svgs/brands/linkedin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/linode.svg b/resources/fontawesome/svgs/brands/linode.svg deleted file mode 100644 index a1103f1..0000000 --- a/resources/fontawesome/svgs/brands/linode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/linux.svg b/resources/fontawesome/svgs/brands/linux.svg deleted file mode 100644 index eae7ce1..0000000 --- a/resources/fontawesome/svgs/brands/linux.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/lyft.svg b/resources/fontawesome/svgs/brands/lyft.svg deleted file mode 100644 index 9529ff8..0000000 --- a/resources/fontawesome/svgs/brands/lyft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/magento.svg b/resources/fontawesome/svgs/brands/magento.svg deleted file mode 100644 index 2066bd0..0000000 --- a/resources/fontawesome/svgs/brands/magento.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mailchimp.svg b/resources/fontawesome/svgs/brands/mailchimp.svg deleted file mode 100644 index 1aa48e9..0000000 --- a/resources/fontawesome/svgs/brands/mailchimp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mandalorian.svg b/resources/fontawesome/svgs/brands/mandalorian.svg deleted file mode 100644 index ba4473b..0000000 --- a/resources/fontawesome/svgs/brands/mandalorian.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/markdown.svg b/resources/fontawesome/svgs/brands/markdown.svg deleted file mode 100644 index 0a081fb..0000000 --- a/resources/fontawesome/svgs/brands/markdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mastodon.svg b/resources/fontawesome/svgs/brands/mastodon.svg deleted file mode 100644 index 03567fc..0000000 --- a/resources/fontawesome/svgs/brands/mastodon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/maxcdn.svg b/resources/fontawesome/svgs/brands/maxcdn.svg deleted file mode 100644 index c8c58ad..0000000 --- a/resources/fontawesome/svgs/brands/maxcdn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mdb.svg b/resources/fontawesome/svgs/brands/mdb.svg deleted file mode 100644 index ce02379..0000000 --- a/resources/fontawesome/svgs/brands/mdb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/medapps.svg b/resources/fontawesome/svgs/brands/medapps.svg deleted file mode 100644 index 3b5a499..0000000 --- a/resources/fontawesome/svgs/brands/medapps.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/medium.svg b/resources/fontawesome/svgs/brands/medium.svg deleted file mode 100644 index e4de78d..0000000 --- a/resources/fontawesome/svgs/brands/medium.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/medrt.svg b/resources/fontawesome/svgs/brands/medrt.svg deleted file mode 100644 index 93fcb29..0000000 --- a/resources/fontawesome/svgs/brands/medrt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/meetup.svg b/resources/fontawesome/svgs/brands/meetup.svg deleted file mode 100644 index 8ce7173..0000000 --- a/resources/fontawesome/svgs/brands/meetup.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/megaport.svg b/resources/fontawesome/svgs/brands/megaport.svg deleted file mode 100644 index e2a914c..0000000 --- a/resources/fontawesome/svgs/brands/megaport.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mendeley.svg b/resources/fontawesome/svgs/brands/mendeley.svg deleted file mode 100644 index 27b6da4..0000000 --- a/resources/fontawesome/svgs/brands/mendeley.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/meta.svg b/resources/fontawesome/svgs/brands/meta.svg deleted file mode 100644 index fbd05f7..0000000 --- a/resources/fontawesome/svgs/brands/meta.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/microblog.svg b/resources/fontawesome/svgs/brands/microblog.svg deleted file mode 100644 index e3e8819..0000000 --- a/resources/fontawesome/svgs/brands/microblog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/microsoft.svg b/resources/fontawesome/svgs/brands/microsoft.svg deleted file mode 100644 index 22edc45..0000000 --- a/resources/fontawesome/svgs/brands/microsoft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mintbit.svg b/resources/fontawesome/svgs/brands/mintbit.svg deleted file mode 100644 index 987c052..0000000 --- a/resources/fontawesome/svgs/brands/mintbit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mix.svg b/resources/fontawesome/svgs/brands/mix.svg deleted file mode 100644 index 1b831e2..0000000 --- a/resources/fontawesome/svgs/brands/mix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mixcloud.svg b/resources/fontawesome/svgs/brands/mixcloud.svg deleted file mode 100644 index a006056..0000000 --- a/resources/fontawesome/svgs/brands/mixcloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mixer.svg b/resources/fontawesome/svgs/brands/mixer.svg deleted file mode 100644 index eea171b..0000000 --- a/resources/fontawesome/svgs/brands/mixer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/mizuni.svg b/resources/fontawesome/svgs/brands/mizuni.svg deleted file mode 100644 index 089f60a..0000000 --- a/resources/fontawesome/svgs/brands/mizuni.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/modx.svg b/resources/fontawesome/svgs/brands/modx.svg deleted file mode 100644 index 1022453..0000000 --- a/resources/fontawesome/svgs/brands/modx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/monero.svg b/resources/fontawesome/svgs/brands/monero.svg deleted file mode 100644 index 1872c2f..0000000 --- a/resources/fontawesome/svgs/brands/monero.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/napster.svg b/resources/fontawesome/svgs/brands/napster.svg deleted file mode 100644 index 003d703..0000000 --- a/resources/fontawesome/svgs/brands/napster.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/neos.svg b/resources/fontawesome/svgs/brands/neos.svg deleted file mode 100644 index c216c11..0000000 --- a/resources/fontawesome/svgs/brands/neos.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/nfc-directional.svg b/resources/fontawesome/svgs/brands/nfc-directional.svg deleted file mode 100644 index f848dfe..0000000 --- a/resources/fontawesome/svgs/brands/nfc-directional.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/nfc-symbol.svg b/resources/fontawesome/svgs/brands/nfc-symbol.svg deleted file mode 100644 index be3f1ff..0000000 --- a/resources/fontawesome/svgs/brands/nfc-symbol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/nimblr.svg b/resources/fontawesome/svgs/brands/nimblr.svg deleted file mode 100644 index d4646ba..0000000 --- a/resources/fontawesome/svgs/brands/nimblr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/node-js.svg b/resources/fontawesome/svgs/brands/node-js.svg deleted file mode 100644 index f8e1be5..0000000 --- a/resources/fontawesome/svgs/brands/node-js.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/node.svg b/resources/fontawesome/svgs/brands/node.svg deleted file mode 100644 index 526f004..0000000 --- a/resources/fontawesome/svgs/brands/node.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/npm.svg b/resources/fontawesome/svgs/brands/npm.svg deleted file mode 100644 index b176580..0000000 --- a/resources/fontawesome/svgs/brands/npm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ns8.svg b/resources/fontawesome/svgs/brands/ns8.svg deleted file mode 100644 index 328c950..0000000 --- a/resources/fontawesome/svgs/brands/ns8.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/nutritionix.svg b/resources/fontawesome/svgs/brands/nutritionix.svg deleted file mode 100644 index 5e94b5d..0000000 --- a/resources/fontawesome/svgs/brands/nutritionix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/octopus-deploy.svg b/resources/fontawesome/svgs/brands/octopus-deploy.svg deleted file mode 100644 index 71273b9..0000000 --- a/resources/fontawesome/svgs/brands/octopus-deploy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/odnoklassniki.svg b/resources/fontawesome/svgs/brands/odnoklassniki.svg deleted file mode 100644 index 307f692..0000000 --- a/resources/fontawesome/svgs/brands/odnoklassniki.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/odysee.svg b/resources/fontawesome/svgs/brands/odysee.svg deleted file mode 100644 index e3933c9..0000000 --- a/resources/fontawesome/svgs/brands/odysee.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/old-republic.svg b/resources/fontawesome/svgs/brands/old-republic.svg deleted file mode 100644 index 9ee8939..0000000 --- a/resources/fontawesome/svgs/brands/old-republic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/opencart.svg b/resources/fontawesome/svgs/brands/opencart.svg deleted file mode 100644 index 5313a33..0000000 --- a/resources/fontawesome/svgs/brands/opencart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/openid.svg b/resources/fontawesome/svgs/brands/openid.svg deleted file mode 100644 index 3757199..0000000 --- a/resources/fontawesome/svgs/brands/openid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/opensuse.svg b/resources/fontawesome/svgs/brands/opensuse.svg deleted file mode 100644 index 0a4025b..0000000 --- a/resources/fontawesome/svgs/brands/opensuse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/opera.svg b/resources/fontawesome/svgs/brands/opera.svg deleted file mode 100644 index a36f90c..0000000 --- a/resources/fontawesome/svgs/brands/opera.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/optin-monster.svg b/resources/fontawesome/svgs/brands/optin-monster.svg deleted file mode 100644 index c210acf..0000000 --- a/resources/fontawesome/svgs/brands/optin-monster.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/orcid.svg b/resources/fontawesome/svgs/brands/orcid.svg deleted file mode 100644 index ee32bdd..0000000 --- a/resources/fontawesome/svgs/brands/orcid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/osi.svg b/resources/fontawesome/svgs/brands/osi.svg deleted file mode 100644 index 6767a69..0000000 --- a/resources/fontawesome/svgs/brands/osi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/padlet.svg b/resources/fontawesome/svgs/brands/padlet.svg deleted file mode 100644 index 918f3c1..0000000 --- a/resources/fontawesome/svgs/brands/padlet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/page4.svg b/resources/fontawesome/svgs/brands/page4.svg deleted file mode 100644 index 82a2219..0000000 --- a/resources/fontawesome/svgs/brands/page4.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pagelines.svg b/resources/fontawesome/svgs/brands/pagelines.svg deleted file mode 100644 index 8d6e3ba..0000000 --- a/resources/fontawesome/svgs/brands/pagelines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/palfed.svg b/resources/fontawesome/svgs/brands/palfed.svg deleted file mode 100644 index 769757b..0000000 --- a/resources/fontawesome/svgs/brands/palfed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/patreon.svg b/resources/fontawesome/svgs/brands/patreon.svg deleted file mode 100644 index e57ff4c..0000000 --- a/resources/fontawesome/svgs/brands/patreon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/paypal.svg b/resources/fontawesome/svgs/brands/paypal.svg deleted file mode 100644 index 045d933..0000000 --- a/resources/fontawesome/svgs/brands/paypal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/perbyte.svg b/resources/fontawesome/svgs/brands/perbyte.svg deleted file mode 100644 index 5f47f7e..0000000 --- a/resources/fontawesome/svgs/brands/perbyte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/periscope.svg b/resources/fontawesome/svgs/brands/periscope.svg deleted file mode 100644 index 10d32e0..0000000 --- a/resources/fontawesome/svgs/brands/periscope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/phabricator.svg b/resources/fontawesome/svgs/brands/phabricator.svg deleted file mode 100644 index c3ca3b6..0000000 --- a/resources/fontawesome/svgs/brands/phabricator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/phoenix-framework.svg b/resources/fontawesome/svgs/brands/phoenix-framework.svg deleted file mode 100644 index 7fab2f9..0000000 --- a/resources/fontawesome/svgs/brands/phoenix-framework.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/phoenix-squadron.svg b/resources/fontawesome/svgs/brands/phoenix-squadron.svg deleted file mode 100644 index 2a11a0a..0000000 --- a/resources/fontawesome/svgs/brands/phoenix-squadron.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/php.svg b/resources/fontawesome/svgs/brands/php.svg deleted file mode 100644 index c8f0548..0000000 --- a/resources/fontawesome/svgs/brands/php.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pied-piper-alt.svg b/resources/fontawesome/svgs/brands/pied-piper-alt.svg deleted file mode 100644 index 1ef84da..0000000 --- a/resources/fontawesome/svgs/brands/pied-piper-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pied-piper-hat.svg b/resources/fontawesome/svgs/brands/pied-piper-hat.svg deleted file mode 100644 index d62c9ec..0000000 --- a/resources/fontawesome/svgs/brands/pied-piper-hat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pied-piper-pp.svg b/resources/fontawesome/svgs/brands/pied-piper-pp.svg deleted file mode 100644 index 4c8c4a4..0000000 --- a/resources/fontawesome/svgs/brands/pied-piper-pp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pied-piper.svg b/resources/fontawesome/svgs/brands/pied-piper.svg deleted file mode 100644 index 930961f..0000000 --- a/resources/fontawesome/svgs/brands/pied-piper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pinterest-p.svg b/resources/fontawesome/svgs/brands/pinterest-p.svg deleted file mode 100644 index beaf436..0000000 --- a/resources/fontawesome/svgs/brands/pinterest-p.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pinterest.svg b/resources/fontawesome/svgs/brands/pinterest.svg deleted file mode 100644 index 98818f8..0000000 --- a/resources/fontawesome/svgs/brands/pinterest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pix.svg b/resources/fontawesome/svgs/brands/pix.svg deleted file mode 100644 index d5112ce..0000000 --- a/resources/fontawesome/svgs/brands/pix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pixiv.svg b/resources/fontawesome/svgs/brands/pixiv.svg deleted file mode 100644 index 0fa1479..0000000 --- a/resources/fontawesome/svgs/brands/pixiv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/playstation.svg b/resources/fontawesome/svgs/brands/playstation.svg deleted file mode 100644 index 30f0c5c..0000000 --- a/resources/fontawesome/svgs/brands/playstation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/product-hunt.svg b/resources/fontawesome/svgs/brands/product-hunt.svg deleted file mode 100644 index 28d61b4..0000000 --- a/resources/fontawesome/svgs/brands/product-hunt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/pushed.svg b/resources/fontawesome/svgs/brands/pushed.svg deleted file mode 100644 index d500f79..0000000 --- a/resources/fontawesome/svgs/brands/pushed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/python.svg b/resources/fontawesome/svgs/brands/python.svg deleted file mode 100644 index 76c24b2..0000000 --- a/resources/fontawesome/svgs/brands/python.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/qq.svg b/resources/fontawesome/svgs/brands/qq.svg deleted file mode 100644 index 5f280c0..0000000 --- a/resources/fontawesome/svgs/brands/qq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/quinscape.svg b/resources/fontawesome/svgs/brands/quinscape.svg deleted file mode 100644 index 1fc7ef3..0000000 --- a/resources/fontawesome/svgs/brands/quinscape.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/quora.svg b/resources/fontawesome/svgs/brands/quora.svg deleted file mode 100644 index 39a119f..0000000 --- a/resources/fontawesome/svgs/brands/quora.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/r-project.svg b/resources/fontawesome/svgs/brands/r-project.svg deleted file mode 100644 index cf03cc7..0000000 --- a/resources/fontawesome/svgs/brands/r-project.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/raspberry-pi.svg b/resources/fontawesome/svgs/brands/raspberry-pi.svg deleted file mode 100644 index f089f2f..0000000 --- a/resources/fontawesome/svgs/brands/raspberry-pi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ravelry.svg b/resources/fontawesome/svgs/brands/ravelry.svg deleted file mode 100644 index eafafa0..0000000 --- a/resources/fontawesome/svgs/brands/ravelry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/react.svg b/resources/fontawesome/svgs/brands/react.svg deleted file mode 100644 index 531c4c8..0000000 --- a/resources/fontawesome/svgs/brands/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/reacteurope.svg b/resources/fontawesome/svgs/brands/reacteurope.svg deleted file mode 100644 index dd64014..0000000 --- a/resources/fontawesome/svgs/brands/reacteurope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/readme.svg b/resources/fontawesome/svgs/brands/readme.svg deleted file mode 100644 index 82c0b95..0000000 --- a/resources/fontawesome/svgs/brands/readme.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/rebel.svg b/resources/fontawesome/svgs/brands/rebel.svg deleted file mode 100644 index 9445c41..0000000 --- a/resources/fontawesome/svgs/brands/rebel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/red-river.svg b/resources/fontawesome/svgs/brands/red-river.svg deleted file mode 100644 index f52dc84..0000000 --- a/resources/fontawesome/svgs/brands/red-river.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/reddit-alien.svg b/resources/fontawesome/svgs/brands/reddit-alien.svg deleted file mode 100644 index 7c7fbfa..0000000 --- a/resources/fontawesome/svgs/brands/reddit-alien.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/reddit.svg b/resources/fontawesome/svgs/brands/reddit.svg deleted file mode 100644 index c71ba9b..0000000 --- a/resources/fontawesome/svgs/brands/reddit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/redhat.svg b/resources/fontawesome/svgs/brands/redhat.svg deleted file mode 100644 index f51c38c..0000000 --- a/resources/fontawesome/svgs/brands/redhat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/renren.svg b/resources/fontawesome/svgs/brands/renren.svg deleted file mode 100644 index a815cf4..0000000 --- a/resources/fontawesome/svgs/brands/renren.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/replyd.svg b/resources/fontawesome/svgs/brands/replyd.svg deleted file mode 100644 index 4217096..0000000 --- a/resources/fontawesome/svgs/brands/replyd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/researchgate.svg b/resources/fontawesome/svgs/brands/researchgate.svg deleted file mode 100644 index d08d1ef..0000000 --- a/resources/fontawesome/svgs/brands/researchgate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/resolving.svg b/resources/fontawesome/svgs/brands/resolving.svg deleted file mode 100644 index 6effb08..0000000 --- a/resources/fontawesome/svgs/brands/resolving.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/rev.svg b/resources/fontawesome/svgs/brands/rev.svg deleted file mode 100644 index 7267079..0000000 --- a/resources/fontawesome/svgs/brands/rev.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/rocketchat.svg b/resources/fontawesome/svgs/brands/rocketchat.svg deleted file mode 100644 index 72956a2..0000000 --- a/resources/fontawesome/svgs/brands/rocketchat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/rockrms.svg b/resources/fontawesome/svgs/brands/rockrms.svg deleted file mode 100644 index 4625717..0000000 --- a/resources/fontawesome/svgs/brands/rockrms.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/rust.svg b/resources/fontawesome/svgs/brands/rust.svg deleted file mode 100644 index c77fb29..0000000 --- a/resources/fontawesome/svgs/brands/rust.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/safari.svg b/resources/fontawesome/svgs/brands/safari.svg deleted file mode 100644 index c79e564..0000000 --- a/resources/fontawesome/svgs/brands/safari.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/salesforce.svg b/resources/fontawesome/svgs/brands/salesforce.svg deleted file mode 100644 index 3874302..0000000 --- a/resources/fontawesome/svgs/brands/salesforce.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sass.svg b/resources/fontawesome/svgs/brands/sass.svg deleted file mode 100644 index ac50b96..0000000 --- a/resources/fontawesome/svgs/brands/sass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/schlix.svg b/resources/fontawesome/svgs/brands/schlix.svg deleted file mode 100644 index cb71209..0000000 --- a/resources/fontawesome/svgs/brands/schlix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/screenpal.svg b/resources/fontawesome/svgs/brands/screenpal.svg deleted file mode 100644 index 133d368..0000000 --- a/resources/fontawesome/svgs/brands/screenpal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/scribd.svg b/resources/fontawesome/svgs/brands/scribd.svg deleted file mode 100644 index 825d8f9..0000000 --- a/resources/fontawesome/svgs/brands/scribd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/searchengin.svg b/resources/fontawesome/svgs/brands/searchengin.svg deleted file mode 100644 index 1c23d5e..0000000 --- a/resources/fontawesome/svgs/brands/searchengin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sellcast.svg b/resources/fontawesome/svgs/brands/sellcast.svg deleted file mode 100644 index afa9224..0000000 --- a/resources/fontawesome/svgs/brands/sellcast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sellsy.svg b/resources/fontawesome/svgs/brands/sellsy.svg deleted file mode 100644 index 7d2c6a4..0000000 --- a/resources/fontawesome/svgs/brands/sellsy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/servicestack.svg b/resources/fontawesome/svgs/brands/servicestack.svg deleted file mode 100644 index d052f93..0000000 --- a/resources/fontawesome/svgs/brands/servicestack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/shirtsinbulk.svg b/resources/fontawesome/svgs/brands/shirtsinbulk.svg deleted file mode 100644 index 30b9bf2..0000000 --- a/resources/fontawesome/svgs/brands/shirtsinbulk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/shoelace.svg b/resources/fontawesome/svgs/brands/shoelace.svg deleted file mode 100644 index 814da86..0000000 --- a/resources/fontawesome/svgs/brands/shoelace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/shopify.svg b/resources/fontawesome/svgs/brands/shopify.svg deleted file mode 100644 index b31e4e3..0000000 --- a/resources/fontawesome/svgs/brands/shopify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/shopware.svg b/resources/fontawesome/svgs/brands/shopware.svg deleted file mode 100644 index 79757c9..0000000 --- a/resources/fontawesome/svgs/brands/shopware.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/signal-messenger.svg b/resources/fontawesome/svgs/brands/signal-messenger.svg deleted file mode 100644 index 84b7958..0000000 --- a/resources/fontawesome/svgs/brands/signal-messenger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/simplybuilt.svg b/resources/fontawesome/svgs/brands/simplybuilt.svg deleted file mode 100644 index f58b262..0000000 --- a/resources/fontawesome/svgs/brands/simplybuilt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sistrix.svg b/resources/fontawesome/svgs/brands/sistrix.svg deleted file mode 100644 index f468e25..0000000 --- a/resources/fontawesome/svgs/brands/sistrix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sith.svg b/resources/fontawesome/svgs/brands/sith.svg deleted file mode 100644 index ee966c9..0000000 --- a/resources/fontawesome/svgs/brands/sith.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sitrox.svg b/resources/fontawesome/svgs/brands/sitrox.svg deleted file mode 100644 index bf2e391..0000000 --- a/resources/fontawesome/svgs/brands/sitrox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sketch.svg b/resources/fontawesome/svgs/brands/sketch.svg deleted file mode 100644 index 1e8d210..0000000 --- a/resources/fontawesome/svgs/brands/sketch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/skyatlas.svg b/resources/fontawesome/svgs/brands/skyatlas.svg deleted file mode 100644 index 1fe3170..0000000 --- a/resources/fontawesome/svgs/brands/skyatlas.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/skype.svg b/resources/fontawesome/svgs/brands/skype.svg deleted file mode 100644 index 8d7231e..0000000 --- a/resources/fontawesome/svgs/brands/skype.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/slack.svg b/resources/fontawesome/svgs/brands/slack.svg deleted file mode 100644 index 0bacd72..0000000 --- a/resources/fontawesome/svgs/brands/slack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/slideshare.svg b/resources/fontawesome/svgs/brands/slideshare.svg deleted file mode 100644 index 464c4e9..0000000 --- a/resources/fontawesome/svgs/brands/slideshare.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/snapchat.svg b/resources/fontawesome/svgs/brands/snapchat.svg deleted file mode 100644 index f0be06f..0000000 --- a/resources/fontawesome/svgs/brands/snapchat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/soundcloud.svg b/resources/fontawesome/svgs/brands/soundcloud.svg deleted file mode 100644 index 0cd2d44..0000000 --- a/resources/fontawesome/svgs/brands/soundcloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sourcetree.svg b/resources/fontawesome/svgs/brands/sourcetree.svg deleted file mode 100644 index 1f63c65..0000000 --- a/resources/fontawesome/svgs/brands/sourcetree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/space-awesome.svg b/resources/fontawesome/svgs/brands/space-awesome.svg deleted file mode 100644 index ab8f322..0000000 --- a/resources/fontawesome/svgs/brands/space-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/speakap.svg b/resources/fontawesome/svgs/brands/speakap.svg deleted file mode 100644 index bea4cb6..0000000 --- a/resources/fontawesome/svgs/brands/speakap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/speaker-deck.svg b/resources/fontawesome/svgs/brands/speaker-deck.svg deleted file mode 100644 index 873f3da..0000000 --- a/resources/fontawesome/svgs/brands/speaker-deck.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/spotify.svg b/resources/fontawesome/svgs/brands/spotify.svg deleted file mode 100644 index ae34c9e..0000000 --- a/resources/fontawesome/svgs/brands/spotify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-behance.svg b/resources/fontawesome/svgs/brands/square-behance.svg deleted file mode 100644 index edfcf76..0000000 --- a/resources/fontawesome/svgs/brands/square-behance.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-dribbble.svg b/resources/fontawesome/svgs/brands/square-dribbble.svg deleted file mode 100644 index 4cdc2fd..0000000 --- a/resources/fontawesome/svgs/brands/square-dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-facebook.svg b/resources/fontawesome/svgs/brands/square-facebook.svg deleted file mode 100644 index 8f0ede4..0000000 --- a/resources/fontawesome/svgs/brands/square-facebook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-font-awesome-stroke.svg b/resources/fontawesome/svgs/brands/square-font-awesome-stroke.svg deleted file mode 100644 index 88c8159..0000000 --- a/resources/fontawesome/svgs/brands/square-font-awesome-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-font-awesome.svg b/resources/fontawesome/svgs/brands/square-font-awesome.svg deleted file mode 100644 index adb7e81..0000000 --- a/resources/fontawesome/svgs/brands/square-font-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-git.svg b/resources/fontawesome/svgs/brands/square-git.svg deleted file mode 100644 index af73f48..0000000 --- a/resources/fontawesome/svgs/brands/square-git.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-github.svg b/resources/fontawesome/svgs/brands/square-github.svg deleted file mode 100644 index 600e924..0000000 --- a/resources/fontawesome/svgs/brands/square-github.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-gitlab.svg b/resources/fontawesome/svgs/brands/square-gitlab.svg deleted file mode 100644 index 2cce4f5..0000000 --- a/resources/fontawesome/svgs/brands/square-gitlab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-google-plus.svg b/resources/fontawesome/svgs/brands/square-google-plus.svg deleted file mode 100644 index dd7eb81..0000000 --- a/resources/fontawesome/svgs/brands/square-google-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-hacker-news.svg b/resources/fontawesome/svgs/brands/square-hacker-news.svg deleted file mode 100644 index c29f122..0000000 --- a/resources/fontawesome/svgs/brands/square-hacker-news.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-instagram.svg b/resources/fontawesome/svgs/brands/square-instagram.svg deleted file mode 100644 index 443ede6..0000000 --- a/resources/fontawesome/svgs/brands/square-instagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-js.svg b/resources/fontawesome/svgs/brands/square-js.svg deleted file mode 100644 index 780a1c2..0000000 --- a/resources/fontawesome/svgs/brands/square-js.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-lastfm.svg b/resources/fontawesome/svgs/brands/square-lastfm.svg deleted file mode 100644 index f96d1ac..0000000 --- a/resources/fontawesome/svgs/brands/square-lastfm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-letterboxd.svg b/resources/fontawesome/svgs/brands/square-letterboxd.svg deleted file mode 100644 index 6b2c35f..0000000 --- a/resources/fontawesome/svgs/brands/square-letterboxd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-odnoklassniki.svg b/resources/fontawesome/svgs/brands/square-odnoklassniki.svg deleted file mode 100644 index 3b96935..0000000 --- a/resources/fontawesome/svgs/brands/square-odnoklassniki.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-pied-piper.svg b/resources/fontawesome/svgs/brands/square-pied-piper.svg deleted file mode 100644 index dddfd00..0000000 --- a/resources/fontawesome/svgs/brands/square-pied-piper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-pinterest.svg b/resources/fontawesome/svgs/brands/square-pinterest.svg deleted file mode 100644 index ed81eb8..0000000 --- a/resources/fontawesome/svgs/brands/square-pinterest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-reddit.svg b/resources/fontawesome/svgs/brands/square-reddit.svg deleted file mode 100644 index c2c7363..0000000 --- a/resources/fontawesome/svgs/brands/square-reddit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-snapchat.svg b/resources/fontawesome/svgs/brands/square-snapchat.svg deleted file mode 100644 index 40ce49c..0000000 --- a/resources/fontawesome/svgs/brands/square-snapchat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-steam.svg b/resources/fontawesome/svgs/brands/square-steam.svg deleted file mode 100644 index bbbbc82..0000000 --- a/resources/fontawesome/svgs/brands/square-steam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-threads.svg b/resources/fontawesome/svgs/brands/square-threads.svg deleted file mode 100644 index 75c431a..0000000 --- a/resources/fontawesome/svgs/brands/square-threads.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-tumblr.svg b/resources/fontawesome/svgs/brands/square-tumblr.svg deleted file mode 100644 index 532bb57..0000000 --- a/resources/fontawesome/svgs/brands/square-tumblr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-twitter.svg b/resources/fontawesome/svgs/brands/square-twitter.svg deleted file mode 100644 index d1abe7c..0000000 --- a/resources/fontawesome/svgs/brands/square-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-upwork.svg b/resources/fontawesome/svgs/brands/square-upwork.svg deleted file mode 100644 index 3bc808d..0000000 --- a/resources/fontawesome/svgs/brands/square-upwork.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-viadeo.svg b/resources/fontawesome/svgs/brands/square-viadeo.svg deleted file mode 100644 index e39879f..0000000 --- a/resources/fontawesome/svgs/brands/square-viadeo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-vimeo.svg b/resources/fontawesome/svgs/brands/square-vimeo.svg deleted file mode 100644 index f0ae7db..0000000 --- a/resources/fontawesome/svgs/brands/square-vimeo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-web-awesome-stroke.svg b/resources/fontawesome/svgs/brands/square-web-awesome-stroke.svg deleted file mode 100644 index b9239b6..0000000 --- a/resources/fontawesome/svgs/brands/square-web-awesome-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-web-awesome.svg b/resources/fontawesome/svgs/brands/square-web-awesome.svg deleted file mode 100644 index a13a837..0000000 --- a/resources/fontawesome/svgs/brands/square-web-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-whatsapp.svg b/resources/fontawesome/svgs/brands/square-whatsapp.svg deleted file mode 100644 index 6832a5b..0000000 --- a/resources/fontawesome/svgs/brands/square-whatsapp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-x-twitter.svg b/resources/fontawesome/svgs/brands/square-x-twitter.svg deleted file mode 100644 index 46f8d9a..0000000 --- a/resources/fontawesome/svgs/brands/square-x-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-xing.svg b/resources/fontawesome/svgs/brands/square-xing.svg deleted file mode 100644 index cd36d7d..0000000 --- a/resources/fontawesome/svgs/brands/square-xing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/square-youtube.svg b/resources/fontawesome/svgs/brands/square-youtube.svg deleted file mode 100644 index 5f657a3..0000000 --- a/resources/fontawesome/svgs/brands/square-youtube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/squarespace.svg b/resources/fontawesome/svgs/brands/squarespace.svg deleted file mode 100644 index d6e4811..0000000 --- a/resources/fontawesome/svgs/brands/squarespace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stack-exchange.svg b/resources/fontawesome/svgs/brands/stack-exchange.svg deleted file mode 100644 index efc8f9a..0000000 --- a/resources/fontawesome/svgs/brands/stack-exchange.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stack-overflow.svg b/resources/fontawesome/svgs/brands/stack-overflow.svg deleted file mode 100644 index b664c33..0000000 --- a/resources/fontawesome/svgs/brands/stack-overflow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stackpath.svg b/resources/fontawesome/svgs/brands/stackpath.svg deleted file mode 100644 index 7992a42..0000000 --- a/resources/fontawesome/svgs/brands/stackpath.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/staylinked.svg b/resources/fontawesome/svgs/brands/staylinked.svg deleted file mode 100644 index 60949c7..0000000 --- a/resources/fontawesome/svgs/brands/staylinked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/steam-symbol.svg b/resources/fontawesome/svgs/brands/steam-symbol.svg deleted file mode 100644 index 476b4fb..0000000 --- a/resources/fontawesome/svgs/brands/steam-symbol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/steam.svg b/resources/fontawesome/svgs/brands/steam.svg deleted file mode 100644 index a46b942..0000000 --- a/resources/fontawesome/svgs/brands/steam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/sticker-mule.svg b/resources/fontawesome/svgs/brands/sticker-mule.svg deleted file mode 100644 index e8eb5cb..0000000 --- a/resources/fontawesome/svgs/brands/sticker-mule.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/strava.svg b/resources/fontawesome/svgs/brands/strava.svg deleted file mode 100644 index 0e21910..0000000 --- a/resources/fontawesome/svgs/brands/strava.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stripe-s.svg b/resources/fontawesome/svgs/brands/stripe-s.svg deleted file mode 100644 index 76aa1a4..0000000 --- a/resources/fontawesome/svgs/brands/stripe-s.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stripe.svg b/resources/fontawesome/svgs/brands/stripe.svg deleted file mode 100644 index aaf0077..0000000 --- a/resources/fontawesome/svgs/brands/stripe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stubber.svg b/resources/fontawesome/svgs/brands/stubber.svg deleted file mode 100644 index 2813ebd..0000000 --- a/resources/fontawesome/svgs/brands/stubber.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/studiovinari.svg b/resources/fontawesome/svgs/brands/studiovinari.svg deleted file mode 100644 index b8a3f93..0000000 --- a/resources/fontawesome/svgs/brands/studiovinari.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stumbleupon-circle.svg b/resources/fontawesome/svgs/brands/stumbleupon-circle.svg deleted file mode 100644 index 0a31b68..0000000 --- a/resources/fontawesome/svgs/brands/stumbleupon-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/stumbleupon.svg b/resources/fontawesome/svgs/brands/stumbleupon.svg deleted file mode 100644 index f0010c8..0000000 --- a/resources/fontawesome/svgs/brands/stumbleupon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/superpowers.svg b/resources/fontawesome/svgs/brands/superpowers.svg deleted file mode 100644 index f3c3981..0000000 --- a/resources/fontawesome/svgs/brands/superpowers.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/supple.svg b/resources/fontawesome/svgs/brands/supple.svg deleted file mode 100644 index e0353d6..0000000 --- a/resources/fontawesome/svgs/brands/supple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/suse.svg b/resources/fontawesome/svgs/brands/suse.svg deleted file mode 100644 index 98f8c5e..0000000 --- a/resources/fontawesome/svgs/brands/suse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/swift.svg b/resources/fontawesome/svgs/brands/swift.svg deleted file mode 100644 index c9de7af..0000000 --- a/resources/fontawesome/svgs/brands/swift.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/symfony.svg b/resources/fontawesome/svgs/brands/symfony.svg deleted file mode 100644 index 1885e9b..0000000 --- a/resources/fontawesome/svgs/brands/symfony.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/teamspeak.svg b/resources/fontawesome/svgs/brands/teamspeak.svg deleted file mode 100644 index c73064a..0000000 --- a/resources/fontawesome/svgs/brands/teamspeak.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/telegram.svg b/resources/fontawesome/svgs/brands/telegram.svg deleted file mode 100644 index 3f0065e..0000000 --- a/resources/fontawesome/svgs/brands/telegram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/tencent-weibo.svg b/resources/fontawesome/svgs/brands/tencent-weibo.svg deleted file mode 100644 index fa0c3fe..0000000 --- a/resources/fontawesome/svgs/brands/tencent-weibo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/the-red-yeti.svg b/resources/fontawesome/svgs/brands/the-red-yeti.svg deleted file mode 100644 index b2ff5ee..0000000 --- a/resources/fontawesome/svgs/brands/the-red-yeti.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/themeco.svg b/resources/fontawesome/svgs/brands/themeco.svg deleted file mode 100644 index 4976c59..0000000 --- a/resources/fontawesome/svgs/brands/themeco.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/themeisle.svg b/resources/fontawesome/svgs/brands/themeisle.svg deleted file mode 100644 index 4b5313b..0000000 --- a/resources/fontawesome/svgs/brands/themeisle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/think-peaks.svg b/resources/fontawesome/svgs/brands/think-peaks.svg deleted file mode 100644 index be1e6ba..0000000 --- a/resources/fontawesome/svgs/brands/think-peaks.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/threads.svg b/resources/fontawesome/svgs/brands/threads.svg deleted file mode 100644 index f248154..0000000 --- a/resources/fontawesome/svgs/brands/threads.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/tiktok.svg b/resources/fontawesome/svgs/brands/tiktok.svg deleted file mode 100644 index a604074..0000000 --- a/resources/fontawesome/svgs/brands/tiktok.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/trade-federation.svg b/resources/fontawesome/svgs/brands/trade-federation.svg deleted file mode 100644 index 8b86f06..0000000 --- a/resources/fontawesome/svgs/brands/trade-federation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/trello.svg b/resources/fontawesome/svgs/brands/trello.svg deleted file mode 100644 index 3f3b4be..0000000 --- a/resources/fontawesome/svgs/brands/trello.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/tumblr.svg b/resources/fontawesome/svgs/brands/tumblr.svg deleted file mode 100644 index e9ac8ac..0000000 --- a/resources/fontawesome/svgs/brands/tumblr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/twitch.svg b/resources/fontawesome/svgs/brands/twitch.svg deleted file mode 100644 index c5663b3..0000000 --- a/resources/fontawesome/svgs/brands/twitch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/twitter.svg b/resources/fontawesome/svgs/brands/twitter.svg deleted file mode 100644 index 9a2b4b8..0000000 --- a/resources/fontawesome/svgs/brands/twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/typo3.svg b/resources/fontawesome/svgs/brands/typo3.svg deleted file mode 100644 index 4e50336..0000000 --- a/resources/fontawesome/svgs/brands/typo3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/uber.svg b/resources/fontawesome/svgs/brands/uber.svg deleted file mode 100644 index f9b25c2..0000000 --- a/resources/fontawesome/svgs/brands/uber.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ubuntu.svg b/resources/fontawesome/svgs/brands/ubuntu.svg deleted file mode 100644 index a3491d0..0000000 --- a/resources/fontawesome/svgs/brands/ubuntu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/uikit.svg b/resources/fontawesome/svgs/brands/uikit.svg deleted file mode 100644 index 983b91a..0000000 --- a/resources/fontawesome/svgs/brands/uikit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/umbraco.svg b/resources/fontawesome/svgs/brands/umbraco.svg deleted file mode 100644 index 1e29b20..0000000 --- a/resources/fontawesome/svgs/brands/umbraco.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/uncharted.svg b/resources/fontawesome/svgs/brands/uncharted.svg deleted file mode 100644 index 70c723b..0000000 --- a/resources/fontawesome/svgs/brands/uncharted.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/uniregistry.svg b/resources/fontawesome/svgs/brands/uniregistry.svg deleted file mode 100644 index 946d708..0000000 --- a/resources/fontawesome/svgs/brands/uniregistry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/unity.svg b/resources/fontawesome/svgs/brands/unity.svg deleted file mode 100644 index c850d57..0000000 --- a/resources/fontawesome/svgs/brands/unity.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/unsplash.svg b/resources/fontawesome/svgs/brands/unsplash.svg deleted file mode 100644 index dedf8ba..0000000 --- a/resources/fontawesome/svgs/brands/unsplash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/untappd.svg b/resources/fontawesome/svgs/brands/untappd.svg deleted file mode 100644 index e91d6e5..0000000 --- a/resources/fontawesome/svgs/brands/untappd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ups.svg b/resources/fontawesome/svgs/brands/ups.svg deleted file mode 100644 index 2d5f286..0000000 --- a/resources/fontawesome/svgs/brands/ups.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/upwork.svg b/resources/fontawesome/svgs/brands/upwork.svg deleted file mode 100644 index a1dae2f..0000000 --- a/resources/fontawesome/svgs/brands/upwork.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/usb.svg b/resources/fontawesome/svgs/brands/usb.svg deleted file mode 100644 index 8d848cb..0000000 --- a/resources/fontawesome/svgs/brands/usb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/usps.svg b/resources/fontawesome/svgs/brands/usps.svg deleted file mode 100644 index a2eb919..0000000 --- a/resources/fontawesome/svgs/brands/usps.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/ussunnah.svg b/resources/fontawesome/svgs/brands/ussunnah.svg deleted file mode 100644 index 7ca11fc..0000000 --- a/resources/fontawesome/svgs/brands/ussunnah.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vaadin.svg b/resources/fontawesome/svgs/brands/vaadin.svg deleted file mode 100644 index 1efe027..0000000 --- a/resources/fontawesome/svgs/brands/vaadin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/viacoin.svg b/resources/fontawesome/svgs/brands/viacoin.svg deleted file mode 100644 index 589a801..0000000 --- a/resources/fontawesome/svgs/brands/viacoin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/viadeo.svg b/resources/fontawesome/svgs/brands/viadeo.svg deleted file mode 100644 index b7cd8d6..0000000 --- a/resources/fontawesome/svgs/brands/viadeo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/viber.svg b/resources/fontawesome/svgs/brands/viber.svg deleted file mode 100644 index d3279cf..0000000 --- a/resources/fontawesome/svgs/brands/viber.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vimeo-v.svg b/resources/fontawesome/svgs/brands/vimeo-v.svg deleted file mode 100644 index 2c9faa3..0000000 --- a/resources/fontawesome/svgs/brands/vimeo-v.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vimeo.svg b/resources/fontawesome/svgs/brands/vimeo.svg deleted file mode 100644 index a24d96b..0000000 --- a/resources/fontawesome/svgs/brands/vimeo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vine.svg b/resources/fontawesome/svgs/brands/vine.svg deleted file mode 100644 index 01861de..0000000 --- a/resources/fontawesome/svgs/brands/vine.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vk.svg b/resources/fontawesome/svgs/brands/vk.svg deleted file mode 100644 index 4e9a6d6..0000000 --- a/resources/fontawesome/svgs/brands/vk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vnv.svg b/resources/fontawesome/svgs/brands/vnv.svg deleted file mode 100644 index 32c3be0..0000000 --- a/resources/fontawesome/svgs/brands/vnv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/vuejs.svg b/resources/fontawesome/svgs/brands/vuejs.svg deleted file mode 100644 index 17ca09a..0000000 --- a/resources/fontawesome/svgs/brands/vuejs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/watchman-monitoring.svg b/resources/fontawesome/svgs/brands/watchman-monitoring.svg deleted file mode 100644 index d511c43..0000000 --- a/resources/fontawesome/svgs/brands/watchman-monitoring.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/waze.svg b/resources/fontawesome/svgs/brands/waze.svg deleted file mode 100644 index fc547f2..0000000 --- a/resources/fontawesome/svgs/brands/waze.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/web-awesome.svg b/resources/fontawesome/svgs/brands/web-awesome.svg deleted file mode 100644 index 1eea054..0000000 --- a/resources/fontawesome/svgs/brands/web-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/webflow.svg b/resources/fontawesome/svgs/brands/webflow.svg deleted file mode 100644 index ddede50..0000000 --- a/resources/fontawesome/svgs/brands/webflow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/weebly.svg b/resources/fontawesome/svgs/brands/weebly.svg deleted file mode 100644 index e621215..0000000 --- a/resources/fontawesome/svgs/brands/weebly.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/weibo.svg b/resources/fontawesome/svgs/brands/weibo.svg deleted file mode 100644 index fb4cb58..0000000 --- a/resources/fontawesome/svgs/brands/weibo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/weixin.svg b/resources/fontawesome/svgs/brands/weixin.svg deleted file mode 100644 index c89fbe7..0000000 --- a/resources/fontawesome/svgs/brands/weixin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/whatsapp.svg b/resources/fontawesome/svgs/brands/whatsapp.svg deleted file mode 100644 index be86a03..0000000 --- a/resources/fontawesome/svgs/brands/whatsapp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/whmcs.svg b/resources/fontawesome/svgs/brands/whmcs.svg deleted file mode 100644 index 5341e9d..0000000 --- a/resources/fontawesome/svgs/brands/whmcs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wikipedia-w.svg b/resources/fontawesome/svgs/brands/wikipedia-w.svg deleted file mode 100644 index a696142..0000000 --- a/resources/fontawesome/svgs/brands/wikipedia-w.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/windows.svg b/resources/fontawesome/svgs/brands/windows.svg deleted file mode 100644 index e1b4886..0000000 --- a/resources/fontawesome/svgs/brands/windows.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wirsindhandwerk.svg b/resources/fontawesome/svgs/brands/wirsindhandwerk.svg deleted file mode 100644 index 5ffb7fd..0000000 --- a/resources/fontawesome/svgs/brands/wirsindhandwerk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wix.svg b/resources/fontawesome/svgs/brands/wix.svg deleted file mode 100644 index 300fb6b..0000000 --- a/resources/fontawesome/svgs/brands/wix.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wizards-of-the-coast.svg b/resources/fontawesome/svgs/brands/wizards-of-the-coast.svg deleted file mode 100644 index f04ecd9..0000000 --- a/resources/fontawesome/svgs/brands/wizards-of-the-coast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wodu.svg b/resources/fontawesome/svgs/brands/wodu.svg deleted file mode 100644 index 5a79955..0000000 --- a/resources/fontawesome/svgs/brands/wodu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wolf-pack-battalion.svg b/resources/fontawesome/svgs/brands/wolf-pack-battalion.svg deleted file mode 100644 index 301a1f6..0000000 --- a/resources/fontawesome/svgs/brands/wolf-pack-battalion.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wordpress-simple.svg b/resources/fontawesome/svgs/brands/wordpress-simple.svg deleted file mode 100644 index d861fda..0000000 --- a/resources/fontawesome/svgs/brands/wordpress-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wordpress.svg b/resources/fontawesome/svgs/brands/wordpress.svg deleted file mode 100644 index 097727c..0000000 --- a/resources/fontawesome/svgs/brands/wordpress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wpbeginner.svg b/resources/fontawesome/svgs/brands/wpbeginner.svg deleted file mode 100644 index 5f5d921..0000000 --- a/resources/fontawesome/svgs/brands/wpbeginner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wpexplorer.svg b/resources/fontawesome/svgs/brands/wpexplorer.svg deleted file mode 100644 index cc5d177..0000000 --- a/resources/fontawesome/svgs/brands/wpexplorer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wpforms.svg b/resources/fontawesome/svgs/brands/wpforms.svg deleted file mode 100644 index 34b3f7b..0000000 --- a/resources/fontawesome/svgs/brands/wpforms.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/wpressr.svg b/resources/fontawesome/svgs/brands/wpressr.svg deleted file mode 100644 index a6c864d..0000000 --- a/resources/fontawesome/svgs/brands/wpressr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/x-twitter.svg b/resources/fontawesome/svgs/brands/x-twitter.svg deleted file mode 100644 index e3bfafb..0000000 --- a/resources/fontawesome/svgs/brands/x-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/xbox.svg b/resources/fontawesome/svgs/brands/xbox.svg deleted file mode 100644 index 4c867aa..0000000 --- a/resources/fontawesome/svgs/brands/xbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/xing.svg b/resources/fontawesome/svgs/brands/xing.svg deleted file mode 100644 index d71ef8a..0000000 --- a/resources/fontawesome/svgs/brands/xing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/y-combinator.svg b/resources/fontawesome/svgs/brands/y-combinator.svg deleted file mode 100644 index d74dea0..0000000 --- a/resources/fontawesome/svgs/brands/y-combinator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yahoo.svg b/resources/fontawesome/svgs/brands/yahoo.svg deleted file mode 100644 index 15a909c..0000000 --- a/resources/fontawesome/svgs/brands/yahoo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yammer.svg b/resources/fontawesome/svgs/brands/yammer.svg deleted file mode 100644 index 97e2640..0000000 --- a/resources/fontawesome/svgs/brands/yammer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yandex-international.svg b/resources/fontawesome/svgs/brands/yandex-international.svg deleted file mode 100644 index b175881..0000000 --- a/resources/fontawesome/svgs/brands/yandex-international.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yandex.svg b/resources/fontawesome/svgs/brands/yandex.svg deleted file mode 100644 index fd3c01f..0000000 --- a/resources/fontawesome/svgs/brands/yandex.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yarn.svg b/resources/fontawesome/svgs/brands/yarn.svg deleted file mode 100644 index f553989..0000000 --- a/resources/fontawesome/svgs/brands/yarn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yelp.svg b/resources/fontawesome/svgs/brands/yelp.svg deleted file mode 100644 index 22c9086..0000000 --- a/resources/fontawesome/svgs/brands/yelp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/yoast.svg b/resources/fontawesome/svgs/brands/yoast.svg deleted file mode 100644 index a3c1c05..0000000 --- a/resources/fontawesome/svgs/brands/yoast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/youtube.svg b/resources/fontawesome/svgs/brands/youtube.svg deleted file mode 100644 index 753779e..0000000 --- a/resources/fontawesome/svgs/brands/youtube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/brands/zhihu.svg b/resources/fontawesome/svgs/brands/zhihu.svg deleted file mode 100644 index 2839d70..0000000 --- a/resources/fontawesome/svgs/brands/zhihu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/address-book.svg b/resources/fontawesome/svgs/regular/address-book.svg deleted file mode 100644 index 72c05dd..0000000 --- a/resources/fontawesome/svgs/regular/address-book.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/address-card.svg b/resources/fontawesome/svgs/regular/address-card.svg deleted file mode 100644 index c8179ac..0000000 --- a/resources/fontawesome/svgs/regular/address-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/bell-slash.svg b/resources/fontawesome/svgs/regular/bell-slash.svg deleted file mode 100644 index 478d921..0000000 --- a/resources/fontawesome/svgs/regular/bell-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/bell.svg b/resources/fontawesome/svgs/regular/bell.svg deleted file mode 100644 index 88a515d..0000000 --- a/resources/fontawesome/svgs/regular/bell.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/bookmark.svg b/resources/fontawesome/svgs/regular/bookmark.svg deleted file mode 100644 index 9da77fd..0000000 --- a/resources/fontawesome/svgs/regular/bookmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/building.svg b/resources/fontawesome/svgs/regular/building.svg deleted file mode 100644 index 10e7888..0000000 --- a/resources/fontawesome/svgs/regular/building.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar-check.svg b/resources/fontawesome/svgs/regular/calendar-check.svg deleted file mode 100644 index 1d90456..0000000 --- a/resources/fontawesome/svgs/regular/calendar-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar-days.svg b/resources/fontawesome/svgs/regular/calendar-days.svg deleted file mode 100644 index d6f2e24..0000000 --- a/resources/fontawesome/svgs/regular/calendar-days.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar-minus.svg b/resources/fontawesome/svgs/regular/calendar-minus.svg deleted file mode 100644 index 4f4d530..0000000 --- a/resources/fontawesome/svgs/regular/calendar-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar-plus.svg b/resources/fontawesome/svgs/regular/calendar-plus.svg deleted file mode 100644 index e74c7f4..0000000 --- a/resources/fontawesome/svgs/regular/calendar-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar-xmark.svg b/resources/fontawesome/svgs/regular/calendar-xmark.svg deleted file mode 100644 index 743dab4..0000000 --- a/resources/fontawesome/svgs/regular/calendar-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/calendar.svg b/resources/fontawesome/svgs/regular/calendar.svg deleted file mode 100644 index cec0b6d..0000000 --- a/resources/fontawesome/svgs/regular/calendar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chart-bar.svg b/resources/fontawesome/svgs/regular/chart-bar.svg deleted file mode 100644 index ab7ba81..0000000 --- a/resources/fontawesome/svgs/regular/chart-bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-bishop.svg b/resources/fontawesome/svgs/regular/chess-bishop.svg deleted file mode 100644 index 6a746f4..0000000 --- a/resources/fontawesome/svgs/regular/chess-bishop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-king.svg b/resources/fontawesome/svgs/regular/chess-king.svg deleted file mode 100644 index 572372a..0000000 --- a/resources/fontawesome/svgs/regular/chess-king.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-knight.svg b/resources/fontawesome/svgs/regular/chess-knight.svg deleted file mode 100644 index 9860c2a..0000000 --- a/resources/fontawesome/svgs/regular/chess-knight.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-pawn.svg b/resources/fontawesome/svgs/regular/chess-pawn.svg deleted file mode 100644 index 730c9b8..0000000 --- a/resources/fontawesome/svgs/regular/chess-pawn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-queen.svg b/resources/fontawesome/svgs/regular/chess-queen.svg deleted file mode 100644 index b29aad1..0000000 --- a/resources/fontawesome/svgs/regular/chess-queen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/chess-rook.svg b/resources/fontawesome/svgs/regular/chess-rook.svg deleted file mode 100644 index 591f38b..0000000 --- a/resources/fontawesome/svgs/regular/chess-rook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-check.svg b/resources/fontawesome/svgs/regular/circle-check.svg deleted file mode 100644 index 97e0b9c..0000000 --- a/resources/fontawesome/svgs/regular/circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-dot.svg b/resources/fontawesome/svgs/regular/circle-dot.svg deleted file mode 100644 index 1522792..0000000 --- a/resources/fontawesome/svgs/regular/circle-dot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-down.svg b/resources/fontawesome/svgs/regular/circle-down.svg deleted file mode 100644 index e6ef058..0000000 --- a/resources/fontawesome/svgs/regular/circle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-left.svg b/resources/fontawesome/svgs/regular/circle-left.svg deleted file mode 100644 index d11b6a1..0000000 --- a/resources/fontawesome/svgs/regular/circle-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-pause.svg b/resources/fontawesome/svgs/regular/circle-pause.svg deleted file mode 100644 index e04c72c..0000000 --- a/resources/fontawesome/svgs/regular/circle-pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-play.svg b/resources/fontawesome/svgs/regular/circle-play.svg deleted file mode 100644 index eb2f649..0000000 --- a/resources/fontawesome/svgs/regular/circle-play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-question.svg b/resources/fontawesome/svgs/regular/circle-question.svg deleted file mode 100644 index 1df2b5d..0000000 --- a/resources/fontawesome/svgs/regular/circle-question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-right.svg b/resources/fontawesome/svgs/regular/circle-right.svg deleted file mode 100644 index f2f19d9..0000000 --- a/resources/fontawesome/svgs/regular/circle-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-stop.svg b/resources/fontawesome/svgs/regular/circle-stop.svg deleted file mode 100644 index 1ad6184..0000000 --- a/resources/fontawesome/svgs/regular/circle-stop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-up.svg b/resources/fontawesome/svgs/regular/circle-up.svg deleted file mode 100644 index 77b6989..0000000 --- a/resources/fontawesome/svgs/regular/circle-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-user.svg b/resources/fontawesome/svgs/regular/circle-user.svg deleted file mode 100644 index 65bda67..0000000 --- a/resources/fontawesome/svgs/regular/circle-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle-xmark.svg b/resources/fontawesome/svgs/regular/circle-xmark.svg deleted file mode 100644 index e7a8ae2..0000000 --- a/resources/fontawesome/svgs/regular/circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/circle.svg b/resources/fontawesome/svgs/regular/circle.svg deleted file mode 100644 index f264990..0000000 --- a/resources/fontawesome/svgs/regular/circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/clipboard.svg b/resources/fontawesome/svgs/regular/clipboard.svg deleted file mode 100644 index 1f9fc5d..0000000 --- a/resources/fontawesome/svgs/regular/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/clock.svg b/resources/fontawesome/svgs/regular/clock.svg deleted file mode 100644 index 830baab..0000000 --- a/resources/fontawesome/svgs/regular/clock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/clone.svg b/resources/fontawesome/svgs/regular/clone.svg deleted file mode 100644 index e61db2f..0000000 --- a/resources/fontawesome/svgs/regular/clone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/closed-captioning.svg b/resources/fontawesome/svgs/regular/closed-captioning.svg deleted file mode 100644 index c6bfc9f..0000000 --- a/resources/fontawesome/svgs/regular/closed-captioning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/comment-dots.svg b/resources/fontawesome/svgs/regular/comment-dots.svg deleted file mode 100644 index 8840185..0000000 --- a/resources/fontawesome/svgs/regular/comment-dots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/comment.svg b/resources/fontawesome/svgs/regular/comment.svg deleted file mode 100644 index 99e43ac..0000000 --- a/resources/fontawesome/svgs/regular/comment.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/comments.svg b/resources/fontawesome/svgs/regular/comments.svg deleted file mode 100644 index 4987ab9..0000000 --- a/resources/fontawesome/svgs/regular/comments.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/compass.svg b/resources/fontawesome/svgs/regular/compass.svg deleted file mode 100644 index bf8919a..0000000 --- a/resources/fontawesome/svgs/regular/compass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/copy.svg b/resources/fontawesome/svgs/regular/copy.svg deleted file mode 100644 index 88bfb2b..0000000 --- a/resources/fontawesome/svgs/regular/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/copyright.svg b/resources/fontawesome/svgs/regular/copyright.svg deleted file mode 100644 index ab373dc..0000000 --- a/resources/fontawesome/svgs/regular/copyright.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/credit-card.svg b/resources/fontawesome/svgs/regular/credit-card.svg deleted file mode 100644 index 0999321..0000000 --- a/resources/fontawesome/svgs/regular/credit-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/envelope-open.svg b/resources/fontawesome/svgs/regular/envelope-open.svg deleted file mode 100644 index 7f8ea10..0000000 --- a/resources/fontawesome/svgs/regular/envelope-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/envelope.svg b/resources/fontawesome/svgs/regular/envelope.svg deleted file mode 100644 index d9f578a..0000000 --- a/resources/fontawesome/svgs/regular/envelope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/eye-slash.svg b/resources/fontawesome/svgs/regular/eye-slash.svg deleted file mode 100644 index 9c39ae9..0000000 --- a/resources/fontawesome/svgs/regular/eye-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/eye.svg b/resources/fontawesome/svgs/regular/eye.svg deleted file mode 100644 index c0ad1d5..0000000 --- a/resources/fontawesome/svgs/regular/eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-angry.svg b/resources/fontawesome/svgs/regular/face-angry.svg deleted file mode 100644 index 92be0f5..0000000 --- a/resources/fontawesome/svgs/regular/face-angry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-dizzy.svg b/resources/fontawesome/svgs/regular/face-dizzy.svg deleted file mode 100644 index c0795b2..0000000 --- a/resources/fontawesome/svgs/regular/face-dizzy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-flushed.svg b/resources/fontawesome/svgs/regular/face-flushed.svg deleted file mode 100644 index f72aa13..0000000 --- a/resources/fontawesome/svgs/regular/face-flushed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-frown-open.svg b/resources/fontawesome/svgs/regular/face-frown-open.svg deleted file mode 100644 index d7ac33a..0000000 --- a/resources/fontawesome/svgs/regular/face-frown-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-frown.svg b/resources/fontawesome/svgs/regular/face-frown.svg deleted file mode 100644 index 23d0005..0000000 --- a/resources/fontawesome/svgs/regular/face-frown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grimace.svg b/resources/fontawesome/svgs/regular/face-grimace.svg deleted file mode 100644 index 2a1ea59..0000000 --- a/resources/fontawesome/svgs/regular/face-grimace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-beam-sweat.svg b/resources/fontawesome/svgs/regular/face-grin-beam-sweat.svg deleted file mode 100644 index 95976bb..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-beam-sweat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-beam.svg b/resources/fontawesome/svgs/regular/face-grin-beam.svg deleted file mode 100644 index 0ca50d6..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-hearts.svg b/resources/fontawesome/svgs/regular/face-grin-hearts.svg deleted file mode 100644 index 63371cb..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-hearts.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-squint-tears.svg b/resources/fontawesome/svgs/regular/face-grin-squint-tears.svg deleted file mode 100644 index afbea7e..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-squint-tears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-squint.svg b/resources/fontawesome/svgs/regular/face-grin-squint.svg deleted file mode 100644 index f09cc7c..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-stars.svg b/resources/fontawesome/svgs/regular/face-grin-stars.svg deleted file mode 100644 index e29696c..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-stars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-tears.svg b/resources/fontawesome/svgs/regular/face-grin-tears.svg deleted file mode 100644 index cab6c1a..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-tears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-tongue-squint.svg b/resources/fontawesome/svgs/regular/face-grin-tongue-squint.svg deleted file mode 100644 index dc25ee1..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-tongue-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-tongue-wink.svg b/resources/fontawesome/svgs/regular/face-grin-tongue-wink.svg deleted file mode 100644 index 84b7220..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-tongue-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-tongue.svg b/resources/fontawesome/svgs/regular/face-grin-tongue.svg deleted file mode 100644 index c0da277..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-tongue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-wide.svg b/resources/fontawesome/svgs/regular/face-grin-wide.svg deleted file mode 100644 index ca58374..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-wide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin-wink.svg b/resources/fontawesome/svgs/regular/face-grin-wink.svg deleted file mode 100644 index 352df72..0000000 --- a/resources/fontawesome/svgs/regular/face-grin-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-grin.svg b/resources/fontawesome/svgs/regular/face-grin.svg deleted file mode 100644 index c30ae4a..0000000 --- a/resources/fontawesome/svgs/regular/face-grin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-kiss-beam.svg b/resources/fontawesome/svgs/regular/face-kiss-beam.svg deleted file mode 100644 index c0ec708..0000000 --- a/resources/fontawesome/svgs/regular/face-kiss-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-kiss-wink-heart.svg b/resources/fontawesome/svgs/regular/face-kiss-wink-heart.svg deleted file mode 100644 index 4242755..0000000 --- a/resources/fontawesome/svgs/regular/face-kiss-wink-heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-kiss.svg b/resources/fontawesome/svgs/regular/face-kiss.svg deleted file mode 100644 index 6cd5051..0000000 --- a/resources/fontawesome/svgs/regular/face-kiss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-laugh-beam.svg b/resources/fontawesome/svgs/regular/face-laugh-beam.svg deleted file mode 100644 index 0de4a5c..0000000 --- a/resources/fontawesome/svgs/regular/face-laugh-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-laugh-squint.svg b/resources/fontawesome/svgs/regular/face-laugh-squint.svg deleted file mode 100644 index 275e1c7..0000000 --- a/resources/fontawesome/svgs/regular/face-laugh-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-laugh-wink.svg b/resources/fontawesome/svgs/regular/face-laugh-wink.svg deleted file mode 100644 index a73525b..0000000 --- a/resources/fontawesome/svgs/regular/face-laugh-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-laugh.svg b/resources/fontawesome/svgs/regular/face-laugh.svg deleted file mode 100644 index 73b1241..0000000 --- a/resources/fontawesome/svgs/regular/face-laugh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-meh-blank.svg b/resources/fontawesome/svgs/regular/face-meh-blank.svg deleted file mode 100644 index fbddc09..0000000 --- a/resources/fontawesome/svgs/regular/face-meh-blank.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-meh.svg b/resources/fontawesome/svgs/regular/face-meh.svg deleted file mode 100644 index 2243f7d..0000000 --- a/resources/fontawesome/svgs/regular/face-meh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-rolling-eyes.svg b/resources/fontawesome/svgs/regular/face-rolling-eyes.svg deleted file mode 100644 index d049fc1..0000000 --- a/resources/fontawesome/svgs/regular/face-rolling-eyes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-sad-cry.svg b/resources/fontawesome/svgs/regular/face-sad-cry.svg deleted file mode 100644 index 1ceff35..0000000 --- a/resources/fontawesome/svgs/regular/face-sad-cry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-sad-tear.svg b/resources/fontawesome/svgs/regular/face-sad-tear.svg deleted file mode 100644 index 86c5f91..0000000 --- a/resources/fontawesome/svgs/regular/face-sad-tear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-smile-beam.svg b/resources/fontawesome/svgs/regular/face-smile-beam.svg deleted file mode 100644 index 3881a7d..0000000 --- a/resources/fontawesome/svgs/regular/face-smile-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-smile-wink.svg b/resources/fontawesome/svgs/regular/face-smile-wink.svg deleted file mode 100644 index e3fcf43..0000000 --- a/resources/fontawesome/svgs/regular/face-smile-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-smile.svg b/resources/fontawesome/svgs/regular/face-smile.svg deleted file mode 100644 index eb6ec96..0000000 --- a/resources/fontawesome/svgs/regular/face-smile.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-surprise.svg b/resources/fontawesome/svgs/regular/face-surprise.svg deleted file mode 100644 index 06e26cf..0000000 --- a/resources/fontawesome/svgs/regular/face-surprise.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/face-tired.svg b/resources/fontawesome/svgs/regular/face-tired.svg deleted file mode 100644 index ac82416..0000000 --- a/resources/fontawesome/svgs/regular/face-tired.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-audio.svg b/resources/fontawesome/svgs/regular/file-audio.svg deleted file mode 100644 index fc4329f..0000000 --- a/resources/fontawesome/svgs/regular/file-audio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-code.svg b/resources/fontawesome/svgs/regular/file-code.svg deleted file mode 100644 index 419e344..0000000 --- a/resources/fontawesome/svgs/regular/file-code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-excel.svg b/resources/fontawesome/svgs/regular/file-excel.svg deleted file mode 100644 index a233b1f..0000000 --- a/resources/fontawesome/svgs/regular/file-excel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-image.svg b/resources/fontawesome/svgs/regular/file-image.svg deleted file mode 100644 index b59c95e..0000000 --- a/resources/fontawesome/svgs/regular/file-image.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-lines.svg b/resources/fontawesome/svgs/regular/file-lines.svg deleted file mode 100644 index 0b2fa7f..0000000 --- a/resources/fontawesome/svgs/regular/file-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-pdf.svg b/resources/fontawesome/svgs/regular/file-pdf.svg deleted file mode 100644 index ccd8199..0000000 --- a/resources/fontawesome/svgs/regular/file-pdf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-powerpoint.svg b/resources/fontawesome/svgs/regular/file-powerpoint.svg deleted file mode 100644 index ef13475..0000000 --- a/resources/fontawesome/svgs/regular/file-powerpoint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-video.svg b/resources/fontawesome/svgs/regular/file-video.svg deleted file mode 100644 index 7a4941f..0000000 --- a/resources/fontawesome/svgs/regular/file-video.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-word.svg b/resources/fontawesome/svgs/regular/file-word.svg deleted file mode 100644 index 9b72e93..0000000 --- a/resources/fontawesome/svgs/regular/file-word.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file-zipper.svg b/resources/fontawesome/svgs/regular/file-zipper.svg deleted file mode 100644 index 97670f1..0000000 --- a/resources/fontawesome/svgs/regular/file-zipper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/file.svg b/resources/fontawesome/svgs/regular/file.svg deleted file mode 100644 index acd882f..0000000 --- a/resources/fontawesome/svgs/regular/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/flag.svg b/resources/fontawesome/svgs/regular/flag.svg deleted file mode 100644 index 983b80f..0000000 --- a/resources/fontawesome/svgs/regular/flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/floppy-disk.svg b/resources/fontawesome/svgs/regular/floppy-disk.svg deleted file mode 100644 index 94b4e48..0000000 --- a/resources/fontawesome/svgs/regular/floppy-disk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/folder-closed.svg b/resources/fontawesome/svgs/regular/folder-closed.svg deleted file mode 100644 index 35a0fc5..0000000 --- a/resources/fontawesome/svgs/regular/folder-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/folder-open.svg b/resources/fontawesome/svgs/regular/folder-open.svg deleted file mode 100644 index c8aba2b..0000000 --- a/resources/fontawesome/svgs/regular/folder-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/folder.svg b/resources/fontawesome/svgs/regular/folder.svg deleted file mode 100644 index 68033ec..0000000 --- a/resources/fontawesome/svgs/regular/folder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/font-awesome.svg b/resources/fontawesome/svgs/regular/font-awesome.svg deleted file mode 100644 index d573bde..0000000 --- a/resources/fontawesome/svgs/regular/font-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/futbol.svg b/resources/fontawesome/svgs/regular/futbol.svg deleted file mode 100644 index e0a9f3a..0000000 --- a/resources/fontawesome/svgs/regular/futbol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/gem.svg b/resources/fontawesome/svgs/regular/gem.svg deleted file mode 100644 index 05096b0..0000000 --- a/resources/fontawesome/svgs/regular/gem.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-back-fist.svg b/resources/fontawesome/svgs/regular/hand-back-fist.svg deleted file mode 100644 index 36b6acf..0000000 --- a/resources/fontawesome/svgs/regular/hand-back-fist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-lizard.svg b/resources/fontawesome/svgs/regular/hand-lizard.svg deleted file mode 100644 index 57c7008..0000000 --- a/resources/fontawesome/svgs/regular/hand-lizard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-peace.svg b/resources/fontawesome/svgs/regular/hand-peace.svg deleted file mode 100644 index f9df3ac..0000000 --- a/resources/fontawesome/svgs/regular/hand-peace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-point-down.svg b/resources/fontawesome/svgs/regular/hand-point-down.svg deleted file mode 100644 index 02c0cb4..0000000 --- a/resources/fontawesome/svgs/regular/hand-point-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-point-left.svg b/resources/fontawesome/svgs/regular/hand-point-left.svg deleted file mode 100644 index 5ac6edf..0000000 --- a/resources/fontawesome/svgs/regular/hand-point-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-point-right.svg b/resources/fontawesome/svgs/regular/hand-point-right.svg deleted file mode 100644 index 70d863d..0000000 --- a/resources/fontawesome/svgs/regular/hand-point-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-point-up.svg b/resources/fontawesome/svgs/regular/hand-point-up.svg deleted file mode 100644 index cc70002..0000000 --- a/resources/fontawesome/svgs/regular/hand-point-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-pointer.svg b/resources/fontawesome/svgs/regular/hand-pointer.svg deleted file mode 100644 index 0b1a720..0000000 --- a/resources/fontawesome/svgs/regular/hand-pointer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-scissors.svg b/resources/fontawesome/svgs/regular/hand-scissors.svg deleted file mode 100644 index d1f9202..0000000 --- a/resources/fontawesome/svgs/regular/hand-scissors.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand-spock.svg b/resources/fontawesome/svgs/regular/hand-spock.svg deleted file mode 100644 index 1519220..0000000 --- a/resources/fontawesome/svgs/regular/hand-spock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hand.svg b/resources/fontawesome/svgs/regular/hand.svg deleted file mode 100644 index 5913870..0000000 --- a/resources/fontawesome/svgs/regular/hand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/handshake.svg b/resources/fontawesome/svgs/regular/handshake.svg deleted file mode 100644 index fc00fe6..0000000 --- a/resources/fontawesome/svgs/regular/handshake.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hard-drive.svg b/resources/fontawesome/svgs/regular/hard-drive.svg deleted file mode 100644 index 80ab018..0000000 --- a/resources/fontawesome/svgs/regular/hard-drive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/heart.svg b/resources/fontawesome/svgs/regular/heart.svg deleted file mode 100644 index a4b8d8a..0000000 --- a/resources/fontawesome/svgs/regular/heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hospital.svg b/resources/fontawesome/svgs/regular/hospital.svg deleted file mode 100644 index b3a6a9b..0000000 --- a/resources/fontawesome/svgs/regular/hospital.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hourglass-half.svg b/resources/fontawesome/svgs/regular/hourglass-half.svg deleted file mode 100644 index ebf7e45..0000000 --- a/resources/fontawesome/svgs/regular/hourglass-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/hourglass.svg b/resources/fontawesome/svgs/regular/hourglass.svg deleted file mode 100644 index 6b7c1ac..0000000 --- a/resources/fontawesome/svgs/regular/hourglass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/id-badge.svg b/resources/fontawesome/svgs/regular/id-badge.svg deleted file mode 100644 index df839cb..0000000 --- a/resources/fontawesome/svgs/regular/id-badge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/id-card.svg b/resources/fontawesome/svgs/regular/id-card.svg deleted file mode 100644 index 356db1f..0000000 --- a/resources/fontawesome/svgs/regular/id-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/image.svg b/resources/fontawesome/svgs/regular/image.svg deleted file mode 100644 index f793d0d..0000000 --- a/resources/fontawesome/svgs/regular/image.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/images.svg b/resources/fontawesome/svgs/regular/images.svg deleted file mode 100644 index 2a48721..0000000 --- a/resources/fontawesome/svgs/regular/images.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/keyboard.svg b/resources/fontawesome/svgs/regular/keyboard.svg deleted file mode 100644 index 7509fe0..0000000 --- a/resources/fontawesome/svgs/regular/keyboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/lemon.svg b/resources/fontawesome/svgs/regular/lemon.svg deleted file mode 100644 index 0c10985..0000000 --- a/resources/fontawesome/svgs/regular/lemon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/life-ring.svg b/resources/fontawesome/svgs/regular/life-ring.svg deleted file mode 100644 index 6880eba..0000000 --- a/resources/fontawesome/svgs/regular/life-ring.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/lightbulb.svg b/resources/fontawesome/svgs/regular/lightbulb.svg deleted file mode 100644 index d1fc711..0000000 --- a/resources/fontawesome/svgs/regular/lightbulb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/map.svg b/resources/fontawesome/svgs/regular/map.svg deleted file mode 100644 index 3efa406..0000000 --- a/resources/fontawesome/svgs/regular/map.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/message.svg b/resources/fontawesome/svgs/regular/message.svg deleted file mode 100644 index 64f26fe..0000000 --- a/resources/fontawesome/svgs/regular/message.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/money-bill-1.svg b/resources/fontawesome/svgs/regular/money-bill-1.svg deleted file mode 100644 index 84c400d..0000000 --- a/resources/fontawesome/svgs/regular/money-bill-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/moon.svg b/resources/fontawesome/svgs/regular/moon.svg deleted file mode 100644 index 8cd2968..0000000 --- a/resources/fontawesome/svgs/regular/moon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/newspaper.svg b/resources/fontawesome/svgs/regular/newspaper.svg deleted file mode 100644 index d30b61e..0000000 --- a/resources/fontawesome/svgs/regular/newspaper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/note-sticky.svg b/resources/fontawesome/svgs/regular/note-sticky.svg deleted file mode 100644 index 651cda0..0000000 --- a/resources/fontawesome/svgs/regular/note-sticky.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/object-group.svg b/resources/fontawesome/svgs/regular/object-group.svg deleted file mode 100644 index 91f89b6..0000000 --- a/resources/fontawesome/svgs/regular/object-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/object-ungroup.svg b/resources/fontawesome/svgs/regular/object-ungroup.svg deleted file mode 100644 index a820eec..0000000 --- a/resources/fontawesome/svgs/regular/object-ungroup.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/paper-plane.svg b/resources/fontawesome/svgs/regular/paper-plane.svg deleted file mode 100644 index c153a06..0000000 --- a/resources/fontawesome/svgs/regular/paper-plane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/paste.svg b/resources/fontawesome/svgs/regular/paste.svg deleted file mode 100644 index 02b2069..0000000 --- a/resources/fontawesome/svgs/regular/paste.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/pen-to-square.svg b/resources/fontawesome/svgs/regular/pen-to-square.svg deleted file mode 100644 index 2e22757..0000000 --- a/resources/fontawesome/svgs/regular/pen-to-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/rectangle-list.svg b/resources/fontawesome/svgs/regular/rectangle-list.svg deleted file mode 100644 index 2ab7809..0000000 --- a/resources/fontawesome/svgs/regular/rectangle-list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/rectangle-xmark.svg b/resources/fontawesome/svgs/regular/rectangle-xmark.svg deleted file mode 100644 index f1562a5..0000000 --- a/resources/fontawesome/svgs/regular/rectangle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/registered.svg b/resources/fontawesome/svgs/regular/registered.svg deleted file mode 100644 index 7279068..0000000 --- a/resources/fontawesome/svgs/regular/registered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/share-from-square.svg b/resources/fontawesome/svgs/regular/share-from-square.svg deleted file mode 100644 index ec316ac..0000000 --- a/resources/fontawesome/svgs/regular/share-from-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/snowflake.svg b/resources/fontawesome/svgs/regular/snowflake.svg deleted file mode 100644 index 8e2e92d..0000000 --- a/resources/fontawesome/svgs/regular/snowflake.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-caret-down.svg b/resources/fontawesome/svgs/regular/square-caret-down.svg deleted file mode 100644 index 825887b..0000000 --- a/resources/fontawesome/svgs/regular/square-caret-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-caret-left.svg b/resources/fontawesome/svgs/regular/square-caret-left.svg deleted file mode 100644 index 47c6359..0000000 --- a/resources/fontawesome/svgs/regular/square-caret-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-caret-right.svg b/resources/fontawesome/svgs/regular/square-caret-right.svg deleted file mode 100644 index d4d484f..0000000 --- a/resources/fontawesome/svgs/regular/square-caret-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-caret-up.svg b/resources/fontawesome/svgs/regular/square-caret-up.svg deleted file mode 100644 index cfbea32..0000000 --- a/resources/fontawesome/svgs/regular/square-caret-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-check.svg b/resources/fontawesome/svgs/regular/square-check.svg deleted file mode 100644 index bdf645d..0000000 --- a/resources/fontawesome/svgs/regular/square-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-full.svg b/resources/fontawesome/svgs/regular/square-full.svg deleted file mode 100644 index 171621b..0000000 --- a/resources/fontawesome/svgs/regular/square-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-minus.svg b/resources/fontawesome/svgs/regular/square-minus.svg deleted file mode 100644 index aa1e81a..0000000 --- a/resources/fontawesome/svgs/regular/square-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square-plus.svg b/resources/fontawesome/svgs/regular/square-plus.svg deleted file mode 100644 index b1a17fd..0000000 --- a/resources/fontawesome/svgs/regular/square-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/square.svg b/resources/fontawesome/svgs/regular/square.svg deleted file mode 100644 index 9492e1a..0000000 --- a/resources/fontawesome/svgs/regular/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/star-half-stroke.svg b/resources/fontawesome/svgs/regular/star-half-stroke.svg deleted file mode 100644 index 36216a7..0000000 --- a/resources/fontawesome/svgs/regular/star-half-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/star-half.svg b/resources/fontawesome/svgs/regular/star-half.svg deleted file mode 100644 index fa1220b..0000000 --- a/resources/fontawesome/svgs/regular/star-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/star.svg b/resources/fontawesome/svgs/regular/star.svg deleted file mode 100644 index 6998d32..0000000 --- a/resources/fontawesome/svgs/regular/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/sun.svg b/resources/fontawesome/svgs/regular/sun.svg deleted file mode 100644 index f59c33f..0000000 --- a/resources/fontawesome/svgs/regular/sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/thumbs-down.svg b/resources/fontawesome/svgs/regular/thumbs-down.svg deleted file mode 100644 index eada076..0000000 --- a/resources/fontawesome/svgs/regular/thumbs-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/thumbs-up.svg b/resources/fontawesome/svgs/regular/thumbs-up.svg deleted file mode 100644 index 15130d9..0000000 --- a/resources/fontawesome/svgs/regular/thumbs-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/trash-can.svg b/resources/fontawesome/svgs/regular/trash-can.svg deleted file mode 100644 index dc6fcb3..0000000 --- a/resources/fontawesome/svgs/regular/trash-can.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/user.svg b/resources/fontawesome/svgs/regular/user.svg deleted file mode 100644 index 03f9215..0000000 --- a/resources/fontawesome/svgs/regular/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/window-maximize.svg b/resources/fontawesome/svgs/regular/window-maximize.svg deleted file mode 100644 index ed0d143..0000000 --- a/resources/fontawesome/svgs/regular/window-maximize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/window-minimize.svg b/resources/fontawesome/svgs/regular/window-minimize.svg deleted file mode 100644 index 00d4dba..0000000 --- a/resources/fontawesome/svgs/regular/window-minimize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/regular/window-restore.svg b/resources/fontawesome/svgs/regular/window-restore.svg deleted file mode 100644 index 90ad737..0000000 --- a/resources/fontawesome/svgs/regular/window-restore.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/0.svg b/resources/fontawesome/svgs/solid/0.svg deleted file mode 100644 index 903d869..0000000 --- a/resources/fontawesome/svgs/solid/0.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/1.svg b/resources/fontawesome/svgs/solid/1.svg deleted file mode 100644 index 1b77e62..0000000 --- a/resources/fontawesome/svgs/solid/1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/2.svg b/resources/fontawesome/svgs/solid/2.svg deleted file mode 100644 index 192c095..0000000 --- a/resources/fontawesome/svgs/solid/2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/3.svg b/resources/fontawesome/svgs/solid/3.svg deleted file mode 100644 index 51ca927..0000000 --- a/resources/fontawesome/svgs/solid/3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/4.svg b/resources/fontawesome/svgs/solid/4.svg deleted file mode 100644 index fafa46d..0000000 --- a/resources/fontawesome/svgs/solid/4.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/5.svg b/resources/fontawesome/svgs/solid/5.svg deleted file mode 100644 index 35e6556..0000000 --- a/resources/fontawesome/svgs/solid/5.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/6.svg b/resources/fontawesome/svgs/solid/6.svg deleted file mode 100644 index e752747..0000000 --- a/resources/fontawesome/svgs/solid/6.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/7.svg b/resources/fontawesome/svgs/solid/7.svg deleted file mode 100644 index cfa6fe0..0000000 --- a/resources/fontawesome/svgs/solid/7.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/8.svg b/resources/fontawesome/svgs/solid/8.svg deleted file mode 100644 index 2328ce4..0000000 --- a/resources/fontawesome/svgs/solid/8.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/9.svg b/resources/fontawesome/svgs/solid/9.svg deleted file mode 100644 index 14e2407..0000000 --- a/resources/fontawesome/svgs/solid/9.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/a.svg b/resources/fontawesome/svgs/solid/a.svg deleted file mode 100644 index 92a3842..0000000 --- a/resources/fontawesome/svgs/solid/a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/address-book.svg b/resources/fontawesome/svgs/solid/address-book.svg deleted file mode 100644 index f940b61..0000000 --- a/resources/fontawesome/svgs/solid/address-book.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/address-card.svg b/resources/fontawesome/svgs/solid/address-card.svg deleted file mode 100644 index 9b12983..0000000 --- a/resources/fontawesome/svgs/solid/address-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/align-center.svg b/resources/fontawesome/svgs/solid/align-center.svg deleted file mode 100644 index 9a5c9be..0000000 --- a/resources/fontawesome/svgs/solid/align-center.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/align-justify.svg b/resources/fontawesome/svgs/solid/align-justify.svg deleted file mode 100644 index 57aa3e4..0000000 --- a/resources/fontawesome/svgs/solid/align-justify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/align-left.svg b/resources/fontawesome/svgs/solid/align-left.svg deleted file mode 100644 index a61f235..0000000 --- a/resources/fontawesome/svgs/solid/align-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/align-right.svg b/resources/fontawesome/svgs/solid/align-right.svg deleted file mode 100644 index 19a91bd..0000000 --- a/resources/fontawesome/svgs/solid/align-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/anchor-circle-check.svg b/resources/fontawesome/svgs/solid/anchor-circle-check.svg deleted file mode 100644 index 4b055fa..0000000 --- a/resources/fontawesome/svgs/solid/anchor-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/anchor-circle-exclamation.svg b/resources/fontawesome/svgs/solid/anchor-circle-exclamation.svg deleted file mode 100644 index 54b5874..0000000 --- a/resources/fontawesome/svgs/solid/anchor-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/anchor-circle-xmark.svg b/resources/fontawesome/svgs/solid/anchor-circle-xmark.svg deleted file mode 100644 index 41c4745..0000000 --- a/resources/fontawesome/svgs/solid/anchor-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/anchor-lock.svg b/resources/fontawesome/svgs/solid/anchor-lock.svg deleted file mode 100644 index 12940d5..0000000 --- a/resources/fontawesome/svgs/solid/anchor-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/anchor.svg b/resources/fontawesome/svgs/solid/anchor.svg deleted file mode 100644 index 493706e..0000000 --- a/resources/fontawesome/svgs/solid/anchor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angle-down.svg b/resources/fontawesome/svgs/solid/angle-down.svg deleted file mode 100644 index 29b24b2..0000000 --- a/resources/fontawesome/svgs/solid/angle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angle-left.svg b/resources/fontawesome/svgs/solid/angle-left.svg deleted file mode 100644 index a98acf0..0000000 --- a/resources/fontawesome/svgs/solid/angle-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angle-right.svg b/resources/fontawesome/svgs/solid/angle-right.svg deleted file mode 100644 index 91f98cc..0000000 --- a/resources/fontawesome/svgs/solid/angle-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angle-up.svg b/resources/fontawesome/svgs/solid/angle-up.svg deleted file mode 100644 index de73360..0000000 --- a/resources/fontawesome/svgs/solid/angle-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angles-down.svg b/resources/fontawesome/svgs/solid/angles-down.svg deleted file mode 100644 index 94a016d..0000000 --- a/resources/fontawesome/svgs/solid/angles-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angles-left.svg b/resources/fontawesome/svgs/solid/angles-left.svg deleted file mode 100644 index 8ea33ed..0000000 --- a/resources/fontawesome/svgs/solid/angles-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angles-right.svg b/resources/fontawesome/svgs/solid/angles-right.svg deleted file mode 100644 index a9811aa..0000000 --- a/resources/fontawesome/svgs/solid/angles-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/angles-up.svg b/resources/fontawesome/svgs/solid/angles-up.svg deleted file mode 100644 index 5974c59..0000000 --- a/resources/fontawesome/svgs/solid/angles-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ankh.svg b/resources/fontawesome/svgs/solid/ankh.svg deleted file mode 100644 index 2682209..0000000 --- a/resources/fontawesome/svgs/solid/ankh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/apple-whole.svg b/resources/fontawesome/svgs/solid/apple-whole.svg deleted file mode 100644 index 1d49aee..0000000 --- a/resources/fontawesome/svgs/solid/apple-whole.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/archway.svg b/resources/fontawesome/svgs/solid/archway.svg deleted file mode 100644 index 12357e5..0000000 --- a/resources/fontawesome/svgs/solid/archway.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-1-9.svg b/resources/fontawesome/svgs/solid/arrow-down-1-9.svg deleted file mode 100644 index 2197df5..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-1-9.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-9-1.svg b/resources/fontawesome/svgs/solid/arrow-down-9-1.svg deleted file mode 100644 index 11264fe..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-9-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-a-z.svg b/resources/fontawesome/svgs/solid/arrow-down-a-z.svg deleted file mode 100644 index ba2ce42..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-a-z.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-long.svg b/resources/fontawesome/svgs/solid/arrow-down-long.svg deleted file mode 100644 index b73cb54..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-short-wide.svg b/resources/fontawesome/svgs/solid/arrow-down-short-wide.svg deleted file mode 100644 index debd35e..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-short-wide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-up-across-line.svg b/resources/fontawesome/svgs/solid/arrow-down-up-across-line.svg deleted file mode 100644 index 46e4260..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-up-across-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-up-lock.svg b/resources/fontawesome/svgs/solid/arrow-down-up-lock.svg deleted file mode 100644 index 00f460d..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-up-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-wide-short.svg b/resources/fontawesome/svgs/solid/arrow-down-wide-short.svg deleted file mode 100644 index 7875c4c..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-wide-short.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down-z-a.svg b/resources/fontawesome/svgs/solid/arrow-down-z-a.svg deleted file mode 100644 index 83d7476..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down-z-a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-down.svg b/resources/fontawesome/svgs/solid/arrow-down.svg deleted file mode 100644 index 81fd6cc..0000000 --- a/resources/fontawesome/svgs/solid/arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-left-long.svg b/resources/fontawesome/svgs/solid/arrow-left-long.svg deleted file mode 100644 index 31e1f01..0000000 --- a/resources/fontawesome/svgs/solid/arrow-left-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-left.svg b/resources/fontawesome/svgs/solid/arrow-left.svg deleted file mode 100644 index 9dddb48..0000000 --- a/resources/fontawesome/svgs/solid/arrow-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-pointer.svg b/resources/fontawesome/svgs/solid/arrow-pointer.svg deleted file mode 100644 index fdd1e99..0000000 --- a/resources/fontawesome/svgs/solid/arrow-pointer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right-arrow-left.svg b/resources/fontawesome/svgs/solid/arrow-right-arrow-left.svg deleted file mode 100644 index 2ba2c44..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right-arrow-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right-from-bracket.svg b/resources/fontawesome/svgs/solid/arrow-right-from-bracket.svg deleted file mode 100644 index 23f9327..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right-from-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right-long.svg b/resources/fontawesome/svgs/solid/arrow-right-long.svg deleted file mode 100644 index 8a05671..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right-to-bracket.svg b/resources/fontawesome/svgs/solid/arrow-right-to-bracket.svg deleted file mode 100644 index c0fd565..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right-to-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right-to-city.svg b/resources/fontawesome/svgs/solid/arrow-right-to-city.svg deleted file mode 100644 index f3e7b84..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right-to-city.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-right.svg b/resources/fontawesome/svgs/solid/arrow-right.svg deleted file mode 100644 index d6e0975..0000000 --- a/resources/fontawesome/svgs/solid/arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-rotate-left.svg b/resources/fontawesome/svgs/solid/arrow-rotate-left.svg deleted file mode 100644 index 97b5331..0000000 --- a/resources/fontawesome/svgs/solid/arrow-rotate-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-rotate-right.svg b/resources/fontawesome/svgs/solid/arrow-rotate-right.svg deleted file mode 100644 index f5bc7f8..0000000 --- a/resources/fontawesome/svgs/solid/arrow-rotate-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-trend-down.svg b/resources/fontawesome/svgs/solid/arrow-trend-down.svg deleted file mode 100644 index 3c7e6d9..0000000 --- a/resources/fontawesome/svgs/solid/arrow-trend-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-trend-up.svg b/resources/fontawesome/svgs/solid/arrow-trend-up.svg deleted file mode 100644 index 3c643f5..0000000 --- a/resources/fontawesome/svgs/solid/arrow-trend-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-turn-down.svg b/resources/fontawesome/svgs/solid/arrow-turn-down.svg deleted file mode 100644 index c9fedbe..0000000 --- a/resources/fontawesome/svgs/solid/arrow-turn-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-turn-up.svg b/resources/fontawesome/svgs/solid/arrow-turn-up.svg deleted file mode 100644 index 544352f..0000000 --- a/resources/fontawesome/svgs/solid/arrow-turn-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-1-9.svg b/resources/fontawesome/svgs/solid/arrow-up-1-9.svg deleted file mode 100644 index 20501a6..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-1-9.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-9-1.svg b/resources/fontawesome/svgs/solid/arrow-up-9-1.svg deleted file mode 100644 index 2f02ec2..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-9-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-a-z.svg b/resources/fontawesome/svgs/solid/arrow-up-a-z.svg deleted file mode 100644 index 47dfcbb..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-a-z.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-from-bracket.svg b/resources/fontawesome/svgs/solid/arrow-up-from-bracket.svg deleted file mode 100644 index ee5ff20..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-from-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-from-ground-water.svg b/resources/fontawesome/svgs/solid/arrow-up-from-ground-water.svg deleted file mode 100644 index 7cc3ed5..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-from-ground-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-from-water-pump.svg b/resources/fontawesome/svgs/solid/arrow-up-from-water-pump.svg deleted file mode 100644 index ce4adfc..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-from-water-pump.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-long.svg b/resources/fontawesome/svgs/solid/arrow-up-long.svg deleted file mode 100644 index 54c6f5c..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-right-dots.svg b/resources/fontawesome/svgs/solid/arrow-up-right-dots.svg deleted file mode 100644 index 9c9f1ed..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-right-dots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-right-from-square.svg b/resources/fontawesome/svgs/solid/arrow-up-right-from-square.svg deleted file mode 100644 index 4a49f42..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-right-from-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-short-wide.svg b/resources/fontawesome/svgs/solid/arrow-up-short-wide.svg deleted file mode 100644 index 574159f..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-short-wide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-wide-short.svg b/resources/fontawesome/svgs/solid/arrow-up-wide-short.svg deleted file mode 100644 index 72b40fa..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-wide-short.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up-z-a.svg b/resources/fontawesome/svgs/solid/arrow-up-z-a.svg deleted file mode 100644 index 0b3e71c..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up-z-a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrow-up.svg b/resources/fontawesome/svgs/solid/arrow-up.svg deleted file mode 100644 index 4125fea..0000000 --- a/resources/fontawesome/svgs/solid/arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-down-to-line.svg b/resources/fontawesome/svgs/solid/arrows-down-to-line.svg deleted file mode 100644 index 6c69dba..0000000 --- a/resources/fontawesome/svgs/solid/arrows-down-to-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-down-to-people.svg b/resources/fontawesome/svgs/solid/arrows-down-to-people.svg deleted file mode 100644 index 21efa70..0000000 --- a/resources/fontawesome/svgs/solid/arrows-down-to-people.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-left-right-to-line.svg b/resources/fontawesome/svgs/solid/arrows-left-right-to-line.svg deleted file mode 100644 index a53e6d6..0000000 --- a/resources/fontawesome/svgs/solid/arrows-left-right-to-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-left-right.svg b/resources/fontawesome/svgs/solid/arrows-left-right.svg deleted file mode 100644 index dbf717b..0000000 --- a/resources/fontawesome/svgs/solid/arrows-left-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-rotate.svg b/resources/fontawesome/svgs/solid/arrows-rotate.svg deleted file mode 100644 index dcd0fc8..0000000 --- a/resources/fontawesome/svgs/solid/arrows-rotate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-spin.svg b/resources/fontawesome/svgs/solid/arrows-spin.svg deleted file mode 100644 index 8d9aadb..0000000 --- a/resources/fontawesome/svgs/solid/arrows-spin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-split-up-and-left.svg b/resources/fontawesome/svgs/solid/arrows-split-up-and-left.svg deleted file mode 100644 index 3cabc8f..0000000 --- a/resources/fontawesome/svgs/solid/arrows-split-up-and-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-to-circle.svg b/resources/fontawesome/svgs/solid/arrows-to-circle.svg deleted file mode 100644 index a554f7a..0000000 --- a/resources/fontawesome/svgs/solid/arrows-to-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-to-dot.svg b/resources/fontawesome/svgs/solid/arrows-to-dot.svg deleted file mode 100644 index efd4b88..0000000 --- a/resources/fontawesome/svgs/solid/arrows-to-dot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-to-eye.svg b/resources/fontawesome/svgs/solid/arrows-to-eye.svg deleted file mode 100644 index da22673..0000000 --- a/resources/fontawesome/svgs/solid/arrows-to-eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-turn-right.svg b/resources/fontawesome/svgs/solid/arrows-turn-right.svg deleted file mode 100644 index d9a5994..0000000 --- a/resources/fontawesome/svgs/solid/arrows-turn-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-turn-to-dots.svg b/resources/fontawesome/svgs/solid/arrows-turn-to-dots.svg deleted file mode 100644 index 7abc24c..0000000 --- a/resources/fontawesome/svgs/solid/arrows-turn-to-dots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-up-down-left-right.svg b/resources/fontawesome/svgs/solid/arrows-up-down-left-right.svg deleted file mode 100644 index a530463..0000000 --- a/resources/fontawesome/svgs/solid/arrows-up-down-left-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-up-down.svg b/resources/fontawesome/svgs/solid/arrows-up-down.svg deleted file mode 100644 index 514ca71..0000000 --- a/resources/fontawesome/svgs/solid/arrows-up-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/arrows-up-to-line.svg b/resources/fontawesome/svgs/solid/arrows-up-to-line.svg deleted file mode 100644 index d71ec8d..0000000 --- a/resources/fontawesome/svgs/solid/arrows-up-to-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/asterisk.svg b/resources/fontawesome/svgs/solid/asterisk.svg deleted file mode 100644 index 267b302..0000000 --- a/resources/fontawesome/svgs/solid/asterisk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/at.svg b/resources/fontawesome/svgs/solid/at.svg deleted file mode 100644 index 4cf64f7..0000000 --- a/resources/fontawesome/svgs/solid/at.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/atom.svg b/resources/fontawesome/svgs/solid/atom.svg deleted file mode 100644 index e9b2c24..0000000 --- a/resources/fontawesome/svgs/solid/atom.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/audio-description.svg b/resources/fontawesome/svgs/solid/audio-description.svg deleted file mode 100644 index 9eaf5ac..0000000 --- a/resources/fontawesome/svgs/solid/audio-description.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/austral-sign.svg b/resources/fontawesome/svgs/solid/austral-sign.svg deleted file mode 100644 index a9e232f..0000000 --- a/resources/fontawesome/svgs/solid/austral-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/award.svg b/resources/fontawesome/svgs/solid/award.svg deleted file mode 100644 index c1df65b..0000000 --- a/resources/fontawesome/svgs/solid/award.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/b.svg b/resources/fontawesome/svgs/solid/b.svg deleted file mode 100644 index 518aae9..0000000 --- a/resources/fontawesome/svgs/solid/b.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/baby-carriage.svg b/resources/fontawesome/svgs/solid/baby-carriage.svg deleted file mode 100644 index 4594502..0000000 --- a/resources/fontawesome/svgs/solid/baby-carriage.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/baby.svg b/resources/fontawesome/svgs/solid/baby.svg deleted file mode 100644 index a935f81..0000000 --- a/resources/fontawesome/svgs/solid/baby.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/backward-fast.svg b/resources/fontawesome/svgs/solid/backward-fast.svg deleted file mode 100644 index f3bcca6..0000000 --- a/resources/fontawesome/svgs/solid/backward-fast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/backward-step.svg b/resources/fontawesome/svgs/solid/backward-step.svg deleted file mode 100644 index 81c4a2e..0000000 --- a/resources/fontawesome/svgs/solid/backward-step.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/backward.svg b/resources/fontawesome/svgs/solid/backward.svg deleted file mode 100644 index 66456c6..0000000 --- a/resources/fontawesome/svgs/solid/backward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bacon.svg b/resources/fontawesome/svgs/solid/bacon.svg deleted file mode 100644 index 4679af9..0000000 --- a/resources/fontawesome/svgs/solid/bacon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bacteria.svg b/resources/fontawesome/svgs/solid/bacteria.svg deleted file mode 100644 index 56dc80a..0000000 --- a/resources/fontawesome/svgs/solid/bacteria.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bacterium.svg b/resources/fontawesome/svgs/solid/bacterium.svg deleted file mode 100644 index 1b455c1..0000000 --- a/resources/fontawesome/svgs/solid/bacterium.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bag-shopping.svg b/resources/fontawesome/svgs/solid/bag-shopping.svg deleted file mode 100644 index 118405b..0000000 --- a/resources/fontawesome/svgs/solid/bag-shopping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bahai.svg b/resources/fontawesome/svgs/solid/bahai.svg deleted file mode 100644 index 2b46e03..0000000 --- a/resources/fontawesome/svgs/solid/bahai.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/baht-sign.svg b/resources/fontawesome/svgs/solid/baht-sign.svg deleted file mode 100644 index 85acade..0000000 --- a/resources/fontawesome/svgs/solid/baht-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ban-smoking.svg b/resources/fontawesome/svgs/solid/ban-smoking.svg deleted file mode 100644 index c6547bc..0000000 --- a/resources/fontawesome/svgs/solid/ban-smoking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ban.svg b/resources/fontawesome/svgs/solid/ban.svg deleted file mode 100644 index fd6d141..0000000 --- a/resources/fontawesome/svgs/solid/ban.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bandage.svg b/resources/fontawesome/svgs/solid/bandage.svg deleted file mode 100644 index 5d05a7c..0000000 --- a/resources/fontawesome/svgs/solid/bandage.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bangladeshi-taka-sign.svg b/resources/fontawesome/svgs/solid/bangladeshi-taka-sign.svg deleted file mode 100644 index dd2154c..0000000 --- a/resources/fontawesome/svgs/solid/bangladeshi-taka-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/barcode.svg b/resources/fontawesome/svgs/solid/barcode.svg deleted file mode 100644 index 440887d..0000000 --- a/resources/fontawesome/svgs/solid/barcode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bars-progress.svg b/resources/fontawesome/svgs/solid/bars-progress.svg deleted file mode 100644 index 85c8caf..0000000 --- a/resources/fontawesome/svgs/solid/bars-progress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bars-staggered.svg b/resources/fontawesome/svgs/solid/bars-staggered.svg deleted file mode 100644 index 799fd02..0000000 --- a/resources/fontawesome/svgs/solid/bars-staggered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bars.svg b/resources/fontawesome/svgs/solid/bars.svg deleted file mode 100644 index ccf9e4a..0000000 --- a/resources/fontawesome/svgs/solid/bars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/baseball-bat-ball.svg b/resources/fontawesome/svgs/solid/baseball-bat-ball.svg deleted file mode 100644 index f5b9bf6..0000000 --- a/resources/fontawesome/svgs/solid/baseball-bat-ball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/baseball.svg b/resources/fontawesome/svgs/solid/baseball.svg deleted file mode 100644 index a5fec87..0000000 --- a/resources/fontawesome/svgs/solid/baseball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/basket-shopping.svg b/resources/fontawesome/svgs/solid/basket-shopping.svg deleted file mode 100644 index 454fd89..0000000 --- a/resources/fontawesome/svgs/solid/basket-shopping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/basketball.svg b/resources/fontawesome/svgs/solid/basketball.svg deleted file mode 100644 index fa9d07f..0000000 --- a/resources/fontawesome/svgs/solid/basketball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bath.svg b/resources/fontawesome/svgs/solid/bath.svg deleted file mode 100644 index d78a3ce..0000000 --- a/resources/fontawesome/svgs/solid/bath.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/battery-empty.svg b/resources/fontawesome/svgs/solid/battery-empty.svg deleted file mode 100644 index 7df37e7..0000000 --- a/resources/fontawesome/svgs/solid/battery-empty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/battery-full.svg b/resources/fontawesome/svgs/solid/battery-full.svg deleted file mode 100644 index df66a50..0000000 --- a/resources/fontawesome/svgs/solid/battery-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/battery-half.svg b/resources/fontawesome/svgs/solid/battery-half.svg deleted file mode 100644 index 2f77458..0000000 --- a/resources/fontawesome/svgs/solid/battery-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/battery-quarter.svg b/resources/fontawesome/svgs/solid/battery-quarter.svg deleted file mode 100644 index 2bcbba1..0000000 --- a/resources/fontawesome/svgs/solid/battery-quarter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/battery-three-quarters.svg b/resources/fontawesome/svgs/solid/battery-three-quarters.svg deleted file mode 100644 index a9d9b23..0000000 --- a/resources/fontawesome/svgs/solid/battery-three-quarters.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bed-pulse.svg b/resources/fontawesome/svgs/solid/bed-pulse.svg deleted file mode 100644 index 2b64393..0000000 --- a/resources/fontawesome/svgs/solid/bed-pulse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bed.svg b/resources/fontawesome/svgs/solid/bed.svg deleted file mode 100644 index 645a2f0..0000000 --- a/resources/fontawesome/svgs/solid/bed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/beer-mug-empty.svg b/resources/fontawesome/svgs/solid/beer-mug-empty.svg deleted file mode 100644 index a24c5b1..0000000 --- a/resources/fontawesome/svgs/solid/beer-mug-empty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bell-concierge.svg b/resources/fontawesome/svgs/solid/bell-concierge.svg deleted file mode 100644 index 162d177..0000000 --- a/resources/fontawesome/svgs/solid/bell-concierge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bell-slash.svg b/resources/fontawesome/svgs/solid/bell-slash.svg deleted file mode 100644 index 5476192..0000000 --- a/resources/fontawesome/svgs/solid/bell-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bell.svg b/resources/fontawesome/svgs/solid/bell.svg deleted file mode 100644 index 7828807..0000000 --- a/resources/fontawesome/svgs/solid/bell.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bezier-curve.svg b/resources/fontawesome/svgs/solid/bezier-curve.svg deleted file mode 100644 index 7da206c..0000000 --- a/resources/fontawesome/svgs/solid/bezier-curve.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bicycle.svg b/resources/fontawesome/svgs/solid/bicycle.svg deleted file mode 100644 index 51cad16..0000000 --- a/resources/fontawesome/svgs/solid/bicycle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/binoculars.svg b/resources/fontawesome/svgs/solid/binoculars.svg deleted file mode 100644 index f9c201c..0000000 --- a/resources/fontawesome/svgs/solid/binoculars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/biohazard.svg b/resources/fontawesome/svgs/solid/biohazard.svg deleted file mode 100644 index 6d4ec68..0000000 --- a/resources/fontawesome/svgs/solid/biohazard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bitcoin-sign.svg b/resources/fontawesome/svgs/solid/bitcoin-sign.svg deleted file mode 100644 index 204fdc8..0000000 --- a/resources/fontawesome/svgs/solid/bitcoin-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/blender-phone.svg b/resources/fontawesome/svgs/solid/blender-phone.svg deleted file mode 100644 index 46cba63..0000000 --- a/resources/fontawesome/svgs/solid/blender-phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/blender.svg b/resources/fontawesome/svgs/solid/blender.svg deleted file mode 100644 index f3e3d53..0000000 --- a/resources/fontawesome/svgs/solid/blender.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/blog.svg b/resources/fontawesome/svgs/solid/blog.svg deleted file mode 100644 index fe3911b..0000000 --- a/resources/fontawesome/svgs/solid/blog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bold.svg b/resources/fontawesome/svgs/solid/bold.svg deleted file mode 100644 index 9fd4864..0000000 --- a/resources/fontawesome/svgs/solid/bold.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bolt-lightning.svg b/resources/fontawesome/svgs/solid/bolt-lightning.svg deleted file mode 100644 index 1885f4b..0000000 --- a/resources/fontawesome/svgs/solid/bolt-lightning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bolt.svg b/resources/fontawesome/svgs/solid/bolt.svg deleted file mode 100644 index a181689..0000000 --- a/resources/fontawesome/svgs/solid/bolt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bomb.svg b/resources/fontawesome/svgs/solid/bomb.svg deleted file mode 100644 index 267d085..0000000 --- a/resources/fontawesome/svgs/solid/bomb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bone.svg b/resources/fontawesome/svgs/solid/bone.svg deleted file mode 100644 index 0255e62..0000000 --- a/resources/fontawesome/svgs/solid/bone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bong.svg b/resources/fontawesome/svgs/solid/bong.svg deleted file mode 100644 index 3eb880f..0000000 --- a/resources/fontawesome/svgs/solid/bong.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-atlas.svg b/resources/fontawesome/svgs/solid/book-atlas.svg deleted file mode 100644 index 3f1bf07..0000000 --- a/resources/fontawesome/svgs/solid/book-atlas.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-bible.svg b/resources/fontawesome/svgs/solid/book-bible.svg deleted file mode 100644 index 403b91a..0000000 --- a/resources/fontawesome/svgs/solid/book-bible.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-bookmark.svg b/resources/fontawesome/svgs/solid/book-bookmark.svg deleted file mode 100644 index fe45a98..0000000 --- a/resources/fontawesome/svgs/solid/book-bookmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-journal-whills.svg b/resources/fontawesome/svgs/solid/book-journal-whills.svg deleted file mode 100644 index 006fbfa..0000000 --- a/resources/fontawesome/svgs/solid/book-journal-whills.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-medical.svg b/resources/fontawesome/svgs/solid/book-medical.svg deleted file mode 100644 index add8303..0000000 --- a/resources/fontawesome/svgs/solid/book-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-open-reader.svg b/resources/fontawesome/svgs/solid/book-open-reader.svg deleted file mode 100644 index 2825788..0000000 --- a/resources/fontawesome/svgs/solid/book-open-reader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-open.svg b/resources/fontawesome/svgs/solid/book-open.svg deleted file mode 100644 index 55aadbd..0000000 --- a/resources/fontawesome/svgs/solid/book-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-quran.svg b/resources/fontawesome/svgs/solid/book-quran.svg deleted file mode 100644 index 2cf43c2..0000000 --- a/resources/fontawesome/svgs/solid/book-quran.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-skull.svg b/resources/fontawesome/svgs/solid/book-skull.svg deleted file mode 100644 index 5572684..0000000 --- a/resources/fontawesome/svgs/solid/book-skull.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book-tanakh.svg b/resources/fontawesome/svgs/solid/book-tanakh.svg deleted file mode 100644 index 47d17d2..0000000 --- a/resources/fontawesome/svgs/solid/book-tanakh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/book.svg b/resources/fontawesome/svgs/solid/book.svg deleted file mode 100644 index a5a222e..0000000 --- a/resources/fontawesome/svgs/solid/book.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bookmark.svg b/resources/fontawesome/svgs/solid/bookmark.svg deleted file mode 100644 index f106d8d..0000000 --- a/resources/fontawesome/svgs/solid/bookmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/border-all.svg b/resources/fontawesome/svgs/solid/border-all.svg deleted file mode 100644 index 7a71edb..0000000 --- a/resources/fontawesome/svgs/solid/border-all.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/border-none.svg b/resources/fontawesome/svgs/solid/border-none.svg deleted file mode 100644 index 4319049..0000000 --- a/resources/fontawesome/svgs/solid/border-none.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/border-top-left.svg b/resources/fontawesome/svgs/solid/border-top-left.svg deleted file mode 100644 index 2eab0be..0000000 --- a/resources/fontawesome/svgs/solid/border-top-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bore-hole.svg b/resources/fontawesome/svgs/solid/bore-hole.svg deleted file mode 100644 index 4ebf2d8..0000000 --- a/resources/fontawesome/svgs/solid/bore-hole.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bottle-droplet.svg b/resources/fontawesome/svgs/solid/bottle-droplet.svg deleted file mode 100644 index a467115..0000000 --- a/resources/fontawesome/svgs/solid/bottle-droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bottle-water.svg b/resources/fontawesome/svgs/solid/bottle-water.svg deleted file mode 100644 index 580a9cc..0000000 --- a/resources/fontawesome/svgs/solid/bottle-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bowl-food.svg b/resources/fontawesome/svgs/solid/bowl-food.svg deleted file mode 100644 index efcf290..0000000 --- a/resources/fontawesome/svgs/solid/bowl-food.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bowl-rice.svg b/resources/fontawesome/svgs/solid/bowl-rice.svg deleted file mode 100644 index 6095625..0000000 --- a/resources/fontawesome/svgs/solid/bowl-rice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bowling-ball.svg b/resources/fontawesome/svgs/solid/bowling-ball.svg deleted file mode 100644 index 2015425..0000000 --- a/resources/fontawesome/svgs/solid/bowling-ball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/box-archive.svg b/resources/fontawesome/svgs/solid/box-archive.svg deleted file mode 100644 index e2493e3..0000000 --- a/resources/fontawesome/svgs/solid/box-archive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/box-open.svg b/resources/fontawesome/svgs/solid/box-open.svg deleted file mode 100644 index bc6b187..0000000 --- a/resources/fontawesome/svgs/solid/box-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/box-tissue.svg b/resources/fontawesome/svgs/solid/box-tissue.svg deleted file mode 100644 index 0e3c11f..0000000 --- a/resources/fontawesome/svgs/solid/box-tissue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/box.svg b/resources/fontawesome/svgs/solid/box.svg deleted file mode 100644 index ca0bdf4..0000000 --- a/resources/fontawesome/svgs/solid/box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/boxes-packing.svg b/resources/fontawesome/svgs/solid/boxes-packing.svg deleted file mode 100644 index d4fdd1c..0000000 --- a/resources/fontawesome/svgs/solid/boxes-packing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/boxes-stacked.svg b/resources/fontawesome/svgs/solid/boxes-stacked.svg deleted file mode 100644 index cfb9aa1..0000000 --- a/resources/fontawesome/svgs/solid/boxes-stacked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/braille.svg b/resources/fontawesome/svgs/solid/braille.svg deleted file mode 100644 index d0f76bd..0000000 --- a/resources/fontawesome/svgs/solid/braille.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/brain.svg b/resources/fontawesome/svgs/solid/brain.svg deleted file mode 100644 index 2524c9b..0000000 --- a/resources/fontawesome/svgs/solid/brain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/brazilian-real-sign.svg b/resources/fontawesome/svgs/solid/brazilian-real-sign.svg deleted file mode 100644 index c877430..0000000 --- a/resources/fontawesome/svgs/solid/brazilian-real-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bread-slice.svg b/resources/fontawesome/svgs/solid/bread-slice.svg deleted file mode 100644 index 895139e..0000000 --- a/resources/fontawesome/svgs/solid/bread-slice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge-circle-check.svg b/resources/fontawesome/svgs/solid/bridge-circle-check.svg deleted file mode 100644 index da710ae..0000000 --- a/resources/fontawesome/svgs/solid/bridge-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge-circle-exclamation.svg b/resources/fontawesome/svgs/solid/bridge-circle-exclamation.svg deleted file mode 100644 index 5a0cd11..0000000 --- a/resources/fontawesome/svgs/solid/bridge-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge-circle-xmark.svg b/resources/fontawesome/svgs/solid/bridge-circle-xmark.svg deleted file mode 100644 index 314ef19..0000000 --- a/resources/fontawesome/svgs/solid/bridge-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge-lock.svg b/resources/fontawesome/svgs/solid/bridge-lock.svg deleted file mode 100644 index 422f2ac..0000000 --- a/resources/fontawesome/svgs/solid/bridge-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge-water.svg b/resources/fontawesome/svgs/solid/bridge-water.svg deleted file mode 100644 index 8e5b628..0000000 --- a/resources/fontawesome/svgs/solid/bridge-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bridge.svg b/resources/fontawesome/svgs/solid/bridge.svg deleted file mode 100644 index bfff369..0000000 --- a/resources/fontawesome/svgs/solid/bridge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/briefcase-medical.svg b/resources/fontawesome/svgs/solid/briefcase-medical.svg deleted file mode 100644 index 65c0b93..0000000 --- a/resources/fontawesome/svgs/solid/briefcase-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/briefcase.svg b/resources/fontawesome/svgs/solid/briefcase.svg deleted file mode 100644 index 3b263cf..0000000 --- a/resources/fontawesome/svgs/solid/briefcase.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/broom-ball.svg b/resources/fontawesome/svgs/solid/broom-ball.svg deleted file mode 100644 index dee3238..0000000 --- a/resources/fontawesome/svgs/solid/broom-ball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/broom.svg b/resources/fontawesome/svgs/solid/broom.svg deleted file mode 100644 index b096fad..0000000 --- a/resources/fontawesome/svgs/solid/broom.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/brush.svg b/resources/fontawesome/svgs/solid/brush.svg deleted file mode 100644 index 12b8a37..0000000 --- a/resources/fontawesome/svgs/solid/brush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bucket.svg b/resources/fontawesome/svgs/solid/bucket.svg deleted file mode 100644 index 72376a6..0000000 --- a/resources/fontawesome/svgs/solid/bucket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bug-slash.svg b/resources/fontawesome/svgs/solid/bug-slash.svg deleted file mode 100644 index 187e294..0000000 --- a/resources/fontawesome/svgs/solid/bug-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bug.svg b/resources/fontawesome/svgs/solid/bug.svg deleted file mode 100644 index b6c043a..0000000 --- a/resources/fontawesome/svgs/solid/bug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bugs.svg b/resources/fontawesome/svgs/solid/bugs.svg deleted file mode 100644 index eca8a63..0000000 --- a/resources/fontawesome/svgs/solid/bugs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-circle-arrow-right.svg b/resources/fontawesome/svgs/solid/building-circle-arrow-right.svg deleted file mode 100644 index bc1c7c6..0000000 --- a/resources/fontawesome/svgs/solid/building-circle-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-circle-check.svg b/resources/fontawesome/svgs/solid/building-circle-check.svg deleted file mode 100644 index 08f8a39..0000000 --- a/resources/fontawesome/svgs/solid/building-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-circle-exclamation.svg b/resources/fontawesome/svgs/solid/building-circle-exclamation.svg deleted file mode 100644 index 60c725c..0000000 --- a/resources/fontawesome/svgs/solid/building-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-circle-xmark.svg b/resources/fontawesome/svgs/solid/building-circle-xmark.svg deleted file mode 100644 index 8405a19..0000000 --- a/resources/fontawesome/svgs/solid/building-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-columns.svg b/resources/fontawesome/svgs/solid/building-columns.svg deleted file mode 100644 index 4067b79..0000000 --- a/resources/fontawesome/svgs/solid/building-columns.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-flag.svg b/resources/fontawesome/svgs/solid/building-flag.svg deleted file mode 100644 index ec49eb1..0000000 --- a/resources/fontawesome/svgs/solid/building-flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-lock.svg b/resources/fontawesome/svgs/solid/building-lock.svg deleted file mode 100644 index ee050f7..0000000 --- a/resources/fontawesome/svgs/solid/building-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-ngo.svg b/resources/fontawesome/svgs/solid/building-ngo.svg deleted file mode 100644 index 26cd012..0000000 --- a/resources/fontawesome/svgs/solid/building-ngo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-shield.svg b/resources/fontawesome/svgs/solid/building-shield.svg deleted file mode 100644 index 64e79d5..0000000 --- a/resources/fontawesome/svgs/solid/building-shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-un.svg b/resources/fontawesome/svgs/solid/building-un.svg deleted file mode 100644 index c83001a..0000000 --- a/resources/fontawesome/svgs/solid/building-un.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-user.svg b/resources/fontawesome/svgs/solid/building-user.svg deleted file mode 100644 index 873a345..0000000 --- a/resources/fontawesome/svgs/solid/building-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building-wheat.svg b/resources/fontawesome/svgs/solid/building-wheat.svg deleted file mode 100644 index e8e15d4..0000000 --- a/resources/fontawesome/svgs/solid/building-wheat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/building.svg b/resources/fontawesome/svgs/solid/building.svg deleted file mode 100644 index 10bf3b4..0000000 --- a/resources/fontawesome/svgs/solid/building.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bullhorn.svg b/resources/fontawesome/svgs/solid/bullhorn.svg deleted file mode 100644 index 6cee626..0000000 --- a/resources/fontawesome/svgs/solid/bullhorn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bullseye.svg b/resources/fontawesome/svgs/solid/bullseye.svg deleted file mode 100644 index 784b5af..0000000 --- a/resources/fontawesome/svgs/solid/bullseye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/burger.svg b/resources/fontawesome/svgs/solid/burger.svg deleted file mode 100644 index 2f4d46e..0000000 --- a/resources/fontawesome/svgs/solid/burger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/burst.svg b/resources/fontawesome/svgs/solid/burst.svg deleted file mode 100644 index 5b792fc..0000000 --- a/resources/fontawesome/svgs/solid/burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bus-simple.svg b/resources/fontawesome/svgs/solid/bus-simple.svg deleted file mode 100644 index 99de78e..0000000 --- a/resources/fontawesome/svgs/solid/bus-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/bus.svg b/resources/fontawesome/svgs/solid/bus.svg deleted file mode 100644 index f049d66..0000000 --- a/resources/fontawesome/svgs/solid/bus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/business-time.svg b/resources/fontawesome/svgs/solid/business-time.svg deleted file mode 100644 index a7e8e85..0000000 --- a/resources/fontawesome/svgs/solid/business-time.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/c.svg b/resources/fontawesome/svgs/solid/c.svg deleted file mode 100644 index cb496c4..0000000 --- a/resources/fontawesome/svgs/solid/c.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cable-car.svg b/resources/fontawesome/svgs/solid/cable-car.svg deleted file mode 100644 index 6e475a3..0000000 --- a/resources/fontawesome/svgs/solid/cable-car.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cake-candles.svg b/resources/fontawesome/svgs/solid/cake-candles.svg deleted file mode 100644 index 2767bba..0000000 --- a/resources/fontawesome/svgs/solid/cake-candles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calculator.svg b/resources/fontawesome/svgs/solid/calculator.svg deleted file mode 100644 index 31a094c..0000000 --- a/resources/fontawesome/svgs/solid/calculator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-check.svg b/resources/fontawesome/svgs/solid/calendar-check.svg deleted file mode 100644 index 149309f..0000000 --- a/resources/fontawesome/svgs/solid/calendar-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-day.svg b/resources/fontawesome/svgs/solid/calendar-day.svg deleted file mode 100644 index f97219e..0000000 --- a/resources/fontawesome/svgs/solid/calendar-day.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-days.svg b/resources/fontawesome/svgs/solid/calendar-days.svg deleted file mode 100644 index f70b0d7..0000000 --- a/resources/fontawesome/svgs/solid/calendar-days.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-minus.svg b/resources/fontawesome/svgs/solid/calendar-minus.svg deleted file mode 100644 index d18b470..0000000 --- a/resources/fontawesome/svgs/solid/calendar-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-plus.svg b/resources/fontawesome/svgs/solid/calendar-plus.svg deleted file mode 100644 index 56dfbdf..0000000 --- a/resources/fontawesome/svgs/solid/calendar-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-week.svg b/resources/fontawesome/svgs/solid/calendar-week.svg deleted file mode 100644 index eadf6fa..0000000 --- a/resources/fontawesome/svgs/solid/calendar-week.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar-xmark.svg b/resources/fontawesome/svgs/solid/calendar-xmark.svg deleted file mode 100644 index e455920..0000000 --- a/resources/fontawesome/svgs/solid/calendar-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/calendar.svg b/resources/fontawesome/svgs/solid/calendar.svg deleted file mode 100644 index a8ee9e6..0000000 --- a/resources/fontawesome/svgs/solid/calendar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/camera-retro.svg b/resources/fontawesome/svgs/solid/camera-retro.svg deleted file mode 100644 index 4d90dba..0000000 --- a/resources/fontawesome/svgs/solid/camera-retro.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/camera-rotate.svg b/resources/fontawesome/svgs/solid/camera-rotate.svg deleted file mode 100644 index 0e768f0..0000000 --- a/resources/fontawesome/svgs/solid/camera-rotate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/camera.svg b/resources/fontawesome/svgs/solid/camera.svg deleted file mode 100644 index 00bb6d8..0000000 --- a/resources/fontawesome/svgs/solid/camera.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/campground.svg b/resources/fontawesome/svgs/solid/campground.svg deleted file mode 100644 index 6446817..0000000 --- a/resources/fontawesome/svgs/solid/campground.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/candy-cane.svg b/resources/fontawesome/svgs/solid/candy-cane.svg deleted file mode 100644 index a188e8b..0000000 --- a/resources/fontawesome/svgs/solid/candy-cane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cannabis.svg b/resources/fontawesome/svgs/solid/cannabis.svg deleted file mode 100644 index 782eeca..0000000 --- a/resources/fontawesome/svgs/solid/cannabis.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/capsules.svg b/resources/fontawesome/svgs/solid/capsules.svg deleted file mode 100644 index 05c539f..0000000 --- a/resources/fontawesome/svgs/solid/capsules.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-battery.svg b/resources/fontawesome/svgs/solid/car-battery.svg deleted file mode 100644 index ecffa9b..0000000 --- a/resources/fontawesome/svgs/solid/car-battery.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-burst.svg b/resources/fontawesome/svgs/solid/car-burst.svg deleted file mode 100644 index f2fae69..0000000 --- a/resources/fontawesome/svgs/solid/car-burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-on.svg b/resources/fontawesome/svgs/solid/car-on.svg deleted file mode 100644 index c9765d4..0000000 --- a/resources/fontawesome/svgs/solid/car-on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-rear.svg b/resources/fontawesome/svgs/solid/car-rear.svg deleted file mode 100644 index 10dd630..0000000 --- a/resources/fontawesome/svgs/solid/car-rear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-side.svg b/resources/fontawesome/svgs/solid/car-side.svg deleted file mode 100644 index 4ffee86..0000000 --- a/resources/fontawesome/svgs/solid/car-side.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car-tunnel.svg b/resources/fontawesome/svgs/solid/car-tunnel.svg deleted file mode 100644 index 9ff4d8b..0000000 --- a/resources/fontawesome/svgs/solid/car-tunnel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/car.svg b/resources/fontawesome/svgs/solid/car.svg deleted file mode 100644 index 5483275..0000000 --- a/resources/fontawesome/svgs/solid/car.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/caravan.svg b/resources/fontawesome/svgs/solid/caravan.svg deleted file mode 100644 index 528680c..0000000 --- a/resources/fontawesome/svgs/solid/caravan.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/caret-down.svg b/resources/fontawesome/svgs/solid/caret-down.svg deleted file mode 100644 index f2afcc9..0000000 --- a/resources/fontawesome/svgs/solid/caret-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/caret-left.svg b/resources/fontawesome/svgs/solid/caret-left.svg deleted file mode 100644 index b556ef8..0000000 --- a/resources/fontawesome/svgs/solid/caret-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/caret-right.svg b/resources/fontawesome/svgs/solid/caret-right.svg deleted file mode 100644 index 433eb23..0000000 --- a/resources/fontawesome/svgs/solid/caret-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/caret-up.svg b/resources/fontawesome/svgs/solid/caret-up.svg deleted file mode 100644 index 0f6f844..0000000 --- a/resources/fontawesome/svgs/solid/caret-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/carrot.svg b/resources/fontawesome/svgs/solid/carrot.svg deleted file mode 100644 index 3c8c35a..0000000 --- a/resources/fontawesome/svgs/solid/carrot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cart-arrow-down.svg b/resources/fontawesome/svgs/solid/cart-arrow-down.svg deleted file mode 100644 index ee7b5f3..0000000 --- a/resources/fontawesome/svgs/solid/cart-arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cart-flatbed-suitcase.svg b/resources/fontawesome/svgs/solid/cart-flatbed-suitcase.svg deleted file mode 100644 index 158f6f6..0000000 --- a/resources/fontawesome/svgs/solid/cart-flatbed-suitcase.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cart-flatbed.svg b/resources/fontawesome/svgs/solid/cart-flatbed.svg deleted file mode 100644 index 53e363a..0000000 --- a/resources/fontawesome/svgs/solid/cart-flatbed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cart-plus.svg b/resources/fontawesome/svgs/solid/cart-plus.svg deleted file mode 100644 index a94a446..0000000 --- a/resources/fontawesome/svgs/solid/cart-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cart-shopping.svg b/resources/fontawesome/svgs/solid/cart-shopping.svg deleted file mode 100644 index b4ba1c6..0000000 --- a/resources/fontawesome/svgs/solid/cart-shopping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cash-register.svg b/resources/fontawesome/svgs/solid/cash-register.svg deleted file mode 100644 index 919f0d3..0000000 --- a/resources/fontawesome/svgs/solid/cash-register.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cat.svg b/resources/fontawesome/svgs/solid/cat.svg deleted file mode 100644 index 4f3fac9..0000000 --- a/resources/fontawesome/svgs/solid/cat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cedi-sign.svg b/resources/fontawesome/svgs/solid/cedi-sign.svg deleted file mode 100644 index 73edfa3..0000000 --- a/resources/fontawesome/svgs/solid/cedi-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cent-sign.svg b/resources/fontawesome/svgs/solid/cent-sign.svg deleted file mode 100644 index 23b8f6a..0000000 --- a/resources/fontawesome/svgs/solid/cent-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/certificate.svg b/resources/fontawesome/svgs/solid/certificate.svg deleted file mode 100644 index ac17bcf..0000000 --- a/resources/fontawesome/svgs/solid/certificate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chair.svg b/resources/fontawesome/svgs/solid/chair.svg deleted file mode 100644 index e75c898..0000000 --- a/resources/fontawesome/svgs/solid/chair.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chalkboard-user.svg b/resources/fontawesome/svgs/solid/chalkboard-user.svg deleted file mode 100644 index 9117fc9..0000000 --- a/resources/fontawesome/svgs/solid/chalkboard-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chalkboard.svg b/resources/fontawesome/svgs/solid/chalkboard.svg deleted file mode 100644 index d1d3c31..0000000 --- a/resources/fontawesome/svgs/solid/chalkboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/champagne-glasses.svg b/resources/fontawesome/svgs/solid/champagne-glasses.svg deleted file mode 100644 index 9b34487..0000000 --- a/resources/fontawesome/svgs/solid/champagne-glasses.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/charging-station.svg b/resources/fontawesome/svgs/solid/charging-station.svg deleted file mode 100644 index e2ce31d..0000000 --- a/resources/fontawesome/svgs/solid/charging-station.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-area.svg b/resources/fontawesome/svgs/solid/chart-area.svg deleted file mode 100644 index fc47baa..0000000 --- a/resources/fontawesome/svgs/solid/chart-area.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-bar.svg b/resources/fontawesome/svgs/solid/chart-bar.svg deleted file mode 100644 index 3cd163b..0000000 --- a/resources/fontawesome/svgs/solid/chart-bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-column.svg b/resources/fontawesome/svgs/solid/chart-column.svg deleted file mode 100644 index b181362..0000000 --- a/resources/fontawesome/svgs/solid/chart-column.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-gantt.svg b/resources/fontawesome/svgs/solid/chart-gantt.svg deleted file mode 100644 index d372373..0000000 --- a/resources/fontawesome/svgs/solid/chart-gantt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-line.svg b/resources/fontawesome/svgs/solid/chart-line.svg deleted file mode 100644 index 5b2f126..0000000 --- a/resources/fontawesome/svgs/solid/chart-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-pie.svg b/resources/fontawesome/svgs/solid/chart-pie.svg deleted file mode 100644 index f76d9f4..0000000 --- a/resources/fontawesome/svgs/solid/chart-pie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chart-simple.svg b/resources/fontawesome/svgs/solid/chart-simple.svg deleted file mode 100644 index 8c12309..0000000 --- a/resources/fontawesome/svgs/solid/chart-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/check-double.svg b/resources/fontawesome/svgs/solid/check-double.svg deleted file mode 100644 index ac4a6ba..0000000 --- a/resources/fontawesome/svgs/solid/check-double.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/check-to-slot.svg b/resources/fontawesome/svgs/solid/check-to-slot.svg deleted file mode 100644 index 3cda607..0000000 --- a/resources/fontawesome/svgs/solid/check-to-slot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/check.svg b/resources/fontawesome/svgs/solid/check.svg deleted file mode 100644 index 9c7b794..0000000 --- a/resources/fontawesome/svgs/solid/check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cheese.svg b/resources/fontawesome/svgs/solid/cheese.svg deleted file mode 100644 index 8d48a49..0000000 --- a/resources/fontawesome/svgs/solid/cheese.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-bishop.svg b/resources/fontawesome/svgs/solid/chess-bishop.svg deleted file mode 100644 index e4d022f..0000000 --- a/resources/fontawesome/svgs/solid/chess-bishop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-board.svg b/resources/fontawesome/svgs/solid/chess-board.svg deleted file mode 100644 index bd628c8..0000000 --- a/resources/fontawesome/svgs/solid/chess-board.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-king.svg b/resources/fontawesome/svgs/solid/chess-king.svg deleted file mode 100644 index c0d7bbe..0000000 --- a/resources/fontawesome/svgs/solid/chess-king.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-knight.svg b/resources/fontawesome/svgs/solid/chess-knight.svg deleted file mode 100644 index c1ac5c7..0000000 --- a/resources/fontawesome/svgs/solid/chess-knight.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-pawn.svg b/resources/fontawesome/svgs/solid/chess-pawn.svg deleted file mode 100644 index c4e5883..0000000 --- a/resources/fontawesome/svgs/solid/chess-pawn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-queen.svg b/resources/fontawesome/svgs/solid/chess-queen.svg deleted file mode 100644 index fc28657..0000000 --- a/resources/fontawesome/svgs/solid/chess-queen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess-rook.svg b/resources/fontawesome/svgs/solid/chess-rook.svg deleted file mode 100644 index 04e8b1f..0000000 --- a/resources/fontawesome/svgs/solid/chess-rook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chess.svg b/resources/fontawesome/svgs/solid/chess.svg deleted file mode 100644 index 4136b33..0000000 --- a/resources/fontawesome/svgs/solid/chess.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chevron-down.svg b/resources/fontawesome/svgs/solid/chevron-down.svg deleted file mode 100644 index 546aeb2..0000000 --- a/resources/fontawesome/svgs/solid/chevron-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chevron-left.svg b/resources/fontawesome/svgs/solid/chevron-left.svg deleted file mode 100644 index 4ebc739..0000000 --- a/resources/fontawesome/svgs/solid/chevron-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chevron-right.svg b/resources/fontawesome/svgs/solid/chevron-right.svg deleted file mode 100644 index c4e38bc..0000000 --- a/resources/fontawesome/svgs/solid/chevron-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/chevron-up.svg b/resources/fontawesome/svgs/solid/chevron-up.svg deleted file mode 100644 index c947135..0000000 --- a/resources/fontawesome/svgs/solid/chevron-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/child-combatant.svg b/resources/fontawesome/svgs/solid/child-combatant.svg deleted file mode 100644 index 5fb86a8..0000000 --- a/resources/fontawesome/svgs/solid/child-combatant.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/child-dress.svg b/resources/fontawesome/svgs/solid/child-dress.svg deleted file mode 100644 index c3af7bc..0000000 --- a/resources/fontawesome/svgs/solid/child-dress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/child-reaching.svg b/resources/fontawesome/svgs/solid/child-reaching.svg deleted file mode 100644 index c7e2561..0000000 --- a/resources/fontawesome/svgs/solid/child-reaching.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/child.svg b/resources/fontawesome/svgs/solid/child.svg deleted file mode 100644 index fcc266a..0000000 --- a/resources/fontawesome/svgs/solid/child.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/children.svg b/resources/fontawesome/svgs/solid/children.svg deleted file mode 100644 index 56234b1..0000000 --- a/resources/fontawesome/svgs/solid/children.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/church.svg b/resources/fontawesome/svgs/solid/church.svg deleted file mode 100644 index 11381be..0000000 --- a/resources/fontawesome/svgs/solid/church.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-arrow-down.svg b/resources/fontawesome/svgs/solid/circle-arrow-down.svg deleted file mode 100644 index e7a1d8c..0000000 --- a/resources/fontawesome/svgs/solid/circle-arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-arrow-left.svg b/resources/fontawesome/svgs/solid/circle-arrow-left.svg deleted file mode 100644 index 00e3504..0000000 --- a/resources/fontawesome/svgs/solid/circle-arrow-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-arrow-right.svg b/resources/fontawesome/svgs/solid/circle-arrow-right.svg deleted file mode 100644 index 9bc7453..0000000 --- a/resources/fontawesome/svgs/solid/circle-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-arrow-up.svg b/resources/fontawesome/svgs/solid/circle-arrow-up.svg deleted file mode 100644 index 01d561d..0000000 --- a/resources/fontawesome/svgs/solid/circle-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-check.svg b/resources/fontawesome/svgs/solid/circle-check.svg deleted file mode 100644 index 9bba998..0000000 --- a/resources/fontawesome/svgs/solid/circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-chevron-down.svg b/resources/fontawesome/svgs/solid/circle-chevron-down.svg deleted file mode 100644 index 0739c74..0000000 --- a/resources/fontawesome/svgs/solid/circle-chevron-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-chevron-left.svg b/resources/fontawesome/svgs/solid/circle-chevron-left.svg deleted file mode 100644 index 665cc19..0000000 --- a/resources/fontawesome/svgs/solid/circle-chevron-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-chevron-right.svg b/resources/fontawesome/svgs/solid/circle-chevron-right.svg deleted file mode 100644 index 75a5b3f..0000000 --- a/resources/fontawesome/svgs/solid/circle-chevron-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-chevron-up.svg b/resources/fontawesome/svgs/solid/circle-chevron-up.svg deleted file mode 100644 index dbbd53a..0000000 --- a/resources/fontawesome/svgs/solid/circle-chevron-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-dollar-to-slot.svg b/resources/fontawesome/svgs/solid/circle-dollar-to-slot.svg deleted file mode 100644 index 540bd01..0000000 --- a/resources/fontawesome/svgs/solid/circle-dollar-to-slot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-dot.svg b/resources/fontawesome/svgs/solid/circle-dot.svg deleted file mode 100644 index d0aab69..0000000 --- a/resources/fontawesome/svgs/solid/circle-dot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-down.svg b/resources/fontawesome/svgs/solid/circle-down.svg deleted file mode 100644 index 84e25ad..0000000 --- a/resources/fontawesome/svgs/solid/circle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-exclamation.svg b/resources/fontawesome/svgs/solid/circle-exclamation.svg deleted file mode 100644 index 30dab4f..0000000 --- a/resources/fontawesome/svgs/solid/circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-h.svg b/resources/fontawesome/svgs/solid/circle-h.svg deleted file mode 100644 index e3900b0..0000000 --- a/resources/fontawesome/svgs/solid/circle-h.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-half-stroke.svg b/resources/fontawesome/svgs/solid/circle-half-stroke.svg deleted file mode 100644 index 42d5fc4..0000000 --- a/resources/fontawesome/svgs/solid/circle-half-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-info.svg b/resources/fontawesome/svgs/solid/circle-info.svg deleted file mode 100644 index c4803e7..0000000 --- a/resources/fontawesome/svgs/solid/circle-info.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-left.svg b/resources/fontawesome/svgs/solid/circle-left.svg deleted file mode 100644 index 1db1957..0000000 --- a/resources/fontawesome/svgs/solid/circle-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-minus.svg b/resources/fontawesome/svgs/solid/circle-minus.svg deleted file mode 100644 index dcdbc67..0000000 --- a/resources/fontawesome/svgs/solid/circle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-nodes.svg b/resources/fontawesome/svgs/solid/circle-nodes.svg deleted file mode 100644 index ede1099..0000000 --- a/resources/fontawesome/svgs/solid/circle-nodes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-notch.svg b/resources/fontawesome/svgs/solid/circle-notch.svg deleted file mode 100644 index c47194a..0000000 --- a/resources/fontawesome/svgs/solid/circle-notch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-pause.svg b/resources/fontawesome/svgs/solid/circle-pause.svg deleted file mode 100644 index 9e6d49c..0000000 --- a/resources/fontawesome/svgs/solid/circle-pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-play.svg b/resources/fontawesome/svgs/solid/circle-play.svg deleted file mode 100644 index 1db5c8f..0000000 --- a/resources/fontawesome/svgs/solid/circle-play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-plus.svg b/resources/fontawesome/svgs/solid/circle-plus.svg deleted file mode 100644 index 50af343..0000000 --- a/resources/fontawesome/svgs/solid/circle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-question.svg b/resources/fontawesome/svgs/solid/circle-question.svg deleted file mode 100644 index c890709..0000000 --- a/resources/fontawesome/svgs/solid/circle-question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-radiation.svg b/resources/fontawesome/svgs/solid/circle-radiation.svg deleted file mode 100644 index e4d0dee..0000000 --- a/resources/fontawesome/svgs/solid/circle-radiation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-right.svg b/resources/fontawesome/svgs/solid/circle-right.svg deleted file mode 100644 index 794985e..0000000 --- a/resources/fontawesome/svgs/solid/circle-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-stop.svg b/resources/fontawesome/svgs/solid/circle-stop.svg deleted file mode 100644 index a7fc66c..0000000 --- a/resources/fontawesome/svgs/solid/circle-stop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-up.svg b/resources/fontawesome/svgs/solid/circle-up.svg deleted file mode 100644 index 201d815..0000000 --- a/resources/fontawesome/svgs/solid/circle-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-user.svg b/resources/fontawesome/svgs/solid/circle-user.svg deleted file mode 100644 index c0a343a..0000000 --- a/resources/fontawesome/svgs/solid/circle-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle-xmark.svg b/resources/fontawesome/svgs/solid/circle-xmark.svg deleted file mode 100644 index 50abf8b..0000000 --- a/resources/fontawesome/svgs/solid/circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/circle.svg b/resources/fontawesome/svgs/solid/circle.svg deleted file mode 100644 index 45ea4c1..0000000 --- a/resources/fontawesome/svgs/solid/circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/city.svg b/resources/fontawesome/svgs/solid/city.svg deleted file mode 100644 index f341ab3..0000000 --- a/resources/fontawesome/svgs/solid/city.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clapperboard.svg b/resources/fontawesome/svgs/solid/clapperboard.svg deleted file mode 100644 index 8472810..0000000 --- a/resources/fontawesome/svgs/solid/clapperboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clipboard-check.svg b/resources/fontawesome/svgs/solid/clipboard-check.svg deleted file mode 100644 index 59efa7a..0000000 --- a/resources/fontawesome/svgs/solid/clipboard-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clipboard-list.svg b/resources/fontawesome/svgs/solid/clipboard-list.svg deleted file mode 100644 index c4fcd10..0000000 --- a/resources/fontawesome/svgs/solid/clipboard-list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clipboard-question.svg b/resources/fontawesome/svgs/solid/clipboard-question.svg deleted file mode 100644 index 1ca5670..0000000 --- a/resources/fontawesome/svgs/solid/clipboard-question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clipboard-user.svg b/resources/fontawesome/svgs/solid/clipboard-user.svg deleted file mode 100644 index 4b36149..0000000 --- a/resources/fontawesome/svgs/solid/clipboard-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clipboard.svg b/resources/fontawesome/svgs/solid/clipboard.svg deleted file mode 100644 index 6157ac2..0000000 --- a/resources/fontawesome/svgs/solid/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clock-rotate-left.svg b/resources/fontawesome/svgs/solid/clock-rotate-left.svg deleted file mode 100644 index 48e59f3..0000000 --- a/resources/fontawesome/svgs/solid/clock-rotate-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clock.svg b/resources/fontawesome/svgs/solid/clock.svg deleted file mode 100644 index f1a39d3..0000000 --- a/resources/fontawesome/svgs/solid/clock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clone.svg b/resources/fontawesome/svgs/solid/clone.svg deleted file mode 100644 index ee03b34..0000000 --- a/resources/fontawesome/svgs/solid/clone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/closed-captioning.svg b/resources/fontawesome/svgs/solid/closed-captioning.svg deleted file mode 100644 index 3be6b3f..0000000 --- a/resources/fontawesome/svgs/solid/closed-captioning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-arrow-down.svg b/resources/fontawesome/svgs/solid/cloud-arrow-down.svg deleted file mode 100644 index a25413f..0000000 --- a/resources/fontawesome/svgs/solid/cloud-arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-arrow-up.svg b/resources/fontawesome/svgs/solid/cloud-arrow-up.svg deleted file mode 100644 index 61dfc37..0000000 --- a/resources/fontawesome/svgs/solid/cloud-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-bolt.svg b/resources/fontawesome/svgs/solid/cloud-bolt.svg deleted file mode 100644 index 97df3fe..0000000 --- a/resources/fontawesome/svgs/solid/cloud-bolt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-meatball.svg b/resources/fontawesome/svgs/solid/cloud-meatball.svg deleted file mode 100644 index 64a6b91..0000000 --- a/resources/fontawesome/svgs/solid/cloud-meatball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-moon-rain.svg b/resources/fontawesome/svgs/solid/cloud-moon-rain.svg deleted file mode 100644 index 71cb717..0000000 --- a/resources/fontawesome/svgs/solid/cloud-moon-rain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-moon.svg b/resources/fontawesome/svgs/solid/cloud-moon.svg deleted file mode 100644 index 09a7799..0000000 --- a/resources/fontawesome/svgs/solid/cloud-moon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-rain.svg b/resources/fontawesome/svgs/solid/cloud-rain.svg deleted file mode 100644 index 149ce05..0000000 --- a/resources/fontawesome/svgs/solid/cloud-rain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-showers-heavy.svg b/resources/fontawesome/svgs/solid/cloud-showers-heavy.svg deleted file mode 100644 index 2afc753..0000000 --- a/resources/fontawesome/svgs/solid/cloud-showers-heavy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-showers-water.svg b/resources/fontawesome/svgs/solid/cloud-showers-water.svg deleted file mode 100644 index dc53f26..0000000 --- a/resources/fontawesome/svgs/solid/cloud-showers-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-sun-rain.svg b/resources/fontawesome/svgs/solid/cloud-sun-rain.svg deleted file mode 100644 index 35ae3b0..0000000 --- a/resources/fontawesome/svgs/solid/cloud-sun-rain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud-sun.svg b/resources/fontawesome/svgs/solid/cloud-sun.svg deleted file mode 100644 index 673ebcd..0000000 --- a/resources/fontawesome/svgs/solid/cloud-sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cloud.svg b/resources/fontawesome/svgs/solid/cloud.svg deleted file mode 100644 index 4150c79..0000000 --- a/resources/fontawesome/svgs/solid/cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/clover.svg b/resources/fontawesome/svgs/solid/clover.svg deleted file mode 100644 index 968452f..0000000 --- a/resources/fontawesome/svgs/solid/clover.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-branch.svg b/resources/fontawesome/svgs/solid/code-branch.svg deleted file mode 100644 index 076faed..0000000 --- a/resources/fontawesome/svgs/solid/code-branch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-commit.svg b/resources/fontawesome/svgs/solid/code-commit.svg deleted file mode 100644 index 57c22bc..0000000 --- a/resources/fontawesome/svgs/solid/code-commit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-compare.svg b/resources/fontawesome/svgs/solid/code-compare.svg deleted file mode 100644 index dff132f..0000000 --- a/resources/fontawesome/svgs/solid/code-compare.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-fork.svg b/resources/fontawesome/svgs/solid/code-fork.svg deleted file mode 100644 index 52c6075..0000000 --- a/resources/fontawesome/svgs/solid/code-fork.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-merge.svg b/resources/fontawesome/svgs/solid/code-merge.svg deleted file mode 100644 index 92f09c3..0000000 --- a/resources/fontawesome/svgs/solid/code-merge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code-pull-request.svg b/resources/fontawesome/svgs/solid/code-pull-request.svg deleted file mode 100644 index 7ec53a0..0000000 --- a/resources/fontawesome/svgs/solid/code-pull-request.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/code.svg b/resources/fontawesome/svgs/solid/code.svg deleted file mode 100644 index 3e701b6..0000000 --- a/resources/fontawesome/svgs/solid/code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/coins.svg b/resources/fontawesome/svgs/solid/coins.svg deleted file mode 100644 index fe8911a..0000000 --- a/resources/fontawesome/svgs/solid/coins.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/colon-sign.svg b/resources/fontawesome/svgs/solid/colon-sign.svg deleted file mode 100644 index 8835582..0000000 --- a/resources/fontawesome/svgs/solid/colon-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment-dollar.svg b/resources/fontawesome/svgs/solid/comment-dollar.svg deleted file mode 100644 index aecd1f9..0000000 --- a/resources/fontawesome/svgs/solid/comment-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment-dots.svg b/resources/fontawesome/svgs/solid/comment-dots.svg deleted file mode 100644 index 4cf621b..0000000 --- a/resources/fontawesome/svgs/solid/comment-dots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment-medical.svg b/resources/fontawesome/svgs/solid/comment-medical.svg deleted file mode 100644 index 7f62cd4..0000000 --- a/resources/fontawesome/svgs/solid/comment-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment-slash.svg b/resources/fontawesome/svgs/solid/comment-slash.svg deleted file mode 100644 index 966e05b..0000000 --- a/resources/fontawesome/svgs/solid/comment-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment-sms.svg b/resources/fontawesome/svgs/solid/comment-sms.svg deleted file mode 100644 index 9a7e0eb..0000000 --- a/resources/fontawesome/svgs/solid/comment-sms.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comment.svg b/resources/fontawesome/svgs/solid/comment.svg deleted file mode 100644 index 5edc983..0000000 --- a/resources/fontawesome/svgs/solid/comment.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comments-dollar.svg b/resources/fontawesome/svgs/solid/comments-dollar.svg deleted file mode 100644 index 027fa07..0000000 --- a/resources/fontawesome/svgs/solid/comments-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/comments.svg b/resources/fontawesome/svgs/solid/comments.svg deleted file mode 100644 index d4f20fc..0000000 --- a/resources/fontawesome/svgs/solid/comments.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/compact-disc.svg b/resources/fontawesome/svgs/solid/compact-disc.svg deleted file mode 100644 index 7cf4991..0000000 --- a/resources/fontawesome/svgs/solid/compact-disc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/compass-drafting.svg b/resources/fontawesome/svgs/solid/compass-drafting.svg deleted file mode 100644 index f2371e6..0000000 --- a/resources/fontawesome/svgs/solid/compass-drafting.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/compass.svg b/resources/fontawesome/svgs/solid/compass.svg deleted file mode 100644 index ca50325..0000000 --- a/resources/fontawesome/svgs/solid/compass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/compress.svg b/resources/fontawesome/svgs/solid/compress.svg deleted file mode 100644 index ab649a5..0000000 --- a/resources/fontawesome/svgs/solid/compress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/computer-mouse.svg b/resources/fontawesome/svgs/solid/computer-mouse.svg deleted file mode 100644 index f65f928..0000000 --- a/resources/fontawesome/svgs/solid/computer-mouse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/computer.svg b/resources/fontawesome/svgs/solid/computer.svg deleted file mode 100644 index 975f8c1..0000000 --- a/resources/fontawesome/svgs/solid/computer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cookie-bite.svg b/resources/fontawesome/svgs/solid/cookie-bite.svg deleted file mode 100644 index 9dd8532..0000000 --- a/resources/fontawesome/svgs/solid/cookie-bite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cookie.svg b/resources/fontawesome/svgs/solid/cookie.svg deleted file mode 100644 index ab3e063..0000000 --- a/resources/fontawesome/svgs/solid/cookie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/copy.svg b/resources/fontawesome/svgs/solid/copy.svg deleted file mode 100644 index b49d016..0000000 --- a/resources/fontawesome/svgs/solid/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/copyright.svg b/resources/fontawesome/svgs/solid/copyright.svg deleted file mode 100644 index 6b0d0f7..0000000 --- a/resources/fontawesome/svgs/solid/copyright.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/couch.svg b/resources/fontawesome/svgs/solid/couch.svg deleted file mode 100644 index 0d2a85e..0000000 --- a/resources/fontawesome/svgs/solid/couch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cow.svg b/resources/fontawesome/svgs/solid/cow.svg deleted file mode 100644 index 0c6cc59..0000000 --- a/resources/fontawesome/svgs/solid/cow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/credit-card.svg b/resources/fontawesome/svgs/solid/credit-card.svg deleted file mode 100644 index 7285ee7..0000000 --- a/resources/fontawesome/svgs/solid/credit-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crop-simple.svg b/resources/fontawesome/svgs/solid/crop-simple.svg deleted file mode 100644 index 90fe0c8..0000000 --- a/resources/fontawesome/svgs/solid/crop-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crop.svg b/resources/fontawesome/svgs/solid/crop.svg deleted file mode 100644 index 239ab74..0000000 --- a/resources/fontawesome/svgs/solid/crop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cross.svg b/resources/fontawesome/svgs/solid/cross.svg deleted file mode 100644 index fb43376..0000000 --- a/resources/fontawesome/svgs/solid/cross.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crosshairs.svg b/resources/fontawesome/svgs/solid/crosshairs.svg deleted file mode 100644 index 9597b28..0000000 --- a/resources/fontawesome/svgs/solid/crosshairs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crow.svg b/resources/fontawesome/svgs/solid/crow.svg deleted file mode 100644 index 24a269b..0000000 --- a/resources/fontawesome/svgs/solid/crow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crown.svg b/resources/fontawesome/svgs/solid/crown.svg deleted file mode 100644 index c80289e..0000000 --- a/resources/fontawesome/svgs/solid/crown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/crutch.svg b/resources/fontawesome/svgs/solid/crutch.svg deleted file mode 100644 index f9cc9b8..0000000 --- a/resources/fontawesome/svgs/solid/crutch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cruzeiro-sign.svg b/resources/fontawesome/svgs/solid/cruzeiro-sign.svg deleted file mode 100644 index 4e0ac9c..0000000 --- a/resources/fontawesome/svgs/solid/cruzeiro-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cube.svg b/resources/fontawesome/svgs/solid/cube.svg deleted file mode 100644 index 429bfa3..0000000 --- a/resources/fontawesome/svgs/solid/cube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cubes-stacked.svg b/resources/fontawesome/svgs/solid/cubes-stacked.svg deleted file mode 100644 index d525ec0..0000000 --- a/resources/fontawesome/svgs/solid/cubes-stacked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/cubes.svg b/resources/fontawesome/svgs/solid/cubes.svg deleted file mode 100644 index dd709f9..0000000 --- a/resources/fontawesome/svgs/solid/cubes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/d.svg b/resources/fontawesome/svgs/solid/d.svg deleted file mode 100644 index 017aace..0000000 --- a/resources/fontawesome/svgs/solid/d.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/database.svg b/resources/fontawesome/svgs/solid/database.svg deleted file mode 100644 index 3a925fa..0000000 --- a/resources/fontawesome/svgs/solid/database.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/delete-left.svg b/resources/fontawesome/svgs/solid/delete-left.svg deleted file mode 100644 index 3558ba0..0000000 --- a/resources/fontawesome/svgs/solid/delete-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/democrat.svg b/resources/fontawesome/svgs/solid/democrat.svg deleted file mode 100644 index 6bb22c0..0000000 --- a/resources/fontawesome/svgs/solid/democrat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/desktop.svg b/resources/fontawesome/svgs/solid/desktop.svg deleted file mode 100644 index 239dea4..0000000 --- a/resources/fontawesome/svgs/solid/desktop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dharmachakra.svg b/resources/fontawesome/svgs/solid/dharmachakra.svg deleted file mode 100644 index 289cd05..0000000 --- a/resources/fontawesome/svgs/solid/dharmachakra.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diagram-next.svg b/resources/fontawesome/svgs/solid/diagram-next.svg deleted file mode 100644 index 92701c3..0000000 --- a/resources/fontawesome/svgs/solid/diagram-next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diagram-predecessor.svg b/resources/fontawesome/svgs/solid/diagram-predecessor.svg deleted file mode 100644 index bb78775..0000000 --- a/resources/fontawesome/svgs/solid/diagram-predecessor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diagram-project.svg b/resources/fontawesome/svgs/solid/diagram-project.svg deleted file mode 100644 index 31b008c..0000000 --- a/resources/fontawesome/svgs/solid/diagram-project.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diagram-successor.svg b/resources/fontawesome/svgs/solid/diagram-successor.svg deleted file mode 100644 index e5ba752..0000000 --- a/resources/fontawesome/svgs/solid/diagram-successor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diamond-turn-right.svg b/resources/fontawesome/svgs/solid/diamond-turn-right.svg deleted file mode 100644 index 7bd8064..0000000 --- a/resources/fontawesome/svgs/solid/diamond-turn-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/diamond.svg b/resources/fontawesome/svgs/solid/diamond.svg deleted file mode 100644 index 1f7bab8..0000000 --- a/resources/fontawesome/svgs/solid/diamond.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-d20.svg b/resources/fontawesome/svgs/solid/dice-d20.svg deleted file mode 100644 index d441921..0000000 --- a/resources/fontawesome/svgs/solid/dice-d20.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-d6.svg b/resources/fontawesome/svgs/solid/dice-d6.svg deleted file mode 100644 index 7c9fe05..0000000 --- a/resources/fontawesome/svgs/solid/dice-d6.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-five.svg b/resources/fontawesome/svgs/solid/dice-five.svg deleted file mode 100644 index b11a49d..0000000 --- a/resources/fontawesome/svgs/solid/dice-five.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-four.svg b/resources/fontawesome/svgs/solid/dice-four.svg deleted file mode 100644 index 3617e08..0000000 --- a/resources/fontawesome/svgs/solid/dice-four.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-one.svg b/resources/fontawesome/svgs/solid/dice-one.svg deleted file mode 100644 index efc9a5a..0000000 --- a/resources/fontawesome/svgs/solid/dice-one.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-six.svg b/resources/fontawesome/svgs/solid/dice-six.svg deleted file mode 100644 index fc9d8aa..0000000 --- a/resources/fontawesome/svgs/solid/dice-six.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-three.svg b/resources/fontawesome/svgs/solid/dice-three.svg deleted file mode 100644 index 5216d8f..0000000 --- a/resources/fontawesome/svgs/solid/dice-three.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice-two.svg b/resources/fontawesome/svgs/solid/dice-two.svg deleted file mode 100644 index e11b47d..0000000 --- a/resources/fontawesome/svgs/solid/dice-two.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dice.svg b/resources/fontawesome/svgs/solid/dice.svg deleted file mode 100644 index 4863493..0000000 --- a/resources/fontawesome/svgs/solid/dice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/disease.svg b/resources/fontawesome/svgs/solid/disease.svg deleted file mode 100644 index b5bc7d9..0000000 --- a/resources/fontawesome/svgs/solid/disease.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/display.svg b/resources/fontawesome/svgs/solid/display.svg deleted file mode 100644 index 04912a6..0000000 --- a/resources/fontawesome/svgs/solid/display.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/divide.svg b/resources/fontawesome/svgs/solid/divide.svg deleted file mode 100644 index d8e6c63..0000000 --- a/resources/fontawesome/svgs/solid/divide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dna.svg b/resources/fontawesome/svgs/solid/dna.svg deleted file mode 100644 index dc86a90..0000000 --- a/resources/fontawesome/svgs/solid/dna.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dog.svg b/resources/fontawesome/svgs/solid/dog.svg deleted file mode 100644 index 20bce80..0000000 --- a/resources/fontawesome/svgs/solid/dog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dollar-sign.svg b/resources/fontawesome/svgs/solid/dollar-sign.svg deleted file mode 100644 index 2efab77..0000000 --- a/resources/fontawesome/svgs/solid/dollar-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dolly.svg b/resources/fontawesome/svgs/solid/dolly.svg deleted file mode 100644 index c50e8dd..0000000 --- a/resources/fontawesome/svgs/solid/dolly.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dong-sign.svg b/resources/fontawesome/svgs/solid/dong-sign.svg deleted file mode 100644 index 4b37bbe..0000000 --- a/resources/fontawesome/svgs/solid/dong-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/door-closed.svg b/resources/fontawesome/svgs/solid/door-closed.svg deleted file mode 100644 index 4dd4541..0000000 --- a/resources/fontawesome/svgs/solid/door-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/door-open.svg b/resources/fontawesome/svgs/solid/door-open.svg deleted file mode 100644 index 7f3ef35..0000000 --- a/resources/fontawesome/svgs/solid/door-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dove.svg b/resources/fontawesome/svgs/solid/dove.svg deleted file mode 100644 index 03b590a..0000000 --- a/resources/fontawesome/svgs/solid/dove.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/down-left-and-up-right-to-center.svg b/resources/fontawesome/svgs/solid/down-left-and-up-right-to-center.svg deleted file mode 100644 index f81a6d3..0000000 --- a/resources/fontawesome/svgs/solid/down-left-and-up-right-to-center.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/down-long.svg b/resources/fontawesome/svgs/solid/down-long.svg deleted file mode 100644 index 58d8672..0000000 --- a/resources/fontawesome/svgs/solid/down-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/download.svg b/resources/fontawesome/svgs/solid/download.svg deleted file mode 100644 index 0375764..0000000 --- a/resources/fontawesome/svgs/solid/download.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dragon.svg b/resources/fontawesome/svgs/solid/dragon.svg deleted file mode 100644 index 61f665f..0000000 --- a/resources/fontawesome/svgs/solid/dragon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/draw-polygon.svg b/resources/fontawesome/svgs/solid/draw-polygon.svg deleted file mode 100644 index b413bc1..0000000 --- a/resources/fontawesome/svgs/solid/draw-polygon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/droplet-slash.svg b/resources/fontawesome/svgs/solid/droplet-slash.svg deleted file mode 100644 index 2200a45..0000000 --- a/resources/fontawesome/svgs/solid/droplet-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/droplet.svg b/resources/fontawesome/svgs/solid/droplet.svg deleted file mode 100644 index 281825e..0000000 --- a/resources/fontawesome/svgs/solid/droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/drum-steelpan.svg b/resources/fontawesome/svgs/solid/drum-steelpan.svg deleted file mode 100644 index a5ca6a4..0000000 --- a/resources/fontawesome/svgs/solid/drum-steelpan.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/drum.svg b/resources/fontawesome/svgs/solid/drum.svg deleted file mode 100644 index aeb3bba..0000000 --- a/resources/fontawesome/svgs/solid/drum.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/drumstick-bite.svg b/resources/fontawesome/svgs/solid/drumstick-bite.svg deleted file mode 100644 index 7a66c85..0000000 --- a/resources/fontawesome/svgs/solid/drumstick-bite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dumbbell.svg b/resources/fontawesome/svgs/solid/dumbbell.svg deleted file mode 100644 index b79e24d..0000000 --- a/resources/fontawesome/svgs/solid/dumbbell.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dumpster-fire.svg b/resources/fontawesome/svgs/solid/dumpster-fire.svg deleted file mode 100644 index 9161131..0000000 --- a/resources/fontawesome/svgs/solid/dumpster-fire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dumpster.svg b/resources/fontawesome/svgs/solid/dumpster.svg deleted file mode 100644 index f5d3024..0000000 --- a/resources/fontawesome/svgs/solid/dumpster.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/dungeon.svg b/resources/fontawesome/svgs/solid/dungeon.svg deleted file mode 100644 index 0c7a41c..0000000 --- a/resources/fontawesome/svgs/solid/dungeon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/e.svg b/resources/fontawesome/svgs/solid/e.svg deleted file mode 100644 index 8ee973e..0000000 --- a/resources/fontawesome/svgs/solid/e.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ear-deaf.svg b/resources/fontawesome/svgs/solid/ear-deaf.svg deleted file mode 100644 index 1e8a18d..0000000 --- a/resources/fontawesome/svgs/solid/ear-deaf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ear-listen.svg b/resources/fontawesome/svgs/solid/ear-listen.svg deleted file mode 100644 index c291c73..0000000 --- a/resources/fontawesome/svgs/solid/ear-listen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/earth-africa.svg b/resources/fontawesome/svgs/solid/earth-africa.svg deleted file mode 100644 index 8499bf9..0000000 --- a/resources/fontawesome/svgs/solid/earth-africa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/earth-americas.svg b/resources/fontawesome/svgs/solid/earth-americas.svg deleted file mode 100644 index cc85139..0000000 --- a/resources/fontawesome/svgs/solid/earth-americas.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/earth-asia.svg b/resources/fontawesome/svgs/solid/earth-asia.svg deleted file mode 100644 index 37a3ab9..0000000 --- a/resources/fontawesome/svgs/solid/earth-asia.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/earth-europe.svg b/resources/fontawesome/svgs/solid/earth-europe.svg deleted file mode 100644 index eb096da..0000000 --- a/resources/fontawesome/svgs/solid/earth-europe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/earth-oceania.svg b/resources/fontawesome/svgs/solid/earth-oceania.svg deleted file mode 100644 index 0720b59..0000000 --- a/resources/fontawesome/svgs/solid/earth-oceania.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/egg.svg b/resources/fontawesome/svgs/solid/egg.svg deleted file mode 100644 index 288e4d4..0000000 --- a/resources/fontawesome/svgs/solid/egg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eject.svg b/resources/fontawesome/svgs/solid/eject.svg deleted file mode 100644 index ad28847..0000000 --- a/resources/fontawesome/svgs/solid/eject.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/elevator.svg b/resources/fontawesome/svgs/solid/elevator.svg deleted file mode 100644 index 1ce8232..0000000 --- a/resources/fontawesome/svgs/solid/elevator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ellipsis-vertical.svg b/resources/fontawesome/svgs/solid/ellipsis-vertical.svg deleted file mode 100644 index 5107e72..0000000 --- a/resources/fontawesome/svgs/solid/ellipsis-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ellipsis.svg b/resources/fontawesome/svgs/solid/ellipsis.svg deleted file mode 100644 index d910004..0000000 --- a/resources/fontawesome/svgs/solid/ellipsis.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/envelope-circle-check.svg b/resources/fontawesome/svgs/solid/envelope-circle-check.svg deleted file mode 100644 index bad4ef1..0000000 --- a/resources/fontawesome/svgs/solid/envelope-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/envelope-open-text.svg b/resources/fontawesome/svgs/solid/envelope-open-text.svg deleted file mode 100644 index 146403f..0000000 --- a/resources/fontawesome/svgs/solid/envelope-open-text.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/envelope-open.svg b/resources/fontawesome/svgs/solid/envelope-open.svg deleted file mode 100644 index e915611..0000000 --- a/resources/fontawesome/svgs/solid/envelope-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/envelope.svg b/resources/fontawesome/svgs/solid/envelope.svg deleted file mode 100644 index 8cfe321..0000000 --- a/resources/fontawesome/svgs/solid/envelope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/envelopes-bulk.svg b/resources/fontawesome/svgs/solid/envelopes-bulk.svg deleted file mode 100644 index a7ed864..0000000 --- a/resources/fontawesome/svgs/solid/envelopes-bulk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/equals.svg b/resources/fontawesome/svgs/solid/equals.svg deleted file mode 100644 index 40617b3..0000000 --- a/resources/fontawesome/svgs/solid/equals.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eraser.svg b/resources/fontawesome/svgs/solid/eraser.svg deleted file mode 100644 index 4c45953..0000000 --- a/resources/fontawesome/svgs/solid/eraser.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ethernet.svg b/resources/fontawesome/svgs/solid/ethernet.svg deleted file mode 100644 index 7d17336..0000000 --- a/resources/fontawesome/svgs/solid/ethernet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/euro-sign.svg b/resources/fontawesome/svgs/solid/euro-sign.svg deleted file mode 100644 index c1792e3..0000000 --- a/resources/fontawesome/svgs/solid/euro-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/exclamation.svg b/resources/fontawesome/svgs/solid/exclamation.svg deleted file mode 100644 index 5d2b83c..0000000 --- a/resources/fontawesome/svgs/solid/exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/expand.svg b/resources/fontawesome/svgs/solid/expand.svg deleted file mode 100644 index b0d6a41..0000000 --- a/resources/fontawesome/svgs/solid/expand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/explosion.svg b/resources/fontawesome/svgs/solid/explosion.svg deleted file mode 100644 index 1ae07c1..0000000 --- a/resources/fontawesome/svgs/solid/explosion.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eye-dropper.svg b/resources/fontawesome/svgs/solid/eye-dropper.svg deleted file mode 100644 index 960f90c..0000000 --- a/resources/fontawesome/svgs/solid/eye-dropper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eye-low-vision.svg b/resources/fontawesome/svgs/solid/eye-low-vision.svg deleted file mode 100644 index fd0d9e1..0000000 --- a/resources/fontawesome/svgs/solid/eye-low-vision.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eye-slash.svg b/resources/fontawesome/svgs/solid/eye-slash.svg deleted file mode 100644 index 332b3b1..0000000 --- a/resources/fontawesome/svgs/solid/eye-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/eye.svg b/resources/fontawesome/svgs/solid/eye.svg deleted file mode 100644 index fabe442..0000000 --- a/resources/fontawesome/svgs/solid/eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/f.svg b/resources/fontawesome/svgs/solid/f.svg deleted file mode 100644 index a8cba1e..0000000 --- a/resources/fontawesome/svgs/solid/f.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-angry.svg b/resources/fontawesome/svgs/solid/face-angry.svg deleted file mode 100644 index 4e01d65..0000000 --- a/resources/fontawesome/svgs/solid/face-angry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-dizzy.svg b/resources/fontawesome/svgs/solid/face-dizzy.svg deleted file mode 100644 index aab1b3e..0000000 --- a/resources/fontawesome/svgs/solid/face-dizzy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-flushed.svg b/resources/fontawesome/svgs/solid/face-flushed.svg deleted file mode 100644 index f03bfcc..0000000 --- a/resources/fontawesome/svgs/solid/face-flushed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-frown-open.svg b/resources/fontawesome/svgs/solid/face-frown-open.svg deleted file mode 100644 index 569cc1c..0000000 --- a/resources/fontawesome/svgs/solid/face-frown-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-frown.svg b/resources/fontawesome/svgs/solid/face-frown.svg deleted file mode 100644 index bc9880c..0000000 --- a/resources/fontawesome/svgs/solid/face-frown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grimace.svg b/resources/fontawesome/svgs/solid/face-grimace.svg deleted file mode 100644 index 7824657..0000000 --- a/resources/fontawesome/svgs/solid/face-grimace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-beam-sweat.svg b/resources/fontawesome/svgs/solid/face-grin-beam-sweat.svg deleted file mode 100644 index d432b72..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-beam-sweat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-beam.svg b/resources/fontawesome/svgs/solid/face-grin-beam.svg deleted file mode 100644 index 93d07f3..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-hearts.svg b/resources/fontawesome/svgs/solid/face-grin-hearts.svg deleted file mode 100644 index 701966a..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-hearts.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-squint-tears.svg b/resources/fontawesome/svgs/solid/face-grin-squint-tears.svg deleted file mode 100644 index b50a68e..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-squint-tears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-squint.svg b/resources/fontawesome/svgs/solid/face-grin-squint.svg deleted file mode 100644 index 4e659e3..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-stars.svg b/resources/fontawesome/svgs/solid/face-grin-stars.svg deleted file mode 100644 index 7fc8072..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-stars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-tears.svg b/resources/fontawesome/svgs/solid/face-grin-tears.svg deleted file mode 100644 index 3257593..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-tears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-tongue-squint.svg b/resources/fontawesome/svgs/solid/face-grin-tongue-squint.svg deleted file mode 100644 index 6b88a31..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-tongue-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-tongue-wink.svg b/resources/fontawesome/svgs/solid/face-grin-tongue-wink.svg deleted file mode 100644 index 1f8b1fd..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-tongue-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-tongue.svg b/resources/fontawesome/svgs/solid/face-grin-tongue.svg deleted file mode 100644 index 0f852d2..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-tongue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-wide.svg b/resources/fontawesome/svgs/solid/face-grin-wide.svg deleted file mode 100644 index cfb7667..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-wide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin-wink.svg b/resources/fontawesome/svgs/solid/face-grin-wink.svg deleted file mode 100644 index d8a3b12..0000000 --- a/resources/fontawesome/svgs/solid/face-grin-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-grin.svg b/resources/fontawesome/svgs/solid/face-grin.svg deleted file mode 100644 index 60325de..0000000 --- a/resources/fontawesome/svgs/solid/face-grin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-kiss-beam.svg b/resources/fontawesome/svgs/solid/face-kiss-beam.svg deleted file mode 100644 index adc6f59..0000000 --- a/resources/fontawesome/svgs/solid/face-kiss-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-kiss-wink-heart.svg b/resources/fontawesome/svgs/solid/face-kiss-wink-heart.svg deleted file mode 100644 index 7adbc8e..0000000 --- a/resources/fontawesome/svgs/solid/face-kiss-wink-heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-kiss.svg b/resources/fontawesome/svgs/solid/face-kiss.svg deleted file mode 100644 index c51b9f9..0000000 --- a/resources/fontawesome/svgs/solid/face-kiss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-laugh-beam.svg b/resources/fontawesome/svgs/solid/face-laugh-beam.svg deleted file mode 100644 index 664f39f..0000000 --- a/resources/fontawesome/svgs/solid/face-laugh-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-laugh-squint.svg b/resources/fontawesome/svgs/solid/face-laugh-squint.svg deleted file mode 100644 index 19d5c4d..0000000 --- a/resources/fontawesome/svgs/solid/face-laugh-squint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-laugh-wink.svg b/resources/fontawesome/svgs/solid/face-laugh-wink.svg deleted file mode 100644 index 90c38c3..0000000 --- a/resources/fontawesome/svgs/solid/face-laugh-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-laugh.svg b/resources/fontawesome/svgs/solid/face-laugh.svg deleted file mode 100644 index 8669ecc..0000000 --- a/resources/fontawesome/svgs/solid/face-laugh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-meh-blank.svg b/resources/fontawesome/svgs/solid/face-meh-blank.svg deleted file mode 100644 index e60f00d..0000000 --- a/resources/fontawesome/svgs/solid/face-meh-blank.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-meh.svg b/resources/fontawesome/svgs/solid/face-meh.svg deleted file mode 100644 index 271d448..0000000 --- a/resources/fontawesome/svgs/solid/face-meh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-rolling-eyes.svg b/resources/fontawesome/svgs/solid/face-rolling-eyes.svg deleted file mode 100644 index 0ac7908..0000000 --- a/resources/fontawesome/svgs/solid/face-rolling-eyes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-sad-cry.svg b/resources/fontawesome/svgs/solid/face-sad-cry.svg deleted file mode 100644 index 63a764c..0000000 --- a/resources/fontawesome/svgs/solid/face-sad-cry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-sad-tear.svg b/resources/fontawesome/svgs/solid/face-sad-tear.svg deleted file mode 100644 index 1bed800..0000000 --- a/resources/fontawesome/svgs/solid/face-sad-tear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-smile-beam.svg b/resources/fontawesome/svgs/solid/face-smile-beam.svg deleted file mode 100644 index ccf2e60..0000000 --- a/resources/fontawesome/svgs/solid/face-smile-beam.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-smile-wink.svg b/resources/fontawesome/svgs/solid/face-smile-wink.svg deleted file mode 100644 index 16be2f2..0000000 --- a/resources/fontawesome/svgs/solid/face-smile-wink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-smile.svg b/resources/fontawesome/svgs/solid/face-smile.svg deleted file mode 100644 index 654a95a..0000000 --- a/resources/fontawesome/svgs/solid/face-smile.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-surprise.svg b/resources/fontawesome/svgs/solid/face-surprise.svg deleted file mode 100644 index 60a5a72..0000000 --- a/resources/fontawesome/svgs/solid/face-surprise.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/face-tired.svg b/resources/fontawesome/svgs/solid/face-tired.svg deleted file mode 100644 index 25b1ab4..0000000 --- a/resources/fontawesome/svgs/solid/face-tired.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fan.svg b/resources/fontawesome/svgs/solid/fan.svg deleted file mode 100644 index ffdb958..0000000 --- a/resources/fontawesome/svgs/solid/fan.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/faucet-drip.svg b/resources/fontawesome/svgs/solid/faucet-drip.svg deleted file mode 100644 index df61d42..0000000 --- a/resources/fontawesome/svgs/solid/faucet-drip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/faucet.svg b/resources/fontawesome/svgs/solid/faucet.svg deleted file mode 100644 index b902fbc..0000000 --- a/resources/fontawesome/svgs/solid/faucet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fax.svg b/resources/fontawesome/svgs/solid/fax.svg deleted file mode 100644 index b6f05e3..0000000 --- a/resources/fontawesome/svgs/solid/fax.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/feather-pointed.svg b/resources/fontawesome/svgs/solid/feather-pointed.svg deleted file mode 100644 index d8fce4f..0000000 --- a/resources/fontawesome/svgs/solid/feather-pointed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/feather.svg b/resources/fontawesome/svgs/solid/feather.svg deleted file mode 100644 index 2d5727d..0000000 --- a/resources/fontawesome/svgs/solid/feather.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ferry.svg b/resources/fontawesome/svgs/solid/ferry.svg deleted file mode 100644 index fb43669..0000000 --- a/resources/fontawesome/svgs/solid/ferry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-arrow-down.svg b/resources/fontawesome/svgs/solid/file-arrow-down.svg deleted file mode 100644 index a73227b..0000000 --- a/resources/fontawesome/svgs/solid/file-arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-arrow-up.svg b/resources/fontawesome/svgs/solid/file-arrow-up.svg deleted file mode 100644 index b3df565..0000000 --- a/resources/fontawesome/svgs/solid/file-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-audio.svg b/resources/fontawesome/svgs/solid/file-audio.svg deleted file mode 100644 index cf7c8ea..0000000 --- a/resources/fontawesome/svgs/solid/file-audio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-check.svg b/resources/fontawesome/svgs/solid/file-circle-check.svg deleted file mode 100644 index 69e7c42..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-exclamation.svg b/resources/fontawesome/svgs/solid/file-circle-exclamation.svg deleted file mode 100644 index 7a75c0e..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-minus.svg b/resources/fontawesome/svgs/solid/file-circle-minus.svg deleted file mode 100644 index e84f120..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-plus.svg b/resources/fontawesome/svgs/solid/file-circle-plus.svg deleted file mode 100644 index ecda482..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-question.svg b/resources/fontawesome/svgs/solid/file-circle-question.svg deleted file mode 100644 index 1634abd..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-circle-xmark.svg b/resources/fontawesome/svgs/solid/file-circle-xmark.svg deleted file mode 100644 index aad2dc8..0000000 --- a/resources/fontawesome/svgs/solid/file-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-code.svg b/resources/fontawesome/svgs/solid/file-code.svg deleted file mode 100644 index 2a0f53a..0000000 --- a/resources/fontawesome/svgs/solid/file-code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-contract.svg b/resources/fontawesome/svgs/solid/file-contract.svg deleted file mode 100644 index b9d9eb7..0000000 --- a/resources/fontawesome/svgs/solid/file-contract.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-csv.svg b/resources/fontawesome/svgs/solid/file-csv.svg deleted file mode 100644 index 5cf435f..0000000 --- a/resources/fontawesome/svgs/solid/file-csv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-excel.svg b/resources/fontawesome/svgs/solid/file-excel.svg deleted file mode 100644 index 30919ce..0000000 --- a/resources/fontawesome/svgs/solid/file-excel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-export.svg b/resources/fontawesome/svgs/solid/file-export.svg deleted file mode 100644 index 50cd8d7..0000000 --- a/resources/fontawesome/svgs/solid/file-export.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-image.svg b/resources/fontawesome/svgs/solid/file-image.svg deleted file mode 100644 index 7859a4f..0000000 --- a/resources/fontawesome/svgs/solid/file-image.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-import.svg b/resources/fontawesome/svgs/solid/file-import.svg deleted file mode 100644 index a04558a..0000000 --- a/resources/fontawesome/svgs/solid/file-import.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-invoice-dollar.svg b/resources/fontawesome/svgs/solid/file-invoice-dollar.svg deleted file mode 100644 index ac73d58..0000000 --- a/resources/fontawesome/svgs/solid/file-invoice-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-invoice.svg b/resources/fontawesome/svgs/solid/file-invoice.svg deleted file mode 100644 index ea7c173..0000000 --- a/resources/fontawesome/svgs/solid/file-invoice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-lines.svg b/resources/fontawesome/svgs/solid/file-lines.svg deleted file mode 100644 index e0b23ba..0000000 --- a/resources/fontawesome/svgs/solid/file-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-medical.svg b/resources/fontawesome/svgs/solid/file-medical.svg deleted file mode 100644 index b50229e..0000000 --- a/resources/fontawesome/svgs/solid/file-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-pdf.svg b/resources/fontawesome/svgs/solid/file-pdf.svg deleted file mode 100644 index 32439fb..0000000 --- a/resources/fontawesome/svgs/solid/file-pdf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-pen.svg b/resources/fontawesome/svgs/solid/file-pen.svg deleted file mode 100644 index 723aa1a..0000000 --- a/resources/fontawesome/svgs/solid/file-pen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-powerpoint.svg b/resources/fontawesome/svgs/solid/file-powerpoint.svg deleted file mode 100644 index 173bd3c..0000000 --- a/resources/fontawesome/svgs/solid/file-powerpoint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-prescription.svg b/resources/fontawesome/svgs/solid/file-prescription.svg deleted file mode 100644 index 8f23a28..0000000 --- a/resources/fontawesome/svgs/solid/file-prescription.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-shield.svg b/resources/fontawesome/svgs/solid/file-shield.svg deleted file mode 100644 index a47c508..0000000 --- a/resources/fontawesome/svgs/solid/file-shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-signature.svg b/resources/fontawesome/svgs/solid/file-signature.svg deleted file mode 100644 index 9ae933b..0000000 --- a/resources/fontawesome/svgs/solid/file-signature.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-video.svg b/resources/fontawesome/svgs/solid/file-video.svg deleted file mode 100644 index d23da62..0000000 --- a/resources/fontawesome/svgs/solid/file-video.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-waveform.svg b/resources/fontawesome/svgs/solid/file-waveform.svg deleted file mode 100644 index 2138d89..0000000 --- a/resources/fontawesome/svgs/solid/file-waveform.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-word.svg b/resources/fontawesome/svgs/solid/file-word.svg deleted file mode 100644 index 5af05f2..0000000 --- a/resources/fontawesome/svgs/solid/file-word.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file-zipper.svg b/resources/fontawesome/svgs/solid/file-zipper.svg deleted file mode 100644 index aed3f46..0000000 --- a/resources/fontawesome/svgs/solid/file-zipper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/file.svg b/resources/fontawesome/svgs/solid/file.svg deleted file mode 100644 index 40745de..0000000 --- a/resources/fontawesome/svgs/solid/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fill-drip.svg b/resources/fontawesome/svgs/solid/fill-drip.svg deleted file mode 100644 index 8fff64c..0000000 --- a/resources/fontawesome/svgs/solid/fill-drip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fill.svg b/resources/fontawesome/svgs/solid/fill.svg deleted file mode 100644 index f1f4212..0000000 --- a/resources/fontawesome/svgs/solid/fill.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/film.svg b/resources/fontawesome/svgs/solid/film.svg deleted file mode 100644 index 4fd12f9..0000000 --- a/resources/fontawesome/svgs/solid/film.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/filter-circle-dollar.svg b/resources/fontawesome/svgs/solid/filter-circle-dollar.svg deleted file mode 100644 index 752d566..0000000 --- a/resources/fontawesome/svgs/solid/filter-circle-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/filter-circle-xmark.svg b/resources/fontawesome/svgs/solid/filter-circle-xmark.svg deleted file mode 100644 index 109acdb..0000000 --- a/resources/fontawesome/svgs/solid/filter-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/filter.svg b/resources/fontawesome/svgs/solid/filter.svg deleted file mode 100644 index a3ad17e..0000000 --- a/resources/fontawesome/svgs/solid/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fingerprint.svg b/resources/fontawesome/svgs/solid/fingerprint.svg deleted file mode 100644 index 2933997..0000000 --- a/resources/fontawesome/svgs/solid/fingerprint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fire-burner.svg b/resources/fontawesome/svgs/solid/fire-burner.svg deleted file mode 100644 index 1d7202b..0000000 --- a/resources/fontawesome/svgs/solid/fire-burner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fire-extinguisher.svg b/resources/fontawesome/svgs/solid/fire-extinguisher.svg deleted file mode 100644 index 3926d73..0000000 --- a/resources/fontawesome/svgs/solid/fire-extinguisher.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fire-flame-curved.svg b/resources/fontawesome/svgs/solid/fire-flame-curved.svg deleted file mode 100644 index 549119c..0000000 --- a/resources/fontawesome/svgs/solid/fire-flame-curved.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fire-flame-simple.svg b/resources/fontawesome/svgs/solid/fire-flame-simple.svg deleted file mode 100644 index bcf53cf..0000000 --- a/resources/fontawesome/svgs/solid/fire-flame-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fire.svg b/resources/fontawesome/svgs/solid/fire.svg deleted file mode 100644 index 348c549..0000000 --- a/resources/fontawesome/svgs/solid/fire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fish-fins.svg b/resources/fontawesome/svgs/solid/fish-fins.svg deleted file mode 100644 index beedce2..0000000 --- a/resources/fontawesome/svgs/solid/fish-fins.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/fish.svg b/resources/fontawesome/svgs/solid/fish.svg deleted file mode 100644 index f836864..0000000 --- a/resources/fontawesome/svgs/solid/fish.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/flag-checkered.svg b/resources/fontawesome/svgs/solid/flag-checkered.svg deleted file mode 100644 index d424a92..0000000 --- a/resources/fontawesome/svgs/solid/flag-checkered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/flag-usa.svg b/resources/fontawesome/svgs/solid/flag-usa.svg deleted file mode 100644 index 7a9138b..0000000 --- a/resources/fontawesome/svgs/solid/flag-usa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/flag.svg b/resources/fontawesome/svgs/solid/flag.svg deleted file mode 100644 index cf64819..0000000 --- a/resources/fontawesome/svgs/solid/flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/flask-vial.svg b/resources/fontawesome/svgs/solid/flask-vial.svg deleted file mode 100644 index 59caf12..0000000 --- a/resources/fontawesome/svgs/solid/flask-vial.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/flask.svg b/resources/fontawesome/svgs/solid/flask.svg deleted file mode 100644 index 56ee4f5..0000000 --- a/resources/fontawesome/svgs/solid/flask.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/floppy-disk.svg b/resources/fontawesome/svgs/solid/floppy-disk.svg deleted file mode 100644 index 1180269..0000000 --- a/resources/fontawesome/svgs/solid/floppy-disk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/florin-sign.svg b/resources/fontawesome/svgs/solid/florin-sign.svg deleted file mode 100644 index 0dafa6c..0000000 --- a/resources/fontawesome/svgs/solid/florin-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder-closed.svg b/resources/fontawesome/svgs/solid/folder-closed.svg deleted file mode 100644 index 80334e5..0000000 --- a/resources/fontawesome/svgs/solid/folder-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder-minus.svg b/resources/fontawesome/svgs/solid/folder-minus.svg deleted file mode 100644 index 473d68b..0000000 --- a/resources/fontawesome/svgs/solid/folder-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder-open.svg b/resources/fontawesome/svgs/solid/folder-open.svg deleted file mode 100644 index 9378edf..0000000 --- a/resources/fontawesome/svgs/solid/folder-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder-plus.svg b/resources/fontawesome/svgs/solid/folder-plus.svg deleted file mode 100644 index a0fd601..0000000 --- a/resources/fontawesome/svgs/solid/folder-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder-tree.svg b/resources/fontawesome/svgs/solid/folder-tree.svg deleted file mode 100644 index 9d0ee42..0000000 --- a/resources/fontawesome/svgs/solid/folder-tree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/folder.svg b/resources/fontawesome/svgs/solid/folder.svg deleted file mode 100644 index 64cb6fb..0000000 --- a/resources/fontawesome/svgs/solid/folder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/font-awesome.svg b/resources/fontawesome/svgs/solid/font-awesome.svg deleted file mode 100644 index 13f10eb..0000000 --- a/resources/fontawesome/svgs/solid/font-awesome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/font.svg b/resources/fontawesome/svgs/solid/font.svg deleted file mode 100644 index a2197d2..0000000 --- a/resources/fontawesome/svgs/solid/font.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/football.svg b/resources/fontawesome/svgs/solid/football.svg deleted file mode 100644 index 769425a..0000000 --- a/resources/fontawesome/svgs/solid/football.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/forward-fast.svg b/resources/fontawesome/svgs/solid/forward-fast.svg deleted file mode 100644 index 65289a5..0000000 --- a/resources/fontawesome/svgs/solid/forward-fast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/forward-step.svg b/resources/fontawesome/svgs/solid/forward-step.svg deleted file mode 100644 index e19c950..0000000 --- a/resources/fontawesome/svgs/solid/forward-step.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/forward.svg b/resources/fontawesome/svgs/solid/forward.svg deleted file mode 100644 index 53d1a67..0000000 --- a/resources/fontawesome/svgs/solid/forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/franc-sign.svg b/resources/fontawesome/svgs/solid/franc-sign.svg deleted file mode 100644 index d9f6c79..0000000 --- a/resources/fontawesome/svgs/solid/franc-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/frog.svg b/resources/fontawesome/svgs/solid/frog.svg deleted file mode 100644 index bde49c6..0000000 --- a/resources/fontawesome/svgs/solid/frog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/futbol.svg b/resources/fontawesome/svgs/solid/futbol.svg deleted file mode 100644 index 0273ec6..0000000 --- a/resources/fontawesome/svgs/solid/futbol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/g.svg b/resources/fontawesome/svgs/solid/g.svg deleted file mode 100644 index 9b35a04..0000000 --- a/resources/fontawesome/svgs/solid/g.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gamepad.svg b/resources/fontawesome/svgs/solid/gamepad.svg deleted file mode 100644 index 5b0f53c..0000000 --- a/resources/fontawesome/svgs/solid/gamepad.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gas-pump.svg b/resources/fontawesome/svgs/solid/gas-pump.svg deleted file mode 100644 index 8845133..0000000 --- a/resources/fontawesome/svgs/solid/gas-pump.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gauge-high.svg b/resources/fontawesome/svgs/solid/gauge-high.svg deleted file mode 100644 index a571987..0000000 --- a/resources/fontawesome/svgs/solid/gauge-high.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gauge-simple-high.svg b/resources/fontawesome/svgs/solid/gauge-simple-high.svg deleted file mode 100644 index 81a1a44..0000000 --- a/resources/fontawesome/svgs/solid/gauge-simple-high.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gauge-simple.svg b/resources/fontawesome/svgs/solid/gauge-simple.svg deleted file mode 100644 index 0f916ad..0000000 --- a/resources/fontawesome/svgs/solid/gauge-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gauge.svg b/resources/fontawesome/svgs/solid/gauge.svg deleted file mode 100644 index ca51375..0000000 --- a/resources/fontawesome/svgs/solid/gauge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gavel.svg b/resources/fontawesome/svgs/solid/gavel.svg deleted file mode 100644 index 81bd5fa..0000000 --- a/resources/fontawesome/svgs/solid/gavel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gear.svg b/resources/fontawesome/svgs/solid/gear.svg deleted file mode 100644 index dbdef76..0000000 --- a/resources/fontawesome/svgs/solid/gear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gears.svg b/resources/fontawesome/svgs/solid/gears.svg deleted file mode 100644 index fd2a070..0000000 --- a/resources/fontawesome/svgs/solid/gears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gem.svg b/resources/fontawesome/svgs/solid/gem.svg deleted file mode 100644 index 097cdf2..0000000 --- a/resources/fontawesome/svgs/solid/gem.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/genderless.svg b/resources/fontawesome/svgs/solid/genderless.svg deleted file mode 100644 index 4a333bb..0000000 --- a/resources/fontawesome/svgs/solid/genderless.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ghost.svg b/resources/fontawesome/svgs/solid/ghost.svg deleted file mode 100644 index 3709683..0000000 --- a/resources/fontawesome/svgs/solid/ghost.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gift.svg b/resources/fontawesome/svgs/solid/gift.svg deleted file mode 100644 index bcecb88..0000000 --- a/resources/fontawesome/svgs/solid/gift.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gifts.svg b/resources/fontawesome/svgs/solid/gifts.svg deleted file mode 100644 index f6a8ba2..0000000 --- a/resources/fontawesome/svgs/solid/gifts.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/glass-water-droplet.svg b/resources/fontawesome/svgs/solid/glass-water-droplet.svg deleted file mode 100644 index f323b59..0000000 --- a/resources/fontawesome/svgs/solid/glass-water-droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/glass-water.svg b/resources/fontawesome/svgs/solid/glass-water.svg deleted file mode 100644 index 1e95603..0000000 --- a/resources/fontawesome/svgs/solid/glass-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/glasses.svg b/resources/fontawesome/svgs/solid/glasses.svg deleted file mode 100644 index 9c98fb0..0000000 --- a/resources/fontawesome/svgs/solid/glasses.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/globe.svg b/resources/fontawesome/svgs/solid/globe.svg deleted file mode 100644 index a1a6863..0000000 --- a/resources/fontawesome/svgs/solid/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/golf-ball-tee.svg b/resources/fontawesome/svgs/solid/golf-ball-tee.svg deleted file mode 100644 index f4825ab..0000000 --- a/resources/fontawesome/svgs/solid/golf-ball-tee.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gopuram.svg b/resources/fontawesome/svgs/solid/gopuram.svg deleted file mode 100644 index 5ef07ed..0000000 --- a/resources/fontawesome/svgs/solid/gopuram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/graduation-cap.svg b/resources/fontawesome/svgs/solid/graduation-cap.svg deleted file mode 100644 index ff4b22a..0000000 --- a/resources/fontawesome/svgs/solid/graduation-cap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/greater-than-equal.svg b/resources/fontawesome/svgs/solid/greater-than-equal.svg deleted file mode 100644 index e34ac1c..0000000 --- a/resources/fontawesome/svgs/solid/greater-than-equal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/greater-than.svg b/resources/fontawesome/svgs/solid/greater-than.svg deleted file mode 100644 index 432ca4a..0000000 --- a/resources/fontawesome/svgs/solid/greater-than.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/grip-lines-vertical.svg b/resources/fontawesome/svgs/solid/grip-lines-vertical.svg deleted file mode 100644 index 8144d00..0000000 --- a/resources/fontawesome/svgs/solid/grip-lines-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/grip-lines.svg b/resources/fontawesome/svgs/solid/grip-lines.svg deleted file mode 100644 index 3c08390..0000000 --- a/resources/fontawesome/svgs/solid/grip-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/grip-vertical.svg b/resources/fontawesome/svgs/solid/grip-vertical.svg deleted file mode 100644 index e3c9ebd..0000000 --- a/resources/fontawesome/svgs/solid/grip-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/grip.svg b/resources/fontawesome/svgs/solid/grip.svg deleted file mode 100644 index 5abd104..0000000 --- a/resources/fontawesome/svgs/solid/grip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/group-arrows-rotate.svg b/resources/fontawesome/svgs/solid/group-arrows-rotate.svg deleted file mode 100644 index 776abfa..0000000 --- a/resources/fontawesome/svgs/solid/group-arrows-rotate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/guarani-sign.svg b/resources/fontawesome/svgs/solid/guarani-sign.svg deleted file mode 100644 index 2558820..0000000 --- a/resources/fontawesome/svgs/solid/guarani-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/guitar.svg b/resources/fontawesome/svgs/solid/guitar.svg deleted file mode 100644 index 9a278b3..0000000 --- a/resources/fontawesome/svgs/solid/guitar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/gun.svg b/resources/fontawesome/svgs/solid/gun.svg deleted file mode 100644 index 6f3bc42..0000000 --- a/resources/fontawesome/svgs/solid/gun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/h.svg b/resources/fontawesome/svgs/solid/h.svg deleted file mode 100644 index 76bef18..0000000 --- a/resources/fontawesome/svgs/solid/h.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hammer.svg b/resources/fontawesome/svgs/solid/hammer.svg deleted file mode 100644 index 3149bb0..0000000 --- a/resources/fontawesome/svgs/solid/hammer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hamsa.svg b/resources/fontawesome/svgs/solid/hamsa.svg deleted file mode 100644 index e88193b..0000000 --- a/resources/fontawesome/svgs/solid/hamsa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-back-fist.svg b/resources/fontawesome/svgs/solid/hand-back-fist.svg deleted file mode 100644 index d1633e5..0000000 --- a/resources/fontawesome/svgs/solid/hand-back-fist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-dots.svg b/resources/fontawesome/svgs/solid/hand-dots.svg deleted file mode 100644 index e30ed34..0000000 --- a/resources/fontawesome/svgs/solid/hand-dots.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-fist.svg b/resources/fontawesome/svgs/solid/hand-fist.svg deleted file mode 100644 index d6ae22f..0000000 --- a/resources/fontawesome/svgs/solid/hand-fist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding-dollar.svg b/resources/fontawesome/svgs/solid/hand-holding-dollar.svg deleted file mode 100644 index 74c14c4..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding-droplet.svg b/resources/fontawesome/svgs/solid/hand-holding-droplet.svg deleted file mode 100644 index c3a2fef..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding-droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding-hand.svg b/resources/fontawesome/svgs/solid/hand-holding-hand.svg deleted file mode 100644 index da81b0d..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding-hand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding-heart.svg b/resources/fontawesome/svgs/solid/hand-holding-heart.svg deleted file mode 100644 index 60edcd1..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding-heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding-medical.svg b/resources/fontawesome/svgs/solid/hand-holding-medical.svg deleted file mode 100644 index b475837..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-holding.svg b/resources/fontawesome/svgs/solid/hand-holding.svg deleted file mode 100644 index 343d6bc..0000000 --- a/resources/fontawesome/svgs/solid/hand-holding.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-lizard.svg b/resources/fontawesome/svgs/solid/hand-lizard.svg deleted file mode 100644 index 1609e96..0000000 --- a/resources/fontawesome/svgs/solid/hand-lizard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-middle-finger.svg b/resources/fontawesome/svgs/solid/hand-middle-finger.svg deleted file mode 100644 index 105cd49..0000000 --- a/resources/fontawesome/svgs/solid/hand-middle-finger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-peace.svg b/resources/fontawesome/svgs/solid/hand-peace.svg deleted file mode 100644 index 2a45da1..0000000 --- a/resources/fontawesome/svgs/solid/hand-peace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-point-down.svg b/resources/fontawesome/svgs/solid/hand-point-down.svg deleted file mode 100644 index b5941bf..0000000 --- a/resources/fontawesome/svgs/solid/hand-point-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-point-left.svg b/resources/fontawesome/svgs/solid/hand-point-left.svg deleted file mode 100644 index 7988522..0000000 --- a/resources/fontawesome/svgs/solid/hand-point-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-point-right.svg b/resources/fontawesome/svgs/solid/hand-point-right.svg deleted file mode 100644 index cc9236f..0000000 --- a/resources/fontawesome/svgs/solid/hand-point-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-point-up.svg b/resources/fontawesome/svgs/solid/hand-point-up.svg deleted file mode 100644 index 69054b5..0000000 --- a/resources/fontawesome/svgs/solid/hand-point-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-pointer.svg b/resources/fontawesome/svgs/solid/hand-pointer.svg deleted file mode 100644 index 110f20e..0000000 --- a/resources/fontawesome/svgs/solid/hand-pointer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-scissors.svg b/resources/fontawesome/svgs/solid/hand-scissors.svg deleted file mode 100644 index cc52c31..0000000 --- a/resources/fontawesome/svgs/solid/hand-scissors.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-sparkles.svg b/resources/fontawesome/svgs/solid/hand-sparkles.svg deleted file mode 100644 index 52a4f7c..0000000 --- a/resources/fontawesome/svgs/solid/hand-sparkles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand-spock.svg b/resources/fontawesome/svgs/solid/hand-spock.svg deleted file mode 100644 index 35678f1..0000000 --- a/resources/fontawesome/svgs/solid/hand-spock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hand.svg b/resources/fontawesome/svgs/solid/hand.svg deleted file mode 100644 index 94fd6e4..0000000 --- a/resources/fontawesome/svgs/solid/hand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handcuffs.svg b/resources/fontawesome/svgs/solid/handcuffs.svg deleted file mode 100644 index ad5e311..0000000 --- a/resources/fontawesome/svgs/solid/handcuffs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-asl-interpreting.svg b/resources/fontawesome/svgs/solid/hands-asl-interpreting.svg deleted file mode 100644 index 88f6a6f..0000000 --- a/resources/fontawesome/svgs/solid/hands-asl-interpreting.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-bound.svg b/resources/fontawesome/svgs/solid/hands-bound.svg deleted file mode 100644 index 50cab79..0000000 --- a/resources/fontawesome/svgs/solid/hands-bound.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-bubbles.svg b/resources/fontawesome/svgs/solid/hands-bubbles.svg deleted file mode 100644 index 793049e..0000000 --- a/resources/fontawesome/svgs/solid/hands-bubbles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-clapping.svg b/resources/fontawesome/svgs/solid/hands-clapping.svg deleted file mode 100644 index c695c41..0000000 --- a/resources/fontawesome/svgs/solid/hands-clapping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-holding-child.svg b/resources/fontawesome/svgs/solid/hands-holding-child.svg deleted file mode 100644 index 276151e..0000000 --- a/resources/fontawesome/svgs/solid/hands-holding-child.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-holding-circle.svg b/resources/fontawesome/svgs/solid/hands-holding-circle.svg deleted file mode 100644 index c33c65b..0000000 --- a/resources/fontawesome/svgs/solid/hands-holding-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-holding.svg b/resources/fontawesome/svgs/solid/hands-holding.svg deleted file mode 100644 index e12be5d..0000000 --- a/resources/fontawesome/svgs/solid/hands-holding.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands-praying.svg b/resources/fontawesome/svgs/solid/hands-praying.svg deleted file mode 100644 index 3936261..0000000 --- a/resources/fontawesome/svgs/solid/hands-praying.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hands.svg b/resources/fontawesome/svgs/solid/hands.svg deleted file mode 100644 index 682b6cd..0000000 --- a/resources/fontawesome/svgs/solid/hands.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handshake-angle.svg b/resources/fontawesome/svgs/solid/handshake-angle.svg deleted file mode 100644 index d8b202d..0000000 --- a/resources/fontawesome/svgs/solid/handshake-angle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handshake-simple-slash.svg b/resources/fontawesome/svgs/solid/handshake-simple-slash.svg deleted file mode 100644 index 1989191..0000000 --- a/resources/fontawesome/svgs/solid/handshake-simple-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handshake-simple.svg b/resources/fontawesome/svgs/solid/handshake-simple.svg deleted file mode 100644 index dd945a0..0000000 --- a/resources/fontawesome/svgs/solid/handshake-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handshake-slash.svg b/resources/fontawesome/svgs/solid/handshake-slash.svg deleted file mode 100644 index e10d2af..0000000 --- a/resources/fontawesome/svgs/solid/handshake-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/handshake.svg b/resources/fontawesome/svgs/solid/handshake.svg deleted file mode 100644 index 82f5b8b..0000000 --- a/resources/fontawesome/svgs/solid/handshake.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hanukiah.svg b/resources/fontawesome/svgs/solid/hanukiah.svg deleted file mode 100644 index 798e463..0000000 --- a/resources/fontawesome/svgs/solid/hanukiah.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hard-drive.svg b/resources/fontawesome/svgs/solid/hard-drive.svg deleted file mode 100644 index 67a2200..0000000 --- a/resources/fontawesome/svgs/solid/hard-drive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hashtag.svg b/resources/fontawesome/svgs/solid/hashtag.svg deleted file mode 100644 index 9a04eda..0000000 --- a/resources/fontawesome/svgs/solid/hashtag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hat-cowboy-side.svg b/resources/fontawesome/svgs/solid/hat-cowboy-side.svg deleted file mode 100644 index 8c6cb6a..0000000 --- a/resources/fontawesome/svgs/solid/hat-cowboy-side.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hat-cowboy.svg b/resources/fontawesome/svgs/solid/hat-cowboy.svg deleted file mode 100644 index 24b10c8..0000000 --- a/resources/fontawesome/svgs/solid/hat-cowboy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hat-wizard.svg b/resources/fontawesome/svgs/solid/hat-wizard.svg deleted file mode 100644 index adb3437..0000000 --- a/resources/fontawesome/svgs/solid/hat-wizard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/head-side-cough-slash.svg b/resources/fontawesome/svgs/solid/head-side-cough-slash.svg deleted file mode 100644 index e38c0bc..0000000 --- a/resources/fontawesome/svgs/solid/head-side-cough-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/head-side-cough.svg b/resources/fontawesome/svgs/solid/head-side-cough.svg deleted file mode 100644 index 24b50d3..0000000 --- a/resources/fontawesome/svgs/solid/head-side-cough.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/head-side-mask.svg b/resources/fontawesome/svgs/solid/head-side-mask.svg deleted file mode 100644 index b049e1a..0000000 --- a/resources/fontawesome/svgs/solid/head-side-mask.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/head-side-virus.svg b/resources/fontawesome/svgs/solid/head-side-virus.svg deleted file mode 100644 index 2d0f89c..0000000 --- a/resources/fontawesome/svgs/solid/head-side-virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heading.svg b/resources/fontawesome/svgs/solid/heading.svg deleted file mode 100644 index f684766..0000000 --- a/resources/fontawesome/svgs/solid/heading.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/headphones-simple.svg b/resources/fontawesome/svgs/solid/headphones-simple.svg deleted file mode 100644 index 0a2f9b8..0000000 --- a/resources/fontawesome/svgs/solid/headphones-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/headphones.svg b/resources/fontawesome/svgs/solid/headphones.svg deleted file mode 100644 index 34c94ed..0000000 --- a/resources/fontawesome/svgs/solid/headphones.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/headset.svg b/resources/fontawesome/svgs/solid/headset.svg deleted file mode 100644 index 4174aab..0000000 --- a/resources/fontawesome/svgs/solid/headset.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-bolt.svg b/resources/fontawesome/svgs/solid/heart-circle-bolt.svg deleted file mode 100644 index 2d484e7..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-bolt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-check.svg b/resources/fontawesome/svgs/solid/heart-circle-check.svg deleted file mode 100644 index b98cceb..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-exclamation.svg b/resources/fontawesome/svgs/solid/heart-circle-exclamation.svg deleted file mode 100644 index defbd4f..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-minus.svg b/resources/fontawesome/svgs/solid/heart-circle-minus.svg deleted file mode 100644 index f3855f3..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-plus.svg b/resources/fontawesome/svgs/solid/heart-circle-plus.svg deleted file mode 100644 index d2f0a1b..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-circle-xmark.svg b/resources/fontawesome/svgs/solid/heart-circle-xmark.svg deleted file mode 100644 index 6d540f1..0000000 --- a/resources/fontawesome/svgs/solid/heart-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-crack.svg b/resources/fontawesome/svgs/solid/heart-crack.svg deleted file mode 100644 index faa6ae6..0000000 --- a/resources/fontawesome/svgs/solid/heart-crack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart-pulse.svg b/resources/fontawesome/svgs/solid/heart-pulse.svg deleted file mode 100644 index d26b6e9..0000000 --- a/resources/fontawesome/svgs/solid/heart-pulse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/heart.svg b/resources/fontawesome/svgs/solid/heart.svg deleted file mode 100644 index 66be76d..0000000 --- a/resources/fontawesome/svgs/solid/heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/helicopter-symbol.svg b/resources/fontawesome/svgs/solid/helicopter-symbol.svg deleted file mode 100644 index b3f9d07..0000000 --- a/resources/fontawesome/svgs/solid/helicopter-symbol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/helicopter.svg b/resources/fontawesome/svgs/solid/helicopter.svg deleted file mode 100644 index e2caf3e..0000000 --- a/resources/fontawesome/svgs/solid/helicopter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/helmet-safety.svg b/resources/fontawesome/svgs/solid/helmet-safety.svg deleted file mode 100644 index 741d3c1..0000000 --- a/resources/fontawesome/svgs/solid/helmet-safety.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/helmet-un.svg b/resources/fontawesome/svgs/solid/helmet-un.svg deleted file mode 100644 index 2a71998..0000000 --- a/resources/fontawesome/svgs/solid/helmet-un.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/highlighter.svg b/resources/fontawesome/svgs/solid/highlighter.svg deleted file mode 100644 index 37a7f7e..0000000 --- a/resources/fontawesome/svgs/solid/highlighter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hill-avalanche.svg b/resources/fontawesome/svgs/solid/hill-avalanche.svg deleted file mode 100644 index 583691c..0000000 --- a/resources/fontawesome/svgs/solid/hill-avalanche.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hill-rockslide.svg b/resources/fontawesome/svgs/solid/hill-rockslide.svg deleted file mode 100644 index 06862a8..0000000 --- a/resources/fontawesome/svgs/solid/hill-rockslide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hippo.svg b/resources/fontawesome/svgs/solid/hippo.svg deleted file mode 100644 index bb0e7b7..0000000 --- a/resources/fontawesome/svgs/solid/hippo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hockey-puck.svg b/resources/fontawesome/svgs/solid/hockey-puck.svg deleted file mode 100644 index 3b5fe29..0000000 --- a/resources/fontawesome/svgs/solid/hockey-puck.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/holly-berry.svg b/resources/fontawesome/svgs/solid/holly-berry.svg deleted file mode 100644 index 3bc6ca3..0000000 --- a/resources/fontawesome/svgs/solid/holly-berry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/horse-head.svg b/resources/fontawesome/svgs/solid/horse-head.svg deleted file mode 100644 index 9d97bdf..0000000 --- a/resources/fontawesome/svgs/solid/horse-head.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/horse.svg b/resources/fontawesome/svgs/solid/horse.svg deleted file mode 100644 index 065b9e5..0000000 --- a/resources/fontawesome/svgs/solid/horse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hospital-user.svg b/resources/fontawesome/svgs/solid/hospital-user.svg deleted file mode 100644 index e9e29f9..0000000 --- a/resources/fontawesome/svgs/solid/hospital-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hospital.svg b/resources/fontawesome/svgs/solid/hospital.svg deleted file mode 100644 index d1cb794..0000000 --- a/resources/fontawesome/svgs/solid/hospital.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hot-tub-person.svg b/resources/fontawesome/svgs/solid/hot-tub-person.svg deleted file mode 100644 index aa14308..0000000 --- a/resources/fontawesome/svgs/solid/hot-tub-person.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hotdog.svg b/resources/fontawesome/svgs/solid/hotdog.svg deleted file mode 100644 index e483ba9..0000000 --- a/resources/fontawesome/svgs/solid/hotdog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hotel.svg b/resources/fontawesome/svgs/solid/hotel.svg deleted file mode 100644 index 235c2de..0000000 --- a/resources/fontawesome/svgs/solid/hotel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hourglass-end.svg b/resources/fontawesome/svgs/solid/hourglass-end.svg deleted file mode 100644 index 1712d62..0000000 --- a/resources/fontawesome/svgs/solid/hourglass-end.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hourglass-half.svg b/resources/fontawesome/svgs/solid/hourglass-half.svg deleted file mode 100644 index a0f8fb0..0000000 --- a/resources/fontawesome/svgs/solid/hourglass-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hourglass-start.svg b/resources/fontawesome/svgs/solid/hourglass-start.svg deleted file mode 100644 index 28fa24f..0000000 --- a/resources/fontawesome/svgs/solid/hourglass-start.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hourglass.svg b/resources/fontawesome/svgs/solid/hourglass.svg deleted file mode 100644 index ab09f44..0000000 --- a/resources/fontawesome/svgs/solid/hourglass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-chimney-crack.svg b/resources/fontawesome/svgs/solid/house-chimney-crack.svg deleted file mode 100644 index 03ef78f..0000000 --- a/resources/fontawesome/svgs/solid/house-chimney-crack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-chimney-medical.svg b/resources/fontawesome/svgs/solid/house-chimney-medical.svg deleted file mode 100644 index ea35869..0000000 --- a/resources/fontawesome/svgs/solid/house-chimney-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-chimney-user.svg b/resources/fontawesome/svgs/solid/house-chimney-user.svg deleted file mode 100644 index 3c7ac4a..0000000 --- a/resources/fontawesome/svgs/solid/house-chimney-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-chimney-window.svg b/resources/fontawesome/svgs/solid/house-chimney-window.svg deleted file mode 100644 index 3d98cc5..0000000 --- a/resources/fontawesome/svgs/solid/house-chimney-window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-chimney.svg b/resources/fontawesome/svgs/solid/house-chimney.svg deleted file mode 100644 index 283705c..0000000 --- a/resources/fontawesome/svgs/solid/house-chimney.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-circle-check.svg b/resources/fontawesome/svgs/solid/house-circle-check.svg deleted file mode 100644 index d7f24e2..0000000 --- a/resources/fontawesome/svgs/solid/house-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-circle-exclamation.svg b/resources/fontawesome/svgs/solid/house-circle-exclamation.svg deleted file mode 100644 index 48d82a7..0000000 --- a/resources/fontawesome/svgs/solid/house-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-circle-xmark.svg b/resources/fontawesome/svgs/solid/house-circle-xmark.svg deleted file mode 100644 index 4064862..0000000 --- a/resources/fontawesome/svgs/solid/house-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-crack.svg b/resources/fontawesome/svgs/solid/house-crack.svg deleted file mode 100644 index 12cc3b3..0000000 --- a/resources/fontawesome/svgs/solid/house-crack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-fire.svg b/resources/fontawesome/svgs/solid/house-fire.svg deleted file mode 100644 index c787945..0000000 --- a/resources/fontawesome/svgs/solid/house-fire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-flag.svg b/resources/fontawesome/svgs/solid/house-flag.svg deleted file mode 100644 index 8940f11..0000000 --- a/resources/fontawesome/svgs/solid/house-flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-flood-water-circle-arrow-right.svg b/resources/fontawesome/svgs/solid/house-flood-water-circle-arrow-right.svg deleted file mode 100644 index 00b658a..0000000 --- a/resources/fontawesome/svgs/solid/house-flood-water-circle-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-flood-water.svg b/resources/fontawesome/svgs/solid/house-flood-water.svg deleted file mode 100644 index 5f9ee00..0000000 --- a/resources/fontawesome/svgs/solid/house-flood-water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-laptop.svg b/resources/fontawesome/svgs/solid/house-laptop.svg deleted file mode 100644 index 1a6c859..0000000 --- a/resources/fontawesome/svgs/solid/house-laptop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-lock.svg b/resources/fontawesome/svgs/solid/house-lock.svg deleted file mode 100644 index 25f758a..0000000 --- a/resources/fontawesome/svgs/solid/house-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-medical-circle-check.svg b/resources/fontawesome/svgs/solid/house-medical-circle-check.svg deleted file mode 100644 index 1379c9e..0000000 --- a/resources/fontawesome/svgs/solid/house-medical-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-medical-circle-exclamation.svg b/resources/fontawesome/svgs/solid/house-medical-circle-exclamation.svg deleted file mode 100644 index 4b6d7eb..0000000 --- a/resources/fontawesome/svgs/solid/house-medical-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-medical-circle-xmark.svg b/resources/fontawesome/svgs/solid/house-medical-circle-xmark.svg deleted file mode 100644 index e56d1db..0000000 --- a/resources/fontawesome/svgs/solid/house-medical-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-medical-flag.svg b/resources/fontawesome/svgs/solid/house-medical-flag.svg deleted file mode 100644 index 6ab0a54..0000000 --- a/resources/fontawesome/svgs/solid/house-medical-flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-medical.svg b/resources/fontawesome/svgs/solid/house-medical.svg deleted file mode 100644 index bb39f74..0000000 --- a/resources/fontawesome/svgs/solid/house-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-signal.svg b/resources/fontawesome/svgs/solid/house-signal.svg deleted file mode 100644 index ea20512..0000000 --- a/resources/fontawesome/svgs/solid/house-signal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-tsunami.svg b/resources/fontawesome/svgs/solid/house-tsunami.svg deleted file mode 100644 index 46d4666..0000000 --- a/resources/fontawesome/svgs/solid/house-tsunami.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house-user.svg b/resources/fontawesome/svgs/solid/house-user.svg deleted file mode 100644 index 3661257..0000000 --- a/resources/fontawesome/svgs/solid/house-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/house.svg b/resources/fontawesome/svgs/solid/house.svg deleted file mode 100644 index a180cb4..0000000 --- a/resources/fontawesome/svgs/solid/house.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hryvnia-sign.svg b/resources/fontawesome/svgs/solid/hryvnia-sign.svg deleted file mode 100644 index 4f6175b..0000000 --- a/resources/fontawesome/svgs/solid/hryvnia-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/hurricane.svg b/resources/fontawesome/svgs/solid/hurricane.svg deleted file mode 100644 index daa0e7d..0000000 --- a/resources/fontawesome/svgs/solid/hurricane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/i-cursor.svg b/resources/fontawesome/svgs/solid/i-cursor.svg deleted file mode 100644 index b03b8bd..0000000 --- a/resources/fontawesome/svgs/solid/i-cursor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/i.svg b/resources/fontawesome/svgs/solid/i.svg deleted file mode 100644 index 821239c..0000000 --- a/resources/fontawesome/svgs/solid/i.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ice-cream.svg b/resources/fontawesome/svgs/solid/ice-cream.svg deleted file mode 100644 index ead8fbb..0000000 --- a/resources/fontawesome/svgs/solid/ice-cream.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/icicles.svg b/resources/fontawesome/svgs/solid/icicles.svg deleted file mode 100644 index 7e4eda2..0000000 --- a/resources/fontawesome/svgs/solid/icicles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/icons.svg b/resources/fontawesome/svgs/solid/icons.svg deleted file mode 100644 index 2a333b4..0000000 --- a/resources/fontawesome/svgs/solid/icons.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/id-badge.svg b/resources/fontawesome/svgs/solid/id-badge.svg deleted file mode 100644 index 198e06e..0000000 --- a/resources/fontawesome/svgs/solid/id-badge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/id-card-clip.svg b/resources/fontawesome/svgs/solid/id-card-clip.svg deleted file mode 100644 index b7dabb3..0000000 --- a/resources/fontawesome/svgs/solid/id-card-clip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/id-card.svg b/resources/fontawesome/svgs/solid/id-card.svg deleted file mode 100644 index 1df5174..0000000 --- a/resources/fontawesome/svgs/solid/id-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/igloo.svg b/resources/fontawesome/svgs/solid/igloo.svg deleted file mode 100644 index d207851..0000000 --- a/resources/fontawesome/svgs/solid/igloo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/image-portrait.svg b/resources/fontawesome/svgs/solid/image-portrait.svg deleted file mode 100644 index 995a400..0000000 --- a/resources/fontawesome/svgs/solid/image-portrait.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/image.svg b/resources/fontawesome/svgs/solid/image.svg deleted file mode 100644 index 6c84f25..0000000 --- a/resources/fontawesome/svgs/solid/image.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/images.svg b/resources/fontawesome/svgs/solid/images.svg deleted file mode 100644 index 34d4117..0000000 --- a/resources/fontawesome/svgs/solid/images.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/inbox.svg b/resources/fontawesome/svgs/solid/inbox.svg deleted file mode 100644 index b713ab6..0000000 --- a/resources/fontawesome/svgs/solid/inbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/indent.svg b/resources/fontawesome/svgs/solid/indent.svg deleted file mode 100644 index 57a0cb3..0000000 --- a/resources/fontawesome/svgs/solid/indent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/indian-rupee-sign.svg b/resources/fontawesome/svgs/solid/indian-rupee-sign.svg deleted file mode 100644 index d9795f3..0000000 --- a/resources/fontawesome/svgs/solid/indian-rupee-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/industry.svg b/resources/fontawesome/svgs/solid/industry.svg deleted file mode 100644 index aa3465a..0000000 --- a/resources/fontawesome/svgs/solid/industry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/infinity.svg b/resources/fontawesome/svgs/solid/infinity.svg deleted file mode 100644 index bd408e6..0000000 --- a/resources/fontawesome/svgs/solid/infinity.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/info.svg b/resources/fontawesome/svgs/solid/info.svg deleted file mode 100644 index 1c9b64b..0000000 --- a/resources/fontawesome/svgs/solid/info.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/italic.svg b/resources/fontawesome/svgs/solid/italic.svg deleted file mode 100644 index 62b6522..0000000 --- a/resources/fontawesome/svgs/solid/italic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/j.svg b/resources/fontawesome/svgs/solid/j.svg deleted file mode 100644 index 22d2a8c..0000000 --- a/resources/fontawesome/svgs/solid/j.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jar-wheat.svg b/resources/fontawesome/svgs/solid/jar-wheat.svg deleted file mode 100644 index ddf0ca0..0000000 --- a/resources/fontawesome/svgs/solid/jar-wheat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jar.svg b/resources/fontawesome/svgs/solid/jar.svg deleted file mode 100644 index b9c9414..0000000 --- a/resources/fontawesome/svgs/solid/jar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jedi.svg b/resources/fontawesome/svgs/solid/jedi.svg deleted file mode 100644 index 303ea0f..0000000 --- a/resources/fontawesome/svgs/solid/jedi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jet-fighter-up.svg b/resources/fontawesome/svgs/solid/jet-fighter-up.svg deleted file mode 100644 index d33de13..0000000 --- a/resources/fontawesome/svgs/solid/jet-fighter-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jet-fighter.svg b/resources/fontawesome/svgs/solid/jet-fighter.svg deleted file mode 100644 index caa3ce8..0000000 --- a/resources/fontawesome/svgs/solid/jet-fighter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/joint.svg b/resources/fontawesome/svgs/solid/joint.svg deleted file mode 100644 index 191e510..0000000 --- a/resources/fontawesome/svgs/solid/joint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/jug-detergent.svg b/resources/fontawesome/svgs/solid/jug-detergent.svg deleted file mode 100644 index 06b5826..0000000 --- a/resources/fontawesome/svgs/solid/jug-detergent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/k.svg b/resources/fontawesome/svgs/solid/k.svg deleted file mode 100644 index bacc71b..0000000 --- a/resources/fontawesome/svgs/solid/k.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/kaaba.svg b/resources/fontawesome/svgs/solid/kaaba.svg deleted file mode 100644 index aed6628..0000000 --- a/resources/fontawesome/svgs/solid/kaaba.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/key.svg b/resources/fontawesome/svgs/solid/key.svg deleted file mode 100644 index 62fd10a..0000000 --- a/resources/fontawesome/svgs/solid/key.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/keyboard.svg b/resources/fontawesome/svgs/solid/keyboard.svg deleted file mode 100644 index 0747d3c..0000000 --- a/resources/fontawesome/svgs/solid/keyboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/khanda.svg b/resources/fontawesome/svgs/solid/khanda.svg deleted file mode 100644 index f51e751..0000000 --- a/resources/fontawesome/svgs/solid/khanda.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/kip-sign.svg b/resources/fontawesome/svgs/solid/kip-sign.svg deleted file mode 100644 index a52b01d..0000000 --- a/resources/fontawesome/svgs/solid/kip-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/kit-medical.svg b/resources/fontawesome/svgs/solid/kit-medical.svg deleted file mode 100644 index db14ec5..0000000 --- a/resources/fontawesome/svgs/solid/kit-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/kitchen-set.svg b/resources/fontawesome/svgs/solid/kitchen-set.svg deleted file mode 100644 index 3de26ee..0000000 --- a/resources/fontawesome/svgs/solid/kitchen-set.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/kiwi-bird.svg b/resources/fontawesome/svgs/solid/kiwi-bird.svg deleted file mode 100644 index 1311e32..0000000 --- a/resources/fontawesome/svgs/solid/kiwi-bird.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/l.svg b/resources/fontawesome/svgs/solid/l.svg deleted file mode 100644 index f93a506..0000000 --- a/resources/fontawesome/svgs/solid/l.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/land-mine-on.svg b/resources/fontawesome/svgs/solid/land-mine-on.svg deleted file mode 100644 index 8278ed8..0000000 --- a/resources/fontawesome/svgs/solid/land-mine-on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/landmark-dome.svg b/resources/fontawesome/svgs/solid/landmark-dome.svg deleted file mode 100644 index 6b7e407..0000000 --- a/resources/fontawesome/svgs/solid/landmark-dome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/landmark-flag.svg b/resources/fontawesome/svgs/solid/landmark-flag.svg deleted file mode 100644 index 10497a4..0000000 --- a/resources/fontawesome/svgs/solid/landmark-flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/landmark.svg b/resources/fontawesome/svgs/solid/landmark.svg deleted file mode 100644 index 2099be4..0000000 --- a/resources/fontawesome/svgs/solid/landmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/language.svg b/resources/fontawesome/svgs/solid/language.svg deleted file mode 100644 index cf9af4d..0000000 --- a/resources/fontawesome/svgs/solid/language.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/laptop-code.svg b/resources/fontawesome/svgs/solid/laptop-code.svg deleted file mode 100644 index 862ad7e..0000000 --- a/resources/fontawesome/svgs/solid/laptop-code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/laptop-file.svg b/resources/fontawesome/svgs/solid/laptop-file.svg deleted file mode 100644 index 9bad1d8..0000000 --- a/resources/fontawesome/svgs/solid/laptop-file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/laptop-medical.svg b/resources/fontawesome/svgs/solid/laptop-medical.svg deleted file mode 100644 index 67d63ec..0000000 --- a/resources/fontawesome/svgs/solid/laptop-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/laptop.svg b/resources/fontawesome/svgs/solid/laptop.svg deleted file mode 100644 index 42aac45..0000000 --- a/resources/fontawesome/svgs/solid/laptop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lari-sign.svg b/resources/fontawesome/svgs/solid/lari-sign.svg deleted file mode 100644 index 3277e32..0000000 --- a/resources/fontawesome/svgs/solid/lari-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/layer-group.svg b/resources/fontawesome/svgs/solid/layer-group.svg deleted file mode 100644 index 3c7138b..0000000 --- a/resources/fontawesome/svgs/solid/layer-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/leaf.svg b/resources/fontawesome/svgs/solid/leaf.svg deleted file mode 100644 index 80f9dd9..0000000 --- a/resources/fontawesome/svgs/solid/leaf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/left-long.svg b/resources/fontawesome/svgs/solid/left-long.svg deleted file mode 100644 index a6c5043..0000000 --- a/resources/fontawesome/svgs/solid/left-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/left-right.svg b/resources/fontawesome/svgs/solid/left-right.svg deleted file mode 100644 index 638b484..0000000 --- a/resources/fontawesome/svgs/solid/left-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lemon.svg b/resources/fontawesome/svgs/solid/lemon.svg deleted file mode 100644 index d7708ed..0000000 --- a/resources/fontawesome/svgs/solid/lemon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/less-than-equal.svg b/resources/fontawesome/svgs/solid/less-than-equal.svg deleted file mode 100644 index f4c5148..0000000 --- a/resources/fontawesome/svgs/solid/less-than-equal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/less-than.svg b/resources/fontawesome/svgs/solid/less-than.svg deleted file mode 100644 index 767bebd..0000000 --- a/resources/fontawesome/svgs/solid/less-than.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/life-ring.svg b/resources/fontawesome/svgs/solid/life-ring.svg deleted file mode 100644 index a5132b3..0000000 --- a/resources/fontawesome/svgs/solid/life-ring.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lightbulb.svg b/resources/fontawesome/svgs/solid/lightbulb.svg deleted file mode 100644 index 0aef257..0000000 --- a/resources/fontawesome/svgs/solid/lightbulb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lines-leaning.svg b/resources/fontawesome/svgs/solid/lines-leaning.svg deleted file mode 100644 index d1912d1..0000000 --- a/resources/fontawesome/svgs/solid/lines-leaning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/link-slash.svg b/resources/fontawesome/svgs/solid/link-slash.svg deleted file mode 100644 index 61c1c3e..0000000 --- a/resources/fontawesome/svgs/solid/link-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/link.svg b/resources/fontawesome/svgs/solid/link.svg deleted file mode 100644 index a25ba92..0000000 --- a/resources/fontawesome/svgs/solid/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lira-sign.svg b/resources/fontawesome/svgs/solid/lira-sign.svg deleted file mode 100644 index aceea7c..0000000 --- a/resources/fontawesome/svgs/solid/lira-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/list-check.svg b/resources/fontawesome/svgs/solid/list-check.svg deleted file mode 100644 index afad4b4..0000000 --- a/resources/fontawesome/svgs/solid/list-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/list-ol.svg b/resources/fontawesome/svgs/solid/list-ol.svg deleted file mode 100644 index 93616e6..0000000 --- a/resources/fontawesome/svgs/solid/list-ol.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/list-ul.svg b/resources/fontawesome/svgs/solid/list-ul.svg deleted file mode 100644 index 6119e2b..0000000 --- a/resources/fontawesome/svgs/solid/list-ul.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/list.svg b/resources/fontawesome/svgs/solid/list.svg deleted file mode 100644 index cb92026..0000000 --- a/resources/fontawesome/svgs/solid/list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/litecoin-sign.svg b/resources/fontawesome/svgs/solid/litecoin-sign.svg deleted file mode 100644 index 220b312..0000000 --- a/resources/fontawesome/svgs/solid/litecoin-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/location-arrow.svg b/resources/fontawesome/svgs/solid/location-arrow.svg deleted file mode 100644 index 2126f4d..0000000 --- a/resources/fontawesome/svgs/solid/location-arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/location-crosshairs.svg b/resources/fontawesome/svgs/solid/location-crosshairs.svg deleted file mode 100644 index b130ea4..0000000 --- a/resources/fontawesome/svgs/solid/location-crosshairs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/location-dot.svg b/resources/fontawesome/svgs/solid/location-dot.svg deleted file mode 100644 index bf49c06..0000000 --- a/resources/fontawesome/svgs/solid/location-dot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/location-pin-lock.svg b/resources/fontawesome/svgs/solid/location-pin-lock.svg deleted file mode 100644 index 0a68114..0000000 --- a/resources/fontawesome/svgs/solid/location-pin-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/location-pin.svg b/resources/fontawesome/svgs/solid/location-pin.svg deleted file mode 100644 index 43a1cab..0000000 --- a/resources/fontawesome/svgs/solid/location-pin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lock-open.svg b/resources/fontawesome/svgs/solid/lock-open.svg deleted file mode 100644 index 82f6b1a..0000000 --- a/resources/fontawesome/svgs/solid/lock-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lock.svg b/resources/fontawesome/svgs/solid/lock.svg deleted file mode 100644 index a094fad..0000000 --- a/resources/fontawesome/svgs/solid/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/locust.svg b/resources/fontawesome/svgs/solid/locust.svg deleted file mode 100644 index 5039cac..0000000 --- a/resources/fontawesome/svgs/solid/locust.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lungs-virus.svg b/resources/fontawesome/svgs/solid/lungs-virus.svg deleted file mode 100644 index 4c76401..0000000 --- a/resources/fontawesome/svgs/solid/lungs-virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/lungs.svg b/resources/fontawesome/svgs/solid/lungs.svg deleted file mode 100644 index 308aa9a..0000000 --- a/resources/fontawesome/svgs/solid/lungs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/m.svg b/resources/fontawesome/svgs/solid/m.svg deleted file mode 100644 index c1e5d11..0000000 --- a/resources/fontawesome/svgs/solid/m.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnet.svg b/resources/fontawesome/svgs/solid/magnet.svg deleted file mode 100644 index fbc81cc..0000000 --- a/resources/fontawesome/svgs/solid/magnet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-arrow-right.svg b/resources/fontawesome/svgs/solid/magnifying-glass-arrow-right.svg deleted file mode 100644 index da7dcdd..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-chart.svg b/resources/fontawesome/svgs/solid/magnifying-glass-chart.svg deleted file mode 100644 index 3624471..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-chart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-dollar.svg b/resources/fontawesome/svgs/solid/magnifying-glass-dollar.svg deleted file mode 100644 index 0d7c473..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-location.svg b/resources/fontawesome/svgs/solid/magnifying-glass-location.svg deleted file mode 100644 index 9e61bb1..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-location.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-minus.svg b/resources/fontawesome/svgs/solid/magnifying-glass-minus.svg deleted file mode 100644 index d526287..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass-plus.svg b/resources/fontawesome/svgs/solid/magnifying-glass-plus.svg deleted file mode 100644 index dc04510..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/magnifying-glass.svg b/resources/fontawesome/svgs/solid/magnifying-glass.svg deleted file mode 100644 index 36f6ad1..0000000 --- a/resources/fontawesome/svgs/solid/magnifying-glass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/manat-sign.svg b/resources/fontawesome/svgs/solid/manat-sign.svg deleted file mode 100644 index 821ba63..0000000 --- a/resources/fontawesome/svgs/solid/manat-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/map-location-dot.svg b/resources/fontawesome/svgs/solid/map-location-dot.svg deleted file mode 100644 index 85982da..0000000 --- a/resources/fontawesome/svgs/solid/map-location-dot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/map-location.svg b/resources/fontawesome/svgs/solid/map-location.svg deleted file mode 100644 index 856a1ea..0000000 --- a/resources/fontawesome/svgs/solid/map-location.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/map-pin.svg b/resources/fontawesome/svgs/solid/map-pin.svg deleted file mode 100644 index 4308db0..0000000 --- a/resources/fontawesome/svgs/solid/map-pin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/map.svg b/resources/fontawesome/svgs/solid/map.svg deleted file mode 100644 index b49f5cd..0000000 --- a/resources/fontawesome/svgs/solid/map.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/marker.svg b/resources/fontawesome/svgs/solid/marker.svg deleted file mode 100644 index 0e8293e..0000000 --- a/resources/fontawesome/svgs/solid/marker.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-and-venus-burst.svg b/resources/fontawesome/svgs/solid/mars-and-venus-burst.svg deleted file mode 100644 index b5b386d..0000000 --- a/resources/fontawesome/svgs/solid/mars-and-venus-burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-and-venus.svg b/resources/fontawesome/svgs/solid/mars-and-venus.svg deleted file mode 100644 index c8ecc22..0000000 --- a/resources/fontawesome/svgs/solid/mars-and-venus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-double.svg b/resources/fontawesome/svgs/solid/mars-double.svg deleted file mode 100644 index a1b3875..0000000 --- a/resources/fontawesome/svgs/solid/mars-double.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-stroke-right.svg b/resources/fontawesome/svgs/solid/mars-stroke-right.svg deleted file mode 100644 index 2274fe5..0000000 --- a/resources/fontawesome/svgs/solid/mars-stroke-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-stroke-up.svg b/resources/fontawesome/svgs/solid/mars-stroke-up.svg deleted file mode 100644 index 676dfbe..0000000 --- a/resources/fontawesome/svgs/solid/mars-stroke-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars-stroke.svg b/resources/fontawesome/svgs/solid/mars-stroke.svg deleted file mode 100644 index 8913783..0000000 --- a/resources/fontawesome/svgs/solid/mars-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mars.svg b/resources/fontawesome/svgs/solid/mars.svg deleted file mode 100644 index 22f05a3..0000000 --- a/resources/fontawesome/svgs/solid/mars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/martini-glass-citrus.svg b/resources/fontawesome/svgs/solid/martini-glass-citrus.svg deleted file mode 100644 index 80a4a2b..0000000 --- a/resources/fontawesome/svgs/solid/martini-glass-citrus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/martini-glass-empty.svg b/resources/fontawesome/svgs/solid/martini-glass-empty.svg deleted file mode 100644 index 1bc5c21..0000000 --- a/resources/fontawesome/svgs/solid/martini-glass-empty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/martini-glass.svg b/resources/fontawesome/svgs/solid/martini-glass.svg deleted file mode 100644 index 1cd3f17..0000000 --- a/resources/fontawesome/svgs/solid/martini-glass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mask-face.svg b/resources/fontawesome/svgs/solid/mask-face.svg deleted file mode 100644 index 214294a..0000000 --- a/resources/fontawesome/svgs/solid/mask-face.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mask-ventilator.svg b/resources/fontawesome/svgs/solid/mask-ventilator.svg deleted file mode 100644 index 5060429..0000000 --- a/resources/fontawesome/svgs/solid/mask-ventilator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mask.svg b/resources/fontawesome/svgs/solid/mask.svg deleted file mode 100644 index 98f0bdd..0000000 --- a/resources/fontawesome/svgs/solid/mask.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/masks-theater.svg b/resources/fontawesome/svgs/solid/masks-theater.svg deleted file mode 100644 index 69ce99d..0000000 --- a/resources/fontawesome/svgs/solid/masks-theater.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mattress-pillow.svg b/resources/fontawesome/svgs/solid/mattress-pillow.svg deleted file mode 100644 index 1eb549d..0000000 --- a/resources/fontawesome/svgs/solid/mattress-pillow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/maximize.svg b/resources/fontawesome/svgs/solid/maximize.svg deleted file mode 100644 index 584d56b..0000000 --- a/resources/fontawesome/svgs/solid/maximize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/medal.svg b/resources/fontawesome/svgs/solid/medal.svg deleted file mode 100644 index eda5421..0000000 --- a/resources/fontawesome/svgs/solid/medal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/memory.svg b/resources/fontawesome/svgs/solid/memory.svg deleted file mode 100644 index 1ae4c01..0000000 --- a/resources/fontawesome/svgs/solid/memory.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/menorah.svg b/resources/fontawesome/svgs/solid/menorah.svg deleted file mode 100644 index f2a1a65..0000000 --- a/resources/fontawesome/svgs/solid/menorah.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mercury.svg b/resources/fontawesome/svgs/solid/mercury.svg deleted file mode 100644 index 4221438..0000000 --- a/resources/fontawesome/svgs/solid/mercury.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/message.svg b/resources/fontawesome/svgs/solid/message.svg deleted file mode 100644 index 3d8aee6..0000000 --- a/resources/fontawesome/svgs/solid/message.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/meteor.svg b/resources/fontawesome/svgs/solid/meteor.svg deleted file mode 100644 index 0f08a24..0000000 --- a/resources/fontawesome/svgs/solid/meteor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microchip.svg b/resources/fontawesome/svgs/solid/microchip.svg deleted file mode 100644 index 11c4d62..0000000 --- a/resources/fontawesome/svgs/solid/microchip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microphone-lines-slash.svg b/resources/fontawesome/svgs/solid/microphone-lines-slash.svg deleted file mode 100644 index ba101b9..0000000 --- a/resources/fontawesome/svgs/solid/microphone-lines-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microphone-lines.svg b/resources/fontawesome/svgs/solid/microphone-lines.svg deleted file mode 100644 index 56a3f83..0000000 --- a/resources/fontawesome/svgs/solid/microphone-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microphone-slash.svg b/resources/fontawesome/svgs/solid/microphone-slash.svg deleted file mode 100644 index 5d91a15..0000000 --- a/resources/fontawesome/svgs/solid/microphone-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microphone.svg b/resources/fontawesome/svgs/solid/microphone.svg deleted file mode 100644 index c99dbad..0000000 --- a/resources/fontawesome/svgs/solid/microphone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/microscope.svg b/resources/fontawesome/svgs/solid/microscope.svg deleted file mode 100644 index 690bed5..0000000 --- a/resources/fontawesome/svgs/solid/microscope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mill-sign.svg b/resources/fontawesome/svgs/solid/mill-sign.svg deleted file mode 100644 index 2c52842..0000000 --- a/resources/fontawesome/svgs/solid/mill-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/minimize.svg b/resources/fontawesome/svgs/solid/minimize.svg deleted file mode 100644 index 7dea413..0000000 --- a/resources/fontawesome/svgs/solid/minimize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/minus.svg b/resources/fontawesome/svgs/solid/minus.svg deleted file mode 100644 index c46b820..0000000 --- a/resources/fontawesome/svgs/solid/minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mitten.svg b/resources/fontawesome/svgs/solid/mitten.svg deleted file mode 100644 index 831d86e..0000000 --- a/resources/fontawesome/svgs/solid/mitten.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mobile-button.svg b/resources/fontawesome/svgs/solid/mobile-button.svg deleted file mode 100644 index 43bd566..0000000 --- a/resources/fontawesome/svgs/solid/mobile-button.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mobile-retro.svg b/resources/fontawesome/svgs/solid/mobile-retro.svg deleted file mode 100644 index 2219937..0000000 --- a/resources/fontawesome/svgs/solid/mobile-retro.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mobile-screen-button.svg b/resources/fontawesome/svgs/solid/mobile-screen-button.svg deleted file mode 100644 index 638f121..0000000 --- a/resources/fontawesome/svgs/solid/mobile-screen-button.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mobile-screen.svg b/resources/fontawesome/svgs/solid/mobile-screen.svg deleted file mode 100644 index 527dd33..0000000 --- a/resources/fontawesome/svgs/solid/mobile-screen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mobile.svg b/resources/fontawesome/svgs/solid/mobile.svg deleted file mode 100644 index 0422763..0000000 --- a/resources/fontawesome/svgs/solid/mobile.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-1-wave.svg b/resources/fontawesome/svgs/solid/money-bill-1-wave.svg deleted file mode 100644 index 009e8ba..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-1-wave.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-1.svg b/resources/fontawesome/svgs/solid/money-bill-1.svg deleted file mode 100644 index ddda082..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-transfer.svg b/resources/fontawesome/svgs/solid/money-bill-transfer.svg deleted file mode 100644 index ba9cd8d..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-transfer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-trend-up.svg b/resources/fontawesome/svgs/solid/money-bill-trend-up.svg deleted file mode 100644 index 15691af..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-trend-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-wave.svg b/resources/fontawesome/svgs/solid/money-bill-wave.svg deleted file mode 100644 index 573a387..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-wave.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill-wheat.svg b/resources/fontawesome/svgs/solid/money-bill-wheat.svg deleted file mode 100644 index d1837d1..0000000 --- a/resources/fontawesome/svgs/solid/money-bill-wheat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bill.svg b/resources/fontawesome/svgs/solid/money-bill.svg deleted file mode 100644 index 6ac0412..0000000 --- a/resources/fontawesome/svgs/solid/money-bill.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-bills.svg b/resources/fontawesome/svgs/solid/money-bills.svg deleted file mode 100644 index fdeab04..0000000 --- a/resources/fontawesome/svgs/solid/money-bills.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-check-dollar.svg b/resources/fontawesome/svgs/solid/money-check-dollar.svg deleted file mode 100644 index 1c52929..0000000 --- a/resources/fontawesome/svgs/solid/money-check-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/money-check.svg b/resources/fontawesome/svgs/solid/money-check.svg deleted file mode 100644 index 62edb6a..0000000 --- a/resources/fontawesome/svgs/solid/money-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/monument.svg b/resources/fontawesome/svgs/solid/monument.svg deleted file mode 100644 index bb67a46..0000000 --- a/resources/fontawesome/svgs/solid/monument.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/moon.svg b/resources/fontawesome/svgs/solid/moon.svg deleted file mode 100644 index 0de7b24..0000000 --- a/resources/fontawesome/svgs/solid/moon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mortar-pestle.svg b/resources/fontawesome/svgs/solid/mortar-pestle.svg deleted file mode 100644 index 7763e73..0000000 --- a/resources/fontawesome/svgs/solid/mortar-pestle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mosque.svg b/resources/fontawesome/svgs/solid/mosque.svg deleted file mode 100644 index e114275..0000000 --- a/resources/fontawesome/svgs/solid/mosque.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mosquito-net.svg b/resources/fontawesome/svgs/solid/mosquito-net.svg deleted file mode 100644 index e2b2d76..0000000 --- a/resources/fontawesome/svgs/solid/mosquito-net.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mosquito.svg b/resources/fontawesome/svgs/solid/mosquito.svg deleted file mode 100644 index f5e5e55..0000000 --- a/resources/fontawesome/svgs/solid/mosquito.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/motorcycle.svg b/resources/fontawesome/svgs/solid/motorcycle.svg deleted file mode 100644 index f653537..0000000 --- a/resources/fontawesome/svgs/solid/motorcycle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mound.svg b/resources/fontawesome/svgs/solid/mound.svg deleted file mode 100644 index 3362a93..0000000 --- a/resources/fontawesome/svgs/solid/mound.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mountain-city.svg b/resources/fontawesome/svgs/solid/mountain-city.svg deleted file mode 100644 index e3f160e..0000000 --- a/resources/fontawesome/svgs/solid/mountain-city.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mountain-sun.svg b/resources/fontawesome/svgs/solid/mountain-sun.svg deleted file mode 100644 index d6be8e3..0000000 --- a/resources/fontawesome/svgs/solid/mountain-sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mountain.svg b/resources/fontawesome/svgs/solid/mountain.svg deleted file mode 100644 index 41d24b7..0000000 --- a/resources/fontawesome/svgs/solid/mountain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mug-hot.svg b/resources/fontawesome/svgs/solid/mug-hot.svg deleted file mode 100644 index 572e58e..0000000 --- a/resources/fontawesome/svgs/solid/mug-hot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/mug-saucer.svg b/resources/fontawesome/svgs/solid/mug-saucer.svg deleted file mode 100644 index 287ae58..0000000 --- a/resources/fontawesome/svgs/solid/mug-saucer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/music.svg b/resources/fontawesome/svgs/solid/music.svg deleted file mode 100644 index a195b69..0000000 --- a/resources/fontawesome/svgs/solid/music.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/n.svg b/resources/fontawesome/svgs/solid/n.svg deleted file mode 100644 index fb48a82..0000000 --- a/resources/fontawesome/svgs/solid/n.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/naira-sign.svg b/resources/fontawesome/svgs/solid/naira-sign.svg deleted file mode 100644 index 2c0b035..0000000 --- a/resources/fontawesome/svgs/solid/naira-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/network-wired.svg b/resources/fontawesome/svgs/solid/network-wired.svg deleted file mode 100644 index b92bcf9..0000000 --- a/resources/fontawesome/svgs/solid/network-wired.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/neuter.svg b/resources/fontawesome/svgs/solid/neuter.svg deleted file mode 100644 index 086ca7b..0000000 --- a/resources/fontawesome/svgs/solid/neuter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/newspaper.svg b/resources/fontawesome/svgs/solid/newspaper.svg deleted file mode 100644 index c748291..0000000 --- a/resources/fontawesome/svgs/solid/newspaper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/not-equal.svg b/resources/fontawesome/svgs/solid/not-equal.svg deleted file mode 100644 index f37849a..0000000 --- a/resources/fontawesome/svgs/solid/not-equal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/notdef.svg b/resources/fontawesome/svgs/solid/notdef.svg deleted file mode 100644 index 5010639..0000000 --- a/resources/fontawesome/svgs/solid/notdef.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/note-sticky.svg b/resources/fontawesome/svgs/solid/note-sticky.svg deleted file mode 100644 index de3cd35..0000000 --- a/resources/fontawesome/svgs/solid/note-sticky.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/notes-medical.svg b/resources/fontawesome/svgs/solid/notes-medical.svg deleted file mode 100644 index ab51477..0000000 --- a/resources/fontawesome/svgs/solid/notes-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/o.svg b/resources/fontawesome/svgs/solid/o.svg deleted file mode 100644 index 7d84d4c..0000000 --- a/resources/fontawesome/svgs/solid/o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/object-group.svg b/resources/fontawesome/svgs/solid/object-group.svg deleted file mode 100644 index 9a61dbd..0000000 --- a/resources/fontawesome/svgs/solid/object-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/object-ungroup.svg b/resources/fontawesome/svgs/solid/object-ungroup.svg deleted file mode 100644 index fe90753..0000000 --- a/resources/fontawesome/svgs/solid/object-ungroup.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/oil-can.svg b/resources/fontawesome/svgs/solid/oil-can.svg deleted file mode 100644 index 6289e38..0000000 --- a/resources/fontawesome/svgs/solid/oil-can.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/oil-well.svg b/resources/fontawesome/svgs/solid/oil-well.svg deleted file mode 100644 index d3ccb72..0000000 --- a/resources/fontawesome/svgs/solid/oil-well.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/om.svg b/resources/fontawesome/svgs/solid/om.svg deleted file mode 100644 index ee28726..0000000 --- a/resources/fontawesome/svgs/solid/om.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/otter.svg b/resources/fontawesome/svgs/solid/otter.svg deleted file mode 100644 index 1621697..0000000 --- a/resources/fontawesome/svgs/solid/otter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/outdent.svg b/resources/fontawesome/svgs/solid/outdent.svg deleted file mode 100644 index 5121dc6..0000000 --- a/resources/fontawesome/svgs/solid/outdent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/p.svg b/resources/fontawesome/svgs/solid/p.svg deleted file mode 100644 index 1ff291a..0000000 --- a/resources/fontawesome/svgs/solid/p.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pager.svg b/resources/fontawesome/svgs/solid/pager.svg deleted file mode 100644 index 071ef79..0000000 --- a/resources/fontawesome/svgs/solid/pager.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paint-roller.svg b/resources/fontawesome/svgs/solid/paint-roller.svg deleted file mode 100644 index f4e451e..0000000 --- a/resources/fontawesome/svgs/solid/paint-roller.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paintbrush.svg b/resources/fontawesome/svgs/solid/paintbrush.svg deleted file mode 100644 index 8c9a00d..0000000 --- a/resources/fontawesome/svgs/solid/paintbrush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/palette.svg b/resources/fontawesome/svgs/solid/palette.svg deleted file mode 100644 index 122e162..0000000 --- a/resources/fontawesome/svgs/solid/palette.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pallet.svg b/resources/fontawesome/svgs/solid/pallet.svg deleted file mode 100644 index 9e3b639..0000000 --- a/resources/fontawesome/svgs/solid/pallet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/panorama.svg b/resources/fontawesome/svgs/solid/panorama.svg deleted file mode 100644 index 6a5cb8b..0000000 --- a/resources/fontawesome/svgs/solid/panorama.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paper-plane.svg b/resources/fontawesome/svgs/solid/paper-plane.svg deleted file mode 100644 index de86f47..0000000 --- a/resources/fontawesome/svgs/solid/paper-plane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paperclip.svg b/resources/fontawesome/svgs/solid/paperclip.svg deleted file mode 100644 index 0bfef5a..0000000 --- a/resources/fontawesome/svgs/solid/paperclip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/parachute-box.svg b/resources/fontawesome/svgs/solid/parachute-box.svg deleted file mode 100644 index 70f21f8..0000000 --- a/resources/fontawesome/svgs/solid/parachute-box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paragraph.svg b/resources/fontawesome/svgs/solid/paragraph.svg deleted file mode 100644 index e811afc..0000000 --- a/resources/fontawesome/svgs/solid/paragraph.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/passport.svg b/resources/fontawesome/svgs/solid/passport.svg deleted file mode 100644 index ce2811f..0000000 --- a/resources/fontawesome/svgs/solid/passport.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paste.svg b/resources/fontawesome/svgs/solid/paste.svg deleted file mode 100644 index 707af72..0000000 --- a/resources/fontawesome/svgs/solid/paste.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pause.svg b/resources/fontawesome/svgs/solid/pause.svg deleted file mode 100644 index cc9a15c..0000000 --- a/resources/fontawesome/svgs/solid/pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/paw.svg b/resources/fontawesome/svgs/solid/paw.svg deleted file mode 100644 index 5a91302..0000000 --- a/resources/fontawesome/svgs/solid/paw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/peace.svg b/resources/fontawesome/svgs/solid/peace.svg deleted file mode 100644 index 91044a5..0000000 --- a/resources/fontawesome/svgs/solid/peace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen-clip.svg b/resources/fontawesome/svgs/solid/pen-clip.svg deleted file mode 100644 index a4726ee..0000000 --- a/resources/fontawesome/svgs/solid/pen-clip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen-fancy.svg b/resources/fontawesome/svgs/solid/pen-fancy.svg deleted file mode 100644 index b9e0127..0000000 --- a/resources/fontawesome/svgs/solid/pen-fancy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen-nib.svg b/resources/fontawesome/svgs/solid/pen-nib.svg deleted file mode 100644 index 578037d..0000000 --- a/resources/fontawesome/svgs/solid/pen-nib.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen-ruler.svg b/resources/fontawesome/svgs/solid/pen-ruler.svg deleted file mode 100644 index 29bfd0b..0000000 --- a/resources/fontawesome/svgs/solid/pen-ruler.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen-to-square.svg b/resources/fontawesome/svgs/solid/pen-to-square.svg deleted file mode 100644 index 2b8eab8..0000000 --- a/resources/fontawesome/svgs/solid/pen-to-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pen.svg b/resources/fontawesome/svgs/solid/pen.svg deleted file mode 100644 index 973c511..0000000 --- a/resources/fontawesome/svgs/solid/pen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pencil.svg b/resources/fontawesome/svgs/solid/pencil.svg deleted file mode 100644 index 0cbedc3..0000000 --- a/resources/fontawesome/svgs/solid/pencil.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-arrows.svg b/resources/fontawesome/svgs/solid/people-arrows.svg deleted file mode 100644 index 70dbcb0..0000000 --- a/resources/fontawesome/svgs/solid/people-arrows.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-carry-box.svg b/resources/fontawesome/svgs/solid/people-carry-box.svg deleted file mode 100644 index c027edf..0000000 --- a/resources/fontawesome/svgs/solid/people-carry-box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-group.svg b/resources/fontawesome/svgs/solid/people-group.svg deleted file mode 100644 index b901288..0000000 --- a/resources/fontawesome/svgs/solid/people-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-line.svg b/resources/fontawesome/svgs/solid/people-line.svg deleted file mode 100644 index 8a651c0..0000000 --- a/resources/fontawesome/svgs/solid/people-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-pulling.svg b/resources/fontawesome/svgs/solid/people-pulling.svg deleted file mode 100644 index 959f7cd..0000000 --- a/resources/fontawesome/svgs/solid/people-pulling.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-robbery.svg b/resources/fontawesome/svgs/solid/people-robbery.svg deleted file mode 100644 index fbb3fcf..0000000 --- a/resources/fontawesome/svgs/solid/people-robbery.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/people-roof.svg b/resources/fontawesome/svgs/solid/people-roof.svg deleted file mode 100644 index 9cde503..0000000 --- a/resources/fontawesome/svgs/solid/people-roof.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pepper-hot.svg b/resources/fontawesome/svgs/solid/pepper-hot.svg deleted file mode 100644 index b122488..0000000 --- a/resources/fontawesome/svgs/solid/pepper-hot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/percent.svg b/resources/fontawesome/svgs/solid/percent.svg deleted file mode 100644 index 242e060..0000000 --- a/resources/fontawesome/svgs/solid/percent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-arrow-down-to-line.svg b/resources/fontawesome/svgs/solid/person-arrow-down-to-line.svg deleted file mode 100644 index 54b8f0b..0000000 --- a/resources/fontawesome/svgs/solid/person-arrow-down-to-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-arrow-up-from-line.svg b/resources/fontawesome/svgs/solid/person-arrow-up-from-line.svg deleted file mode 100644 index d9e6451..0000000 --- a/resources/fontawesome/svgs/solid/person-arrow-up-from-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-biking.svg b/resources/fontawesome/svgs/solid/person-biking.svg deleted file mode 100644 index c4ceb9f..0000000 --- a/resources/fontawesome/svgs/solid/person-biking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-booth.svg b/resources/fontawesome/svgs/solid/person-booth.svg deleted file mode 100644 index 9955f09..0000000 --- a/resources/fontawesome/svgs/solid/person-booth.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-breastfeeding.svg b/resources/fontawesome/svgs/solid/person-breastfeeding.svg deleted file mode 100644 index 6bd1b36..0000000 --- a/resources/fontawesome/svgs/solid/person-breastfeeding.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-burst.svg b/resources/fontawesome/svgs/solid/person-burst.svg deleted file mode 100644 index 63eb342..0000000 --- a/resources/fontawesome/svgs/solid/person-burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-cane.svg b/resources/fontawesome/svgs/solid/person-cane.svg deleted file mode 100644 index 09344c4..0000000 --- a/resources/fontawesome/svgs/solid/person-cane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-chalkboard.svg b/resources/fontawesome/svgs/solid/person-chalkboard.svg deleted file mode 100644 index 793e6fc..0000000 --- a/resources/fontawesome/svgs/solid/person-chalkboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-check.svg b/resources/fontawesome/svgs/solid/person-circle-check.svg deleted file mode 100644 index 29f54fe..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-exclamation.svg b/resources/fontawesome/svgs/solid/person-circle-exclamation.svg deleted file mode 100644 index a4dc41d..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-minus.svg b/resources/fontawesome/svgs/solid/person-circle-minus.svg deleted file mode 100644 index bc99611..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-plus.svg b/resources/fontawesome/svgs/solid/person-circle-plus.svg deleted file mode 100644 index c4462be..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-question.svg b/resources/fontawesome/svgs/solid/person-circle-question.svg deleted file mode 100644 index 6d48945..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-circle-xmark.svg b/resources/fontawesome/svgs/solid/person-circle-xmark.svg deleted file mode 100644 index 8581dad..0000000 --- a/resources/fontawesome/svgs/solid/person-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-digging.svg b/resources/fontawesome/svgs/solid/person-digging.svg deleted file mode 100644 index 26cf4b3..0000000 --- a/resources/fontawesome/svgs/solid/person-digging.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-dots-from-line.svg b/resources/fontawesome/svgs/solid/person-dots-from-line.svg deleted file mode 100644 index b08b0ec..0000000 --- a/resources/fontawesome/svgs/solid/person-dots-from-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-dress-burst.svg b/resources/fontawesome/svgs/solid/person-dress-burst.svg deleted file mode 100644 index 8d50c8a..0000000 --- a/resources/fontawesome/svgs/solid/person-dress-burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-dress.svg b/resources/fontawesome/svgs/solid/person-dress.svg deleted file mode 100644 index 2db5695..0000000 --- a/resources/fontawesome/svgs/solid/person-dress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-drowning.svg b/resources/fontawesome/svgs/solid/person-drowning.svg deleted file mode 100644 index 2bc7448..0000000 --- a/resources/fontawesome/svgs/solid/person-drowning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-falling-burst.svg b/resources/fontawesome/svgs/solid/person-falling-burst.svg deleted file mode 100644 index efb289a..0000000 --- a/resources/fontawesome/svgs/solid/person-falling-burst.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-falling.svg b/resources/fontawesome/svgs/solid/person-falling.svg deleted file mode 100644 index fb971ab..0000000 --- a/resources/fontawesome/svgs/solid/person-falling.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-half-dress.svg b/resources/fontawesome/svgs/solid/person-half-dress.svg deleted file mode 100644 index c98591b..0000000 --- a/resources/fontawesome/svgs/solid/person-half-dress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-harassing.svg b/resources/fontawesome/svgs/solid/person-harassing.svg deleted file mode 100644 index eee20fe..0000000 --- a/resources/fontawesome/svgs/solid/person-harassing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-hiking.svg b/resources/fontawesome/svgs/solid/person-hiking.svg deleted file mode 100644 index 0883cdf..0000000 --- a/resources/fontawesome/svgs/solid/person-hiking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-military-pointing.svg b/resources/fontawesome/svgs/solid/person-military-pointing.svg deleted file mode 100644 index 6f71aec..0000000 --- a/resources/fontawesome/svgs/solid/person-military-pointing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-military-rifle.svg b/resources/fontawesome/svgs/solid/person-military-rifle.svg deleted file mode 100644 index ce4d0f7..0000000 --- a/resources/fontawesome/svgs/solid/person-military-rifle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-military-to-person.svg b/resources/fontawesome/svgs/solid/person-military-to-person.svg deleted file mode 100644 index 288b28d..0000000 --- a/resources/fontawesome/svgs/solid/person-military-to-person.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-praying.svg b/resources/fontawesome/svgs/solid/person-praying.svg deleted file mode 100644 index ea6734b..0000000 --- a/resources/fontawesome/svgs/solid/person-praying.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-pregnant.svg b/resources/fontawesome/svgs/solid/person-pregnant.svg deleted file mode 100644 index 5a4a498..0000000 --- a/resources/fontawesome/svgs/solid/person-pregnant.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-rays.svg b/resources/fontawesome/svgs/solid/person-rays.svg deleted file mode 100644 index e55a5d9..0000000 --- a/resources/fontawesome/svgs/solid/person-rays.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-rifle.svg b/resources/fontawesome/svgs/solid/person-rifle.svg deleted file mode 100644 index 8ffd67b..0000000 --- a/resources/fontawesome/svgs/solid/person-rifle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-running.svg b/resources/fontawesome/svgs/solid/person-running.svg deleted file mode 100644 index 9a14174..0000000 --- a/resources/fontawesome/svgs/solid/person-running.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-shelter.svg b/resources/fontawesome/svgs/solid/person-shelter.svg deleted file mode 100644 index 96ec9a4..0000000 --- a/resources/fontawesome/svgs/solid/person-shelter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-skating.svg b/resources/fontawesome/svgs/solid/person-skating.svg deleted file mode 100644 index e7f303c..0000000 --- a/resources/fontawesome/svgs/solid/person-skating.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-skiing-nordic.svg b/resources/fontawesome/svgs/solid/person-skiing-nordic.svg deleted file mode 100644 index e38a01e..0000000 --- a/resources/fontawesome/svgs/solid/person-skiing-nordic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-skiing.svg b/resources/fontawesome/svgs/solid/person-skiing.svg deleted file mode 100644 index 8a6801d..0000000 --- a/resources/fontawesome/svgs/solid/person-skiing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-snowboarding.svg b/resources/fontawesome/svgs/solid/person-snowboarding.svg deleted file mode 100644 index 1cee06b..0000000 --- a/resources/fontawesome/svgs/solid/person-snowboarding.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-swimming.svg b/resources/fontawesome/svgs/solid/person-swimming.svg deleted file mode 100644 index 151d20c..0000000 --- a/resources/fontawesome/svgs/solid/person-swimming.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-through-window.svg b/resources/fontawesome/svgs/solid/person-through-window.svg deleted file mode 100644 index 7c17cb1..0000000 --- a/resources/fontawesome/svgs/solid/person-through-window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking-arrow-loop-left.svg b/resources/fontawesome/svgs/solid/person-walking-arrow-loop-left.svg deleted file mode 100644 index 4d34f73..0000000 --- a/resources/fontawesome/svgs/solid/person-walking-arrow-loop-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking-arrow-right.svg b/resources/fontawesome/svgs/solid/person-walking-arrow-right.svg deleted file mode 100644 index 62eac72..0000000 --- a/resources/fontawesome/svgs/solid/person-walking-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking-dashed-line-arrow-right.svg b/resources/fontawesome/svgs/solid/person-walking-dashed-line-arrow-right.svg deleted file mode 100644 index 4ff5af1..0000000 --- a/resources/fontawesome/svgs/solid/person-walking-dashed-line-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking-luggage.svg b/resources/fontawesome/svgs/solid/person-walking-luggage.svg deleted file mode 100644 index f729a8f..0000000 --- a/resources/fontawesome/svgs/solid/person-walking-luggage.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking-with-cane.svg b/resources/fontawesome/svgs/solid/person-walking-with-cane.svg deleted file mode 100644 index f480212..0000000 --- a/resources/fontawesome/svgs/solid/person-walking-with-cane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person-walking.svg b/resources/fontawesome/svgs/solid/person-walking.svg deleted file mode 100644 index 0c854c9..0000000 --- a/resources/fontawesome/svgs/solid/person-walking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/person.svg b/resources/fontawesome/svgs/solid/person.svg deleted file mode 100644 index 1355260..0000000 --- a/resources/fontawesome/svgs/solid/person.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/peseta-sign.svg b/resources/fontawesome/svgs/solid/peseta-sign.svg deleted file mode 100644 index ec3e9a1..0000000 --- a/resources/fontawesome/svgs/solid/peseta-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/peso-sign.svg b/resources/fontawesome/svgs/solid/peso-sign.svg deleted file mode 100644 index 0b29a45..0000000 --- a/resources/fontawesome/svgs/solid/peso-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/phone-flip.svg b/resources/fontawesome/svgs/solid/phone-flip.svg deleted file mode 100644 index 0f108fe..0000000 --- a/resources/fontawesome/svgs/solid/phone-flip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/phone-slash.svg b/resources/fontawesome/svgs/solid/phone-slash.svg deleted file mode 100644 index 1f283ee..0000000 --- a/resources/fontawesome/svgs/solid/phone-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/phone-volume.svg b/resources/fontawesome/svgs/solid/phone-volume.svg deleted file mode 100644 index eb3d314..0000000 --- a/resources/fontawesome/svgs/solid/phone-volume.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/phone.svg b/resources/fontawesome/svgs/solid/phone.svg deleted file mode 100644 index f248e0b..0000000 --- a/resources/fontawesome/svgs/solid/phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/photo-film.svg b/resources/fontawesome/svgs/solid/photo-film.svg deleted file mode 100644 index a3a6a05..0000000 --- a/resources/fontawesome/svgs/solid/photo-film.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/piggy-bank.svg b/resources/fontawesome/svgs/solid/piggy-bank.svg deleted file mode 100644 index 590f68a..0000000 --- a/resources/fontawesome/svgs/solid/piggy-bank.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pills.svg b/resources/fontawesome/svgs/solid/pills.svg deleted file mode 100644 index c1d48b5..0000000 --- a/resources/fontawesome/svgs/solid/pills.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pizza-slice.svg b/resources/fontawesome/svgs/solid/pizza-slice.svg deleted file mode 100644 index 7b4efb0..0000000 --- a/resources/fontawesome/svgs/solid/pizza-slice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/place-of-worship.svg b/resources/fontawesome/svgs/solid/place-of-worship.svg deleted file mode 100644 index 157cbf7..0000000 --- a/resources/fontawesome/svgs/solid/place-of-worship.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-arrival.svg b/resources/fontawesome/svgs/solid/plane-arrival.svg deleted file mode 100644 index 3db7b96..0000000 --- a/resources/fontawesome/svgs/solid/plane-arrival.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-circle-check.svg b/resources/fontawesome/svgs/solid/plane-circle-check.svg deleted file mode 100644 index c2ed901..0000000 --- a/resources/fontawesome/svgs/solid/plane-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-circle-exclamation.svg b/resources/fontawesome/svgs/solid/plane-circle-exclamation.svg deleted file mode 100644 index a7bdcb2..0000000 --- a/resources/fontawesome/svgs/solid/plane-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-circle-xmark.svg b/resources/fontawesome/svgs/solid/plane-circle-xmark.svg deleted file mode 100644 index f20d73c..0000000 --- a/resources/fontawesome/svgs/solid/plane-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-departure.svg b/resources/fontawesome/svgs/solid/plane-departure.svg deleted file mode 100644 index db57814..0000000 --- a/resources/fontawesome/svgs/solid/plane-departure.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-lock.svg b/resources/fontawesome/svgs/solid/plane-lock.svg deleted file mode 100644 index f032f34..0000000 --- a/resources/fontawesome/svgs/solid/plane-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-slash.svg b/resources/fontawesome/svgs/solid/plane-slash.svg deleted file mode 100644 index f29d864..0000000 --- a/resources/fontawesome/svgs/solid/plane-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane-up.svg b/resources/fontawesome/svgs/solid/plane-up.svg deleted file mode 100644 index 9650205..0000000 --- a/resources/fontawesome/svgs/solid/plane-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plane.svg b/resources/fontawesome/svgs/solid/plane.svg deleted file mode 100644 index 7161588..0000000 --- a/resources/fontawesome/svgs/solid/plane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plant-wilt.svg b/resources/fontawesome/svgs/solid/plant-wilt.svg deleted file mode 100644 index b1509e8..0000000 --- a/resources/fontawesome/svgs/solid/plant-wilt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plate-wheat.svg b/resources/fontawesome/svgs/solid/plate-wheat.svg deleted file mode 100644 index 60f6d8a..0000000 --- a/resources/fontawesome/svgs/solid/plate-wheat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/play.svg b/resources/fontawesome/svgs/solid/play.svg deleted file mode 100644 index c3376a0..0000000 --- a/resources/fontawesome/svgs/solid/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-bolt.svg b/resources/fontawesome/svgs/solid/plug-circle-bolt.svg deleted file mode 100644 index 856eba4..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-bolt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-check.svg b/resources/fontawesome/svgs/solid/plug-circle-check.svg deleted file mode 100644 index c1db6be..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-exclamation.svg b/resources/fontawesome/svgs/solid/plug-circle-exclamation.svg deleted file mode 100644 index 15843d9..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-minus.svg b/resources/fontawesome/svgs/solid/plug-circle-minus.svg deleted file mode 100644 index e37c335..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-plus.svg b/resources/fontawesome/svgs/solid/plug-circle-plus.svg deleted file mode 100644 index aeb7350..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug-circle-xmark.svg b/resources/fontawesome/svgs/solid/plug-circle-xmark.svg deleted file mode 100644 index a5de870..0000000 --- a/resources/fontawesome/svgs/solid/plug-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plug.svg b/resources/fontawesome/svgs/solid/plug.svg deleted file mode 100644 index 6afcd76..0000000 --- a/resources/fontawesome/svgs/solid/plug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plus-minus.svg b/resources/fontawesome/svgs/solid/plus-minus.svg deleted file mode 100644 index 0d2a5c5..0000000 --- a/resources/fontawesome/svgs/solid/plus-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/plus.svg b/resources/fontawesome/svgs/solid/plus.svg deleted file mode 100644 index 95b98d3..0000000 --- a/resources/fontawesome/svgs/solid/plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/podcast.svg b/resources/fontawesome/svgs/solid/podcast.svg deleted file mode 100644 index 1ff6e7d..0000000 --- a/resources/fontawesome/svgs/solid/podcast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/poo-storm.svg b/resources/fontawesome/svgs/solid/poo-storm.svg deleted file mode 100644 index 7c51164..0000000 --- a/resources/fontawesome/svgs/solid/poo-storm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/poo.svg b/resources/fontawesome/svgs/solid/poo.svg deleted file mode 100644 index 14ceb5c..0000000 --- a/resources/fontawesome/svgs/solid/poo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/poop.svg b/resources/fontawesome/svgs/solid/poop.svg deleted file mode 100644 index 3d9ee96..0000000 --- a/resources/fontawesome/svgs/solid/poop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/power-off.svg b/resources/fontawesome/svgs/solid/power-off.svg deleted file mode 100644 index e7947ad..0000000 --- a/resources/fontawesome/svgs/solid/power-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/prescription-bottle-medical.svg b/resources/fontawesome/svgs/solid/prescription-bottle-medical.svg deleted file mode 100644 index f34495b..0000000 --- a/resources/fontawesome/svgs/solid/prescription-bottle-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/prescription-bottle.svg b/resources/fontawesome/svgs/solid/prescription-bottle.svg deleted file mode 100644 index eb156e5..0000000 --- a/resources/fontawesome/svgs/solid/prescription-bottle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/prescription.svg b/resources/fontawesome/svgs/solid/prescription.svg deleted file mode 100644 index 6939c21..0000000 --- a/resources/fontawesome/svgs/solid/prescription.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/print.svg b/resources/fontawesome/svgs/solid/print.svg deleted file mode 100644 index cc6a757..0000000 --- a/resources/fontawesome/svgs/solid/print.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pump-medical.svg b/resources/fontawesome/svgs/solid/pump-medical.svg deleted file mode 100644 index 6a01b88..0000000 --- a/resources/fontawesome/svgs/solid/pump-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/pump-soap.svg b/resources/fontawesome/svgs/solid/pump-soap.svg deleted file mode 100644 index eb3c11b..0000000 --- a/resources/fontawesome/svgs/solid/pump-soap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/puzzle-piece.svg b/resources/fontawesome/svgs/solid/puzzle-piece.svg deleted file mode 100644 index 3b3d09b..0000000 --- a/resources/fontawesome/svgs/solid/puzzle-piece.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/q.svg b/resources/fontawesome/svgs/solid/q.svg deleted file mode 100644 index 72b7fa4..0000000 --- a/resources/fontawesome/svgs/solid/q.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/qrcode.svg b/resources/fontawesome/svgs/solid/qrcode.svg deleted file mode 100644 index b18c9de..0000000 --- a/resources/fontawesome/svgs/solid/qrcode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/question.svg b/resources/fontawesome/svgs/solid/question.svg deleted file mode 100644 index e4f9889..0000000 --- a/resources/fontawesome/svgs/solid/question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/quote-left.svg b/resources/fontawesome/svgs/solid/quote-left.svg deleted file mode 100644 index a07ef22..0000000 --- a/resources/fontawesome/svgs/solid/quote-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/quote-right.svg b/resources/fontawesome/svgs/solid/quote-right.svg deleted file mode 100644 index 7308a13..0000000 --- a/resources/fontawesome/svgs/solid/quote-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/r.svg b/resources/fontawesome/svgs/solid/r.svg deleted file mode 100644 index 56b279e..0000000 --- a/resources/fontawesome/svgs/solid/r.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/radiation.svg b/resources/fontawesome/svgs/solid/radiation.svg deleted file mode 100644 index e77a68b..0000000 --- a/resources/fontawesome/svgs/solid/radiation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/radio.svg b/resources/fontawesome/svgs/solid/radio.svg deleted file mode 100644 index 7eb1038..0000000 --- a/resources/fontawesome/svgs/solid/radio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rainbow.svg b/resources/fontawesome/svgs/solid/rainbow.svg deleted file mode 100644 index 9e5ac19..0000000 --- a/resources/fontawesome/svgs/solid/rainbow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ranking-star.svg b/resources/fontawesome/svgs/solid/ranking-star.svg deleted file mode 100644 index a87eb89..0000000 --- a/resources/fontawesome/svgs/solid/ranking-star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/receipt.svg b/resources/fontawesome/svgs/solid/receipt.svg deleted file mode 100644 index 74ec154..0000000 --- a/resources/fontawesome/svgs/solid/receipt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/record-vinyl.svg b/resources/fontawesome/svgs/solid/record-vinyl.svg deleted file mode 100644 index b56ac01..0000000 --- a/resources/fontawesome/svgs/solid/record-vinyl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rectangle-ad.svg b/resources/fontawesome/svgs/solid/rectangle-ad.svg deleted file mode 100644 index f827dcb..0000000 --- a/resources/fontawesome/svgs/solid/rectangle-ad.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rectangle-list.svg b/resources/fontawesome/svgs/solid/rectangle-list.svg deleted file mode 100644 index 92ae185..0000000 --- a/resources/fontawesome/svgs/solid/rectangle-list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rectangle-xmark.svg b/resources/fontawesome/svgs/solid/rectangle-xmark.svg deleted file mode 100644 index 791225c..0000000 --- a/resources/fontawesome/svgs/solid/rectangle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/recycle.svg b/resources/fontawesome/svgs/solid/recycle.svg deleted file mode 100644 index 5e2837e..0000000 --- a/resources/fontawesome/svgs/solid/recycle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/registered.svg b/resources/fontawesome/svgs/solid/registered.svg deleted file mode 100644 index a68c8d1..0000000 --- a/resources/fontawesome/svgs/solid/registered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/repeat.svg b/resources/fontawesome/svgs/solid/repeat.svg deleted file mode 100644 index 74b83c5..0000000 --- a/resources/fontawesome/svgs/solid/repeat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/reply-all.svg b/resources/fontawesome/svgs/solid/reply-all.svg deleted file mode 100644 index 795f93e..0000000 --- a/resources/fontawesome/svgs/solid/reply-all.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/reply.svg b/resources/fontawesome/svgs/solid/reply.svg deleted file mode 100644 index 19cccdf..0000000 --- a/resources/fontawesome/svgs/solid/reply.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/republican.svg b/resources/fontawesome/svgs/solid/republican.svg deleted file mode 100644 index 5077e9c..0000000 --- a/resources/fontawesome/svgs/solid/republican.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/restroom.svg b/resources/fontawesome/svgs/solid/restroom.svg deleted file mode 100644 index 5634ed4..0000000 --- a/resources/fontawesome/svgs/solid/restroom.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/retweet.svg b/resources/fontawesome/svgs/solid/retweet.svg deleted file mode 100644 index e57fdb4..0000000 --- a/resources/fontawesome/svgs/solid/retweet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ribbon.svg b/resources/fontawesome/svgs/solid/ribbon.svg deleted file mode 100644 index 0932765..0000000 --- a/resources/fontawesome/svgs/solid/ribbon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/right-from-bracket.svg b/resources/fontawesome/svgs/solid/right-from-bracket.svg deleted file mode 100644 index 1c4d485..0000000 --- a/resources/fontawesome/svgs/solid/right-from-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/right-left.svg b/resources/fontawesome/svgs/solid/right-left.svg deleted file mode 100644 index a39811b..0000000 --- a/resources/fontawesome/svgs/solid/right-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/right-long.svg b/resources/fontawesome/svgs/solid/right-long.svg deleted file mode 100644 index 11853ce..0000000 --- a/resources/fontawesome/svgs/solid/right-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/right-to-bracket.svg b/resources/fontawesome/svgs/solid/right-to-bracket.svg deleted file mode 100644 index 33b7e18..0000000 --- a/resources/fontawesome/svgs/solid/right-to-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ring.svg b/resources/fontawesome/svgs/solid/ring.svg deleted file mode 100644 index c029064..0000000 --- a/resources/fontawesome/svgs/solid/ring.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-barrier.svg b/resources/fontawesome/svgs/solid/road-barrier.svg deleted file mode 100644 index 6c00b46..0000000 --- a/resources/fontawesome/svgs/solid/road-barrier.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-bridge.svg b/resources/fontawesome/svgs/solid/road-bridge.svg deleted file mode 100644 index 15a7972..0000000 --- a/resources/fontawesome/svgs/solid/road-bridge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-circle-check.svg b/resources/fontawesome/svgs/solid/road-circle-check.svg deleted file mode 100644 index 1c9a7aa..0000000 --- a/resources/fontawesome/svgs/solid/road-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-circle-exclamation.svg b/resources/fontawesome/svgs/solid/road-circle-exclamation.svg deleted file mode 100644 index 18561e7..0000000 --- a/resources/fontawesome/svgs/solid/road-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-circle-xmark.svg b/resources/fontawesome/svgs/solid/road-circle-xmark.svg deleted file mode 100644 index 78542d8..0000000 --- a/resources/fontawesome/svgs/solid/road-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-lock.svg b/resources/fontawesome/svgs/solid/road-lock.svg deleted file mode 100644 index 1ddd46b..0000000 --- a/resources/fontawesome/svgs/solid/road-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road-spikes.svg b/resources/fontawesome/svgs/solid/road-spikes.svg deleted file mode 100644 index 065a42a..0000000 --- a/resources/fontawesome/svgs/solid/road-spikes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/road.svg b/resources/fontawesome/svgs/solid/road.svg deleted file mode 100644 index 4e43bd4..0000000 --- a/resources/fontawesome/svgs/solid/road.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/robot.svg b/resources/fontawesome/svgs/solid/robot.svg deleted file mode 100644 index 3312089..0000000 --- a/resources/fontawesome/svgs/solid/robot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rocket.svg b/resources/fontawesome/svgs/solid/rocket.svg deleted file mode 100644 index 44e0746..0000000 --- a/resources/fontawesome/svgs/solid/rocket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rotate-left.svg b/resources/fontawesome/svgs/solid/rotate-left.svg deleted file mode 100644 index 280287b..0000000 --- a/resources/fontawesome/svgs/solid/rotate-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rotate-right.svg b/resources/fontawesome/svgs/solid/rotate-right.svg deleted file mode 100644 index 39ad71e..0000000 --- a/resources/fontawesome/svgs/solid/rotate-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rotate.svg b/resources/fontawesome/svgs/solid/rotate.svg deleted file mode 100644 index 449fc6b..0000000 --- a/resources/fontawesome/svgs/solid/rotate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/route.svg b/resources/fontawesome/svgs/solid/route.svg deleted file mode 100644 index 0088584..0000000 --- a/resources/fontawesome/svgs/solid/route.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rss.svg b/resources/fontawesome/svgs/solid/rss.svg deleted file mode 100644 index 7473df3..0000000 --- a/resources/fontawesome/svgs/solid/rss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ruble-sign.svg b/resources/fontawesome/svgs/solid/ruble-sign.svg deleted file mode 100644 index 2605229..0000000 --- a/resources/fontawesome/svgs/solid/ruble-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rug.svg b/resources/fontawesome/svgs/solid/rug.svg deleted file mode 100644 index 8c25634..0000000 --- a/resources/fontawesome/svgs/solid/rug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ruler-combined.svg b/resources/fontawesome/svgs/solid/ruler-combined.svg deleted file mode 100644 index e86ccb2..0000000 --- a/resources/fontawesome/svgs/solid/ruler-combined.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ruler-horizontal.svg b/resources/fontawesome/svgs/solid/ruler-horizontal.svg deleted file mode 100644 index 96c71bf..0000000 --- a/resources/fontawesome/svgs/solid/ruler-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ruler-vertical.svg b/resources/fontawesome/svgs/solid/ruler-vertical.svg deleted file mode 100644 index f34cd57..0000000 --- a/resources/fontawesome/svgs/solid/ruler-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ruler.svg b/resources/fontawesome/svgs/solid/ruler.svg deleted file mode 100644 index 2402f03..0000000 --- a/resources/fontawesome/svgs/solid/ruler.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rupee-sign.svg b/resources/fontawesome/svgs/solid/rupee-sign.svg deleted file mode 100644 index b2187b9..0000000 --- a/resources/fontawesome/svgs/solid/rupee-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/rupiah-sign.svg b/resources/fontawesome/svgs/solid/rupiah-sign.svg deleted file mode 100644 index 8290184..0000000 --- a/resources/fontawesome/svgs/solid/rupiah-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/s.svg b/resources/fontawesome/svgs/solid/s.svg deleted file mode 100644 index 08ac4aa..0000000 --- a/resources/fontawesome/svgs/solid/s.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sack-dollar.svg b/resources/fontawesome/svgs/solid/sack-dollar.svg deleted file mode 100644 index ae32d68..0000000 --- a/resources/fontawesome/svgs/solid/sack-dollar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sack-xmark.svg b/resources/fontawesome/svgs/solid/sack-xmark.svg deleted file mode 100644 index c8a8449..0000000 --- a/resources/fontawesome/svgs/solid/sack-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sailboat.svg b/resources/fontawesome/svgs/solid/sailboat.svg deleted file mode 100644 index 9861da5..0000000 --- a/resources/fontawesome/svgs/solid/sailboat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/satellite-dish.svg b/resources/fontawesome/svgs/solid/satellite-dish.svg deleted file mode 100644 index 70f28dd..0000000 --- a/resources/fontawesome/svgs/solid/satellite-dish.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/satellite.svg b/resources/fontawesome/svgs/solid/satellite.svg deleted file mode 100644 index 49c6de5..0000000 --- a/resources/fontawesome/svgs/solid/satellite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scale-balanced.svg b/resources/fontawesome/svgs/solid/scale-balanced.svg deleted file mode 100644 index 1b17106..0000000 --- a/resources/fontawesome/svgs/solid/scale-balanced.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scale-unbalanced-flip.svg b/resources/fontawesome/svgs/solid/scale-unbalanced-flip.svg deleted file mode 100644 index 40b85f8..0000000 --- a/resources/fontawesome/svgs/solid/scale-unbalanced-flip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scale-unbalanced.svg b/resources/fontawesome/svgs/solid/scale-unbalanced.svg deleted file mode 100644 index 67dba9b..0000000 --- a/resources/fontawesome/svgs/solid/scale-unbalanced.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school-circle-check.svg b/resources/fontawesome/svgs/solid/school-circle-check.svg deleted file mode 100644 index 4356220..0000000 --- a/resources/fontawesome/svgs/solid/school-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school-circle-exclamation.svg b/resources/fontawesome/svgs/solid/school-circle-exclamation.svg deleted file mode 100644 index 567a327..0000000 --- a/resources/fontawesome/svgs/solid/school-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school-circle-xmark.svg b/resources/fontawesome/svgs/solid/school-circle-xmark.svg deleted file mode 100644 index c25303b..0000000 --- a/resources/fontawesome/svgs/solid/school-circle-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school-flag.svg b/resources/fontawesome/svgs/solid/school-flag.svg deleted file mode 100644 index 62b4375..0000000 --- a/resources/fontawesome/svgs/solid/school-flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school-lock.svg b/resources/fontawesome/svgs/solid/school-lock.svg deleted file mode 100644 index 71d4790..0000000 --- a/resources/fontawesome/svgs/solid/school-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/school.svg b/resources/fontawesome/svgs/solid/school.svg deleted file mode 100644 index 9a5eda8..0000000 --- a/resources/fontawesome/svgs/solid/school.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scissors.svg b/resources/fontawesome/svgs/solid/scissors.svg deleted file mode 100644 index 727b2a8..0000000 --- a/resources/fontawesome/svgs/solid/scissors.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/screwdriver-wrench.svg b/resources/fontawesome/svgs/solid/screwdriver-wrench.svg deleted file mode 100644 index e5a848c..0000000 --- a/resources/fontawesome/svgs/solid/screwdriver-wrench.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/screwdriver.svg b/resources/fontawesome/svgs/solid/screwdriver.svg deleted file mode 100644 index 4674aac..0000000 --- a/resources/fontawesome/svgs/solid/screwdriver.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scroll-torah.svg b/resources/fontawesome/svgs/solid/scroll-torah.svg deleted file mode 100644 index 0c3fe2f..0000000 --- a/resources/fontawesome/svgs/solid/scroll-torah.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/scroll.svg b/resources/fontawesome/svgs/solid/scroll.svg deleted file mode 100644 index 615bad9..0000000 --- a/resources/fontawesome/svgs/solid/scroll.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sd-card.svg b/resources/fontawesome/svgs/solid/sd-card.svg deleted file mode 100644 index 1d7e79b..0000000 --- a/resources/fontawesome/svgs/solid/sd-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/section.svg b/resources/fontawesome/svgs/solid/section.svg deleted file mode 100644 index 047cd5e..0000000 --- a/resources/fontawesome/svgs/solid/section.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/seedling.svg b/resources/fontawesome/svgs/solid/seedling.svg deleted file mode 100644 index 4da904d..0000000 --- a/resources/fontawesome/svgs/solid/seedling.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/server.svg b/resources/fontawesome/svgs/solid/server.svg deleted file mode 100644 index cf226ce..0000000 --- a/resources/fontawesome/svgs/solid/server.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shapes.svg b/resources/fontawesome/svgs/solid/shapes.svg deleted file mode 100644 index 0cd9abb..0000000 --- a/resources/fontawesome/svgs/solid/shapes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/share-from-square.svg b/resources/fontawesome/svgs/solid/share-from-square.svg deleted file mode 100644 index 6c5886d..0000000 --- a/resources/fontawesome/svgs/solid/share-from-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/share-nodes.svg b/resources/fontawesome/svgs/solid/share-nodes.svg deleted file mode 100644 index d0429bb..0000000 --- a/resources/fontawesome/svgs/solid/share-nodes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/share.svg b/resources/fontawesome/svgs/solid/share.svg deleted file mode 100644 index c996ffa..0000000 --- a/resources/fontawesome/svgs/solid/share.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sheet-plastic.svg b/resources/fontawesome/svgs/solid/sheet-plastic.svg deleted file mode 100644 index 374b57c..0000000 --- a/resources/fontawesome/svgs/solid/sheet-plastic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shekel-sign.svg b/resources/fontawesome/svgs/solid/shekel-sign.svg deleted file mode 100644 index 92c9cb2..0000000 --- a/resources/fontawesome/svgs/solid/shekel-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield-cat.svg b/resources/fontawesome/svgs/solid/shield-cat.svg deleted file mode 100644 index 6cf8c2c..0000000 --- a/resources/fontawesome/svgs/solid/shield-cat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield-dog.svg b/resources/fontawesome/svgs/solid/shield-dog.svg deleted file mode 100644 index e28a5ad..0000000 --- a/resources/fontawesome/svgs/solid/shield-dog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield-halved.svg b/resources/fontawesome/svgs/solid/shield-halved.svg deleted file mode 100644 index fbdb321..0000000 --- a/resources/fontawesome/svgs/solid/shield-halved.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield-heart.svg b/resources/fontawesome/svgs/solid/shield-heart.svg deleted file mode 100644 index 495900a..0000000 --- a/resources/fontawesome/svgs/solid/shield-heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield-virus.svg b/resources/fontawesome/svgs/solid/shield-virus.svg deleted file mode 100644 index 57a21fd..0000000 --- a/resources/fontawesome/svgs/solid/shield-virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shield.svg b/resources/fontawesome/svgs/solid/shield.svg deleted file mode 100644 index b44e882..0000000 --- a/resources/fontawesome/svgs/solid/shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ship.svg b/resources/fontawesome/svgs/solid/ship.svg deleted file mode 100644 index 44c85df..0000000 --- a/resources/fontawesome/svgs/solid/ship.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shirt.svg b/resources/fontawesome/svgs/solid/shirt.svg deleted file mode 100644 index 2c2302f..0000000 --- a/resources/fontawesome/svgs/solid/shirt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shoe-prints.svg b/resources/fontawesome/svgs/solid/shoe-prints.svg deleted file mode 100644 index 65105fe..0000000 --- a/resources/fontawesome/svgs/solid/shoe-prints.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shop-lock.svg b/resources/fontawesome/svgs/solid/shop-lock.svg deleted file mode 100644 index 970d8ee..0000000 --- a/resources/fontawesome/svgs/solid/shop-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shop-slash.svg b/resources/fontawesome/svgs/solid/shop-slash.svg deleted file mode 100644 index 660d7c0..0000000 --- a/resources/fontawesome/svgs/solid/shop-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shop.svg b/resources/fontawesome/svgs/solid/shop.svg deleted file mode 100644 index 8b13f11..0000000 --- a/resources/fontawesome/svgs/solid/shop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shower.svg b/resources/fontawesome/svgs/solid/shower.svg deleted file mode 100644 index db5ac36..0000000 --- a/resources/fontawesome/svgs/solid/shower.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shrimp.svg b/resources/fontawesome/svgs/solid/shrimp.svg deleted file mode 100644 index 389a634..0000000 --- a/resources/fontawesome/svgs/solid/shrimp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shuffle.svg b/resources/fontawesome/svgs/solid/shuffle.svg deleted file mode 100644 index dd0df32..0000000 --- a/resources/fontawesome/svgs/solid/shuffle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/shuttle-space.svg b/resources/fontawesome/svgs/solid/shuttle-space.svg deleted file mode 100644 index c1067b1..0000000 --- a/resources/fontawesome/svgs/solid/shuttle-space.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sign-hanging.svg b/resources/fontawesome/svgs/solid/sign-hanging.svg deleted file mode 100644 index 4775643..0000000 --- a/resources/fontawesome/svgs/solid/sign-hanging.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/signal.svg b/resources/fontawesome/svgs/solid/signal.svg deleted file mode 100644 index 771becb..0000000 --- a/resources/fontawesome/svgs/solid/signal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/signature.svg b/resources/fontawesome/svgs/solid/signature.svg deleted file mode 100644 index 43f0660..0000000 --- a/resources/fontawesome/svgs/solid/signature.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/signs-post.svg b/resources/fontawesome/svgs/solid/signs-post.svg deleted file mode 100644 index c384307..0000000 --- a/resources/fontawesome/svgs/solid/signs-post.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sim-card.svg b/resources/fontawesome/svgs/solid/sim-card.svg deleted file mode 100644 index 33dad9d..0000000 --- a/resources/fontawesome/svgs/solid/sim-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sink.svg b/resources/fontawesome/svgs/solid/sink.svg deleted file mode 100644 index 8ea1d91..0000000 --- a/resources/fontawesome/svgs/solid/sink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sitemap.svg b/resources/fontawesome/svgs/solid/sitemap.svg deleted file mode 100644 index 13582bd..0000000 --- a/resources/fontawesome/svgs/solid/sitemap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/skull-crossbones.svg b/resources/fontawesome/svgs/solid/skull-crossbones.svg deleted file mode 100644 index 1a4c953..0000000 --- a/resources/fontawesome/svgs/solid/skull-crossbones.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/skull.svg b/resources/fontawesome/svgs/solid/skull.svg deleted file mode 100644 index 0a224a6..0000000 --- a/resources/fontawesome/svgs/solid/skull.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/slash.svg b/resources/fontawesome/svgs/solid/slash.svg deleted file mode 100644 index 7262c83..0000000 --- a/resources/fontawesome/svgs/solid/slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sleigh.svg b/resources/fontawesome/svgs/solid/sleigh.svg deleted file mode 100644 index ee1ea83..0000000 --- a/resources/fontawesome/svgs/solid/sleigh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sliders.svg b/resources/fontawesome/svgs/solid/sliders.svg deleted file mode 100644 index 25b6839..0000000 --- a/resources/fontawesome/svgs/solid/sliders.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/smog.svg b/resources/fontawesome/svgs/solid/smog.svg deleted file mode 100644 index 21f4cdd..0000000 --- a/resources/fontawesome/svgs/solid/smog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/smoking.svg b/resources/fontawesome/svgs/solid/smoking.svg deleted file mode 100644 index a1ad4f0..0000000 --- a/resources/fontawesome/svgs/solid/smoking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/snowflake.svg b/resources/fontawesome/svgs/solid/snowflake.svg deleted file mode 100644 index b4b8a44..0000000 --- a/resources/fontawesome/svgs/solid/snowflake.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/snowman.svg b/resources/fontawesome/svgs/solid/snowman.svg deleted file mode 100644 index 44113d1..0000000 --- a/resources/fontawesome/svgs/solid/snowman.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/snowplow.svg b/resources/fontawesome/svgs/solid/snowplow.svg deleted file mode 100644 index 6871b1f..0000000 --- a/resources/fontawesome/svgs/solid/snowplow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/soap.svg b/resources/fontawesome/svgs/solid/soap.svg deleted file mode 100644 index 9c228ba..0000000 --- a/resources/fontawesome/svgs/solid/soap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/socks.svg b/resources/fontawesome/svgs/solid/socks.svg deleted file mode 100644 index 8aafe9a..0000000 --- a/resources/fontawesome/svgs/solid/socks.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/solar-panel.svg b/resources/fontawesome/svgs/solid/solar-panel.svg deleted file mode 100644 index 80ae3cd..0000000 --- a/resources/fontawesome/svgs/solid/solar-panel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sort-down.svg b/resources/fontawesome/svgs/solid/sort-down.svg deleted file mode 100644 index dd2d592..0000000 --- a/resources/fontawesome/svgs/solid/sort-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sort-up.svg b/resources/fontawesome/svgs/solid/sort-up.svg deleted file mode 100644 index 610cd9b..0000000 --- a/resources/fontawesome/svgs/solid/sort-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sort.svg b/resources/fontawesome/svgs/solid/sort.svg deleted file mode 100644 index d4a891c..0000000 --- a/resources/fontawesome/svgs/solid/sort.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spa.svg b/resources/fontawesome/svgs/solid/spa.svg deleted file mode 100644 index 80ba2a7..0000000 --- a/resources/fontawesome/svgs/solid/spa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spaghetti-monster-flying.svg b/resources/fontawesome/svgs/solid/spaghetti-monster-flying.svg deleted file mode 100644 index 7639b9a..0000000 --- a/resources/fontawesome/svgs/solid/spaghetti-monster-flying.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spell-check.svg b/resources/fontawesome/svgs/solid/spell-check.svg deleted file mode 100644 index 9ceeb8a..0000000 --- a/resources/fontawesome/svgs/solid/spell-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spider.svg b/resources/fontawesome/svgs/solid/spider.svg deleted file mode 100644 index 7d100c1..0000000 --- a/resources/fontawesome/svgs/solid/spider.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spinner.svg b/resources/fontawesome/svgs/solid/spinner.svg deleted file mode 100644 index 58c0fe0..0000000 --- a/resources/fontawesome/svgs/solid/spinner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/splotch.svg b/resources/fontawesome/svgs/solid/splotch.svg deleted file mode 100644 index d7b4b60..0000000 --- a/resources/fontawesome/svgs/solid/splotch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spoon.svg b/resources/fontawesome/svgs/solid/spoon.svg deleted file mode 100644 index f06d9ef..0000000 --- a/resources/fontawesome/svgs/solid/spoon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spray-can-sparkles.svg b/resources/fontawesome/svgs/solid/spray-can-sparkles.svg deleted file mode 100644 index 2748293..0000000 --- a/resources/fontawesome/svgs/solid/spray-can-sparkles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/spray-can.svg b/resources/fontawesome/svgs/solid/spray-can.svg deleted file mode 100644 index 5bbe214..0000000 --- a/resources/fontawesome/svgs/solid/spray-can.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-arrow-up-right.svg b/resources/fontawesome/svgs/solid/square-arrow-up-right.svg deleted file mode 100644 index 4720e87..0000000 --- a/resources/fontawesome/svgs/solid/square-arrow-up-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-caret-down.svg b/resources/fontawesome/svgs/solid/square-caret-down.svg deleted file mode 100644 index e28244f..0000000 --- a/resources/fontawesome/svgs/solid/square-caret-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-caret-left.svg b/resources/fontawesome/svgs/solid/square-caret-left.svg deleted file mode 100644 index 735bc96..0000000 --- a/resources/fontawesome/svgs/solid/square-caret-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-caret-right.svg b/resources/fontawesome/svgs/solid/square-caret-right.svg deleted file mode 100644 index d733ded..0000000 --- a/resources/fontawesome/svgs/solid/square-caret-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-caret-up.svg b/resources/fontawesome/svgs/solid/square-caret-up.svg deleted file mode 100644 index ace78d2..0000000 --- a/resources/fontawesome/svgs/solid/square-caret-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-check.svg b/resources/fontawesome/svgs/solid/square-check.svg deleted file mode 100644 index 9a74616..0000000 --- a/resources/fontawesome/svgs/solid/square-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-envelope.svg b/resources/fontawesome/svgs/solid/square-envelope.svg deleted file mode 100644 index e5a0070..0000000 --- a/resources/fontawesome/svgs/solid/square-envelope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-full.svg b/resources/fontawesome/svgs/solid/square-full.svg deleted file mode 100644 index 7539948..0000000 --- a/resources/fontawesome/svgs/solid/square-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-h.svg b/resources/fontawesome/svgs/solid/square-h.svg deleted file mode 100644 index 496d5b4..0000000 --- a/resources/fontawesome/svgs/solid/square-h.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-minus.svg b/resources/fontawesome/svgs/solid/square-minus.svg deleted file mode 100644 index 44b0f8d..0000000 --- a/resources/fontawesome/svgs/solid/square-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-nfi.svg b/resources/fontawesome/svgs/solid/square-nfi.svg deleted file mode 100644 index be087d7..0000000 --- a/resources/fontawesome/svgs/solid/square-nfi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-parking.svg b/resources/fontawesome/svgs/solid/square-parking.svg deleted file mode 100644 index b5d298a..0000000 --- a/resources/fontawesome/svgs/solid/square-parking.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-pen.svg b/resources/fontawesome/svgs/solid/square-pen.svg deleted file mode 100644 index b414f05..0000000 --- a/resources/fontawesome/svgs/solid/square-pen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-person-confined.svg b/resources/fontawesome/svgs/solid/square-person-confined.svg deleted file mode 100644 index 423d10a..0000000 --- a/resources/fontawesome/svgs/solid/square-person-confined.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-phone-flip.svg b/resources/fontawesome/svgs/solid/square-phone-flip.svg deleted file mode 100644 index 298b701..0000000 --- a/resources/fontawesome/svgs/solid/square-phone-flip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-phone.svg b/resources/fontawesome/svgs/solid/square-phone.svg deleted file mode 100644 index 999d19c..0000000 --- a/resources/fontawesome/svgs/solid/square-phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-plus.svg b/resources/fontawesome/svgs/solid/square-plus.svg deleted file mode 100644 index 026ca84..0000000 --- a/resources/fontawesome/svgs/solid/square-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-poll-horizontal.svg b/resources/fontawesome/svgs/solid/square-poll-horizontal.svg deleted file mode 100644 index 45fbac5..0000000 --- a/resources/fontawesome/svgs/solid/square-poll-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-poll-vertical.svg b/resources/fontawesome/svgs/solid/square-poll-vertical.svg deleted file mode 100644 index b19fb14..0000000 --- a/resources/fontawesome/svgs/solid/square-poll-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-root-variable.svg b/resources/fontawesome/svgs/solid/square-root-variable.svg deleted file mode 100644 index 1400aac..0000000 --- a/resources/fontawesome/svgs/solid/square-root-variable.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-rss.svg b/resources/fontawesome/svgs/solid/square-rss.svg deleted file mode 100644 index 21d048f..0000000 --- a/resources/fontawesome/svgs/solid/square-rss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-share-nodes.svg b/resources/fontawesome/svgs/solid/square-share-nodes.svg deleted file mode 100644 index da2ea54..0000000 --- a/resources/fontawesome/svgs/solid/square-share-nodes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-up-right.svg b/resources/fontawesome/svgs/solid/square-up-right.svg deleted file mode 100644 index 511faeb..0000000 --- a/resources/fontawesome/svgs/solid/square-up-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-virus.svg b/resources/fontawesome/svgs/solid/square-virus.svg deleted file mode 100644 index 8a9ff11..0000000 --- a/resources/fontawesome/svgs/solid/square-virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square-xmark.svg b/resources/fontawesome/svgs/solid/square-xmark.svg deleted file mode 100644 index 6125674..0000000 --- a/resources/fontawesome/svgs/solid/square-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/square.svg b/resources/fontawesome/svgs/solid/square.svg deleted file mode 100644 index 004bc11..0000000 --- a/resources/fontawesome/svgs/solid/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/staff-snake.svg b/resources/fontawesome/svgs/solid/staff-snake.svg deleted file mode 100644 index 3d29c12..0000000 --- a/resources/fontawesome/svgs/solid/staff-snake.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stairs.svg b/resources/fontawesome/svgs/solid/stairs.svg deleted file mode 100644 index e3138e1..0000000 --- a/resources/fontawesome/svgs/solid/stairs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stamp.svg b/resources/fontawesome/svgs/solid/stamp.svg deleted file mode 100644 index c67f3dd..0000000 --- a/resources/fontawesome/svgs/solid/stamp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stapler.svg b/resources/fontawesome/svgs/solid/stapler.svg deleted file mode 100644 index e71a1d5..0000000 --- a/resources/fontawesome/svgs/solid/stapler.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star-and-crescent.svg b/resources/fontawesome/svgs/solid/star-and-crescent.svg deleted file mode 100644 index 12ad577..0000000 --- a/resources/fontawesome/svgs/solid/star-and-crescent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star-half-stroke.svg b/resources/fontawesome/svgs/solid/star-half-stroke.svg deleted file mode 100644 index d9cd6e7..0000000 --- a/resources/fontawesome/svgs/solid/star-half-stroke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star-half.svg b/resources/fontawesome/svgs/solid/star-half.svg deleted file mode 100644 index d4501ad..0000000 --- a/resources/fontawesome/svgs/solid/star-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star-of-david.svg b/resources/fontawesome/svgs/solid/star-of-david.svg deleted file mode 100644 index 752d0aa..0000000 --- a/resources/fontawesome/svgs/solid/star-of-david.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star-of-life.svg b/resources/fontawesome/svgs/solid/star-of-life.svg deleted file mode 100644 index 1b00b5e..0000000 --- a/resources/fontawesome/svgs/solid/star-of-life.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/star.svg b/resources/fontawesome/svgs/solid/star.svg deleted file mode 100644 index 7f6d6c6..0000000 --- a/resources/fontawesome/svgs/solid/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sterling-sign.svg b/resources/fontawesome/svgs/solid/sterling-sign.svg deleted file mode 100644 index d9fb0b0..0000000 --- a/resources/fontawesome/svgs/solid/sterling-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stethoscope.svg b/resources/fontawesome/svgs/solid/stethoscope.svg deleted file mode 100644 index c66547b..0000000 --- a/resources/fontawesome/svgs/solid/stethoscope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stop.svg b/resources/fontawesome/svgs/solid/stop.svg deleted file mode 100644 index 3d4b429..0000000 --- a/resources/fontawesome/svgs/solid/stop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stopwatch-20.svg b/resources/fontawesome/svgs/solid/stopwatch-20.svg deleted file mode 100644 index 4613208..0000000 --- a/resources/fontawesome/svgs/solid/stopwatch-20.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stopwatch.svg b/resources/fontawesome/svgs/solid/stopwatch.svg deleted file mode 100644 index c5b5cef..0000000 --- a/resources/fontawesome/svgs/solid/stopwatch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/store-slash.svg b/resources/fontawesome/svgs/solid/store-slash.svg deleted file mode 100644 index 27ef7b6..0000000 --- a/resources/fontawesome/svgs/solid/store-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/store.svg b/resources/fontawesome/svgs/solid/store.svg deleted file mode 100644 index 44a2ffa..0000000 --- a/resources/fontawesome/svgs/solid/store.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/street-view.svg b/resources/fontawesome/svgs/solid/street-view.svg deleted file mode 100644 index 16781cc..0000000 --- a/resources/fontawesome/svgs/solid/street-view.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/strikethrough.svg b/resources/fontawesome/svgs/solid/strikethrough.svg deleted file mode 100644 index 387a464..0000000 --- a/resources/fontawesome/svgs/solid/strikethrough.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/stroopwafel.svg b/resources/fontawesome/svgs/solid/stroopwafel.svg deleted file mode 100644 index 18d970c..0000000 --- a/resources/fontawesome/svgs/solid/stroopwafel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/subscript.svg b/resources/fontawesome/svgs/solid/subscript.svg deleted file mode 100644 index b69c9ba..0000000 --- a/resources/fontawesome/svgs/solid/subscript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/suitcase-medical.svg b/resources/fontawesome/svgs/solid/suitcase-medical.svg deleted file mode 100644 index be64391..0000000 --- a/resources/fontawesome/svgs/solid/suitcase-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/suitcase-rolling.svg b/resources/fontawesome/svgs/solid/suitcase-rolling.svg deleted file mode 100644 index b38ce7f..0000000 --- a/resources/fontawesome/svgs/solid/suitcase-rolling.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/suitcase.svg b/resources/fontawesome/svgs/solid/suitcase.svg deleted file mode 100644 index 90a4670..0000000 --- a/resources/fontawesome/svgs/solid/suitcase.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sun-plant-wilt.svg b/resources/fontawesome/svgs/solid/sun-plant-wilt.svg deleted file mode 100644 index cd0e506..0000000 --- a/resources/fontawesome/svgs/solid/sun-plant-wilt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/sun.svg b/resources/fontawesome/svgs/solid/sun.svg deleted file mode 100644 index da53fbd..0000000 --- a/resources/fontawesome/svgs/solid/sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/superscript.svg b/resources/fontawesome/svgs/solid/superscript.svg deleted file mode 100644 index d27495b..0000000 --- a/resources/fontawesome/svgs/solid/superscript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/swatchbook.svg b/resources/fontawesome/svgs/solid/swatchbook.svg deleted file mode 100644 index f206cca..0000000 --- a/resources/fontawesome/svgs/solid/swatchbook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/synagogue.svg b/resources/fontawesome/svgs/solid/synagogue.svg deleted file mode 100644 index be61956..0000000 --- a/resources/fontawesome/svgs/solid/synagogue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/syringe.svg b/resources/fontawesome/svgs/solid/syringe.svg deleted file mode 100644 index 6712ffd..0000000 --- a/resources/fontawesome/svgs/solid/syringe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/t.svg b/resources/fontawesome/svgs/solid/t.svg deleted file mode 100644 index cca044a..0000000 --- a/resources/fontawesome/svgs/solid/t.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-cells-column-lock.svg b/resources/fontawesome/svgs/solid/table-cells-column-lock.svg deleted file mode 100644 index 861898c..0000000 --- a/resources/fontawesome/svgs/solid/table-cells-column-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-cells-large.svg b/resources/fontawesome/svgs/solid/table-cells-large.svg deleted file mode 100644 index c028875..0000000 --- a/resources/fontawesome/svgs/solid/table-cells-large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-cells-row-lock.svg b/resources/fontawesome/svgs/solid/table-cells-row-lock.svg deleted file mode 100644 index 876f5e1..0000000 --- a/resources/fontawesome/svgs/solid/table-cells-row-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-cells.svg b/resources/fontawesome/svgs/solid/table-cells.svg deleted file mode 100644 index a301bfc..0000000 --- a/resources/fontawesome/svgs/solid/table-cells.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-columns.svg b/resources/fontawesome/svgs/solid/table-columns.svg deleted file mode 100644 index 4ab62e5..0000000 --- a/resources/fontawesome/svgs/solid/table-columns.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-list.svg b/resources/fontawesome/svgs/solid/table-list.svg deleted file mode 100644 index 90d13fc..0000000 --- a/resources/fontawesome/svgs/solid/table-list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table-tennis-paddle-ball.svg b/resources/fontawesome/svgs/solid/table-tennis-paddle-ball.svg deleted file mode 100644 index 9d69f92..0000000 --- a/resources/fontawesome/svgs/solid/table-tennis-paddle-ball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/table.svg b/resources/fontawesome/svgs/solid/table.svg deleted file mode 100644 index d1a5447..0000000 --- a/resources/fontawesome/svgs/solid/table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tablet-button.svg b/resources/fontawesome/svgs/solid/tablet-button.svg deleted file mode 100644 index 8c8e264..0000000 --- a/resources/fontawesome/svgs/solid/tablet-button.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tablet-screen-button.svg b/resources/fontawesome/svgs/solid/tablet-screen-button.svg deleted file mode 100644 index a8ae349..0000000 --- a/resources/fontawesome/svgs/solid/tablet-screen-button.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tablet.svg b/resources/fontawesome/svgs/solid/tablet.svg deleted file mode 100644 index cdb419a..0000000 --- a/resources/fontawesome/svgs/solid/tablet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tablets.svg b/resources/fontawesome/svgs/solid/tablets.svg deleted file mode 100644 index 7ea433e..0000000 --- a/resources/fontawesome/svgs/solid/tablets.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tachograph-digital.svg b/resources/fontawesome/svgs/solid/tachograph-digital.svg deleted file mode 100644 index 00a8608..0000000 --- a/resources/fontawesome/svgs/solid/tachograph-digital.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tag.svg b/resources/fontawesome/svgs/solid/tag.svg deleted file mode 100644 index 5a2e8e0..0000000 --- a/resources/fontawesome/svgs/solid/tag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tags.svg b/resources/fontawesome/svgs/solid/tags.svg deleted file mode 100644 index 1d0c556..0000000 --- a/resources/fontawesome/svgs/solid/tags.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tape.svg b/resources/fontawesome/svgs/solid/tape.svg deleted file mode 100644 index e254718..0000000 --- a/resources/fontawesome/svgs/solid/tape.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tarp-droplet.svg b/resources/fontawesome/svgs/solid/tarp-droplet.svg deleted file mode 100644 index 8834a35..0000000 --- a/resources/fontawesome/svgs/solid/tarp-droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tarp.svg b/resources/fontawesome/svgs/solid/tarp.svg deleted file mode 100644 index 2a6701f..0000000 --- a/resources/fontawesome/svgs/solid/tarp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/taxi.svg b/resources/fontawesome/svgs/solid/taxi.svg deleted file mode 100644 index b5f4eee..0000000 --- a/resources/fontawesome/svgs/solid/taxi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/teeth-open.svg b/resources/fontawesome/svgs/solid/teeth-open.svg deleted file mode 100644 index ac8706f..0000000 --- a/resources/fontawesome/svgs/solid/teeth-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/teeth.svg b/resources/fontawesome/svgs/solid/teeth.svg deleted file mode 100644 index a7e8743..0000000 --- a/resources/fontawesome/svgs/solid/teeth.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-arrow-down.svg b/resources/fontawesome/svgs/solid/temperature-arrow-down.svg deleted file mode 100644 index e963485..0000000 --- a/resources/fontawesome/svgs/solid/temperature-arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-arrow-up.svg b/resources/fontawesome/svgs/solid/temperature-arrow-up.svg deleted file mode 100644 index c7a3e10..0000000 --- a/resources/fontawesome/svgs/solid/temperature-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-empty.svg b/resources/fontawesome/svgs/solid/temperature-empty.svg deleted file mode 100644 index 855639a..0000000 --- a/resources/fontawesome/svgs/solid/temperature-empty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-full.svg b/resources/fontawesome/svgs/solid/temperature-full.svg deleted file mode 100644 index 29eff0b..0000000 --- a/resources/fontawesome/svgs/solid/temperature-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-half.svg b/resources/fontawesome/svgs/solid/temperature-half.svg deleted file mode 100644 index 7fc0fb2..0000000 --- a/resources/fontawesome/svgs/solid/temperature-half.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-high.svg b/resources/fontawesome/svgs/solid/temperature-high.svg deleted file mode 100644 index 57103c0..0000000 --- a/resources/fontawesome/svgs/solid/temperature-high.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-low.svg b/resources/fontawesome/svgs/solid/temperature-low.svg deleted file mode 100644 index a821fb2..0000000 --- a/resources/fontawesome/svgs/solid/temperature-low.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-quarter.svg b/resources/fontawesome/svgs/solid/temperature-quarter.svg deleted file mode 100644 index 2fb1c38..0000000 --- a/resources/fontawesome/svgs/solid/temperature-quarter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/temperature-three-quarters.svg b/resources/fontawesome/svgs/solid/temperature-three-quarters.svg deleted file mode 100644 index c336816..0000000 --- a/resources/fontawesome/svgs/solid/temperature-three-quarters.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tenge-sign.svg b/resources/fontawesome/svgs/solid/tenge-sign.svg deleted file mode 100644 index 5191b9e..0000000 --- a/resources/fontawesome/svgs/solid/tenge-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tent-arrow-down-to-line.svg b/resources/fontawesome/svgs/solid/tent-arrow-down-to-line.svg deleted file mode 100644 index 6e117c2..0000000 --- a/resources/fontawesome/svgs/solid/tent-arrow-down-to-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tent-arrow-left-right.svg b/resources/fontawesome/svgs/solid/tent-arrow-left-right.svg deleted file mode 100644 index 1dee5c8..0000000 --- a/resources/fontawesome/svgs/solid/tent-arrow-left-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tent-arrow-turn-left.svg b/resources/fontawesome/svgs/solid/tent-arrow-turn-left.svg deleted file mode 100644 index ec974be..0000000 --- a/resources/fontawesome/svgs/solid/tent-arrow-turn-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tent-arrows-down.svg b/resources/fontawesome/svgs/solid/tent-arrows-down.svg deleted file mode 100644 index 08f30ff..0000000 --- a/resources/fontawesome/svgs/solid/tent-arrows-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tent.svg b/resources/fontawesome/svgs/solid/tent.svg deleted file mode 100644 index 7d32006..0000000 --- a/resources/fontawesome/svgs/solid/tent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tents.svg b/resources/fontawesome/svgs/solid/tents.svg deleted file mode 100644 index 8f6292f..0000000 --- a/resources/fontawesome/svgs/solid/tents.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/terminal.svg b/resources/fontawesome/svgs/solid/terminal.svg deleted file mode 100644 index e158952..0000000 --- a/resources/fontawesome/svgs/solid/terminal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/text-height.svg b/resources/fontawesome/svgs/solid/text-height.svg deleted file mode 100644 index aec4791..0000000 --- a/resources/fontawesome/svgs/solid/text-height.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/text-slash.svg b/resources/fontawesome/svgs/solid/text-slash.svg deleted file mode 100644 index 2cb0524..0000000 --- a/resources/fontawesome/svgs/solid/text-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/text-width.svg b/resources/fontawesome/svgs/solid/text-width.svg deleted file mode 100644 index 8f6d7fd..0000000 --- a/resources/fontawesome/svgs/solid/text-width.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/thermometer.svg b/resources/fontawesome/svgs/solid/thermometer.svg deleted file mode 100644 index 9ff009d..0000000 --- a/resources/fontawesome/svgs/solid/thermometer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/thumbs-down.svg b/resources/fontawesome/svgs/solid/thumbs-down.svg deleted file mode 100644 index b3964f7..0000000 --- a/resources/fontawesome/svgs/solid/thumbs-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/thumbs-up.svg b/resources/fontawesome/svgs/solid/thumbs-up.svg deleted file mode 100644 index 74f68eb..0000000 --- a/resources/fontawesome/svgs/solid/thumbs-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/thumbtack.svg b/resources/fontawesome/svgs/solid/thumbtack.svg deleted file mode 100644 index 72e7565..0000000 --- a/resources/fontawesome/svgs/solid/thumbtack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ticket-simple.svg b/resources/fontawesome/svgs/solid/ticket-simple.svg deleted file mode 100644 index 7b3be64..0000000 --- a/resources/fontawesome/svgs/solid/ticket-simple.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/ticket.svg b/resources/fontawesome/svgs/solid/ticket.svg deleted file mode 100644 index fea290f..0000000 --- a/resources/fontawesome/svgs/solid/ticket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/timeline.svg b/resources/fontawesome/svgs/solid/timeline.svg deleted file mode 100644 index 2452d50..0000000 --- a/resources/fontawesome/svgs/solid/timeline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toggle-off.svg b/resources/fontawesome/svgs/solid/toggle-off.svg deleted file mode 100644 index f83dd9e..0000000 --- a/resources/fontawesome/svgs/solid/toggle-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toggle-on.svg b/resources/fontawesome/svgs/solid/toggle-on.svg deleted file mode 100644 index 188c242..0000000 --- a/resources/fontawesome/svgs/solid/toggle-on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toilet-paper-slash.svg b/resources/fontawesome/svgs/solid/toilet-paper-slash.svg deleted file mode 100644 index 49e8926..0000000 --- a/resources/fontawesome/svgs/solid/toilet-paper-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toilet-paper.svg b/resources/fontawesome/svgs/solid/toilet-paper.svg deleted file mode 100644 index 76ab992..0000000 --- a/resources/fontawesome/svgs/solid/toilet-paper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toilet-portable.svg b/resources/fontawesome/svgs/solid/toilet-portable.svg deleted file mode 100644 index 139e6b2..0000000 --- a/resources/fontawesome/svgs/solid/toilet-portable.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toilet.svg b/resources/fontawesome/svgs/solid/toilet.svg deleted file mode 100644 index e54345d..0000000 --- a/resources/fontawesome/svgs/solid/toilet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toilets-portable.svg b/resources/fontawesome/svgs/solid/toilets-portable.svg deleted file mode 100644 index 48404f7..0000000 --- a/resources/fontawesome/svgs/solid/toilets-portable.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/toolbox.svg b/resources/fontawesome/svgs/solid/toolbox.svg deleted file mode 100644 index de5b327..0000000 --- a/resources/fontawesome/svgs/solid/toolbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tooth.svg b/resources/fontawesome/svgs/solid/tooth.svg deleted file mode 100644 index 11c5ddd..0000000 --- a/resources/fontawesome/svgs/solid/tooth.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/torii-gate.svg b/resources/fontawesome/svgs/solid/torii-gate.svg deleted file mode 100644 index 4fac1a8..0000000 --- a/resources/fontawesome/svgs/solid/torii-gate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tornado.svg b/resources/fontawesome/svgs/solid/tornado.svg deleted file mode 100644 index fbae365..0000000 --- a/resources/fontawesome/svgs/solid/tornado.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tower-broadcast.svg b/resources/fontawesome/svgs/solid/tower-broadcast.svg deleted file mode 100644 index 4b9729f..0000000 --- a/resources/fontawesome/svgs/solid/tower-broadcast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tower-cell.svg b/resources/fontawesome/svgs/solid/tower-cell.svg deleted file mode 100644 index 1a010dd..0000000 --- a/resources/fontawesome/svgs/solid/tower-cell.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tower-observation.svg b/resources/fontawesome/svgs/solid/tower-observation.svg deleted file mode 100644 index 315d244..0000000 --- a/resources/fontawesome/svgs/solid/tower-observation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tractor.svg b/resources/fontawesome/svgs/solid/tractor.svg deleted file mode 100644 index bdaa54b..0000000 --- a/resources/fontawesome/svgs/solid/tractor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trademark.svg b/resources/fontawesome/svgs/solid/trademark.svg deleted file mode 100644 index a8b2618..0000000 --- a/resources/fontawesome/svgs/solid/trademark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/traffic-light.svg b/resources/fontawesome/svgs/solid/traffic-light.svg deleted file mode 100644 index ddcff17..0000000 --- a/resources/fontawesome/svgs/solid/traffic-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trailer.svg b/resources/fontawesome/svgs/solid/trailer.svg deleted file mode 100644 index 6ff45ef..0000000 --- a/resources/fontawesome/svgs/solid/trailer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/train-subway.svg b/resources/fontawesome/svgs/solid/train-subway.svg deleted file mode 100644 index 34ad246..0000000 --- a/resources/fontawesome/svgs/solid/train-subway.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/train-tram.svg b/resources/fontawesome/svgs/solid/train-tram.svg deleted file mode 100644 index f3c113e..0000000 --- a/resources/fontawesome/svgs/solid/train-tram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/train.svg b/resources/fontawesome/svgs/solid/train.svg deleted file mode 100644 index 7465ad2..0000000 --- a/resources/fontawesome/svgs/solid/train.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/transgender.svg b/resources/fontawesome/svgs/solid/transgender.svg deleted file mode 100644 index c139c98..0000000 --- a/resources/fontawesome/svgs/solid/transgender.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trash-arrow-up.svg b/resources/fontawesome/svgs/solid/trash-arrow-up.svg deleted file mode 100644 index d9e4da0..0000000 --- a/resources/fontawesome/svgs/solid/trash-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trash-can-arrow-up.svg b/resources/fontawesome/svgs/solid/trash-can-arrow-up.svg deleted file mode 100644 index a7612cf..0000000 --- a/resources/fontawesome/svgs/solid/trash-can-arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trash-can.svg b/resources/fontawesome/svgs/solid/trash-can.svg deleted file mode 100644 index 47d0ea1..0000000 --- a/resources/fontawesome/svgs/solid/trash-can.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trash.svg b/resources/fontawesome/svgs/solid/trash.svg deleted file mode 100644 index ed5cf94..0000000 --- a/resources/fontawesome/svgs/solid/trash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tree-city.svg b/resources/fontawesome/svgs/solid/tree-city.svg deleted file mode 100644 index d0c8d26..0000000 --- a/resources/fontawesome/svgs/solid/tree-city.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tree.svg b/resources/fontawesome/svgs/solid/tree.svg deleted file mode 100644 index fafaad0..0000000 --- a/resources/fontawesome/svgs/solid/tree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/triangle-exclamation.svg b/resources/fontawesome/svgs/solid/triangle-exclamation.svg deleted file mode 100644 index 014ef5e..0000000 --- a/resources/fontawesome/svgs/solid/triangle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trophy.svg b/resources/fontawesome/svgs/solid/trophy.svg deleted file mode 100644 index 94bfe49..0000000 --- a/resources/fontawesome/svgs/solid/trophy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trowel-bricks.svg b/resources/fontawesome/svgs/solid/trowel-bricks.svg deleted file mode 100644 index 31d95e2..0000000 --- a/resources/fontawesome/svgs/solid/trowel-bricks.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/trowel.svg b/resources/fontawesome/svgs/solid/trowel.svg deleted file mode 100644 index ff7a46f..0000000 --- a/resources/fontawesome/svgs/solid/trowel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-arrow-right.svg b/resources/fontawesome/svgs/solid/truck-arrow-right.svg deleted file mode 100644 index efef2c3..0000000 --- a/resources/fontawesome/svgs/solid/truck-arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-droplet.svg b/resources/fontawesome/svgs/solid/truck-droplet.svg deleted file mode 100644 index 261a3fe..0000000 --- a/resources/fontawesome/svgs/solid/truck-droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-fast.svg b/resources/fontawesome/svgs/solid/truck-fast.svg deleted file mode 100644 index 77b400b..0000000 --- a/resources/fontawesome/svgs/solid/truck-fast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-field-un.svg b/resources/fontawesome/svgs/solid/truck-field-un.svg deleted file mode 100644 index 8715aef..0000000 --- a/resources/fontawesome/svgs/solid/truck-field-un.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-field.svg b/resources/fontawesome/svgs/solid/truck-field.svg deleted file mode 100644 index 7f4fb7b..0000000 --- a/resources/fontawesome/svgs/solid/truck-field.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-front.svg b/resources/fontawesome/svgs/solid/truck-front.svg deleted file mode 100644 index 855f8e5..0000000 --- a/resources/fontawesome/svgs/solid/truck-front.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-medical.svg b/resources/fontawesome/svgs/solid/truck-medical.svg deleted file mode 100644 index 1716161..0000000 --- a/resources/fontawesome/svgs/solid/truck-medical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-monster.svg b/resources/fontawesome/svgs/solid/truck-monster.svg deleted file mode 100644 index 265758e..0000000 --- a/resources/fontawesome/svgs/solid/truck-monster.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-moving.svg b/resources/fontawesome/svgs/solid/truck-moving.svg deleted file mode 100644 index 16d627a..0000000 --- a/resources/fontawesome/svgs/solid/truck-moving.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-pickup.svg b/resources/fontawesome/svgs/solid/truck-pickup.svg deleted file mode 100644 index 58f39b6..0000000 --- a/resources/fontawesome/svgs/solid/truck-pickup.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-plane.svg b/resources/fontawesome/svgs/solid/truck-plane.svg deleted file mode 100644 index 6e22edc..0000000 --- a/resources/fontawesome/svgs/solid/truck-plane.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck-ramp-box.svg b/resources/fontawesome/svgs/solid/truck-ramp-box.svg deleted file mode 100644 index f3602ce..0000000 --- a/resources/fontawesome/svgs/solid/truck-ramp-box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/truck.svg b/resources/fontawesome/svgs/solid/truck.svg deleted file mode 100644 index 5453b04..0000000 --- a/resources/fontawesome/svgs/solid/truck.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tty.svg b/resources/fontawesome/svgs/solid/tty.svg deleted file mode 100644 index aa80493..0000000 --- a/resources/fontawesome/svgs/solid/tty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/turkish-lira-sign.svg b/resources/fontawesome/svgs/solid/turkish-lira-sign.svg deleted file mode 100644 index 45adbf8..0000000 --- a/resources/fontawesome/svgs/solid/turkish-lira-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/turn-down.svg b/resources/fontawesome/svgs/solid/turn-down.svg deleted file mode 100644 index 8eb1ec3..0000000 --- a/resources/fontawesome/svgs/solid/turn-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/turn-up.svg b/resources/fontawesome/svgs/solid/turn-up.svg deleted file mode 100644 index 3c14580..0000000 --- a/resources/fontawesome/svgs/solid/turn-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/tv.svg b/resources/fontawesome/svgs/solid/tv.svg deleted file mode 100644 index eb2e445..0000000 --- a/resources/fontawesome/svgs/solid/tv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/u.svg b/resources/fontawesome/svgs/solid/u.svg deleted file mode 100644 index 0e64deb..0000000 --- a/resources/fontawesome/svgs/solid/u.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/umbrella-beach.svg b/resources/fontawesome/svgs/solid/umbrella-beach.svg deleted file mode 100644 index 630e3e9..0000000 --- a/resources/fontawesome/svgs/solid/umbrella-beach.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/umbrella.svg b/resources/fontawesome/svgs/solid/umbrella.svg deleted file mode 100644 index d89b595..0000000 --- a/resources/fontawesome/svgs/solid/umbrella.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/underline.svg b/resources/fontawesome/svgs/solid/underline.svg deleted file mode 100644 index c1864b0..0000000 --- a/resources/fontawesome/svgs/solid/underline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/universal-access.svg b/resources/fontawesome/svgs/solid/universal-access.svg deleted file mode 100644 index 893120f..0000000 --- a/resources/fontawesome/svgs/solid/universal-access.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/unlock-keyhole.svg b/resources/fontawesome/svgs/solid/unlock-keyhole.svg deleted file mode 100644 index a5b76f7..0000000 --- a/resources/fontawesome/svgs/solid/unlock-keyhole.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/unlock.svg b/resources/fontawesome/svgs/solid/unlock.svg deleted file mode 100644 index ed1fea5..0000000 --- a/resources/fontawesome/svgs/solid/unlock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/up-down-left-right.svg b/resources/fontawesome/svgs/solid/up-down-left-right.svg deleted file mode 100644 index 1363a20..0000000 --- a/resources/fontawesome/svgs/solid/up-down-left-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/up-down.svg b/resources/fontawesome/svgs/solid/up-down.svg deleted file mode 100644 index c886f1d..0000000 --- a/resources/fontawesome/svgs/solid/up-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/up-long.svg b/resources/fontawesome/svgs/solid/up-long.svg deleted file mode 100644 index 2a18576..0000000 --- a/resources/fontawesome/svgs/solid/up-long.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/up-right-and-down-left-from-center.svg b/resources/fontawesome/svgs/solid/up-right-and-down-left-from-center.svg deleted file mode 100644 index 6ee8064..0000000 --- a/resources/fontawesome/svgs/solid/up-right-and-down-left-from-center.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/up-right-from-square.svg b/resources/fontawesome/svgs/solid/up-right-from-square.svg deleted file mode 100644 index b749492..0000000 --- a/resources/fontawesome/svgs/solid/up-right-from-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/upload.svg b/resources/fontawesome/svgs/solid/upload.svg deleted file mode 100644 index b54b6a2..0000000 --- a/resources/fontawesome/svgs/solid/upload.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-astronaut.svg b/resources/fontawesome/svgs/solid/user-astronaut.svg deleted file mode 100644 index a6bd6b4..0000000 --- a/resources/fontawesome/svgs/solid/user-astronaut.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-check.svg b/resources/fontawesome/svgs/solid/user-check.svg deleted file mode 100644 index 99e1292..0000000 --- a/resources/fontawesome/svgs/solid/user-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-clock.svg b/resources/fontawesome/svgs/solid/user-clock.svg deleted file mode 100644 index 4666e20..0000000 --- a/resources/fontawesome/svgs/solid/user-clock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-doctor.svg b/resources/fontawesome/svgs/solid/user-doctor.svg deleted file mode 100644 index d942803..0000000 --- a/resources/fontawesome/svgs/solid/user-doctor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-gear.svg b/resources/fontawesome/svgs/solid/user-gear.svg deleted file mode 100644 index 51ee199..0000000 --- a/resources/fontawesome/svgs/solid/user-gear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-graduate.svg b/resources/fontawesome/svgs/solid/user-graduate.svg deleted file mode 100644 index ecf46ac..0000000 --- a/resources/fontawesome/svgs/solid/user-graduate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-group.svg b/resources/fontawesome/svgs/solid/user-group.svg deleted file mode 100644 index 7c28bff..0000000 --- a/resources/fontawesome/svgs/solid/user-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-injured.svg b/resources/fontawesome/svgs/solid/user-injured.svg deleted file mode 100644 index d019c44..0000000 --- a/resources/fontawesome/svgs/solid/user-injured.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-large-slash.svg b/resources/fontawesome/svgs/solid/user-large-slash.svg deleted file mode 100644 index 6b86548..0000000 --- a/resources/fontawesome/svgs/solid/user-large-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-large.svg b/resources/fontawesome/svgs/solid/user-large.svg deleted file mode 100644 index 1dde314..0000000 --- a/resources/fontawesome/svgs/solid/user-large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-lock.svg b/resources/fontawesome/svgs/solid/user-lock.svg deleted file mode 100644 index ace0185..0000000 --- a/resources/fontawesome/svgs/solid/user-lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-minus.svg b/resources/fontawesome/svgs/solid/user-minus.svg deleted file mode 100644 index 1b61d89..0000000 --- a/resources/fontawesome/svgs/solid/user-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-ninja.svg b/resources/fontawesome/svgs/solid/user-ninja.svg deleted file mode 100644 index 5d91a49..0000000 --- a/resources/fontawesome/svgs/solid/user-ninja.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-nurse.svg b/resources/fontawesome/svgs/solid/user-nurse.svg deleted file mode 100644 index a0f6823..0000000 --- a/resources/fontawesome/svgs/solid/user-nurse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-pen.svg b/resources/fontawesome/svgs/solid/user-pen.svg deleted file mode 100644 index d0cd463..0000000 --- a/resources/fontawesome/svgs/solid/user-pen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-plus.svg b/resources/fontawesome/svgs/solid/user-plus.svg deleted file mode 100644 index aad9c27..0000000 --- a/resources/fontawesome/svgs/solid/user-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-secret.svg b/resources/fontawesome/svgs/solid/user-secret.svg deleted file mode 100644 index 5100bb5..0000000 --- a/resources/fontawesome/svgs/solid/user-secret.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-shield.svg b/resources/fontawesome/svgs/solid/user-shield.svg deleted file mode 100644 index 892335a..0000000 --- a/resources/fontawesome/svgs/solid/user-shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-slash.svg b/resources/fontawesome/svgs/solid/user-slash.svg deleted file mode 100644 index e2b1dd4..0000000 --- a/resources/fontawesome/svgs/solid/user-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-tag.svg b/resources/fontawesome/svgs/solid/user-tag.svg deleted file mode 100644 index a60f22f..0000000 --- a/resources/fontawesome/svgs/solid/user-tag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-tie.svg b/resources/fontawesome/svgs/solid/user-tie.svg deleted file mode 100644 index 870aad0..0000000 --- a/resources/fontawesome/svgs/solid/user-tie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user-xmark.svg b/resources/fontawesome/svgs/solid/user-xmark.svg deleted file mode 100644 index 1ac4d67..0000000 --- a/resources/fontawesome/svgs/solid/user-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/user.svg b/resources/fontawesome/svgs/solid/user.svg deleted file mode 100644 index ae4d9cc..0000000 --- a/resources/fontawesome/svgs/solid/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-between-lines.svg b/resources/fontawesome/svgs/solid/users-between-lines.svg deleted file mode 100644 index f113ed2..0000000 --- a/resources/fontawesome/svgs/solid/users-between-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-gear.svg b/resources/fontawesome/svgs/solid/users-gear.svg deleted file mode 100644 index 2d011c8..0000000 --- a/resources/fontawesome/svgs/solid/users-gear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-line.svg b/resources/fontawesome/svgs/solid/users-line.svg deleted file mode 100644 index 84ecd95..0000000 --- a/resources/fontawesome/svgs/solid/users-line.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-rays.svg b/resources/fontawesome/svgs/solid/users-rays.svg deleted file mode 100644 index 45f6b02..0000000 --- a/resources/fontawesome/svgs/solid/users-rays.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-rectangle.svg b/resources/fontawesome/svgs/solid/users-rectangle.svg deleted file mode 100644 index 5198d18..0000000 --- a/resources/fontawesome/svgs/solid/users-rectangle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-slash.svg b/resources/fontawesome/svgs/solid/users-slash.svg deleted file mode 100644 index 28c01d4..0000000 --- a/resources/fontawesome/svgs/solid/users-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users-viewfinder.svg b/resources/fontawesome/svgs/solid/users-viewfinder.svg deleted file mode 100644 index b2b8b7a..0000000 --- a/resources/fontawesome/svgs/solid/users-viewfinder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/users.svg b/resources/fontawesome/svgs/solid/users.svg deleted file mode 100644 index 3af4cc4..0000000 --- a/resources/fontawesome/svgs/solid/users.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/utensils.svg b/resources/fontawesome/svgs/solid/utensils.svg deleted file mode 100644 index 760c677..0000000 --- a/resources/fontawesome/svgs/solid/utensils.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/v.svg b/resources/fontawesome/svgs/solid/v.svg deleted file mode 100644 index 4cda538..0000000 --- a/resources/fontawesome/svgs/solid/v.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/van-shuttle.svg b/resources/fontawesome/svgs/solid/van-shuttle.svg deleted file mode 100644 index d5b7234..0000000 --- a/resources/fontawesome/svgs/solid/van-shuttle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vault.svg b/resources/fontawesome/svgs/solid/vault.svg deleted file mode 100644 index 31ccc3b..0000000 --- a/resources/fontawesome/svgs/solid/vault.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vector-square.svg b/resources/fontawesome/svgs/solid/vector-square.svg deleted file mode 100644 index a16c648..0000000 --- a/resources/fontawesome/svgs/solid/vector-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/venus-double.svg b/resources/fontawesome/svgs/solid/venus-double.svg deleted file mode 100644 index ce7323f..0000000 --- a/resources/fontawesome/svgs/solid/venus-double.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/venus-mars.svg b/resources/fontawesome/svgs/solid/venus-mars.svg deleted file mode 100644 index e440c81..0000000 --- a/resources/fontawesome/svgs/solid/venus-mars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/venus.svg b/resources/fontawesome/svgs/solid/venus.svg deleted file mode 100644 index d47abed..0000000 --- a/resources/fontawesome/svgs/solid/venus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vest-patches.svg b/resources/fontawesome/svgs/solid/vest-patches.svg deleted file mode 100644 index fdd3181..0000000 --- a/resources/fontawesome/svgs/solid/vest-patches.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vest.svg b/resources/fontawesome/svgs/solid/vest.svg deleted file mode 100644 index e0c702e..0000000 --- a/resources/fontawesome/svgs/solid/vest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vial-circle-check.svg b/resources/fontawesome/svgs/solid/vial-circle-check.svg deleted file mode 100644 index caa4ee6..0000000 --- a/resources/fontawesome/svgs/solid/vial-circle-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vial-virus.svg b/resources/fontawesome/svgs/solid/vial-virus.svg deleted file mode 100644 index a5b6da6..0000000 --- a/resources/fontawesome/svgs/solid/vial-virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vial.svg b/resources/fontawesome/svgs/solid/vial.svg deleted file mode 100644 index c760c41..0000000 --- a/resources/fontawesome/svgs/solid/vial.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vials.svg b/resources/fontawesome/svgs/solid/vials.svg deleted file mode 100644 index 5f38b40..0000000 --- a/resources/fontawesome/svgs/solid/vials.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/video-slash.svg b/resources/fontawesome/svgs/solid/video-slash.svg deleted file mode 100644 index d9c396c..0000000 --- a/resources/fontawesome/svgs/solid/video-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/video.svg b/resources/fontawesome/svgs/solid/video.svg deleted file mode 100644 index 7d4e1f3..0000000 --- a/resources/fontawesome/svgs/solid/video.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vihara.svg b/resources/fontawesome/svgs/solid/vihara.svg deleted file mode 100644 index 6d7233c..0000000 --- a/resources/fontawesome/svgs/solid/vihara.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/virus-covid-slash.svg b/resources/fontawesome/svgs/solid/virus-covid-slash.svg deleted file mode 100644 index a9bf263..0000000 --- a/resources/fontawesome/svgs/solid/virus-covid-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/virus-covid.svg b/resources/fontawesome/svgs/solid/virus-covid.svg deleted file mode 100644 index b111f66..0000000 --- a/resources/fontawesome/svgs/solid/virus-covid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/virus-slash.svg b/resources/fontawesome/svgs/solid/virus-slash.svg deleted file mode 100644 index b327ed0..0000000 --- a/resources/fontawesome/svgs/solid/virus-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/virus.svg b/resources/fontawesome/svgs/solid/virus.svg deleted file mode 100644 index a7fbe27..0000000 --- a/resources/fontawesome/svgs/solid/virus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/viruses.svg b/resources/fontawesome/svgs/solid/viruses.svg deleted file mode 100644 index 59c262e..0000000 --- a/resources/fontawesome/svgs/solid/viruses.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/voicemail.svg b/resources/fontawesome/svgs/solid/voicemail.svg deleted file mode 100644 index 3c39d87..0000000 --- a/resources/fontawesome/svgs/solid/voicemail.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volcano.svg b/resources/fontawesome/svgs/solid/volcano.svg deleted file mode 100644 index 3157700..0000000 --- a/resources/fontawesome/svgs/solid/volcano.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volleyball.svg b/resources/fontawesome/svgs/solid/volleyball.svg deleted file mode 100644 index a0ffe5f..0000000 --- a/resources/fontawesome/svgs/solid/volleyball.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volume-high.svg b/resources/fontawesome/svgs/solid/volume-high.svg deleted file mode 100644 index 71855b2..0000000 --- a/resources/fontawesome/svgs/solid/volume-high.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volume-low.svg b/resources/fontawesome/svgs/solid/volume-low.svg deleted file mode 100644 index 531e98d..0000000 --- a/resources/fontawesome/svgs/solid/volume-low.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volume-off.svg b/resources/fontawesome/svgs/solid/volume-off.svg deleted file mode 100644 index 4d06eec..0000000 --- a/resources/fontawesome/svgs/solid/volume-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/volume-xmark.svg b/resources/fontawesome/svgs/solid/volume-xmark.svg deleted file mode 100644 index 82bb581..0000000 --- a/resources/fontawesome/svgs/solid/volume-xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/vr-cardboard.svg b/resources/fontawesome/svgs/solid/vr-cardboard.svg deleted file mode 100644 index 4d0ca14..0000000 --- a/resources/fontawesome/svgs/solid/vr-cardboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/w.svg b/resources/fontawesome/svgs/solid/w.svg deleted file mode 100644 index 1f3f57b..0000000 --- a/resources/fontawesome/svgs/solid/w.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/walkie-talkie.svg b/resources/fontawesome/svgs/solid/walkie-talkie.svg deleted file mode 100644 index 02bd516..0000000 --- a/resources/fontawesome/svgs/solid/walkie-talkie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wallet.svg b/resources/fontawesome/svgs/solid/wallet.svg deleted file mode 100644 index a256dd6..0000000 --- a/resources/fontawesome/svgs/solid/wallet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wand-magic-sparkles.svg b/resources/fontawesome/svgs/solid/wand-magic-sparkles.svg deleted file mode 100644 index 0c4b481..0000000 --- a/resources/fontawesome/svgs/solid/wand-magic-sparkles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wand-magic.svg b/resources/fontawesome/svgs/solid/wand-magic.svg deleted file mode 100644 index cd8fec5..0000000 --- a/resources/fontawesome/svgs/solid/wand-magic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wand-sparkles.svg b/resources/fontawesome/svgs/solid/wand-sparkles.svg deleted file mode 100644 index 02b192f..0000000 --- a/resources/fontawesome/svgs/solid/wand-sparkles.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/warehouse.svg b/resources/fontawesome/svgs/solid/warehouse.svg deleted file mode 100644 index db90588..0000000 --- a/resources/fontawesome/svgs/solid/warehouse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/water-ladder.svg b/resources/fontawesome/svgs/solid/water-ladder.svg deleted file mode 100644 index 27efa49..0000000 --- a/resources/fontawesome/svgs/solid/water-ladder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/water.svg b/resources/fontawesome/svgs/solid/water.svg deleted file mode 100644 index ea29f51..0000000 --- a/resources/fontawesome/svgs/solid/water.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wave-square.svg b/resources/fontawesome/svgs/solid/wave-square.svg deleted file mode 100644 index a905551..0000000 --- a/resources/fontawesome/svgs/solid/wave-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/weight-hanging.svg b/resources/fontawesome/svgs/solid/weight-hanging.svg deleted file mode 100644 index d6d09eb..0000000 --- a/resources/fontawesome/svgs/solid/weight-hanging.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/weight-scale.svg b/resources/fontawesome/svgs/solid/weight-scale.svg deleted file mode 100644 index 1dd09d2..0000000 --- a/resources/fontawesome/svgs/solid/weight-scale.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wheat-awn-circle-exclamation.svg b/resources/fontawesome/svgs/solid/wheat-awn-circle-exclamation.svg deleted file mode 100644 index ded0c62..0000000 --- a/resources/fontawesome/svgs/solid/wheat-awn-circle-exclamation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wheat-awn.svg b/resources/fontawesome/svgs/solid/wheat-awn.svg deleted file mode 100644 index 244d741..0000000 --- a/resources/fontawesome/svgs/solid/wheat-awn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wheelchair-move.svg b/resources/fontawesome/svgs/solid/wheelchair-move.svg deleted file mode 100644 index cdcb66b..0000000 --- a/resources/fontawesome/svgs/solid/wheelchair-move.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wheelchair.svg b/resources/fontawesome/svgs/solid/wheelchair.svg deleted file mode 100644 index 8f3ba9a..0000000 --- a/resources/fontawesome/svgs/solid/wheelchair.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/whiskey-glass.svg b/resources/fontawesome/svgs/solid/whiskey-glass.svg deleted file mode 100644 index 3641130..0000000 --- a/resources/fontawesome/svgs/solid/whiskey-glass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wifi.svg b/resources/fontawesome/svgs/solid/wifi.svg deleted file mode 100644 index 533946b..0000000 --- a/resources/fontawesome/svgs/solid/wifi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wind.svg b/resources/fontawesome/svgs/solid/wind.svg deleted file mode 100644 index 0c40216..0000000 --- a/resources/fontawesome/svgs/solid/wind.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/window-maximize.svg b/resources/fontawesome/svgs/solid/window-maximize.svg deleted file mode 100644 index 2d558ff..0000000 --- a/resources/fontawesome/svgs/solid/window-maximize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/window-minimize.svg b/resources/fontawesome/svgs/solid/window-minimize.svg deleted file mode 100644 index 001d11d..0000000 --- a/resources/fontawesome/svgs/solid/window-minimize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/window-restore.svg b/resources/fontawesome/svgs/solid/window-restore.svg deleted file mode 100644 index 07731e1..0000000 --- a/resources/fontawesome/svgs/solid/window-restore.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wine-bottle.svg b/resources/fontawesome/svgs/solid/wine-bottle.svg deleted file mode 100644 index 541d119..0000000 --- a/resources/fontawesome/svgs/solid/wine-bottle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wine-glass-empty.svg b/resources/fontawesome/svgs/solid/wine-glass-empty.svg deleted file mode 100644 index 3150b47..0000000 --- a/resources/fontawesome/svgs/solid/wine-glass-empty.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wine-glass.svg b/resources/fontawesome/svgs/solid/wine-glass.svg deleted file mode 100644 index e560f7b..0000000 --- a/resources/fontawesome/svgs/solid/wine-glass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/won-sign.svg b/resources/fontawesome/svgs/solid/won-sign.svg deleted file mode 100644 index aa6b23c..0000000 --- a/resources/fontawesome/svgs/solid/won-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/worm.svg b/resources/fontawesome/svgs/solid/worm.svg deleted file mode 100644 index 2b0ef9f..0000000 --- a/resources/fontawesome/svgs/solid/worm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/wrench.svg b/resources/fontawesome/svgs/solid/wrench.svg deleted file mode 100644 index a0db05c..0000000 --- a/resources/fontawesome/svgs/solid/wrench.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/x-ray.svg b/resources/fontawesome/svgs/solid/x-ray.svg deleted file mode 100644 index a3b995f..0000000 --- a/resources/fontawesome/svgs/solid/x-ray.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/x.svg b/resources/fontawesome/svgs/solid/x.svg deleted file mode 100644 index 18b441b..0000000 --- a/resources/fontawesome/svgs/solid/x.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/xmark.svg b/resources/fontawesome/svgs/solid/xmark.svg deleted file mode 100644 index 331cd75..0000000 --- a/resources/fontawesome/svgs/solid/xmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/xmarks-lines.svg b/resources/fontawesome/svgs/solid/xmarks-lines.svg deleted file mode 100644 index 7af2144..0000000 --- a/resources/fontawesome/svgs/solid/xmarks-lines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/y.svg b/resources/fontawesome/svgs/solid/y.svg deleted file mode 100644 index c533b52..0000000 --- a/resources/fontawesome/svgs/solid/y.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/yen-sign.svg b/resources/fontawesome/svgs/solid/yen-sign.svg deleted file mode 100644 index 73eb394..0000000 --- a/resources/fontawesome/svgs/solid/yen-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/yin-yang.svg b/resources/fontawesome/svgs/solid/yin-yang.svg deleted file mode 100644 index 72899e4..0000000 --- a/resources/fontawesome/svgs/solid/yin-yang.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/svgs/solid/z.svg b/resources/fontawesome/svgs/solid/z.svg deleted file mode 100644 index 97b59ae..0000000 --- a/resources/fontawesome/svgs/solid/z.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/fontawesome/webfonts/fa-brands-400.ttf b/resources/fontawesome/webfonts/fa-brands-400.ttf deleted file mode 100644 index 1fbb1f7..0000000 Binary files a/resources/fontawesome/webfonts/fa-brands-400.ttf and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-brands-400.woff2 b/resources/fontawesome/webfonts/fa-brands-400.woff2 deleted file mode 100644 index 5d28021..0000000 Binary files a/resources/fontawesome/webfonts/fa-brands-400.woff2 and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-regular-400.ttf b/resources/fontawesome/webfonts/fa-regular-400.ttf deleted file mode 100644 index 549d68d..0000000 Binary files a/resources/fontawesome/webfonts/fa-regular-400.ttf and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-regular-400.woff2 b/resources/fontawesome/webfonts/fa-regular-400.woff2 deleted file mode 100644 index 18400d7..0000000 Binary files a/resources/fontawesome/webfonts/fa-regular-400.woff2 and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-solid-900.ttf b/resources/fontawesome/webfonts/fa-solid-900.ttf deleted file mode 100644 index bb2a869..0000000 Binary files a/resources/fontawesome/webfonts/fa-solid-900.ttf and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-solid-900.woff2 b/resources/fontawesome/webfonts/fa-solid-900.woff2 deleted file mode 100644 index 758dd4f..0000000 Binary files a/resources/fontawesome/webfonts/fa-solid-900.woff2 and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-v4compatibility.ttf b/resources/fontawesome/webfonts/fa-v4compatibility.ttf deleted file mode 100644 index 8c5864c..0000000 Binary files a/resources/fontawesome/webfonts/fa-v4compatibility.ttf and /dev/null differ diff --git a/resources/fontawesome/webfonts/fa-v4compatibility.woff2 b/resources/fontawesome/webfonts/fa-v4compatibility.woff2 deleted file mode 100644 index f94bec2..0000000 Binary files a/resources/fontawesome/webfonts/fa-v4compatibility.woff2 and /dev/null differ diff --git a/resources/html/loading-page.html b/resources/html/loading-page.html deleted file mode 100644 index 8f9ec8a..0000000 --- a/resources/html/loading-page.html +++ /dev/null @@ -1,22 +0,0 @@ - -
-
- L - Q - D - O - J -
-
\ No newline at end of file diff --git a/resources/icons/android-chrome-512x512.png b/resources/icons/android-chrome-512x512.png old mode 100644 new mode 100755 diff --git a/resources/icons/icon.svg b/resources/icons/icon.svg deleted file mode 100644 index f16e119..0000000 --- a/resources/icons/icon.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/icons/logo.png b/resources/icons/logo.png old mode 100644 new mode 100755 index fa74627..b7f38f0 Binary files a/resources/icons/logo.png and b/resources/icons/logo.png differ diff --git a/resources/icons/logo.svg b/resources/icons/logo.svg deleted file mode 100644 index 6df0467..0000000 --- a/resources/icons/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/icons/manifest.json b/resources/icons/manifest.json index 3b25a60..de65106 100644 --- a/resources/icons/manifest.json +++ b/resources/icons/manifest.json @@ -1,6 +1,6 @@ { - "name": "LQDOJ", - "short_name": "LQDOJ", + "name": "", + "short_name": "", "icons": [ { "src": "/android-chrome-192x192.png", @@ -8,8 +8,8 @@ "type": "image/png" }, { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", + "src": "/android-chrome-256x256.png", + "sizes": "256x256", "type": "image/png" } ], diff --git a/resources/icons/old/android-chrome-144x144.png b/resources/icons/old/android-chrome-144x144.png new file mode 100644 index 0000000..6a5f355 Binary files /dev/null and b/resources/icons/old/android-chrome-144x144.png differ diff --git a/resources/icons/old/android-chrome-192x192.png b/resources/icons/old/android-chrome-192x192.png new file mode 100644 index 0000000..86ba0f1 Binary files /dev/null and b/resources/icons/old/android-chrome-192x192.png differ diff --git a/resources/icons/old/android-chrome-36x36.png b/resources/icons/old/android-chrome-36x36.png new file mode 100644 index 0000000..1afb5d0 Binary files /dev/null and b/resources/icons/old/android-chrome-36x36.png differ diff --git a/resources/icons/old/android-chrome-48x48.png b/resources/icons/old/android-chrome-48x48.png new file mode 100644 index 0000000..373c603 Binary files /dev/null and b/resources/icons/old/android-chrome-48x48.png differ diff --git a/resources/icons/old/android-chrome-72x72.png b/resources/icons/old/android-chrome-72x72.png new file mode 100644 index 0000000..47ea2ce Binary files /dev/null and b/resources/icons/old/android-chrome-72x72.png differ diff --git a/resources/icons/old/android-chrome-96x96.png b/resources/icons/old/android-chrome-96x96.png new file mode 100644 index 0000000..5d553bf Binary files /dev/null and b/resources/icons/old/android-chrome-96x96.png differ diff --git a/resources/icons/old/apple-touch-icon-114x114-precomposed.png b/resources/icons/old/apple-touch-icon-114x114-precomposed.png new file mode 100644 index 0000000..5764db5 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-114x114-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-114x114.png b/resources/icons/old/apple-touch-icon-114x114.png new file mode 100644 index 0000000..4bb4160 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-114x114.png differ diff --git a/resources/icons/old/apple-touch-icon-120x120-precomposed.png b/resources/icons/old/apple-touch-icon-120x120-precomposed.png new file mode 100644 index 0000000..2ee5716 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-120x120-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-120x120.png b/resources/icons/old/apple-touch-icon-120x120.png new file mode 100644 index 0000000..63a1fdd Binary files /dev/null and b/resources/icons/old/apple-touch-icon-120x120.png differ diff --git a/resources/icons/old/apple-touch-icon-144x144-precomposed.png b/resources/icons/old/apple-touch-icon-144x144-precomposed.png new file mode 100644 index 0000000..2fd4d8e Binary files /dev/null and b/resources/icons/old/apple-touch-icon-144x144-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-144x144.png b/resources/icons/old/apple-touch-icon-144x144.png new file mode 100644 index 0000000..cc16c9f Binary files /dev/null and b/resources/icons/old/apple-touch-icon-144x144.png differ diff --git a/resources/icons/old/apple-touch-icon-152x152-precomposed.png b/resources/icons/old/apple-touch-icon-152x152-precomposed.png new file mode 100644 index 0000000..1f6ea27 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-152x152-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-152x152.png b/resources/icons/old/apple-touch-icon-152x152.png new file mode 100644 index 0000000..300b82f Binary files /dev/null and b/resources/icons/old/apple-touch-icon-152x152.png differ diff --git a/resources/icons/old/apple-touch-icon-180x180-precomposed.png b/resources/icons/old/apple-touch-icon-180x180-precomposed.png new file mode 100644 index 0000000..8553085 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-180x180-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-180x180.png b/resources/icons/old/apple-touch-icon-180x180.png new file mode 100644 index 0000000..d737f87 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-180x180.png differ diff --git a/resources/icons/old/apple-touch-icon-57x57-precomposed.png b/resources/icons/old/apple-touch-icon-57x57-precomposed.png new file mode 100644 index 0000000..deb2048 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-57x57-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-57x57.png b/resources/icons/old/apple-touch-icon-57x57.png new file mode 100644 index 0000000..2b2533d Binary files /dev/null and b/resources/icons/old/apple-touch-icon-57x57.png differ diff --git a/resources/icons/old/apple-touch-icon-60x60-precomposed.png b/resources/icons/old/apple-touch-icon-60x60-precomposed.png new file mode 100644 index 0000000..6b16cb1 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-60x60-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-60x60.png b/resources/icons/old/apple-touch-icon-60x60.png new file mode 100644 index 0000000..7c86aba Binary files /dev/null and b/resources/icons/old/apple-touch-icon-60x60.png differ diff --git a/resources/icons/old/apple-touch-icon-72x72-precomposed.png b/resources/icons/old/apple-touch-icon-72x72-precomposed.png new file mode 100644 index 0000000..85fa920 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-72x72-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-72x72.png b/resources/icons/old/apple-touch-icon-72x72.png new file mode 100644 index 0000000..3aa3aff Binary files /dev/null and b/resources/icons/old/apple-touch-icon-72x72.png differ diff --git a/resources/icons/old/apple-touch-icon-76x76-precomposed.png b/resources/icons/old/apple-touch-icon-76x76-precomposed.png new file mode 100644 index 0000000..abaf04a Binary files /dev/null and b/resources/icons/old/apple-touch-icon-76x76-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon-76x76.png b/resources/icons/old/apple-touch-icon-76x76.png new file mode 100644 index 0000000..a2d3734 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-76x76.png differ diff --git a/resources/icons/old/apple-touch-icon-precomposed.png b/resources/icons/old/apple-touch-icon-precomposed.png new file mode 100644 index 0000000..8553085 Binary files /dev/null and b/resources/icons/old/apple-touch-icon-precomposed.png differ diff --git a/resources/icons/old/apple-touch-icon.png b/resources/icons/old/apple-touch-icon.png new file mode 100644 index 0000000..e537d48 Binary files /dev/null and b/resources/icons/old/apple-touch-icon.png differ diff --git a/resources/icons/old/browserconfig.xml b/resources/icons/old/browserconfig.xml new file mode 100644 index 0000000..df8a72d --- /dev/null +++ b/resources/icons/old/browserconfig.xml @@ -0,0 +1,11 @@ + + + + + + + + #da532c + + + diff --git a/resources/icons/old/favicon-16x16.png b/resources/icons/old/favicon-16x16.png new file mode 100644 index 0000000..aa2cc02 Binary files /dev/null and b/resources/icons/old/favicon-16x16.png differ diff --git a/resources/icons/old/favicon-32x32.png b/resources/icons/old/favicon-32x32.png new file mode 100644 index 0000000..6358f95 Binary files /dev/null and b/resources/icons/old/favicon-32x32.png differ diff --git a/resources/icons/old/favicon.ico b/resources/icons/old/favicon.ico new file mode 100644 index 0000000..06d5fd9 Binary files /dev/null and b/resources/icons/old/favicon.ico differ diff --git a/resources/icons/old/logo_old.png b/resources/icons/old/logo_old.png new file mode 100644 index 0000000..9eb296a Binary files /dev/null and b/resources/icons/old/logo_old.png differ diff --git a/resources/icons/old/mstile-144x144.png b/resources/icons/old/mstile-144x144.png new file mode 100644 index 0000000..c005af3 Binary files /dev/null and b/resources/icons/old/mstile-144x144.png differ diff --git a/resources/icons/old/mstile-150x150.png b/resources/icons/old/mstile-150x150.png new file mode 100644 index 0000000..800d2b7 Binary files /dev/null and b/resources/icons/old/mstile-150x150.png differ diff --git a/resources/icons/old/mstile-310x150.png b/resources/icons/old/mstile-310x150.png new file mode 100644 index 0000000..ffd4452 Binary files /dev/null and b/resources/icons/old/mstile-310x150.png differ diff --git a/resources/icons/old/mstile-310x310.png b/resources/icons/old/mstile-310x310.png new file mode 100644 index 0000000..cbf683a Binary files /dev/null and b/resources/icons/old/mstile-310x310.png differ diff --git a/resources/icons/old/mstile-70x70.png b/resources/icons/old/mstile-70x70.png new file mode 100644 index 0000000..86a935d Binary files /dev/null and b/resources/icons/old/mstile-70x70.png differ diff --git a/resources/icons/old/safari-pinned-tab.svg b/resources/icons/old/safari-pinned-tab.svg new file mode 100644 index 0000000..3b41b63 --- /dev/null +++ b/resources/icons/old/safari-pinned-tab.svg @@ -0,0 +1,58 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/resources/katex_config.js b/resources/katex_config.js deleted file mode 100644 index d42039e..0000000 --- a/resources/katex_config.js +++ /dev/null @@ -1,20 +0,0 @@ -window.renderKatex = (elem=document.body) => { - var maths = document.querySelectorAll('.arithmatex'), - tex; - for (var i = 0; i < maths.length; i++) { - tex = maths[i].textContent || maths[i].innerText; - if (tex.startsWith('\\(') && tex.endsWith('\\)')) { - katex.render(tex.slice(2, -2), maths[i], { - 'displayMode': false, - 'throwOnError': false, - 'strict': false, - }); - } else if (tex.startsWith('\\[') && tex.endsWith('\\]')) { - katex.render(tex.slice(2, -2), maths[i], { - 'displayMode': true, - 'throwOnError': false, - 'strict': false, - }); - } - } -} \ No newline at end of file diff --git a/resources/libs/fontawesome/font-awesome.css b/resources/libs/fontawesome/font-awesome.css new file mode 100644 index 0000000..2eaa173 --- /dev/null +++ b/resources/libs/fontawesome/font-awesome.css @@ -0,0 +1,1801 @@ +/** + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('fontawesome-webfont.eot'); + src: url('fontawesome-webfont.eot?#iefix') format('embedded-opentype'), url('fontawesome-webfont.woff2') format('woff2'), url('fontawesome-webfont.woff') format('woff'), url('fontawesome-webfont.ttf') format('truetype'), url('fontawesome-webfont.svg#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-genderless:before, +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} diff --git a/resources/libs/fontawesome/fontawesome-webfont.eot b/resources/libs/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/resources/libs/fontawesome/fontawesome-webfont.eot differ diff --git a/resources/libs/fontawesome/fontawesome-webfont.svg b/resources/libs/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/resources/libs/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/libs/fontawesome/fontawesome-webfont.ttf b/resources/libs/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/resources/libs/fontawesome/fontawesome-webfont.ttf differ diff --git a/resources/libs/fontawesome/fontawesome-webfont.woff b/resources/libs/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/resources/libs/fontawesome/fontawesome-webfont.woff differ diff --git a/resources/libs/fontawesome/fontawesome-webfont.woff2 b/resources/libs/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/resources/libs/fontawesome/fontawesome-webfont.woff2 differ diff --git a/resources/libs/popper.min.js b/resources/libs/popper.min.js deleted file mode 100644 index 89b2142..0000000 --- a/resources/libs/popper.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @popperjs/core v2.9.2 - MIT License - */ - -"use strict";!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){function t(e){return{width:(e=e.getBoundingClientRect()).width,height:e.height,top:e.top,right:e.right,bottom:e.bottom,left:e.left,x:e.left,y:e.top}}function n(e){return null==e?window:"[object Window]"!==e.toString()?(e=e.ownerDocument)&&e.defaultView||window:e}function o(e){return{scrollLeft:(e=n(e)).pageXOffset,scrollTop:e.pageYOffset}}function r(e){return e instanceof n(e).Element||e instanceof Element}function i(e){return e instanceof n(e).HTMLElement||e instanceof HTMLElement}function a(e){return"undefined"!=typeof ShadowRoot&&(e instanceof n(e).ShadowRoot||e instanceof ShadowRoot)}function s(e){return e?(e.nodeName||"").toLowerCase():null}function f(e){return((r(e)?e.ownerDocument:e.document)||window.document).documentElement}function p(e){return t(f(e)).left+o(e).scrollLeft}function c(e){return n(e).getComputedStyle(e)}function l(e){return e=c(e),/auto|scroll|overlay|hidden/.test(e.overflow+e.overflowY+e.overflowX)}function u(e,r,a){void 0===a&&(a=!1);var c=f(r);e=t(e);var u=i(r),d={scrollLeft:0,scrollTop:0},m={x:0,y:0};return(u||!u&&!a)&&(("body"!==s(r)||l(c))&&(d=r!==n(r)&&i(r)?{scrollLeft:r.scrollLeft,scrollTop:r.scrollTop}:o(r)),i(r)?((m=t(r)).x+=r.clientLeft,m.y+=r.clientTop):c&&(m.x=p(c))),{x:e.left+d.scrollLeft-m.x,y:e.top+d.scrollTop-m.y,width:e.width,height:e.height}}function d(e){var n=t(e),o=e.offsetWidth,r=e.offsetHeight;return 1>=Math.abs(n.width-o)&&(o=n.width),1>=Math.abs(n.height-r)&&(r=n.height),{x:e.offsetLeft,y:e.offsetTop,width:o,height:r}}function m(e){return"html"===s(e)?e:e.assignedSlot||e.parentNode||(a(e)?e.host:null)||f(e)}function h(e){return 0<=["html","body","#document"].indexOf(s(e))?e.ownerDocument.body:i(e)&&l(e)?e:h(m(e))}function v(e,t){var o;void 0===t&&(t=[]);var r=h(e);return e=r===(null==(o=e.ownerDocument)?void 0:o.body),o=n(r),r=e?[o].concat(o.visualViewport||[],l(r)?r:[]):r,t=t.concat(r),e?t:t.concat(v(m(r)))}function g(e){return i(e)&&"fixed"!==c(e).position?e.offsetParent:null}function y(e){for(var t=n(e),o=g(e);o&&0<=["table","td","th"].indexOf(s(o))&&"static"===c(o).position;)o=g(o);if(o&&("html"===s(o)||"body"===s(o)&&"static"===c(o).position))return t;if(!o)e:{if(o=-1!==navigator.userAgent.toLowerCase().indexOf("firefox"),-1===navigator.userAgent.indexOf("Trident")||!i(e)||"fixed"!==c(e).position)for(e=m(e);i(e)&&0>["html","body"].indexOf(s(e));){var r=c(e);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||o&&"filter"===r.willChange||o&&r.filter&&"none"!==r.filter){o=e;break e}e=e.parentNode}o=null}return o||t}function b(e){function t(e){o.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){o.has(e)||(e=n.get(e))&&t(e)})),r.push(e)}var n=new Map,o=new Set,r=[];return e.forEach((function(e){n.set(e.name,e)})),e.forEach((function(e){o.has(e.name)||t(e)})),r}function w(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=void 0,n(e())}))}))),t}}function x(e){return e.split("-")[0]}function O(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&a(n))do{if(t&&e.isSameNode(t))return!0;t=t.parentNode||t.host}while(t);return!1}function j(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function E(e,r){if("viewport"===r){r=n(e);var a=f(e);r=r.visualViewport;var s=a.clientWidth;a=a.clientHeight;var l=0,u=0;r&&(s=r.width,a=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(l=r.offsetLeft,u=r.offsetTop)),e=j(e={width:s,height:a,x:l+p(e),y:u})}else i(r)?((e=t(r)).top+=r.clientTop,e.left+=r.clientLeft,e.bottom=e.top+r.clientHeight,e.right=e.left+r.clientWidth,e.width=r.clientWidth,e.height=r.clientHeight,e.x=e.left,e.y=e.top):(u=f(e),e=f(u),s=o(u),r=null==(a=u.ownerDocument)?void 0:a.body,a=_(e.scrollWidth,e.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),l=_(e.scrollHeight,e.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),u=-s.scrollLeft+p(u),s=-s.scrollTop,"rtl"===c(r||e).direction&&(u+=_(e.clientWidth,r?r.clientWidth:0)-a),e=j({width:a,height:l,x:u,y:s}));return e}function D(e,t,n){return t="clippingParents"===t?function(e){var t=v(m(e)),n=0<=["absolute","fixed"].indexOf(c(e).position)&&i(e)?y(e):e;return r(n)?t.filter((function(e){return r(e)&&O(e,n)&&"body"!==s(e)})):[]}(e):[].concat(t),(n=(n=[].concat(t,[n])).reduce((function(t,n){return n=E(e,n),t.top=_(n.top,t.top),t.right=U(n.right,t.right),t.bottom=U(n.bottom,t.bottom),t.left=_(n.left,t.left),t}),E(e,n[0]))).width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}function L(e){return 0<=["top","bottom"].indexOf(e)?"x":"y"}function P(e){var t=e.reference,n=e.element,o=(e=e.placement)?x(e):null;e=e?e.split("-")[1]:null;var r=t.x+t.width/2-n.width/2,i=t.y+t.height/2-n.height/2;switch(o){case"top":r={x:r,y:t.y-n.height};break;case"bottom":r={x:r,y:t.y+t.height};break;case"right":r={x:t.x+t.width,y:i};break;case"left":r={x:t.x-n.width,y:i};break;default:r={x:t.x,y:t.y}}if(null!=(o=o?L(o):null))switch(i="y"===o?"height":"width",e){case"start":r[o]-=t[i]/2-n[i]/2;break;case"end":r[o]+=t[i]/2-n[i]/2}return r}function M(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function k(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function A(e,n){void 0===n&&(n={});var o=n;n=void 0===(n=o.placement)?e.placement:n;var i=o.boundary,a=void 0===i?"clippingParents":i,s=void 0===(i=o.rootBoundary)?"viewport":i;i=void 0===(i=o.elementContext)?"popper":i;var p=o.altBoundary,c=void 0!==p&&p;o=M("number"!=typeof(o=void 0===(o=o.padding)?0:o)?o:k(o,C));var l=e.elements.reference;p=e.rects.popper,a=D(r(c=e.elements[c?"popper"===i?"reference":"popper":i])?c:c.contextElement||f(e.elements.popper),a,s),c=P({reference:s=t(l),element:p,strategy:"absolute",placement:n}),p=j(Object.assign({},p,c)),s="popper"===i?p:s;var u={top:a.top-s.top+o.top,bottom:s.bottom-a.bottom+o.bottom,left:a.left-s.left+o.left,right:s.right-a.right+o.right};if(e=e.modifiersData.offset,"popper"===i&&e){var d=e[n];Object.keys(u).forEach((function(e){var t=0<=["right","bottom"].indexOf(e)?1:-1,n=0<=["top","bottom"].indexOf(e)?"y":"x";u[e]+=d[n]*t}))}return u}function W(){for(var e=arguments.length,t=Array(e),n=0;n(g.devicePixelRatio||1)?"translate("+e+"px, "+u+"px)":"translate3d("+e+"px, "+u+"px, 0)",m)):Object.assign({},o,((t={})[v]=a?u+"px":"",t[h]=d?e+"px":"",t.transform="",t))}function H(e){return e.replace(/left|right|bottom|top/g,(function(e){return $[e]}))}function R(e){return e.replace(/start|end/g,(function(e){return ee[e]}))}function S(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function q(e){return["top","right","bottom","left"].some((function(t){return 0<=e[t]}))}var C=["top","bottom","right","left"],N=C.reduce((function(e,t){return e.concat([t+"-start",t+"-end"])}),[]),V=[].concat(C,["auto"]).reduce((function(e,t){return e.concat([t,t+"-start",t+"-end"])}),[]),I="beforeRead read afterRead beforeMain main afterMain beforeWrite write afterWrite".split(" "),_=Math.max,U=Math.min,z=Math.round,F={placement:"bottom",modifiers:[],strategy:"absolute"},X={passive:!0},Y={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,o=e.instance,r=(e=e.options).scroll,i=void 0===r||r,a=void 0===(e=e.resize)||e,s=n(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&f.forEach((function(e){e.addEventListener("scroll",o.update,X)})),a&&s.addEventListener("resize",o.update,X),function(){i&&f.forEach((function(e){e.removeEventListener("scroll",o.update,X)})),a&&s.removeEventListener("resize",o.update,X)}},data:{}},G={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state;t.modifiersData[e.name]=P({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},J={top:"auto",right:"auto",bottom:"auto",left:"auto"},K={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options;e=void 0===(e=n.gpuAcceleration)||e;var o=n.adaptive;o=void 0===o||o,n=void 0===(n=n.roundOffsets)||n,e={placement:x(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:e},null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,T(Object.assign({},e,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:n})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,T(Object.assign({},e,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:n})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},Q={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},r=t.elements[e];i(r)&&s(r)&&(Object.assign(r.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?r.removeAttribute(e):r.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],r=t.attributes[e]||{};e=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{}),i(o)&&s(o)&&(Object.assign(o.style,e),Object.keys(r).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]},Z={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.name,o=void 0===(e=e.options.offset)?[0,0]:e,r=(e=V.reduce((function(e,n){var r=t.rects,i=x(n),a=0<=["left","top"].indexOf(i)?-1:1,s="function"==typeof o?o(Object.assign({},r,{placement:n})):o;return r=(r=s[0])||0,s=((s=s[1])||0)*a,i=0<=["left","right"].indexOf(i)?{x:s,y:r}:{x:r,y:s},e[n]=i,e}),{}))[t.placement],i=r.x;r=r.y,null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=i,t.modifiersData.popperOffsets.y+=r),t.modifiersData[n]=e}},$={left:"right",right:"left",bottom:"top",top:"bottom"},ee={start:"end",end:"start"},te={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options;if(e=e.name,!t.modifiersData[e]._skip){var o=n.mainAxis;o=void 0===o||o;var r=n.altAxis;r=void 0===r||r;var i=n.fallbackPlacements,a=n.padding,s=n.boundary,f=n.rootBoundary,p=n.altBoundary,c=n.flipVariations,l=void 0===c||c,u=n.allowedAutoPlacements;c=x(n=t.options.placement),i=i||(c!==n&&l?function(e){if("auto"===x(e))return[];var t=H(e);return[R(e),t,R(t)]}(n):[H(n)]);var d=[n].concat(i).reduce((function(e,n){return e.concat("auto"===x(n)?function(e,t){void 0===t&&(t={});var n=t.boundary,o=t.rootBoundary,r=t.padding,i=t.flipVariations,a=t.allowedAutoPlacements,s=void 0===a?V:a,f=t.placement.split("-")[1];0===(i=(t=f?i?N:N.filter((function(e){return e.split("-")[1]===f})):C).filter((function(e){return 0<=s.indexOf(e)}))).length&&(i=t);var p=i.reduce((function(t,i){return t[i]=A(e,{placement:i,boundary:n,rootBoundary:o,padding:r})[x(i)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:s,rootBoundary:f,padding:a,flipVariations:l,allowedAutoPlacements:u}):n)}),[]);n=t.rects.reference,i=t.rects.popper;var m=new Map;c=!0;for(var h=d[0],v=0;vi[O]&&(b=H(b)),O=H(b),w=[],o&&w.push(0>=j[y]),r&&w.push(0>=j[b],0>=j[O]),w.every((function(e){return e}))){h=g,c=!1;break}m.set(g,w)}if(c)for(o=function(e){var t=d.find((function(t){if(t=m.get(t))return t.slice(0,e).every((function(e){return e}))}));if(t)return h=t,"break"},r=l?3:1;0 input[type=checkbox]) { - display: contents; -} - -.organization-container { - display: flex; - flex-wrap: wrap; - gap: 1em; - justify-content: flex-start; - width: 100%; - box-sizing: border-box; - margin-bottom: 1em; -} - -.organization-card { - background-color: #fff; - border: 1px solid #ddd; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - text-align: center; - padding: 1em; - transition: transform 0.3s; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: space-between; - margin-bottom: 1em; - text-decoration: none; - color: inherit; - - &:hover { - transform: translateY(-5px); - color: $theme_color; - } - - img.org-logo { - width: 100%; - border-radius: 8px 8px 0 0; - object-fit: contain; - object-position: center; - flex-shrink: 0; - background-color: #f0f0f0; - } - - .org-details { - padding: 1em 0; - - span { - display: block; - margin-bottom: 0.5em; - } - } -} - -@media(min-width: 800px) { - .organization-card { - flex: 1 1 calc(33.33% - 1em); - max-width: calc(33.33% - 1em); - - img.org-logo { - height: 150px; - } - } -} - -@media(max-width: 799px) { - .organization-card { - flex: 1 1 calc(50% - 1em); - max-width: calc(50% - 1em); - - img.org-logo { - height: 120px; - } - } -} - -.organization-row { - display: block; - padding: 0.5em; - border-bottom: 1px #ccc solid; - border-top: none; - color: black; - font-weight: 500; - display: flex; - align-items: center; - - &:hover { - background-color: #f3f3f3; - } -} - -.org-help-text { - display: block; - color: gray; -} - -#search-organization { - width: 100%; - height: 2.3em; -} +.leave-organization, .leave-organization:hover { + color: red; +} +#control-list li { + border-bottom: 1px solid black; +} +#pending-count-box { + float: right; + text-align: center; + background: red; + color: white; + border-radius: 3px; + padding-left: 0.3em; + padding-right: 0.3em; +} +.org-field-wrapper { + input[type=text], textarea { + width: 100%; + } + .select2 { + width: 100% !important; + } +} +.org-field-wrapper { + margin-top: 0.4em; +} +.org-field-wrapper:has(> input[type=checkbox]) { + display: contents; +} + +.organization-row { + display: block; + padding: 0.5em; + border-bottom: 1px gray solid; + border-top: none; + color: black; + font-weight: 500; + display: flex; + align-items: center; +} + +.organization-row:hover { + background-color: #f3f3f3; +} + +.organization-container { + border: 1px gray solid; + margin-bottom: 3em; +} \ No newline at end of file diff --git a/resources/pagedown/Markdown.Editor.js b/resources/pagedown/Markdown.Editor.js index 7842448..ada1ad6 100644 --- a/resources/pagedown/Markdown.Editor.js +++ b/resources/pagedown/Markdown.Editor.js @@ -44,7 +44,7 @@ image: "Image Ctrl+G", imagedescription: "enter image description here", - imagedialog: "

Insert Image

https://lqdoj.edu.vn/logo.png \"optional title\"

Need free image hosting?

", + imagedialog: "

Insert Image

https://dmoj.ca/logo.png \"optional title\"

Need free image hosting?

", olist: "Numbered List
    Ctrl+O", ulist: "Bulleted List
      Ctrl+U", diff --git a/resources/pagedown_init.js b/resources/pagedown_init.js deleted file mode 100644 index 249921e..0000000 --- a/resources/pagedown_init.js +++ /dev/null @@ -1,158 +0,0 @@ -var DjangoPagedown = DjangoPagedown | {}; - -DjangoPagedown = (function() { - var converter = Markdown.getSanitizingConverter(); - var editors = {}; - var elements; - - Markdown.Extra.init(converter, { - extensions: "all" - }); - - var createEditor = function(element) { - var input = element.getElementsByClassName("wmd-input")[0]; - if (input === undefined) { - return - } - var id = input.id.substr(9); - if (!editors.hasOwnProperty(id)) { - var editor = new Markdown.Editor(converter, id, {}); - - // Handle image upload - if (element.classList.contains("image-upload-enabled")) { - var upload = element.getElementsByClassName("pagedown-image-upload")[0]; - var url = upload.getElementsByClassName("url-input")[0]; - var file = upload.getElementsByClassName("file-input")[0]; - var cancel = upload.getElementsByClassName("deletelink")[0]; - var submit = upload.getElementsByClassName("submit-input")[0]; - var loading = upload.getElementsByClassName("submit-loading")[0]; - - var close = function(value, callback = undefined) { - upload.classList.remove("show"); - url.value = ""; - file.value = ""; - document.removeEventListener('click', outsideClickListener); - if (callback) callback(value); - }; - - var outsideClickListener = function(event) { - if (!upload.contains(event.target) && upload.classList.contains("show")) { - cancel.click(); - } - }; - - editor.hooks.set("insertImageDialog", function(callback) { - upload.classList.add("show"); - - setTimeout(function() { - document.addEventListener('click', outsideClickListener); - }, 0); - - cancel.addEventListener( - "click", - function(event) { - close(null, callback); - event.preventDefault(); - }, - { once: true } - ); - - submit.addEventListener( - "click", - function() { - // Regular URL - if (url.value.length > 0) { - close(url.value, callback); - } - // File upload - else if (file.files.length > 0) { - loading.classList.add("show"); - submit.classList.remove("show"); - - var data = new FormData(); - var xhr = new XMLHttpRequest(); - data.append("image", file.files[0]); - xhr.open("POST", file.dataset.action, true); - xhr.addEventListener( - "load", - function() { - loading.classList.remove("show"); - submit.classList.add("show"); - - if (xhr.status !== 200) { - alert(xhr.statusText); - } else { - var response = JSON.parse(xhr.response); - if (response.success) { - close(response.url, callback); - } else { - if (response.error) { - var error = ""; - for (var key in response.error) { - if (response.error.hasOwnProperty(key)) { - error += key + ":" + response.error[key]; - } - } - alert(error); - } - close(null, callback); - } - } - }, - { - once: true - } - ); - xhr.send(data); - } else { - // Nothing - close(null, callback); - } - event.preventDefault(); - }, - { once: true } - ); - - return true; - }); - } - - editor.run(); - editors[id] = editor; - } - }; - - var destroyEditor = function(element) { - var input = element.getElementsByClassName("wmd-input")[0]; - if (input === undefined) { - return - } - var id = input.id.substr(9); - if (editors.hasOwnProperty(id)) { - delete editors[id]; - return true; - } - return false; - }; - - var init = function() { - elements = document.getElementsByClassName("wmd-wrapper"); - for (var i = 0; i < elements.length; ++i) { - createEditor(elements[i]); - } - }; - - return { - init: function() { - return init(); - }, - createEditor: function(element) { - return createEditor(element); - }, - destroyEditor: function(element) { - return destroyEditor(element); - } - }; -})(); - -window.onload = DjangoPagedown.init; \ No newline at end of file diff --git a/resources/pagedown_math.js b/resources/pagedown_math.js index 861ef78..4ebf484 100644 --- a/resources/pagedown_math.js +++ b/resources/pagedown_math.js @@ -1,15 +1,17 @@ -function latex_pagedown($) { - $.each(window.editors, function (id, editor) { - var preview = $('div.wmd-preview#' + id + '_wmd_preview')[0]; - editor.hooks.chain('onPreviewRefresh', function () { - renderKatex(preview); +function mathjax_pagedown($) { + if ('MathJax' in window) { + $.each(window.editors, function (id, editor) { + var preview = $('div.wmd-preview#' + id + '_wmd_preview')[0]; + editor.hooks.chain('onPreviewRefresh', function () { + MathJax.typeset(preview); + }); + MathJax.typeset(preview); }); - renderKatex(preview); - }); + } } -window.latex_pagedown = latex_pagedown; +window.mathjax_pagedown = mathjax_pagedown; -$(function () { - (latex_pagedown)('$' in window ? $ : django.jQuery); +$(window).load(function () { + (mathjax_pagedown)('$' in window ? $ : django.jQuery); }); \ No newline at end of file diff --git a/resources/pagedown_widget.css b/resources/pagedown_widget.css index 23f6c9d..f20c5e2 100644 --- a/resources/pagedown_widget.css +++ b/resources/pagedown_widget.css @@ -14,7 +14,7 @@ width: 100%; background: #fff; border: 1px solid DarkGray; - font-family: var(--md-code-font-family),monospace !important; + font-family: Consolas, "Liberation Mono", Monaco, "Courier New", monospace !important; } .wmd-preview { diff --git a/resources/pagedown_widget.scss b/resources/pagedown_widget.scss index 071a71e..b6d2333 100644 --- a/resources/pagedown_widget.scss +++ b/resources/pagedown_widget.scss @@ -1,5 +1,3 @@ -@import "vars"; - .wmd-panel { margin: 0; width: 100%; @@ -16,8 +14,7 @@ width: 100%; background: #fff; border: 1px solid DarkGray; - font-family: $monospace-fonts; - font-size: 15px; + font-family: Consolas, "Liberation Mono", Monaco, "Courier New", monospace !important; } .wmd-preview { @@ -26,14 +23,8 @@ } .wmd-button-row { - margin-top: 10px; - margin-bottom: 5px; + margin: 10px 5px 5px; padding: 0; - display: flex; /* Display as a flex container */ - flex-wrap: nowrap; /* Prevent items from wrapping */ - overflow-x: auto; - white-space: nowrap; - gap: 3px; } .wmd-button { @@ -46,7 +37,8 @@ background-position: center; border-radius: 3px; cursor: pointer; - flex: 0 0 auto; + padding-left: 2px; + padding-right: 3px; } .wmd-bold-button { @@ -132,7 +124,7 @@ .wmd-spacer { display: inline-flex; - width: 10px; + width: 20px; } .wmd-prompt-background { @@ -182,51 +174,51 @@ /* Extra styles to allow for image upload */ .pagedown-image-upload { - display: none; - z-index: 10001; - position: fixed; - background: white; - top: 50%; - left: 50%; - padding: 10px; - width: 400px; - max-width: 90%; - transform: translate3d(-50%, -50%, 0); - box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.5); + display: none; + z-index: 10001; + position: fixed; + background: white; + top: 50%; + left: 50%; + padding: 10px; + width: 400px; + max-width: 90%; + transform: translate3d(-50%, -50%, 0); + box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.5); } .pagedown-image-upload .submit-row { - margin: 10px 0 0 0; + margin: 10px 0 0 0; } .pagedown-image-upload.show { - display: block; + display: block; } .pagedown-image-upload .submit-loading { - display: none; - vertical-align: middle; - border: 4px solid #f3f3f3; /* Light grey */ - border-top: 4px solid #79aec8; /* Blue */ - border-radius: 50%; - width: 24px; - height: 24px; - animation: spin 1s linear infinite; + display: none; + vertical-align: middle; + border: 4px solid #f3f3f3; /* Light grey */ + border-top: 4px solid #79aec8; /* Blue */ + border-radius: 50%; + width: 24px; + height: 24px; + animation: spin 1s linear infinite; } .pagedown-image-upload .submit-loading.show { - display: inline-block; + display: inline-block; } .pagedown-image-upload .submit-input { - display: none; + display: none; } .pagedown-image-upload .submit-input.show { - display: inline-block; + display: inline-block; } @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } \ No newline at end of file diff --git a/resources/problem.scss b/resources/problem.scss index 3473906..8528761 100644 --- a/resources/problem.scss +++ b/resources/problem.scss @@ -73,13 +73,13 @@ } .filter-form-group { - margin-top: 15px; + margin-top: 5px; } } #content-right { &.problems { - flex: 25%; + flex: 26.5%; max-width: unset; padding-top: 0; padding-left: 0; @@ -97,6 +97,11 @@ height: 2.3em; } +label[for="category"], label[for="type"] { + padding-bottom: 0.25em; + display: block; +} + #category { margin-top: 0.5em; width: 100%; @@ -165,20 +170,19 @@ ul.problem-list { .organization-tags { padding-left: 0.75em; - display: flex; + vertical-align: middle; } .organization-tag { - display: flex; - align-items: center; + box-shadow: inset 0 -0.1em 0 rgba(0, 0, 0, 0.12); padding: 0.15em 0.3em; border-radius: 0.15em; font-weight: 600; margin-right: 0.45em; position: relative; background-color: #ccc; - color: initial; - min-height: 1.5em; + transform: translateY(+35%); + display: inline-block; } .organization-tag a { @@ -320,6 +324,10 @@ ul.problem-list { padding: 4px 10px; } +#category, #types { + visibility: hidden; +} + #filter-form .form-label { margin-top: 0.5em; font-style: italic; @@ -356,10 +364,35 @@ ul.problem-list { } } +.problem-feed-option { + width: 90%; + margin-left: 2.5%; + padding-bottom: 1em; + border-radius: 5px; + margin-bottom: 1em; + display: flex; + justify-content: space-between; +} + +.problem-feed-option-item { + padding: 10px 15px; + border-radius: 1em; + font-weight: bold; + background: lightgray; + margin-right: 1em; + color: gray; + cursor: pointer; +} + .pcodecell { text-transform: uppercase; } +.problem-feed-option-item.active { + background: lightblue; + color: darkblue; +} + .problem-data-form { .bad-file input, .bad-file .select2-selection { border-color: red; @@ -408,31 +441,3 @@ ul.problem-list { } } } - -.new-problem-info { - background-color: #fff6dd; - border-radius: 25px; - font-size: 14px; - height: 25px; - width: 98%; - display: table; - padding: 5px 10px; - margin-top: 14px; - border: solid; - border-color: black; - border-width: 0.1px; -} - -.info-block { - display:table-cell; - vertical-align:middle; - margin-right: auto; -} - -@media screen and (min-width: 1100px) { - .d-flex-problem { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } -} \ No newline at end of file diff --git a/resources/ranks.scss b/resources/ranks.scss index effb6a8..391d529 100644 --- a/resources/ranks.scss +++ b/resources/ranks.scss @@ -62,7 +62,6 @@ svg.rate-box { .rating { font-weight: bold; - font-family: "Noto Sans"; } .rate-none, .rate-none a { diff --git a/resources/status.scss b/resources/status.scss index 2f3dd10..20190cb 100644 --- a/resources/status.scss +++ b/resources/status.scss @@ -4,18 +4,18 @@ } .AC { - background-color: green; - color: white; + background-color: #53f23f; + color: green; } ._AC { - background-color: greenyellow; - color: black; + background-color: #DFFF00; + color: green; } .WA { - background-color: red; - color: white; + background-color: #CCC; + color: #ef1b53; } .TLE, .MLE { diff --git a/resources/style.scss b/resources/style.scss index dc93ab2..eac2a94 100644 --- a/resources/style.scss +++ b/resources/style.scss @@ -1,5 +1,6 @@ @import "base"; @import "table"; +@import "math"; @import "status"; @import "blog"; @import "problem"; @@ -16,4 +17,3 @@ @import "ticket"; @import "pagedown_widget"; @import "dmmd-preview"; -@import "course"; \ No newline at end of file diff --git a/resources/submission.scss b/resources/submission.scss index bcb8c87..cf8f279 100644 --- a/resources/submission.scss +++ b/resources/submission.scss @@ -1,63 +1,62 @@ -@import "vars"; .info-float { position: sticky; top: 60px; width: 20%; } +#submissions-table { + background: rgba(0, 0, 0, .01); +} + .submission-row { display: flex; + border-left: #ccc 1px solid; + border-right: #ccc 1px solid; transition: background-color linear 0.2s; - margin-bottom: 15px; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); - align-items: center; - padding: 10px; - background: white; + + &:hover { + background: #F2F2F2; + } + + &:first-of-type { + border-top: #ccc 1px solid; + } + + > div { + padding: 7px 5px; + vertical-align: middle; + border-bottom: #ccc 1px solid; + display: flex; + flex-direction: column; + justify-content: center; + } .sub-result { - display: flex; - align-items: center; - font-weight: 600; - gap: 10px; + min-width: 80px; + width: 80px; + text-align: center; + border-bottom-color: white; + border-right: #ccc 1px solid; .state { - padding: 5px 10px; - border-radius: 15px; - } - - .language { - background-color: #e1e1e1; - border-radius: 5px; - padding: 2px 8px; + font-size: 0.7em; + font-weight: bold; + padding-top: 0.5em; } .score { - font-size: 1.2em; + font-size: 1.3em; + color: #000; } } - .sub-details { - flex-grow: 1; - overflow: hidden; - } - .sub-info { flex: 1; - display: flex; - gap: 5px; - font-size: 1.2em; - margin-bottom: 10px; + padding-left: 20px !important; - .sub-user { - overflow-wrap: break-word; - } - .sub-problem { + .name { font-weight: 700; - } - - .sub-problem:hover { - text-decoration: underline; + font-size: 1.2em; } } @@ -73,22 +72,16 @@ } .sub-usage { - margin-left: auto; + min-width: 70px; + width: 70px; white-space: nowrap; - text-align: right; - display: flex; - flex-direction: column; - gap: 4px; + text-align: center; + border-left: #ccc 1px solid; .time { font-weight: bold; } } - .sub-user-img { - width: 70px; - height: 70px; - margin-right: 15px; - } } .sub-prop .fa { @@ -129,20 +122,16 @@ label[for="language"], label[for="status"] { } @media(max-width: 799px) { - .submission-row { - .sub-prop { - .label { - display: none; - } - - .fa { - display: inline-block; - } - } - .sub-user-img { + .sub-prop { + .label { display: none; } + + .fa { + display: inline-block; + } } + #fake-info-float { display: none; } @@ -160,6 +149,47 @@ label[for="language"], label[for="status"] { color: #555; } +.source-ln { + color: gray; + border-right: 1px solid gray; + padding-right: 5px; + text-align: right; + + a { + color: gray; + display: block; + + &:hover { + text-decoration: underline; + } + + &::before { + display: block; + content: " "; + margin-top: -50px; + height: 50px; + visibility: hidden; + } + } +} + +.source-code pre, .source-ln pre { + margin: 0; + padding: 0; + white-space: pre; +} + +.source-code { + padding-left: 15px; +} + +.source-wrap { + overflow-x: auto; + padding: 1em; + border-radius: 10px; + border: double 4px darkgray; +} + .statistics-table { .status { font-weight: bold; @@ -182,8 +212,8 @@ label[for="language"], label[for="status"] { } // .batch-cases .case-row td b { - // font-weight: 500; - // } + // font-weight: 500; + // } .case-info { margin: 0; @@ -203,7 +233,6 @@ label[for="language"], label[for="status"] { border-radius: .28571429rem; border: 1px solid rgba(34,36,38,.15); font-family: Consolas; - overflow-wrap: anywhere; } .testcases-table { @@ -223,7 +252,7 @@ label[for="language"], label[for="status"] { td { padding: 0.6em 0.8em; width: 18.75%; - + } .case-row td:nth-child(2) { @@ -259,7 +288,7 @@ label[for="language"], label[for="status"] { } .overall-result-WA { - background: linear-gradient(45deg, yellow, red); + background: linear-gradient(45deg, yellow, red); } .overall-result-TLE { diff --git a/resources/table.scss b/resources/table.scss index da6c84b..08c714e 100644 --- a/resources/table.scss +++ b/resources/table.scss @@ -12,40 +12,53 @@ background: #f7f7f7; } - &.striped tr:nth-child(odd) { - background: white; - } - - &.no-border { - td, th { - border: none; - } - } - - th:first-child, td:first-child { + td:first-child { + border-color: $border_gray; border-width: 1px 1px 0 1px; } tr:last-child td { - border-bottom-width: 1px; + &:first-child { + border: 1px solid $border_gray; + } + + border-color: $border_gray; + border-width: 1px 1px 1px 0; } thead th { vertical-align: middle; + + &:first-child { + border-top-left-radius: $table_header_rounding; + } + + &:last-child { + border-top-right-radius: $table_header_rounding; + } } th { height: 2em; - color: black; - background-color: #DAA520; + color: white; + background-color: $widget_black; border-color: #cccccc; border-width: 1px 1px 0 0; border-style: solid; padding: 4px 10px; vertical-align: middle; text-align: center; + white-space: nowrap; font-weight: 600; font-size: 1.1em; + + &:first-child { + border-top-left-radius: $table_header_rounding; + } + + &:last-child { + border-top-right-radius: $table_header_rounding; + } } td { @@ -56,14 +69,21 @@ vertical-align: middle; text-align: center; } + + // Monkey-patches for awkward table rounding + tr:not(:first-child) th { + border-radius: 0; + } + + tr:last-child th { + border-bottom-left-radius: $table_header_rounding; + } + + thead tr th { + border-bottom-left-radius: 0 !important; + } } #users-table th a { color: white; -} - -.feed-table { - td, td:first-child, tr:last-child td, tr:last-child td:first-child { - border-width: 1px 0 0 0; - } } \ No newline at end of file diff --git a/resources/ticket.scss b/resources/ticket.scss index 5109531..d7f9143 100644 --- a/resources/ticket.scss +++ b/resources/ticket.scss @@ -10,7 +10,7 @@ display: inline; } - #content > h2:first-child .fa-check-circle { + #content > h2:first-child .fa-check-circle-o { color: #00a900; } @@ -150,6 +150,14 @@ padding: 7px; } + .message .content :first-child { + margin-top: 0; + } + + .message .content :last-child { + margin-bottom: 0; + } + .new-message .detail { padding: 8px 10px; } @@ -166,10 +174,4 @@ padding-left: 0.5em; padding-top: 1.65em; } -} - -@media (max-width: 799px) { - .ticket-container { - flex-direction: column-reverse; - } } \ No newline at end of file diff --git a/resources/users.scss b/resources/users.scss index d6f41ac..152ffab 100644 --- a/resources/users.scss +++ b/resources/users.scss @@ -29,17 +29,6 @@ th.header.rank { padding-left: 5px; } -.user-with-img { - display: inline-flex; - gap: 0.5em; - align-items: center; - - .user-img { - height: 2em; - width: 2em; - } -} - #search-handle { width: 100%; height: 2.3em; @@ -55,13 +44,13 @@ th.header.rank { #users-table { th a, th a:link, th a:visited { - color: black; + color: white; } th a:hover { - color: navajowhite; + color: #0F0; } - + .about-column { width: 30%; } @@ -70,10 +59,8 @@ th.header.rank { vertical-align: middle; } - .rank, .points, .problems { + .rank, .points, .problems, .username { white-space: nowrap; - max-width: 20em; - overflow: hidden; } .about-td { @@ -167,11 +154,6 @@ th.header.rank { color: gray !important; font-weight: 600; } - - .rank-td { - font-weight: bold; - width: 2em; - } } #search-form { @@ -179,7 +161,6 @@ th.header.rank { vertical-align: top; width: 225px; float: right; - margin-top: 1em; .select2-selection__arrow { display: none; @@ -284,7 +265,7 @@ a.edit-profile { .user-sidebar { flex: 0 0 150px; - padding-right: 1em; + padding-left: 1em; } .user-content { @@ -293,20 +274,6 @@ a.edit-profile { word-wrap: break-word; } -.user-img { - flex-shrink: 0; - background-color: #ddd; - border-radius: 50%; - overflow: hidden; - display: flex; - align-items: center; - - img { - width: 100%; - height: auto; - } -} - @media not all and (min-width: 600px) { .user-info-page { display: block; @@ -355,7 +322,6 @@ a.edit-profile { td.problem-category { width: 100px; } - width: 99%; } #pp-load-link-wrapper { @@ -396,7 +362,7 @@ a.edit-profile { } .follow { - background: green; + background: green; border-color: lightgreen; } .follow:hover { @@ -513,78 +479,4 @@ a.edit-profile { .user-stat-header { color: gray; -} - -.profile-card { - border: 1px solid #ddd; - border-radius: 8px; - overflow: hidden; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - transition: box-shadow 0.3s; - - &:hover { - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); - } - - .card-header { - background-color: #f7f7f7; - text-align: center; - padding: 10px; - } - - .avatar { - width: 80px; - height: 80px; - border-radius: 50%; - } - - .card-body { - padding: 20px; - padding-bottom: 5px; - } - - .user-info { - display: flex; - justify-content: space-between; - margin-bottom: 10px; - } - - .user-info-body { - font-weight: bold; - } - - /* Medals Container */ - .medals-container { - display: flex; - justify-content: center; - padding: 10px; - padding-top: 0px; - gap: 5px; - } - - /* Medal Item */ - .medal-item { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - - img { - width: 70px; /* Adjust size based on your actual image size */ - height: auto; - } - } - - .medal-count { - background-color: hsla(30, 4%, 91%, .7); - border-radius: 50%; - bottom: .5rem; - color: black; - font-size: 1em; - line-height: 1; - padding: 0.8em 0; - right: .5rem; - text-align: center; - width: 2.5em; - } } \ No newline at end of file diff --git a/resources/vars.scss b/resources/vars.scss index 34c11d1..4bcda31 100644 --- a/resources/vars.scss +++ b/resources/vars.scss @@ -4,12 +4,9 @@ $border_gray: #ccc; $background_gray: #ededed; $background_light_gray: #fafafa; $announcement_red: #ae0000; -$theme_color: #9c3706; $base_font_size: 14px; -$widget_border_radius: 0.5em; +$widget_border_radius: 4px; $table_header_rounding: 6px; -$monospace-fonts: var(--md-code-font-family),monospace; -$navbar_height: 50px; -$navbar_height_mobile: 36px; +$monospace-fonts: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; diff --git a/resources/widgets.scss b/resources/widgets.scss index b694da0..dec1bd6 100644 --- a/resources/widgets.scss +++ b/resources/widgets.scss @@ -28,12 +28,9 @@ // Bootstrap-y buttons .button, button, input[type=submit] { - -webkit-transition: .3s all ease; - -o-transition: .3s all ease; - transition: .3s all ease; align-items: center; background-clip: padding-box; - background-color: $theme_color; + background-color: #fa6400; border: 1px solid transparent; border-radius: .25rem; box-shadow: rgba(0, 0, 0, 0.02) 0 1px 3px 0; @@ -59,7 +56,7 @@ text-align: center; width: auto; - &.disabled, &[disabled] { + &.disabled { background: linear-gradient(to bottom, darkgray 0, gray 100%) repeat-x !important; border-color: grey !important; cursor: not-allowed; @@ -81,10 +78,10 @@ } &.btn-green { - background: #28a745; + background: green; &:hover { - background: green; + background: #2c974b; } } @@ -104,10 +101,6 @@ } } - &.btn-darkGreen { - background: $theme_color; - } - // class = "unselectable button full small" only appear in online-judge/templates/contest/list.html // this attribute center buttons in contest list (including "Join", "Virutal Join", "Spectable") &.unselectable.button.full.small { @@ -120,18 +113,18 @@ } .button:hover, button:hover, input[type=submit]:hover { - background-color: $theme_color; + background-color: #fb8332; box-shadow: rgba(0, 0, 0, 0.1) 0 4px 12px; transform: translateY(-1px); } .button:focus, button:focus, input[type=submit]:focus { - background-color: $theme_color; + background-color: #fb8332; box-shadow: rgba(0, 0, 0, 0.1) 0 4px 12px; } .button:active, button:active, input[type=submit]:hover { - background-color: $theme_color; + background-color: #c85000; box-shadow: rgba(0, 0, 0, .06) 0 2px 4px; transform: translateY(0); } @@ -143,7 +136,7 @@ } input { - &[type=text], &[type=password], &[type=email], &[type=number], &[type=datetime-local], &[type=date] { + &[type=text], &[type=password], &[type=email], &[type=number] { padding: 4px 8px; color: #555; background: #FFF none; @@ -164,7 +157,8 @@ input { } textarea { - padding: 8px; + padding: 4px 8px; + color: #555; background: #FFF none; border: 1px solid $border_gray; border-radius: $widget_border_radius; @@ -174,7 +168,8 @@ textarea { } textarea:hover { - border-color: black; + border-color: rgba(82, 168, 236, 0.8); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 4px rgba(82, 168, 236, 0.6); } input { @@ -185,8 +180,8 @@ input { } textarea:focus { - border-color: black; - border-width: unset; + border-color: rgba(82, 168, 236, 0.8); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); outline: 0; } @@ -200,33 +195,32 @@ input { // Bootstrap-y copy button .btn-clipboard { - top: -5px; - right: -8px; + top: 0; + right: 0; display: block; font-size: 12px; + color: #767676; cursor: pointer; + background-color: #FFF; + border: 1px solid #E1E1E8; + border-radius: 0 $widget_border_radius; position: absolute; padding: 5px 8px; - font-family: system-ui, "Noto Sans"; - - &:hover { - border-radius: $widget_border_radius; - border: 1px solid #E1E1E8; - background-color: #FFF; - } } .copy-clipboard { position: relative; + margin-top: 1.5em; } // Bootstrap-y tabs .ul_tab_a_active { - color: $theme_color; + color: black; cursor: default; - font-weight: bold; - border-bottom: 3px solid $theme_color; - background: transparent; + background-color: #fff; + border: 1px solid $border_gray; + border-bottom-color: transparent; + border-image: none; } .tabs { @@ -272,16 +266,8 @@ input { overflow-x: auto; overflow-y: hidden; - &::-webkit-scrollbar { - width: 0.1rem; // Adjust the width as needed - background-color: transparent; - } - - &::-webkit-scrollbar-thumb { - background-color: transparent; - } - > li { + margin-bottom: -1px; position: relative; display: block; @@ -298,19 +284,16 @@ input { } > a, > span { - margin-right: 10px; + margin-right: 2px; line-height: 1.42857; + border: 1px solid transparent; + border-radius: $widget_border_radius $widget_border_radius 0 0; position: relative; display: block; - padding: 5px 5px; + padding: 10px 15px; color: #555; text-decoration: none; white-space: nowrap; - font-weight: bold; - - &:hover { - border-bottom: 3px solid green; - } } } } @@ -319,13 +302,11 @@ input { // Bootstrap-y pagination ul.pagination a:hover { color: #FFF; - background: #cc4e17; + background: rgba(0, 0, 0, 0.55); } ul.pagination { - align-items: center; - justify-content: center; - display: flex; + display: inline-block; padding-left: 0; margin: 0; border-radius: $widget_border_radius; @@ -334,42 +315,56 @@ ul.pagination { li { display: inline; + &:first-child > { + a, span { + margin-left: 0; + border-top-left-radius: $widget_border_radius; + border-bottom-left-radius: $widget_border_radius; + } + } + + &:last-child > { + a, span { + margin-left: 0; + border-top-right-radius: $widget_border_radius; + border-bottom-right-radius: $widget_border_radius; + } + } + > { a, span { position: relative; float: left; padding: 4px 12px; - margin-right: 5px; - font-weight: bold; line-height: 1.42857; text-decoration: none; - color: $theme_color; - background-color: white; - border: 2px solid $theme_color; - border-radius: 10px; + color: #FFF; + background-color: $widget_black; + border: 1px solid #505050; + margin-left: -1px; } } } .disabled-page > { a { - color: #f1efef; - background-color: #ab6247; - border-color: #6a240b; + color: #888; + background-color: $widget_black; + border-color: #282828; } span { - color: #f1efef; - background-color: #ab6247; - border-color: #6a240b; + color: #888; + background-color: $widget_black; + border-color: #505050; } } .active-page > { a { z-index: 2; - color: white; - background-color: $theme_color; + color: black; + background-color: #7dc7ff; border-color: transparent; cursor: default; } @@ -479,30 +474,27 @@ ul.select2-selection__rendered { } .sidebox h3 { + margin: 0 -5px; + background: #045343; border-radius: $widget_border_radius $widget_border_radius 0 0; - padding-top: 10px; - padding-bottom: 10px; + color: white; + padding-top: 5px; + padding-bottom: 5px; padding-left: 7px; font-size: 1.3em; - font-weight: bold; - background: white; - display: flex; +} - .fa { - background: $theme_color; - color: white; - padding: 4px; - margin-right: 8px; - border-radius: 5px; - font-size: smaller; - } +.sidebox h3 .fa { + color: white; + float: right; + margin: 0.2em 0.4em 0 0; } .sidebox-content { + border: 1px solid $border_gray; border-top: none; + margin: 0 -5px; padding: 1px 0.5em 3px; - background: white; - border-radius: 0 0 $widget_border_radius $widget_border_radius; &.sidebox-table { border: none; @@ -517,8 +509,8 @@ ul.select2-selection__rendered { .sidebox { border-top-left-radius: $widget_border_radius; border-top-right-radius: $widget_border_radius; - margin-bottom: 1.5em; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); + padding: 0 5px !important; + padding-bottom: 1.5em !important; } .ws-closed { @@ -597,23 +589,15 @@ ul.select2-selection__rendered { } .control-button { + background: lightgray; color: black !important; - border: 0; + border: 0; } .control-button:hover { background: gray; } -ul.errorlist { - margin: 0px; - text-align: right; - list-style: none; - padding: 0px; - color: red; - margin-bottom: 3px; -} - .registration-form { .sortedm2m-container, .sortedm2m-container p.selector-filter { width: 300px; @@ -690,6 +674,12 @@ ul.errorlist { width: 450px; } + ul.errorlist { + margin: 0px; + text-align: right; + list-style: none; + } + .full-textfield { padding-top: 0.5em; } @@ -711,7 +701,7 @@ ul.errorlist { } #login-panel { - + display: inline-block; position: relative; margin: 5em auto auto -10em; @@ -739,160 +729,4 @@ ul.errorlist { .github-icon i { color: black; } -} - -@media (prefers-reduced-motion: reduce) { - .btn { - -webkit-transition: none; - -o-transition: none; - transition: none; - } -} - -.btn:hover { - color: #212529; - text-decoration: none; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 0.5rem; -} - -.d-flex { - display: -webkit-box !important; - display: -ms-flexbox !important; - display: flex !important; -} - -.justify-content-center { - -webkit-box-pack: center !important; - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.align-items-center { - -webkit-box-align: center !important; - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - -ms-grid-row-align: center !important; - align-self: center !important; -} - -.link-row { - display: flex; - align-items: center; - padding: 6px; - font-weight: normal; - cursor: pointer; - transition: background-color 0.3s; - - a { - color: inherit; - display: flex; - align-items: center; - width: 100%; - text-decoration: none; - - i { - width: 1.5em; - } - } - - span { - flex-grow: 1; - } - - &:hover { - color: $theme_color; - background-color: #f8f8f2; - } -} - -a { - -webkit-transition: .3s all ease; - -o-transition: .3s all ease; - transition: .3s all ease; -} - -button:hover, button:focus { - text-decoration: none; - outline: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn { - padding: 8px 12px; - cursor: pointer; - border-width: 1px; - border-radius: 5px; - font-size: 14px; - font-weight: 500; - -webkit-box-shadow: 0px 10px 20px -6px rgba(0, 0, 0, 0.12); - -moz-box-shadow: 0px 10px 20px -6px rgba(0, 0, 0, 0.12); - box-shadow: 0px 10px 20px -6px rgba(0, 0, 0, 0.12); - overflow: hidden; - position: relative; - -moz-transition: all 0.3s ease; - -o-transition: all 0.3s ease; - -webkit-transition: all 0.3s ease; - -ms-transition: all 0.3s ease; - transition: all 0.3s ease; - span { - font-size: 15px; - margin-left: -20px; - -moz-transition: all 0.3s ease; - -o-transition: all 0.3s ease; - -webkit-transition: all 0.3s ease; - -ms-transition: all 0.3s ease; - transition: all 0.3s ease; - } - .icon { - position: absolute; - top: 0; - right: 0; - width: 45px; - bottom: 0; - background: #fff; - i { - font-size: 20px; - } - } - .icon.icon-round { - border-radius: 50%; - } - &.btn-round { - border-radius: 40px; - } - &:hover, &:active, &:focus { - outline: none; - span { - margin-left: -10px; - } - } - &.btn-primary { - color: #fff; - .icon i { - color: #28a745; - } - } - &.btn-disabled { - color: #fff; - background: gray; - border-color: gray; - } } \ No newline at end of file diff --git a/resources/wpadmin/css/wpadmin.site.css b/resources/wpadmin/css/wpadmin.site.css index d971f7c..d60064c 100644 --- a/resources/wpadmin/css/wpadmin.site.css +++ b/resources/wpadmin/css/wpadmin.site.css @@ -18,20 +18,13 @@ width: 100% !important; } -#content input.select2-search__field { - border: none; - box-shadow: none !important; -} - #content .content-description h1, #content .content-description h2, #content .content-description h3, #content .content-description h4, #content .content-description h5, #content .content-description h6 { - padding-left: 0; - padding-right: 0; - font-size: inherit; + padding: 0; } #content .content-description h5 { @@ -39,16 +32,14 @@ text-transform: initial; } -#content .content-description ul, -#content .content-description ol { - margin-left: 0; - margin-right: 0; +#content input.select2-search__field { + border: none; + box-shadow: none !important; } #content .content-description ul, #content .content-description ol { - margin-left: 0; - margin-right: 0; + margin: 0; } #content .content-description li { diff --git a/templates/about/about.html b/templates/about/about.html index ce978de..7924c6e 100644 --- a/templates/about/about.html +++ b/templates/about/about.html @@ -2,7 +2,7 @@ {% block body %} {% if request.organization %} - {% cache 3600 'organization_html' request.organization.id %} + {% cache 3600 'organization_html' request.organization.id MATH_ENGINE %} {{ request.organization.about|markdown|reference|str|safe }} {% endcache %} {% else %} diff --git a/templates/about/custom-checker-sample.html b/templates/about/custom-checker-sample.html index 26aae70..b6497df 100644 --- a/templates/about/custom-checker-sample.html +++ b/templates/about/custom-checker-sample.html @@ -1,12 +1,208 @@ {% extends "common-content.html" %} -{% block content_media %} +{% block description %} -{% endblock %} -{% block description %} - {{ content|markdown|str|safe}} -{% endblock %} +
      +

      1. Custom checker (PY)

      +
      +

      + Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm check dưới đây: +

      + + {{ + """ + def check(process_output, judge_output, **kwargs): + # return True/False + """|highlight('py')}} + +

      + Trong đó, **kwargs có thể chứa các biến sau: +

      +
        +
      • process_output: output
      • +
      • judge_output: đáp án
      • +
      • submission_source: Code bài nộp
      • +
      • judge_input: input
      • +
      • point_value: điểm của test đang chấm
      • +
      • case_position: thứ tự của test
      • +
      • submission_language: ngôn ngữ của bài nộp
      • +
      • execution_time: thời gian chạy
      • +
      +

      Return:

      +
        +
      • Cách 1: Trả về True/False
      • +
      • Cách 2: Trả về một object CheckerResult có thể được gọi như sau
        CheckerResult(case_passed_bool, points_awarded, feedback='')
      • +
      + +

      Ví dụ:

      +

      Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n. +

      + {{ + """ + from dmoj.result import CheckerResult + + + def wa(feedback): + return CheckerResult(False, 0, feedback) + + + def check(process_output, judge_output, judge_input, **kwargs): + # process the input + input_arr = judge_input.split() + assert(len(input_arr) == 1) + n = int(input_arr[0]) + + # process the contestant's output + output_arr = process_output.split() + + if (len(output_arr) != 2): + return wa('Wrong output format') + + try: + a, b = int(output_arr[0]), int(output_arr[1]) + except: + return wa('Wrong output format') + + if (n == a + b): + return True + return wa('a + b != n') + """| highlight('py')}} +
      +
      +

      2. Custom validator (CPP)

      +
      +

      + Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 3 arguments theo thứ tự input_file, output_file, ans_file tương ứng với các file input, output, đáp án. +

      +

      + Để test chương trình trên máy tính, có thể dùng lệnh như sau (Windows): +

      +main.exe [input_file] [output_file] [ans_file]
      + hoặc thay bằng ./main trên Linux/MacOS. +

      +

      Return:

      +

      + Chương trình trả về giá trị: +

        +
      • 0 nếu AC (100% điểm)
      • +
      • 1 nếu WA (0 điểm)
      • +
      • 2 nếu điểm thành phần. Khi đó cần in ra stderr một số thực trong đoạn [0, 1] thể hiện cho tỷ lệ điểm. Nếu điểm < 1 thì hiển thị WA, điểm = 1 thì hiển thị AC.
      • +
      + Những thông tin được viết ra stdout (bằng cout) sẽ được in ra màn hình cho người nộp bài(feedback) +

      + +

      Ví dụ:

      +

      Chương trình sau dùng để chấm bài toán: Cho n là một số nguyên dương. In ra hai số tự nhiên a, b sao cho a + b = n.

      +

      Nếu in ra a + b = n và a, b >= 0 thì được 100% số điểm, nếu a + b = n nhưng một trong 2 số a, b âm thì được 50% số điểm.

      + {{ + """ + #include + using namespace std; + + int main(int argc, char** argv) { + ifstream inp(argv[1]); + ifstream out(argv[2]); + ifstream ans(argv[3]); + + int n, a, b, c, d; + + inp >> n; + out >> a >> b; + ans >> c >> d; + + if (a + b == c + d) { + cout << a << \" + \" << b << \" = \" << c << \" + \" << d << endl; + + if (a >= 0 && b >= 0) { + return 0; // AC + } + else { + cerr << 0.5; + return 2; // PARTIAL + } + } + else { + cout << \"a + b = \" << a + b << \" != \" << n << endl; + return 1; // WA + } + } + """ | highlight('cpp')}} +
      +
      +

      3. Interactive (CPP)

      +
      +

      + Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 2 arguments input_file answer_file tương ứng file input và đáp án (nếu cần thiết). +

      +

      + Để test chương trình trên máy tính với tư cách thí sinh, có thể dùng lệnh như sau (Windows): +

      +main.exe [input_file] [answer_file]
      + hoặc thay bằng ./main trên Linux/MacOS. +

      +

      Return:

      +

      + Chương trình trả về giá trị: +

        +
      • 0 nếu AC (100% điểm)
      • +
      • 1 nếu WA (0 điểm)
      • +
      • 2 nếu điểm thành phần. Khi đó cần in ra stderr một số thực trong đoạn [0, 1] thể hiện cho tỷ lệ điểm. Nếu điểm < 1 thì hiển thị WA, điểm = 1 thì hiển thị AC.
      • +
      + Thông tin được in ra trong stderr (bằng cerr) sẽ là feedback hiển thị cho người dùng. +

      + +

      Ví dụ:

      +

      Chương trình sau dùng để chấm bài toán guessgame: Người chơi phải tìm 1 số bí mật n (n chứa trong file input). Mỗi lần họ được hỏi một số x, và chương trình sẽ trả về "SMALLER", "BIGGER" hoặc "HOLA" dựa trên giá trị của n và x. Cần tìm ra n sau không quá 31 câu hỏi.

      + {{ + """ + #include + using namespace std; + + void quit(string reason) { + cerr << reason << endl; + exit(1); + } + + void read(long long& guess) { + if (!(cin >> guess)) exit(1); // Nếu không có dòng này, chương trình sẽ chờ vô hạn + if (guess < 1 || guess > 2e9) exit(1); + } + + int main(int argc, char *argv[]) { + ifstream inp(argv[1]); + int N, guesses = 0; + long long guess; + inp >> N; + + while (guess != N && guesses <= 31) { + read(guess); + if (guess == N) { + cout << \"HOLA\" << endl; + } else if (guess > N) { + cout << \"SMALLER\" << endl; + } else { + cout << \"BIGGER\" << endl; + } + guesses++; + } + cerr << \"Number of used guesses: \" << guesses << endl; + if (guesses <= 31) + return 0; // AC + else { + cerr << \"Used too many guesses\" << endl; + return 1; // WA + } + } + """ | highlight('cpp')}} +
      +{% endblock %} \ No newline at end of file diff --git a/templates/actionbar/list.html b/templates/actionbar/list.html index b02048b..e5761bb 100644 --- a/templates/actionbar/list.html +++ b/templates/actionbar/list.html @@ -1,62 +1,54 @@ {% set logged_in = request.user.is_authenticated %} {% set profile = request.profile if logged_in else None %} -{% set hide_texts_on_mobile = (not hide_actionbar_comment) or actionbar_report_url %} {% if logged_in %} - {% if include_hr %} -
      +{% if include_hr %} +
      {% endif %} +
      + + + + + + + {% if not hide_actionbar_comment %} + + + + {{_("Comment")}} {% if comment_list.count() %} ({{comment_list.count()}}) {% endif + %} + + {% endif %} -
      - - - - - + + + + {{_("Bookmark")}} - {% if not hide_actionbar_comment %} - - - - - {{_("Comment")}} - - {% if all_comment_count %} - - ({{ all_comment_count }}) - - {% endif %} - - - {% endif %} - - - - {{_("Bookmark")}} - - - - + + + - {{_("Share")}} - + {{_("Share")}} - {% if actionbar_report_url %} - - - - {{_("Report")}} - - - {% endif %} -
      + + {% if actionbar_report_url %} + + + + {{_("Report")}} + + + {% endif %} +
      {% endif %} \ No newline at end of file diff --git a/templates/actionbar/media-css.html b/templates/actionbar/media-css.html new file mode 100644 index 0000000..0ad2a51 --- /dev/null +++ b/templates/actionbar/media-css.html @@ -0,0 +1,7 @@ + diff --git a/templates/actionbar/media-js.html b/templates/actionbar/media-js.html index f1dec97..c3b7e0d 100644 --- a/templates/actionbar/media-js.html +++ b/templates/actionbar/media-js.html @@ -37,8 +37,7 @@ }); } - window.bookmark = function(id, e) { - e.stopPropagation(); + window.bookmark = function(id) { var $bookmark = $('#bookmark-button-' + id); if ($bookmark.hasClass('bookmarked')) { ajax_bookmark('{{ url('undobookmark') }}', id, function () { @@ -62,8 +61,7 @@ }; }; - window.pagevote_upvote = function (id, e) { - e.stopPropagation(); + window.pagevote_upvote = function (id) { var $votes = get_$votes(id); if ($votes.upvote.hasClass('voted')) { ajax_vote('{{ url('pagevote_downvote') }}', id, -1, function () { @@ -85,8 +83,7 @@ } }; - window.pagevote_downvote = function (id, e) { - e.stopPropagation(); + window.pagevote_downvote = function (id) { var $votes = get_$votes(id); if ($votes.downvote.hasClass('voted')) { ajax_vote('{{ url('pagevote_upvote') }}', id, 1, function () { @@ -107,22 +104,18 @@ } } }; - window.actionbar_share = function(element, e) { - e.stopPropagation(); - link = $(element).attr("share-url") || window.location.href; + $(".actionbar-share").click( function() { + link = $(this).attr("share-url") || window.location.href; navigator.clipboard .writeText(link) .then(() => { - showTooltip(element, "{{_('Copied link')}}", 'n'); + showTooltip(this, "Copied link", 'n'); }); - }; + }); $('.actionbar-comment').on('click', function() { - if ($('#comment-section').css('display') == 'none') { - $('#comment-section').show(); - } else { - $('#write-comment').click(); - } + $('#comment-section').show(); + $('#write-comment').click(); }) }); diff --git a/templates/base.html b/templates/base.html index 20a7e31..e095b48 100644 --- a/templates/base.html +++ b/templates/base.html @@ -50,17 +50,15 @@ {% compress css %} - {% if INLINE_FONTAWESOME %} - - {% endif %} + {% if PYGMENT_THEME %} + + {% endif %}{% if INLINE_FONTAWESOME %} + {% endif %} {% endcompress %} - - - {% if request.user.is_impersonate %} @@ -70,10 +68,118 @@ } {% endif %} - + {% block media %}{% endblock %} {% if use_darkmode %} - - + {% compress css %} + + + {% endcompress %} + {% endif %} + {% if not INLINE_JQUERY %} + + {% endif %} + + {% compress js %} + + {% if INLINE_JQUERY %} + + {% endif %} + + + + + + + {% include "extra_js.html" %} + + + + {% endcompress %} + + {% block js_media %}{% endblock %} + {% if request.in_contest %} + + {% endif %} + + {% if request.user.is_authenticated %} + + {% else %} + + {% endif %} + + {% if misc_config.analytics %} + {{ misc_config.analytics|safe }} + {% endif %} + + {# Don't run userscript since it may be malicious #} + {% if request.user.is_authenticated and request.profile.user_script and not request.user.is_impersonate %} + {% endif %} - {% if request.profile.css_background %} - - {% endif %} - {% if not INLINE_JQUERY %} - - {% else %} - - {% endif %} @@ -113,22 +201,15 @@ -
      {% if request.in_contest %}
      @@ -256,21 +320,19 @@
      {% if request.contest_mode %} - {{_('In contest')}} + {{_('Compete')}} {% else %} - {{_('Out contest')}} + {{_('General')}} {% endif %}
      {% endif %}
      -
      - {% block media %}{% endblock %} -
      -
      +
      +
      {% block title_row %}

      {% block content_title %} @@ -289,113 +351,12 @@
      {{ i18n_config.announcement|safe }}
      {% endif %} - {% compress js %} - - - - - - - - - {% include "extra_js.html" %} - - - - - {% endcompress %} -
      - {% block js_media %}{% endblock %} -
      - {% if request.in_contest %} - - {% endif %} - - {% if request.user.is_authenticated %} - - {% else %} - - {% endif %} - - {% if misc_config.analytics %} - {{ misc_config.analytics|safe }} - {% endif %} - -
      - {% block bodyend %}{% endblock %} -
      - - {% include "katex-load.html" %} + {% block bodyend %}{% endblock %} {% block footer %} {% endblock %}

      + + + diff --git a/templates/blog/blog.html b/templates/blog/blog.html index 66b99fb..fa97dac 100644 --- a/templates/blog/blog.html +++ b/templates/blog/blog.html @@ -7,6 +7,7 @@ {% block media %} {% include "comments/media-css.html" %} + {% include "actionbar/media-css.html" %} {% endblock %} {% block title_row %} @@ -19,7 +20,7 @@
      {{ title }}
      - {% with authors=post.get_authors() %} + {% with authors=post.authors.all() %} {% if authors %} {% endif %} @@ -30,14 +31,14 @@ {% if post.is_editable_by(request.user) %} [{{ _('Edit') }}] {% endif %} - {% if editable_orgs %} - {% for org in editable_orgs %} + {% if valid_user_to_show_edit %} + {% for org in valid_org_to_show_edit %} [{{ _('Edit in') }} {{org.slug}}] {% endfor %} {% endif %}
      - {% cache 86400 'post_content' post.id %} + {% cache 86400 'post_content' post.id MATH_ENGINE %} {{ post.content|markdown|reference|str|safe}} {% endcache %}
      @@ -46,3 +47,11 @@
      {% include "comments/list.html" %} {% endblock %} + +{% block bodyend %} + {{ super() }} + {% if REQUIRE_JAX %} + {% include "mathjax-load.html" %} + {% endif %} + {% include "comments/math.html" %} +{% endblock %} \ No newline at end of file diff --git a/templates/blog/content.html b/templates/blog/content.html index 7233094..7f77438 100644 --- a/templates/blog/content.html +++ b/templates/blog/content.html @@ -1,55 +1,55 @@ -{% for post in posts %} -
      - {% if post.is_organization_private and show_organization_private_icon %} -
      +
      +
      + + {% with authors=post.authors.all() %} + {%- if authors -%} + + + {%- endif -%} + {% endwith %} + • + {{ relative_time(post.publish_on, abs=_('on {time}'), rel=_('{time}')) -}} + {%- if post.sticky %} • + {% endif -%} + {% if post.is_organization_private and show_organization_private_icon %} + • + {% for org in post.organizations.all() %} - {% include "organization/tag.html" %} + + + {{ org.name }} + + {% endfor %} -
      - {% endif %} -
      - - {% with authors=post.get_authors() %} - {%- if authors -%} - - - - - {%- endif -%} - {% endwith %} - • - {{ relative_time(post.publish_on) }} - {%- if post.sticky %} • - {% endif -%} - - - - - - {{ comment_count(post) }} - - + {% endif %} + + + + + + {{- post_comment_counts[post.id] or 0 -}} + + + +
      +

      + {{ post.title }} +

      +
      +
      + {% cache 86400 'post_summary' post.id %} + {{ post.summary|default(post.content, true)|markdown(lazy_load=True)|reference|str|safe }} + {% endcache %}
      -

      - {{ post.title }} -

      -
      -
      - {% cache 86400 'post_content' post.id %} - {{ post.content|markdown(lazy_load=True)|reference|str|safe }} - {% endcache %} -
      -
      {{_("...More")}}
      -
      -
      - {% set pagevote = post.get_or_create_pagevote() %} - {% set bookmark = post.get_or_create_bookmark() %} - {% set hide_actionbar_comment = True %} - {% set include_hr = False %} - {% set share_url = request.build_absolute_uri(post.get_absolute_url()) %} - {% include "actionbar/list.html" %} -
      -
      -{% endfor %} -{% include "feed/has_next.html" %} \ No newline at end of file +
      +
      {{_("...More")}}
      +
      + {% set pagevote = post.pagevote %} + {% set bookmark = post.bookmark %} + {% set hide_actionbar_comment = True %} + {% set include_hr = False %} + {% set share_url = request.build_absolute_uri(post.get_absolute_url()) %} + {% include "actionbar/list.html" %} +
      +
      \ No newline at end of file diff --git a/templates/blog/dashboard.html b/templates/blog/dashboard.html index 36a2fa5..b34d406 100644 --- a/templates/blog/dashboard.html +++ b/templates/blog/dashboard.html @@ -3,7 +3,7 @@
    {% endif %} {% endfor %} - diff --git a/templates/chat/user_online_status.html b/templates/chat/user_online_status.html index 3f2d10b..6f7d8cd 100644 --- a/templates/chat/user_online_status.html +++ b/templates/chat/user_online_status.html @@ -1,24 +1,17 @@ -
    - -
    {% if other_user %} -
    - - +
    + +
    -{% else %} -
    - -
    {% endif %} {% if other_user %} - {{link_user(other_user)}} + {{other_user.user.username}} {% else%} - {{ _('Lobby') }} + {{ _('Lobby') }} {% endif %} @@ -27,20 +20,22 @@ {% endif %} {% if other_user %} -
    - + {% else %} {{online_count}} {{_('users are online')}} {% endif %} \ No newline at end of file diff --git a/templates/comments/content-list.html b/templates/comments/content-list.html deleted file mode 100644 index e87690e..0000000 --- a/templates/comments/content-list.html +++ /dev/null @@ -1,133 +0,0 @@ -{% for node in mptt_tree(comment_list) recursive %} -
  1. -
    -
    -
    - {% if profile %} - - {% else %} - - {% endif %} -
    -
    {{ node.score }}
    - {% if profile %} - - {% else %} - - {% endif %} -
    -
    -
    -
    - {{ link_user(node.author_id, show_image=True) }}   - {{ relative_time(node.time, abs=_('{time}'), rel=_('{time}')) }} - - - {% if node.revision_count > 1 %} - - - - {% if node.revision_count > 2 %} - {% trans edits=node.revision_count - 1 %}edit {{ edits }}{% endtrans %} - {% else %} - {{ _('edited') }} - {% endif %} - - - - {% else %} - - {% endif %} - - - - {% if profile and not comment_lock %} - {% set can_edit = node.author_id == profile.id and not profile.mute %} - {% if can_edit %} - - - - {% else %} - - - - {% endif %} - {% if perms.judge.change_comment %} - {% if can_edit %} - - {% else %} - - - - {% endif %} - - - {% endif %} - {% endif %} - -
    -
    - - {% if node.score <= vote_hide_threshold %} -
    -

    - {% trans id=node.id %}This comment is hidden due to too much negative feedback. Click here to view it.{% endtrans %} -

    -
    - {% endif %} -
    -
    -
    - - {% set count_replies=node.count_replies %} - {% if count_replies %} - - - - - - {{ count_replies }} - {% trans trimmed count=count_replies %} - reply - {% pluralize count %} - replies - {% endtrans %} - - {% endif %} -
  2. - - {% with children=node.get_children() %} - {% if children %} -
      {{ loop(children) }}
    - {% else %} -
      - {% endif %} - {% endwith %} -{% endfor %} - -{% if comment_more > 0 %} - - - - - - {{ comment_more }} - {% trans trimmed count=comment_more %} - more comment - {% pluralize count %} - more comments - {% endtrans %} - -{% endif %} diff --git a/templates/comments/feed.html b/templates/comments/feed.html index c0fff1d..c5fb439 100644 --- a/templates/comments/feed.html +++ b/templates/comments/feed.html @@ -1,22 +1,18 @@ -{% for comment in comments %} -
      -

      - - {{ comment.page_title }} - -

      - {% with author_id=comment.author_id %} - {% if author_id %} -
      - - {{ link_user(author_id) }} -
      - {% endif %} - {% endwith %} -
      - {{ comment.body|markdown(lazy_load=True)|reference|str|safe }} -
      {{_("...More")}}
      -
      +
      +

      + + {{ page_titles[comment.page] }} + +

      + {% with author=comment.author %} + {% if author %} +
      + + {{ link_user(author) }} +
      + {% endif %} + {% endwith %} +
      + {{ comment.body|markdown(lazy_load=True)|reference|str|safe }}
      -{% endfor %} -{% include "feed/has_next.html" %} \ No newline at end of file +
      \ No newline at end of file diff --git a/templates/comments/list.html b/templates/comments/list.html index fc0df78..44c2515 100644 --- a/templates/comments/list.html +++ b/templates/comments/list.html @@ -3,7 +3,7 @@

      {{ _('Comments') }} {% if can_comment %} - {{ _('Write comment') }} + {{ _('Write comment') }} {% endif %}

      {% if can_comment %} @@ -37,8 +37,118 @@
      {% endif %} {% if has_comments %} -
        - {% include "comments/content-list.html" %} +
          + {% set logged_in = request.user.is_authenticated %} + {% set profile = request.profile if logged_in else None %} + {% for node in mptt_tree(comment_list) recursive %} +
        • +
          +
          +
          + {% if logged_in %} + + {% else %} + + {% endif %} +
          +
          {{ node.score }}
          + {% if logged_in %} + + {% else %} + + {% endif %} +
          + {% with author=node.author, user=node.author.user %} + + + + {% endwith %} +
          +
          +
          + {{ link_user(node.author) }}  + {{ relative_time(node.time, abs=_('commented on {time}'), rel=_('commented {time}')) }} + + + {% if node.revisions > 1 %} + + + + {% if node.revisions > 2 %} + {% trans edits=node.revisions - 1 %}edit {{ edits }}{% endtrans %} + {% else %} + {{ _('edited') }} + {% endif %} + + + + {% else %} + + {% endif %} + + + + {% if logged_in and not comment_lock %} + {% set can_edit = node.author.id == profile.id and not profile.mute %} + {% if can_edit %} + + + + {% else %} + + + + {% endif %} + {% if perms.judge.change_comment %} + {% if can_edit %} + + {% else %} + + {% endif %} + + + {% endif %} + {% endif %} + +
          +
          + + {% if node.score <= vote_hide_threshold %} +
          +

          + {% trans id=node.id %}This comment is hidden due to too much negative feedback. Click here to view it.{% endtrans %} +

          +
          + {% endif %} +
          +
          +
          +
        • + + {% with children=node.get_children() %} + {% if children %} +
            {{ loop(children) }}
          + {% endif %} + {% endwith %} + {% endfor %}
        {% elif not comment_lock %}

        {{ _('There are no comments at the moment.') }}

        diff --git a/templates/comments/math.html b/templates/comments/math.html new file mode 100644 index 0000000..16b228a --- /dev/null +++ b/templates/comments/math.html @@ -0,0 +1,3 @@ +{% compress js, inline %} + +{% endcompress %} diff --git a/templates/comments/media-js.html b/templates/comments/media-js.html index 5baa8a8..b1131d5 100644 --- a/templates/comments/media-js.html +++ b/templates/comments/media-js.html @@ -1,8 +1,35 @@ + {% compress js %} {{ comment_form.media.js }} + {% if not REQUIRE_JAX %} + + {% endif %} {% endcompress %} @@ -43,4 +71,10 @@ {% block comments %}{% endblock %}
      -{% endblock %} \ No newline at end of file +{% endblock %} + +{% block bodyend %} + {% if REQUIRE_JAX %} + {% include "mathjax-load.html" %} + {% endif %} +{% endblock %} diff --git a/templates/contest/clone.html b/templates/contest/clone.html index 73d01e5..f1b4a0f 100644 --- a/templates/contest/clone.html +++ b/templates/contest/clone.html @@ -25,32 +25,17 @@ {% endblock %} -{% block js_media %} - -{% endblock %} - {% block body %}
      {% csrf_token %} - {% if form.key.errors %} + {% if form.errors %}
      -
      {{ form.key.errors }}
      + {{ form.key.errors }}
      {% endif %}
      {{ form.key }}
      -
      - {{form.organization}} - {% if form.organization.errors %} -
      -
      {{ form.organization.errors }}
      -
      - {% endif %}
      diff --git a/templates/contest/contest-datetime-js.html b/templates/contest/contest-datetime-js.html deleted file mode 100644 index 478205d..0000000 --- a/templates/contest/contest-datetime-js.html +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/templates/contest/contest-datetime.html b/templates/contest/contest-datetime.html index 7ed2e1e..b4b6278 100644 --- a/templates/contest/contest-datetime.html +++ b/templates/contest/contest-datetime.html @@ -1,3 +1,10 @@ +