diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index dcd89a2..ec258a9 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -22,11 +22,9 @@ jobs:
uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: 5fcb9b2b-db25-41f5-80b1-c1da5f3fbd1d
- heroku_app_name: ${{secrets.HEROKU_APP_NAME}}
+ heroku_app_name: bebeshare-deploy
heroku_email: blood_nail@naver.com
-
-
diff --git a/.gitignore b/.gitignore
index a63ec65..8be218a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@
### Java ###
# Compiled class file
-*.class
+*.class
out/
InitClass.java
.idea
@@ -30,4 +30,6 @@ InitClass.java
hs_err_pid*
replay_pid*
-# End of https://www.toptal.com/developers/gitignore/api/java
\ No newline at end of file
+# End of https://www.toptal.com/developers/gitignore/api/java
+
+.gradle
diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin
index 416ae09..0223029 100644
Binary files a/.gradle/7.1/executionHistory/executionHistory.bin and b/.gradle/7.1/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock
index 4c6108b..a0b412f 100644
Binary files a/.gradle/7.1/executionHistory/executionHistory.lock and b/.gradle/7.1/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin
index ec95360..448e0e5 100644
Binary files a/.gradle/7.1/fileHashes/fileHashes.bin and b/.gradle/7.1/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock
index 9576c3d..d1ae657 100644
Binary files a/.gradle/7.1/fileHashes/fileHashes.lock and b/.gradle/7.1/fileHashes/fileHashes.lock differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 4855ee7..7e13fbb 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 378faa4..0781ef8 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/checksums/checksums.lock b/.gradle/checksums/checksums.lock
index 13facb4..83831f0 100644
Binary files a/.gradle/checksums/checksums.lock and b/.gradle/checksums/checksums.lock differ
diff --git a/.gradle/checksums/md5-checksums.bin b/.gradle/checksums/md5-checksums.bin
index c2de805..8124357 100644
Binary files a/.gradle/checksums/md5-checksums.bin and b/.gradle/checksums/md5-checksums.bin differ
diff --git a/.gradle/checksums/sha1-checksums.bin b/.gradle/checksums/sha1-checksums.bin
index bd59425..be679ba 100644
Binary files a/.gradle/checksums/sha1-checksums.bin and b/.gradle/checksums/sha1-checksums.bin differ
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 7113768..5386160 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/Procfile b/Procfile
index 60b2c0b..5f07522 100644
--- a/Procfile
+++ b/Procfile
@@ -1 +1 @@
-web java -Dserver.port=$PORT $JAVA_OPTS -Dspring.profiles.active=prod -jar build/libs/7th-bebeShare-0.0.1-SNAPSHOT.jar'
+web java -Dserver.port=$PORT $JAVA_OPTS -Dspring.profiles.active=prod -jar build/libs/bebeshare-deploy.jar
\ No newline at end of file
diff --git a/README.md b/README.md
index 4a48cb4..2b50759 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,74 @@
-1. 프로젝트 Description
+# 무료 나눔 플랫폼 - bebeShare - 💓
+
-- bebeShare
+### 배포 링크 🔗 [https://bebeshare-deploy.herokuapp.com/](https://bebeshare-deploy.herokuapp.com/)
+### API 링크 🔗
+### Github 링크 🔗 [https://github.com/Couch-Coders/7th-bebeShare](https://github.com/Couch-Coders/7th-bebeShare)
+
-- 안쓰는 육아용품을 서로 무료로 나눔 하는 웹사이트. 가입한 유저들은 나눔할 육아용품을 올리고 나눔받을 사람을 찾는다.
+### 육아용품 무료 나눔 웹사이트
+## ver.01
+### :baby_bottle: 사용하지 않는 육아용품을 나눔하고 나눔받을 수 있는 서비스
+> - 나눔을 희망하는 유저(쉐어)는 육아용품을 게시하고 나눔할 수 있습니다
+> - 나눔받기를 희망하는 유저(베베)는 댓글을 통해 나눔받기 신청을 할 수 있습니다
+> - 댓글을 통해 해당 물품을 나눔 받을 수 있습니다
-- 댓글을 통해 나눔의사를 밝히고 해당 물품을 나눔 받는다.
+### :three: 나눔받기 횟수의 제한
+> - 유저는 일정기간 제한된 나눔받기 횟수만큼 나눔을 받을 수 있습니다
+> - 제공된 나눔받기 횟수를 모두 소진하더라도 나눔을 할 경우 나눔횟수가 추가됩니다
+> - 나눔하기 횟수는 제한이 없습니다
+### :heavy_check_mark: 관심목록 찜 기능
+> - 베베는 상품 상세 페이지에서 상품을 찜할 수 있습니다
-2. 프로젝트 정보 (ver 0.1)
+### :alarm_clock: 알림을 통해 내가 업로드한 상품을 찜한 회원 확인
+> - 쉐어가 업로드한 상품을 베베가 찜하면 쉐어는 알림을 통해 확인할 수 있습니다
-- 현재 프로젝트는 상품나눔 게시글 작성 , 댓글을 통한 서로 나눔
-- 마이페이지 나눔 받을 횟수 , 나눔 한 횟수 , 나눔받을수 있는 횟수 대략 적인정보.
-- 나눔내역 나눔받은 내역 , 찜목록 , 댓글 목록등을 나타낸다.
-- 우선 기본적인 Default 기능이 완료 되면. 추후 기능을 늘려간다.
+### :family: 마이페이지
+> - 마이페이지에서 나눔내역 횟수, 나눔목록, 찜목록, 댓글 목록을 볼 수 있습니다
+## ver.02 추가 예정 기능(희망)
+> - 채팅을 통한 유저간 소통
+> - 알림 기능
+> - 유저들 간의 커뮤니티 기능
-- 추후 추가될 기능 (희망)
+
-채팅을 통한 유저들의 소통 , 알림 기능 , 유저들 간의 커뮤니티 게시판 목록
+## 👨💻 팀원 소개
+| [권기준](https://github.com/superkkj) | [이태기](https://github.com/TevLee) | [홍유진](https://github.com/omnireader0) |
+| :--------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------: |
+| | | |
+| BackEnd | BackEnd | BackEnd |
+
+
+## :watch: 개발 기간
+- 2022.03.15 ~
+
+## 개발 환경
+
+
+
+
+
+
+
+
+
+
+## 인프라
+
+
+
+
+
+## 🛠 기획 및 설계
+- [DB 명세서](https://lean-owner-437.notion.site/DB-dc8f9dfa82504658b3324594b1e9f214)
+
+
+- [API 명세서](https://lean-owner-437.notion.site/API-90cc212689ad4070b10fa83f822301bf)
diff --git a/build.gradle b/build.gradle
index 55cac96..725251d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -39,16 +39,20 @@ repositories {
}
dependencies {
+ implementation group: 'com.google.firebase', name: 'firebase-admin', version: '8.0.1'
+
implementation('org.springframework.boot:spring-boot-starter-web')
implementation 'junit:junit:4.13.1'
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation('org.springframework.boot:spring-boot-starter-test')
- implementation('org.projectlombok:lombok:1.18.10')
- annotationProcessor('org.projectlombok:lombok:1.18.10')
+ implementation('org.projectlombok:lombok:1.18.20')
+ annotationProcessor('org.projectlombok:lombok:1.18.20')
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client'
+ implementation group: 'org.postgresql', name: 'postgresql', version: '42.3.3'
+
implementation('org.springframework.boot:spring-boot-starter-mustache')
@@ -70,9 +74,21 @@ dependencies {
implementation 'javax.annotation:javax.annotation-api:1.3.2'
-
-
-
+ //websocket
+ implementation 'org.springframework.boot:spring-boot-starter-websocket'
+ implementation 'org.webjars:sockjs-client:1.1.2'
+ implementation 'org.webjars:stomp-websocket:2.3.3-1'
+
+ //view
+ implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
+ implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
+ implementation 'org.springframework.boot:spring-boot-starter-freemarker'
+ implementation 'org.springframework.boot:spring-boot-devtools'
+ implementation 'org.webjars.bower:bootstrap:4.3.1'
+ implementation 'org.webjars.bower:vue:2.5.16'
+ implementation 'org.webjars.bower:axios:0.17.1'
+ implementation 'com.google.code.gson:gson:2.8.0'
+ runtimeOnly 'com.h2database:h2'
}
@@ -95,4 +111,13 @@ configurations {
}
querydsl.extendsFrom compileClasspath
}
-//querydsl 추가 끝
\ No newline at end of file
+/** * comileQuerydsl.doFirst 추가 */
+// compileQuerydsl.doFirst {
+// if(file(querydslDir).exists())
+// delete(file(querydslDir))
+// }
+//querydsl 추가 끝
+bootJar {
+ archivesBaseName='bebeshare-deploy'
+ archiveFileName='bebeshare-deploy.jar'
+}
diff --git a/build/generated/querydsl/bebeShare/QBaseEntity.java b/build/generated/querydsl/bebeShare/QBaseEntity.java
new file mode 100644
index 0000000..67350bf
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/QBaseEntity.java
@@ -0,0 +1,43 @@
+package bebeShare;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QBaseEntity is a Querydsl query type for BaseEntity
+ */
+@Generated("com.querydsl.codegen.DefaultSupertypeSerializer")
+public class QBaseEntity extends EntityPathBase {
+
+ private static final long serialVersionUID = 1239751561L;
+
+ public static final QBaseEntity baseEntity = new QBaseEntity("baseEntity");
+
+ public final DateTimePath createdDate = createDateTime("createdDate", java.time.LocalDateTime.class);
+
+ public final NumberPath createedById = createNumber("createedById", Long.class);
+
+ public final NumberPath modifiedById = createNumber("modifiedById", Long.class);
+
+ public final DateTimePath modifiedDate = createDateTime("modifiedDate", java.time.LocalDateTime.class);
+
+ public QBaseEntity(String variable) {
+ super(BaseEntity.class, forVariable(variable));
+ }
+
+ public QBaseEntity(Path extends BaseEntity> path) {
+ super(path.getType(), path.getMetadata());
+ }
+
+ public QBaseEntity(PathMetadata metadata) {
+ super(BaseEntity.class, metadata);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/code/QCode.java b/build/generated/querydsl/bebeShare/domain/code/QCode.java
new file mode 100644
index 0000000..a67ae01
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/code/QCode.java
@@ -0,0 +1,57 @@
+package bebeShare.domain.code;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QCode is a Querydsl query type for Code
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QCode extends EntityPathBase {
+
+ private static final long serialVersionUID = 465556057L;
+
+ public static final QCode code1 = new QCode("code1");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ public final StringPath code = createString("code");
+
+ public final StringPath codeName = createString("codeName");
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final NumberPath id = createNumber("id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final StringPath useYn = createString("useYn");
+
+ public QCode(String variable) {
+ super(Code.class, forVariable(variable));
+ }
+
+ public QCode(Path extends Code> path) {
+ super(path.getType(), path.getMetadata());
+ }
+
+ public QCode(PathMetadata metadata) {
+ super(Code.class, metadata);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/comment/QComment.java b/build/generated/querydsl/bebeShare/domain/comment/QComment.java
new file mode 100644
index 0000000..61448d1
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/comment/QComment.java
@@ -0,0 +1,74 @@
+package bebeShare.domain.comment;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QComment is a Querydsl query type for Comment
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QComment extends EntityPathBase {
+
+ private static final long serialVersionUID = -1348103589L;
+
+ private static final PathInits INITS = PathInits.DIRECT2;
+
+ public static final QComment comment = new QComment("comment");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ public final StringPath commentContent = createString("commentContent");
+
+ public final StringPath commentStatus = createString("commentStatus");
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final StringPath deleteYn = createString("deleteYn");
+
+ public final NumberPath id = createNumber("id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final bebeShare.domain.product.QProduct product;
+
+ public final bebeShare.domain.user.QUser user;
+
+ public QComment(String variable) {
+ this(Comment.class, forVariable(variable), INITS);
+ }
+
+ public QComment(Path extends Comment> path) {
+ this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+ }
+
+ public QComment(PathMetadata metadata) {
+ this(metadata, PathInits.getFor(metadata, INITS));
+ }
+
+ public QComment(PathMetadata metadata, PathInits inits) {
+ this(Comment.class, metadata, inits);
+ }
+
+ public QComment(Class extends Comment> type, PathMetadata metadata, PathInits inits) {
+ super(type, metadata, inits);
+ this.product = inits.isInitialized("product") ? new bebeShare.domain.product.QProduct(forProperty("product"), inits.get("product")) : null;
+ this.user = inits.isInitialized("user") ? new bebeShare.domain.user.QUser(forProperty("user")) : null;
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/like/QDibs.java b/build/generated/querydsl/bebeShare/domain/like/QDibs.java
new file mode 100644
index 0000000..8a019ff
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/like/QDibs.java
@@ -0,0 +1,68 @@
+package bebeShare.domain.like;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QDibs is a Querydsl query type for Dibs
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QDibs extends EntityPathBase {
+
+ private static final long serialVersionUID = 1428990104L;
+
+ private static final PathInits INITS = PathInits.DIRECT2;
+
+ public static final QDibs dibs = new QDibs("dibs");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final NumberPath Id = createNumber("Id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final bebeShare.domain.product.QProduct product;
+
+ public final bebeShare.domain.user.QUser user;
+
+ public QDibs(String variable) {
+ this(Dibs.class, forVariable(variable), INITS);
+ }
+
+ public QDibs(Path extends Dibs> path) {
+ this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+ }
+
+ public QDibs(PathMetadata metadata) {
+ this(metadata, PathInits.getFor(metadata, INITS));
+ }
+
+ public QDibs(PathMetadata metadata, PathInits inits) {
+ this(Dibs.class, metadata, inits);
+ }
+
+ public QDibs(Class extends Dibs> type, PathMetadata metadata, PathInits inits) {
+ super(type, metadata, inits);
+ this.product = inits.isInitialized("product") ? new bebeShare.domain.product.QProduct(forProperty("product"), inits.get("product")) : null;
+ this.user = inits.isInitialized("user") ? new bebeShare.domain.user.QUser(forProperty("user")) : null;
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/posts/QPosts.java b/build/generated/querydsl/bebeShare/domain/posts/QPosts.java
new file mode 100644
index 0000000..e9aff16
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/posts/QPosts.java
@@ -0,0 +1,57 @@
+package bebeShare.domain.posts;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QPosts is a Querydsl query type for Posts
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QPosts extends EntityPathBase {
+
+ private static final long serialVersionUID = -1653705725L;
+
+ public static final QPosts posts = new QPosts("posts");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ public final StringPath author = createString("author");
+
+ public final StringPath content = createString("content");
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final NumberPath id = createNumber("id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final StringPath title = createString("title");
+
+ public QPosts(String variable) {
+ super(Posts.class, forVariable(variable));
+ }
+
+ public QPosts(Path extends Posts> path) {
+ super(path.getType(), path.getMetadata());
+ }
+
+ public QPosts(PathMetadata metadata) {
+ super(Posts.class, metadata);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/product/QProduct.java b/build/generated/querydsl/bebeShare/domain/product/QProduct.java
new file mode 100644
index 0000000..2d4500d
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/product/QProduct.java
@@ -0,0 +1,85 @@
+package bebeShare.domain.product;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QProduct is a Querydsl query type for Product
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QProduct extends EntityPathBase {
+
+ private static final long serialVersionUID = 20299643L;
+
+ private static final PathInits INITS = PathInits.DIRECT2;
+
+ public static final QProduct product = new QProduct("product");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final StringPath deleteYn = createString("deleteYn");
+
+ public final ListPath dibs = this.createList("dibs", bebeShare.domain.like.Dibs.class, bebeShare.domain.like.QDibs.class, PathInits.DIRECT2);
+
+ public final NumberPath id = createNumber("id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final StringPath productCategory = createString("productCategory");
+
+ public final StringPath productContent = createString("productContent");
+
+ public final StringPath productImage1 = createString("productImage1");
+
+ public final StringPath productImage2 = createString("productImage2");
+
+ public final StringPath productImage3 = createString("productImage3");
+
+ public final StringPath productName = createString("productName");
+
+ public final StringPath productStatus = createString("productStatus");
+
+ public final NumberPath shareId = createNumber("shareId", Long.class);
+
+ public final bebeShare.domain.user.QUser user;
+
+ public QProduct(String variable) {
+ this(Product.class, forVariable(variable), INITS);
+ }
+
+ public QProduct(Path extends Product> path) {
+ this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+ }
+
+ public QProduct(PathMetadata metadata) {
+ this(metadata, PathInits.getFor(metadata, INITS));
+ }
+
+ public QProduct(PathMetadata metadata, PathInits inits) {
+ this(Product.class, metadata, inits);
+ }
+
+ public QProduct(Class extends Product> type, PathMetadata metadata, PathInits inits) {
+ super(type, metadata, inits);
+ this.user = inits.isInitialized("user") ? new bebeShare.domain.user.QUser(forProperty("user")) : null;
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/domain/user/QUser.java b/build/generated/querydsl/bebeShare/domain/user/QUser.java
new file mode 100644
index 0000000..ca4047a
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/domain/user/QUser.java
@@ -0,0 +1,68 @@
+package bebeShare.domain.user;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QUser is a Querydsl query type for User
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QUser extends EntityPathBase {
+
+ private static final long serialVersionUID = 1932643609L;
+
+ public static final QUser user = new QUser("user");
+
+ public final bebeShare.QBaseEntity _super = new bebeShare.QBaseEntity(this);
+
+ //inherited
+ public final DateTimePath createdDate = _super.createdDate;
+
+ //inherited
+ public final NumberPath createedById = _super.createedById;
+
+ public final StringPath email = createString("email");
+
+ public final NumberPath giveCnt = createNumber("giveCnt", Integer.class);
+
+ public final NumberPath id = createNumber("id", Long.class);
+
+ //inherited
+ public final NumberPath modifiedById = _super.modifiedById;
+
+ //inherited
+ public final DateTimePath modifiedDate = _super.modifiedDate;
+
+ public final StringPath name = createString("name");
+
+ public final StringPath picture = createString("picture");
+
+ public final ListPath products = this.createList("products", bebeShare.domain.product.Product.class, bebeShare.domain.product.QProduct.class, PathInits.DIRECT2);
+
+ public final EnumPath role = createEnum("role", Role.class);
+
+ public final NumberPath shareChanceCnt = createNumber("shareChanceCnt", Integer.class);
+
+ public final NumberPath shareCnt = createNumber("shareCnt", Integer.class);
+
+ public QUser(String variable) {
+ super(User.class, forVariable(variable));
+ }
+
+ public QUser(Path extends User> path) {
+ super(path.getType(), path.getMetadata());
+ }
+
+ public QUser(PathMetadata metadata) {
+ super(User.class, metadata);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/web/dto/productDto/QProductInfoResponseDto.java b/build/generated/querydsl/bebeShare/web/dto/productDto/QProductInfoResponseDto.java
new file mode 100644
index 0000000..8148671
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/web/dto/productDto/QProductInfoResponseDto.java
@@ -0,0 +1,21 @@
+package bebeShare.web.dto.productDto;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.ConstructorExpression;
+import javax.annotation.Generated;
+
+/**
+ * bebeShare.web.dto.productDto.QProductInfoResponseDto is a Querydsl Projection type for ProductInfoResponseDto
+ */
+@Generated("com.querydsl.codegen.DefaultProjectionSerializer")
+public class QProductInfoResponseDto extends ConstructorExpression {
+
+ private static final long serialVersionUID = 248330593L;
+
+ public QProductInfoResponseDto(com.querydsl.core.types.Expression ProductId, com.querydsl.core.types.Expression Productname, com.querydsl.core.types.Expression ProductImage1, com.querydsl.core.types.Expression dibsId, com.querydsl.core.types.Expression InsertDt) {
+ super(ProductInfoResponseDto.class, new Class>[]{long.class, String.class, String.class, long.class, java.time.LocalDateTime.class}, ProductId, Productname, ProductImage1, dibsId, InsertDt);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QGiveInfoResponseDto.java b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QGiveInfoResponseDto.java
new file mode 100644
index 0000000..2bdbf18
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QGiveInfoResponseDto.java
@@ -0,0 +1,21 @@
+package bebeShare.web.dto.userDto.dto;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.ConstructorExpression;
+import javax.annotation.Generated;
+
+/**
+ * bebeShare.web.dto.userDto.dto.QGiveInfoResponseDto is a Querydsl Projection type for GiveInfoResponseDto
+ */
+@Generated("com.querydsl.codegen.DefaultProjectionSerializer")
+public class QGiveInfoResponseDto extends ConstructorExpression {
+
+ private static final long serialVersionUID = 1355540888L;
+
+ public QGiveInfoResponseDto(com.querydsl.core.types.Expression productId, com.querydsl.core.types.Expression productName, com.querydsl.core.types.Expression productImage1, com.querydsl.core.types.Expression insertDt) {
+ super(GiveInfoResponseDto.class, new Class>[]{long.class, String.class, String.class, java.time.LocalDateTime.class}, productId, productName, productImage1, insertDt);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QLikeInfoResponseDto.java b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QLikeInfoResponseDto.java
new file mode 100644
index 0000000..ce9542c
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QLikeInfoResponseDto.java
@@ -0,0 +1,21 @@
+package bebeShare.web.dto.userDto.dto;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.ConstructorExpression;
+import javax.annotation.Generated;
+
+/**
+ * bebeShare.web.dto.userDto.dto.QLikeInfoResponseDto is a Querydsl Projection type for LikeInfoResponseDto
+ */
+@Generated("com.querydsl.codegen.DefaultProjectionSerializer")
+public class QLikeInfoResponseDto extends ConstructorExpression {
+
+ private static final long serialVersionUID = -573355950L;
+
+ public QLikeInfoResponseDto(com.querydsl.core.types.Expression productId, com.querydsl.core.types.Expression productName, com.querydsl.core.types.Expression productImage1, com.querydsl.core.types.Expression insertDt) {
+ super(LikeInfoResponseDto.class, new Class>[]{long.class, String.class, String.class, java.time.LocalDateTime.class}, productId, productName, productImage1, insertDt);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QMemberCommentResponseDto.java b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QMemberCommentResponseDto.java
new file mode 100644
index 0000000..847882a
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QMemberCommentResponseDto.java
@@ -0,0 +1,21 @@
+package bebeShare.web.dto.userDto.dto;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.ConstructorExpression;
+import javax.annotation.Generated;
+
+/**
+ * bebeShare.web.dto.userDto.dto.QMemberCommentResponseDto is a Querydsl Projection type for MemberCommentResponseDto
+ */
+@Generated("com.querydsl.codegen.DefaultProjectionSerializer")
+public class QMemberCommentResponseDto extends ConstructorExpression {
+
+ private static final long serialVersionUID = 1947621696L;
+
+ public QMemberCommentResponseDto(com.querydsl.core.types.Expression commentId, com.querydsl.core.types.Expression productName, com.querydsl.core.types.Expression commentContent, com.querydsl.core.types.Expression insertDt) {
+ super(MemberCommentResponseDto.class, new Class>[]{long.class, String.class, String.class, java.time.LocalDateTime.class}, commentId, productName, commentContent, insertDt);
+ }
+
+}
+
diff --git a/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QShareInfoResponseDto.java b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QShareInfoResponseDto.java
new file mode 100644
index 0000000..c6c1495
--- /dev/null
+++ b/build/generated/querydsl/bebeShare/web/dto/userDto/dto/QShareInfoResponseDto.java
@@ -0,0 +1,21 @@
+package bebeShare.web.dto.userDto.dto;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.ConstructorExpression;
+import javax.annotation.Generated;
+
+/**
+ * bebeShare.web.dto.userDto.dto.QShareInfoResponseDto is a Querydsl Projection type for ShareInfoResponseDto
+ */
+@Generated("com.querydsl.codegen.DefaultProjectionSerializer")
+public class QShareInfoResponseDto extends ConstructorExpression {
+
+ private static final long serialVersionUID = -220659464L;
+
+ public QShareInfoResponseDto(com.querydsl.core.types.Expression productId, com.querydsl.core.types.Expression productName, com.querydsl.core.types.Expression productImage1, com.querydsl.core.types.Expression insertDt) {
+ super(ShareInfoResponseDto.class, new Class>[]{long.class, String.class, String.class, java.time.LocalDateTime.class}, productId, productName, productImage1, insertDt);
+ }
+
+}
+
diff --git a/build/tmp/compileQuerydsl/previous-compilation-data.bin b/build/tmp/compileQuerydsl/previous-compilation-data.bin
new file mode 100644
index 0000000..b8ca112
Binary files /dev/null and b/build/tmp/compileQuerydsl/previous-compilation-data.bin differ
diff --git a/firebase.json b/firebase.json
new file mode 100644
index 0000000..e70bd49
--- /dev/null
+++ b/firebase.json
@@ -0,0 +1,12 @@
+{
+ "type": "service_account",
+ "project_id": "bebeshare-image",
+ "private_key_id": "ed1c006cd0cbe5095891fa824fc535c9db14968b",
+ "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCRRqywE82VCnu/\nheWiZQajC2DBhqyAiNvXqo2djzsZD+mjoIIXIxZZPrC7EjT0saoa+23T+449r2DM\nlHDQxqGK+PRCp0/BfaN8Dn+G87ykq+7b8NfQgB/kkQH/IAiuWaQNGxSPloJjZUBc\nllT0g9DK3hIWrCTclTehaymrlpXTatUXtAKq1jSe0M4rG4ksedgZ281yemDuogBN\nAi0lgLHuZu9THxfTtpYDmuDFf0x3kQaal2Qvb0tkZNKymUNjXXVpwGpv5gZQ3KNZ\nfLudgYM3I5vYZariNYLDM5IvqITjHQEN929l0EQLfEo4IYqWXcljc6CgXtPwImSj\nLkXiZW+lAgMBAAECggEAAI6gKZS0hyEhKbIzwpRXRYIiVDEAsbAqAlZkcKQ/T8X1\n2Wt2KZc4MLjC02orIH0bRTs4R/CBB8+HtCvQOvISuzEKjsQ21BZ37V6I3VWgoD5g\njiC1qIEKnkUdbYML8CSRMn5WF9mLP80ARYVLZ3H8olUzsI6RyElyNdZECfpr3Kxc\nu1YMLgXnV3neuec6eqDt/v9QNN8Q76dvdEagINI6Ixxnq+IxY1MBq4loUFKRYhDu\nThd65IEp8eZHftMU08R1Pg3mbR8Yj1cyGYRKYppzMDmHO19y+sS+fju4GgI0kxGR\nAgUDiiKHPIO/t7lHE6x4xzLc5oy9pnI0xlxOZnmxSQKBgQDG0yBGDmBEtg8cLA/o\nybg1nUEqGM1ALqkrS6QGqCE2ybIiAI2KlFlNJJyMbJPKqU0Lv8QTRhy5gR+q+jyo\n53tYjmsDqdgI8H0yCwRkaGGVD6nhRUNeGUGFB/uq1ogRqvIt9wHS0jtzdDYMD1gl\ntgsADCZQ+h1WjiV14TC4XANkmwKBgQC7DXWsPf0I/JKim/N4d7rjEgSzdZQzB5KG\nh7zOGTECRL+MhPTBWMQqcJHVpBMxCFf5IlgV2aWidbcsBzj4AbREZg2cvFsL3uyT\nNk5W+eBP7bSuHPcpQL8ZQXP/ZFucs5wlrQGauje/O0ddQOXHDD30dN3YvFm7UzID\nOx4NEX4gvwKBgHbGg342cl454Lb0v6BSeWBWDCrI3DzeYyNBMcDkSctAHNFhQS0r\nSFnkaD0fU/76utMtAUZ+WQSc1b0/dmN0veP+WIG8whk9CZ2OpVYSYVE6JUM1LHSX\nY+PEDB1XwbvEQp8g847tFqT3JJ55wC/vG40wtOclM8eUbV6JY6CPH1vHAoGAYSwm\n22oAj7CWhL87hnO8tMXhh1EnwjLG3fiaDv9rRGBumhNgCymQDvQX7sKj7a8F9Ljw\nxbkhoPpCRC8kW0KXYYkavTfknJAcmoV1wR1ieGNmn6UQiW/HVtl35089gHSWQ8RS\ntwzSdRfYhQt30yX68YnczgFbJEOeEaueeu+BdIUCgYEAqOkw+vnNSWXTSQb+Uzrl\nTEn8Af0Dc3tavt8FZG05HmGclU/LVFVMZdsSDd1pUxHPgBEyp1Q2NTq4T9t8vr8K\njHDe5sibUEHlT0E0ZBe0FKcDm6M/tFBzzc01fxHJ+6OZgC+bJgXVC1zcnSrEHhiU\nGlJcjN1SRAc7NNFkwxApTSk=\n-----END PRIVATE KEY-----\n",
+ "client_email": "firebase-adminsdk-n7s06@bebeshare-image.iam.gserviceaccount.com",
+ "client_id": "116660085712625798330",
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://oauth2.googleapis.com/token",
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-n7s06%40bebeshare-image.iam.gserviceaccount.com"
+}
diff --git a/src/main/java/bebeShare/Application.java b/src/main/java/bebeShare/Application.java
index 1cdbc1a..4122207 100644
--- a/src/main/java/bebeShare/Application.java
+++ b/src/main/java/bebeShare/Application.java
@@ -1,7 +1,11 @@
package bebeShare;
+import org.apache.catalina.connector.Connector;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.ResourceBundleMessageSource;
@@ -25,4 +29,16 @@ public MessageSource messageSource() {
return MS;
}
+ @Bean
+ public ConfigurableServletWebServerFactory webServerFactory() {
+ TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+ factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
+ @Override
+ public void customize(Connector connector) {
+ connector.setProperty("relaxedQueryChars", "|{}[]");
+ }
+ });
+ return factory;
+ }
+
}
diff --git a/src/main/java/bebeShare/config/auth/SecurityConfig.java b/src/main/java/bebeShare/config/auth/SecurityConfig.java
index f73cc14..de0afd9 100644
--- a/src/main/java/bebeShare/config/auth/SecurityConfig.java
+++ b/src/main/java/bebeShare/config/auth/SecurityConfig.java
@@ -23,7 +23,7 @@ protected void configure(HttpSecurity http) throws Exception {
.headers().frameOptions().disable()
.and()
.authorizeRequests()
- .antMatchers("/", "/css/**", "/images/**", "/js/**", "/h2-console/**", "/profiles").permitAll()
+ .antMatchers("/","/api/v1/categories","/api/v1/products","/resources/**","/static/**", "/css/**", "/images/**", "/js/**", "/h2-console/**", "/profiles","/products/images/**").permitAll()
.antMatchers("/api/v1/**").hasRole(Role.USER.name())
.anyRequest().authenticated()
.and()
diff --git a/src/main/java/bebeShare/config/auth/dto/SessionUser.java b/src/main/java/bebeShare/config/auth/dto/SessionUser.java
index b3a1e44..65686d0 100644
--- a/src/main/java/bebeShare/config/auth/dto/SessionUser.java
+++ b/src/main/java/bebeShare/config/auth/dto/SessionUser.java
@@ -10,7 +10,7 @@
@ToString
@Getter
@RequiredArgsConstructor
-public class SessionUser implements Serializable {
+public class SessionUser extends User implements Serializable {
private Long id;
private String name;
diff --git a/src/main/java/bebeShare/config/chat/ChatConfig.java b/src/main/java/bebeShare/config/chat/ChatConfig.java
new file mode 100644
index 0000000..74abb9b
--- /dev/null
+++ b/src/main/java/bebeShare/config/chat/ChatConfig.java
@@ -0,0 +1,25 @@
+package bebeShare.config.chat;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+@Configuration
+@EnableWebSocketMessageBroker
+public class ChatConfig implements WebSocketMessageBrokerConfigurer {
+
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry.addEndpoint("/ws/chat").setAllowedOriginPatterns("*").withSockJS();
+ }
+
+ @Override
+ public void configureMessageBroker(MessageBrokerRegistry registry) {
+
+ registry.enableSimpleBroker("/queue", "/topic");
+
+ registry.setApplicationDestinationPrefixes("/app");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/config/firebase/FirebaseConfig.java b/src/main/java/bebeShare/config/firebase/FirebaseConfig.java
new file mode 100644
index 0000000..4b1b292
--- /dev/null
+++ b/src/main/java/bebeShare/config/firebase/FirebaseConfig.java
@@ -0,0 +1,39 @@
+package bebeShare.config.firebase;
+
+import com.google.auth.oauth2.GoogleCredentials;
+import com.google.cloud.storage.Bucket;
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.FirebaseOptions;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.cloud.StorageClient;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+import java.io.FileInputStream;
+import java.io.IOException;
+
+@Configuration
+@Slf4j
+public class FirebaseConfig {
+ @Bean
+ public FirebaseApp firebaseApp() throws IOException{
+ log.info("Initializing Firebase.");
+ FileInputStream serviceAccount = new FileInputStream("firebase.json");
+
+ FirebaseOptions options = new FirebaseOptions.Builder()
+ .setCredentials(GoogleCredentials.fromStream(serviceAccount))
+ .setStorageBucket("bebeshare-image.appspot.com")
+ .build();
+
+ FirebaseApp app = FirebaseApp.initializeApp(options);
+ log.info("FirebaseApp initialized" + app.getName());
+ return app;
+ }
+
+ @Bean
+ public Bucket bucket() throws IOException{
+ return StorageClient.getInstance(firebaseApp()).bucket();
+ }
+}
diff --git a/src/main/java/bebeShare/config/redis/RedisConfig.java b/src/main/java/bebeShare/config/redis/RedisConfig.java
index f10892c..5390218 100644
--- a/src/main/java/bebeShare/config/redis/RedisConfig.java
+++ b/src/main/java/bebeShare/config/redis/RedisConfig.java
@@ -1,10 +1,10 @@
package bebeShare.config.redis;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.session.data.redis.config.ConfigureRedisAction;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
@@ -14,16 +14,19 @@
@RequiredArgsConstructor
public class RedisConfig extends AbstractHttpSessionApplicationInitializer {
- @Value("${spring.redis.host}")
- private String host;
-
- @Value("${spring.redis.port}")
- private Integer port;
-
+ @Bean
+ public LettuceClientConfigurationBuilderCustomizer lettuceClientConfigurationBuilderCustomizer() {
+ return clientConfigurationBuilder -> {
+ if (clientConfigurationBuilder.build().isUseSsl()) {
+ clientConfigurationBuilder.useSsl().disablePeerVerification();
+ }
+ };
+ }
@Bean
- public LettuceConnectionFactory connectionFactory() {
- return new LettuceConnectionFactory(host, port); // ip, port
+ public static ConfigureRedisAction configureRedisAction() {
+ return ConfigureRedisAction.NO_OP;
}
+
}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/domain/chat/ChatMessage.java b/src/main/java/bebeShare/domain/chat/ChatMessage.java
new file mode 100644
index 0000000..bb4262d
--- /dev/null
+++ b/src/main/java/bebeShare/domain/chat/ChatMessage.java
@@ -0,0 +1,24 @@
+package bebeShare.domain.chat;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChatMessage {
+
+ public enum MessageType {
+ ENTER, TALK
+ }
+
+ private MessageType type;
+ //채팅방 ID
+ private String roomId;
+ //보내는 사람
+ private String sender;
+ //내용
+ private String message;
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/domain/chat/ChatRoom.java b/src/main/java/bebeShare/domain/chat/ChatRoom.java
new file mode 100644
index 0000000..8442bf6
--- /dev/null
+++ b/src/main/java/bebeShare/domain/chat/ChatRoom.java
@@ -0,0 +1,22 @@
+package bebeShare.domain.chat;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.UUID;
+
+@Data
+@NoArgsConstructor
+public class ChatRoom {
+
+ private String roomId;
+ private String roomName;
+
+
+ public static ChatRoom create(String name) {
+ ChatRoom room = new ChatRoom();
+ room.roomId = UUID.randomUUID().toString();
+ room.roomName = name;
+ return room;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/domain/chat/controller/ChatRoomController.java b/src/main/java/bebeShare/domain/chat/controller/ChatRoomController.java
new file mode 100644
index 0000000..fe019ba
--- /dev/null
+++ b/src/main/java/bebeShare/domain/chat/controller/ChatRoomController.java
@@ -0,0 +1,48 @@
+package bebeShare.domain.chat.controller;
+
+import bebeShare.domain.chat.ChatRoom;
+import bebeShare.domain.chat.service.ChatService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@RequiredArgsConstructor
+@RequestMapping("/chat")
+public class ChatRoomController {
+ private final ChatService chatService;
+
+ // 채팅 리스트 화면
+ @GetMapping("/room")
+ public String rooms(Model model) {
+ return "/chat/room";
+ }
+ // 모든 채팅방 목록 반환
+ @GetMapping("/rooms")
+ @ResponseBody
+ public List room() {
+ return chatService.findAllRoom();
+ }
+
+ // 채팅방 생성
+ @PostMapping("/room")
+ @ResponseBody
+ public ChatRoom createRoom(@RequestParam String name) {
+ return chatService.createRoom(name);
+ }
+ // 채팅방 입장 화면
+ @GetMapping("/room/enter/{roomId}")
+ public String roomDetail(Model model, @PathVariable String roomId) {
+ model.addAttribute("roomId", roomId);
+ return "/chat/roomdetail";
+ }
+ // 특정 채팅방 조회
+ @GetMapping("/room/{roomId}")
+ @ResponseBody
+ public ChatRoom roomInfo(@PathVariable String roomId) {
+ return chatService.findById(roomId);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/domain/chat/controller/MessageController.java b/src/main/java/bebeShare/domain/chat/controller/MessageController.java
new file mode 100644
index 0000000..52bea51
--- /dev/null
+++ b/src/main/java/bebeShare/domain/chat/controller/MessageController.java
@@ -0,0 +1,22 @@
+package bebeShare.domain.chat.controller;
+
+import bebeShare.domain.chat.ChatMessage;
+import lombok.RequiredArgsConstructor;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.simp.SimpMessageSendingOperations;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequiredArgsConstructor
+public class MessageController {
+
+ private final SimpMessageSendingOperations sendingOperations;
+
+ @MessageMapping("/chat/message")
+ public void enter(ChatMessage message) {
+ if (ChatMessage.MessageType.ENTER.equals(message.getType())) {
+ message.setMessage(message.getSender()+"님이 입장하였습니다.");
+ }
+ sendingOperations.convertAndSend("/topic/chat/room/"+message.getRoomId(),message);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/domain/chat/service/ChatService.java b/src/main/java/bebeShare/domain/chat/service/ChatService.java
new file mode 100644
index 0000000..059b84d
--- /dev/null
+++ b/src/main/java/bebeShare/domain/chat/service/ChatService.java
@@ -0,0 +1,44 @@
+package bebeShare.domain.chat.service;
+
+import bebeShare.domain.chat.ChatRoom;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class ChatService {
+
+ private Map chatRooms;
+
+ @PostConstruct
+ //의존관게 주입완료되면 실행되는 코드
+ private void init() {
+ chatRooms = new LinkedHashMap<>();
+ }
+
+ //채팅방 불러오기
+ public List findAllRoom() {
+ //채팅방 최근 생성 순으로 반환
+ List result = new ArrayList<>(chatRooms.values());
+ Collections.reverse(result);
+
+ return result;
+ }
+
+ //채팅방 하나 불러오기
+ public ChatRoom findById(String roomId) {
+ return chatRooms.get(roomId);
+ }
+
+ //채팅방 생성
+ public ChatRoom createRoom(String name) {
+ ChatRoom chatRoom = ChatRoom.create(name);
+ chatRooms.put(chatRoom.getRoomId(), chatRoom);
+ return chatRoom;
+ }
+}
diff --git a/src/main/java/bebeShare/domain/code/Code.java b/src/main/java/bebeShare/domain/code/Code.java
index ac1e8e5..74cb076 100644
--- a/src/main/java/bebeShare/domain/code/Code.java
+++ b/src/main/java/bebeShare/domain/code/Code.java
@@ -24,8 +24,7 @@ public class Code extends BaseEntity {
private String useYn;
@Builder
- public Code(Long id, String code, String codeName, String useYn) {
- this.id = id;
+ public Code(String code, String codeName, String useYn) {
this.code = code;
this.codeName = codeName;
this.useYn = useYn;
diff --git a/src/main/java/bebeShare/domain/code/CodeRepository.java b/src/main/java/bebeShare/domain/code/CodeRepository.java
index b291056..63679c4 100644
--- a/src/main/java/bebeShare/domain/code/CodeRepository.java
+++ b/src/main/java/bebeShare/domain/code/CodeRepository.java
@@ -11,4 +11,7 @@ public interface CodeRepository extends JpaRepository {
@Query("select new bebeShare.web.dto.codeDto.CodeResponseDto(c) from Code c where c.code = :code")
List lookup(@Param("code") String code);
+
+
+ List findByCode(@Param("code") String code);
}
diff --git a/src/main/java/bebeShare/domain/comment/Comment.java b/src/main/java/bebeShare/domain/comment/Comment.java
index a78b665..985dbb5 100644
--- a/src/main/java/bebeShare/domain/comment/Comment.java
+++ b/src/main/java/bebeShare/domain/comment/Comment.java
@@ -50,15 +50,13 @@ public Comment(User user , Product product ,String commentContent ,String delete
this.commentStatus = commentStatus;
}
- public void update(Long id, CommentUpdateRequestsDto c) {
- this.id = id;
- this.product = c.getProduct();
- this.user = c.getUser();
+ public void update(CommentUpdateRequestsDto c) {
+ this.id = c.getCommentId();
this.commentContent = c.getCommentContent();
this.deleteYn = c.getDeleteYn();
this.commentStatus = c.getCommentStatus();
}
- public void delete(CommentDeleteRequestDto c){
- this.deleteYn = c.getDeleteYn();
+ public void delete(){
+ this.deleteYn = "Y";
}
}
diff --git a/src/main/java/bebeShare/domain/comment/CommentRepository.java b/src/main/java/bebeShare/domain/comment/CommentRepository.java
index 44df4ea..f571732 100644
--- a/src/main/java/bebeShare/domain/comment/CommentRepository.java
+++ b/src/main/java/bebeShare/domain/comment/CommentRepository.java
@@ -1,9 +1,11 @@
package bebeShare.domain.comment;
+import bebeShare.web.dto.commentDto.CommentUpdateRequestsDto;
+import bebeShare.web.dto.commentDto.CommentUpdateResponseDto;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
-public interface CommentRepository extends JpaRepository {
-
+public interface CommentRepository extends JpaRepository , CommentRepositoryCustom,QuerydslPredicateExecutor {
}
diff --git a/src/main/java/bebeShare/domain/comment/CommentRepositoryCustom.java b/src/main/java/bebeShare/domain/comment/CommentRepositoryCustom.java
new file mode 100644
index 0000000..af158f6
--- /dev/null
+++ b/src/main/java/bebeShare/domain/comment/CommentRepositoryCustom.java
@@ -0,0 +1,17 @@
+package bebeShare.domain.comment;
+
+import bebeShare.web.dto.commentDto.CommentInfoResponseDto;
+import bebeShare.web.dto.commentDto.CommentUpdateRequestsDto;
+import bebeShare.web.dto.commentDto.CommentUpdateResponseDto;
+import bebeShare.web.dto.commentDto.CommentsRequest;
+import bebeShare.web.dto.productDto.RejectShareRequest;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+public interface CommentRepositoryCustom {
+
+ Page findByProductId(CommentsRequest commentsRequest, Pageable pageable);
+
+ Long updateByCommentId(CommentUpdateRequestsDto updateRequestsDto);
+
+}
diff --git a/src/main/java/bebeShare/domain/comment/CommentRepositoryImpl.java b/src/main/java/bebeShare/domain/comment/CommentRepositoryImpl.java
new file mode 100644
index 0000000..fa0aea6
--- /dev/null
+++ b/src/main/java/bebeShare/domain/comment/CommentRepositoryImpl.java
@@ -0,0 +1,77 @@
+package bebeShare.domain.comment;
+
+import bebeShare.web.dto.commentDto.*;
+import bebeShare.web.dto.productDto.RejectShareRequest;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.support.PageableExecutionUtils;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+
+import static bebeShare.domain.comment.QComment.comment;
+import static bebeShare.domain.product.QProduct.product;
+
+
+public class CommentRepositoryImpl implements CommentRepositoryCustom {
+
+ private final JPAQueryFactory queryFactory;
+
+ public CommentRepositoryImpl(EntityManager em) {
+ this.queryFactory = new JPAQueryFactory(em);
+ }
+
+
+ @Override
+ public Page findByProductId(CommentsRequest commentsRequest, Pageable pageable) {
+
+
+ List result = queryFactory
+ .select(new QCommentInfoResponseDto(
+ comment.id,
+ comment.commentContent,
+ comment.deleteYn,
+ comment.commentStatus,
+ comment.user.picture,
+ comment.user.id,
+ comment.product.shareId,
+ comment.createdDate.as("insertDt")
+ ))
+ .from(comment)
+ .where(
+ commentProductIdEq(commentsRequest.getProductId()),
+ comment.deleteYn.eq("N")
+ )
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
+ .orderBy(comment.createdDate.asc())
+ .fetch();
+
+
+ JPAQuery countQuery = queryFactory.select(comment)
+ .from(comment)
+ .where(
+ commentProductIdEq(commentsRequest.getProductId())
+ );
+
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
+
+ }
+
+ @Override
+ public Long updateByCommentId(CommentUpdateRequestsDto updateRequestsDto) {
+ return queryFactory
+ .update(comment)
+ .set(comment.commentContent,updateRequestsDto.getCommentContent())
+ .where(comment.id.eq(updateRequestsDto.getCommentId()))
+ .execute();
+
+ }
+
+ private BooleanExpression commentProductIdEq(Long proudctId) {
+ return proudctId == null ? comment.product.id.isNull() : comment.product.id.eq(proudctId);
+ }
+}
diff --git a/src/main/java/bebeShare/domain/common/CommonContants.java b/src/main/java/bebeShare/domain/common/CommonContants.java
index 705d72d..a5c2723 100644
--- a/src/main/java/bebeShare/domain/common/CommonContants.java
+++ b/src/main/java/bebeShare/domain/common/CommonContants.java
@@ -4,5 +4,6 @@ public class CommonContants {
public static final String COMMENT_SAVE_OK = "댓글 등록 성공";
public static final String COMMENT_UPDATE_OK = "댓글 수정 성공";
+ public static final String COMMENT_UPDATE_FAIL = "댓글 수정 실패";
public static final String COMMENT_DELETE_OK = "댓글 삭제 성공";
}
diff --git a/src/main/java/bebeShare/domain/common/entity/PageEntity.java b/src/main/java/bebeShare/domain/common/entity/PageEntity.java
index 68707b0..4762d54 100644
--- a/src/main/java/bebeShare/domain/common/entity/PageEntity.java
+++ b/src/main/java/bebeShare/domain/common/entity/PageEntity.java
@@ -1,12 +1,10 @@
package bebeShare.domain.common.entity;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
-@Getter
-@Setter
+@Data
public class PageEntity {
- private int page;
- private int size;
+ private int page = 0;
+ private int size = 9;
}
diff --git a/src/main/java/bebeShare/domain/like/Dibs.java b/src/main/java/bebeShare/domain/like/Dibs.java
index b51dc50..6fcf676 100644
--- a/src/main/java/bebeShare/domain/like/Dibs.java
+++ b/src/main/java/bebeShare/domain/like/Dibs.java
@@ -4,13 +4,16 @@
import bebeShare.BaseEntity;
import bebeShare.domain.product.Product;
import bebeShare.domain.user.User;
+import bebeShare.web.dto.likeDto.SaveLikeDto;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
+import lombok.Setter;
import javax.persistence.*;
@Getter
+@Setter
@NoArgsConstructor
@Entity
public class Dibs extends BaseEntity {
@@ -36,7 +39,8 @@ public Dibs(User user , Product product) {
this.product = product;
}
- public void addUserAndProduct(User user , Product product){
+
+ public void addLike(SaveLikeDto saveLikeDto) {
this.user = user;
this.product = product;
}
diff --git a/src/main/java/bebeShare/domain/product/Product.java b/src/main/java/bebeShare/domain/product/Product.java
index f9a0443..bd6da37 100644
--- a/src/main/java/bebeShare/domain/product/Product.java
+++ b/src/main/java/bebeShare/domain/product/Product.java
@@ -2,14 +2,17 @@
import bebeShare.BaseEntity;
+import bebeShare.domain.like.Dibs;
import bebeShare.domain.user.User;
import bebeShare.web.dto.productDto.ProductCreateRequestDto;
import bebeShare.web.dto.productDto.ProductDeleteDto;
import lombok.*;
import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
-@ToString(of = {"id", "productName", "productContent", "productImage1", "productImage2", "productImage3", "productStatus", "productCategory", "deleteYn"})
+@ToString
@Getter
@NoArgsConstructor
@Table(name = "Product")
@@ -23,11 +26,16 @@ public class Product extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "memberId")
+ @ToString.Exclude
private User user;
+ @OneToMany(mappedBy = "product")
+ @ToString.Exclude
+ private List dibs = new ArrayList<>();
+
+
private String productName;
-
private String productContent;
private String productImage1;
@@ -44,9 +52,18 @@ public class Product extends BaseEntity {
private Long shareId;
+ public void setDibs(List dibs) {
+ this.dibs = dibs;
+ }
+
+ public void setUser(User user) {
+ this.user = user;
+ }
+
@Builder
- public Product(User user, String productName, String productContent,String productImage1, String productImage2, String productImage3, String productStatus, String productCategory ,String deleteYn
+ public Product(User user, String productName, String productContent,String productImage1,
+ String productImage2, String productImage3, String productStatus, String productCategory ,String deleteYn
,Long shareId) {
this.user = user;
@@ -59,7 +76,6 @@ public Product(User user, String productName, String productContent,String produ
this.productCategory = productCategory;
this.deleteYn = deleteYn;
this.shareId = shareId;
-
}
public void addUser(User user){
@@ -72,9 +88,6 @@ public void update(ProductCreateRequestDto pro) {
this.user = pro.getUser();
this.productName = pro.getProductName();
this.productContent = pro.getProductContent();
- this.productImage2 = pro.getProductImage2();
- this.productImage3 = pro.getProductImage3();
- this.productImage1 = pro.getProductImage1();
this.productStatus = pro.getProductStatus();
this.productCategory = pro.getProductCategory();
}
diff --git a/src/main/java/bebeShare/domain/product/ProductRepository.java b/src/main/java/bebeShare/domain/product/ProductRepository.java
index 7a2b7be..5cff93b 100644
--- a/src/main/java/bebeShare/domain/product/ProductRepository.java
+++ b/src/main/java/bebeShare/domain/product/ProductRepository.java
@@ -1,10 +1,12 @@
package bebeShare.domain.product;
+import bebeShare.domain.user.User;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import java.util.Optional;
-public interface ProductRepository extends JpaRepository {
+public interface ProductRepository extends JpaRepository, ProductRepositoryCustom, QuerydslPredicateExecutor {
Optional findById(Long id);
}
diff --git a/src/main/java/bebeShare/domain/product/ProductRepositoryCustom.java b/src/main/java/bebeShare/domain/product/ProductRepositoryCustom.java
new file mode 100644
index 0000000..f2e0c9d
--- /dev/null
+++ b/src/main/java/bebeShare/domain/product/ProductRepositoryCustom.java
@@ -0,0 +1,18 @@
+package bebeShare.domain.product;
+
+import bebeShare.web.dto.productDto.ApproveShareProductRequest;
+import bebeShare.web.dto.productDto.*;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+public interface ProductRepositoryCustom {
+ Page findAllProducts(ProductRequest productRequest, Pageable pageable);
+
+ Long approveShare(ApproveShareProductRequest approveShareProductRequest);
+
+ Long completeShare(CompleteShareRequest completeShareRequest);
+
+ Long rejectShare(RejectShareRequest rejectShareRequest);
+
+ Long updateProductDetail(ProductCreateRequestDto productCreateRequestDto);
+}
diff --git a/src/main/java/bebeShare/domain/product/ProductRepositoryImpl.java b/src/main/java/bebeShare/domain/product/ProductRepositoryImpl.java
new file mode 100644
index 0000000..2f1064b
--- /dev/null
+++ b/src/main/java/bebeShare/domain/product/ProductRepositoryImpl.java
@@ -0,0 +1,120 @@
+package bebeShare.domain.product;
+
+import bebeShare.web.dto.productDto.*;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.support.PageableExecutionUtils;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+
+import static bebeShare.domain.like.QDibs.dibs;
+import static bebeShare.domain.product.QProduct.product;
+import static org.springframework.util.StringUtils.hasText;
+
+public class ProductRepositoryImpl implements ProductRepositoryCustom {
+
+ private final JPAQueryFactory queryFactory;
+
+ public ProductRepositoryImpl(EntityManager em) {
+ this.queryFactory = new JPAQueryFactory(em);
+ }
+
+ @Override
+ public Page findAllProducts(ProductRequest productRequest, Pageable pageable) {
+
+ List result = queryFactory
+ .select(new QProductInfoResponseDto(
+ product.id,
+ product.productName,
+ product.productImage1,
+ dibs.Id,
+ product.createdDate.as("insertDt")
+ ))
+ .from(product)
+ .leftJoin(product.dibs, dibs)
+ .where(
+ productNameEq(productRequest.getProductName()),
+ productCategoryEq(productRequest.getCategoryCode()),
+ productStatusEq(productRequest.getProductStatus()),
+ product.deleteYn.eq("N")
+ )
+ .orderBy(product.createdDate.desc())
+ .orderBy(product.createdDate.asc())
+ .from(product)
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
+ .fetch();
+
+ JPAQuery countQuery = queryFactory.select(product)
+ .from(product)
+ .leftJoin(product.dibs, dibs)
+ .where(
+ productNameEq(productRequest.getProductName()),
+ productCategoryEq(productRequest.getCategoryCode()),
+ productStatusEq(productRequest.getProductStatus())
+ );
+
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
+ }
+
+ @Override
+ public Long approveShare(ApproveShareProductRequest approveShareProductRequest) {
+ return queryFactory
+ .update(product)
+ .set(product.shareId,approveShareProductRequest.getShareId())
+ .set(product.productStatus,"I")
+ .where(product.id.eq(approveShareProductRequest.getProductId()))
+ .execute();
+ }
+
+ @Override
+ public Long completeShare(CompleteShareRequest completeShareRequest) {
+ return queryFactory
+ .update(product)
+ .set(product.productStatus,"C")
+ .where(product.id.eq(completeShareRequest.getProductId()))
+ .execute();
+ }
+
+ @Override
+ public Long rejectShare(RejectShareRequest rejectShareRequest) {
+ return queryFactory
+ .update(product)
+ .set(product.productStatus,"N")
+ .set(product.shareId, 0L)
+ .where(product.id.eq(rejectShareRequest.getProductId()))
+ .execute();
+ }
+
+ @Override
+ public Long updateProductDetail(ProductCreateRequestDto productCreateRequestDto) {
+ return queryFactory
+ .update(product)
+ .set(product.productName , productCreateRequestDto.getProductName())
+ .set(product.productContent, productCreateRequestDto.getProductContent())
+ .set(product.productCategory, productCreateRequestDto.getProductCategory())
+ .where(product.id.eq(productCreateRequestDto.getProductId()))
+ .execute();
+ }
+
+
+ private BooleanExpression productCategoryEq(String categoryCode) {
+ return hasText(categoryCode) ? product.productCategory.eq(categoryCode) : null;
+ }
+
+ private BooleanExpression productNameEq(String productName) {
+ return hasText(productName) ? product.productName.eq(productName) : null;
+ }
+
+ private BooleanExpression productStatusEq(String productStatus) {
+ return hasText(productStatus) ? product.productStatus.eq(productStatus) : null;
+ }
+
+ private BooleanExpression productMemberIdEq(Long id) {
+ return id == null ? product.user.id.isNull() : product.user.id.eq(id);
+ }
+}
diff --git a/src/main/java/bebeShare/domain/user/User.java b/src/main/java/bebeShare/domain/user/User.java
index 058b780..77d2acc 100644
--- a/src/main/java/bebeShare/domain/user/User.java
+++ b/src/main/java/bebeShare/domain/user/User.java
@@ -1,5 +1,6 @@
package bebeShare.domain.user;
+import antlr.build.ANTLR;
import bebeShare.BaseEntity;
import bebeShare.domain.product.Product;
import lombok.Builder;
@@ -38,6 +39,7 @@ public class User extends BaseEntity {
private Role role;
@OneToMany(mappedBy = "user")
+ @ToString.Exclude
private List products = new ArrayList<>();
@@ -45,6 +47,10 @@ public class User extends BaseEntity {
private Integer giveCnt;
private Integer shareChanceCnt;
+ public void setProducts(List products) {
+ this.products = products;
+ }
+
@Builder
public User(String name, String email, String picture, Role role) {
diff --git a/src/main/java/bebeShare/domain/user/UserRepositoryCustom.java b/src/main/java/bebeShare/domain/user/UserRepositoryCustom.java
index ed20d29..9f65834 100644
--- a/src/main/java/bebeShare/domain/user/UserRepositoryCustom.java
+++ b/src/main/java/bebeShare/domain/user/UserRepositoryCustom.java
@@ -1,18 +1,28 @@
package bebeShare.domain.user;
-import bebeShare.web.dto.userDto.*;
+
+import bebeShare.web.dto.userDto.dto.GiveInfoResponseDto;
+import bebeShare.web.dto.userDto.dto.LikeInfoResponseDto;
+import bebeShare.web.dto.userDto.dto.MemberCommentResponseDto;
+import bebeShare.web.dto.userDto.dto.ShareInfoResponseDto;
+import bebeShare.web.dto.userDto.req.CommentRequest;
+import bebeShare.web.dto.userDto.req.GiveRequest;
+import bebeShare.web.dto.userDto.req.LikeRequest;
+import bebeShare.web.dto.userDto.req.ShareRequest;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import java.util.List;
public interface UserRepositoryCustom {
- List shareInfo(UserRequest userRequest);
+ Page shareInfo(ShareRequest shareRequest, Pageable pageable);
- List giveInfo(UserRequest conduserRequestition);
+ Page giveInfo(GiveRequest giveRequest, Pageable pageable);
- List likeInfo(UserRequest userRequest );
+ Page likeInfo(LikeRequest likeRequest, Pageable pageable);
- List comments(UserRequest condition );
+ Page comments(CommentRequest commentRequest, Pageable pageable);
}
diff --git a/src/main/java/bebeShare/domain/user/UserRepositoryImpl.java b/src/main/java/bebeShare/domain/user/UserRepositoryImpl.java
index afeb922..996d3de 100644
--- a/src/main/java/bebeShare/domain/user/UserRepositoryImpl.java
+++ b/src/main/java/bebeShare/domain/user/UserRepositoryImpl.java
@@ -1,8 +1,17 @@
package bebeShare.domain.user;
-import bebeShare.web.dto.userDto.*;
+import bebeShare.domain.product.Product;
+import bebeShare.web.dto.userDto.dto.*;
+import bebeShare.web.dto.userDto.req.CommentRequest;
+import bebeShare.web.dto.userDto.req.GiveRequest;
+import bebeShare.web.dto.userDto.req.LikeRequest;
+import bebeShare.web.dto.userDto.req.ShareRequest;
import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.support.PageableExecutionUtils;
import javax.persistence.EntityManager;
import java.util.List;
@@ -11,6 +20,7 @@
import static bebeShare.domain.like.QDibs.dibs;
import static bebeShare.domain.product.QProduct.product;
import static bebeShare.domain.user.QUser.user;
+import static org.springframework.util.StringUtils.hasText;
public class UserRepositoryImpl implements UserRepositoryCustom {
@@ -23,10 +33,10 @@ public UserRepositoryImpl(EntityManager em) {
@Override
- public List shareInfo(UserRequest userRequest) {
+ public Page shareInfo(ShareRequest shareRequest, Pageable pageable) {
- return queryFactory //join 에서 양쪽 테이블 프로젝션을 가져오기때문에 MemberTeamDto를 따로빼서 원하는 값을 가져오게함, 셀렉트방식은 생성자로
+ List result = queryFactory
.select(new QShareInfoResponseDto(
product.id,
product.productName,
@@ -35,19 +45,30 @@ public List shareInfo(UserRequest userRequest) {
))
.from(product)
.where(
- productMemberIdEq(userRequest.getMemberId()),
- productStatus(userRequest.getProductStatus())
+ productMemberIdEq(shareRequest.getMemberId()),
+ productStatus(shareRequest.getProductStatus())
)
- .offset(userRequest.getPage())
- .limit(userRequest.getSize())
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
.orderBy(product.createdDate.desc())
.fetch();
+
+
+ JPAQuery countQuery = queryFactory.select(product)
+ .from(product)
+ .where(
+ productMemberIdEq(shareRequest.getMemberId()),
+ productStatus(shareRequest.getProductStatus())
+ );
+
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
+
}
@Override
- public List giveInfo(UserRequest userRequest) {
- return queryFactory
+ public Page giveInfo(GiveRequest giveRequest, Pageable pageable) {
+ List result = queryFactory
.select(new QGiveInfoResponseDto(
product.id,
product.productName,
@@ -57,59 +78,99 @@ public List giveInfo(UserRequest userRequest) {
))
.from(product)
.where(
- productMemberIdEq(userRequest.getMemberId()),
- productStatus(userRequest.getProductStatus())
+ productShareIdEq(giveRequest.getShareId()),
+ productStatus(giveRequest.getProductStatus())
)
- .offset(userRequest.getPage())
- .limit(userRequest.getSize())
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
.orderBy(product.createdDate.desc())
.fetch();
+
+ JPAQuery countQuery = queryFactory.select(product)
+ .from(product)
+ .where(
+ productShareIdEq(giveRequest.getShareId()),
+ productStatus(giveRequest.getProductStatus())
+ );
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
+
}
@Override
- public List likeInfo(UserRequest userRequest) {
+ public Page likeInfo(LikeRequest likeRequest, Pageable pageable) {
- return queryFactory
+ List result = queryFactory
.select(new QLikeInfoResponseDto(
product.id,
product.productName,
product.productImage1,
product.createdDate.as("insertDt")
)).from(dibs)
- .join(dibs.product , product)
- .join(dibs.user , user)
+ .join(dibs.product, product)
+ .join(dibs.user, user)
.where(
- memberIdEq(userRequest.getMemberId())
+ likeIdEq(likeRequest.getMemberId())
)
- .offset(userRequest.getPage())
- .limit(userRequest.getSize())
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
.fetch();
+
+ JPAQuery countQuery = queryFactory.select(product)
+ .from(dibs)
+ .join(dibs.product, product)
+ .join(dibs.user, user)
+ .where(
+ likeIdEq(likeRequest.getMemberId())
+ );
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
+
}
@Override
- public List comments(UserRequest userRequest) {
- return queryFactory
+ public Page comments(CommentRequest commentRequest, Pageable pageable) {
+ List result = queryFactory
.select(
new QMemberCommentResponseDto(
comment.id.as("commentId"),
product.productName,
comment.commentContent,
+ //product.productImage1,
comment.createdDate.as("insertDt")
)
).from(comment)
.join(comment.product, product)
.join(comment.user, user)
.where(
- memberIdEq(userRequest.getMemberId())
+ commentMeberIdEq(commentRequest.getMemberId())
)
- .offset(userRequest.getPage())
- .limit(userRequest.getSize())
+ .offset(pageable.getPageNumber())
+ .limit(pageable.getPageSize())
.fetch();
+
+ JPAQuery countQuery = queryFactory.select(product)
+ .from(comment)
+ .join(comment.product, product)
+ .join(comment.user, user)
+ .where(
+ commentMeberIdEq(commentRequest.getMemberId())
+ );
+ return PageableExecutionUtils.getPage(result, pageable, () -> countQuery.fetchCount());
}
+ private BooleanExpression commentMeberIdEq(Long memberId) {
+ return memberId == 0 ? comment.user.id.isNull() : comment.user.id.eq(memberId);
+ }
private BooleanExpression productMemberIdEq(long memberId) {
- return product.user.id.eq(memberId);
+ return memberId == 0 ? product.user.id.isNull() : product.user.id.eq(memberId);
+ }
+
+ private BooleanExpression productShareIdEq(long shareId) {
+ return shareId == 0 ? product.shareId.isNull() : product.shareId.eq(shareId);
+ }
+
+ private BooleanExpression likeIdEq(long likeId) {
+ return likeId == 0 ? dibs.user.id.isNull() : dibs.user.id.eq(likeId);
}
private BooleanExpression memberIdEq(long memberId) {
@@ -117,8 +178,6 @@ private BooleanExpression memberIdEq(long memberId) {
}
private BooleanExpression productStatus(String productStatus) {
- return productStatus != null ? product.productStatus.eq(productStatus) : null;
+ return hasText(productStatus) ? product.productStatus.eq(productStatus) : null;
}
-
-
}
diff --git a/src/main/java/bebeShare/exception/ErrorCode.java b/src/main/java/bebeShare/exception/ErrorCode.java
index ab839d6..02015f5 100644
--- a/src/main/java/bebeShare/exception/ErrorCode.java
+++ b/src/main/java/bebeShare/exception/ErrorCode.java
@@ -32,6 +32,8 @@ public enum ErrorCode {
POSTS_NOT_FOUND(HttpStatus.NOT_FOUND, "게시글 정보를 찾을 수 없습니다."),
USER_NOT_FOUND(HttpStatus.NOT_FOUND, "사용자 정보를 찾을 수 없습니다."),
COMMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "댓글 정보를 찾을 수 없습니다."),
+
+ IMAGE_UPLOAD_FAILED(HttpStatus.NOT_FOUND, "이미지 업로드를 실패하였습니다."),
;
private final HttpStatus status;
diff --git a/src/main/java/bebeShare/service/CategoryService.java b/src/main/java/bebeShare/service/CategoryService.java
index b9e8680..4305019 100644
--- a/src/main/java/bebeShare/service/CategoryService.java
+++ b/src/main/java/bebeShare/service/CategoryService.java
@@ -1,11 +1,13 @@
package bebeShare.service;
import bebeShare.domain.code.CodeRepository;
+import bebeShare.web.dto.category.CategoryReqeustDto;
import bebeShare.web.dto.codeDto.CodeResponseDto;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.stream.Collectors;
@Service
@AllArgsConstructor
@@ -13,7 +15,14 @@ public class CategoryService {
private final CodeRepository codeRepository;
public List lookup(String code){
- System.out.println("CategoryService.lookup");
return codeRepository.lookup(code);
}
+
+
+ public List findAll(){
+ return codeRepository.findAll()
+ .stream()
+ .map(CodeResponseDto::new)
+ .collect(Collectors.toList());
+ }
}
diff --git a/src/main/java/bebeShare/service/CommentsService.java b/src/main/java/bebeShare/service/CommentsService.java
index 29f0aa4..6ee42f8 100644
--- a/src/main/java/bebeShare/service/CommentsService.java
+++ b/src/main/java/bebeShare/service/CommentsService.java
@@ -10,6 +10,8 @@
import bebeShare.exception.ErrorCode;
import bebeShare.web.dto.commentDto.*;
import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -46,21 +48,31 @@ public List findAll() {
}
@Transactional
- public CommentUpdateResponseDto update(Long productId, Long commentId, CommentUpdateRequestsDto updateRequestsDto) {
- Comment entity = commentRepository.findById(commentId).orElseThrow(
+ public CommentUpdateResponseDto update(CommentUpdateRequestsDto updateRequestsDto) {
+ Comment entity = commentRepository.findById(updateRequestsDto.getCommentId()).orElseThrow(
() -> new CustomException(ErrorCode.INTERNAL_SERVER_ERROR)
);
- entity.update(commentId, updateRequestsDto);
- return new CommentUpdateResponseDto(productId);
+ entity.update(updateRequestsDto);
+ return new CommentUpdateResponseDto(updateRequestsDto.getCommentId());
}
@Transactional
- public CommentDeleteResponseDto delete(Long productId, Long commentId, CommentDeleteRequestDto params) {
- Comment entity = commentRepository.findById(commentId).orElseThrow(()
+ public CommentDeleteResponseDto delete(CommentDeleteRequestDto params) {
+ Comment entity = commentRepository.findById(params.getCommentId()).orElseThrow(()
-> new CustomException(ErrorCode.COMMENT_NOT_FOUND));
- entity.delete(params);
- return new CommentDeleteResponseDto(productId);
+ entity.delete();
+ return new CommentDeleteResponseDto(params.getCommentId());
}
+ public Page findByProductId(CommentsRequest commentsRequest, Pageable pageable) {
+ return commentRepository.findByProductId(commentsRequest, pageable);
+ }
+ @Transactional
+ public Long updateByCommentId(CommentUpdateRequestsDto updateRequestsDto) {
+ Comment entity = commentRepository.findById(updateRequestsDto.getCommentId()).orElseThrow(
+ () -> new CustomException(ErrorCode.INTERNAL_SERVER_ERROR)
+ );
+ return commentRepository.updateByCommentId(updateRequestsDto);
+ }
}
diff --git a/src/main/java/bebeShare/service/ImageService.java b/src/main/java/bebeShare/service/ImageService.java
new file mode 100644
index 0000000..1363081
--- /dev/null
+++ b/src/main/java/bebeShare/service/ImageService.java
@@ -0,0 +1,46 @@
+package bebeShare.service;
+
+import bebeShare.domain.user.User;
+import bebeShare.exception.CustomException;
+import bebeShare.exception.ErrorCode;
+import com.google.cloud.storage.Bucket;
+import com.google.firebase.cloud.StorageClient;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+import static bebeShare.domain.product.QProduct.product;
+import static java.util.Objects.hash;
+
+@Slf4j
+@Service
+public class ImageService {
+ @Autowired
+ private Bucket bucket;
+
+ public String createImage(byte[] image, User user){
+ //Image 저장 위치를 선언
+ String blob = "products/images/"+user.getId()+"/"+hash(image);
+ log.info("blob ={}",blob);
+ log.info("bucket ={}",bucket);
+ try{
+ // 이미 존재하면 파일 삭제
+ if(bucket.get(blob) != null){
+ bucket.get(blob).delete();
+ }
+ // 파일을 Bucket에 저장
+ bucket.create(blob,image);
+ // 상품 Image 위치 리턴
+ return blob;
+ }catch(Exception e){
+ throw new CustomException(ErrorCode.IMAGE_UPLOAD_FAILED);
+ }
+ }
+
+ public byte[] getImage(String userid,String filename){
+ String bucketPath = "products/images/"+userid+"/"+filename;
+ return bucket.get(bucketPath).getContent();
+ }
+}
diff --git a/src/main/java/bebeShare/service/LikeService.java b/src/main/java/bebeShare/service/LikeService.java
index 5b409d2..258242c 100644
--- a/src/main/java/bebeShare/service/LikeService.java
+++ b/src/main/java/bebeShare/service/LikeService.java
@@ -5,9 +5,11 @@
import bebeShare.domain.product.Product;
import bebeShare.domain.product.ProductRepository;
import bebeShare.domain.user.User;
+import bebeShare.domain.user.UserRepository;
import bebeShare.exception.CustomException;
import bebeShare.exception.ErrorCode;
import bebeShare.web.dto.ProductLikeDto;
+import bebeShare.web.dto.likeDto.SaveLikeDto;
import com.sun.el.parser.AstFalse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -21,19 +23,26 @@
public class LikeService {
private final DibsRepository dibsRepository;
private final ProductRepository productRepository;
+ private final UserRepository userRepository;
// 상품 게시글 좋아요 생성
@Transactional
- public boolean addLike(Long productId) {
- Product product = productRepository.findById(productId).orElseThrow(()
- -> new CustomException(ErrorCode.POSTS_NOT_FOUND));
- return true;
+ public void addLike(SaveLikeDto saveLikeDto) {
+ System.out.println("saveLikeDto.getProductId(): " + saveLikeDto.getProductId());
+ Product product = productRepository.findById(saveLikeDto.getProductId()).orElseThrow(()
+ -> new IllegalArgumentException("해당 상품이 없습니다. Id=" + saveLikeDto.getProductId()));
+
+ User user = userRepository.findById(saveLikeDto.getUserId()).orElseThrow(()
+ -> new IllegalArgumentException("해당 사용자가 없습니다. Id=" + saveLikeDto.getUserId()));
+
+ Dibs saveDib = dibsRepository.save(saveLikeDto.toEntity(product, user));
+
}
// 상품 게시글 좋아요 해제
@Transactional
- public void delete(Long productId) {
- productRepository.deleteById(productId);
+ public void delete(Long likeId) {
+ dibsRepository.deleteById(likeId);
}
}
diff --git a/src/main/java/bebeShare/service/ProductService.java b/src/main/java/bebeShare/service/ProductService.java
index c0eb289..fbead61 100644
--- a/src/main/java/bebeShare/service/ProductService.java
+++ b/src/main/java/bebeShare/service/ProductService.java
@@ -4,10 +4,11 @@
import bebeShare.domain.product.ProductRepository;
import bebeShare.exception.CustomException;
import bebeShare.exception.ErrorCode;
-import bebeShare.web.dto.productDto.ProductCreateRequestDto;
-import bebeShare.web.dto.productDto.ProductDeleteDto;
-import bebeShare.web.dto.productDto.ProductResponseDto;
+import bebeShare.web.dto.productDto.ApproveShareProductRequest;
+import bebeShare.web.dto.productDto.*;
import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -25,19 +26,30 @@ public class ProductService {
//상품 게시글 생성
@Transactional
public Long save(final ProductCreateRequestDto params) {
-
Product entity = productRepository.save(params.toEntity());
return entity.getId();
}
// 게시글 목록 조회
public List findAll() {
-
Sort sort = Sort.by(Sort.Direction.DESC, "id", "createdDate");
List list = productRepository.findAll(sort);
return list.stream().map(ProductResponseDto::new).collect(Collectors.toList());
}
+ // 상품 게시글 목록 조회
+ public Page findAllProducts(ProductRequest productRequest, Pageable pageable) {
+ try {
+ Page products = productRepository.findAllProducts(productRequest,pageable);
+ return products;
+ }catch (Exception e){
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return null;
+ }
+ }
+
+
// 상품 게시글 상세 조회
public ProductResponseDto findById(Long productId) {
Product entity = productRepository.findById(productId).orElseThrow(()
@@ -47,13 +59,18 @@ public ProductResponseDto findById(Long productId) {
// 상품 게시글 수정
@Transactional
- public Long update(final ProductCreateRequestDto params) {
+ public Long update( ProductCreateRequestDto productCreateRequestDto) {
- Product entity = productRepository.findById(params.getProductId()).orElseThrow(()
+ productRepository.findById(productCreateRequestDto.getProductId()).orElseThrow(()
-> new CustomException(ErrorCode.POSTS_NOT_FOUND));
- entity.update(params);
- return params.getProductId();
+ try {
+ return productRepository.updateProductDetail(productCreateRequestDto);
+ }catch (Exception e){
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return 0L;
+ }
}
@@ -64,4 +81,39 @@ public void delete(ProductDeleteDto params) {
-> new CustomException(ErrorCode.POSTS_NOT_FOUND));
entity.delete(params);
}
+
+ // 상품 게시글 목록 조회
+ @Transactional
+ public Long approveShare(ApproveShareProductRequest approveShareProductRequest) {
+ try {
+ return productRepository.approveShare(approveShareProductRequest);
+ }catch (Exception e){
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return 0L;
+ }
+ }
+
+ // 상품 게시글 목록 조회
+ @Transactional
+ public Long completeShare(CompleteShareRequest completeShareRequest) {
+ try {
+ return productRepository.completeShare(completeShareRequest);
+ }catch (Exception e){
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return 0L;
+ }
+ }
+
+ @Transactional
+ public Long rejectShare(RejectShareRequest rejectShareRequest) {
+ try {
+ return productRepository.rejectShare(rejectShareRequest);
+ }catch (Exception e){
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return 0L;
+ }
+ }
}
diff --git a/src/main/java/bebeShare/service/UserService.java b/src/main/java/bebeShare/service/UserService.java
index 54b3ec3..a0bd0f5 100644
--- a/src/main/java/bebeShare/service/UserService.java
+++ b/src/main/java/bebeShare/service/UserService.java
@@ -3,12 +3,17 @@
import bebeShare.domain.user.User;
import bebeShare.domain.user.UserRepository;
import bebeShare.web.dto.userDto.*;
+import bebeShare.web.dto.userDto.dto.*;
+import bebeShare.web.dto.userDto.req.CommentRequest;
+import bebeShare.web.dto.userDto.req.GiveRequest;
+import bebeShare.web.dto.userDto.req.LikeRequest;
+import bebeShare.web.dto.userDto.req.ShareRequest;
import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
-
@Transactional(readOnly = true)
@RequiredArgsConstructor
@Service
@@ -22,19 +27,43 @@ public UserResponseDto findById(Long id) {
return new UserResponseDto(entity);
}
- public List shareInfo(UserRequest userRequest) {
- return userRepository.shareInfo(userRequest);
+ public Page shareInfo(ShareRequest shareRequest, Pageable pageable) {
+ try {
+ return userRepository.shareInfo(shareRequest, pageable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return null;
+ }
}
- public List giveInfo(UserRequest userRequest) {
- return userRepository.giveInfo(userRequest);
+ public Page giveInfo(GiveRequest giveRequest, Pageable pageable) {
+ try {
+ return userRepository.giveInfo(giveRequest, pageable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return null;
+ }
}
- public List likeInfo(UserRequest userRequest) {
- return userRepository.likeInfo(userRequest);
+ public Page likeInfo(LikeRequest likeRequest, Pageable pageable) {
+ try {
+ return userRepository.likeInfo(likeRequest, pageable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return null;
+ }
}
- public List comments(UserRequest userRequest) {
- return userRepository.comments(userRequest);
+ public Page comments(CommentRequest commentRequest, Pageable pageable) {
+ try {
+ return userRepository.comments(commentRequest, pageable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ return null;
+ }
}
}
diff --git a/src/main/java/bebeShare/web/CategoryApiController.java b/src/main/java/bebeShare/web/CategoryApiController.java
index 4b3866d..9d8c310 100644
--- a/src/main/java/bebeShare/web/CategoryApiController.java
+++ b/src/main/java/bebeShare/web/CategoryApiController.java
@@ -3,13 +3,18 @@
import bebeShare.service.CategoryService;
import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import bebeShare.web.dto.category.CategoryReqeustDto;
+import bebeShare.web.dto.codeDto.CodeResponseDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+@Slf4j
@RestController
-@AllArgsConstructor
+@RequestMapping("/api/v1")
+@RequiredArgsConstructor
public class CategoryApiController {
private final CategoryService categoryService;
@@ -18,4 +23,15 @@ public class CategoryApiController {
public void lookupCategory(@RequestParam String code){
categoryService.lookup(code);
}
+
+
+ @PostMapping("/categories")
+ public List findAllCategories(){
+
+ List byCode = categoryService.findAll();
+
+ log.debug("@@@@@ :" + byCode.toString());
+ return byCode;
+
+ }
}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/web/CommentApiController.java b/src/main/java/bebeShare/web/CommentApiController.java
index 789d84d..68b5e7c 100644
--- a/src/main/java/bebeShare/web/CommentApiController.java
+++ b/src/main/java/bebeShare/web/CommentApiController.java
@@ -4,44 +4,51 @@
import bebeShare.config.auth.dto.SessionUser;
import bebeShare.service.CommentsService;
import bebeShare.web.dto.commentDto.*;
+import bebeShare.web.dto.userDto.req.CommentRequest;
import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequiredArgsConstructor
@RestController
-@RequestMapping("/api/v1/products")
+@RequestMapping("/api/v1/comments")
public class CommentApiController {
private final CommentsService commentsService;
// 상품 댓글 등록
- @PostMapping("/{productId}/comments")
- public CommentResponseDto save(@PathVariable Long productId, @RequestBody CommentSaveRequestsDto requestsDto,
- @LoginUser SessionUser sessionUser) {
- requestsDto.setProductId(productId);
- requestsDto.setMemberId(sessionUser.getId());
+ @PostMapping("/{productId}")
+ public CommentResponseDto save( @RequestBody CommentSaveRequestsDto requestsDto) {
return commentsService.save(requestsDto);
}
//상품 댓글 조회
- @GetMapping("/products")
- public List findAll(){
- return commentsService.findAll();
+ @PostMapping("")
+ public Page findByProductId(@RequestBody CommentsRequest commentsRequest){
+ Pageable pageable = PageRequest.of(commentsRequest.getPage(), commentsRequest.getSize());
+ return commentsService.findByProductId(commentsRequest, pageable);
}
// 상품 댓글 수정
- @PatchMapping("/{productId}/comments/{commentId}")
- public CommentUpdateResponseDto update(@PathVariable Long productId, @PathVariable Long commentId, @RequestBody CommentUpdateRequestsDto updateRequestsDto) {
- return commentsService.update(productId, commentId, updateRequestsDto);
+ @PatchMapping("")
+ public CommentUpdateResponseDto update(@RequestBody CommentUpdateRequestsDto updateRequestsDto) {
+
+ Long updateCnt = commentsService.updateByCommentId(updateRequestsDto);
+
+ if(updateCnt != 0){
+ return new CommentUpdateResponseDto(updateRequestsDto.getCommentId());
+ }
+
+ return new CommentUpdateResponseDto();
}
// 상품 댓글 삭제
- @DeleteMapping("/{productId}/comments/{commentId}")
- public CommentDeleteResponseDto delete(@PathVariable Long productId, @PathVariable Long commentId,
- @RequestBody CommentDeleteRequestDto params) {
-
- return commentsService.delete(productId, commentId,params);
+ @DeleteMapping("")
+ public CommentDeleteResponseDto delete(@RequestBody CommentDeleteRequestDto params) {
+ return commentsService.delete(params);
}
}
diff --git a/src/main/java/bebeShare/web/ImageController.java b/src/main/java/bebeShare/web/ImageController.java
new file mode 100644
index 0000000..68f9f9b
--- /dev/null
+++ b/src/main/java/bebeShare/web/ImageController.java
@@ -0,0 +1,35 @@
+package bebeShare.web;
+
+import bebeShare.domain.user.User;
+import bebeShare.service.ImageService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+@Controller
+@Slf4j
+public class ImageController {
+ @Autowired
+ private ImageService imageService;
+
+ @PostMapping("/upload")
+ public @ResponseBody String imageUpload(@RequestParam("image") MultipartFile image, HttpSession session) throws IOException {
+ log.info("image={}",image);
+ log.info("imageService={}",imageService);
+ if(image.isEmpty()) return null;
+ return imageService.createImage(image.getBytes(), (User)session.getAttribute("user"));
+ }
+
+
+ @ResponseBody
+ @GetMapping(value="/products/images/{userId}/{fileName}",produces = MediaType.IMAGE_JPEG_VALUE)
+ public byte[] imageDownload(@PathVariable("userId") String userid, @PathVariable("fileName") String filename) {
+ return imageService.getImage(userid,filename);
+ }
+}
diff --git a/src/main/java/bebeShare/web/IndexController.java b/src/main/java/bebeShare/web/IndexController.java
index 29b26ca..c8afe0b 100644
--- a/src/main/java/bebeShare/web/IndexController.java
+++ b/src/main/java/bebeShare/web/IndexController.java
@@ -3,9 +3,10 @@
import bebeShare.config.auth.LoginUser;
import bebeShare.config.auth.dto.SessionUser;
import bebeShare.service.PostsService;
+import bebeShare.service.ProductService;
+import bebeShare.service.UserService;
import bebeShare.web.dto.PostsResponseDto;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@@ -18,18 +19,12 @@
public class IndexController {
private final PostsService postsService;
- private final HttpSession httpSession;
+ private final UserService userService;
+ private final ProductService productService;
@GetMapping("/")
- public String index(Model model , @LoginUser SessionUser user) {
-
- model.addAttribute("posts", postsService.findAllDesc());
-
- if (user != null) {
- model.addAttribute("userName", user.getName());
- }
-
- return "index";
+ public String index(Model model) {
+ return "views/main";
}
@@ -52,4 +47,29 @@ public Long delete(@PathVariable Long id) {
postsService.delete(id);
return id;
}
+
+ @GetMapping("/product/detail/{id}")
+ public String detailProduct(Model model ,@PathVariable Long id) {
+ model.addAttribute("product", productService.findById(id));
+ return "product/detail";
+ }
+
+
+ @GetMapping("/product/register")
+ public String registerProduct(Model model , @LoginUser SessionUser user) {
+ if (user != null) {
+ model.addAttribute("user", user);
+ }
+ return "product/register";
+ }
+
+ @GetMapping("/user/mypage")
+ public String mypage(Model model , @LoginUser SessionUser user) {
+ if (user != null) {
+
+ model.addAttribute("userName", user.getName());
+ }
+ model.addAttribute("user", userService.findById(user.getId()));
+ return "user/mypage";
+ }
}
diff --git a/src/main/java/bebeShare/web/LikeApiController.java b/src/main/java/bebeShare/web/LikeApiController.java
index 58d084c..003a996 100644
--- a/src/main/java/bebeShare/web/LikeApiController.java
+++ b/src/main/java/bebeShare/web/LikeApiController.java
@@ -1,9 +1,12 @@
package bebeShare.web;
+import bebeShare.config.auth.LoginUser;
+import bebeShare.config.auth.dto.SessionUser;
+import bebeShare.domain.like.Dibs;
import bebeShare.domain.user.User;
import bebeShare.service.LikeService;
+import bebeShare.web.dto.likeDto.SaveLikeDto;
import bebeShare.web.dto.productDto.ProductCreateRequestDto;
-import bebeShare.web.dto.likeDto.ProductLikeDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -11,19 +14,25 @@
@Slf4j
@RequiredArgsConstructor
@RestController
+@RequestMapping("/api/v1/like")
public class LikeApiController {
private final LikeService likeService;
// 상품 게시글 좋아요 생성
- @PostMapping("/products/{productId}/like")
- public boolean save(@PathVariable Long productId) {
- return likeService.addLike(productId);
+ @PostMapping("/{productId}")
+ public Long save(@PathVariable Long productId, @LoginUser SessionUser user) {
+ SaveLikeDto saveLikeDto = new SaveLikeDto();
+ saveLikeDto.setProductId(productId);
+ saveLikeDto.setUserId(user.getId());
+ likeService.addLike(saveLikeDto);
+ return saveLikeDto.getUserId();
}
// 상품 게시글 좋아요 해제
- @DeleteMapping("/products/{productId}/like")
- public void delete(@PathVariable Long productId){
- likeService.delete(productId);
+ @DeleteMapping("/{likeId}")
+ public Long delete(@PathVariable Long likeId){
+ likeService.delete(likeId);
+ return likeId;
}
}
diff --git a/src/main/java/bebeShare/web/MemberApiController.java b/src/main/java/bebeShare/web/MemberApiController.java
index 1e293c5..71c311b 100644
--- a/src/main/java/bebeShare/web/MemberApiController.java
+++ b/src/main/java/bebeShare/web/MemberApiController.java
@@ -1,14 +1,22 @@
package bebeShare.web;
+import bebeShare.config.auth.LoginUser;
+import bebeShare.config.auth.dto.SessionUser;
+import bebeShare.service.ProductService;
import bebeShare.service.UserService;
import bebeShare.web.dto.userDto.*;
+import bebeShare.web.dto.userDto.dto.*;
+import bebeShare.web.dto.userDto.req.CommentRequest;
+import bebeShare.web.dto.userDto.req.GiveRequest;
+import bebeShare.web.dto.userDto.req.LikeRequest;
+import bebeShare.web.dto.userDto.req.ShareRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
-import java.util.List;
-
@RequiredArgsConstructor
@Slf4j
@@ -17,6 +25,7 @@
public class MemberApiController {
private final UserService userService;
+ private final ProductService productService;
@GetMapping("/{id}")
@@ -24,28 +33,34 @@ public UserResponseDto findById(@PathVariable Long id) {
return userService.findById(id);
}
- @GetMapping("/shareInfo")
- public List shareInfo(@RequestBody UserRequest userRequest) {
- return userService.shareInfo(userRequest);
+ @PostMapping("/shareInfo")
+ public Page shareInfo(@RequestBody ShareRequest shareRequest, @LoginUser SessionUser user) {
+ Pageable pageable = PageRequest.of(shareRequest.getPage(), shareRequest.getSize());
+ shareRequest.setMemberId(user.getId());
+ return userService.shareInfo(shareRequest, pageable);
}
- @GetMapping("/giveInfo")
- public List giveInfo(@RequestBody UserRequest userRequest) {
- return userService.giveInfo(userRequest);
+ @PostMapping("/giveInfo")
+ public Page giveInfo(@RequestBody GiveRequest giveRequest, @LoginUser SessionUser user) {
+ Pageable pageable = PageRequest.of(giveRequest.getPage(), giveRequest.getSize());
+ giveRequest.setShareId(user.getId());
+ return userService.giveInfo(giveRequest, pageable);
}
-
- @GetMapping("/likeInfo")
- public List likeInfo(@RequestBody UserRequest userRequest) {
- PageRequest pageRequest = PageRequest.of(userRequest.getPage(), userRequest.getSize());
- return userService.likeInfo(userRequest);
+ @PostMapping("/likeInfo")
+ public Page likeInfo(@RequestBody LikeRequest likeRequest, @LoginUser SessionUser user) {
+ Pageable pageable = PageRequest.of(likeRequest.getPage(), likeRequest.getSize());
+ likeRequest.setMemberId(user.getId());
+ return userService.likeInfo(likeRequest, pageable);
}
- @GetMapping("/comments")
- public List comments(@RequestBody UserRequest userRequest) {
- PageRequest pageRequest = PageRequest.of(userRequest.getPage(), userRequest.getSize());
- return userService.comments(userRequest);
- }
+ @PostMapping("/comments")
+ public Page comments(@RequestBody CommentRequest commentRequest, @LoginUser SessionUser user) {
+ Pageable pageable = PageRequest.of(commentRequest.getPage(), commentRequest.getSize());
+ commentRequest.setMemberId(user.getId());
+ return userService.comments(commentRequest, pageable);
-}
+
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/web/ProductApiController.java b/src/main/java/bebeShare/web/ProductApiController.java
index 8b27a2a..70dcf26 100644
--- a/src/main/java/bebeShare/web/ProductApiController.java
+++ b/src/main/java/bebeShare/web/ProductApiController.java
@@ -1,38 +1,42 @@
package bebeShare.web;
-import bebeShare.exception.CustomException;
-import bebeShare.exception.ErrorCode;
+import bebeShare.domain.like.DibsRepository;
import bebeShare.service.ProductService;
-import bebeShare.web.dto.productDto.ProductCreateRequestDto;
-import bebeShare.web.dto.productDto.ProductDeleteDto;
-import bebeShare.web.dto.productDto.ProductResponseDto;
+import bebeShare.web.dto.productDto.*;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
-import java.util.List;
-
+@Slf4j
@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
public class ProductApiController {
private final ProductService productService;
+ private final DibsRepository repository;
+
// 상품 게시글 등록
- @PostMapping("/products")
+ @PostMapping("/product")
public Long save(@RequestBody final ProductCreateRequestDto params) {
return productService.save(params);
}
- // 상품 게시글 조회
- @GetMapping("/products")
- public List findAll() {
- return productService.findAll();
+ // 상품 게시글 목록 조회
+ @PostMapping(value = "/products")
+ public Page findAllProducts(@RequestBody ProductRequest productRequest) {
+ Pageable pageable = PageRequest.of(productRequest.getPage(), productRequest.getSize());
+ return productService.findAllProducts(productRequest, pageable);
}
// 상품 게시글 상세 조회
- @ResponseBody
@GetMapping("/products/{productId}")
public ProductResponseDto findById(@PathVariable Long productId) {
return productService.findById(productId);
@@ -40,19 +44,53 @@ public ProductResponseDto findById(@PathVariable Long productId) {
// 상품 게시글 수정
@PatchMapping("/products")
- public Long update( @RequestBody final ProductCreateRequestDto params) {
- return productService.update(params);
- }
+ public ProductUpdateRespone update(@RequestBody ProductCreateRequestDto params) {
+ Long updateCnt = productService.update(params);
- // 예외 발생
- @GetMapping("/test")
- public String test() {
- throw new CustomException(ErrorCode.POSTS_NOT_FOUND);
+ if (updateCnt == 0) {
+ return new ProductUpdateRespone();
+ }
+ return new ProductUpdateRespone(params.getProductId());
}
// 상품 게시글 삭제
@DeleteMapping("/products")
- public void delete(@RequestBody ProductDeleteDto params){
+ public Long delete(@RequestBody ProductDeleteDto params) {
productService.delete(params);
+
+ return params.getProductId();
+ }
+
+ // 상품 게시글 상태변경
+ @PatchMapping("/products/approveShare")
+ public ApproveShareProductResponse approveShare(@RequestBody ApproveShareProductRequest params) {
+ Long updateCnt = productService.approveShare(params);
+
+ if (updateCnt == 0) {
+ return new ApproveShareProductResponse();
+ }
+ return new ApproveShareProductResponse(params.getProductId());
}
+
+ // 나눔 완료
+ @PatchMapping("/products/completeShare")
+ public ApproveShareProductResponse completeShare(@RequestBody CompleteShareRequest params) {
+ Long updateCnt = productService.completeShare(params);
+
+ if (updateCnt == 0) {
+ return new ApproveShareProductResponse();
+ }
+ return new ApproveShareProductResponse(params.getProductId());
+ }
+ // 나눔 거절
+ @PatchMapping("/products/rejectShare")
+ public ApproveShareProductResponse rejectShare(@RequestBody RejectShareRequest params) {
+ Long updateCnt = productService.rejectShare(params);
+
+ if (updateCnt == 0) {
+ return new ApproveShareProductResponse();
+ }
+ return new ApproveShareProductResponse(params.getProductId());
+ }
+
}
diff --git a/src/main/java/bebeShare/web/dto/category/CategoryReqeustDto.java b/src/main/java/bebeShare/web/dto/category/CategoryReqeustDto.java
new file mode 100644
index 0000000..4e073f0
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/category/CategoryReqeustDto.java
@@ -0,0 +1,12 @@
+package bebeShare.web.dto.category;
+
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@NoArgsConstructor
+public class CategoryReqeustDto {
+
+ private String code;
+}
diff --git a/src/main/java/bebeShare/web/dto/codeDto/CodeResponseDto.java b/src/main/java/bebeShare/web/dto/codeDto/CodeResponseDto.java
index 231c45f..57c3eb5 100644
--- a/src/main/java/bebeShare/web/dto/codeDto/CodeResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/codeDto/CodeResponseDto.java
@@ -1,13 +1,11 @@
package bebeShare.web.dto.codeDto;
import bebeShare.domain.code.Code;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
+import lombok.*;
import java.time.LocalDateTime;
+@ToString
@Getter
public class CodeResponseDto {
private Long codeId;
diff --git a/src/main/java/bebeShare/web/dto/commentDto/CommentDeleteResponseDto.java b/src/main/java/bebeShare/web/dto/commentDto/CommentDeleteResponseDto.java
index a2cbcf9..5a4967b 100644
--- a/src/main/java/bebeShare/web/dto/commentDto/CommentDeleteResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/commentDto/CommentDeleteResponseDto.java
@@ -9,11 +9,11 @@
@Getter
public class CommentDeleteResponseDto extends ResEntity {
- private Long productId;
+ private Long commentId;
- public CommentDeleteResponseDto(Long productId) {
+ public CommentDeleteResponseDto(Long commentId) {
this.setResultCode(RESPONES_SUCCESS.getValue());
this.setResultMsg(COMMENT_DELETE_OK);
- this.productId = productId;
+ this.commentId = commentId;
}
}
diff --git a/src/main/java/bebeShare/web/dto/commentDto/CommentInfoResponseDto.java b/src/main/java/bebeShare/web/dto/commentDto/CommentInfoResponseDto.java
new file mode 100644
index 0000000..57be63a
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/commentDto/CommentInfoResponseDto.java
@@ -0,0 +1,32 @@
+package bebeShare.web.dto.commentDto;
+
+import com.querydsl.core.annotations.QueryProjection;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class CommentInfoResponseDto {
+
+ private Long commentId;
+ private String commentContent;
+ private String deleteYn;
+ private String commentStatus;
+ private String picture;
+ private Long userId;
+ private Long shareId;
+ private LocalDateTime insertDt;
+
+
+ @QueryProjection
+ public CommentInfoResponseDto(Long commentId , String commentContent, String deleteYn,String commentStatus, String picture,Long userId, Long shareId,LocalDateTime InsertDt) {
+ this.commentId = commentId;
+ this.commentContent = commentContent;
+ this.deleteYn = deleteYn;
+ this.commentStatus = commentStatus;
+ this.picture = picture;
+ this.userId = userId;
+ this.shareId = shareId;
+ this.insertDt = InsertDt;
+ }
+}
diff --git a/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateRequestsDto.java b/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateRequestsDto.java
index a04413e..612aac8 100644
--- a/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateRequestsDto.java
+++ b/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateRequestsDto.java
@@ -7,28 +7,11 @@
import lombok.*;
-@Getter
-@Setter
-@AllArgsConstructor
-@NoArgsConstructor
+@Data
public class CommentUpdateRequestsDto {
- private User user;
- private Product product;
- private Long productId;
- private Long memberId;
+ private Long commentId;
private String commentContent;
private String deleteYn;
private String commentStatus;
- @Builder
- public Comment toEntity(){
- return Comment.builder()
- .user(user)
- .product(product)
- .commentContent(commentContent)
- .deleteYn("N")
- .commentStatus("100")
- .build();
- }
-
}
diff --git a/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateResponseDto.java b/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateResponseDto.java
index 21655a3..f2f298b 100644
--- a/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/commentDto/CommentUpdateResponseDto.java
@@ -1,21 +1,30 @@
package bebeShare.web.dto.commentDto;
import bebeShare.domain.common.entity.ResEntity;
-import lombok.Getter;
+import lombok.Data;
+import lombok.Setter;
+import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_FAIL;
import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_OK;
+import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_FAIL;
import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_SUCCESS;
-@Getter
+@Data
public class CommentUpdateResponseDto extends ResEntity {
private String resultCode;
private String resultMsg;
- private Long productId;
+ private Long commentId;
- public CommentUpdateResponseDto(Long productId) {
+ public CommentUpdateResponseDto(Long commentId) {
this.setResultCode(RESPONES_SUCCESS.getValue());
this.setResultMsg(COMMENT_UPDATE_OK);
- this.productId = productId;
+ this.commentId = commentId;
+ }
+
+ public CommentUpdateResponseDto() {
+ this.setResultCode(RESPONES_FAIL.getValue());
+ this.setResultMsg(COMMENT_UPDATE_FAIL);
+ this.commentId = 0L;
}
}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/web/dto/commentDto/CommentsRequest.java b/src/main/java/bebeShare/web/dto/commentDto/CommentsRequest.java
new file mode 100644
index 0000000..8b97ec1
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/commentDto/CommentsRequest.java
@@ -0,0 +1,9 @@
+package bebeShare.web.dto.commentDto;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+
+@Data
+public class CommentsRequest extends PageEntity {
+ private Long productId;
+}
diff --git a/src/main/java/bebeShare/web/dto/likeDto/SaveLikeDto.java b/src/main/java/bebeShare/web/dto/likeDto/SaveLikeDto.java
new file mode 100644
index 0000000..3086ea5
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/likeDto/SaveLikeDto.java
@@ -0,0 +1,35 @@
+package bebeShare.web.dto.likeDto;
+
+
+import bebeShare.domain.like.Dibs;
+import bebeShare.domain.product.Product;
+import bebeShare.domain.user.User;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SaveLikeDto {
+
+ private long productId;
+ private long userId;
+
+ public SaveLikeDto() {
+ this.userId = userId;
+ this.productId = productId;
+ }
+
+ public Dibs toEntity(Product product , User user){
+ return Dibs.builder()
+ .product(product)
+ .user(user)
+ .build();
+ }
+
+ @Builder
+ public SaveLikeDto(Long product , Long user) {
+ this.productId = product;
+ this.userId = user;
+ }
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductRequest.java b/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductRequest.java
new file mode 100644
index 0000000..d10e2a0
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductRequest.java
@@ -0,0 +1,9 @@
+package bebeShare.web.dto.productDto;
+
+import lombok.Getter;
+
+@Getter
+public class ApproveShareProductRequest {
+ private Long productId;
+ private Long shareId;
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductResponse.java b/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductResponse.java
new file mode 100644
index 0000000..0e76a8e
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/ApproveShareProductResponse.java
@@ -0,0 +1,31 @@
+package bebeShare.web.dto.productDto;
+
+import bebeShare.domain.common.entity.ResEntity;
+import lombok.Data;
+
+import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_FAIL;
+import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_OK;
+import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_FAIL;
+import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_SUCCESS;
+
+@Data
+public class ApproveShareProductResponse extends ResEntity {
+
+ private static final String SHARRE_UPDATE_OK = "나눔 아이디 없데이트 성공";
+ private static final String SHARRE_UPDATE_FAIL = "나눔 아이디 없데이트 실패";
+ private String resultCode;
+ private String resultMsg;
+ private Long productid;
+
+ public ApproveShareProductResponse(Long productid) {
+ this.setResultCode(RESPONES_SUCCESS.getValue());
+ this.setResultMsg(SHARRE_UPDATE_OK);
+ this.productid = productid;
+ }
+
+ public ApproveShareProductResponse() {
+ this.setResultCode(RESPONES_FAIL.getValue());
+ this.setResultMsg(SHARRE_UPDATE_FAIL);
+ this.productid = 0L;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/web/dto/productDto/CompleteShareRequest.java b/src/main/java/bebeShare/web/dto/productDto/CompleteShareRequest.java
new file mode 100644
index 0000000..30f1708
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/CompleteShareRequest.java
@@ -0,0 +1,8 @@
+package bebeShare.web.dto.productDto;
+
+import lombok.Getter;
+
+@Getter
+public class CompleteShareRequest {
+ private Long productId;
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ProductCreateRequestDto.java b/src/main/java/bebeShare/web/dto/productDto/ProductCreateRequestDto.java
index b368e09..a15d93a 100644
--- a/src/main/java/bebeShare/web/dto/productDto/ProductCreateRequestDto.java
+++ b/src/main/java/bebeShare/web/dto/productDto/ProductCreateRequestDto.java
@@ -2,7 +2,6 @@
import bebeShare.domain.product.Product;
import bebeShare.domain.user.User;
-import lombok.Data;
import lombok.Getter;
@Getter
@@ -11,9 +10,6 @@ public class ProductCreateRequestDto {
private User user;
private String productName;
private String productContent;
- private String productImage1;
- private String productImage2;
- private String productImage3;
private String productCategory;
private String productStatus;
private String deleteYn;
@@ -23,9 +19,6 @@ public ProductCreateRequestDto() {
this.user = user;
this.productName = productName;
this.productContent = productContent;
- this.productImage1 = productImage1;
- this.productImage2 = productImage2;
- this.productImage3 = productImage3;
this.productCategory = productCategory;
this.productStatus = productStatus;
this.deleteYn = deleteYn;
@@ -38,9 +31,6 @@ public Product toEntity() {
.productName(productName)
.productCategory(productCategory)
.productContent(productContent)
- .productImage1(productImage1)
- .productImage2(productImage2)
- .productImage3(productImage3)
.productStatus(productStatus)
.deleteYn(deleteYn)
.build();
diff --git a/src/main/java/bebeShare/web/dto/productDto/ProductInfoResponseDto.java b/src/main/java/bebeShare/web/dto/productDto/ProductInfoResponseDto.java
new file mode 100644
index 0000000..62b4711
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/ProductInfoResponseDto.java
@@ -0,0 +1,36 @@
+package bebeShare.web.dto.productDto;
+
+import bebeShare.domain.product.Product;
+import bebeShare.domain.user.User;
+import com.querydsl.core.annotations.QueryProjection;
+import lombok.Getter;
+
+import java.time.LocalDateTime;
+@Getter
+public class ProductInfoResponseDto {
+
+
+ private Long productId;
+ private User user;
+ private String productName;
+ private String productContent;
+ private String productImage1;
+ private String productImage2;
+ private String productImage3;
+ private String productCategory;
+ private String productStatus;
+ private String deleteYn;
+ private Long dibsId;
+ private LocalDateTime insertDt;
+
+ @QueryProjection
+ public ProductInfoResponseDto(Long ProductId , String Productname, String ProductImage1,long dibsId, LocalDateTime InsertDt) {
+ this.productId = ProductId;
+ this.productName = Productname;
+ this.productImage1 = ProductImage1;
+ this.dibsId = dibsId;
+ this.insertDt = InsertDt;
+
+ }
+
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ProductRequest.java b/src/main/java/bebeShare/web/dto/productDto/ProductRequest.java
new file mode 100644
index 0000000..e61b181
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/ProductRequest.java
@@ -0,0 +1,19 @@
+package bebeShare.web.dto.productDto;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Data
+public class ProductRequest extends PageEntity {
+ private String productName;
+ private String categoryCode;
+ private String orderBy;
+
+// 마이페이지 내역 파라미터값 .
+ private Long memberId;
+ private String productStatus;
+ private Long shareId;
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ProductResponseDto.java b/src/main/java/bebeShare/web/dto/productDto/ProductResponseDto.java
index 442e873..3e545ab 100644
--- a/src/main/java/bebeShare/web/dto/productDto/ProductResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/productDto/ProductResponseDto.java
@@ -2,8 +2,12 @@
import bebeShare.domain.product.Product;
import bebeShare.domain.user.User;
+import com.querydsl.core.annotations.QueryProjection;
import lombok.Getter;
+import java.time.LocalDateTime;
+
+
@Getter
public class ProductResponseDto {
private Long productId;
@@ -16,6 +20,7 @@ public class ProductResponseDto {
private String productCategory;
private String productStatus;
private String deleteYn;
+ private Long shareId;
public ProductResponseDto(Product entity) {
@@ -29,5 +34,6 @@ public ProductResponseDto(Product entity) {
this.productCategory = entity.getProductCategory();
this.productStatus = entity.getProductStatus();
this.deleteYn = entity.getDeleteYn();
+ this.shareId = entity.getShareId();
}
}
diff --git a/src/main/java/bebeShare/web/dto/productDto/ProductUpdateRespone.java b/src/main/java/bebeShare/web/dto/productDto/ProductUpdateRespone.java
new file mode 100644
index 0000000..b81bf8d
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/ProductUpdateRespone.java
@@ -0,0 +1,35 @@
+package bebeShare.web.dto.productDto;
+
+import bebeShare.domain.product.Product;
+import bebeShare.domain.user.User;
+import lombok.Data;
+import lombok.Getter;
+
+import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_FAIL;
+import static bebeShare.domain.common.CommonContants.COMMENT_UPDATE_OK;
+import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_FAIL;
+import static bebeShare.domain.common.ResponeMsgEnum.RESPONES_SUCCESS;
+
+@Data
+public class ProductUpdateRespone {
+
+ private static final String PROUDCT_UPDATE_OK = "상품 수정 성공";
+ private static final String PROUDCT_UPDATE_FAIL ="상품 수정 실패" ;
+ private Long productId;
+ private String resultCode;
+ private String resultMsg;
+
+
+
+ public ProductUpdateRespone(Long productId) {
+ this.setResultCode(RESPONES_SUCCESS.getValue());
+ this.setResultMsg(PROUDCT_UPDATE_OK);
+ this.productId = productId;
+ }
+
+ public ProductUpdateRespone() {
+ this.setResultCode(RESPONES_FAIL.getValue());
+ this.setResultMsg(PROUDCT_UPDATE_FAIL);
+ this.productId = 0L;
+ }
+}
diff --git a/src/main/java/bebeShare/web/dto/productDto/RejectShareRequest.java b/src/main/java/bebeShare/web/dto/productDto/RejectShareRequest.java
new file mode 100644
index 0000000..4b28145
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/productDto/RejectShareRequest.java
@@ -0,0 +1,8 @@
+package bebeShare.web.dto.productDto;
+
+import lombok.Getter;
+
+@Getter
+public class RejectShareRequest {
+ private Long productId;
+}
diff --git a/src/main/java/bebeShare/web/dto/userDto/GiveInfoResponseDto.java b/src/main/java/bebeShare/web/dto/userDto/dto/GiveInfoResponseDto.java
similarity index 94%
rename from src/main/java/bebeShare/web/dto/userDto/GiveInfoResponseDto.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/GiveInfoResponseDto.java
index aa0bd25..0e640d1 100644
--- a/src/main/java/bebeShare/web/dto/userDto/GiveInfoResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/GiveInfoResponseDto.java
@@ -1,4 +1,4 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
import com.querydsl.core.annotations.QueryProjection;
import lombok.Getter;
diff --git a/src/main/java/bebeShare/web/dto/userDto/LikeInfoResponseDto.java b/src/main/java/bebeShare/web/dto/userDto/dto/LikeInfoResponseDto.java
similarity index 89%
rename from src/main/java/bebeShare/web/dto/userDto/LikeInfoResponseDto.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/LikeInfoResponseDto.java
index 5f2accf..867e43c 100644
--- a/src/main/java/bebeShare/web/dto/userDto/LikeInfoResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/LikeInfoResponseDto.java
@@ -1,6 +1,5 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
-import bebeShare.domain.product.Product;
import com.querydsl.core.annotations.QueryProjection;
import lombok.Getter;
import lombok.ToString;
diff --git a/src/main/java/bebeShare/web/dto/userDto/MemberCommentResponseDto.java b/src/main/java/bebeShare/web/dto/userDto/dto/MemberCommentResponseDto.java
similarity index 75%
rename from src/main/java/bebeShare/web/dto/userDto/MemberCommentResponseDto.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/MemberCommentResponseDto.java
index 204d9fb..a4336c6 100644
--- a/src/main/java/bebeShare/web/dto/userDto/MemberCommentResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/MemberCommentResponseDto.java
@@ -1,8 +1,7 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
-import bebeShare.domain.comment.Comment;
-import bebeShare.domain.product.Product;
import com.querydsl.core.annotations.QueryProjection;
+import com.querydsl.core.types.dsl.StringPath;
import lombok.Getter;
import lombok.ToString;
@@ -15,6 +14,7 @@ public class MemberCommentResponseDto {
private Long commentId;
private String productName;
private String commentContent;
+ //private StringPath productImage1;
private LocalDateTime insertDt;
@@ -24,6 +24,8 @@ public MemberCommentResponseDto(Long commentId, String productName, String comme
this.commentId = commentId;
this.productName = productName;
this.commentContent = commentContent;
+ //this.productImage1 = productImage1;
+ this.insertDt = insertDt;
}
diff --git a/src/main/java/bebeShare/web/dto/userDto/ShareInfoResponseDto.java b/src/main/java/bebeShare/web/dto/userDto/dto/ShareInfoResponseDto.java
similarity index 87%
rename from src/main/java/bebeShare/web/dto/userDto/ShareInfoResponseDto.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/ShareInfoResponseDto.java
index 752199c..07ce226 100644
--- a/src/main/java/bebeShare/web/dto/userDto/ShareInfoResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/ShareInfoResponseDto.java
@@ -1,9 +1,7 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
-import bebeShare.domain.product.Product;
import com.querydsl.core.annotations.QueryProjection;
import lombok.Data;
-import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
diff --git a/src/main/java/bebeShare/web/dto/userDto/UserRequest.java b/src/main/java/bebeShare/web/dto/userDto/dto/UserRequest.java
similarity index 86%
rename from src/main/java/bebeShare/web/dto/userDto/UserRequest.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/UserRequest.java
index 66b4027..453d041 100644
--- a/src/main/java/bebeShare/web/dto/userDto/UserRequest.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/UserRequest.java
@@ -1,4 +1,5 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
+
import bebeShare.domain.common.entity.PageEntity;
import lombok.Getter;
@@ -13,4 +14,4 @@ public class UserRequest extends PageEntity {
private Long memberId;
private String productStatus;
-}
+}
\ No newline at end of file
diff --git a/src/main/java/bebeShare/web/dto/userDto/UserResponseDto.java b/src/main/java/bebeShare/web/dto/userDto/dto/UserResponseDto.java
similarity index 92%
rename from src/main/java/bebeShare/web/dto/userDto/UserResponseDto.java
rename to src/main/java/bebeShare/web/dto/userDto/dto/UserResponseDto.java
index 599f9bc..1594110 100644
--- a/src/main/java/bebeShare/web/dto/userDto/UserResponseDto.java
+++ b/src/main/java/bebeShare/web/dto/userDto/dto/UserResponseDto.java
@@ -1,4 +1,4 @@
-package bebeShare.web.dto.userDto;
+package bebeShare.web.dto.userDto.dto;
import bebeShare.domain.user.User;
import lombok.Getter;
diff --git a/src/main/java/bebeShare/web/dto/userDto/req/CommentRequest.java b/src/main/java/bebeShare/web/dto/userDto/req/CommentRequest.java
new file mode 100644
index 0000000..75661cb
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/userDto/req/CommentRequest.java
@@ -0,0 +1,10 @@
+package bebeShare.web.dto.userDto.req;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+
+@Data
+public class CommentRequest extends PageEntity {
+
+ private Long memberId;
+}
diff --git a/src/main/java/bebeShare/web/dto/userDto/req/GiveRequest.java b/src/main/java/bebeShare/web/dto/userDto/req/GiveRequest.java
new file mode 100644
index 0000000..60e613a
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/userDto/req/GiveRequest.java
@@ -0,0 +1,11 @@
+package bebeShare.web.dto.userDto.req;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+
+@Data
+public class GiveRequest extends PageEntity {
+
+ private Long shareId;
+ private String productStatus;
+}
diff --git a/src/main/java/bebeShare/web/dto/userDto/req/LikeRequest.java b/src/main/java/bebeShare/web/dto/userDto/req/LikeRequest.java
new file mode 100644
index 0000000..b6eb46b
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/userDto/req/LikeRequest.java
@@ -0,0 +1,9 @@
+package bebeShare.web.dto.userDto.req;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+
+@Data
+public class LikeRequest extends PageEntity {
+ private Long memberId;
+}
diff --git a/src/main/java/bebeShare/web/dto/userDto/req/ShareRequest.java b/src/main/java/bebeShare/web/dto/userDto/req/ShareRequest.java
new file mode 100644
index 0000000..576b2e4
--- /dev/null
+++ b/src/main/java/bebeShare/web/dto/userDto/req/ShareRequest.java
@@ -0,0 +1,15 @@
+package bebeShare.web.dto.userDto.req;
+
+import bebeShare.domain.common.entity.PageEntity;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Data
+public class ShareRequest extends PageEntity {
+
+ private Long memberId;
+ private String productStatus;
+
+}
diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml
index 974d29f..7d98fe8 100644
--- a/src/main/resources/application-local.yml
+++ b/src/main/resources/application-local.yml
@@ -7,24 +7,33 @@ spring:
# DB
datasource:
+# url: jdbc:h2:tcp://localhost/~/bebeShare
+# driver-class-name: org.h2.Driver
+# username: sa
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://211.105.66.96:3306/bebeShare
username: bebeShare
password: fW1*n[IQQM
# JPA
jpa:
+ generate-ddl: true
show-sql: true
hibernate:
format_sql: true
ddl-auto: create
- database-platform: org.hibernate.dialect.MariaDBDialect
-
+# database-platform: org.hibernate.dialect.MariaDBDialect
#REDIS
redis:
- host: 127.0.0.1
- port: 6379
+ host: ec2-18-205-76-248.compute-1.amazonaws.com
+ port: 26500
+ password: pae39b99f39db2c0e45ff88155be2bfd0445aa604c574ce084b84baf3b12e436d
+ url: rediss://:pae39b99f39db2c0e45ff88155be2bfd0445aa604c574ce084b84baf3b12e436d@ec2-18-205-76-248.compute-1.amazonaws.com:26500
+ tls: true
session:
store-type: redis
redis:
flush-mode: on_save
+
+
+
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 6e2cbd6..9d60cfd 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -17,12 +17,15 @@ spring:
hibernate:
dialect: org.hibernate.dialect.PostgreSQL10DialectDialect
format_sql: true
- ddl-auto: validate
+ ddl-auto: create
# database-platform: org.hibernate.dialect.MariaDBDialect
#REDIS
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
+ password: ${REDIS_PASSWORD}
+ url: ${REDIS_TLS_URL}
+ tls: ${REDIS_TLS}
session:
store-type: redis
redis:
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 6873a26..9253b3c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,6 @@
-
+server:
+ port: ${PORT:8080}
spring:
@@ -17,6 +18,15 @@ logging:
SQL: DEBUG
type: debug
+ devtools:
+ livereload:
+ enabled: true
+ restart:
+ enabled: false
+ freemarker.cache: false
+ jackson:
+ serialization:
+ fail-on-empty-beans: false
diff --git a/src/main/resources/static/chat/room.html b/src/main/resources/static/chat/room.html
new file mode 100644
index 0000000..c85eb98
--- /dev/null
+++ b/src/main/resources/static/chat/room.html
@@ -0,0 +1,85 @@
+
+
+
+ Websocket Chat
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.roomName}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/chat/roomdetail.html b/src/main/resources/static/chat/roomdetail.html
new file mode 100644
index 0000000..ce3f122
--- /dev/null
+++ b/src/main/resources/static/chat/roomdetail.html
@@ -0,0 +1,100 @@
+
+
+
+ 나눔채팅방
+
+
+
+
+
+
+
+
+
+
+
+
{{room.name}}
+
+
+
+
+ {{message.sender}} - {{message.message}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/css/all.min.css b/src/main/resources/static/css/all.min.css
new file mode 100644
index 0000000..61712c8
--- /dev/null
+++ b/src/main/resources/static/css/all.min.css
@@ -0,0 +1,5716 @@
+/*!
+ * Font Awesome Free 5.8.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)
+ */
+.fa, .fab, .fal, .far, .fas {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ line-height: 1
+}
+
+.fa-lg {
+ font-size: 1.33333em;
+ line-height: .75em;
+ vertical-align: -.0667em
+}
+
+.fa-xs {
+ font-size: .75em
+}
+
+.fa-sm {
+ font-size: .875em
+}
+
+.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-fw {
+ text-align: center;
+ width: 1.25em
+}
+
+.fa-ul {
+ list-style-type: none;
+ margin-left: 2.5em;
+ padding-left: 0
+}
+
+.fa-ul > li {
+ position: relative
+}
+
+.fa-li {
+ left: -2em;
+ position: absolute;
+ text-align: center;
+ width: 2em;
+ line-height: inherit
+}
+
+.fa-border {
+ border: .08em solid #eee;
+ border-radius: .1em;
+ padding: .2em .25em .15em
+}
+
+.fa-pull-left {
+ float: left
+}
+
+.fa-pull-right {
+ float: right
+}
+
+.fa.fa-pull-left, .fab.fa-pull-left, .fal.fa-pull-left, .far.fa-pull-left, .fas.fa-pull-left {
+ margin-right: .3em
+}
+
+.fa.fa-pull-right, .fab.fa-pull-right, .fal.fa-pull-right, .far.fa-pull-right, .fas.fa-pull-right {
+ margin-left: .3em
+}
+
+.fa-spin {
+ animation: fa-spin 2s infinite linear
+}
+
+.fa-pulse {
+ animation: fa-spin 1s infinite steps(8)
+}
+
+@keyframes fa-spin {
+ 0% {
+ transform: rotate(0deg)
+ }
+ to {
+ transform: rotate(1turn)
+ }
+}
+
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ transform: rotate(90deg)
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ transform: rotate(180deg)
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ transform: rotate(270deg)
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ transform: scaleX(-1)
+}
+
+.fa-flip-vertical {
+ transform: scaleY(-1)
+}
+
+.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical, .fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"
+}
+
+.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {
+ transform: scale(-1)
+}
+
+:root .fa-flip-both, :root .fa-flip-horizontal, :root .fa-flip-vertical, :root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270 {
+ filter: none
+}
+
+.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%
+}
+
+.fa-stack-1x {
+ line-height: inherit
+}
+
+.fa-stack-2x {
+ font-size: 2em
+}
+
+.fa-inverse {
+ color: #fff
+}
+
+.fa-500px:before {
+ content: "\f26e"
+}
+
+.fa-accessible-icon:before {
+ content: "\f368"
+}
+
+.fa-accusoft:before {
+ content: "\f369"
+}
+
+.fa-acquisitions-incorporated:before {
+ content: "\f6af"
+}
+
+.fa-ad:before {
+ content: "\f641"
+}
+
+.fa-address-book:before {
+ content: "\f2b9"
+}
+
+.fa-address-card:before {
+ content: "\f2bb"
+}
+
+.fa-adjust:before {
+ content: "\f042"
+}
+
+.fa-adn:before {
+ content: "\f170"
+}
+
+.fa-adobe:before {
+ content: "\f778"
+}
+
+.fa-adversal:before {
+ content: "\f36a"
+}
+
+.fa-affiliatetheme:before {
+ content: "\f36b"
+}
+
+.fa-air-freshener:before {
+ content: "\f5d0"
+}
+
+.fa-airbnb:before {
+ content: "\f834"
+}
+
+.fa-algolia:before {
+ content: "\f36c"
+}
+
+.fa-align-center:before {
+ content: "\f037"
+}
+
+.fa-align-justify:before {
+ content: "\f039"
+}
+
+.fa-align-left:before {
+ content: "\f036"
+}
+
+.fa-align-right:before {
+ content: "\f038"
+}
+
+.fa-alipay:before {
+ content: "\f642"
+}
+
+.fa-allergies:before {
+ content: "\f461"
+}
+
+.fa-amazon:before {
+ content: "\f270"
+}
+
+.fa-amazon-pay:before {
+ content: "\f42c"
+}
+
+.fa-ambulance:before {
+ content: "\f0f9"
+}
+
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3"
+}
+
+.fa-amilia:before {
+ content: "\f36d"
+}
+
+.fa-anchor:before {
+ content: "\f13d"
+}
+
+.fa-android:before {
+ content: "\f17b"
+}
+
+.fa-angellist:before {
+ content: "\f209"
+}
+
+.fa-angle-double-down:before {
+ content: "\f103"
+}
+
+.fa-angle-double-left:before {
+ content: "\f100"
+}
+
+.fa-angle-double-right:before {
+ content: "\f101"
+}
+
+.fa-angle-double-up:before {
+ content: "\f102"
+}
+
+.fa-angle-down:before {
+ content: "\f107"
+}
+
+.fa-angle-left:before {
+ content: "\f104"
+}
+
+.fa-angle-right:before {
+ content: "\f105"
+}
+
+.fa-angle-up:before {
+ content: "\f106"
+}
+
+.fa-angry:before {
+ content: "\f556"
+}
+
+.fa-angrycreative:before {
+ content: "\f36e"
+}
+
+.fa-angular:before {
+ content: "\f420"
+}
+
+.fa-ankh:before {
+ content: "\f644"
+}
+
+.fa-app-store:before {
+ content: "\f36f"
+}
+
+.fa-app-store-ios:before {
+ content: "\f370"
+}
+
+.fa-apper:before {
+ content: "\f371"
+}
+
+.fa-apple:before {
+ content: "\f179"
+}
+
+.fa-apple-alt:before {
+ content: "\f5d1"
+}
+
+.fa-apple-pay:before {
+ content: "\f415"
+}
+
+.fa-archive:before {
+ content: "\f187"
+}
+
+.fa-archway:before {
+ content: "\f557"
+}
+
+.fa-arrow-alt-circle-down:before {
+ content: "\f358"
+}
+
+.fa-arrow-alt-circle-left:before {
+ content: "\f359"
+}
+
+.fa-arrow-alt-circle-right:before {
+ content: "\f35a"
+}
+
+.fa-arrow-alt-circle-up:before {
+ content: "\f35b"
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab"
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8"
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9"
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa"
+}
+
+.fa-arrow-down:before {
+ content: "\f063"
+}
+
+.fa-arrow-left:before {
+ content: "\f060"
+}
+
+.fa-arrow-right:before {
+ content: "\f061"
+}
+
+.fa-arrow-up:before {
+ content: "\f062"
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2"
+}
+
+.fa-arrows-alt-h:before {
+ content: "\f337"
+}
+
+.fa-arrows-alt-v:before {
+ content: "\f338"
+}
+
+.fa-artstation:before {
+ content: "\f77a"
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2"
+}
+
+.fa-asterisk:before {
+ content: "\f069"
+}
+
+.fa-asymmetrik:before {
+ content: "\f372"
+}
+
+.fa-at:before {
+ content: "\f1fa"
+}
+
+.fa-atlas:before {
+ content: "\f558"
+}
+
+.fa-atlassian:before {
+ content: "\f77b"
+}
+
+.fa-atom:before {
+ content: "\f5d2"
+}
+
+.fa-audible:before {
+ content: "\f373"
+}
+
+.fa-audio-description:before {
+ content: "\f29e"
+}
+
+.fa-autoprefixer:before {
+ content: "\f41c"
+}
+
+.fa-avianex:before {
+ content: "\f374"
+}
+
+.fa-aviato:before {
+ content: "\f421"
+}
+
+.fa-award:before {
+ content: "\f559"
+}
+
+.fa-aws:before {
+ content: "\f375"
+}
+
+.fa-baby:before {
+ content: "\f77c"
+}
+
+.fa-baby-carriage:before {
+ content: "\f77d"
+}
+
+.fa-backspace:before {
+ content: "\f55a"
+}
+
+.fa-backward:before {
+ content: "\f04a"
+}
+
+.fa-bacon:before {
+ content: "\f7e5"
+}
+
+.fa-balance-scale:before {
+ content: "\f24e"
+}
+
+.fa-ban:before {
+ content: "\f05e"
+}
+
+.fa-band-aid:before {
+ content: "\f462"
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5"
+}
+
+.fa-barcode:before {
+ content: "\f02a"
+}
+
+.fa-bars:before {
+ content: "\f0c9"
+}
+
+.fa-baseball-ball:before {
+ content: "\f433"
+}
+
+.fa-basketball-ball:before {
+ content: "\f434"
+}
+
+.fa-bath:before {
+ content: "\f2cd"
+}
+
+.fa-battery-empty:before {
+ content: "\f244"
+}
+
+.fa-battery-full:before {
+ content: "\f240"
+}
+
+.fa-battery-half:before {
+ content: "\f242"
+}
+
+.fa-battery-quarter:before {
+ content: "\f243"
+}
+
+.fa-battery-three-quarters:before {
+ content: "\f241"
+}
+
+.fa-battle-net:before {
+ content: "\f835"
+}
+
+.fa-bed:before {
+ content: "\f236"
+}
+
+.fa-beer:before {
+ content: "\f0fc"
+}
+
+.fa-behance:before {
+ content: "\f1b4"
+}
+
+.fa-behance-square:before {
+ content: "\f1b5"
+}
+
+.fa-bell:before {
+ content: "\f0f3"
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6"
+}
+
+.fa-bezier-curve:before {
+ content: "\f55b"
+}
+
+.fa-bible:before {
+ content: "\f647"
+}
+
+.fa-bicycle:before {
+ content: "\f206"
+}
+
+.fa-bimobject:before {
+ content: "\f378"
+}
+
+.fa-binoculars:before {
+ content: "\f1e5"
+}
+
+.fa-biohazard:before {
+ content: "\f780"
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd"
+}
+
+.fa-bitbucket:before {
+ content: "\f171"
+}
+
+.fa-bitcoin:before {
+ content: "\f379"
+}
+
+.fa-bity:before {
+ content: "\f37a"
+}
+
+.fa-black-tie:before {
+ content: "\f27e"
+}
+
+.fa-blackberry:before {
+ content: "\f37b"
+}
+
+.fa-blender:before {
+ content: "\f517"
+}
+
+.fa-blender-phone:before {
+ content: "\f6b6"
+}
+
+.fa-blind:before {
+ content: "\f29d"
+}
+
+.fa-blog:before {
+ content: "\f781"
+}
+
+.fa-blogger:before {
+ content: "\f37c"
+}
+
+.fa-blogger-b:before {
+ content: "\f37d"
+}
+
+.fa-bluetooth:before {
+ content: "\f293"
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294"
+}
+
+.fa-bold:before {
+ content: "\f032"
+}
+
+.fa-bolt:before {
+ content: "\f0e7"
+}
+
+.fa-bomb:before {
+ content: "\f1e2"
+}
+
+.fa-bone:before {
+ content: "\f5d7"
+}
+
+.fa-bong:before {
+ content: "\f55c"
+}
+
+.fa-book:before {
+ content: "\f02d"
+}
+
+.fa-book-dead:before {
+ content: "\f6b7"
+}
+
+.fa-book-medical:before {
+ content: "\f7e6"
+}
+
+.fa-book-open:before {
+ content: "\f518"
+}
+
+.fa-book-reader:before {
+ content: "\f5da"
+}
+
+.fa-bookmark:before {
+ content: "\f02e"
+}
+
+.fa-bootstrap:before {
+ content: "\f836"
+}
+
+.fa-bowling-ball:before {
+ content: "\f436"
+}
+
+.fa-box:before {
+ content: "\f466"
+}
+
+.fa-box-open:before {
+ content: "\f49e"
+}
+
+.fa-boxes:before {
+ content: "\f468"
+}
+
+.fa-braille:before {
+ content: "\f2a1"
+}
+
+.fa-brain:before {
+ content: "\f5dc"
+}
+
+.fa-bread-slice:before {
+ content: "\f7ec"
+}
+
+.fa-briefcase:before {
+ content: "\f0b1"
+}
+
+.fa-briefcase-medical:before {
+ content: "\f469"
+}
+
+.fa-broadcast-tower:before {
+ content: "\f519"
+}
+
+.fa-broom:before {
+ content: "\f51a"
+}
+
+.fa-brush:before {
+ content: "\f55d"
+}
+
+.fa-btc:before {
+ content: "\f15a"
+}
+
+.fa-buffer:before {
+ content: "\f837"
+}
+
+.fa-bug:before {
+ content: "\f188"
+}
+
+.fa-building:before {
+ content: "\f1ad"
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1"
+}
+
+.fa-bullseye:before {
+ content: "\f140"
+}
+
+.fa-burn:before {
+ content: "\f46a"
+}
+
+.fa-buromobelexperte:before {
+ content: "\f37f"
+}
+
+.fa-bus:before {
+ content: "\f207"
+}
+
+.fa-bus-alt:before {
+ content: "\f55e"
+}
+
+.fa-business-time:before {
+ content: "\f64a"
+}
+
+.fa-buysellads:before {
+ content: "\f20d"
+}
+
+.fa-calculator:before {
+ content: "\f1ec"
+}
+
+.fa-calendar:before {
+ content: "\f133"
+}
+
+.fa-calendar-alt:before {
+ content: "\f073"
+}
+
+.fa-calendar-check:before {
+ content: "\f274"
+}
+
+.fa-calendar-day:before {
+ content: "\f783"
+}
+
+.fa-calendar-minus:before {
+ content: "\f272"
+}
+
+.fa-calendar-plus:before {
+ content: "\f271"
+}
+
+.fa-calendar-times:before {
+ content: "\f273"
+}
+
+.fa-calendar-week:before {
+ content: "\f784"
+}
+
+.fa-camera:before {
+ content: "\f030"
+}
+
+.fa-camera-retro:before {
+ content: "\f083"
+}
+
+.fa-campground:before {
+ content: "\f6bb"
+}
+
+.fa-canadian-maple-leaf:before {
+ content: "\f785"
+}
+
+.fa-candy-cane:before {
+ content: "\f786"
+}
+
+.fa-cannabis:before {
+ content: "\f55f"
+}
+
+.fa-capsules:before {
+ content: "\f46b"
+}
+
+.fa-car:before {
+ content: "\f1b9"
+}
+
+.fa-car-alt:before {
+ content: "\f5de"
+}
+
+.fa-car-battery:before {
+ content: "\f5df"
+}
+
+.fa-car-crash:before {
+ content: "\f5e1"
+}
+
+.fa-car-side:before {
+ content: "\f5e4"
+}
+
+.fa-caret-down:before {
+ content: "\f0d7"
+}
+
+.fa-caret-left:before {
+ content: "\f0d9"
+}
+
+.fa-caret-right:before {
+ content: "\f0da"
+}
+
+.fa-caret-square-down:before {
+ content: "\f150"
+}
+
+.fa-caret-square-left:before {
+ content: "\f191"
+}
+
+.fa-caret-square-right:before {
+ content: "\f152"
+}
+
+.fa-caret-square-up:before {
+ content: "\f151"
+}
+
+.fa-caret-up:before {
+ content: "\f0d8"
+}
+
+.fa-carrot:before {
+ content: "\f787"
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218"
+}
+
+.fa-cart-plus:before {
+ content: "\f217"
+}
+
+.fa-cash-register:before {
+ content: "\f788"
+}
+
+.fa-cat:before {
+ content: "\f6be"
+}
+
+.fa-cc-amazon-pay:before {
+ content: "\f42d"
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3"
+}
+
+.fa-cc-apple-pay:before {
+ content: "\f416"
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c"
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2"
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b"
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1"
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4"
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5"
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0"
+}
+
+.fa-centercode:before {
+ content: "\f380"
+}
+
+.fa-centos:before {
+ content: "\f789"
+}
+
+.fa-certificate:before {
+ content: "\f0a3"
+}
+
+.fa-chair:before {
+ content: "\f6c0"
+}
+
+.fa-chalkboard:before {
+ content: "\f51b"
+}
+
+.fa-chalkboard-teacher:before {
+ content: "\f51c"
+}
+
+.fa-charging-station:before {
+ content: "\f5e7"
+}
+
+.fa-chart-area:before {
+ content: "\f1fe"
+}
+
+.fa-chart-bar:before {
+ content: "\f080"
+}
+
+.fa-chart-line:before {
+ content: "\f201"
+}
+
+.fa-chart-pie:before {
+ content: "\f200"
+}
+
+.fa-check:before {
+ content: "\f00c"
+}
+
+.fa-check-circle:before {
+ content: "\f058"
+}
+
+.fa-check-double:before {
+ content: "\f560"
+}
+
+.fa-check-square:before {
+ content: "\f14a"
+}
+
+.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-circle-down:before {
+ content: "\f13a"
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137"
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138"
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139"
+}
+
+.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-chrome:before {
+ content: "\f268"
+}
+
+.fa-chromecast:before {
+ content: "\f838"
+}
+
+.fa-church:before {
+ content: "\f51d"
+}
+
+.fa-circle:before {
+ content: "\f111"
+}
+
+.fa-circle-notch:before {
+ content: "\f1ce"
+}
+
+.fa-city:before {
+ content: "\f64f"
+}
+
+.fa-clinic-medical:before {
+ content: "\f7f2"
+}
+
+.fa-clipboard:before {
+ content: "\f328"
+}
+
+.fa-clipboard-check:before {
+ content: "\f46c"
+}
+
+.fa-clipboard-list:before {
+ content: "\f46d"
+}
+
+.fa-clock:before {
+ content: "\f017"
+}
+
+.fa-clone:before {
+ content: "\f24d"
+}
+
+.fa-closed-captioning:before {
+ content: "\f20a"
+}
+
+.fa-cloud:before {
+ content: "\f0c2"
+}
+
+.fa-cloud-download-alt:before {
+ content: "\f381"
+}
+
+.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-sun:before {
+ content: "\f6c4"
+}
+
+.fa-cloud-sun-rain:before {
+ content: "\f743"
+}
+
+.fa-cloud-upload-alt:before {
+ content: "\f382"
+}
+
+.fa-cloudscale:before {
+ content: "\f383"
+}
+
+.fa-cloudsmith:before {
+ content: "\f384"
+}
+
+.fa-cloudversify:before {
+ content: "\f385"
+}
+
+.fa-cocktail:before {
+ content: "\f561"
+}
+
+.fa-code:before {
+ content: "\f121"
+}
+
+.fa-code-branch:before {
+ content: "\f126"
+}
+
+.fa-codepen:before {
+ content: "\f1cb"
+}
+
+.fa-codiepie:before {
+ content: "\f284"
+}
+
+.fa-coffee:before {
+ content: "\f0f4"
+}
+
+.fa-cog:before {
+ content: "\f013"
+}
+
+.fa-cogs:before {
+ content: "\f085"
+}
+
+.fa-coins:before {
+ content: "\f51e"
+}
+
+.fa-columns:before {
+ content: "\f0db"
+}
+
+.fa-comment:before {
+ content: "\f075"
+}
+
+.fa-comment-alt:before {
+ content: "\f27a"
+}
+
+.fa-comment-dollar:before {
+ content: "\f651"
+}
+
+.fa-comment-dots:before {
+ content: "\f4ad"
+}
+
+.fa-comment-medical:before {
+ content: "\f7f5"
+}
+
+.fa-comment-slash:before {
+ content: "\f4b3"
+}
+
+.fa-comments:before {
+ content: "\f086"
+}
+
+.fa-comments-dollar:before {
+ content: "\f653"
+}
+
+.fa-compact-disc:before {
+ content: "\f51f"
+}
+
+.fa-compass:before {
+ content: "\f14e"
+}
+
+.fa-compress:before {
+ content: "\f066"
+}
+
+.fa-compress-arrows-alt:before {
+ content: "\f78c"
+}
+
+.fa-concierge-bell:before {
+ content: "\f562"
+}
+
+.fa-confluence:before {
+ content: "\f78d"
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e"
+}
+
+.fa-contao:before {
+ content: "\f26d"
+}
+
+.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-cpanel:before {
+ content: "\f388"
+}
+
+.fa-creative-commons:before {
+ content: "\f25e"
+}
+
+.fa-creative-commons-by:before {
+ content: "\f4e7"
+}
+
+.fa-creative-commons-nc:before {
+ content: "\f4e8"
+}
+
+.fa-creative-commons-nc-eu:before {
+ content: "\f4e9"
+}
+
+.fa-creative-commons-nc-jp:before {
+ content: "\f4ea"
+}
+
+.fa-creative-commons-nd:before {
+ content: "\f4eb"
+}
+
+.fa-creative-commons-pd:before {
+ content: "\f4ec"
+}
+
+.fa-creative-commons-pd-alt:before {
+ content: "\f4ed"
+}
+
+.fa-creative-commons-remix:before {
+ content: "\f4ee"
+}
+
+.fa-creative-commons-sa:before {
+ content: "\f4ef"
+}
+
+.fa-creative-commons-sampling:before {
+ content: "\f4f0"
+}
+
+.fa-creative-commons-sampling-plus:before {
+ content: "\f4f1"
+}
+
+.fa-creative-commons-share:before {
+ content: "\f4f2"
+}
+
+.fa-creative-commons-zero:before {
+ content: "\f4f3"
+}
+
+.fa-credit-card:before {
+ content: "\f09d"
+}
+
+.fa-critical-role:before {
+ content: "\f6c9"
+}
+
+.fa-crop:before {
+ content: "\f125"
+}
+
+.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-css3:before {
+ content: "\f13c"
+}
+
+.fa-css3-alt:before {
+ content: "\f38b"
+}
+
+.fa-cube:before {
+ content: "\f1b2"
+}
+
+.fa-cubes:before {
+ content: "\f1b3"
+}
+
+.fa-cut:before {
+ content: "\f0c4"
+}
+
+.fa-cuttlefish:before {
+ content: "\f38c"
+}
+
+.fa-d-and-d:before {
+ content: "\f38d"
+}
+
+.fa-d-and-d-beyond:before {
+ content: "\f6ca"
+}
+
+.fa-dashcube:before {
+ content: "\f210"
+}
+
+.fa-database:before {
+ content: "\f1c0"
+}
+
+.fa-deaf:before {
+ content: "\f2a4"
+}
+
+.fa-delicious:before {
+ content: "\f1a5"
+}
+
+.fa-democrat:before {
+ content: "\f747"
+}
+
+.fa-deploydog:before {
+ content: "\f38e"
+}
+
+.fa-deskpro:before {
+ content: "\f38f"
+}
+
+.fa-desktop:before {
+ content: "\f108"
+}
+
+.fa-dev:before {
+ content: "\f6cc"
+}
+
+.fa-deviantart:before {
+ content: "\f1bd"
+}
+
+.fa-dharmachakra:before {
+ content: "\f655"
+}
+
+.fa-dhl:before {
+ content: "\f790"
+}
+
+.fa-diagnoses:before {
+ content: "\f470"
+}
+
+.fa-diaspora:before {
+ content: "\f791"
+}
+
+.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-digg:before {
+ content: "\f1a6"
+}
+
+.fa-digital-ocean:before {
+ content: "\f391"
+}
+
+.fa-digital-tachograph:before {
+ content: "\f566"
+}
+
+.fa-directions:before {
+ content: "\f5eb"
+}
+
+.fa-discord:before {
+ content: "\f392"
+}
+
+.fa-discourse:before {
+ content: "\f393"
+}
+
+.fa-divide:before {
+ content: "\f529"
+}
+
+.fa-dizzy:before {
+ content: "\f567"
+}
+
+.fa-dna:before {
+ content: "\f471"
+}
+
+.fa-dochub:before {
+ content: "\f394"
+}
+
+.fa-docker:before {
+ content: "\f395"
+}
+
+.fa-dog:before {
+ content: "\f6d3"
+}
+
+.fa-dollar-sign:before {
+ content: "\f155"
+}
+
+.fa-dolly:before {
+ content: "\f472"
+}
+
+.fa-dolly-flatbed:before {
+ content: "\f474"
+}
+
+.fa-donate:before {
+ content: "\f4b9"
+}
+
+.fa-door-closed:before {
+ content: "\f52a"
+}
+
+.fa-door-open:before {
+ content: "\f52b"
+}
+
+.fa-dot-circle:before {
+ content: "\f192"
+}
+
+.fa-dove:before {
+ content: "\f4ba"
+}
+
+.fa-download:before {
+ content: "\f019"
+}
+
+.fa-draft2digital:before {
+ content: "\f396"
+}
+
+.fa-drafting-compass:before {
+ content: "\f568"
+}
+
+.fa-dragon:before {
+ content: "\f6d5"
+}
+
+.fa-draw-polygon:before {
+ content: "\f5ee"
+}
+
+.fa-dribbble:before {
+ content: "\f17d"
+}
+
+.fa-dribbble-square:before {
+ content: "\f397"
+}
+
+.fa-dropbox:before {
+ content: "\f16b"
+}
+
+.fa-drum:before {
+ content: "\f569"
+}
+
+.fa-drum-steelpan:before {
+ content: "\f56a"
+}
+
+.fa-drumstick-bite:before {
+ content: "\f6d7"
+}
+
+.fa-drupal:before {
+ content: "\f1a9"
+}
+
+.fa-dumbbell:before {
+ content: "\f44b"
+}
+
+.fa-dumpster:before {
+ content: "\f793"
+}
+
+.fa-dumpster-fire:before {
+ content: "\f794"
+}
+
+.fa-dungeon:before {
+ content: "\f6d9"
+}
+
+.fa-dyalog:before {
+ content: "\f399"
+}
+
+.fa-earlybirds:before {
+ content: "\f39a"
+}
+
+.fa-ebay:before {
+ content: "\f4f4"
+}
+
+.fa-edge:before {
+ content: "\f282"
+}
+
+.fa-edit:before {
+ content: "\f044"
+}
+
+.fa-egg:before {
+ content: "\f7fb"
+}
+
+.fa-eject:before {
+ content: "\f052"
+}
+
+.fa-elementor:before {
+ content: "\f430"
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141"
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142"
+}
+
+.fa-ello:before {
+ content: "\f5f1"
+}
+
+.fa-ember:before {
+ content: "\f423"
+}
+
+.fa-empire:before {
+ content: "\f1d1"
+}
+
+.fa-envelope:before {
+ content: "\f0e0"
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6"
+}
+
+.fa-envelope-open-text:before {
+ content: "\f658"
+}
+
+.fa-envelope-square:before {
+ content: "\f199"
+}
+
+.fa-envira:before {
+ content: "\f299"
+}
+
+.fa-equals:before {
+ content: "\f52c"
+}
+
+.fa-eraser:before {
+ content: "\f12d"
+}
+
+.fa-erlang:before {
+ content: "\f39d"
+}
+
+.fa-ethereum:before {
+ content: "\f42e"
+}
+
+.fa-ethernet:before {
+ content: "\f796"
+}
+
+.fa-etsy:before {
+ content: "\f2d7"
+}
+
+.fa-euro-sign:before {
+ content: "\f153"
+}
+
+.fa-evernote:before {
+ content: "\f839"
+}
+
+.fa-exchange-alt:before {
+ content: "\f362"
+}
+
+.fa-exclamation:before {
+ content: "\f12a"
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a"
+}
+
+.fa-exclamation-triangle:before {
+ content: "\f071"
+}
+
+.fa-expand:before {
+ content: "\f065"
+}
+
+.fa-expand-arrows-alt:before {
+ content: "\f31e"
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e"
+}
+
+.fa-external-link-alt:before {
+ content: "\f35d"
+}
+
+.fa-external-link-square-alt:before {
+ content: "\f360"
+}
+
+.fa-eye:before {
+ content: "\f06e"
+}
+
+.fa-eye-dropper:before {
+ content: "\f1fb"
+}
+
+.fa-eye-slash:before {
+ content: "\f070"
+}
+
+.fa-facebook:before {
+ content: "\f09a"
+}
+
+.fa-facebook-f:before {
+ content: "\f39e"
+}
+
+.fa-facebook-messenger:before {
+ content: "\f39f"
+}
+
+.fa-facebook-square:before {
+ content: "\f082"
+}
+
+.fa-fantasy-flight-games:before {
+ content: "\f6dc"
+}
+
+.fa-fast-backward:before {
+ content: "\f049"
+}
+
+.fa-fast-forward:before {
+ content: "\f050"
+}
+
+.fa-fax:before {
+ content: "\f1ac"
+}
+
+.fa-feather:before {
+ content: "\f52d"
+}
+
+.fa-feather-alt:before {
+ content: "\f56b"
+}
+
+.fa-fedex:before {
+ content: "\f797"
+}
+
+.fa-fedora:before {
+ content: "\f798"
+}
+
+.fa-female:before {
+ content: "\f182"
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb"
+}
+
+.fa-figma:before {
+ content: "\f799"
+}
+
+.fa-file:before {
+ content: "\f15b"
+}
+
+.fa-file-alt:before {
+ content: "\f15c"
+}
+
+.fa-file-archive:before {
+ content: "\f1c6"
+}
+
+.fa-file-audio:before {
+ content: "\f1c7"
+}
+
+.fa-file-code:before {
+ content: "\f1c9"
+}
+
+.fa-file-contract:before {
+ content: "\f56c"
+}
+
+.fa-file-csv:before {
+ content: "\f6dd"
+}
+
+.fa-file-download:before {
+ content: "\f56d"
+}
+
+.fa-file-excel:before {
+ content: "\f1c3"
+}
+
+.fa-file-export:before {
+ content: "\f56e"
+}
+
+.fa-file-image:before {
+ content: "\f1c5"
+}
+
+.fa-file-import:before {
+ content: "\f56f"
+}
+
+.fa-file-invoice:before {
+ content: "\f570"
+}
+
+.fa-file-invoice-dollar:before {
+ content: "\f571"
+}
+
+.fa-file-medical:before {
+ content: "\f477"
+}
+
+.fa-file-medical-alt:before {
+ content: "\f478"
+}
+
+.fa-file-pdf:before {
+ content: "\f1c1"
+}
+
+.fa-file-powerpoint:before {
+ content: "\f1c4"
+}
+
+.fa-file-prescription:before {
+ content: "\f572"
+}
+
+.fa-file-signature:before {
+ content: "\f573"
+}
+
+.fa-file-upload:before {
+ content: "\f574"
+}
+
+.fa-file-video:before {
+ content: "\f1c8"
+}
+
+.fa-file-word:before {
+ content: "\f1c2"
+}
+
+.fa-fill:before {
+ content: "\f575"
+}
+
+.fa-fill-drip:before {
+ content: "\f576"
+}
+
+.fa-film:before {
+ content: "\f008"
+}
+
+.fa-filter:before {
+ content: "\f0b0"
+}
+
+.fa-fingerprint:before {
+ content: "\f577"
+}
+
+.fa-fire:before {
+ content: "\f06d"
+}
+
+.fa-fire-alt:before {
+ content: "\f7e4"
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134"
+}
+
+.fa-firefox:before {
+ content: "\f269"
+}
+
+.fa-first-aid:before {
+ content: "\f479"
+}
+
+.fa-first-order:before {
+ content: "\f2b0"
+}
+
+.fa-first-order-alt:before {
+ content: "\f50a"
+}
+
+.fa-firstdraft:before {
+ content: "\f3a1"
+}
+
+.fa-fish:before {
+ content: "\f578"
+}
+
+.fa-fist-raised:before {
+ content: "\f6de"
+}
+
+.fa-flag:before {
+ content: "\f024"
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e"
+}
+
+.fa-flag-usa:before {
+ content: "\f74d"
+}
+
+.fa-flask:before {
+ content: "\f0c3"
+}
+
+.fa-flickr:before {
+ content: "\f16e"
+}
+
+.fa-flipboard:before {
+ content: "\f44d"
+}
+
+.fa-flushed:before {
+ content: "\f579"
+}
+
+.fa-fly:before {
+ content: "\f417"
+}
+
+.fa-folder:before {
+ content: "\f07b"
+}
+
+.fa-folder-minus:before {
+ content: "\f65d"
+}
+
+.fa-folder-open:before {
+ content: "\f07c"
+}
+
+.fa-folder-plus:before {
+ content: "\f65e"
+}
+
+.fa-font:before {
+ content: "\f031"
+}
+
+.fa-font-awesome:before {
+ content: "\f2b4"
+}
+
+.fa-font-awesome-alt:before {
+ content: "\f35c"
+}
+
+.fa-font-awesome-flag:before {
+ content: "\f425"
+}
+
+.fa-font-awesome-logo-full:before {
+ content: "\f4e6"
+}
+
+.fa-fonticons:before {
+ content: "\f280"
+}
+
+.fa-fonticons-fi:before {
+ content: "\f3a2"
+}
+
+.fa-football-ball:before {
+ content: "\f44e"
+}
+
+.fa-fort-awesome:before {
+ content: "\f286"
+}
+
+.fa-fort-awesome-alt:before {
+ content: "\f3a3"
+}
+
+.fa-forumbee:before {
+ content: "\f211"
+}
+
+.fa-forward:before {
+ content: "\f04e"
+}
+
+.fa-foursquare:before {
+ content: "\f180"
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5"
+}
+
+.fa-freebsd:before {
+ content: "\f3a4"
+}
+
+.fa-frog:before {
+ content: "\f52e"
+}
+
+.fa-frown:before {
+ content: "\f119"
+}
+
+.fa-frown-open:before {
+ content: "\f57a"
+}
+
+.fa-fulcrum:before {
+ content: "\f50b"
+}
+
+.fa-funnel-dollar:before {
+ content: "\f662"
+}
+
+.fa-futbol:before {
+ content: "\f1e3"
+}
+
+.fa-galactic-republic:before {
+ content: "\f50c"
+}
+
+.fa-galactic-senate:before {
+ content: "\f50d"
+}
+
+.fa-gamepad:before {
+ content: "\f11b"
+}
+
+.fa-gas-pump:before {
+ content: "\f52f"
+}
+
+.fa-gavel:before {
+ content: "\f0e3"
+}
+
+.fa-gem:before {
+ content: "\f3a5"
+}
+
+.fa-genderless:before {
+ content: "\f22d"
+}
+
+.fa-get-pocket:before {
+ content: "\f265"
+}
+
+.fa-gg:before {
+ content: "\f260"
+}
+
+.fa-gg-circle:before {
+ content: "\f261"
+}
+
+.fa-ghost:before {
+ content: "\f6e2"
+}
+
+.fa-gift:before {
+ content: "\f06b"
+}
+
+.fa-gifts:before {
+ content: "\f79c"
+}
+
+.fa-git:before {
+ content: "\f1d3"
+}
+
+.fa-git-alt:before {
+ content: "\f841"
+}
+
+.fa-git-square:before {
+ content: "\f1d2"
+}
+
+.fa-github:before {
+ content: "\f09b"
+}
+
+.fa-github-alt:before {
+ content: "\f113"
+}
+
+.fa-github-square:before {
+ content: "\f092"
+}
+
+.fa-gitkraken:before {
+ content: "\f3a6"
+}
+
+.fa-gitlab:before {
+ content: "\f296"
+}
+
+.fa-gitter:before {
+ content: "\f426"
+}
+
+.fa-glass-cheers:before {
+ content: "\f79f"
+}
+
+.fa-glass-martini:before {
+ content: "\f000"
+}
+
+.fa-glass-martini-alt:before {
+ content: "\f57b"
+}
+
+.fa-glass-whiskey:before {
+ content: "\f7a0"
+}
+
+.fa-glasses:before {
+ content: "\f530"
+}
+
+.fa-glide:before {
+ content: "\f2a5"
+}
+
+.fa-glide-g:before {
+ content: "\f2a6"
+}
+
+.fa-globe:before {
+ content: "\f0ac"
+}
+
+.fa-globe-africa:before {
+ content: "\f57c"
+}
+
+.fa-globe-americas:before {
+ content: "\f57d"
+}
+
+.fa-globe-asia:before {
+ content: "\f57e"
+}
+
+.fa-globe-europe:before {
+ content: "\f7a2"
+}
+
+.fa-gofore:before {
+ content: "\f3a7"
+}
+
+.fa-golf-ball:before {
+ content: "\f450"
+}
+
+.fa-goodreads:before {
+ content: "\f3a8"
+}
+
+.fa-goodreads-g:before {
+ content: "\f3a9"
+}
+
+.fa-google:before {
+ content: "\f1a0"
+}
+
+.fa-google-drive:before {
+ content: "\f3aa"
+}
+
+.fa-google-play:before {
+ content: "\f3ab"
+}
+
+.fa-google-plus:before {
+ content: "\f2b3"
+}
+
+.fa-google-plus-g:before {
+ content: "\f0d5"
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4"
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee"
+}
+
+.fa-gopuram:before {
+ content: "\f664"
+}
+
+.fa-graduation-cap:before {
+ content: "\f19d"
+}
+
+.fa-gratipay:before {
+ content: "\f184"
+}
+
+.fa-grav:before {
+ content: "\f2d6"
+}
+
+.fa-greater-than:before {
+ content: "\f531"
+}
+
+.fa-greater-than-equal:before {
+ content: "\f532"
+}
+
+.fa-grimace:before {
+ content: "\f57f"
+}
+
+.fa-grin:before {
+ content: "\f580"
+}
+
+.fa-grin-alt:before {
+ content: "\f581"
+}
+
+.fa-grin-beam:before {
+ content: "\f582"
+}
+
+.fa-grin-beam-sweat:before {
+ content: "\f583"
+}
+
+.fa-grin-hearts:before {
+ content: "\f584"
+}
+
+.fa-grin-squint:before {
+ content: "\f585"
+}
+
+.fa-grin-squint-tears:before {
+ content: "\f586"
+}
+
+.fa-grin-stars:before {
+ content: "\f587"
+}
+
+.fa-grin-tears:before {
+ content: "\f588"
+}
+
+.fa-grin-tongue:before {
+ content: "\f589"
+}
+
+.fa-grin-tongue-squint:before {
+ content: "\f58a"
+}
+
+.fa-grin-tongue-wink:before {
+ content: "\f58b"
+}
+
+.fa-grin-wink:before {
+ content: "\f58c"
+}
+
+.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-gripfire:before {
+ content: "\f3ac"
+}
+
+.fa-grunt:before {
+ content: "\f3ad"
+}
+
+.fa-guitar:before {
+ content: "\f7a6"
+}
+
+.fa-gulp:before {
+ content: "\f3ae"
+}
+
+.fa-h-square:before {
+ content: "\f0fd"
+}
+
+.fa-hacker-news:before {
+ content: "\f1d4"
+}
+
+.fa-hacker-news-square:before {
+ content: "\f3af"
+}
+
+.fa-hackerrank:before {
+ content: "\f5f7"
+}
+
+.fa-hamburger:before {
+ content: "\f805"
+}
+
+.fa-hammer:before {
+ content: "\f6e3"
+}
+
+.fa-hamsa:before {
+ content: "\f665"
+}
+
+.fa-hand-holding:before {
+ content: "\f4bd"
+}
+
+.fa-hand-holding-heart:before {
+ content: "\f4be"
+}
+
+.fa-hand-holding-usd:before {
+ content: "\f4c0"
+}
+
+.fa-hand-lizard:before {
+ content: "\f258"
+}
+
+.fa-hand-middle-finger:before {
+ content: "\f806"
+}
+
+.fa-hand-paper:before {
+ content: "\f256"
+}
+
+.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-rock:before {
+ content: "\f255"
+}
+
+.fa-hand-scissors:before {
+ content: "\f257"
+}
+
+.fa-hand-spock:before {
+ content: "\f259"
+}
+
+.fa-hands:before {
+ content: "\f4c2"
+}
+
+.fa-hands-helping:before {
+ content: "\f4c4"
+}
+
+.fa-handshake:before {
+ content: "\f2b5"
+}
+
+.fa-hanukiah:before {
+ content: "\f6e6"
+}
+
+.fa-hard-hat:before {
+ content: "\f807"
+}
+
+.fa-hashtag:before {
+ content: "\f292"
+}
+
+.fa-hat-wizard:before {
+ content: "\f6e8"
+}
+
+.fa-haykal:before {
+ content: "\f666"
+}
+
+.fa-hdd:before {
+ content: "\f0a0"
+}
+
+.fa-heading:before {
+ content: "\f1dc"
+}
+
+.fa-headphones:before {
+ content: "\f025"
+}
+
+.fa-headphones-alt:before {
+ content: "\f58f"
+}
+
+.fa-headset:before {
+ content: "\f590"
+}
+
+.fa-heart:before {
+ content: "\f004"
+}
+
+.fa-heart-broken:before {
+ content: "\f7a9"
+}
+
+.fa-heartbeat:before {
+ content: "\f21e"
+}
+
+.fa-helicopter:before {
+ content: "\f533"
+}
+
+.fa-highlighter:before {
+ content: "\f591"
+}
+
+.fa-hiking:before {
+ content: "\f6ec"
+}
+
+.fa-hippo:before {
+ content: "\f6ed"
+}
+
+.fa-hips:before {
+ content: "\f452"
+}
+
+.fa-hire-a-helper:before {
+ content: "\f3b0"
+}
+
+.fa-history:before {
+ content: "\f1da"
+}
+
+.fa-hockey-puck:before {
+ content: "\f453"
+}
+
+.fa-holly-berry:before {
+ content: "\f7aa"
+}
+
+.fa-home:before {
+ content: "\f015"
+}
+
+.fa-hooli:before {
+ content: "\f427"
+}
+
+.fa-hornbill:before {
+ content: "\f592"
+}
+
+.fa-horse:before {
+ content: "\f6f0"
+}
+
+.fa-horse-head:before {
+ content: "\f7ab"
+}
+
+.fa-hospital:before {
+ content: "\f0f8"
+}
+
+.fa-hospital-alt:before {
+ content: "\f47d"
+}
+
+.fa-hospital-symbol:before {
+ content: "\f47e"
+}
+
+.fa-hot-tub:before {
+ content: "\f593"
+}
+
+.fa-hotdog:before {
+ content: "\f80f"
+}
+
+.fa-hotel:before {
+ content: "\f594"
+}
+
+.fa-hotjar:before {
+ content: "\f3b1"
+}
+
+.fa-hourglass:before {
+ content: "\f254"
+}
+
+.fa-hourglass-end:before {
+ content: "\f253"
+}
+
+.fa-hourglass-half:before {
+ content: "\f252"
+}
+
+.fa-hourglass-start:before {
+ content: "\f251"
+}
+
+.fa-house-damage:before {
+ content: "\f6f1"
+}
+
+.fa-houzz:before {
+ content: "\f27c"
+}
+
+.fa-hryvnia:before {
+ content: "\f6f2"
+}
+
+.fa-html5:before {
+ content: "\f13b"
+}
+
+.fa-hubspot:before {
+ content: "\f3b2"
+}
+
+.fa-i-cursor:before {
+ content: "\f246"
+}
+
+.fa-ice-cream:before {
+ content: "\f810"
+}
+
+.fa-icicles:before {
+ content: "\f7ad"
+}
+
+.fa-id-badge:before {
+ content: "\f2c1"
+}
+
+.fa-id-card:before {
+ content: "\f2c2"
+}
+
+.fa-id-card-alt:before {
+ content: "\f47f"
+}
+
+.fa-igloo:before {
+ content: "\f7ae"
+}
+
+.fa-image:before {
+ content: "\f03e"
+}
+
+.fa-images:before {
+ content: "\f302"
+}
+
+.fa-imdb:before {
+ content: "\f2d8"
+}
+
+.fa-inbox:before {
+ content: "\f01c"
+}
+
+.fa-indent:before {
+ content: "\f03c"
+}
+
+.fa-industry:before {
+ content: "\f275"
+}
+
+.fa-infinity:before {
+ content: "\f534"
+}
+
+.fa-info:before {
+ content: "\f129"
+}
+
+.fa-info-circle:before {
+ content: "\f05a"
+}
+
+.fa-instagram:before {
+ content: "\f16d"
+}
+
+.fa-intercom:before {
+ content: "\f7af"
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b"
+}
+
+.fa-invision:before {
+ content: "\f7b0"
+}
+
+.fa-ioxhost:before {
+ content: "\f208"
+}
+
+.fa-italic:before {
+ content: "\f033"
+}
+
+.fa-itch-io:before {
+ content: "\f83a"
+}
+
+.fa-itunes:before {
+ content: "\f3b4"
+}
+
+.fa-itunes-note:before {
+ content: "\f3b5"
+}
+
+.fa-java:before {
+ content: "\f4e4"
+}
+
+.fa-jedi:before {
+ content: "\f669"
+}
+
+.fa-jedi-order:before {
+ content: "\f50e"
+}
+
+.fa-jenkins:before {
+ content: "\f3b6"
+}
+
+.fa-jira:before {
+ content: "\f7b1"
+}
+
+.fa-joget:before {
+ content: "\f3b7"
+}
+
+.fa-joint:before {
+ content: "\f595"
+}
+
+.fa-joomla:before {
+ content: "\f1aa"
+}
+
+.fa-journal-whills:before {
+ content: "\f66a"
+}
+
+.fa-js:before {
+ content: "\f3b8"
+}
+
+.fa-js-square:before {
+ content: "\f3b9"
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc"
+}
+
+.fa-kaaba:before {
+ content: "\f66b"
+}
+
+.fa-kaggle:before {
+ content: "\f5fa"
+}
+
+.fa-key:before {
+ content: "\f084"
+}
+
+.fa-keybase:before {
+ content: "\f4f5"
+}
+
+.fa-keyboard:before {
+ content: "\f11c"
+}
+
+.fa-keycdn:before {
+ content: "\f3ba"
+}
+
+.fa-khanda:before {
+ content: "\f66d"
+}
+
+.fa-kickstarter:before {
+ content: "\f3bb"
+}
+
+.fa-kickstarter-k:before {
+ content: "\f3bc"
+}
+
+.fa-kiss:before {
+ content: "\f596"
+}
+
+.fa-kiss-beam:before {
+ content: "\f597"
+}
+
+.fa-kiss-wink-heart:before {
+ content: "\f598"
+}
+
+.fa-kiwi-bird:before {
+ content: "\f535"
+}
+
+.fa-korvue:before {
+ content: "\f42f"
+}
+
+.fa-landmark:before {
+ content: "\f66f"
+}
+
+.fa-language:before {
+ content: "\f1ab"
+}
+
+.fa-laptop:before {
+ content: "\f109"
+}
+
+.fa-laptop-code:before {
+ content: "\f5fc"
+}
+
+.fa-laptop-medical:before {
+ content: "\f812"
+}
+
+.fa-laravel:before {
+ content: "\f3bd"
+}
+
+.fa-lastfm:before {
+ content: "\f202"
+}
+
+.fa-lastfm-square:before {
+ content: "\f203"
+}
+
+.fa-laugh:before {
+ content: "\f599"
+}
+
+.fa-laugh-beam:before {
+ content: "\f59a"
+}
+
+.fa-laugh-squint:before {
+ content: "\f59b"
+}
+
+.fa-laugh-wink:before {
+ content: "\f59c"
+}
+
+.fa-layer-group:before {
+ content: "\f5fd"
+}
+
+.fa-leaf:before {
+ content: "\f06c"
+}
+
+.fa-leanpub:before {
+ content: "\f212"
+}
+
+.fa-lemon:before {
+ content: "\f094"
+}
+
+.fa-less:before {
+ content: "\f41d"
+}
+
+.fa-less-than:before {
+ content: "\f536"
+}
+
+.fa-less-than-equal:before {
+ content: "\f537"
+}
+
+.fa-level-down-alt:before {
+ content: "\f3be"
+}
+
+.fa-level-up-alt:before {
+ content: "\f3bf"
+}
+
+.fa-life-ring:before {
+ content: "\f1cd"
+}
+
+.fa-lightbulb:before {
+ content: "\f0eb"
+}
+
+.fa-line:before {
+ content: "\f3c0"
+}
+
+.fa-link:before {
+ content: "\f0c1"
+}
+
+.fa-linkedin:before {
+ content: "\f08c"
+}
+
+.fa-linkedin-in:before {
+ content: "\f0e1"
+}
+
+.fa-linode:before {
+ content: "\f2b8"
+}
+
+.fa-linux:before {
+ content: "\f17c"
+}
+
+.fa-lira-sign:before {
+ content: "\f195"
+}
+
+.fa-list:before {
+ content: "\f03a"
+}
+
+.fa-list-alt:before {
+ content: "\f022"
+}
+
+.fa-list-ol:before {
+ content: "\f0cb"
+}
+
+.fa-list-ul:before {
+ content: "\f0ca"
+}
+
+.fa-location-arrow:before {
+ content: "\f124"
+}
+
+.fa-lock:before {
+ content: "\f023"
+}
+
+.fa-lock-open:before {
+ content: "\f3c1"
+}
+
+.fa-long-arrow-alt-down:before {
+ content: "\f309"
+}
+
+.fa-long-arrow-alt-left:before {
+ content: "\f30a"
+}
+
+.fa-long-arrow-alt-right:before {
+ content: "\f30b"
+}
+
+.fa-long-arrow-alt-up:before {
+ content: "\f30c"
+}
+
+.fa-low-vision:before {
+ content: "\f2a8"
+}
+
+.fa-luggage-cart:before {
+ content: "\f59d"
+}
+
+.fa-lyft:before {
+ content: "\f3c3"
+}
+
+.fa-magento:before {
+ content: "\f3c4"
+}
+
+.fa-magic:before {
+ content: "\f0d0"
+}
+
+.fa-magnet:before {
+ content: "\f076"
+}
+
+.fa-mail-bulk:before {
+ content: "\f674"
+}
+
+.fa-mailchimp:before {
+ content: "\f59e"
+}
+
+.fa-male:before {
+ content: "\f183"
+}
+
+.fa-mandalorian:before {
+ content: "\f50f"
+}
+
+.fa-map:before {
+ content: "\f279"
+}
+
+.fa-map-marked:before {
+ content: "\f59f"
+}
+
+.fa-map-marked-alt:before {
+ content: "\f5a0"
+}
+
+.fa-map-marker:before {
+ content: "\f041"
+}
+
+.fa-map-marker-alt:before {
+ content: "\f3c5"
+}
+
+.fa-map-pin:before {
+ content: "\f276"
+}
+
+.fa-map-signs:before {
+ content: "\f277"
+}
+
+.fa-markdown:before {
+ content: "\f60f"
+}
+
+.fa-marker:before {
+ content: "\f5a1"
+}
+
+.fa-mars:before {
+ content: "\f222"
+}
+
+.fa-mars-double:before {
+ content: "\f227"
+}
+
+.fa-mars-stroke:before {
+ content: "\f229"
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b"
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a"
+}
+
+.fa-mask:before {
+ content: "\f6fa"
+}
+
+.fa-mastodon:before {
+ content: "\f4f6"
+}
+
+.fa-maxcdn:before {
+ content: "\f136"
+}
+
+.fa-medal:before {
+ content: "\f5a2"
+}
+
+.fa-medapps:before {
+ content: "\f3c6"
+}
+
+.fa-medium:before {
+ content: "\f23a"
+}
+
+.fa-medium-m:before {
+ content: "\f3c7"
+}
+
+.fa-medkit:before {
+ content: "\f0fa"
+}
+
+.fa-medrt:before {
+ content: "\f3c8"
+}
+
+.fa-meetup:before {
+ content: "\f2e0"
+}
+
+.fa-megaport:before {
+ content: "\f5a3"
+}
+
+.fa-meh:before {
+ content: "\f11a"
+}
+
+.fa-meh-blank:before {
+ content: "\f5a4"
+}
+
+.fa-meh-rolling-eyes:before {
+ content: "\f5a5"
+}
+
+.fa-memory:before {
+ content: "\f538"
+}
+
+.fa-mendeley:before {
+ content: "\f7b3"
+}
+
+.fa-menorah:before {
+ content: "\f676"
+}
+
+.fa-mercury:before {
+ content: "\f223"
+}
+
+.fa-meteor:before {
+ content: "\f753"
+}
+
+.fa-microchip:before {
+ content: "\f2db"
+}
+
+.fa-microphone:before {
+ content: "\f130"
+}
+
+.fa-microphone-alt:before {
+ content: "\f3c9"
+}
+
+.fa-microphone-alt-slash:before {
+ content: "\f539"
+}
+
+.fa-microphone-slash:before {
+ content: "\f131"
+}
+
+.fa-microscope:before {
+ content: "\f610"
+}
+
+.fa-microsoft:before {
+ content: "\f3ca"
+}
+
+.fa-minus:before {
+ content: "\f068"
+}
+
+.fa-minus-circle:before {
+ content: "\f056"
+}
+
+.fa-minus-square:before {
+ content: "\f146"
+}
+
+.fa-mitten:before {
+ content: "\f7b5"
+}
+
+.fa-mix:before {
+ content: "\f3cb"
+}
+
+.fa-mixcloud:before {
+ content: "\f289"
+}
+
+.fa-mizuni:before {
+ content: "\f3cc"
+}
+
+.fa-mobile:before {
+ content: "\f10b"
+}
+
+.fa-mobile-alt:before {
+ content: "\f3cd"
+}
+
+.fa-modx:before {
+ content: "\f285"
+}
+
+.fa-monero:before {
+ content: "\f3d0"
+}
+
+.fa-money-bill:before {
+ content: "\f0d6"
+}
+
+.fa-money-bill-alt:before {
+ content: "\f3d1"
+}
+
+.fa-money-bill-wave:before {
+ content: "\f53a"
+}
+
+.fa-money-bill-wave-alt:before {
+ content: "\f53b"
+}
+
+.fa-money-check:before {
+ content: "\f53c"
+}
+
+.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-motorcycle:before {
+ content: "\f21c"
+}
+
+.fa-mountain:before {
+ content: "\f6fc"
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245"
+}
+
+.fa-mug-hot:before {
+ content: "\f7b6"
+}
+
+.fa-music:before {
+ content: "\f001"
+}
+
+.fa-napster:before {
+ content: "\f3d2"
+}
+
+.fa-neos:before {
+ content: "\f612"
+}
+
+.fa-network-wired:before {
+ content: "\f6ff"
+}
+
+.fa-neuter:before {
+ content: "\f22c"
+}
+
+.fa-newspaper:before {
+ content: "\f1ea"
+}
+
+.fa-nimblr:before {
+ content: "\f5a8"
+}
+
+.fa-nintendo-switch:before {
+ content: "\f418"
+}
+
+.fa-node:before {
+ content: "\f419"
+}
+
+.fa-node-js:before {
+ content: "\f3d3"
+}
+
+.fa-not-equal:before {
+ content: "\f53e"
+}
+
+.fa-notes-medical:before {
+ content: "\f481"
+}
+
+.fa-npm:before {
+ content: "\f3d4"
+}
+
+.fa-ns8:before {
+ content: "\f3d5"
+}
+
+.fa-nutritionix:before {
+ content: "\f3d6"
+}
+
+.fa-object-group:before {
+ content: "\f247"
+}
+
+.fa-object-ungroup:before {
+ content: "\f248"
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263"
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264"
+}
+
+.fa-oil-can:before {
+ content: "\f613"
+}
+
+.fa-old-republic:before {
+ content: "\f510"
+}
+
+.fa-om:before {
+ content: "\f679"
+}
+
+.fa-opencart:before {
+ content: "\f23d"
+}
+
+.fa-openid:before {
+ content: "\f19b"
+}
+
+.fa-opera:before {
+ content: "\f26a"
+}
+
+.fa-optin-monster:before {
+ content: "\f23c"
+}
+
+.fa-osi:before {
+ content: "\f41a"
+}
+
+.fa-otter:before {
+ content: "\f700"
+}
+
+.fa-outdent:before {
+ content: "\f03b"
+}
+
+.fa-page4:before {
+ content: "\f3d7"
+}
+
+.fa-pagelines:before {
+ content: "\f18c"
+}
+
+.fa-pager:before {
+ content: "\f815"
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc"
+}
+
+.fa-paint-roller:before {
+ content: "\f5aa"
+}
+
+.fa-palette:before {
+ content: "\f53f"
+}
+
+.fa-palfed:before {
+ content: "\f3d8"
+}
+
+.fa-pallet:before {
+ content: "\f482"
+}
+
+.fa-paper-plane:before {
+ content: "\f1d8"
+}
+
+.fa-paperclip:before {
+ content: "\f0c6"
+}
+
+.fa-parachute-box:before {
+ content: "\f4cd"
+}
+
+.fa-paragraph:before {
+ content: "\f1dd"
+}
+
+.fa-parking:before {
+ content: "\f540"
+}
+
+.fa-passport:before {
+ content: "\f5ab"
+}
+
+.fa-pastafarianism:before {
+ content: "\f67b"
+}
+
+.fa-paste:before {
+ content: "\f0ea"
+}
+
+.fa-patreon:before {
+ content: "\f3d9"
+}
+
+.fa-pause:before {
+ content: "\f04c"
+}
+
+.fa-pause-circle:before {
+ content: "\f28b"
+}
+
+.fa-paw:before {
+ content: "\f1b0"
+}
+
+.fa-paypal:before {
+ content: "\f1ed"
+}
+
+.fa-peace:before {
+ content: "\f67c"
+}
+
+.fa-pen:before {
+ content: "\f304"
+}
+
+.fa-pen-alt:before {
+ content: "\f305"
+}
+
+.fa-pen-fancy:before {
+ content: "\f5ac"
+}
+
+.fa-pen-nib:before {
+ content: "\f5ad"
+}
+
+.fa-pen-square:before {
+ content: "\f14b"
+}
+
+.fa-pencil-alt:before {
+ content: "\f303"
+}
+
+.fa-pencil-ruler:before {
+ content: "\f5ae"
+}
+
+.fa-penny-arcade:before {
+ content: "\f704"
+}
+
+.fa-people-carry:before {
+ content: "\f4ce"
+}
+
+.fa-pepper-hot:before {
+ content: "\f816"
+}
+
+.fa-percent:before {
+ content: "\f295"
+}
+
+.fa-percentage:before {
+ content: "\f541"
+}
+
+.fa-periscope:before {
+ content: "\f3da"
+}
+
+.fa-person-booth:before {
+ content: "\f756"
+}
+
+.fa-phabricator:before {
+ content: "\f3db"
+}
+
+.fa-phoenix-framework:before {
+ content: "\f3dc"
+}
+
+.fa-phoenix-squadron:before {
+ content: "\f511"
+}
+
+.fa-phone:before {
+ content: "\f095"
+}
+
+.fa-phone-slash:before {
+ content: "\f3dd"
+}
+
+.fa-phone-square:before {
+ content: "\f098"
+}
+
+.fa-phone-volume:before {
+ content: "\f2a0"
+}
+
+.fa-php:before {
+ content: "\f457"
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae"
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8"
+}
+
+.fa-pied-piper-hat:before {
+ content: "\f4e5"
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7"
+}
+
+.fa-piggy-bank:before {
+ content: "\f4d3"
+}
+
+.fa-pills:before {
+ content: "\f484"
+}
+
+.fa-pinterest:before {
+ content: "\f0d2"
+}
+
+.fa-pinterest-p:before {
+ content: "\f231"
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3"
+}
+
+.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-departure:before {
+ content: "\f5b0"
+}
+
+.fa-play:before {
+ content: "\f04b"
+}
+
+.fa-play-circle:before {
+ content: "\f144"
+}
+
+.fa-playstation:before {
+ content: "\f3df"
+}
+
+.fa-plug:before {
+ content: "\f1e6"
+}
+
+.fa-plus:before {
+ content: "\f067"
+}
+
+.fa-plus-circle:before {
+ content: "\f055"
+}
+
+.fa-plus-square:before {
+ content: "\f0fe"
+}
+
+.fa-podcast:before {
+ content: "\f2ce"
+}
+
+.fa-poll:before {
+ content: "\f681"
+}
+
+.fa-poll-h:before {
+ content: "\f682"
+}
+
+.fa-poo:before {
+ content: "\f2fe"
+}
+
+.fa-poo-storm:before {
+ content: "\f75a"
+}
+
+.fa-poop:before {
+ content: "\f619"
+}
+
+.fa-portrait:before {
+ content: "\f3e0"
+}
+
+.fa-pound-sign:before {
+ content: "\f154"
+}
+
+.fa-power-off:before {
+ content: "\f011"
+}
+
+.fa-pray:before {
+ content: "\f683"
+}
+
+.fa-praying-hands:before {
+ content: "\f684"
+}
+
+.fa-prescription:before {
+ content: "\f5b1"
+}
+
+.fa-prescription-bottle:before {
+ content: "\f485"
+}
+
+.fa-prescription-bottle-alt:before {
+ content: "\f486"
+}
+
+.fa-print:before {
+ content: "\f02f"
+}
+
+.fa-procedures:before {
+ content: "\f487"
+}
+
+.fa-product-hunt:before {
+ content: "\f288"
+}
+
+.fa-project-diagram:before {
+ content: "\f542"
+}
+
+.fa-pushed:before {
+ content: "\f3e1"
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e"
+}
+
+.fa-python:before {
+ content: "\f3e2"
+}
+
+.fa-qq:before {
+ content: "\f1d6"
+}
+
+.fa-qrcode:before {
+ content: "\f029"
+}
+
+.fa-question:before {
+ content: "\f128"
+}
+
+.fa-question-circle:before {
+ content: "\f059"
+}
+
+.fa-quidditch:before {
+ content: "\f458"
+}
+
+.fa-quinscape:before {
+ content: "\f459"
+}
+
+.fa-quora:before {
+ content: "\f2c4"
+}
+
+.fa-quote-left:before {
+ content: "\f10d"
+}
+
+.fa-quote-right:before {
+ content: "\f10e"
+}
+
+.fa-quran:before {
+ content: "\f687"
+}
+
+.fa-r-project:before {
+ content: "\f4f7"
+}
+
+.fa-radiation:before {
+ content: "\f7b9"
+}
+
+.fa-radiation-alt:before {
+ content: "\f7ba"
+}
+
+.fa-rainbow:before {
+ content: "\f75b"
+}
+
+.fa-random:before {
+ content: "\f074"
+}
+
+.fa-raspberry-pi:before {
+ content: "\f7bb"
+}
+
+.fa-ravelry:before {
+ content: "\f2d9"
+}
+
+.fa-react:before {
+ content: "\f41b"
+}
+
+.fa-reacteurope:before {
+ content: "\f75d"
+}
+
+.fa-readme:before {
+ content: "\f4d5"
+}
+
+.fa-rebel:before {
+ content: "\f1d0"
+}
+
+.fa-receipt:before {
+ content: "\f543"
+}
+
+.fa-recycle:before {
+ content: "\f1b8"
+}
+
+.fa-red-river:before {
+ content: "\f3e3"
+}
+
+.fa-reddit:before {
+ content: "\f1a1"
+}
+
+.fa-reddit-alien:before {
+ content: "\f281"
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2"
+}
+
+.fa-redhat:before {
+ content: "\f7bc"
+}
+
+.fa-redo:before {
+ content: "\f01e"
+}
+
+.fa-redo-alt:before {
+ content: "\f2f9"
+}
+
+.fa-registered:before {
+ content: "\f25d"
+}
+
+.fa-renren:before {
+ content: "\f18b"
+}
+
+.fa-reply:before {
+ content: "\f3e5"
+}
+
+.fa-reply-all:before {
+ content: "\f122"
+}
+
+.fa-replyd:before {
+ content: "\f3e6"
+}
+
+.fa-republican:before {
+ content: "\f75e"
+}
+
+.fa-researchgate:before {
+ content: "\f4f8"
+}
+
+.fa-resolving:before {
+ content: "\f3e7"
+}
+
+.fa-restroom:before {
+ content: "\f7bd"
+}
+
+.fa-retweet:before {
+ content: "\f079"
+}
+
+.fa-rev:before {
+ content: "\f5b2"
+}
+
+.fa-ribbon:before {
+ content: "\f4d6"
+}
+
+.fa-ring:before {
+ content: "\f70b"
+}
+
+.fa-road:before {
+ content: "\f018"
+}
+
+.fa-robot:before {
+ content: "\f544"
+}
+
+.fa-rocket:before {
+ content: "\f135"
+}
+
+.fa-rocketchat:before {
+ content: "\f3e8"
+}
+
+.fa-rockrms:before {
+ content: "\f3e9"
+}
+
+.fa-route:before {
+ content: "\f4d7"
+}
+
+.fa-rss:before {
+ content: "\f09e"
+}
+
+.fa-rss-square:before {
+ content: "\f143"
+}
+
+.fa-ruble-sign:before {
+ content: "\f158"
+}
+
+.fa-ruler:before {
+ content: "\f545"
+}
+
+.fa-ruler-combined:before {
+ content: "\f546"
+}
+
+.fa-ruler-horizontal:before {
+ content: "\f547"
+}
+
+.fa-ruler-vertical:before {
+ content: "\f548"
+}
+
+.fa-running:before {
+ content: "\f70c"
+}
+
+.fa-rupee-sign:before {
+ content: "\f156"
+}
+
+.fa-sad-cry:before {
+ content: "\f5b3"
+}
+
+.fa-sad-tear:before {
+ content: "\f5b4"
+}
+
+.fa-safari:before {
+ content: "\f267"
+}
+
+.fa-salesforce:before {
+ content: "\f83b"
+}
+
+.fa-sass:before {
+ content: "\f41e"
+}
+
+.fa-satellite:before {
+ content: "\f7bf"
+}
+
+.fa-satellite-dish:before {
+ content: "\f7c0"
+}
+
+.fa-save:before {
+ content: "\f0c7"
+}
+
+.fa-schlix:before {
+ content: "\f3ea"
+}
+
+.fa-school:before {
+ content: "\f549"
+}
+
+.fa-screwdriver:before {
+ content: "\f54a"
+}
+
+.fa-scribd:before {
+ content: "\f28a"
+}
+
+.fa-scroll:before {
+ content: "\f70e"
+}
+
+.fa-sd-card:before {
+ content: "\f7c2"
+}
+
+.fa-search:before {
+ content: "\f002"
+}
+
+.fa-search-dollar:before {
+ content: "\f688"
+}
+
+.fa-search-location:before {
+ content: "\f689"
+}
+
+.fa-search-minus:before {
+ content: "\f010"
+}
+
+.fa-search-plus:before {
+ content: "\f00e"
+}
+
+.fa-searchengin:before {
+ content: "\f3eb"
+}
+
+.fa-seedling:before {
+ content: "\f4d8"
+}
+
+.fa-sellcast:before {
+ content: "\f2da"
+}
+
+.fa-sellsy:before {
+ content: "\f213"
+}
+
+.fa-server:before {
+ content: "\f233"
+}
+
+.fa-servicestack:before {
+ content: "\f3ec"
+}
+
+.fa-shapes:before {
+ content: "\f61f"
+}
+
+.fa-share:before {
+ content: "\f064"
+}
+
+.fa-share-alt:before {
+ content: "\f1e0"
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1"
+}
+
+.fa-share-square:before {
+ content: "\f14d"
+}
+
+.fa-shekel-sign:before {
+ content: "\f20b"
+}
+
+.fa-shield-alt:before {
+ content: "\f3ed"
+}
+
+.fa-ship:before {
+ content: "\f21a"
+}
+
+.fa-shipping-fast:before {
+ content: "\f48b"
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214"
+}
+
+.fa-shoe-prints:before {
+ content: "\f54b"
+}
+
+.fa-shopping-bag:before {
+ content: "\f290"
+}
+
+.fa-shopping-basket:before {
+ content: "\f291"
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a"
+}
+
+.fa-shopware:before {
+ content: "\f5b5"
+}
+
+.fa-shower:before {
+ content: "\f2cc"
+}
+
+.fa-shuttle-van:before {
+ content: "\f5b6"
+}
+
+.fa-sign:before {
+ content: "\f4d9"
+}
+
+.fa-sign-in-alt:before {
+ content: "\f2f6"
+}
+
+.fa-sign-language:before {
+ content: "\f2a7"
+}
+
+.fa-sign-out-alt:before {
+ content: "\f2f5"
+}
+
+.fa-signal:before {
+ content: "\f012"
+}
+
+.fa-signature:before {
+ content: "\f5b7"
+}
+
+.fa-sim-card:before {
+ content: "\f7c4"
+}
+
+.fa-simplybuilt:before {
+ content: "\f215"
+}
+
+.fa-sistrix:before {
+ content: "\f3ee"
+}
+
+.fa-sitemap:before {
+ content: "\f0e8"
+}
+
+.fa-sith:before {
+ content: "\f512"
+}
+
+.fa-skating:before {
+ content: "\f7c5"
+}
+
+.fa-sketch:before {
+ content: "\f7c6"
+}
+
+.fa-skiing:before {
+ content: "\f7c9"
+}
+
+.fa-skiing-nordic:before {
+ content: "\f7ca"
+}
+
+.fa-skull:before {
+ content: "\f54c"
+}
+
+.fa-skull-crossbones:before {
+ content: "\f714"
+}
+
+.fa-skyatlas:before {
+ content: "\f216"
+}
+
+.fa-skype:before {
+ content: "\f17e"
+}
+
+.fa-slack:before {
+ content: "\f198"
+}
+
+.fa-slack-hash:before {
+ content: "\f3ef"
+}
+
+.fa-slash:before {
+ content: "\f715"
+}
+
+.fa-sleigh:before {
+ content: "\f7cc"
+}
+
+.fa-sliders-h:before {
+ content: "\f1de"
+}
+
+.fa-slideshare:before {
+ content: "\f1e7"
+}
+
+.fa-smile:before {
+ content: "\f118"
+}
+
+.fa-smile-beam:before {
+ content: "\f5b8"
+}
+
+.fa-smile-wink:before {
+ content: "\f4da"
+}
+
+.fa-smog:before {
+ content: "\f75f"
+}
+
+.fa-smoking:before {
+ content: "\f48d"
+}
+
+.fa-smoking-ban:before {
+ content: "\f54d"
+}
+
+.fa-sms:before {
+ content: "\f7cd"
+}
+
+.fa-snapchat:before {
+ content: "\f2ab"
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac"
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad"
+}
+
+.fa-snowboarding:before {
+ content: "\f7ce"
+}
+
+.fa-snowflake:before {
+ content: "\f2dc"
+}
+
+.fa-snowman:before {
+ content: "\f7d0"
+}
+
+.fa-snowplow:before {
+ content: "\f7d2"
+}
+
+.fa-socks:before {
+ content: "\f696"
+}
+
+.fa-solar-panel:before {
+ content: "\f5ba"
+}
+
+.fa-sort:before {
+ content: "\f0dc"
+}
+
+.fa-sort-alpha-down:before {
+ content: "\f15d"
+}
+
+.fa-sort-alpha-up:before {
+ content: "\f15e"
+}
+
+.fa-sort-amount-down:before {
+ content: "\f160"
+}
+
+.fa-sort-amount-up:before {
+ content: "\f161"
+}
+
+.fa-sort-down:before {
+ content: "\f0dd"
+}
+
+.fa-sort-numeric-down:before {
+ content: "\f162"
+}
+
+.fa-sort-numeric-up:before {
+ content: "\f163"
+}
+
+.fa-sort-up:before {
+ content: "\f0de"
+}
+
+.fa-soundcloud:before {
+ content: "\f1be"
+}
+
+.fa-sourcetree:before {
+ content: "\f7d3"
+}
+
+.fa-spa:before {
+ content: "\f5bb"
+}
+
+.fa-space-shuttle:before {
+ content: "\f197"
+}
+
+.fa-speakap:before {
+ content: "\f3f3"
+}
+
+.fa-speaker-deck:before {
+ content: "\f83c"
+}
+
+.fa-spider:before {
+ content: "\f717"
+}
+
+.fa-spinner:before {
+ content: "\f110"
+}
+
+.fa-splotch:before {
+ content: "\f5bc"
+}
+
+.fa-spotify:before {
+ content: "\f1bc"
+}
+
+.fa-spray-can:before {
+ content: "\f5bd"
+}
+
+.fa-square:before {
+ content: "\f0c8"
+}
+
+.fa-square-full:before {
+ content: "\f45c"
+}
+
+.fa-square-root-alt:before {
+ content: "\f698"
+}
+
+.fa-squarespace:before {
+ content: "\f5be"
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d"
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c"
+}
+
+.fa-stackpath:before {
+ content: "\f842"
+}
+
+.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-alt:before {
+ content: "\f5c0"
+}
+
+.fa-star-of-david:before {
+ content: "\f69a"
+}
+
+.fa-star-of-life:before {
+ content: "\f621"
+}
+
+.fa-staylinked:before {
+ content: "\f3f5"
+}
+
+.fa-steam:before {
+ content: "\f1b6"
+}
+
+.fa-steam-square:before {
+ content: "\f1b7"
+}
+
+.fa-steam-symbol:before {
+ content: "\f3f6"
+}
+
+.fa-step-backward:before {
+ content: "\f048"
+}
+
+.fa-step-forward:before {
+ content: "\f051"
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1"
+}
+
+.fa-sticker-mule:before {
+ content: "\f3f7"
+}
+
+.fa-sticky-note:before {
+ content: "\f249"
+}
+
+.fa-stop:before {
+ content: "\f04d"
+}
+
+.fa-stop-circle:before {
+ content: "\f28d"
+}
+
+.fa-stopwatch:before {
+ content: "\f2f2"
+}
+
+.fa-store:before {
+ content: "\f54e"
+}
+
+.fa-store-alt:before {
+ content: "\f54f"
+}
+
+.fa-strava:before {
+ content: "\f428"
+}
+
+.fa-stream:before {
+ content: "\f550"
+}
+
+.fa-street-view:before {
+ content: "\f21d"
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc"
+}
+
+.fa-stripe:before {
+ content: "\f429"
+}
+
+.fa-stripe-s:before {
+ content: "\f42a"
+}
+
+.fa-stroopwafel:before {
+ content: "\f551"
+}
+
+.fa-studiovinari:before {
+ content: "\f3f8"
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4"
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3"
+}
+
+.fa-subscript:before {
+ content: "\f12c"
+}
+
+.fa-subway:before {
+ content: "\f239"
+}
+
+.fa-suitcase:before {
+ content: "\f0f2"
+}
+
+.fa-suitcase-rolling:before {
+ content: "\f5c1"
+}
+
+.fa-sun:before {
+ content: "\f185"
+}
+
+.fa-superpowers:before {
+ content: "\f2dd"
+}
+
+.fa-superscript:before {
+ content: "\f12b"
+}
+
+.fa-supple:before {
+ content: "\f3f9"
+}
+
+.fa-surprise:before {
+ content: "\f5c2"
+}
+
+.fa-suse:before {
+ content: "\f7d6"
+}
+
+.fa-swatchbook:before {
+ content: "\f5c3"
+}
+
+.fa-swimmer:before {
+ content: "\f5c4"
+}
+
+.fa-swimming-pool:before {
+ content: "\f5c5"
+}
+
+.fa-symfony:before {
+ content: "\f83d"
+}
+
+.fa-synagogue:before {
+ content: "\f69b"
+}
+
+.fa-sync:before {
+ content: "\f021"
+}
+
+.fa-sync-alt:before {
+ content: "\f2f1"
+}
+
+.fa-syringe:before {
+ content: "\f48e"
+}
+
+.fa-table:before {
+ content: "\f0ce"
+}
+
+.fa-table-tennis:before {
+ content: "\f45d"
+}
+
+.fa-tablet:before {
+ content: "\f10a"
+}
+
+.fa-tablet-alt:before {
+ content: "\f3fa"
+}
+
+.fa-tablets:before {
+ content: "\f490"
+}
+
+.fa-tachometer-alt:before {
+ content: "\f3fd"
+}
+
+.fa-tag:before {
+ content: "\f02b"
+}
+
+.fa-tags:before {
+ content: "\f02c"
+}
+
+.fa-tape:before {
+ content: "\f4db"
+}
+
+.fa-tasks:before {
+ content: "\f0ae"
+}
+
+.fa-taxi:before {
+ content: "\f1ba"
+}
+
+.fa-teamspeak:before {
+ content: "\f4f9"
+}
+
+.fa-teeth:before {
+ content: "\f62e"
+}
+
+.fa-teeth-open:before {
+ content: "\f62f"
+}
+
+.fa-telegram:before {
+ content: "\f2c6"
+}
+
+.fa-telegram-plane:before {
+ content: "\f3fe"
+}
+
+.fa-temperature-high:before {
+ content: "\f769"
+}
+
+.fa-temperature-low:before {
+ content: "\f76b"
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5"
+}
+
+.fa-tenge:before {
+ content: "\f7d7"
+}
+
+.fa-terminal:before {
+ content: "\f120"
+}
+
+.fa-text-height:before {
+ content: "\f034"
+}
+
+.fa-text-width:before {
+ content: "\f035"
+}
+
+.fa-th:before {
+ content: "\f00a"
+}
+
+.fa-th-large:before {
+ content: "\f009"
+}
+
+.fa-th-list:before {
+ content: "\f00b"
+}
+
+.fa-the-red-yeti:before {
+ content: "\f69d"
+}
+
+.fa-theater-masks:before {
+ content: "\f630"
+}
+
+.fa-themeco:before {
+ content: "\f5c6"
+}
+
+.fa-themeisle:before {
+ content: "\f2b2"
+}
+
+.fa-thermometer:before {
+ content: "\f491"
+}
+
+.fa-thermometer-empty:before {
+ content: "\f2cb"
+}
+
+.fa-thermometer-full:before {
+ content: "\f2c7"
+}
+
+.fa-thermometer-half:before {
+ content: "\f2c9"
+}
+
+.fa-thermometer-quarter:before {
+ content: "\f2ca"
+}
+
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8"
+}
+
+.fa-think-peaks:before {
+ content: "\f731"
+}
+
+.fa-thumbs-down:before {
+ content: "\f165"
+}
+
+.fa-thumbs-up:before {
+ content: "\f164"
+}
+
+.fa-thumbtack:before {
+ content: "\f08d"
+}
+
+.fa-ticket-alt:before {
+ content: "\f3ff"
+}
+
+.fa-times:before {
+ content: "\f00d"
+}
+
+.fa-times-circle:before {
+ content: "\f057"
+}
+
+.fa-tint:before {
+ content: "\f043"
+}
+
+.fa-tint-slash:before {
+ content: "\f5c7"
+}
+
+.fa-tired:before {
+ content: "\f5c8"
+}
+
+.fa-toggle-off:before {
+ content: "\f204"
+}
+
+.fa-toggle-on:before {
+ content: "\f205"
+}
+
+.fa-toilet:before {
+ content: "\f7d8"
+}
+
+.fa-toilet-paper:before {
+ content: "\f71e"
+}
+
+.fa-toolbox:before {
+ content: "\f552"
+}
+
+.fa-tools:before {
+ content: "\f7d9"
+}
+
+.fa-tooth:before {
+ content: "\f5c9"
+}
+
+.fa-torah:before {
+ content: "\f6a0"
+}
+
+.fa-torii-gate:before {
+ content: "\f6a1"
+}
+
+.fa-tractor:before {
+ content: "\f722"
+}
+
+.fa-trade-federation:before {
+ content: "\f513"
+}
+
+.fa-trademark:before {
+ content: "\f25c"
+}
+
+.fa-traffic-light:before {
+ content: "\f637"
+}
+
+.fa-train:before {
+ content: "\f238"
+}
+
+.fa-tram:before {
+ content: "\f7da"
+}
+
+.fa-transgender:before {
+ content: "\f224"
+}
+
+.fa-transgender-alt:before {
+ content: "\f225"
+}
+
+.fa-trash:before {
+ content: "\f1f8"
+}
+
+.fa-trash-alt:before {
+ content: "\f2ed"
+}
+
+.fa-trash-restore:before {
+ content: "\f829"
+}
+
+.fa-trash-restore-alt:before {
+ content: "\f82a"
+}
+
+.fa-tree:before {
+ content: "\f1bb"
+}
+
+.fa-trello:before {
+ content: "\f181"
+}
+
+.fa-tripadvisor:before {
+ content: "\f262"
+}
+
+.fa-trophy:before {
+ content: "\f091"
+}
+
+.fa-truck:before {
+ content: "\f0d1"
+}
+
+.fa-truck-loading:before {
+ content: "\f4de"
+}
+
+.fa-truck-monster:before {
+ content: "\f63b"
+}
+
+.fa-truck-moving:before {
+ content: "\f4df"
+}
+
+.fa-truck-pickup:before {
+ content: "\f63c"
+}
+
+.fa-tshirt:before {
+ content: "\f553"
+}
+
+.fa-tty:before {
+ content: "\f1e4"
+}
+
+.fa-tumblr:before {
+ content: "\f173"
+}
+
+.fa-tumblr-square:before {
+ content: "\f174"
+}
+
+.fa-tv:before {
+ content: "\f26c"
+}
+
+.fa-twitch:before {
+ content: "\f1e8"
+}
+
+.fa-twitter:before {
+ content: "\f099"
+}
+
+.fa-twitter-square:before {
+ content: "\f081"
+}
+
+.fa-typo3:before {
+ content: "\f42b"
+}
+
+.fa-uber:before {
+ content: "\f402"
+}
+
+.fa-ubuntu:before {
+ content: "\f7df"
+}
+
+.fa-uikit:before {
+ content: "\f403"
+}
+
+.fa-umbrella:before {
+ content: "\f0e9"
+}
+
+.fa-umbrella-beach:before {
+ content: "\f5ca"
+}
+
+.fa-underline:before {
+ content: "\f0cd"
+}
+
+.fa-undo:before {
+ content: "\f0e2"
+}
+
+.fa-undo-alt:before {
+ content: "\f2ea"
+}
+
+.fa-uniregistry:before {
+ content: "\f404"
+}
+
+.fa-universal-access:before {
+ content: "\f29a"
+}
+
+.fa-university:before {
+ content: "\f19c"
+}
+
+.fa-unlink:before {
+ content: "\f127"
+}
+
+.fa-unlock:before {
+ content: "\f09c"
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e"
+}
+
+.fa-untappd:before {
+ content: "\f405"
+}
+
+.fa-upload:before {
+ content: "\f093"
+}
+
+.fa-ups:before {
+ content: "\f7e0"
+}
+
+.fa-usb:before {
+ content: "\f287"
+}
+
+.fa-user:before {
+ content: "\f007"
+}
+
+.fa-user-alt:before {
+ content: "\f406"
+}
+
+.fa-user-alt-slash:before {
+ content: "\f4fa"
+}
+
+.fa-user-astronaut:before {
+ content: "\f4fb"
+}
+
+.fa-user-check:before {
+ content: "\f4fc"
+}
+
+.fa-user-circle:before {
+ content: "\f2bd"
+}
+
+.fa-user-clock:before {
+ content: "\f4fd"
+}
+
+.fa-user-cog:before {
+ content: "\f4fe"
+}
+
+.fa-user-edit:before {
+ content: "\f4ff"
+}
+
+.fa-user-friends:before {
+ content: "\f500"
+}
+
+.fa-user-graduate:before {
+ content: "\f501"
+}
+
+.fa-user-injured:before {
+ content: "\f728"
+}
+
+.fa-user-lock:before {
+ content: "\f502"
+}
+
+.fa-user-md:before {
+ content: "\f0f0"
+}
+
+.fa-user-minus:before {
+ content: "\f503"
+}
+
+.fa-user-ninja:before {
+ content: "\f504"
+}
+
+.fa-user-nurse:before {
+ content: "\f82f"
+}
+
+.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-times:before {
+ content: "\f235"
+}
+
+.fa-users:before {
+ content: "\f0c0"
+}
+
+.fa-users-cog:before {
+ content: "\f509"
+}
+
+.fa-usps:before {
+ content: "\f7e1"
+}
+
+.fa-ussunnah:before {
+ content: "\f407"
+}
+
+.fa-utensil-spoon:before {
+ content: "\f2e5"
+}
+
+.fa-utensils:before {
+ content: "\f2e7"
+}
+
+.fa-vaadin:before {
+ content: "\f408"
+}
+
+.fa-vector-square:before {
+ content: "\f5cb"
+}
+
+.fa-venus:before {
+ content: "\f221"
+}
+
+.fa-venus-double:before {
+ content: "\f226"
+}
+
+.fa-venus-mars:before {
+ content: "\f228"
+}
+
+.fa-viacoin:before {
+ content: "\f237"
+}
+
+.fa-viadeo:before {
+ content: "\f2a9"
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa"
+}
+
+.fa-vial:before {
+ content: "\f492"
+}
+
+.fa-vials:before {
+ content: "\f493"
+}
+
+.fa-viber:before {
+ content: "\f409"
+}
+
+.fa-video:before {
+ content: "\f03d"
+}
+
+.fa-video-slash:before {
+ content: "\f4e2"
+}
+
+.fa-vihara:before {
+ content: "\f6a7"
+}
+
+.fa-vimeo:before {
+ content: "\f40a"
+}
+
+.fa-vimeo-square:before {
+ content: "\f194"
+}
+
+.fa-vimeo-v:before {
+ content: "\f27d"
+}
+
+.fa-vine:before {
+ content: "\f1ca"
+}
+
+.fa-vk:before {
+ content: "\f189"
+}
+
+.fa-vnv:before {
+ content: "\f40b"
+}
+
+.fa-volleyball-ball:before {
+ content: "\f45f"
+}
+
+.fa-volume-down:before {
+ content: "\f027"
+}
+
+.fa-volume-mute:before {
+ content: "\f6a9"
+}
+
+.fa-volume-off:before {
+ content: "\f026"
+}
+
+.fa-volume-up:before {
+ content: "\f028"
+}
+
+.fa-vote-yea:before {
+ content: "\f772"
+}
+
+.fa-vr-cardboard:before {
+ content: "\f729"
+}
+
+.fa-vuejs:before {
+ content: "\f41f"
+}
+
+.fa-walking:before {
+ content: "\f554"
+}
+
+.fa-wallet:before {
+ content: "\f555"
+}
+
+.fa-warehouse:before {
+ content: "\f494"
+}
+
+.fa-water:before {
+ content: "\f773"
+}
+
+.fa-wave-square:before {
+ content: "\f83e"
+}
+
+.fa-waze:before {
+ content: "\f83f"
+}
+
+.fa-weebly:before {
+ content: "\f5cc"
+}
+
+.fa-weibo:before {
+ content: "\f18a"
+}
+
+.fa-weight:before {
+ content: "\f496"
+}
+
+.fa-weight-hanging:before {
+ content: "\f5cd"
+}
+
+.fa-weixin:before {
+ content: "\f1d7"
+}
+
+.fa-whatsapp:before {
+ content: "\f232"
+}
+
+.fa-whatsapp-square:before {
+ content: "\f40c"
+}
+
+.fa-wheelchair:before {
+ content: "\f193"
+}
+
+.fa-whmcs:before {
+ content: "\f40d"
+}
+
+.fa-wifi:before {
+ content: "\f1eb"
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266"
+}
+
+.fa-wind:before {
+ content: "\f72e"
+}
+
+.fa-window-close:before {
+ content: "\f410"
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0"
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1"
+}
+
+.fa-window-restore:before {
+ content: "\f2d2"
+}
+
+.fa-windows:before {
+ content: "\f17a"
+}
+
+.fa-wine-bottle:before {
+ content: "\f72f"
+}
+
+.fa-wine-glass:before {
+ content: "\f4e3"
+}
+
+.fa-wine-glass-alt:before {
+ content: "\f5ce"
+}
+
+.fa-wix:before {
+ content: "\f5cf"
+}
+
+.fa-wizards-of-the-coast:before {
+ content: "\f730"
+}
+
+.fa-wolf-pack-battalion:before {
+ content: "\f514"
+}
+
+.fa-won-sign:before {
+ content: "\f159"
+}
+
+.fa-wordpress:before {
+ content: "\f19a"
+}
+
+.fa-wordpress-simple:before {
+ content: "\f411"
+}
+
+.fa-wpbeginner:before {
+ content: "\f297"
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de"
+}
+
+.fa-wpforms:before {
+ content: "\f298"
+}
+
+.fa-wpressr:before {
+ content: "\f3e4"
+}
+
+.fa-wrench:before {
+ content: "\f0ad"
+}
+
+.fa-x-ray:before {
+ content: "\f497"
+}
+
+.fa-xbox:before {
+ content: "\f412"
+}
+
+.fa-xing:before {
+ content: "\f168"
+}
+
+.fa-xing-square:before {
+ content: "\f169"
+}
+
+.fa-y-combinator:before {
+ content: "\f23b"
+}
+
+.fa-yahoo:before {
+ content: "\f19e"
+}
+
+.fa-yammer:before {
+ content: "\f840"
+}
+
+.fa-yandex:before {
+ content: "\f413"
+}
+
+.fa-yandex-international:before {
+ content: "\f414"
+}
+
+.fa-yarn:before {
+ content: "\f7e3"
+}
+
+.fa-yelp:before {
+ content: "\f1e9"
+}
+
+.fa-yen-sign:before {
+ content: "\f157"
+}
+
+.fa-yin-yang:before {
+ content: "\f6ad"
+}
+
+.fa-yoast:before {
+ content: "\f2b1"
+}
+
+.fa-youtube:before {
+ content: "\f167"
+}
+
+.fa-youtube-square:before {
+ content: "\f431"
+}
+
+.fa-zhihu:before {
+ content: "\f63f"
+}
+
+.sr-only {
+ border: 0;
+ clip: rect(0, 0, 0, 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px
+}
+
+.sr-only-focusable:active, .sr-only-focusable:focus {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto
+}
+
+@font-face {
+ font-family: "Font Awesome 5 Brands";
+ font-style: normal;
+ font-weight: normal;
+ font-display: auto;
+ src: url(../webfonts/fa-brands-400.eot);
+ src: url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"), url(../webfonts/fa-brands-400.woff2) format("woff2"), url(../webfonts/fa-brands-400.woff) format("woff"), url(../webfonts/fa-brands-400.ttf) format("truetype"), url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")
+}
+
+.fab {
+ font-family: "Font Awesome 5 Brands"
+}
+
+@font-face {
+ font-family: "Font Awesome 5 Free";
+ font-style: normal;
+ font-weight: 400;
+ font-display: auto;
+ src: url(../webfonts/fa-regular-400.eot);
+ src: url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"), url(../webfonts/fa-regular-400.woff2) format("woff2"), url(../webfonts/fa-regular-400.woff) format("woff"), url(../webfonts/fa-regular-400.ttf) format("truetype"), url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")
+}
+
+.far {
+ font-weight: 400
+}
+
+@font-face {
+ font-family: "Font Awesome 5 Free";
+ font-style: normal;
+ font-weight: 900;
+ font-display: auto;
+ src: url(../webfonts/fa-solid-900.eot);
+ /*src: url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"), url(../webfonts/fa-solid-900.woff2) format("woff2"), url(../webfonts/fa-solid-900.woff) format("woff"), url(../webfonts/fa-solid-900.ttf) format("truetype"), url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")*/
+}
+
+.fa, .far, .fas {
+ font-family: "Font Awesome 5 Free"
+}
+
+.fa, .fas {
+ font-weight: 900
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/bootstrap-icons.css b/src/main/resources/static/css/bootstrap-icons.css
new file mode 100644
index 0000000..5712315
--- /dev/null
+++ b/src/main/resources/static/css/bootstrap-icons.css
@@ -0,0 +1,1704 @@
+@font-face {
+ font-family: "bootstrap-icons";
+ src: url("./fonts/bootstrap-icons.woff2?524846017b983fc8ded9325d94ed40f3") format("woff2"),
+url("./fonts/bootstrap-icons.woff?524846017b983fc8ded9325d94ed40f3") format("woff");
+}
+
+.bi::before,
+[class^="bi-"]::before,
+[class*=" bi-"]::before {
+ display: inline-block;
+ font-family: bootstrap-icons !important;
+ font-style: normal;
+ font-weight: normal !important;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ vertical-align: -.125em;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.bi-123::before { content: "\f67f"; }
+.bi-alarm-fill::before { content: "\f101"; }
+.bi-alarm::before { content: "\f102"; }
+.bi-align-bottom::before { content: "\f103"; }
+.bi-align-center::before { content: "\f104"; }
+.bi-align-end::before { content: "\f105"; }
+.bi-align-middle::before { content: "\f106"; }
+.bi-align-start::before { content: "\f107"; }
+.bi-align-top::before { content: "\f108"; }
+.bi-alt::before { content: "\f109"; }
+.bi-app-indicator::before { content: "\f10a"; }
+.bi-app::before { content: "\f10b"; }
+.bi-archive-fill::before { content: "\f10c"; }
+.bi-archive::before { content: "\f10d"; }
+.bi-arrow-90deg-down::before { content: "\f10e"; }
+.bi-arrow-90deg-left::before { content: "\f10f"; }
+.bi-arrow-90deg-right::before { content: "\f110"; }
+.bi-arrow-90deg-up::before { content: "\f111"; }
+.bi-arrow-bar-down::before { content: "\f112"; }
+.bi-arrow-bar-left::before { content: "\f113"; }
+.bi-arrow-bar-right::before { content: "\f114"; }
+.bi-arrow-bar-up::before { content: "\f115"; }
+.bi-arrow-clockwise::before { content: "\f116"; }
+.bi-arrow-counterclockwise::before { content: "\f117"; }
+.bi-arrow-down-circle-fill::before { content: "\f118"; }
+.bi-arrow-down-circle::before { content: "\f119"; }
+.bi-arrow-down-left-circle-fill::before { content: "\f11a"; }
+.bi-arrow-down-left-circle::before { content: "\f11b"; }
+.bi-arrow-down-left-square-fill::before { content: "\f11c"; }
+.bi-arrow-down-left-square::before { content: "\f11d"; }
+.bi-arrow-down-left::before { content: "\f11e"; }
+.bi-arrow-down-right-circle-fill::before { content: "\f11f"; }
+.bi-arrow-down-right-circle::before { content: "\f120"; }
+.bi-arrow-down-right-square-fill::before { content: "\f121"; }
+.bi-arrow-down-right-square::before { content: "\f122"; }
+.bi-arrow-down-right::before { content: "\f123"; }
+.bi-arrow-down-short::before { content: "\f124"; }
+.bi-arrow-down-square-fill::before { content: "\f125"; }
+.bi-arrow-down-square::before { content: "\f126"; }
+.bi-arrow-down-up::before { content: "\f127"; }
+.bi-arrow-down::before { content: "\f128"; }
+.bi-arrow-left-circle-fill::before { content: "\f129"; }
+.bi-arrow-left-circle::before { content: "\f12a"; }
+.bi-arrow-left-right::before { content: "\f12b"; }
+.bi-arrow-left-short::before { content: "\f12c"; }
+.bi-arrow-left-square-fill::before { content: "\f12d"; }
+.bi-arrow-left-square::before { content: "\f12e"; }
+.bi-arrow-left::before { content: "\f12f"; }
+.bi-arrow-repeat::before { content: "\f130"; }
+.bi-arrow-return-left::before { content: "\f131"; }
+.bi-arrow-return-right::before { content: "\f132"; }
+.bi-arrow-right-circle-fill::before { content: "\f133"; }
+.bi-arrow-right-circle::before { content: "\f134"; }
+.bi-arrow-right-short::before { content: "\f135"; }
+.bi-arrow-right-square-fill::before { content: "\f136"; }
+.bi-arrow-right-square::before { content: "\f137"; }
+.bi-arrow-right::before { content: "\f138"; }
+.bi-arrow-up-circle-fill::before { content: "\f139"; }
+.bi-arrow-up-circle::before { content: "\f13a"; }
+.bi-arrow-up-left-circle-fill::before { content: "\f13b"; }
+.bi-arrow-up-left-circle::before { content: "\f13c"; }
+.bi-arrow-up-left-square-fill::before { content: "\f13d"; }
+.bi-arrow-up-left-square::before { content: "\f13e"; }
+.bi-arrow-up-left::before { content: "\f13f"; }
+.bi-arrow-up-right-circle-fill::before { content: "\f140"; }
+.bi-arrow-up-right-circle::before { content: "\f141"; }
+.bi-arrow-up-right-square-fill::before { content: "\f142"; }
+.bi-arrow-up-right-square::before { content: "\f143"; }
+.bi-arrow-up-right::before { content: "\f144"; }
+.bi-arrow-up-short::before { content: "\f145"; }
+.bi-arrow-up-square-fill::before { content: "\f146"; }
+.bi-arrow-up-square::before { content: "\f147"; }
+.bi-arrow-up::before { content: "\f148"; }
+.bi-arrows-angle-contract::before { content: "\f149"; }
+.bi-arrows-angle-expand::before { content: "\f14a"; }
+.bi-arrows-collapse::before { content: "\f14b"; }
+.bi-arrows-expand::before { content: "\f14c"; }
+.bi-arrows-fullscreen::before { content: "\f14d"; }
+.bi-arrows-move::before { content: "\f14e"; }
+.bi-aspect-ratio-fill::before { content: "\f14f"; }
+.bi-aspect-ratio::before { content: "\f150"; }
+.bi-asterisk::before { content: "\f151"; }
+.bi-at::before { content: "\f152"; }
+.bi-award-fill::before { content: "\f153"; }
+.bi-award::before { content: "\f154"; }
+.bi-back::before { content: "\f155"; }
+.bi-backspace-fill::before { content: "\f156"; }
+.bi-backspace-reverse-fill::before { content: "\f157"; }
+.bi-backspace-reverse::before { content: "\f158"; }
+.bi-backspace::before { content: "\f159"; }
+.bi-badge-3d-fill::before { content: "\f15a"; }
+.bi-badge-3d::before { content: "\f15b"; }
+.bi-badge-4k-fill::before { content: "\f15c"; }
+.bi-badge-4k::before { content: "\f15d"; }
+.bi-badge-8k-fill::before { content: "\f15e"; }
+.bi-badge-8k::before { content: "\f15f"; }
+.bi-badge-ad-fill::before { content: "\f160"; }
+.bi-badge-ad::before { content: "\f161"; }
+.bi-badge-ar-fill::before { content: "\f162"; }
+.bi-badge-ar::before { content: "\f163"; }
+.bi-badge-cc-fill::before { content: "\f164"; }
+.bi-badge-cc::before { content: "\f165"; }
+.bi-badge-hd-fill::before { content: "\f166"; }
+.bi-badge-hd::before { content: "\f167"; }
+.bi-badge-tm-fill::before { content: "\f168"; }
+.bi-badge-tm::before { content: "\f169"; }
+.bi-badge-vo-fill::before { content: "\f16a"; }
+.bi-badge-vo::before { content: "\f16b"; }
+.bi-badge-vr-fill::before { content: "\f16c"; }
+.bi-badge-vr::before { content: "\f16d"; }
+.bi-badge-wc-fill::before { content: "\f16e"; }
+.bi-badge-wc::before { content: "\f16f"; }
+.bi-bag-check-fill::before { content: "\f170"; }
+.bi-bag-check::before { content: "\f171"; }
+.bi-bag-dash-fill::before { content: "\f172"; }
+.bi-bag-dash::before { content: "\f173"; }
+.bi-bag-fill::before { content: "\f174"; }
+.bi-bag-plus-fill::before { content: "\f175"; }
+.bi-bag-plus::before { content: "\f176"; }
+.bi-bag-x-fill::before { content: "\f177"; }
+.bi-bag-x::before { content: "\f178"; }
+.bi-bag::before { content: "\f179"; }
+.bi-bar-chart-fill::before { content: "\f17a"; }
+.bi-bar-chart-line-fill::before { content: "\f17b"; }
+.bi-bar-chart-line::before { content: "\f17c"; }
+.bi-bar-chart-steps::before { content: "\f17d"; }
+.bi-bar-chart::before { content: "\f17e"; }
+.bi-basket-fill::before { content: "\f17f"; }
+.bi-basket::before { content: "\f180"; }
+.bi-basket2-fill::before { content: "\f181"; }
+.bi-basket2::before { content: "\f182"; }
+.bi-basket3-fill::before { content: "\f183"; }
+.bi-basket3::before { content: "\f184"; }
+.bi-battery-charging::before { content: "\f185"; }
+.bi-battery-full::before { content: "\f186"; }
+.bi-battery-half::before { content: "\f187"; }
+.bi-battery::before { content: "\f188"; }
+.bi-bell-fill::before { content: "\f189"; }
+.bi-bell::before { content: "\f18a"; }
+.bi-bezier::before { content: "\f18b"; }
+.bi-bezier2::before { content: "\f18c"; }
+.bi-bicycle::before { content: "\f18d"; }
+.bi-binoculars-fill::before { content: "\f18e"; }
+.bi-binoculars::before { content: "\f18f"; }
+.bi-blockquote-left::before { content: "\f190"; }
+.bi-blockquote-right::before { content: "\f191"; }
+.bi-book-fill::before { content: "\f192"; }
+.bi-book-half::before { content: "\f193"; }
+.bi-book::before { content: "\f194"; }
+.bi-bookmark-check-fill::before { content: "\f195"; }
+.bi-bookmark-check::before { content: "\f196"; }
+.bi-bookmark-dash-fill::before { content: "\f197"; }
+.bi-bookmark-dash::before { content: "\f198"; }
+.bi-bookmark-fill::before { content: "\f199"; }
+.bi-bookmark-heart-fill::before { content: "\f19a"; }
+.bi-bookmark-heart::before { content: "\f19b"; }
+.bi-bookmark-plus-fill::before { content: "\f19c"; }
+.bi-bookmark-plus::before { content: "\f19d"; }
+.bi-bookmark-star-fill::before { content: "\f19e"; }
+.bi-bookmark-star::before { content: "\f19f"; }
+.bi-bookmark-x-fill::before { content: "\f1a0"; }
+.bi-bookmark-x::before { content: "\f1a1"; }
+.bi-bookmark::before { content: "\f1a2"; }
+.bi-bookmarks-fill::before { content: "\f1a3"; }
+.bi-bookmarks::before { content: "\f1a4"; }
+.bi-bookshelf::before { content: "\f1a5"; }
+.bi-bootstrap-fill::before { content: "\f1a6"; }
+.bi-bootstrap-reboot::before { content: "\f1a7"; }
+.bi-bootstrap::before { content: "\f1a8"; }
+.bi-border-all::before { content: "\f1a9"; }
+.bi-border-bottom::before { content: "\f1aa"; }
+.bi-border-center::before { content: "\f1ab"; }
+.bi-border-inner::before { content: "\f1ac"; }
+.bi-border-left::before { content: "\f1ad"; }
+.bi-border-middle::before { content: "\f1ae"; }
+.bi-border-outer::before { content: "\f1af"; }
+.bi-border-right::before { content: "\f1b0"; }
+.bi-border-style::before { content: "\f1b1"; }
+.bi-border-top::before { content: "\f1b2"; }
+.bi-border-width::before { content: "\f1b3"; }
+.bi-border::before { content: "\f1b4"; }
+.bi-bounding-box-circles::before { content: "\f1b5"; }
+.bi-bounding-box::before { content: "\f1b6"; }
+.bi-box-arrow-down-left::before { content: "\f1b7"; }
+.bi-box-arrow-down-right::before { content: "\f1b8"; }
+.bi-box-arrow-down::before { content: "\f1b9"; }
+.bi-box-arrow-in-down-left::before { content: "\f1ba"; }
+.bi-box-arrow-in-down-right::before { content: "\f1bb"; }
+.bi-box-arrow-in-down::before { content: "\f1bc"; }
+.bi-box-arrow-in-left::before { content: "\f1bd"; }
+.bi-box-arrow-in-right::before { content: "\f1be"; }
+.bi-box-arrow-in-up-left::before { content: "\f1bf"; }
+.bi-box-arrow-in-up-right::before { content: "\f1c0"; }
+.bi-box-arrow-in-up::before { content: "\f1c1"; }
+.bi-box-arrow-left::before { content: "\f1c2"; }
+.bi-box-arrow-right::before { content: "\f1c3"; }
+.bi-box-arrow-up-left::before { content: "\f1c4"; }
+.bi-box-arrow-up-right::before { content: "\f1c5"; }
+.bi-box-arrow-up::before { content: "\f1c6"; }
+.bi-box-seam::before { content: "\f1c7"; }
+.bi-box::before { content: "\f1c8"; }
+.bi-braces::before { content: "\f1c9"; }
+.bi-bricks::before { content: "\f1ca"; }
+.bi-briefcase-fill::before { content: "\f1cb"; }
+.bi-briefcase::before { content: "\f1cc"; }
+.bi-brightness-alt-high-fill::before { content: "\f1cd"; }
+.bi-brightness-alt-high::before { content: "\f1ce"; }
+.bi-brightness-alt-low-fill::before { content: "\f1cf"; }
+.bi-brightness-alt-low::before { content: "\f1d0"; }
+.bi-brightness-high-fill::before { content: "\f1d1"; }
+.bi-brightness-high::before { content: "\f1d2"; }
+.bi-brightness-low-fill::before { content: "\f1d3"; }
+.bi-brightness-low::before { content: "\f1d4"; }
+.bi-broadcast-pin::before { content: "\f1d5"; }
+.bi-broadcast::before { content: "\f1d6"; }
+.bi-brush-fill::before { content: "\f1d7"; }
+.bi-brush::before { content: "\f1d8"; }
+.bi-bucket-fill::before { content: "\f1d9"; }
+.bi-bucket::before { content: "\f1da"; }
+.bi-bug-fill::before { content: "\f1db"; }
+.bi-bug::before { content: "\f1dc"; }
+.bi-building::before { content: "\f1dd"; }
+.bi-bullseye::before { content: "\f1de"; }
+.bi-calculator-fill::before { content: "\f1df"; }
+.bi-calculator::before { content: "\f1e0"; }
+.bi-calendar-check-fill::before { content: "\f1e1"; }
+.bi-calendar-check::before { content: "\f1e2"; }
+.bi-calendar-date-fill::before { content: "\f1e3"; }
+.bi-calendar-date::before { content: "\f1e4"; }
+.bi-calendar-day-fill::before { content: "\f1e5"; }
+.bi-calendar-day::before { content: "\f1e6"; }
+.bi-calendar-event-fill::before { content: "\f1e7"; }
+.bi-calendar-event::before { content: "\f1e8"; }
+.bi-calendar-fill::before { content: "\f1e9"; }
+.bi-calendar-minus-fill::before { content: "\f1ea"; }
+.bi-calendar-minus::before { content: "\f1eb"; }
+.bi-calendar-month-fill::before { content: "\f1ec"; }
+.bi-calendar-month::before { content: "\f1ed"; }
+.bi-calendar-plus-fill::before { content: "\f1ee"; }
+.bi-calendar-plus::before { content: "\f1ef"; }
+.bi-calendar-range-fill::before { content: "\f1f0"; }
+.bi-calendar-range::before { content: "\f1f1"; }
+.bi-calendar-week-fill::before { content: "\f1f2"; }
+.bi-calendar-week::before { content: "\f1f3"; }
+.bi-calendar-x-fill::before { content: "\f1f4"; }
+.bi-calendar-x::before { content: "\f1f5"; }
+.bi-calendar::before { content: "\f1f6"; }
+.bi-calendar2-check-fill::before { content: "\f1f7"; }
+.bi-calendar2-check::before { content: "\f1f8"; }
+.bi-calendar2-date-fill::before { content: "\f1f9"; }
+.bi-calendar2-date::before { content: "\f1fa"; }
+.bi-calendar2-day-fill::before { content: "\f1fb"; }
+.bi-calendar2-day::before { content: "\f1fc"; }
+.bi-calendar2-event-fill::before { content: "\f1fd"; }
+.bi-calendar2-event::before { content: "\f1fe"; }
+.bi-calendar2-fill::before { content: "\f1ff"; }
+.bi-calendar2-minus-fill::before { content: "\f200"; }
+.bi-calendar2-minus::before { content: "\f201"; }
+.bi-calendar2-month-fill::before { content: "\f202"; }
+.bi-calendar2-month::before { content: "\f203"; }
+.bi-calendar2-plus-fill::before { content: "\f204"; }
+.bi-calendar2-plus::before { content: "\f205"; }
+.bi-calendar2-range-fill::before { content: "\f206"; }
+.bi-calendar2-range::before { content: "\f207"; }
+.bi-calendar2-week-fill::before { content: "\f208"; }
+.bi-calendar2-week::before { content: "\f209"; }
+.bi-calendar2-x-fill::before { content: "\f20a"; }
+.bi-calendar2-x::before { content: "\f20b"; }
+.bi-calendar2::before { content: "\f20c"; }
+.bi-calendar3-event-fill::before { content: "\f20d"; }
+.bi-calendar3-event::before { content: "\f20e"; }
+.bi-calendar3-fill::before { content: "\f20f"; }
+.bi-calendar3-range-fill::before { content: "\f210"; }
+.bi-calendar3-range::before { content: "\f211"; }
+.bi-calendar3-week-fill::before { content: "\f212"; }
+.bi-calendar3-week::before { content: "\f213"; }
+.bi-calendar3::before { content: "\f214"; }
+.bi-calendar4-event::before { content: "\f215"; }
+.bi-calendar4-range::before { content: "\f216"; }
+.bi-calendar4-week::before { content: "\f217"; }
+.bi-calendar4::before { content: "\f218"; }
+.bi-camera-fill::before { content: "\f219"; }
+.bi-camera-reels-fill::before { content: "\f21a"; }
+.bi-camera-reels::before { content: "\f21b"; }
+.bi-camera-video-fill::before { content: "\f21c"; }
+.bi-camera-video-off-fill::before { content: "\f21d"; }
+.bi-camera-video-off::before { content: "\f21e"; }
+.bi-camera-video::before { content: "\f21f"; }
+.bi-camera::before { content: "\f220"; }
+.bi-camera2::before { content: "\f221"; }
+.bi-capslock-fill::before { content: "\f222"; }
+.bi-capslock::before { content: "\f223"; }
+.bi-card-checklist::before { content: "\f224"; }
+.bi-card-heading::before { content: "\f225"; }
+.bi-card-image::before { content: "\f226"; }
+.bi-card-list::before { content: "\f227"; }
+.bi-card-text::before { content: "\f228"; }
+.bi-caret-down-fill::before { content: "\f229"; }
+.bi-caret-down-square-fill::before { content: "\f22a"; }
+.bi-caret-down-square::before { content: "\f22b"; }
+.bi-caret-down::before { content: "\f22c"; }
+.bi-caret-left-fill::before { content: "\f22d"; }
+.bi-caret-left-square-fill::before { content: "\f22e"; }
+.bi-caret-left-square::before { content: "\f22f"; }
+.bi-caret-left::before { content: "\f230"; }
+.bi-caret-right-fill::before { content: "\f231"; }
+.bi-caret-right-square-fill::before { content: "\f232"; }
+.bi-caret-right-square::before { content: "\f233"; }
+.bi-caret-right::before { content: "\f234"; }
+.bi-caret-up-fill::before { content: "\f235"; }
+.bi-caret-up-square-fill::before { content: "\f236"; }
+.bi-caret-up-square::before { content: "\f237"; }
+.bi-caret-up::before { content: "\f238"; }
+.bi-cart-check-fill::before { content: "\f239"; }
+.bi-cart-check::before { content: "\f23a"; }
+.bi-cart-dash-fill::before { content: "\f23b"; }
+.bi-cart-dash::before { content: "\f23c"; }
+.bi-cart-fill::before { content: "\f23d"; }
+.bi-cart-plus-fill::before { content: "\f23e"; }
+.bi-cart-plus::before { content: "\f23f"; }
+.bi-cart-x-fill::before { content: "\f240"; }
+.bi-cart-x::before { content: "\f241"; }
+.bi-cart::before { content: "\f242"; }
+.bi-cart2::before { content: "\f243"; }
+.bi-cart3::before { content: "\f244"; }
+.bi-cart4::before { content: "\f245"; }
+.bi-cash-stack::before { content: "\f246"; }
+.bi-cash::before { content: "\f247"; }
+.bi-cast::before { content: "\f248"; }
+.bi-chat-dots-fill::before { content: "\f249"; }
+.bi-chat-dots::before { content: "\f24a"; }
+.bi-chat-fill::before { content: "\f24b"; }
+.bi-chat-left-dots-fill::before { content: "\f24c"; }
+.bi-chat-left-dots::before { content: "\f24d"; }
+.bi-chat-left-fill::before { content: "\f24e"; }
+.bi-chat-left-quote-fill::before { content: "\f24f"; }
+.bi-chat-left-quote::before { content: "\f250"; }
+.bi-chat-left-text-fill::before { content: "\f251"; }
+.bi-chat-left-text::before { content: "\f252"; }
+.bi-chat-left::before { content: "\f253"; }
+.bi-chat-quote-fill::before { content: "\f254"; }
+.bi-chat-quote::before { content: "\f255"; }
+.bi-chat-right-dots-fill::before { content: "\f256"; }
+.bi-chat-right-dots::before { content: "\f257"; }
+.bi-chat-right-fill::before { content: "\f258"; }
+.bi-chat-right-quote-fill::before { content: "\f259"; }
+.bi-chat-right-quote::before { content: "\f25a"; }
+.bi-chat-right-text-fill::before { content: "\f25b"; }
+.bi-chat-right-text::before { content: "\f25c"; }
+.bi-chat-right::before { content: "\f25d"; }
+.bi-chat-square-dots-fill::before { content: "\f25e"; }
+.bi-chat-square-dots::before { content: "\f25f"; }
+.bi-chat-square-fill::before { content: "\f260"; }
+.bi-chat-square-quote-fill::before { content: "\f261"; }
+.bi-chat-square-quote::before { content: "\f262"; }
+.bi-chat-square-text-fill::before { content: "\f263"; }
+.bi-chat-square-text::before { content: "\f264"; }
+.bi-chat-square::before { content: "\f265"; }
+.bi-chat-text-fill::before { content: "\f266"; }
+.bi-chat-text::before { content: "\f267"; }
+.bi-chat::before { content: "\f268"; }
+.bi-check-all::before { content: "\f269"; }
+.bi-check-circle-fill::before { content: "\f26a"; }
+.bi-check-circle::before { content: "\f26b"; }
+.bi-check-square-fill::before { content: "\f26c"; }
+.bi-check-square::before { content: "\f26d"; }
+.bi-check::before { content: "\f26e"; }
+.bi-check2-all::before { content: "\f26f"; }
+.bi-check2-circle::before { content: "\f270"; }
+.bi-check2-square::before { content: "\f271"; }
+.bi-check2::before { content: "\f272"; }
+.bi-chevron-bar-contract::before { content: "\f273"; }
+.bi-chevron-bar-down::before { content: "\f274"; }
+.bi-chevron-bar-expand::before { content: "\f275"; }
+.bi-chevron-bar-left::before { content: "\f276"; }
+.bi-chevron-bar-right::before { content: "\f277"; }
+.bi-chevron-bar-up::before { content: "\f278"; }
+.bi-chevron-compact-down::before { content: "\f279"; }
+.bi-chevron-compact-left::before { content: "\f27a"; }
+.bi-chevron-compact-right::before { content: "\f27b"; }
+.bi-chevron-compact-up::before { content: "\f27c"; }
+.bi-chevron-contract::before { content: "\f27d"; }
+.bi-chevron-double-down::before { content: "\f27e"; }
+.bi-chevron-double-left::before { content: "\f27f"; }
+.bi-chevron-double-right::before { content: "\f280"; }
+.bi-chevron-double-up::before { content: "\f281"; }
+.bi-chevron-down::before { content: "\f282"; }
+.bi-chevron-expand::before { content: "\f283"; }
+.bi-chevron-left::before { content: "\f284"; }
+.bi-chevron-right::before { content: "\f285"; }
+.bi-chevron-up::before { content: "\f286"; }
+.bi-circle-fill::before { content: "\f287"; }
+.bi-circle-half::before { content: "\f288"; }
+.bi-circle-square::before { content: "\f289"; }
+.bi-circle::before { content: "\f28a"; }
+.bi-clipboard-check::before { content: "\f28b"; }
+.bi-clipboard-data::before { content: "\f28c"; }
+.bi-clipboard-minus::before { content: "\f28d"; }
+.bi-clipboard-plus::before { content: "\f28e"; }
+.bi-clipboard-x::before { content: "\f28f"; }
+.bi-clipboard::before { content: "\f290"; }
+.bi-clock-fill::before { content: "\f291"; }
+.bi-clock-history::before { content: "\f292"; }
+.bi-clock::before { content: "\f293"; }
+.bi-cloud-arrow-down-fill::before { content: "\f294"; }
+.bi-cloud-arrow-down::before { content: "\f295"; }
+.bi-cloud-arrow-up-fill::before { content: "\f296"; }
+.bi-cloud-arrow-up::before { content: "\f297"; }
+.bi-cloud-check-fill::before { content: "\f298"; }
+.bi-cloud-check::before { content: "\f299"; }
+.bi-cloud-download-fill::before { content: "\f29a"; }
+.bi-cloud-download::before { content: "\f29b"; }
+.bi-cloud-drizzle-fill::before { content: "\f29c"; }
+.bi-cloud-drizzle::before { content: "\f29d"; }
+.bi-cloud-fill::before { content: "\f29e"; }
+.bi-cloud-fog-fill::before { content: "\f29f"; }
+.bi-cloud-fog::before { content: "\f2a0"; }
+.bi-cloud-fog2-fill::before { content: "\f2a1"; }
+.bi-cloud-fog2::before { content: "\f2a2"; }
+.bi-cloud-hail-fill::before { content: "\f2a3"; }
+.bi-cloud-hail::before { content: "\f2a4"; }
+.bi-cloud-haze-1::before { content: "\f2a5"; }
+.bi-cloud-haze-fill::before { content: "\f2a6"; }
+.bi-cloud-haze::before { content: "\f2a7"; }
+.bi-cloud-haze2-fill::before { content: "\f2a8"; }
+.bi-cloud-lightning-fill::before { content: "\f2a9"; }
+.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; }
+.bi-cloud-lightning-rain::before { content: "\f2ab"; }
+.bi-cloud-lightning::before { content: "\f2ac"; }
+.bi-cloud-minus-fill::before { content: "\f2ad"; }
+.bi-cloud-minus::before { content: "\f2ae"; }
+.bi-cloud-moon-fill::before { content: "\f2af"; }
+.bi-cloud-moon::before { content: "\f2b0"; }
+.bi-cloud-plus-fill::before { content: "\f2b1"; }
+.bi-cloud-plus::before { content: "\f2b2"; }
+.bi-cloud-rain-fill::before { content: "\f2b3"; }
+.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; }
+.bi-cloud-rain-heavy::before { content: "\f2b5"; }
+.bi-cloud-rain::before { content: "\f2b6"; }
+.bi-cloud-slash-fill::before { content: "\f2b7"; }
+.bi-cloud-slash::before { content: "\f2b8"; }
+.bi-cloud-sleet-fill::before { content: "\f2b9"; }
+.bi-cloud-sleet::before { content: "\f2ba"; }
+.bi-cloud-snow-fill::before { content: "\f2bb"; }
+.bi-cloud-snow::before { content: "\f2bc"; }
+.bi-cloud-sun-fill::before { content: "\f2bd"; }
+.bi-cloud-sun::before { content: "\f2be"; }
+.bi-cloud-upload-fill::before { content: "\f2bf"; }
+.bi-cloud-upload::before { content: "\f2c0"; }
+.bi-cloud::before { content: "\f2c1"; }
+.bi-clouds-fill::before { content: "\f2c2"; }
+.bi-clouds::before { content: "\f2c3"; }
+.bi-cloudy-fill::before { content: "\f2c4"; }
+.bi-cloudy::before { content: "\f2c5"; }
+.bi-code-slash::before { content: "\f2c6"; }
+.bi-code-square::before { content: "\f2c7"; }
+.bi-code::before { content: "\f2c8"; }
+.bi-collection-fill::before { content: "\f2c9"; }
+.bi-collection-play-fill::before { content: "\f2ca"; }
+.bi-collection-play::before { content: "\f2cb"; }
+.bi-collection::before { content: "\f2cc"; }
+.bi-columns-gap::before { content: "\f2cd"; }
+.bi-columns::before { content: "\f2ce"; }
+.bi-command::before { content: "\f2cf"; }
+.bi-compass-fill::before { content: "\f2d0"; }
+.bi-compass::before { content: "\f2d1"; }
+.bi-cone-striped::before { content: "\f2d2"; }
+.bi-cone::before { content: "\f2d3"; }
+.bi-controller::before { content: "\f2d4"; }
+.bi-cpu-fill::before { content: "\f2d5"; }
+.bi-cpu::before { content: "\f2d6"; }
+.bi-credit-card-2-back-fill::before { content: "\f2d7"; }
+.bi-credit-card-2-back::before { content: "\f2d8"; }
+.bi-credit-card-2-front-fill::before { content: "\f2d9"; }
+.bi-credit-card-2-front::before { content: "\f2da"; }
+.bi-credit-card-fill::before { content: "\f2db"; }
+.bi-credit-card::before { content: "\f2dc"; }
+.bi-crop::before { content: "\f2dd"; }
+.bi-cup-fill::before { content: "\f2de"; }
+.bi-cup-straw::before { content: "\f2df"; }
+.bi-cup::before { content: "\f2e0"; }
+.bi-cursor-fill::before { content: "\f2e1"; }
+.bi-cursor-text::before { content: "\f2e2"; }
+.bi-cursor::before { content: "\f2e3"; }
+.bi-dash-circle-dotted::before { content: "\f2e4"; }
+.bi-dash-circle-fill::before { content: "\f2e5"; }
+.bi-dash-circle::before { content: "\f2e6"; }
+.bi-dash-square-dotted::before { content: "\f2e7"; }
+.bi-dash-square-fill::before { content: "\f2e8"; }
+.bi-dash-square::before { content: "\f2e9"; }
+.bi-dash::before { content: "\f2ea"; }
+.bi-diagram-2-fill::before { content: "\f2eb"; }
+.bi-diagram-2::before { content: "\f2ec"; }
+.bi-diagram-3-fill::before { content: "\f2ed"; }
+.bi-diagram-3::before { content: "\f2ee"; }
+.bi-diamond-fill::before { content: "\f2ef"; }
+.bi-diamond-half::before { content: "\f2f0"; }
+.bi-diamond::before { content: "\f2f1"; }
+.bi-dice-1-fill::before { content: "\f2f2"; }
+.bi-dice-1::before { content: "\f2f3"; }
+.bi-dice-2-fill::before { content: "\f2f4"; }
+.bi-dice-2::before { content: "\f2f5"; }
+.bi-dice-3-fill::before { content: "\f2f6"; }
+.bi-dice-3::before { content: "\f2f7"; }
+.bi-dice-4-fill::before { content: "\f2f8"; }
+.bi-dice-4::before { content: "\f2f9"; }
+.bi-dice-5-fill::before { content: "\f2fa"; }
+.bi-dice-5::before { content: "\f2fb"; }
+.bi-dice-6-fill::before { content: "\f2fc"; }
+.bi-dice-6::before { content: "\f2fd"; }
+.bi-disc-fill::before { content: "\f2fe"; }
+.bi-disc::before { content: "\f2ff"; }
+.bi-discord::before { content: "\f300"; }
+.bi-display-fill::before { content: "\f301"; }
+.bi-display::before { content: "\f302"; }
+.bi-distribute-horizontal::before { content: "\f303"; }
+.bi-distribute-vertical::before { content: "\f304"; }
+.bi-door-closed-fill::before { content: "\f305"; }
+.bi-door-closed::before { content: "\f306"; }
+.bi-door-open-fill::before { content: "\f307"; }
+.bi-door-open::before { content: "\f308"; }
+.bi-dot::before { content: "\f309"; }
+.bi-download::before { content: "\f30a"; }
+.bi-droplet-fill::before { content: "\f30b"; }
+.bi-droplet-half::before { content: "\f30c"; }
+.bi-droplet::before { content: "\f30d"; }
+.bi-earbuds::before { content: "\f30e"; }
+.bi-easel-fill::before { content: "\f30f"; }
+.bi-easel::before { content: "\f310"; }
+.bi-egg-fill::before { content: "\f311"; }
+.bi-egg-fried::before { content: "\f312"; }
+.bi-egg::before { content: "\f313"; }
+.bi-eject-fill::before { content: "\f314"; }
+.bi-eject::before { content: "\f315"; }
+.bi-emoji-angry-fill::before { content: "\f316"; }
+.bi-emoji-angry::before { content: "\f317"; }
+.bi-emoji-dizzy-fill::before { content: "\f318"; }
+.bi-emoji-dizzy::before { content: "\f319"; }
+.bi-emoji-expressionless-fill::before { content: "\f31a"; }
+.bi-emoji-expressionless::before { content: "\f31b"; }
+.bi-emoji-frown-fill::before { content: "\f31c"; }
+.bi-emoji-frown::before { content: "\f31d"; }
+.bi-emoji-heart-eyes-fill::before { content: "\f31e"; }
+.bi-emoji-heart-eyes::before { content: "\f31f"; }
+.bi-emoji-laughing-fill::before { content: "\f320"; }
+.bi-emoji-laughing::before { content: "\f321"; }
+.bi-emoji-neutral-fill::before { content: "\f322"; }
+.bi-emoji-neutral::before { content: "\f323"; }
+.bi-emoji-smile-fill::before { content: "\f324"; }
+.bi-emoji-smile-upside-down-fill::before { content: "\f325"; }
+.bi-emoji-smile-upside-down::before { content: "\f326"; }
+.bi-emoji-smile::before { content: "\f327"; }
+.bi-emoji-sunglasses-fill::before { content: "\f328"; }
+.bi-emoji-sunglasses::before { content: "\f329"; }
+.bi-emoji-wink-fill::before { content: "\f32a"; }
+.bi-emoji-wink::before { content: "\f32b"; }
+.bi-envelope-fill::before { content: "\f32c"; }
+.bi-envelope-open-fill::before { content: "\f32d"; }
+.bi-envelope-open::before { content: "\f32e"; }
+.bi-envelope::before { content: "\f32f"; }
+.bi-eraser-fill::before { content: "\f330"; }
+.bi-eraser::before { content: "\f331"; }
+.bi-exclamation-circle-fill::before { content: "\f332"; }
+.bi-exclamation-circle::before { content: "\f333"; }
+.bi-exclamation-diamond-fill::before { content: "\f334"; }
+.bi-exclamation-diamond::before { content: "\f335"; }
+.bi-exclamation-octagon-fill::before { content: "\f336"; }
+.bi-exclamation-octagon::before { content: "\f337"; }
+.bi-exclamation-square-fill::before { content: "\f338"; }
+.bi-exclamation-square::before { content: "\f339"; }
+.bi-exclamation-triangle-fill::before { content: "\f33a"; }
+.bi-exclamation-triangle::before { content: "\f33b"; }
+.bi-exclamation::before { content: "\f33c"; }
+.bi-exclude::before { content: "\f33d"; }
+.bi-eye-fill::before { content: "\f33e"; }
+.bi-eye-slash-fill::before { content: "\f33f"; }
+.bi-eye-slash::before { content: "\f340"; }
+.bi-eye::before { content: "\f341"; }
+.bi-eyedropper::before { content: "\f342"; }
+.bi-eyeglasses::before { content: "\f343"; }
+.bi-facebook::before { content: "\f344"; }
+.bi-file-arrow-down-fill::before { content: "\f345"; }
+.bi-file-arrow-down::before { content: "\f346"; }
+.bi-file-arrow-up-fill::before { content: "\f347"; }
+.bi-file-arrow-up::before { content: "\f348"; }
+.bi-file-bar-graph-fill::before { content: "\f349"; }
+.bi-file-bar-graph::before { content: "\f34a"; }
+.bi-file-binary-fill::before { content: "\f34b"; }
+.bi-file-binary::before { content: "\f34c"; }
+.bi-file-break-fill::before { content: "\f34d"; }
+.bi-file-break::before { content: "\f34e"; }
+.bi-file-check-fill::before { content: "\f34f"; }
+.bi-file-check::before { content: "\f350"; }
+.bi-file-code-fill::before { content: "\f351"; }
+.bi-file-code::before { content: "\f352"; }
+.bi-file-diff-fill::before { content: "\f353"; }
+.bi-file-diff::before { content: "\f354"; }
+.bi-file-earmark-arrow-down-fill::before { content: "\f355"; }
+.bi-file-earmark-arrow-down::before { content: "\f356"; }
+.bi-file-earmark-arrow-up-fill::before { content: "\f357"; }
+.bi-file-earmark-arrow-up::before { content: "\f358"; }
+.bi-file-earmark-bar-graph-fill::before { content: "\f359"; }
+.bi-file-earmark-bar-graph::before { content: "\f35a"; }
+.bi-file-earmark-binary-fill::before { content: "\f35b"; }
+.bi-file-earmark-binary::before { content: "\f35c"; }
+.bi-file-earmark-break-fill::before { content: "\f35d"; }
+.bi-file-earmark-break::before { content: "\f35e"; }
+.bi-file-earmark-check-fill::before { content: "\f35f"; }
+.bi-file-earmark-check::before { content: "\f360"; }
+.bi-file-earmark-code-fill::before { content: "\f361"; }
+.bi-file-earmark-code::before { content: "\f362"; }
+.bi-file-earmark-diff-fill::before { content: "\f363"; }
+.bi-file-earmark-diff::before { content: "\f364"; }
+.bi-file-earmark-easel-fill::before { content: "\f365"; }
+.bi-file-earmark-easel::before { content: "\f366"; }
+.bi-file-earmark-excel-fill::before { content: "\f367"; }
+.bi-file-earmark-excel::before { content: "\f368"; }
+.bi-file-earmark-fill::before { content: "\f369"; }
+.bi-file-earmark-font-fill::before { content: "\f36a"; }
+.bi-file-earmark-font::before { content: "\f36b"; }
+.bi-file-earmark-image-fill::before { content: "\f36c"; }
+.bi-file-earmark-image::before { content: "\f36d"; }
+.bi-file-earmark-lock-fill::before { content: "\f36e"; }
+.bi-file-earmark-lock::before { content: "\f36f"; }
+.bi-file-earmark-lock2-fill::before { content: "\f370"; }
+.bi-file-earmark-lock2::before { content: "\f371"; }
+.bi-file-earmark-medical-fill::before { content: "\f372"; }
+.bi-file-earmark-medical::before { content: "\f373"; }
+.bi-file-earmark-minus-fill::before { content: "\f374"; }
+.bi-file-earmark-minus::before { content: "\f375"; }
+.bi-file-earmark-music-fill::before { content: "\f376"; }
+.bi-file-earmark-music::before { content: "\f377"; }
+.bi-file-earmark-person-fill::before { content: "\f378"; }
+.bi-file-earmark-person::before { content: "\f379"; }
+.bi-file-earmark-play-fill::before { content: "\f37a"; }
+.bi-file-earmark-play::before { content: "\f37b"; }
+.bi-file-earmark-plus-fill::before { content: "\f37c"; }
+.bi-file-earmark-plus::before { content: "\f37d"; }
+.bi-file-earmark-post-fill::before { content: "\f37e"; }
+.bi-file-earmark-post::before { content: "\f37f"; }
+.bi-file-earmark-ppt-fill::before { content: "\f380"; }
+.bi-file-earmark-ppt::before { content: "\f381"; }
+.bi-file-earmark-richtext-fill::before { content: "\f382"; }
+.bi-file-earmark-richtext::before { content: "\f383"; }
+.bi-file-earmark-ruled-fill::before { content: "\f384"; }
+.bi-file-earmark-ruled::before { content: "\f385"; }
+.bi-file-earmark-slides-fill::before { content: "\f386"; }
+.bi-file-earmark-slides::before { content: "\f387"; }
+.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; }
+.bi-file-earmark-spreadsheet::before { content: "\f389"; }
+.bi-file-earmark-text-fill::before { content: "\f38a"; }
+.bi-file-earmark-text::before { content: "\f38b"; }
+.bi-file-earmark-word-fill::before { content: "\f38c"; }
+.bi-file-earmark-word::before { content: "\f38d"; }
+.bi-file-earmark-x-fill::before { content: "\f38e"; }
+.bi-file-earmark-x::before { content: "\f38f"; }
+.bi-file-earmark-zip-fill::before { content: "\f390"; }
+.bi-file-earmark-zip::before { content: "\f391"; }
+.bi-file-earmark::before { content: "\f392"; }
+.bi-file-easel-fill::before { content: "\f393"; }
+.bi-file-easel::before { content: "\f394"; }
+.bi-file-excel-fill::before { content: "\f395"; }
+.bi-file-excel::before { content: "\f396"; }
+.bi-file-fill::before { content: "\f397"; }
+.bi-file-font-fill::before { content: "\f398"; }
+.bi-file-font::before { content: "\f399"; }
+.bi-file-image-fill::before { content: "\f39a"; }
+.bi-file-image::before { content: "\f39b"; }
+.bi-file-lock-fill::before { content: "\f39c"; }
+.bi-file-lock::before { content: "\f39d"; }
+.bi-file-lock2-fill::before { content: "\f39e"; }
+.bi-file-lock2::before { content: "\f39f"; }
+.bi-file-medical-fill::before { content: "\f3a0"; }
+.bi-file-medical::before { content: "\f3a1"; }
+.bi-file-minus-fill::before { content: "\f3a2"; }
+.bi-file-minus::before { content: "\f3a3"; }
+.bi-file-music-fill::before { content: "\f3a4"; }
+.bi-file-music::before { content: "\f3a5"; }
+.bi-file-person-fill::before { content: "\f3a6"; }
+.bi-file-person::before { content: "\f3a7"; }
+.bi-file-play-fill::before { content: "\f3a8"; }
+.bi-file-play::before { content: "\f3a9"; }
+.bi-file-plus-fill::before { content: "\f3aa"; }
+.bi-file-plus::before { content: "\f3ab"; }
+.bi-file-post-fill::before { content: "\f3ac"; }
+.bi-file-post::before { content: "\f3ad"; }
+.bi-file-ppt-fill::before { content: "\f3ae"; }
+.bi-file-ppt::before { content: "\f3af"; }
+.bi-file-richtext-fill::before { content: "\f3b0"; }
+.bi-file-richtext::before { content: "\f3b1"; }
+.bi-file-ruled-fill::before { content: "\f3b2"; }
+.bi-file-ruled::before { content: "\f3b3"; }
+.bi-file-slides-fill::before { content: "\f3b4"; }
+.bi-file-slides::before { content: "\f3b5"; }
+.bi-file-spreadsheet-fill::before { content: "\f3b6"; }
+.bi-file-spreadsheet::before { content: "\f3b7"; }
+.bi-file-text-fill::before { content: "\f3b8"; }
+.bi-file-text::before { content: "\f3b9"; }
+.bi-file-word-fill::before { content: "\f3ba"; }
+.bi-file-word::before { content: "\f3bb"; }
+.bi-file-x-fill::before { content: "\f3bc"; }
+.bi-file-x::before { content: "\f3bd"; }
+.bi-file-zip-fill::before { content: "\f3be"; }
+.bi-file-zip::before { content: "\f3bf"; }
+.bi-file::before { content: "\f3c0"; }
+.bi-files-alt::before { content: "\f3c1"; }
+.bi-files::before { content: "\f3c2"; }
+.bi-film::before { content: "\f3c3"; }
+.bi-filter-circle-fill::before { content: "\f3c4"; }
+.bi-filter-circle::before { content: "\f3c5"; }
+.bi-filter-left::before { content: "\f3c6"; }
+.bi-filter-right::before { content: "\f3c7"; }
+.bi-filter-square-fill::before { content: "\f3c8"; }
+.bi-filter-square::before { content: "\f3c9"; }
+.bi-filter::before { content: "\f3ca"; }
+.bi-flag-fill::before { content: "\f3cb"; }
+.bi-flag::before { content: "\f3cc"; }
+.bi-flower1::before { content: "\f3cd"; }
+.bi-flower2::before { content: "\f3ce"; }
+.bi-flower3::before { content: "\f3cf"; }
+.bi-folder-check::before { content: "\f3d0"; }
+.bi-folder-fill::before { content: "\f3d1"; }
+.bi-folder-minus::before { content: "\f3d2"; }
+.bi-folder-plus::before { content: "\f3d3"; }
+.bi-folder-symlink-fill::before { content: "\f3d4"; }
+.bi-folder-symlink::before { content: "\f3d5"; }
+.bi-folder-x::before { content: "\f3d6"; }
+.bi-folder::before { content: "\f3d7"; }
+.bi-folder2-open::before { content: "\f3d8"; }
+.bi-folder2::before { content: "\f3d9"; }
+.bi-fonts::before { content: "\f3da"; }
+.bi-forward-fill::before { content: "\f3db"; }
+.bi-forward::before { content: "\f3dc"; }
+.bi-front::before { content: "\f3dd"; }
+.bi-fullscreen-exit::before { content: "\f3de"; }
+.bi-fullscreen::before { content: "\f3df"; }
+.bi-funnel-fill::before { content: "\f3e0"; }
+.bi-funnel::before { content: "\f3e1"; }
+.bi-gear-fill::before { content: "\f3e2"; }
+.bi-gear-wide-connected::before { content: "\f3e3"; }
+.bi-gear-wide::before { content: "\f3e4"; }
+.bi-gear::before { content: "\f3e5"; }
+.bi-gem::before { content: "\f3e6"; }
+.bi-geo-alt-fill::before { content: "\f3e7"; }
+.bi-geo-alt::before { content: "\f3e8"; }
+.bi-geo-fill::before { content: "\f3e9"; }
+.bi-geo::before { content: "\f3ea"; }
+.bi-gift-fill::before { content: "\f3eb"; }
+.bi-gift::before { content: "\f3ec"; }
+.bi-github::before { content: "\f3ed"; }
+.bi-globe::before { content: "\f3ee"; }
+.bi-globe2::before { content: "\f3ef"; }
+.bi-google::before { content: "\f3f0"; }
+.bi-graph-down::before { content: "\f3f1"; }
+.bi-graph-up::before { content: "\f3f2"; }
+.bi-grid-1x2-fill::before { content: "\f3f3"; }
+.bi-grid-1x2::before { content: "\f3f4"; }
+.bi-grid-3x2-gap-fill::before { content: "\f3f5"; }
+.bi-grid-3x2-gap::before { content: "\f3f6"; }
+.bi-grid-3x2::before { content: "\f3f7"; }
+.bi-grid-3x3-gap-fill::before { content: "\f3f8"; }
+.bi-grid-3x3-gap::before { content: "\f3f9"; }
+.bi-grid-3x3::before { content: "\f3fa"; }
+.bi-grid-fill::before { content: "\f3fb"; }
+.bi-grid::before { content: "\f3fc"; }
+.bi-grip-horizontal::before { content: "\f3fd"; }
+.bi-grip-vertical::before { content: "\f3fe"; }
+.bi-hammer::before { content: "\f3ff"; }
+.bi-hand-index-fill::before { content: "\f400"; }
+.bi-hand-index-thumb-fill::before { content: "\f401"; }
+.bi-hand-index-thumb::before { content: "\f402"; }
+.bi-hand-index::before { content: "\f403"; }
+.bi-hand-thumbs-down-fill::before { content: "\f404"; }
+.bi-hand-thumbs-down::before { content: "\f405"; }
+.bi-hand-thumbs-up-fill::before { content: "\f406"; }
+.bi-hand-thumbs-up::before { content: "\f407"; }
+.bi-handbag-fill::before { content: "\f408"; }
+.bi-handbag::before { content: "\f409"; }
+.bi-hash::before { content: "\f40a"; }
+.bi-hdd-fill::before { content: "\f40b"; }
+.bi-hdd-network-fill::before { content: "\f40c"; }
+.bi-hdd-network::before { content: "\f40d"; }
+.bi-hdd-rack-fill::before { content: "\f40e"; }
+.bi-hdd-rack::before { content: "\f40f"; }
+.bi-hdd-stack-fill::before { content: "\f410"; }
+.bi-hdd-stack::before { content: "\f411"; }
+.bi-hdd::before { content: "\f412"; }
+.bi-headphones::before { content: "\f413"; }
+.bi-headset::before { content: "\f414"; }
+.bi-heart-fill::before { content: "\f415"; }
+.bi-heart-half::before { content: "\f416"; }
+.bi-heart::before { content: "\f417"; }
+.bi-heptagon-fill::before { content: "\f418"; }
+.bi-heptagon-half::before { content: "\f419"; }
+.bi-heptagon::before { content: "\f41a"; }
+.bi-hexagon-fill::before { content: "\f41b"; }
+.bi-hexagon-half::before { content: "\f41c"; }
+.bi-hexagon::before { content: "\f41d"; }
+.bi-hourglass-bottom::before { content: "\f41e"; }
+.bi-hourglass-split::before { content: "\f41f"; }
+.bi-hourglass-top::before { content: "\f420"; }
+.bi-hourglass::before { content: "\f421"; }
+.bi-house-door-fill::before { content: "\f422"; }
+.bi-house-door::before { content: "\f423"; }
+.bi-house-fill::before { content: "\f424"; }
+.bi-house::before { content: "\f425"; }
+.bi-hr::before { content: "\f426"; }
+.bi-hurricane::before { content: "\f427"; }
+.bi-image-alt::before { content: "\f428"; }
+.bi-image-fill::before { content: "\f429"; }
+.bi-image::before { content: "\f42a"; }
+.bi-images::before { content: "\f42b"; }
+.bi-inbox-fill::before { content: "\f42c"; }
+.bi-inbox::before { content: "\f42d"; }
+.bi-inboxes-fill::before { content: "\f42e"; }
+.bi-inboxes::before { content: "\f42f"; }
+.bi-info-circle-fill::before { content: "\f430"; }
+.bi-info-circle::before { content: "\f431"; }
+.bi-info-square-fill::before { content: "\f432"; }
+.bi-info-square::before { content: "\f433"; }
+.bi-info::before { content: "\f434"; }
+.bi-input-cursor-text::before { content: "\f435"; }
+.bi-input-cursor::before { content: "\f436"; }
+.bi-instagram::before { content: "\f437"; }
+.bi-intersect::before { content: "\f438"; }
+.bi-journal-album::before { content: "\f439"; }
+.bi-journal-arrow-down::before { content: "\f43a"; }
+.bi-journal-arrow-up::before { content: "\f43b"; }
+.bi-journal-bookmark-fill::before { content: "\f43c"; }
+.bi-journal-bookmark::before { content: "\f43d"; }
+.bi-journal-check::before { content: "\f43e"; }
+.bi-journal-code::before { content: "\f43f"; }
+.bi-journal-medical::before { content: "\f440"; }
+.bi-journal-minus::before { content: "\f441"; }
+.bi-journal-plus::before { content: "\f442"; }
+.bi-journal-richtext::before { content: "\f443"; }
+.bi-journal-text::before { content: "\f444"; }
+.bi-journal-x::before { content: "\f445"; }
+.bi-journal::before { content: "\f446"; }
+.bi-journals::before { content: "\f447"; }
+.bi-joystick::before { content: "\f448"; }
+.bi-justify-left::before { content: "\f449"; }
+.bi-justify-right::before { content: "\f44a"; }
+.bi-justify::before { content: "\f44b"; }
+.bi-kanban-fill::before { content: "\f44c"; }
+.bi-kanban::before { content: "\f44d"; }
+.bi-key-fill::before { content: "\f44e"; }
+.bi-key::before { content: "\f44f"; }
+.bi-keyboard-fill::before { content: "\f450"; }
+.bi-keyboard::before { content: "\f451"; }
+.bi-ladder::before { content: "\f452"; }
+.bi-lamp-fill::before { content: "\f453"; }
+.bi-lamp::before { content: "\f454"; }
+.bi-laptop-fill::before { content: "\f455"; }
+.bi-laptop::before { content: "\f456"; }
+.bi-layer-backward::before { content: "\f457"; }
+.bi-layer-forward::before { content: "\f458"; }
+.bi-layers-fill::before { content: "\f459"; }
+.bi-layers-half::before { content: "\f45a"; }
+.bi-layers::before { content: "\f45b"; }
+.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; }
+.bi-layout-sidebar-inset::before { content: "\f45d"; }
+.bi-layout-sidebar-reverse::before { content: "\f45e"; }
+.bi-layout-sidebar::before { content: "\f45f"; }
+.bi-layout-split::before { content: "\f460"; }
+.bi-layout-text-sidebar-reverse::before { content: "\f461"; }
+.bi-layout-text-sidebar::before { content: "\f462"; }
+.bi-layout-text-window-reverse::before { content: "\f463"; }
+.bi-layout-text-window::before { content: "\f464"; }
+.bi-layout-three-columns::before { content: "\f465"; }
+.bi-layout-wtf::before { content: "\f466"; }
+.bi-life-preserver::before { content: "\f467"; }
+.bi-lightbulb-fill::before { content: "\f468"; }
+.bi-lightbulb-off-fill::before { content: "\f469"; }
+.bi-lightbulb-off::before { content: "\f46a"; }
+.bi-lightbulb::before { content: "\f46b"; }
+.bi-lightning-charge-fill::before { content: "\f46c"; }
+.bi-lightning-charge::before { content: "\f46d"; }
+.bi-lightning-fill::before { content: "\f46e"; }
+.bi-lightning::before { content: "\f46f"; }
+.bi-link-45deg::before { content: "\f470"; }
+.bi-link::before { content: "\f471"; }
+.bi-linkedin::before { content: "\f472"; }
+.bi-list-check::before { content: "\f473"; }
+.bi-list-nested::before { content: "\f474"; }
+.bi-list-ol::before { content: "\f475"; }
+.bi-list-stars::before { content: "\f476"; }
+.bi-list-task::before { content: "\f477"; }
+.bi-list-ul::before { content: "\f478"; }
+.bi-list::before { content: "\f479"; }
+.bi-lock-fill::before { content: "\f47a"; }
+.bi-lock::before { content: "\f47b"; }
+.bi-mailbox::before { content: "\f47c"; }
+.bi-mailbox2::before { content: "\f47d"; }
+.bi-map-fill::before { content: "\f47e"; }
+.bi-map::before { content: "\f47f"; }
+.bi-markdown-fill::before { content: "\f480"; }
+.bi-markdown::before { content: "\f481"; }
+.bi-mask::before { content: "\f482"; }
+.bi-megaphone-fill::before { content: "\f483"; }
+.bi-megaphone::before { content: "\f484"; }
+.bi-menu-app-fill::before { content: "\f485"; }
+.bi-menu-app::before { content: "\f486"; }
+.bi-menu-button-fill::before { content: "\f487"; }
+.bi-menu-button-wide-fill::before { content: "\f488"; }
+.bi-menu-button-wide::before { content: "\f489"; }
+.bi-menu-button::before { content: "\f48a"; }
+.bi-menu-down::before { content: "\f48b"; }
+.bi-menu-up::before { content: "\f48c"; }
+.bi-mic-fill::before { content: "\f48d"; }
+.bi-mic-mute-fill::before { content: "\f48e"; }
+.bi-mic-mute::before { content: "\f48f"; }
+.bi-mic::before { content: "\f490"; }
+.bi-minecart-loaded::before { content: "\f491"; }
+.bi-minecart::before { content: "\f492"; }
+.bi-moisture::before { content: "\f493"; }
+.bi-moon-fill::before { content: "\f494"; }
+.bi-moon-stars-fill::before { content: "\f495"; }
+.bi-moon-stars::before { content: "\f496"; }
+.bi-moon::before { content: "\f497"; }
+.bi-mouse-fill::before { content: "\f498"; }
+.bi-mouse::before { content: "\f499"; }
+.bi-mouse2-fill::before { content: "\f49a"; }
+.bi-mouse2::before { content: "\f49b"; }
+.bi-mouse3-fill::before { content: "\f49c"; }
+.bi-mouse3::before { content: "\f49d"; }
+.bi-music-note-beamed::before { content: "\f49e"; }
+.bi-music-note-list::before { content: "\f49f"; }
+.bi-music-note::before { content: "\f4a0"; }
+.bi-music-player-fill::before { content: "\f4a1"; }
+.bi-music-player::before { content: "\f4a2"; }
+.bi-newspaper::before { content: "\f4a3"; }
+.bi-node-minus-fill::before { content: "\f4a4"; }
+.bi-node-minus::before { content: "\f4a5"; }
+.bi-node-plus-fill::before { content: "\f4a6"; }
+.bi-node-plus::before { content: "\f4a7"; }
+.bi-nut-fill::before { content: "\f4a8"; }
+.bi-nut::before { content: "\f4a9"; }
+.bi-octagon-fill::before { content: "\f4aa"; }
+.bi-octagon-half::before { content: "\f4ab"; }
+.bi-octagon::before { content: "\f4ac"; }
+.bi-option::before { content: "\f4ad"; }
+.bi-outlet::before { content: "\f4ae"; }
+.bi-paint-bucket::before { content: "\f4af"; }
+.bi-palette-fill::before { content: "\f4b0"; }
+.bi-palette::before { content: "\f4b1"; }
+.bi-palette2::before { content: "\f4b2"; }
+.bi-paperclip::before { content: "\f4b3"; }
+.bi-paragraph::before { content: "\f4b4"; }
+.bi-patch-check-fill::before { content: "\f4b5"; }
+.bi-patch-check::before { content: "\f4b6"; }
+.bi-patch-exclamation-fill::before { content: "\f4b7"; }
+.bi-patch-exclamation::before { content: "\f4b8"; }
+.bi-patch-minus-fill::before { content: "\f4b9"; }
+.bi-patch-minus::before { content: "\f4ba"; }
+.bi-patch-plus-fill::before { content: "\f4bb"; }
+.bi-patch-plus::before { content: "\f4bc"; }
+.bi-patch-question-fill::before { content: "\f4bd"; }
+.bi-patch-question::before { content: "\f4be"; }
+.bi-pause-btn-fill::before { content: "\f4bf"; }
+.bi-pause-btn::before { content: "\f4c0"; }
+.bi-pause-circle-fill::before { content: "\f4c1"; }
+.bi-pause-circle::before { content: "\f4c2"; }
+.bi-pause-fill::before { content: "\f4c3"; }
+.bi-pause::before { content: "\f4c4"; }
+.bi-peace-fill::before { content: "\f4c5"; }
+.bi-peace::before { content: "\f4c6"; }
+.bi-pen-fill::before { content: "\f4c7"; }
+.bi-pen::before { content: "\f4c8"; }
+.bi-pencil-fill::before { content: "\f4c9"; }
+.bi-pencil-square::before { content: "\f4ca"; }
+.bi-pencil::before { content: "\f4cb"; }
+.bi-pentagon-fill::before { content: "\f4cc"; }
+.bi-pentagon-half::before { content: "\f4cd"; }
+.bi-pentagon::before { content: "\f4ce"; }
+.bi-people-fill::before { content: "\f4cf"; }
+.bi-people::before { content: "\f4d0"; }
+.bi-percent::before { content: "\f4d1"; }
+.bi-person-badge-fill::before { content: "\f4d2"; }
+.bi-person-badge::before { content: "\f4d3"; }
+.bi-person-bounding-box::before { content: "\f4d4"; }
+.bi-person-check-fill::before { content: "\f4d5"; }
+.bi-person-check::before { content: "\f4d6"; }
+.bi-person-circle::before { content: "\f4d7"; }
+.bi-person-dash-fill::before { content: "\f4d8"; }
+.bi-person-dash::before { content: "\f4d9"; }
+.bi-person-fill::before { content: "\f4da"; }
+.bi-person-lines-fill::before { content: "\f4db"; }
+.bi-person-plus-fill::before { content: "\f4dc"; }
+.bi-person-plus::before { content: "\f4dd"; }
+.bi-person-square::before { content: "\f4de"; }
+.bi-person-x-fill::before { content: "\f4df"; }
+.bi-person-x::before { content: "\f4e0"; }
+.bi-person::before { content: "\f4e1"; }
+.bi-phone-fill::before { content: "\f4e2"; }
+.bi-phone-landscape-fill::before { content: "\f4e3"; }
+.bi-phone-landscape::before { content: "\f4e4"; }
+.bi-phone-vibrate-fill::before { content: "\f4e5"; }
+.bi-phone-vibrate::before { content: "\f4e6"; }
+.bi-phone::before { content: "\f4e7"; }
+.bi-pie-chart-fill::before { content: "\f4e8"; }
+.bi-pie-chart::before { content: "\f4e9"; }
+.bi-pin-angle-fill::before { content: "\f4ea"; }
+.bi-pin-angle::before { content: "\f4eb"; }
+.bi-pin-fill::before { content: "\f4ec"; }
+.bi-pin::before { content: "\f4ed"; }
+.bi-pip-fill::before { content: "\f4ee"; }
+.bi-pip::before { content: "\f4ef"; }
+.bi-play-btn-fill::before { content: "\f4f0"; }
+.bi-play-btn::before { content: "\f4f1"; }
+.bi-play-circle-fill::before { content: "\f4f2"; }
+.bi-play-circle::before { content: "\f4f3"; }
+.bi-play-fill::before { content: "\f4f4"; }
+.bi-play::before { content: "\f4f5"; }
+.bi-plug-fill::before { content: "\f4f6"; }
+.bi-plug::before { content: "\f4f7"; }
+.bi-plus-circle-dotted::before { content: "\f4f8"; }
+.bi-plus-circle-fill::before { content: "\f4f9"; }
+.bi-plus-circle::before { content: "\f4fa"; }
+.bi-plus-square-dotted::before { content: "\f4fb"; }
+.bi-plus-square-fill::before { content: "\f4fc"; }
+.bi-plus-square::before { content: "\f4fd"; }
+.bi-plus::before { content: "\f4fe"; }
+.bi-power::before { content: "\f4ff"; }
+.bi-printer-fill::before { content: "\f500"; }
+.bi-printer::before { content: "\f501"; }
+.bi-puzzle-fill::before { content: "\f502"; }
+.bi-puzzle::before { content: "\f503"; }
+.bi-question-circle-fill::before { content: "\f504"; }
+.bi-question-circle::before { content: "\f505"; }
+.bi-question-diamond-fill::before { content: "\f506"; }
+.bi-question-diamond::before { content: "\f507"; }
+.bi-question-octagon-fill::before { content: "\f508"; }
+.bi-question-octagon::before { content: "\f509"; }
+.bi-question-square-fill::before { content: "\f50a"; }
+.bi-question-square::before { content: "\f50b"; }
+.bi-question::before { content: "\f50c"; }
+.bi-rainbow::before { content: "\f50d"; }
+.bi-receipt-cutoff::before { content: "\f50e"; }
+.bi-receipt::before { content: "\f50f"; }
+.bi-reception-0::before { content: "\f510"; }
+.bi-reception-1::before { content: "\f511"; }
+.bi-reception-2::before { content: "\f512"; }
+.bi-reception-3::before { content: "\f513"; }
+.bi-reception-4::before { content: "\f514"; }
+.bi-record-btn-fill::before { content: "\f515"; }
+.bi-record-btn::before { content: "\f516"; }
+.bi-record-circle-fill::before { content: "\f517"; }
+.bi-record-circle::before { content: "\f518"; }
+.bi-record-fill::before { content: "\f519"; }
+.bi-record::before { content: "\f51a"; }
+.bi-record2-fill::before { content: "\f51b"; }
+.bi-record2::before { content: "\f51c"; }
+.bi-reply-all-fill::before { content: "\f51d"; }
+.bi-reply-all::before { content: "\f51e"; }
+.bi-reply-fill::before { content: "\f51f"; }
+.bi-reply::before { content: "\f520"; }
+.bi-rss-fill::before { content: "\f521"; }
+.bi-rss::before { content: "\f522"; }
+.bi-rulers::before { content: "\f523"; }
+.bi-save-fill::before { content: "\f524"; }
+.bi-save::before { content: "\f525"; }
+.bi-save2-fill::before { content: "\f526"; }
+.bi-save2::before { content: "\f527"; }
+.bi-scissors::before { content: "\f528"; }
+.bi-screwdriver::before { content: "\f529"; }
+.bi-search::before { content: "\f52a"; }
+.bi-segmented-nav::before { content: "\f52b"; }
+.bi-server::before { content: "\f52c"; }
+.bi-share-fill::before { content: "\f52d"; }
+.bi-share::before { content: "\f52e"; }
+.bi-shield-check::before { content: "\f52f"; }
+.bi-shield-exclamation::before { content: "\f530"; }
+.bi-shield-fill-check::before { content: "\f531"; }
+.bi-shield-fill-exclamation::before { content: "\f532"; }
+.bi-shield-fill-minus::before { content: "\f533"; }
+.bi-shield-fill-plus::before { content: "\f534"; }
+.bi-shield-fill-x::before { content: "\f535"; }
+.bi-shield-fill::before { content: "\f536"; }
+.bi-shield-lock-fill::before { content: "\f537"; }
+.bi-shield-lock::before { content: "\f538"; }
+.bi-shield-minus::before { content: "\f539"; }
+.bi-shield-plus::before { content: "\f53a"; }
+.bi-shield-shaded::before { content: "\f53b"; }
+.bi-shield-slash-fill::before { content: "\f53c"; }
+.bi-shield-slash::before { content: "\f53d"; }
+.bi-shield-x::before { content: "\f53e"; }
+.bi-shield::before { content: "\f53f"; }
+.bi-shift-fill::before { content: "\f540"; }
+.bi-shift::before { content: "\f541"; }
+.bi-shop-window::before { content: "\f542"; }
+.bi-shop::before { content: "\f543"; }
+.bi-shuffle::before { content: "\f544"; }
+.bi-signpost-2-fill::before { content: "\f545"; }
+.bi-signpost-2::before { content: "\f546"; }
+.bi-signpost-fill::before { content: "\f547"; }
+.bi-signpost-split-fill::before { content: "\f548"; }
+.bi-signpost-split::before { content: "\f549"; }
+.bi-signpost::before { content: "\f54a"; }
+.bi-sim-fill::before { content: "\f54b"; }
+.bi-sim::before { content: "\f54c"; }
+.bi-skip-backward-btn-fill::before { content: "\f54d"; }
+.bi-skip-backward-btn::before { content: "\f54e"; }
+.bi-skip-backward-circle-fill::before { content: "\f54f"; }
+.bi-skip-backward-circle::before { content: "\f550"; }
+.bi-skip-backward-fill::before { content: "\f551"; }
+.bi-skip-backward::before { content: "\f552"; }
+.bi-skip-end-btn-fill::before { content: "\f553"; }
+.bi-skip-end-btn::before { content: "\f554"; }
+.bi-skip-end-circle-fill::before { content: "\f555"; }
+.bi-skip-end-circle::before { content: "\f556"; }
+.bi-skip-end-fill::before { content: "\f557"; }
+.bi-skip-end::before { content: "\f558"; }
+.bi-skip-forward-btn-fill::before { content: "\f559"; }
+.bi-skip-forward-btn::before { content: "\f55a"; }
+.bi-skip-forward-circle-fill::before { content: "\f55b"; }
+.bi-skip-forward-circle::before { content: "\f55c"; }
+.bi-skip-forward-fill::before { content: "\f55d"; }
+.bi-skip-forward::before { content: "\f55e"; }
+.bi-skip-start-btn-fill::before { content: "\f55f"; }
+.bi-skip-start-btn::before { content: "\f560"; }
+.bi-skip-start-circle-fill::before { content: "\f561"; }
+.bi-skip-start-circle::before { content: "\f562"; }
+.bi-skip-start-fill::before { content: "\f563"; }
+.bi-skip-start::before { content: "\f564"; }
+.bi-slack::before { content: "\f565"; }
+.bi-slash-circle-fill::before { content: "\f566"; }
+.bi-slash-circle::before { content: "\f567"; }
+.bi-slash-square-fill::before { content: "\f568"; }
+.bi-slash-square::before { content: "\f569"; }
+.bi-slash::before { content: "\f56a"; }
+.bi-sliders::before { content: "\f56b"; }
+.bi-smartwatch::before { content: "\f56c"; }
+.bi-snow::before { content: "\f56d"; }
+.bi-snow2::before { content: "\f56e"; }
+.bi-snow3::before { content: "\f56f"; }
+.bi-sort-alpha-down-alt::before { content: "\f570"; }
+.bi-sort-alpha-down::before { content: "\f571"; }
+.bi-sort-alpha-up-alt::before { content: "\f572"; }
+.bi-sort-alpha-up::before { content: "\f573"; }
+.bi-sort-down-alt::before { content: "\f574"; }
+.bi-sort-down::before { content: "\f575"; }
+.bi-sort-numeric-down-alt::before { content: "\f576"; }
+.bi-sort-numeric-down::before { content: "\f577"; }
+.bi-sort-numeric-up-alt::before { content: "\f578"; }
+.bi-sort-numeric-up::before { content: "\f579"; }
+.bi-sort-up-alt::before { content: "\f57a"; }
+.bi-sort-up::before { content: "\f57b"; }
+.bi-soundwave::before { content: "\f57c"; }
+.bi-speaker-fill::before { content: "\f57d"; }
+.bi-speaker::before { content: "\f57e"; }
+.bi-speedometer::before { content: "\f57f"; }
+.bi-speedometer2::before { content: "\f580"; }
+.bi-spellcheck::before { content: "\f581"; }
+.bi-square-fill::before { content: "\f582"; }
+.bi-square-half::before { content: "\f583"; }
+.bi-square::before { content: "\f584"; }
+.bi-stack::before { content: "\f585"; }
+.bi-star-fill::before { content: "\f586"; }
+.bi-star-half::before { content: "\f587"; }
+.bi-star::before { content: "\f588"; }
+.bi-stars::before { content: "\f589"; }
+.bi-stickies-fill::before { content: "\f58a"; }
+.bi-stickies::before { content: "\f58b"; }
+.bi-sticky-fill::before { content: "\f58c"; }
+.bi-sticky::before { content: "\f58d"; }
+.bi-stop-btn-fill::before { content: "\f58e"; }
+.bi-stop-btn::before { content: "\f58f"; }
+.bi-stop-circle-fill::before { content: "\f590"; }
+.bi-stop-circle::before { content: "\f591"; }
+.bi-stop-fill::before { content: "\f592"; }
+.bi-stop::before { content: "\f593"; }
+.bi-stoplights-fill::before { content: "\f594"; }
+.bi-stoplights::before { content: "\f595"; }
+.bi-stopwatch-fill::before { content: "\f596"; }
+.bi-stopwatch::before { content: "\f597"; }
+.bi-subtract::before { content: "\f598"; }
+.bi-suit-club-fill::before { content: "\f599"; }
+.bi-suit-club::before { content: "\f59a"; }
+.bi-suit-diamond-fill::before { content: "\f59b"; }
+.bi-suit-diamond::before { content: "\f59c"; }
+.bi-suit-heart-fill::before { content: "\f59d"; }
+.bi-suit-heart::before { content: "\f59e"; }
+.bi-suit-spade-fill::before { content: "\f59f"; }
+.bi-suit-spade::before { content: "\f5a0"; }
+.bi-sun-fill::before { content: "\f5a1"; }
+.bi-sun::before { content: "\f5a2"; }
+.bi-sunglasses::before { content: "\f5a3"; }
+.bi-sunrise-fill::before { content: "\f5a4"; }
+.bi-sunrise::before { content: "\f5a5"; }
+.bi-sunset-fill::before { content: "\f5a6"; }
+.bi-sunset::before { content: "\f5a7"; }
+.bi-symmetry-horizontal::before { content: "\f5a8"; }
+.bi-symmetry-vertical::before { content: "\f5a9"; }
+.bi-table::before { content: "\f5aa"; }
+.bi-tablet-fill::before { content: "\f5ab"; }
+.bi-tablet-landscape-fill::before { content: "\f5ac"; }
+.bi-tablet-landscape::before { content: "\f5ad"; }
+.bi-tablet::before { content: "\f5ae"; }
+.bi-tag-fill::before { content: "\f5af"; }
+.bi-tag::before { content: "\f5b0"; }
+.bi-tags-fill::before { content: "\f5b1"; }
+.bi-tags::before { content: "\f5b2"; }
+.bi-telegram::before { content: "\f5b3"; }
+.bi-telephone-fill::before { content: "\f5b4"; }
+.bi-telephone-forward-fill::before { content: "\f5b5"; }
+.bi-telephone-forward::before { content: "\f5b6"; }
+.bi-telephone-inbound-fill::before { content: "\f5b7"; }
+.bi-telephone-inbound::before { content: "\f5b8"; }
+.bi-telephone-minus-fill::before { content: "\f5b9"; }
+.bi-telephone-minus::before { content: "\f5ba"; }
+.bi-telephone-outbound-fill::before { content: "\f5bb"; }
+.bi-telephone-outbound::before { content: "\f5bc"; }
+.bi-telephone-plus-fill::before { content: "\f5bd"; }
+.bi-telephone-plus::before { content: "\f5be"; }
+.bi-telephone-x-fill::before { content: "\f5bf"; }
+.bi-telephone-x::before { content: "\f5c0"; }
+.bi-telephone::before { content: "\f5c1"; }
+.bi-terminal-fill::before { content: "\f5c2"; }
+.bi-terminal::before { content: "\f5c3"; }
+.bi-text-center::before { content: "\f5c4"; }
+.bi-text-indent-left::before { content: "\f5c5"; }
+.bi-text-indent-right::before { content: "\f5c6"; }
+.bi-text-left::before { content: "\f5c7"; }
+.bi-text-paragraph::before { content: "\f5c8"; }
+.bi-text-right::before { content: "\f5c9"; }
+.bi-textarea-resize::before { content: "\f5ca"; }
+.bi-textarea-t::before { content: "\f5cb"; }
+.bi-textarea::before { content: "\f5cc"; }
+.bi-thermometer-half::before { content: "\f5cd"; }
+.bi-thermometer-high::before { content: "\f5ce"; }
+.bi-thermometer-low::before { content: "\f5cf"; }
+.bi-thermometer-snow::before { content: "\f5d0"; }
+.bi-thermometer-sun::before { content: "\f5d1"; }
+.bi-thermometer::before { content: "\f5d2"; }
+.bi-three-dots-vertical::before { content: "\f5d3"; }
+.bi-three-dots::before { content: "\f5d4"; }
+.bi-toggle-off::before { content: "\f5d5"; }
+.bi-toggle-on::before { content: "\f5d6"; }
+.bi-toggle2-off::before { content: "\f5d7"; }
+.bi-toggle2-on::before { content: "\f5d8"; }
+.bi-toggles::before { content: "\f5d9"; }
+.bi-toggles2::before { content: "\f5da"; }
+.bi-tools::before { content: "\f5db"; }
+.bi-tornado::before { content: "\f5dc"; }
+.bi-trash-fill::before { content: "\f5dd"; }
+.bi-trash::before { content: "\f5de"; }
+.bi-trash2-fill::before { content: "\f5df"; }
+.bi-trash2::before { content: "\f5e0"; }
+.bi-tree-fill::before { content: "\f5e1"; }
+.bi-tree::before { content: "\f5e2"; }
+.bi-triangle-fill::before { content: "\f5e3"; }
+.bi-triangle-half::before { content: "\f5e4"; }
+.bi-triangle::before { content: "\f5e5"; }
+.bi-trophy-fill::before { content: "\f5e6"; }
+.bi-trophy::before { content: "\f5e7"; }
+.bi-tropical-storm::before { content: "\f5e8"; }
+.bi-truck-flatbed::before { content: "\f5e9"; }
+.bi-truck::before { content: "\f5ea"; }
+.bi-tsunami::before { content: "\f5eb"; }
+.bi-tv-fill::before { content: "\f5ec"; }
+.bi-tv::before { content: "\f5ed"; }
+.bi-twitch::before { content: "\f5ee"; }
+.bi-twitter::before { content: "\f5ef"; }
+.bi-type-bold::before { content: "\f5f0"; }
+.bi-type-h1::before { content: "\f5f1"; }
+.bi-type-h2::before { content: "\f5f2"; }
+.bi-type-h3::before { content: "\f5f3"; }
+.bi-type-italic::before { content: "\f5f4"; }
+.bi-type-strikethrough::before { content: "\f5f5"; }
+.bi-type-underline::before { content: "\f5f6"; }
+.bi-type::before { content: "\f5f7"; }
+.bi-ui-checks-grid::before { content: "\f5f8"; }
+.bi-ui-checks::before { content: "\f5f9"; }
+.bi-ui-radios-grid::before { content: "\f5fa"; }
+.bi-ui-radios::before { content: "\f5fb"; }
+.bi-umbrella-fill::before { content: "\f5fc"; }
+.bi-umbrella::before { content: "\f5fd"; }
+.bi-union::before { content: "\f5fe"; }
+.bi-unlock-fill::before { content: "\f5ff"; }
+.bi-unlock::before { content: "\f600"; }
+.bi-upc-scan::before { content: "\f601"; }
+.bi-upc::before { content: "\f602"; }
+.bi-upload::before { content: "\f603"; }
+.bi-vector-pen::before { content: "\f604"; }
+.bi-view-list::before { content: "\f605"; }
+.bi-view-stacked::before { content: "\f606"; }
+.bi-vinyl-fill::before { content: "\f607"; }
+.bi-vinyl::before { content: "\f608"; }
+.bi-voicemail::before { content: "\f609"; }
+.bi-volume-down-fill::before { content: "\f60a"; }
+.bi-volume-down::before { content: "\f60b"; }
+.bi-volume-mute-fill::before { content: "\f60c"; }
+.bi-volume-mute::before { content: "\f60d"; }
+.bi-volume-off-fill::before { content: "\f60e"; }
+.bi-volume-off::before { content: "\f60f"; }
+.bi-volume-up-fill::before { content: "\f610"; }
+.bi-volume-up::before { content: "\f611"; }
+.bi-vr::before { content: "\f612"; }
+.bi-wallet-fill::before { content: "\f613"; }
+.bi-wallet::before { content: "\f614"; }
+.bi-wallet2::before { content: "\f615"; }
+.bi-watch::before { content: "\f616"; }
+.bi-water::before { content: "\f617"; }
+.bi-whatsapp::before { content: "\f618"; }
+.bi-wifi-1::before { content: "\f619"; }
+.bi-wifi-2::before { content: "\f61a"; }
+.bi-wifi-off::before { content: "\f61b"; }
+.bi-wifi::before { content: "\f61c"; }
+.bi-wind::before { content: "\f61d"; }
+.bi-window-dock::before { content: "\f61e"; }
+.bi-window-sidebar::before { content: "\f61f"; }
+.bi-window::before { content: "\f620"; }
+.bi-wrench::before { content: "\f621"; }
+.bi-x-circle-fill::before { content: "\f622"; }
+.bi-x-circle::before { content: "\f623"; }
+.bi-x-diamond-fill::before { content: "\f624"; }
+.bi-x-diamond::before { content: "\f625"; }
+.bi-x-octagon-fill::before { content: "\f626"; }
+.bi-x-octagon::before { content: "\f627"; }
+.bi-x-square-fill::before { content: "\f628"; }
+.bi-x-square::before { content: "\f629"; }
+.bi-x::before { content: "\f62a"; }
+.bi-youtube::before { content: "\f62b"; }
+.bi-zoom-in::before { content: "\f62c"; }
+.bi-zoom-out::before { content: "\f62d"; }
+.bi-bank::before { content: "\f62e"; }
+.bi-bank2::before { content: "\f62f"; }
+.bi-bell-slash-fill::before { content: "\f630"; }
+.bi-bell-slash::before { content: "\f631"; }
+.bi-cash-coin::before { content: "\f632"; }
+.bi-check-lg::before { content: "\f633"; }
+.bi-coin::before { content: "\f634"; }
+.bi-currency-bitcoin::before { content: "\f635"; }
+.bi-currency-dollar::before { content: "\f636"; }
+.bi-currency-euro::before { content: "\f637"; }
+.bi-currency-exchange::before { content: "\f638"; }
+.bi-currency-pound::before { content: "\f639"; }
+.bi-currency-yen::before { content: "\f63a"; }
+.bi-dash-lg::before { content: "\f63b"; }
+.bi-exclamation-lg::before { content: "\f63c"; }
+.bi-file-earmark-pdf-fill::before { content: "\f63d"; }
+.bi-file-earmark-pdf::before { content: "\f63e"; }
+.bi-file-pdf-fill::before { content: "\f63f"; }
+.bi-file-pdf::before { content: "\f640"; }
+.bi-gender-ambiguous::before { content: "\f641"; }
+.bi-gender-female::before { content: "\f642"; }
+.bi-gender-male::before { content: "\f643"; }
+.bi-gender-trans::before { content: "\f644"; }
+.bi-headset-vr::before { content: "\f645"; }
+.bi-info-lg::before { content: "\f646"; }
+.bi-mastodon::before { content: "\f647"; }
+.bi-messenger::before { content: "\f648"; }
+.bi-piggy-bank-fill::before { content: "\f649"; }
+.bi-piggy-bank::before { content: "\f64a"; }
+.bi-pin-map-fill::before { content: "\f64b"; }
+.bi-pin-map::before { content: "\f64c"; }
+.bi-plus-lg::before { content: "\f64d"; }
+.bi-question-lg::before { content: "\f64e"; }
+.bi-recycle::before { content: "\f64f"; }
+.bi-reddit::before { content: "\f650"; }
+.bi-safe-fill::before { content: "\f651"; }
+.bi-safe2-fill::before { content: "\f652"; }
+.bi-safe2::before { content: "\f653"; }
+.bi-sd-card-fill::before { content: "\f654"; }
+.bi-sd-card::before { content: "\f655"; }
+.bi-skype::before { content: "\f656"; }
+.bi-slash-lg::before { content: "\f657"; }
+.bi-translate::before { content: "\f658"; }
+.bi-x-lg::before { content: "\f659"; }
+.bi-safe::before { content: "\f65a"; }
+.bi-apple::before { content: "\f65b"; }
+.bi-microsoft::before { content: "\f65d"; }
+.bi-windows::before { content: "\f65e"; }
+.bi-behance::before { content: "\f65c"; }
+.bi-dribbble::before { content: "\f65f"; }
+.bi-line::before { content: "\f660"; }
+.bi-medium::before { content: "\f661"; }
+.bi-paypal::before { content: "\f662"; }
+.bi-pinterest::before { content: "\f663"; }
+.bi-signal::before { content: "\f664"; }
+.bi-snapchat::before { content: "\f665"; }
+.bi-spotify::before { content: "\f666"; }
+.bi-stack-overflow::before { content: "\f667"; }
+.bi-strava::before { content: "\f668"; }
+.bi-wordpress::before { content: "\f669"; }
+.bi-vimeo::before { content: "\f66a"; }
+.bi-activity::before { content: "\f66b"; }
+.bi-easel2-fill::before { content: "\f66c"; }
+.bi-easel2::before { content: "\f66d"; }
+.bi-easel3-fill::before { content: "\f66e"; }
+.bi-easel3::before { content: "\f66f"; }
+.bi-fan::before { content: "\f670"; }
+.bi-fingerprint::before { content: "\f671"; }
+.bi-graph-down-arrow::before { content: "\f672"; }
+.bi-graph-up-arrow::before { content: "\f673"; }
+.bi-hypnotize::before { content: "\f674"; }
+.bi-magic::before { content: "\f675"; }
+.bi-person-rolodex::before { content: "\f676"; }
+.bi-person-video::before { content: "\f677"; }
+.bi-person-video2::before { content: "\f678"; }
+.bi-person-video3::before { content: "\f679"; }
+.bi-person-workspace::before { content: "\f67a"; }
+.bi-radioactive::before { content: "\f67b"; }
+.bi-webcam-fill::before { content: "\f67c"; }
+.bi-webcam::before { content: "\f67d"; }
+.bi-yin-yang::before { content: "\f67e"; }
+.bi-bandaid-fill::before { content: "\f680"; }
+.bi-bandaid::before { content: "\f681"; }
+.bi-bluetooth::before { content: "\f682"; }
+.bi-body-text::before { content: "\f683"; }
+.bi-boombox::before { content: "\f684"; }
+.bi-boxes::before { content: "\f685"; }
+.bi-dpad-fill::before { content: "\f686"; }
+.bi-dpad::before { content: "\f687"; }
+.bi-ear-fill::before { content: "\f688"; }
+.bi-ear::before { content: "\f689"; }
+.bi-envelope-check-1::before { content: "\f68a"; }
+.bi-envelope-check-fill::before { content: "\f68b"; }
+.bi-envelope-check::before { content: "\f68c"; }
+.bi-envelope-dash-1::before { content: "\f68d"; }
+.bi-envelope-dash-fill::before { content: "\f68e"; }
+.bi-envelope-dash::before { content: "\f68f"; }
+.bi-envelope-exclamation-1::before { content: "\f690"; }
+.bi-envelope-exclamation-fill::before { content: "\f691"; }
+.bi-envelope-exclamation::before { content: "\f692"; }
+.bi-envelope-plus-fill::before { content: "\f693"; }
+.bi-envelope-plus::before { content: "\f694"; }
+.bi-envelope-slash-1::before { content: "\f695"; }
+.bi-envelope-slash-fill::before { content: "\f696"; }
+.bi-envelope-slash::before { content: "\f697"; }
+.bi-envelope-x-1::before { content: "\f698"; }
+.bi-envelope-x-fill::before { content: "\f699"; }
+.bi-envelope-x::before { content: "\f69a"; }
+.bi-explicit-fill::before { content: "\f69b"; }
+.bi-explicit::before { content: "\f69c"; }
+.bi-git::before { content: "\f69d"; }
+.bi-infinity::before { content: "\f69e"; }
+.bi-list-columns-reverse::before { content: "\f69f"; }
+.bi-list-columns::before { content: "\f6a0"; }
+.bi-meta::before { content: "\f6a1"; }
+.bi-mortorboard-fill::before { content: "\f6a2"; }
+.bi-mortorboard::before { content: "\f6a3"; }
+.bi-nintendo-switch::before { content: "\f6a4"; }
+.bi-pc-display-horizontal::before { content: "\f6a5"; }
+.bi-pc-display::before { content: "\f6a6"; }
+.bi-pc-horizontal::before { content: "\f6a7"; }
+.bi-pc::before { content: "\f6a8"; }
+.bi-playstation::before { content: "\f6a9"; }
+.bi-plus-slash-minus::before { content: "\f6aa"; }
+.bi-projector-fill::before { content: "\f6ab"; }
+.bi-projector::before { content: "\f6ac"; }
+.bi-qr-code-scan::before { content: "\f6ad"; }
+.bi-qr-code::before { content: "\f6ae"; }
+.bi-quora::before { content: "\f6af"; }
+.bi-quote::before { content: "\f6b0"; }
+.bi-robot::before { content: "\f6b1"; }
+.bi-send-check-fill::before { content: "\f6b2"; }
+.bi-send-check::before { content: "\f6b3"; }
+.bi-send-dash-fill::before { content: "\f6b4"; }
+.bi-send-dash::before { content: "\f6b5"; }
+.bi-send-exclamation-1::before { content: "\f6b6"; }
+.bi-send-exclamation-fill::before { content: "\f6b7"; }
+.bi-send-exclamation::before { content: "\f6b8"; }
+.bi-send-fill::before { content: "\f6b9"; }
+.bi-send-plus-fill::before { content: "\f6ba"; }
+.bi-send-plus::before { content: "\f6bb"; }
+.bi-send-slash-fill::before { content: "\f6bc"; }
+.bi-send-slash::before { content: "\f6bd"; }
+.bi-send-x-fill::before { content: "\f6be"; }
+.bi-send-x::before { content: "\f6bf"; }
+.bi-send::before { content: "\f6c0"; }
+.bi-steam::before { content: "\f6c1"; }
+.bi-terminal-dash-1::before { content: "\f6c2"; }
+.bi-terminal-dash::before { content: "\f6c3"; }
+.bi-terminal-plus::before { content: "\f6c4"; }
+.bi-terminal-split::before { content: "\f6c5"; }
+.bi-ticket-detailed-fill::before { content: "\f6c6"; }
+.bi-ticket-detailed::before { content: "\f6c7"; }
+.bi-ticket-fill::before { content: "\f6c8"; }
+.bi-ticket-perforated-fill::before { content: "\f6c9"; }
+.bi-ticket-perforated::before { content: "\f6ca"; }
+.bi-ticket::before { content: "\f6cb"; }
+.bi-tiktok::before { content: "\f6cc"; }
+.bi-window-dash::before { content: "\f6cd"; }
+.bi-window-desktop::before { content: "\f6ce"; }
+.bi-window-fullscreen::before { content: "\f6cf"; }
+.bi-window-plus::before { content: "\f6d0"; }
+.bi-window-split::before { content: "\f6d1"; }
+.bi-window-stack::before { content: "\f6d2"; }
+.bi-window-x::before { content: "\f6d3"; }
+.bi-xbox::before { content: "\f6d4"; }
+.bi-ethernet::before { content: "\f6d5"; }
+.bi-hdmi-fill::before { content: "\f6d6"; }
+.bi-hdmi::before { content: "\f6d7"; }
+.bi-usb-c-fill::before { content: "\f6d8"; }
+.bi-usb-c::before { content: "\f6d9"; }
+.bi-usb-fill::before { content: "\f6da"; }
+.bi-usb-plug-fill::before { content: "\f6db"; }
+.bi-usb-plug::before { content: "\f6dc"; }
+.bi-usb-symbol::before { content: "\f6dd"; }
+.bi-usb::before { content: "\f6de"; }
+.bi-boombox-fill::before { content: "\f6df"; }
+.bi-displayport-1::before { content: "\f6e0"; }
+.bi-displayport::before { content: "\f6e1"; }
+.bi-gpu-card::before { content: "\f6e2"; }
+.bi-memory::before { content: "\f6e3"; }
+.bi-modem-fill::before { content: "\f6e4"; }
+.bi-modem::before { content: "\f6e5"; }
+.bi-motherboard-fill::before { content: "\f6e6"; }
+.bi-motherboard::before { content: "\f6e7"; }
+.bi-optical-audio-fill::before { content: "\f6e8"; }
+.bi-optical-audio::before { content: "\f6e9"; }
+.bi-pci-card::before { content: "\f6ea"; }
+.bi-router-fill::before { content: "\f6eb"; }
+.bi-router::before { content: "\f6ec"; }
+.bi-ssd-fill::before { content: "\f6ed"; }
+.bi-ssd::before { content: "\f6ee"; }
+.bi-thunderbolt-fill::before { content: "\f6ef"; }
+.bi-thunderbolt::before { content: "\f6f0"; }
+.bi-usb-drive-fill::before { content: "\f6f1"; }
+.bi-usb-drive::before { content: "\f6f2"; }
+.bi-usb-micro-fill::before { content: "\f6f3"; }
+.bi-usb-micro::before { content: "\f6f4"; }
+.bi-usb-mini-fill::before { content: "\f6f5"; }
+.bi-usb-mini::before { content: "\f6f6"; }
+.bi-cloud-haze2::before { content: "\f6f7"; }
+.bi-device-hdd-fill::before { content: "\f6f8"; }
+.bi-device-hdd::before { content: "\f6f9"; }
+.bi-device-ssd-fill::before { content: "\f6fa"; }
+.bi-device-ssd::before { content: "\f6fb"; }
+.bi-displayport-fill::before { content: "\f6fc"; }
+.bi-mortarboard-fill::before { content: "\f6fd"; }
+.bi-mortarboard::before { content: "\f6fe"; }
+.bi-terminal-x::before { content: "\f6ff"; }
+.bi-arrow-through-heart-fill::before { content: "\f700"; }
+.bi-arrow-through-heart::before { content: "\f701"; }
+.bi-badge-sd-fill::before { content: "\f702"; }
+.bi-badge-sd::before { content: "\f703"; }
+.bi-bag-heart-fill::before { content: "\f704"; }
+.bi-bag-heart::before { content: "\f705"; }
+.bi-balloon-fill::before { content: "\f706"; }
+.bi-balloon-heart-fill::before { content: "\f707"; }
+.bi-balloon-heart::before { content: "\f708"; }
+.bi-balloon::before { content: "\f709"; }
+.bi-box2-fill::before { content: "\f70a"; }
+.bi-box2-heart-fill::before { content: "\f70b"; }
+.bi-box2-heart::before { content: "\f70c"; }
+.bi-box2::before { content: "\f70d"; }
+.bi-braces-asterisk::before { content: "\f70e"; }
+.bi-calendar-heart-fill::before { content: "\f70f"; }
+.bi-calendar-heart::before { content: "\f710"; }
+.bi-calendar2-heart-fill::before { content: "\f711"; }
+.bi-calendar2-heart::before { content: "\f712"; }
+.bi-chat-heart-fill::before { content: "\f713"; }
+.bi-chat-heart::before { content: "\f714"; }
+.bi-chat-left-heart-fill::before { content: "\f715"; }
+.bi-chat-left-heart::before { content: "\f716"; }
+.bi-chat-right-heart-fill::before { content: "\f717"; }
+.bi-chat-right-heart::before { content: "\f718"; }
+.bi-chat-square-heart-fill::before { content: "\f719"; }
+.bi-chat-square-heart::before { content: "\f71a"; }
+.bi-clipboard-check-fill::before { content: "\f71b"; }
+.bi-clipboard-data-fill::before { content: "\f71c"; }
+.bi-clipboard-fill::before { content: "\f71d"; }
+.bi-clipboard-heart-fill::before { content: "\f71e"; }
+.bi-clipboard-heart::before { content: "\f71f"; }
+.bi-clipboard-minus-fill::before { content: "\f720"; }
+.bi-clipboard-plus-fill::before { content: "\f721"; }
+.bi-clipboard-pulse::before { content: "\f722"; }
+.bi-clipboard-x-fill::before { content: "\f723"; }
+.bi-clipboard2-check-fill::before { content: "\f724"; }
+.bi-clipboard2-check::before { content: "\f725"; }
+.bi-clipboard2-data-fill::before { content: "\f726"; }
+.bi-clipboard2-data::before { content: "\f727"; }
+.bi-clipboard2-fill::before { content: "\f728"; }
+.bi-clipboard2-heart-fill::before { content: "\f729"; }
+.bi-clipboard2-heart::before { content: "\f72a"; }
+.bi-clipboard2-minus-fill::before { content: "\f72b"; }
+.bi-clipboard2-minus::before { content: "\f72c"; }
+.bi-clipboard2-plus-fill::before { content: "\f72d"; }
+.bi-clipboard2-plus::before { content: "\f72e"; }
+.bi-clipboard2-pulse-fill::before { content: "\f72f"; }
+.bi-clipboard2-pulse::before { content: "\f730"; }
+.bi-clipboard2-x-fill::before { content: "\f731"; }
+.bi-clipboard2-x::before { content: "\f732"; }
+.bi-clipboard2::before { content: "\f733"; }
+.bi-emoji-kiss-fill::before { content: "\f734"; }
+.bi-emoji-kiss::before { content: "\f735"; }
+.bi-envelope-heart-fill::before { content: "\f736"; }
+.bi-envelope-heart::before { content: "\f737"; }
+.bi-envelope-open-heart-fill::before { content: "\f738"; }
+.bi-envelope-open-heart::before { content: "\f739"; }
+.bi-envelope-paper-fill::before { content: "\f73a"; }
+.bi-envelope-paper-heart-fill::before { content: "\f73b"; }
+.bi-envelope-paper-heart::before { content: "\f73c"; }
+.bi-envelope-paper::before { content: "\f73d"; }
+.bi-filetype-aac::before { content: "\f73e"; }
+.bi-filetype-ai::before { content: "\f73f"; }
+.bi-filetype-bmp::before { content: "\f740"; }
+.bi-filetype-cs::before { content: "\f741"; }
+.bi-filetype-css::before { content: "\f742"; }
+.bi-filetype-csv::before { content: "\f743"; }
+.bi-filetype-doc::before { content: "\f744"; }
+.bi-filetype-docx::before { content: "\f745"; }
+.bi-filetype-exe::before { content: "\f746"; }
+.bi-filetype-gif::before { content: "\f747"; }
+.bi-filetype-heic::before { content: "\f748"; }
+.bi-filetype-html::before { content: "\f749"; }
+.bi-filetype-java::before { content: "\f74a"; }
+.bi-filetype-jpg::before { content: "\f74b"; }
+.bi-filetype-js::before { content: "\f74c"; }
+.bi-filetype-jsx::before { content: "\f74d"; }
+.bi-filetype-key::before { content: "\f74e"; }
+.bi-filetype-m4p::before { content: "\f74f"; }
+.bi-filetype-md::before { content: "\f750"; }
+.bi-filetype-mdx::before { content: "\f751"; }
+.bi-filetype-mov::before { content: "\f752"; }
+.bi-filetype-mp3::before { content: "\f753"; }
+.bi-filetype-mp4::before { content: "\f754"; }
+.bi-filetype-otf::before { content: "\f755"; }
+.bi-filetype-pdf::before { content: "\f756"; }
+.bi-filetype-php::before { content: "\f757"; }
+.bi-filetype-png::before { content: "\f758"; }
+.bi-filetype-ppt-1::before { content: "\f759"; }
+.bi-filetype-ppt::before { content: "\f75a"; }
+.bi-filetype-psd::before { content: "\f75b"; }
+.bi-filetype-py::before { content: "\f75c"; }
+.bi-filetype-raw::before { content: "\f75d"; }
+.bi-filetype-rb::before { content: "\f75e"; }
+.bi-filetype-sass::before { content: "\f75f"; }
+.bi-filetype-scss::before { content: "\f760"; }
+.bi-filetype-sh::before { content: "\f761"; }
+.bi-filetype-svg::before { content: "\f762"; }
+.bi-filetype-tiff::before { content: "\f763"; }
+.bi-filetype-tsx::before { content: "\f764"; }
+.bi-filetype-ttf::before { content: "\f765"; }
+.bi-filetype-txt::before { content: "\f766"; }
+.bi-filetype-wav::before { content: "\f767"; }
+.bi-filetype-woff::before { content: "\f768"; }
+.bi-filetype-xls-1::before { content: "\f769"; }
+.bi-filetype-xls::before { content: "\f76a"; }
+.bi-filetype-xml::before { content: "\f76b"; }
+.bi-filetype-yml::before { content: "\f76c"; }
+.bi-heart-arrow::before { content: "\f76d"; }
+.bi-heart-pulse-fill::before { content: "\f76e"; }
+.bi-heart-pulse::before { content: "\f76f"; }
+.bi-heartbreak-fill::before { content: "\f770"; }
+.bi-heartbreak::before { content: "\f771"; }
+.bi-hearts::before { content: "\f772"; }
+.bi-hospital-fill::before { content: "\f773"; }
+.bi-hospital::before { content: "\f774"; }
+.bi-house-heart-fill::before { content: "\f775"; }
+.bi-house-heart::before { content: "\f776"; }
+.bi-incognito::before { content: "\f777"; }
+.bi-magnet-fill::before { content: "\f778"; }
+.bi-magnet::before { content: "\f779"; }
+.bi-person-heart::before { content: "\f77a"; }
+.bi-person-hearts::before { content: "\f77b"; }
+.bi-phone-flip::before { content: "\f77c"; }
+.bi-plugin::before { content: "\f77d"; }
+.bi-postage-fill::before { content: "\f77e"; }
+.bi-postage-heart-fill::before { content: "\f77f"; }
+.bi-postage-heart::before { content: "\f780"; }
+.bi-postage::before { content: "\f781"; }
+.bi-postcard-fill::before { content: "\f782"; }
+.bi-postcard-heart-fill::before { content: "\f783"; }
+.bi-postcard-heart::before { content: "\f784"; }
+.bi-postcard::before { content: "\f785"; }
+.bi-search-heart-fill::before { content: "\f786"; }
+.bi-search-heart::before { content: "\f787"; }
+.bi-sliders2-vertical::before { content: "\f788"; }
+.bi-sliders2::before { content: "\f789"; }
+.bi-trash3-fill::before { content: "\f78a"; }
+.bi-trash3::before { content: "\f78b"; }
+.bi-valentine::before { content: "\f78c"; }
+.bi-valentine2::before { content: "\f78d"; }
+.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; }
+.bi-wrench-adjustable-circle::before { content: "\f78f"; }
+.bi-wrench-adjustable::before { content: "\f790"; }
+.bi-filetype-json::before { content: "\f791"; }
+.bi-filetype-pptx::before { content: "\f792"; }
+.bi-filetype-xlsx::before { content: "\f793"; }
diff --git a/src/main/resources/static/css/bootstrap.min.css b/src/main/resources/static/css/bootstrap.min.css
new file mode 100644
index 0000000..9b4c477
--- /dev/null
+++ b/src/main/resources/static/css/bootstrap.min.css
@@ -0,0 +1,11649 @@
+@charset "UTF-8";
+/*!
+ * Bootstrap v5.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2021 The Bootstrap Authors
+ * Copyright 2011-2021 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+:root {
+ --bs-blue: #0d6efd;
+ --bs-indigo: #6610f2;
+ --bs-purple: #6f42c1;
+ --bs-pink: #d63384;
+ --bs-red: #dc3545;
+ --bs-orange: #fd7e14;
+ --bs-yellow: #ffc107;
+ --bs-green: #198754;
+ --bs-teal: #20c997;
+ --bs-cyan: #0dcaf0;
+ --bs-white: #fff;
+ --bs-gray: #6c757d;
+ --bs-gray-dark: #343a40;
+ --bs-gray-100: #f8f9fa;
+ --bs-gray-200: #e9ecef;
+ --bs-gray-300: #dee2e6;
+ --bs-gray-400: #ced4da;
+ --bs-gray-500: #adb5bd;
+ --bs-gray-600: #6c757d;
+ --bs-gray-700: #495057;
+ --bs-gray-800: #343a40;
+ --bs-gray-900: #212529;
+ --bs-primary: #0d6efd;
+ --bs-secondary: #6c757d;
+ --bs-success: #198754;
+ --bs-info: #0dcaf0;
+ --bs-warning: #ffc107;
+ --bs-danger: #dc3545;
+ --bs-light: #f8f9fa;
+ --bs-dark: #212529;
+ --bs-primary-rgb: 13, 110, 253;
+ --bs-secondary-rgb: 108, 117, 125;
+ --bs-success-rgb: 25, 135, 84;
+ --bs-info-rgb: 13, 202, 240;
+ --bs-warning-rgb: 255, 193, 7;
+ --bs-danger-rgb: 220, 53, 69;
+ --bs-light-rgb: 248, 249, 250;
+ --bs-dark-rgb: 33, 37, 41;
+ --bs-white-rgb: 255, 255, 255;
+ --bs-black-rgb: 0, 0, 0;
+ --bs-body-color-rgb: 33, 37, 41;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+ --bs-body-font-family: var(--bs-font-sans-serif);
+ --bs-body-font-size: 1rem;
+ --bs-body-font-weight: 400;
+ --bs-body-line-height: 1.5;
+ --bs-body-color: #212529;
+ --bs-body-bg: #fff
+}
+
+*, ::after, ::before {
+ box-sizing: border-box
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ :root {
+ scroll-behavior: smooth
+ }
+}
+
+body {
+ margin: 0;
+ font-family: var(--bs-body-font-family);
+ font-size: var(--bs-body-font-size);
+ font-weight: var(--bs-body-font-weight);
+ line-height: var(--bs-body-line-height);
+ color: var(--bs-body-color);
+ text-align: var(--bs-body-text-align);
+ background-color: var(--bs-body-bg);
+ -webkit-text-size-adjust: 100%;
+ -webkit-tap-highlight-color: transparent
+}
+
+hr {
+ margin: 1rem 0;
+ color: inherit;
+ background-color: currentColor;
+ border: 0;
+ opacity: .25
+}
+
+hr:not([size]) {
+ height: 1px
+}
+
+.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: .5rem;
+ font-weight: 500;
+ line-height: 1.2
+}
+
+.h1, h1 {
+ font-size: calc(1.375rem + 1.5vw)
+}
+
+@media (min-width: 1200px) {
+ .h1, h1 {
+ font-size: 2.5rem
+ }
+}
+
+.h2, h2 {
+ font-size: calc(1.325rem + .9vw)
+}
+
+@media (min-width: 1200px) {
+ .h2, h2 {
+ font-size: 2rem
+ }
+}
+
+.h3, h3 {
+ font-size: calc(1.3rem + .6vw)
+}
+
+@media (min-width: 1200px) {
+ .h3, h3 {
+ font-size: 1.75rem
+ }
+}
+
+.h4, h4 {
+ font-size: calc(1.275rem + .3vw)
+}
+
+@media (min-width: 1200px) {
+ .h4, h4 {
+ font-size: 1.5rem
+ }
+}
+
+.h5, h5 {
+ font-size: 1.25rem
+}
+
+.h6, h6 {
+ font-size: 1rem
+}
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem
+}
+
+abbr[data-bs-original-title], abbr[title] {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ cursor: help;
+ -webkit-text-decoration-skip-ink: none;
+ text-decoration-skip-ink: none
+}
+
+address {
+ margin-bottom: 1rem;
+ font-style: normal;
+ line-height: inherit
+}
+
+ol, ul {
+ padding-left: 2rem
+}
+
+dl, ol, ul {
+ margin-top: 0;
+ margin-bottom: 1rem
+}
+
+ol ol, ol ul, ul ol, ul ul {
+ margin-bottom: 0
+}
+
+dt {
+ font-weight: 700
+}
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0
+}
+
+blockquote {
+ margin: 0 0 1rem
+}
+
+b, strong {
+ font-weight: bolder
+}
+
+.small, small {
+ font-size: .875em
+}
+
+.mark, mark {
+ padding: .2em;
+ background-color: #fcf8e3
+}
+
+sub, sup {
+ position: relative;
+ font-size: .75em;
+ line-height: 0;
+ vertical-align: baseline
+}
+
+sub {
+ bottom: -.25em
+}
+
+sup {
+ top: -.5em
+}
+
+a {
+ color: #0d6efd;
+ text-decoration: underline
+}
+
+a:hover {
+ color: #0a58ca
+}
+
+a:not([href]):not([class]), a:not([href]):not([class]):hover {
+ color: inherit;
+ text-decoration: none
+}
+
+code, kbd, pre, samp {
+ font-family: var(--bs-font-monospace);
+ font-size: 1em;
+ direction: ltr;
+ unicode-bidi: bidi-override
+}
+
+pre {
+ display: block;
+ margin-top: 0;
+ margin-bottom: 1rem;
+ overflow: auto;
+ font-size: .875em
+}
+
+pre code {
+ font-size: inherit;
+ color: inherit;
+ word-break: normal
+}
+
+code {
+ font-size: .875em;
+ color: #d63384;
+ word-wrap: break-word
+}
+
+a > code {
+ color: inherit
+}
+
+kbd {
+ padding: .2rem .4rem;
+ font-size: .875em;
+ color: #fff;
+ background-color: #212529;
+ border-radius: .2rem
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 1em;
+ font-weight: 700
+}
+
+figure {
+ margin: 0 0 1rem
+}
+
+img, svg {
+ vertical-align: middle
+}
+
+table {
+ caption-side: bottom;
+ border-collapse: collapse
+}
+
+caption {
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ color: #6c757d;
+ text-align: left
+}
+
+th {
+ text-align: inherit;
+ text-align: -webkit-match-parent
+}
+
+tbody, td, tfoot, th, thead, tr {
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0
+}
+
+label {
+ display: inline-block
+}
+
+button {
+ border-radius: 0
+}
+
+button:focus:not(:focus-visible) {
+ outline: 0
+}
+
+button, input, optgroup, select, textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+button, select {
+ text-transform: none
+}
+
+[role=button] {
+ cursor: pointer
+}
+
+select {
+ word-wrap: normal
+}
+
+select:disabled {
+ opacity: 1
+}
+
+[list]::-webkit-calendar-picker-indicator {
+ display: none
+}
+
+[type=button], [type=reset], [type=submit], button {
+ -webkit-appearance: button
+}
+
+[type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled), button:not(:disabled) {
+ cursor: pointer
+}
+
+::-moz-focus-inner {
+ padding: 0;
+ border-style: none
+}
+
+textarea {
+ resize: vertical
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0
+}
+
+legend {
+ float: left;
+ width: 100%;
+ padding: 0;
+ margin-bottom: .5rem;
+ font-size: calc(1.275rem + .3vw);
+ line-height: inherit
+}
+
+@media (min-width: 1200px) {
+ legend {
+ font-size: 1.5rem
+ }
+}
+
+legend + * {
+ clear: left
+}
+
+::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-fields-wrapper, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-text, ::-webkit-datetime-edit-year-field {
+ padding: 0
+}
+
+::-webkit-inner-spin-button {
+ height: auto
+}
+
+[type=search] {
+ outline-offset: -2px;
+ -webkit-appearance: textfield
+}
+
+::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+::-webkit-color-swatch-wrapper {
+ padding: 0
+}
+
+::-webkit-file-upload-button {
+ font: inherit
+}
+
+::file-selector-button {
+ font: inherit
+}
+
+::-webkit-file-upload-button {
+ font: inherit;
+ -webkit-appearance: button
+}
+
+output {
+ display: inline-block
+}
+
+iframe {
+ border: 0
+}
+
+summary {
+ display: list-item;
+ cursor: pointer
+}
+
+progress {
+ vertical-align: baseline
+}
+
+[hidden] {
+ display: none !important
+}
+
+.lead {
+ font-size: 1.25rem;
+ font-weight: 300
+}
+
+.display-1 {
+ font-size: calc(1.625rem + 4.5vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-1 {
+ font-size: 5rem
+ }
+}
+
+.display-2 {
+ font-size: calc(1.575rem + 3.9vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-2 {
+ font-size: 4.5rem
+ }
+}
+
+.display-3 {
+ font-size: calc(1.525rem + 3.3vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-3 {
+ font-size: 4rem
+ }
+}
+
+.display-4 {
+ font-size: calc(1.475rem + 2.7vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-4 {
+ font-size: 3.5rem
+ }
+}
+
+.display-5 {
+ font-size: calc(1.425rem + 2.1vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-5 {
+ font-size: 3rem
+ }
+}
+
+.display-6 {
+ font-size: calc(1.375rem + 1.5vw);
+ font-weight: 300;
+ line-height: 1.2
+}
+
+@media (min-width: 1200px) {
+ .display-6 {
+ font-size: 2.5rem
+ }
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline-item {
+ display: inline-block
+}
+
+.list-inline-item:not(:last-child) {
+ margin-right: .5rem
+}
+
+.initialism {
+ font-size: .875em;
+ text-transform: uppercase
+}
+
+.blockquote {
+ margin-bottom: 1rem;
+ font-size: 1.25rem
+}
+
+.blockquote > :last-child {
+ margin-bottom: 0
+}
+
+.blockquote-footer {
+ margin-top: -1rem;
+ margin-bottom: 1rem;
+ font-size: .875em;
+ color: #6c757d
+}
+
+.blockquote-footer::before {
+ content: "— "
+}
+
+.img-fluid {
+ max-width: 100%;
+ height: auto
+}
+
+.img-thumbnail {
+ padding: .25rem;
+ background-color: #fff;
+ border: 1px solid #dee2e6;
+ border-radius: .25rem;
+ max-width: 100%;
+ height: auto
+}
+
+.figure {
+ display: inline-block
+}
+
+.figure-img {
+ margin-bottom: .5rem;
+ line-height: 1
+}
+
+.figure-caption {
+ font-size: .875em;
+ color: #6c757d
+}
+
+.container, .container-fluid, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl {
+ width: 100%;
+ padding-right: var(--bs-gutter-x, .75rem);
+ padding-left: var(--bs-gutter-x, .75rem);
+ margin-right: auto;
+ margin-left: auto
+}
+
+@media (min-width: 576px) {
+ .container, .container-sm {
+ max-width: 540px
+ }
+}
+
+@media (min-width: 768px) {
+ .container, .container-md, .container-sm {
+ max-width: 720px
+ }
+}
+
+@media (min-width: 992px) {
+ .container, .container-lg, .container-md, .container-sm {
+ max-width: 960px
+ }
+}
+
+@media (min-width: 1200px) {
+ .container, .container-lg, .container-md, .container-sm, .container-xl {
+ max-width: 1140px
+ }
+}
+
+@media (min-width: 1400px) {
+ .container, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl {
+ max-width: 1320px
+ }
+}
+
+.row {
+ --bs-gutter-x: 1.5rem;
+ --bs-gutter-y: 0;
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: calc(-1 * var(--bs-gutter-y));
+ margin-right: calc(-.5 * var(--bs-gutter-x));
+ margin-left: calc(-.5 * var(--bs-gutter-x))
+}
+
+.row > * {
+ flex-shrink: 0;
+ width: 100%;
+ max-width: 100%;
+ padding-right: calc(var(--bs-gutter-x) * .5);
+ padding-left: calc(var(--bs-gutter-x) * .5);
+ margin-top: var(--bs-gutter-y)
+}
+
+.col {
+ flex: 1 0 0%
+}
+
+.row-cols-auto > * {
+ flex: 0 0 auto;
+ width: auto
+}
+
+.row-cols-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+}
+
+.row-cols-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+}
+
+.row-cols-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+}
+
+.row-cols-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+}
+
+.row-cols-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+}
+
+.row-cols-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+}
+
+.col-auto {
+ flex: 0 0 auto;
+ width: auto
+}
+
+.col-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+}
+
+.col-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+}
+
+.col-3 {
+ flex: 0 0 auto;
+ width: 25%
+}
+
+.col-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+}
+
+.col-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+}
+
+.col-6 {
+ flex: 0 0 auto;
+ width: 50%
+}
+
+.col-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+}
+
+.col-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+}
+
+.col-9 {
+ flex: 0 0 auto;
+ width: 75%
+}
+
+.col-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+}
+
+.col-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+}
+
+.col-12 {
+ flex: 0 0 auto;
+ width: 100%
+}
+
+.offset-1 {
+ margin-left: 8.33333333%
+}
+
+.offset-2 {
+ margin-left: 16.66666667%
+}
+
+.offset-3 {
+ margin-left: 25%
+}
+
+.offset-4 {
+ margin-left: 33.33333333%
+}
+
+.offset-5 {
+ margin-left: 41.66666667%
+}
+
+.offset-6 {
+ margin-left: 50%
+}
+
+.offset-7 {
+ margin-left: 58.33333333%
+}
+
+.offset-8 {
+ margin-left: 66.66666667%
+}
+
+.offset-9 {
+ margin-left: 75%
+}
+
+.offset-10 {
+ margin-left: 83.33333333%
+}
+
+.offset-11 {
+ margin-left: 91.66666667%
+}
+
+.g-0, .gx-0 {
+ --bs-gutter-x: 0
+}
+
+.g-0, .gy-0 {
+ --bs-gutter-y: 0
+}
+
+.g-1, .gx-1 {
+ --bs-gutter-x: 0.25rem
+}
+
+.g-1, .gy-1 {
+ --bs-gutter-y: 0.25rem
+}
+
+.g-2, .gx-2 {
+ --bs-gutter-x: 0.5rem
+}
+
+.g-2, .gy-2 {
+ --bs-gutter-y: 0.5rem
+}
+
+.g-3, .gx-3 {
+ --bs-gutter-x: 1rem
+}
+
+.g-3, .gy-3 {
+ --bs-gutter-y: 1rem
+}
+
+.g-4, .gx-4 {
+ --bs-gutter-x: 1.5rem
+}
+
+.g-4, .gy-4 {
+ --bs-gutter-y: 1.5rem
+}
+
+.g-5, .gx-5 {
+ --bs-gutter-x: 3rem
+}
+
+.g-5, .gy-5 {
+ --bs-gutter-y: 3rem
+}
+
+@media (min-width: 576px) {
+ .col-sm {
+ flex: 1 0 0%
+ }
+
+ .row-cols-sm-auto > * {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .row-cols-sm-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .row-cols-sm-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .row-cols-sm-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+ }
+
+ .row-cols-sm-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .row-cols-sm-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+ }
+
+ .row-cols-sm-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+ }
+
+ .col-sm-auto {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .col-sm-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+ }
+
+ .col-sm-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+ }
+
+ .col-sm-3 {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .col-sm-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+ }
+
+ .col-sm-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+ }
+
+ .col-sm-6 {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .col-sm-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+ }
+
+ .col-sm-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+ }
+
+ .col-sm-9 {
+ flex: 0 0 auto;
+ width: 75%
+ }
+
+ .col-sm-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+ }
+
+ .col-sm-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+ }
+
+ .col-sm-12 {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .offset-sm-0 {
+ margin-left: 0
+ }
+
+ .offset-sm-1 {
+ margin-left: 8.33333333%
+ }
+
+ .offset-sm-2 {
+ margin-left: 16.66666667%
+ }
+
+ .offset-sm-3 {
+ margin-left: 25%
+ }
+
+ .offset-sm-4 {
+ margin-left: 33.33333333%
+ }
+
+ .offset-sm-5 {
+ margin-left: 41.66666667%
+ }
+
+ .offset-sm-6 {
+ margin-left: 50%
+ }
+
+ .offset-sm-7 {
+ margin-left: 58.33333333%
+ }
+
+ .offset-sm-8 {
+ margin-left: 66.66666667%
+ }
+
+ .offset-sm-9 {
+ margin-left: 75%
+ }
+
+ .offset-sm-10 {
+ margin-left: 83.33333333%
+ }
+
+ .offset-sm-11 {
+ margin-left: 91.66666667%
+ }
+
+ .g-sm-0, .gx-sm-0 {
+ --bs-gutter-x: 0
+ }
+
+ .g-sm-0, .gy-sm-0 {
+ --bs-gutter-y: 0
+ }
+
+ .g-sm-1, .gx-sm-1 {
+ --bs-gutter-x: 0.25rem
+ }
+
+ .g-sm-1, .gy-sm-1 {
+ --bs-gutter-y: 0.25rem
+ }
+
+ .g-sm-2, .gx-sm-2 {
+ --bs-gutter-x: 0.5rem
+ }
+
+ .g-sm-2, .gy-sm-2 {
+ --bs-gutter-y: 0.5rem
+ }
+
+ .g-sm-3, .gx-sm-3 {
+ --bs-gutter-x: 1rem
+ }
+
+ .g-sm-3, .gy-sm-3 {
+ --bs-gutter-y: 1rem
+ }
+
+ .g-sm-4, .gx-sm-4 {
+ --bs-gutter-x: 1.5rem
+ }
+
+ .g-sm-4, .gy-sm-4 {
+ --bs-gutter-y: 1.5rem
+ }
+
+ .g-sm-5, .gx-sm-5 {
+ --bs-gutter-x: 3rem
+ }
+
+ .g-sm-5, .gy-sm-5 {
+ --bs-gutter-y: 3rem
+ }
+}
+
+@media (min-width: 768px) {
+ .col-md {
+ flex: 1 0 0%
+ }
+
+ .row-cols-md-auto > * {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .row-cols-md-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .row-cols-md-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .row-cols-md-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+ }
+
+ .row-cols-md-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .row-cols-md-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+ }
+
+ .row-cols-md-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+ }
+
+ .col-md-auto {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .col-md-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+ }
+
+ .col-md-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+ }
+
+ .col-md-3 {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .col-md-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+ }
+
+ .col-md-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+ }
+
+ .col-md-6 {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .col-md-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+ }
+
+ .col-md-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+ }
+
+ .col-md-9 {
+ flex: 0 0 auto;
+ width: 75%
+ }
+
+ .col-md-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+ }
+
+ .col-md-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+ }
+
+ .col-md-12 {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .offset-md-0 {
+ margin-left: 0
+ }
+
+ .offset-md-1 {
+ margin-left: 8.33333333%
+ }
+
+ .offset-md-2 {
+ margin-left: 16.66666667%
+ }
+
+ .offset-md-3 {
+ margin-left: 25%
+ }
+
+ .offset-md-4 {
+ margin-left: 33.33333333%
+ }
+
+ .offset-md-5 {
+ margin-left: 41.66666667%
+ }
+
+ .offset-md-6 {
+ margin-left: 50%
+ }
+
+ .offset-md-7 {
+ margin-left: 58.33333333%
+ }
+
+ .offset-md-8 {
+ margin-left: 66.66666667%
+ }
+
+ .offset-md-9 {
+ margin-left: 75%
+ }
+
+ .offset-md-10 {
+ margin-left: 83.33333333%
+ }
+
+ .offset-md-11 {
+ margin-left: 91.66666667%
+ }
+
+ .g-md-0, .gx-md-0 {
+ --bs-gutter-x: 0
+ }
+
+ .g-md-0, .gy-md-0 {
+ --bs-gutter-y: 0
+ }
+
+ .g-md-1, .gx-md-1 {
+ --bs-gutter-x: 0.25rem
+ }
+
+ .g-md-1, .gy-md-1 {
+ --bs-gutter-y: 0.25rem
+ }
+
+ .g-md-2, .gx-md-2 {
+ --bs-gutter-x: 0.5rem
+ }
+
+ .g-md-2, .gy-md-2 {
+ --bs-gutter-y: 0.5rem
+ }
+
+ .g-md-3, .gx-md-3 {
+ --bs-gutter-x: 1rem
+ }
+
+ .g-md-3, .gy-md-3 {
+ --bs-gutter-y: 1rem
+ }
+
+ .g-md-4, .gx-md-4 {
+ --bs-gutter-x: 1.5rem
+ }
+
+ .g-md-4, .gy-md-4 {
+ --bs-gutter-y: 1.5rem
+ }
+
+ .g-md-5, .gx-md-5 {
+ --bs-gutter-x: 3rem
+ }
+
+ .g-md-5, .gy-md-5 {
+ --bs-gutter-y: 3rem
+ }
+}
+
+@media (min-width: 992px) {
+ .col-lg {
+ flex: 1 0 0%
+ }
+
+ .row-cols-lg-auto > * {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .row-cols-lg-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .row-cols-lg-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .row-cols-lg-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+ }
+
+ .row-cols-lg-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .row-cols-lg-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+ }
+
+ .row-cols-lg-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+ }
+
+ .col-lg-auto {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .col-lg-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+ }
+
+ .col-lg-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+ }
+
+ .col-lg-3 {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .col-lg-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+ }
+
+ .col-lg-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+ }
+
+ .col-lg-6 {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .col-lg-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+ }
+
+ .col-lg-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+ }
+
+ .col-lg-9 {
+ flex: 0 0 auto;
+ width: 75%
+ }
+
+ .col-lg-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+ }
+
+ .col-lg-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+ }
+
+ .col-lg-12 {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .offset-lg-0 {
+ margin-left: 0
+ }
+
+ .offset-lg-1 {
+ margin-left: 8.33333333%
+ }
+
+ .offset-lg-2 {
+ margin-left: 16.66666667%
+ }
+
+ .offset-lg-3 {
+ margin-left: 25%
+ }
+
+ .offset-lg-4 {
+ margin-left: 33.33333333%
+ }
+
+ .offset-lg-5 {
+ margin-left: 41.66666667%
+ }
+
+ .offset-lg-6 {
+ margin-left: 50%
+ }
+
+ .offset-lg-7 {
+ margin-left: 58.33333333%
+ }
+
+ .offset-lg-8 {
+ margin-left: 66.66666667%
+ }
+
+ .offset-lg-9 {
+ margin-left: 75%
+ }
+
+ .offset-lg-10 {
+ margin-left: 83.33333333%
+ }
+
+ .offset-lg-11 {
+ margin-left: 91.66666667%
+ }
+
+ .g-lg-0, .gx-lg-0 {
+ --bs-gutter-x: 0
+ }
+
+ .g-lg-0, .gy-lg-0 {
+ --bs-gutter-y: 0
+ }
+
+ .g-lg-1, .gx-lg-1 {
+ --bs-gutter-x: 0.25rem
+ }
+
+ .g-lg-1, .gy-lg-1 {
+ --bs-gutter-y: 0.25rem
+ }
+
+ .g-lg-2, .gx-lg-2 {
+ --bs-gutter-x: 0.5rem
+ }
+
+ .g-lg-2, .gy-lg-2 {
+ --bs-gutter-y: 0.5rem
+ }
+
+ .g-lg-3, .gx-lg-3 {
+ --bs-gutter-x: 1rem
+ }
+
+ .g-lg-3, .gy-lg-3 {
+ --bs-gutter-y: 1rem
+ }
+
+ .g-lg-4, .gx-lg-4 {
+ --bs-gutter-x: 1.5rem
+ }
+
+ .g-lg-4, .gy-lg-4 {
+ --bs-gutter-y: 1.5rem
+ }
+
+ .g-lg-5, .gx-lg-5 {
+ --bs-gutter-x: 3rem
+ }
+
+ .g-lg-5, .gy-lg-5 {
+ --bs-gutter-y: 3rem
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-xl {
+ flex: 1 0 0%
+ }
+
+ .row-cols-xl-auto > * {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .row-cols-xl-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .row-cols-xl-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .row-cols-xl-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+ }
+
+ .row-cols-xl-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .row-cols-xl-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+ }
+
+ .row-cols-xl-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+ }
+
+ .col-xl-auto {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .col-xl-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+ }
+
+ .col-xl-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+ }
+
+ .col-xl-3 {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .col-xl-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+ }
+
+ .col-xl-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+ }
+
+ .col-xl-6 {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .col-xl-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+ }
+
+ .col-xl-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+ }
+
+ .col-xl-9 {
+ flex: 0 0 auto;
+ width: 75%
+ }
+
+ .col-xl-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+ }
+
+ .col-xl-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+ }
+
+ .col-xl-12 {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .offset-xl-0 {
+ margin-left: 0
+ }
+
+ .offset-xl-1 {
+ margin-left: 8.33333333%
+ }
+
+ .offset-xl-2 {
+ margin-left: 16.66666667%
+ }
+
+ .offset-xl-3 {
+ margin-left: 25%
+ }
+
+ .offset-xl-4 {
+ margin-left: 33.33333333%
+ }
+
+ .offset-xl-5 {
+ margin-left: 41.66666667%
+ }
+
+ .offset-xl-6 {
+ margin-left: 50%
+ }
+
+ .offset-xl-7 {
+ margin-left: 58.33333333%
+ }
+
+ .offset-xl-8 {
+ margin-left: 66.66666667%
+ }
+
+ .offset-xl-9 {
+ margin-left: 75%
+ }
+
+ .offset-xl-10 {
+ margin-left: 83.33333333%
+ }
+
+ .offset-xl-11 {
+ margin-left: 91.66666667%
+ }
+
+ .g-xl-0, .gx-xl-0 {
+ --bs-gutter-x: 0
+ }
+
+ .g-xl-0, .gy-xl-0 {
+ --bs-gutter-y: 0
+ }
+
+ .g-xl-1, .gx-xl-1 {
+ --bs-gutter-x: 0.25rem
+ }
+
+ .g-xl-1, .gy-xl-1 {
+ --bs-gutter-y: 0.25rem
+ }
+
+ .g-xl-2, .gx-xl-2 {
+ --bs-gutter-x: 0.5rem
+ }
+
+ .g-xl-2, .gy-xl-2 {
+ --bs-gutter-y: 0.5rem
+ }
+
+ .g-xl-3, .gx-xl-3 {
+ --bs-gutter-x: 1rem
+ }
+
+ .g-xl-3, .gy-xl-3 {
+ --bs-gutter-y: 1rem
+ }
+
+ .g-xl-4, .gx-xl-4 {
+ --bs-gutter-x: 1.5rem
+ }
+
+ .g-xl-4, .gy-xl-4 {
+ --bs-gutter-y: 1.5rem
+ }
+
+ .g-xl-5, .gx-xl-5 {
+ --bs-gutter-x: 3rem
+ }
+
+ .g-xl-5, .gy-xl-5 {
+ --bs-gutter-y: 3rem
+ }
+}
+
+@media (min-width: 1400px) {
+ .col-xxl {
+ flex: 1 0 0%
+ }
+
+ .row-cols-xxl-auto > * {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .row-cols-xxl-1 > * {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .row-cols-xxl-2 > * {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .row-cols-xxl-3 > * {
+ flex: 0 0 auto;
+ width: 33.3333333333%
+ }
+
+ .row-cols-xxl-4 > * {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .row-cols-xxl-5 > * {
+ flex: 0 0 auto;
+ width: 20%
+ }
+
+ .row-cols-xxl-6 > * {
+ flex: 0 0 auto;
+ width: 16.6666666667%
+ }
+
+ .col-xxl-auto {
+ flex: 0 0 auto;
+ width: auto
+ }
+
+ .col-xxl-1 {
+ flex: 0 0 auto;
+ width: 8.33333333%
+ }
+
+ .col-xxl-2 {
+ flex: 0 0 auto;
+ width: 16.66666667%
+ }
+
+ .col-xxl-3 {
+ flex: 0 0 auto;
+ width: 25%
+ }
+
+ .col-xxl-4 {
+ flex: 0 0 auto;
+ width: 33.33333333%
+ }
+
+ .col-xxl-5 {
+ flex: 0 0 auto;
+ width: 41.66666667%
+ }
+
+ .col-xxl-6 {
+ flex: 0 0 auto;
+ width: 50%
+ }
+
+ .col-xxl-7 {
+ flex: 0 0 auto;
+ width: 58.33333333%
+ }
+
+ .col-xxl-8 {
+ flex: 0 0 auto;
+ width: 66.66666667%
+ }
+
+ .col-xxl-9 {
+ flex: 0 0 auto;
+ width: 75%
+ }
+
+ .col-xxl-10 {
+ flex: 0 0 auto;
+ width: 83.33333333%
+ }
+
+ .col-xxl-11 {
+ flex: 0 0 auto;
+ width: 91.66666667%
+ }
+
+ .col-xxl-12 {
+ flex: 0 0 auto;
+ width: 100%
+ }
+
+ .offset-xxl-0 {
+ margin-left: 0
+ }
+
+ .offset-xxl-1 {
+ margin-left: 8.33333333%
+ }
+
+ .offset-xxl-2 {
+ margin-left: 16.66666667%
+ }
+
+ .offset-xxl-3 {
+ margin-left: 25%
+ }
+
+ .offset-xxl-4 {
+ margin-left: 33.33333333%
+ }
+
+ .offset-xxl-5 {
+ margin-left: 41.66666667%
+ }
+
+ .offset-xxl-6 {
+ margin-left: 50%
+ }
+
+ .offset-xxl-7 {
+ margin-left: 58.33333333%
+ }
+
+ .offset-xxl-8 {
+ margin-left: 66.66666667%
+ }
+
+ .offset-xxl-9 {
+ margin-left: 75%
+ }
+
+ .offset-xxl-10 {
+ margin-left: 83.33333333%
+ }
+
+ .offset-xxl-11 {
+ margin-left: 91.66666667%
+ }
+
+ .g-xxl-0, .gx-xxl-0 {
+ --bs-gutter-x: 0
+ }
+
+ .g-xxl-0, .gy-xxl-0 {
+ --bs-gutter-y: 0
+ }
+
+ .g-xxl-1, .gx-xxl-1 {
+ --bs-gutter-x: 0.25rem
+ }
+
+ .g-xxl-1, .gy-xxl-1 {
+ --bs-gutter-y: 0.25rem
+ }
+
+ .g-xxl-2, .gx-xxl-2 {
+ --bs-gutter-x: 0.5rem
+ }
+
+ .g-xxl-2, .gy-xxl-2 {
+ --bs-gutter-y: 0.5rem
+ }
+
+ .g-xxl-3, .gx-xxl-3 {
+ --bs-gutter-x: 1rem
+ }
+
+ .g-xxl-3, .gy-xxl-3 {
+ --bs-gutter-y: 1rem
+ }
+
+ .g-xxl-4, .gx-xxl-4 {
+ --bs-gutter-x: 1.5rem
+ }
+
+ .g-xxl-4, .gy-xxl-4 {
+ --bs-gutter-y: 1.5rem
+ }
+
+ .g-xxl-5, .gx-xxl-5 {
+ --bs-gutter-x: 3rem
+ }
+
+ .g-xxl-5, .gy-xxl-5 {
+ --bs-gutter-y: 3rem
+ }
+}
+
+.table {
+ --bs-table-bg: transparent;
+ --bs-table-accent-bg: transparent;
+ --bs-table-striped-color: #212529;
+ --bs-table-striped-bg: rgba(0, 0, 0, 0.05);
+ --bs-table-active-color: #212529;
+ --bs-table-active-bg: rgba(0, 0, 0, 0.1);
+ --bs-table-hover-color: #212529;
+ --bs-table-hover-bg: rgba(0, 0, 0, 0.075);
+ width: 100%;
+ margin-bottom: 1rem;
+ color: #212529;
+ vertical-align: top;
+ border-color: #dee2e6
+}
+
+.table > :not(caption) > * > * {
+ padding: .5rem .5rem;
+ background-color: var(--bs-table-bg);
+ border-bottom-width: 1px;
+ box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg)
+}
+
+.table > tbody {
+ vertical-align: inherit
+}
+
+.table > thead {
+ vertical-align: bottom
+}
+
+.table > :not(:first-child) {
+ border-top: 2px solid currentColor
+}
+
+.caption-top {
+ caption-side: top
+}
+
+.table-sm > :not(caption) > * > * {
+ padding: .25rem .25rem
+}
+
+.table-bordered > :not(caption) > * {
+ border-width: 1px 0
+}
+
+.table-bordered > :not(caption) > * > * {
+ border-width: 0 1px
+}
+
+.table-borderless > :not(caption) > * > * {
+ border-bottom-width: 0
+}
+
+.table-borderless > :not(:first-child) {
+ border-top-width: 0
+}
+
+.table-striped > tbody > tr:nth-of-type(odd) > * {
+ --bs-table-accent-bg: var(--bs-table-striped-bg);
+ color: var(--bs-table-striped-color)
+}
+
+.table-active {
+ --bs-table-accent-bg: var(--bs-table-active-bg);
+ color: var(--bs-table-active-color)
+}
+
+.table-hover > tbody > tr:hover > * {
+ --bs-table-accent-bg: var(--bs-table-hover-bg);
+ color: var(--bs-table-hover-color)
+}
+
+.table-primary {
+ --bs-table-bg: #cfe2ff;
+ --bs-table-striped-bg: #c5d7f2;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #bacbe6;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #bfd1ec;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #bacbe6
+}
+
+.table-secondary {
+ --bs-table-bg: #e2e3e5;
+ --bs-table-striped-bg: #d7d8da;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #cbccce;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #d1d2d4;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #cbccce
+}
+
+.table-success {
+ --bs-table-bg: #d1e7dd;
+ --bs-table-striped-bg: #c7dbd2;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #bcd0c7;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #c1d6cc;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #bcd0c7
+}
+
+.table-info {
+ --bs-table-bg: #cff4fc;
+ --bs-table-striped-bg: #c5e8ef;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #badce3;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #bfe2e9;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #badce3
+}
+
+.table-warning {
+ --bs-table-bg: #fff3cd;
+ --bs-table-striped-bg: #f2e7c3;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #e6dbb9;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #ece1be;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #e6dbb9
+}
+
+.table-danger {
+ --bs-table-bg: #f8d7da;
+ --bs-table-striped-bg: #eccccf;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #dfc2c4;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #e5c7ca;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #dfc2c4
+}
+
+.table-light {
+ --bs-table-bg: #f8f9fa;
+ --bs-table-striped-bg: #ecedee;
+ --bs-table-striped-color: #000;
+ --bs-table-active-bg: #dfe0e1;
+ --bs-table-active-color: #000;
+ --bs-table-hover-bg: #e5e6e7;
+ --bs-table-hover-color: #000;
+ color: #000;
+ border-color: #dfe0e1
+}
+
+.table-dark {
+ --bs-table-bg: #212529;
+ --bs-table-striped-bg: #2c3034;
+ --bs-table-striped-color: #fff;
+ --bs-table-active-bg: #373b3e;
+ --bs-table-active-color: #fff;
+ --bs-table-hover-bg: #323539;
+ --bs-table-hover-color: #fff;
+ color: #fff;
+ border-color: #373b3e
+}
+
+.table-responsive {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+}
+
+@media (max-width: 575.98px) {
+ .table-responsive-sm {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+}
+
+@media (max-width: 767.98px) {
+ .table-responsive-md {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+}
+
+@media (max-width: 991.98px) {
+ .table-responsive-lg {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .table-responsive-xl {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+}
+
+@media (max-width: 1399.98px) {
+ .table-responsive-xxl {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+}
+
+.form-label {
+ margin-bottom: .5rem
+}
+
+.col-form-label {
+ padding-top: calc(.375rem + 1px);
+ padding-bottom: calc(.375rem + 1px);
+ margin-bottom: 0;
+ font-size: inherit;
+ line-height: 1.5
+}
+
+.col-form-label-lg {
+ padding-top: calc(.5rem + 1px);
+ padding-bottom: calc(.5rem + 1px);
+ font-size: 1.25rem
+}
+
+.col-form-label-sm {
+ padding-top: calc(.25rem + 1px);
+ padding-bottom: calc(.25rem + 1px);
+ font-size: .875rem
+}
+
+.form-text {
+ margin-top: .25rem;
+ font-size: .875em;
+ color: #6c757d
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ padding: .375rem .75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ced4da;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border-radius: .25rem;
+ transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-control {
+ transition: none
+ }
+}
+
+.form-control[type=file] {
+ overflow: hidden
+}
+
+.form-control[type=file]:not(:disabled):not([readonly]) {
+ cursor: pointer
+}
+
+.form-control:focus {
+ color: #212529;
+ background-color: #fff;
+ border-color: #86b7fe;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.form-control::-webkit-date-and-time-value {
+ height: 1.5em
+}
+
+.form-control::-moz-placeholder {
+ color: #6c757d;
+ opacity: 1
+}
+
+.form-control::placeholder {
+ color: #6c757d;
+ opacity: 1
+}
+
+.form-control:disabled, .form-control[readonly] {
+ background-color: #e9ecef;
+ opacity: 1
+}
+
+.form-control::-webkit-file-upload-button {
+ padding: .375rem .75rem;
+ margin: -.375rem -.75rem;
+ -webkit-margin-end: .75rem;
+ margin-inline-end: .75rem;
+ color: #212529;
+ background-color: #e9ecef;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+.form-control::file-selector-button {
+ padding: .375rem .75rem;
+ margin: -.375rem -.75rem;
+ -webkit-margin-end: .75rem;
+ margin-inline-end: .75rem;
+ color: #212529;
+ background-color: #e9ecef;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-control::-webkit-file-upload-button {
+ -webkit-transition: none;
+ transition: none
+ }
+
+ .form-control::file-selector-button {
+ transition: none
+ }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+ background-color: #dde0e3
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+ background-color: #dde0e3
+}
+
+.form-control::-webkit-file-upload-button {
+ padding: .375rem .75rem;
+ margin: -.375rem -.75rem;
+ -webkit-margin-end: .75rem;
+ margin-inline-end: .75rem;
+ color: #212529;
+ background-color: #e9ecef;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-control::-webkit-file-upload-button {
+ -webkit-transition: none;
+ transition: none
+ }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+ background-color: #dde0e3
+}
+
+.form-control-plaintext {
+ display: block;
+ width: 100%;
+ padding: .375rem 0;
+ margin-bottom: 0;
+ line-height: 1.5;
+ color: #212529;
+ background-color: transparent;
+ border: solid transparent;
+ border-width: 1px 0
+}
+
+.form-control-plaintext.form-control-lg, .form-control-plaintext.form-control-sm {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.form-control-sm {
+ min-height: calc(1.5em + .5rem + 2px);
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ border-radius: .2rem
+}
+
+.form-control-sm::-webkit-file-upload-button {
+ padding: .25rem .5rem;
+ margin: -.25rem -.5rem;
+ -webkit-margin-end: .5rem;
+ margin-inline-end: .5rem
+}
+
+.form-control-sm::file-selector-button {
+ padding: .25rem .5rem;
+ margin: -.25rem -.5rem;
+ -webkit-margin-end: .5rem;
+ margin-inline-end: .5rem
+}
+
+.form-control-sm::-webkit-file-upload-button {
+ padding: .25rem .5rem;
+ margin: -.25rem -.5rem;
+ -webkit-margin-end: .5rem;
+ margin-inline-end: .5rem
+}
+
+.form-control-lg {
+ min-height: calc(1.5em + 1rem + 2px);
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ border-radius: .3rem
+}
+
+.form-control-lg::-webkit-file-upload-button {
+ padding: .5rem 1rem;
+ margin: -.5rem -1rem;
+ -webkit-margin-end: 1rem;
+ margin-inline-end: 1rem
+}
+
+.form-control-lg::file-selector-button {
+ padding: .5rem 1rem;
+ margin: -.5rem -1rem;
+ -webkit-margin-end: 1rem;
+ margin-inline-end: 1rem
+}
+
+.form-control-lg::-webkit-file-upload-button {
+ padding: .5rem 1rem;
+ margin: -.5rem -1rem;
+ -webkit-margin-end: 1rem;
+ margin-inline-end: 1rem
+}
+
+textarea.form-control {
+ min-height: calc(1.5em + .75rem + 2px)
+}
+
+textarea.form-control-sm {
+ min-height: calc(1.5em + .5rem + 2px)
+}
+
+textarea.form-control-lg {
+ min-height: calc(1.5em + 1rem + 2px)
+}
+
+.form-control-color {
+ width: 3rem;
+ height: auto;
+ padding: .375rem
+}
+
+.form-control-color:not(:disabled):not([readonly]) {
+ cursor: pointer
+}
+
+.form-control-color::-moz-color-swatch {
+ height: 1.5em;
+ border-radius: .25rem
+}
+
+.form-control-color::-webkit-color-swatch {
+ height: 1.5em;
+ border-radius: .25rem
+}
+
+.form-select {
+ display: block;
+ width: 100%;
+ padding: .375rem 2.25rem .375rem .75rem;
+ -moz-padding-start: calc(0.75rem - 3px);
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ background-color: #fff;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right .75rem center;
+ background-size: 16px 12px;
+ border: 1px solid #ced4da;
+ border-radius: .25rem;
+ transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-select {
+ transition: none
+ }
+}
+
+.form-select:focus {
+ border-color: #86b7fe;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.form-select[multiple], .form-select[size]:not([size="1"]) {
+ padding-right: .75rem;
+ background-image: none
+}
+
+.form-select:disabled {
+ background-color: #e9ecef
+}
+
+.form-select:-moz-focusring {
+ color: transparent;
+ text-shadow: 0 0 0 #212529
+}
+
+.form-select-sm {
+ padding-top: .25rem;
+ padding-bottom: .25rem;
+ padding-left: .5rem;
+ font-size: .875rem;
+ border-radius: .2rem
+}
+
+.form-select-lg {
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ padding-left: 1rem;
+ font-size: 1.25rem;
+ border-radius: .3rem
+}
+
+.form-check {
+ display: block;
+ min-height: 1.5rem;
+ padding-left: 1.5em;
+ margin-bottom: .125rem
+}
+
+.form-check .form-check-input {
+ float: left;
+ margin-left: -1.5em
+}
+
+.form-check-input {
+ width: 1em;
+ height: 1em;
+ margin-top: .25em;
+ vertical-align: top;
+ background-color: #fff;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: contain;
+ border: 1px solid rgba(0, 0, 0, .25);
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-print-color-adjust: exact;
+ color-adjust: exact
+}
+
+.form-check-input[type=checkbox] {
+ border-radius: .25em
+}
+
+.form-check-input[type=radio] {
+ border-radius: 50%
+}
+
+.form-check-input:active {
+ filter: brightness(90%)
+}
+
+.form-check-input:focus {
+ border-color: #86b7fe;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.form-check-input:checked {
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.form-check-input:checked[type=checkbox] {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")
+}
+
+.form-check-input:checked[type=radio] {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")
+}
+
+.form-check-input[type=checkbox]:indeterminate {
+ background-color: #0d6efd;
+ border-color: #0d6efd;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")
+}
+
+.form-check-input:disabled {
+ pointer-events: none;
+ filter: none;
+ opacity: .5
+}
+
+.form-check-input:disabled ~ .form-check-label, .form-check-input[disabled] ~ .form-check-label {
+ opacity: .5
+}
+
+.form-switch {
+ padding-left: 2.5em
+}
+
+.form-switch .form-check-input {
+ width: 2em;
+ margin-left: -2.5em;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
+ background-position: left center;
+ border-radius: 2em;
+ transition: background-position .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-switch .form-check-input {
+ transition: none
+ }
+}
+
+.form-switch .form-check-input:focus {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")
+}
+
+.form-switch .form-check-input:checked {
+ background-position: right center;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")
+}
+
+.form-check-inline {
+ display: inline-block;
+ margin-right: 1rem
+}
+
+.btn-check {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none
+}
+
+.btn-check:disabled + .btn, .btn-check[disabled] + .btn {
+ pointer-events: none;
+ filter: none;
+ opacity: .65
+}
+
+.form-range {
+ width: 100%;
+ height: 1.5rem;
+ padding: 0;
+ background-color: transparent;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none
+}
+
+.form-range:focus {
+ outline: 0
+}
+
+.form-range:focus::-webkit-slider-thumb {
+ box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.form-range:focus::-moz-range-thumb {
+ box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.form-range::-moz-focus-outer {
+ border: 0
+}
+
+.form-range::-webkit-slider-thumb {
+ width: 1rem;
+ height: 1rem;
+ margin-top: -.25rem;
+ background-color: #0d6efd;
+ border: 0;
+ border-radius: 1rem;
+ -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ -webkit-appearance: none;
+ appearance: none
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-range::-webkit-slider-thumb {
+ -webkit-transition: none;
+ transition: none
+ }
+}
+
+.form-range::-webkit-slider-thumb:active {
+ background-color: #b6d4fe
+}
+
+.form-range::-webkit-slider-runnable-track {
+ width: 100%;
+ height: .5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dee2e6;
+ border-color: transparent;
+ border-radius: 1rem
+}
+
+.form-range::-moz-range-thumb {
+ width: 1rem;
+ height: 1rem;
+ background-color: #0d6efd;
+ border: 0;
+ border-radius: 1rem;
+ -moz-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ -moz-appearance: none;
+ appearance: none
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-range::-moz-range-thumb {
+ -moz-transition: none;
+ transition: none
+ }
+}
+
+.form-range::-moz-range-thumb:active {
+ background-color: #b6d4fe
+}
+
+.form-range::-moz-range-track {
+ width: 100%;
+ height: .5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dee2e6;
+ border-color: transparent;
+ border-radius: 1rem
+}
+
+.form-range:disabled {
+ pointer-events: none
+}
+
+.form-range:disabled::-webkit-slider-thumb {
+ background-color: #adb5bd
+}
+
+.form-range:disabled::-moz-range-thumb {
+ background-color: #adb5bd
+}
+
+.form-floating {
+ position: relative
+}
+
+.form-floating > .form-control, .form-floating > .form-select {
+ height: calc(3.5rem + 2px);
+ line-height: 1.25
+}
+
+.form-floating > label {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ padding: 1rem .75rem;
+ pointer-events: none;
+ border: 1px solid transparent;
+ transform-origin: 0 0;
+ transition: opacity .1s ease-in-out, transform .1s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-floating > label {
+ transition: none
+ }
+}
+
+.form-floating > .form-control {
+ padding: 1rem .75rem
+}
+
+.form-floating > .form-control::-moz-placeholder {
+ color: transparent
+}
+
+.form-floating > .form-control::placeholder {
+ color: transparent
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) {
+ padding-top: 1.625rem;
+ padding-bottom: .625rem
+}
+
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {
+ padding-top: 1.625rem;
+ padding-bottom: .625rem
+}
+
+.form-floating > .form-control:-webkit-autofill {
+ padding-top: 1.625rem;
+ padding-bottom: .625rem
+}
+
+.form-floating > .form-select {
+ padding-top: 1.625rem;
+ padding-bottom: .625rem
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+ opacity: .65;
+ transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-select ~ label {
+ opacity: .65;
+ transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.form-floating > .form-control:-webkit-autofill ~ label {
+ opacity: .65;
+ transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.input-group {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: stretch;
+ width: 100%
+}
+
+.input-group > .form-control, .input-group > .form-select {
+ position: relative;
+ flex: 1 1 auto;
+ width: 1%;
+ min-width: 0
+}
+
+.input-group > .form-control:focus, .input-group > .form-select:focus {
+ z-index: 3
+}
+
+.input-group .btn {
+ position: relative;
+ z-index: 2
+}
+
+.input-group .btn:focus {
+ z-index: 3
+}
+
+.input-group-text {
+ display: flex;
+ align-items: center;
+ padding: .375rem .75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #e9ecef;
+ border: 1px solid #ced4da;
+ border-radius: .25rem
+}
+
+.input-group-lg > .btn, .input-group-lg > .form-control, .input-group-lg > .form-select, .input-group-lg > .input-group-text {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ border-radius: .3rem
+}
+
+.input-group-sm > .btn, .input-group-sm > .form-control, .input-group-sm > .form-select, .input-group-sm > .input-group-text {
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ border-radius: .2rem
+}
+
+.input-group-lg > .form-select, .input-group-sm > .form-select {
+ padding-right: 3rem
+}
+
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
+ margin-left: -1px;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: .875em;
+ color: #198754
+}
+
+.valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .25rem .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ color: #fff;
+ background-color: rgba(25, 135, 84, .9);
+ border-radius: .25rem
+}
+
+.is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip, .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip {
+ display: block
+}
+
+.form-control.is-valid, .was-validated .form-control:valid {
+ border-color: #198754;
+ padding-right: calc(1.5em + .75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(.375em + .1875rem) center;
+ background-size: calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-control.is-valid:focus, .was-validated .form-control:valid:focus {
+ border-color: #198754;
+ box-shadow: 0 0 0 .25rem rgba(25, 135, 84, .25)
+}
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+ padding-right: calc(1.5em + .75rem);
+ background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
+}
+
+.form-select.is-valid, .was-validated .form-select:valid {
+ border-color: #198754
+}
+
+.form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"], .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"] {
+ padding-right: 4.125rem;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-position: right .75rem center, center right 2.25rem;
+ background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-select.is-valid:focus, .was-validated .form-select:valid:focus {
+ border-color: #198754;
+ box-shadow: 0 0 0 .25rem rgba(25, 135, 84, .25)
+}
+
+.form-check-input.is-valid, .was-validated .form-check-input:valid {
+ border-color: #198754
+}
+
+.form-check-input.is-valid:checked, .was-validated .form-check-input:valid:checked {
+ background-color: #198754
+}
+
+.form-check-input.is-valid:focus, .was-validated .form-check-input:valid:focus {
+ box-shadow: 0 0 0 .25rem rgba(25, 135, 84, .25)
+}
+
+.form-check-input.is-valid ~ .form-check-label, .was-validated .form-check-input:valid ~ .form-check-label {
+ color: #198754
+}
+
+.form-check-inline .form-check-input ~ .valid-feedback {
+ margin-left: .5em
+}
+
+.input-group .form-control.is-valid, .input-group .form-select.is-valid, .was-validated .input-group .form-control:valid, .was-validated .input-group .form-select:valid {
+ z-index: 1
+}
+
+.input-group .form-control.is-valid:focus, .input-group .form-select.is-valid:focus, .was-validated .input-group .form-control:valid:focus, .was-validated .input-group .form-select:valid:focus {
+ z-index: 3
+}
+
+.invalid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: .875em;
+ color: #dc3545
+}
+
+.invalid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .25rem .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ color: #fff;
+ background-color: rgba(220, 53, 69, .9);
+ border-radius: .25rem
+}
+
+.is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip, .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip {
+ display: block
+}
+
+.form-control.is-invalid, .was-validated .form-control:invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + .75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(.375em + .1875rem) center;
+ background-size: calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-control.is-invalid:focus, .was-validated .form-control:invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25)
+}
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+ padding-right: calc(1.5em + .75rem);
+ background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
+}
+
+.form-select.is-invalid, .was-validated .form-select:invalid {
+ border-color: #dc3545
+}
+
+.form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"], .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"] {
+ padding-right: 4.125rem;
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+ background-position: right .75rem center, center right 2.25rem;
+ background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-select.is-invalid:focus, .was-validated .form-select:invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25)
+}
+
+.form-check-input.is-invalid, .was-validated .form-check-input:invalid {
+ border-color: #dc3545
+}
+
+.form-check-input.is-invalid:checked, .was-validated .form-check-input:invalid:checked {
+ background-color: #dc3545
+}
+
+.form-check-input.is-invalid:focus, .was-validated .form-check-input:invalid:focus {
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25)
+}
+
+.form-check-input.is-invalid ~ .form-check-label, .was-validated .form-check-input:invalid ~ .form-check-label {
+ color: #dc3545
+}
+
+.form-check-inline .form-check-input ~ .invalid-feedback {
+ margin-left: .5em
+}
+
+.input-group .form-control.is-invalid, .input-group .form-select.is-invalid, .was-validated .input-group .form-control:invalid, .was-validated .input-group .form-select:invalid {
+ z-index: 2
+}
+
+.input-group .form-control.is-invalid:focus, .input-group .form-select.is-invalid:focus, .was-validated .input-group .form-control:invalid:focus, .was-validated .input-group .form-select:invalid:focus {
+ z-index: 3
+}
+
+.btn {
+ display: inline-block;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ text-align: center;
+ text-decoration: none;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ background-color: transparent;
+ border: 1px solid transparent;
+ padding: .375rem .75rem;
+ font-size: 1rem;
+ border-radius: .25rem;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .btn {
+ transition: none
+ }
+}
+
+.btn:hover {
+ color: #212529
+}
+
+.btn-check:focus + .btn, .btn:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.btn.disabled, .btn:disabled, fieldset:disabled .btn {
+ pointer-events: none;
+ opacity: .65
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #0b5ed7;
+ border-color: #0a58ca
+}
+
+.btn-check:focus + .btn-primary, .btn-primary:focus {
+ color: #fff;
+ background-color: #0b5ed7;
+ border-color: #0a58ca;
+ box-shadow: 0 0 0 .25rem rgba(49, 132, 253, .5)
+}
+
+.btn-check:active + .btn-primary, .btn-check:checked + .btn-primary, .btn-primary.active, .btn-primary:active, .show > .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #0a58ca;
+ border-color: #0a53be
+}
+
+.btn-check:active + .btn-primary:focus, .btn-check:checked + .btn-primary:focus, .btn-primary.active:focus, .btn-primary:active:focus, .show > .btn-primary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(49, 132, 253, .5)
+}
+
+.btn-primary.disabled, .btn-primary:disabled {
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.btn-secondary {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-secondary:hover {
+ color: #fff;
+ background-color: #5c636a;
+ border-color: #565e64
+}
+
+.btn-check:focus + .btn-secondary, .btn-secondary:focus {
+ color: #fff;
+ background-color: #5c636a;
+ border-color: #565e64;
+ box-shadow: 0 0 0 .25rem rgba(130, 138, 145, .5)
+}
+
+.btn-check:active + .btn-secondary, .btn-check:checked + .btn-secondary, .btn-secondary.active, .btn-secondary:active, .show > .btn-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #565e64;
+ border-color: #51585e
+}
+
+.btn-check:active + .btn-secondary:focus, .btn-check:checked + .btn-secondary:focus, .btn-secondary.active:focus, .btn-secondary:active:focus, .show > .btn-secondary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(130, 138, 145, .5)
+}
+
+.btn-secondary.disabled, .btn-secondary:disabled {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #198754;
+ border-color: #198754
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #157347;
+ border-color: #146c43
+}
+
+.btn-check:focus + .btn-success, .btn-success:focus {
+ color: #fff;
+ background-color: #157347;
+ border-color: #146c43;
+ box-shadow: 0 0 0 .25rem rgba(60, 153, 110, .5)
+}
+
+.btn-check:active + .btn-success, .btn-check:checked + .btn-success, .btn-success.active, .btn-success:active, .show > .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #146c43;
+ border-color: #13653f
+}
+
+.btn-check:active + .btn-success:focus, .btn-check:checked + .btn-success:focus, .btn-success.active:focus, .btn-success:active:focus, .show > .btn-success.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(60, 153, 110, .5)
+}
+
+.btn-success.disabled, .btn-success:disabled {
+ color: #fff;
+ background-color: #198754;
+ border-color: #198754
+}
+
+.btn-info {
+ color: #000;
+ background-color: #0dcaf0;
+ border-color: #0dcaf0
+}
+
+.btn-info:hover {
+ color: #000;
+ background-color: #31d2f2;
+ border-color: #25cff2
+}
+
+.btn-check:focus + .btn-info, .btn-info:focus {
+ color: #000;
+ background-color: #31d2f2;
+ border-color: #25cff2;
+ box-shadow: 0 0 0 .25rem rgba(11, 172, 204, .5)
+}
+
+.btn-check:active + .btn-info, .btn-check:checked + .btn-info, .btn-info.active, .btn-info:active, .show > .btn-info.dropdown-toggle {
+ color: #000;
+ background-color: #3dd5f3;
+ border-color: #25cff2
+}
+
+.btn-check:active + .btn-info:focus, .btn-check:checked + .btn-info:focus, .btn-info.active:focus, .btn-info:active:focus, .show > .btn-info.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(11, 172, 204, .5)
+}
+
+.btn-info.disabled, .btn-info:disabled {
+ color: #000;
+ background-color: #0dcaf0;
+ border-color: #0dcaf0
+}
+
+.btn-warning {
+ color: #000;
+ background-color: #ffc107;
+ border-color: #ffc107
+}
+
+.btn-warning:hover {
+ color: #000;
+ background-color: #ffca2c;
+ border-color: #ffc720
+}
+
+.btn-check:focus + .btn-warning, .btn-warning:focus {
+ color: #000;
+ background-color: #ffca2c;
+ border-color: #ffc720;
+ box-shadow: 0 0 0 .25rem rgba(217, 164, 6, .5)
+}
+
+.btn-check:active + .btn-warning, .btn-check:checked + .btn-warning, .btn-warning.active, .btn-warning:active, .show > .btn-warning.dropdown-toggle {
+ color: #000;
+ background-color: #ffcd39;
+ border-color: #ffc720
+}
+
+.btn-check:active + .btn-warning:focus, .btn-check:checked + .btn-warning:focus, .btn-warning.active:focus, .btn-warning:active:focus, .show > .btn-warning.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(217, 164, 6, .5)
+}
+
+.btn-warning.disabled, .btn-warning:disabled {
+ color: #000;
+ background-color: #ffc107;
+ border-color: #ffc107
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #bb2d3b;
+ border-color: #b02a37
+}
+
+.btn-check:focus + .btn-danger, .btn-danger:focus {
+ color: #fff;
+ background-color: #bb2d3b;
+ border-color: #b02a37;
+ box-shadow: 0 0 0 .25rem rgba(225, 83, 97, .5)
+}
+
+.btn-check:active + .btn-danger, .btn-check:checked + .btn-danger, .btn-danger.active, .btn-danger:active, .show > .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #b02a37;
+ border-color: #a52834
+}
+
+.btn-check:active + .btn-danger:focus, .btn-check:checked + .btn-danger:focus, .btn-danger.active:focus, .btn-danger:active:focus, .show > .btn-danger.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(225, 83, 97, .5)
+}
+
+.btn-danger.disabled, .btn-danger:disabled {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545
+}
+
+.btn-light {
+ color: #000;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa
+}
+
+.btn-light:hover {
+ color: #000;
+ background-color: #f9fafb;
+ border-color: #f9fafb
+}
+
+.btn-check:focus + .btn-light, .btn-light:focus {
+ color: #000;
+ background-color: #f9fafb;
+ border-color: #f9fafb;
+ box-shadow: 0 0 0 .25rem rgba(211, 212, 213, .5)
+}
+
+.btn-check:active + .btn-light, .btn-check:checked + .btn-light, .btn-light.active, .btn-light:active, .show > .btn-light.dropdown-toggle {
+ color: #000;
+ background-color: #f9fafb;
+ border-color: #f9fafb
+}
+
+.btn-check:active + .btn-light:focus, .btn-check:checked + .btn-light:focus, .btn-light.active:focus, .btn-light:active:focus, .show > .btn-light.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(211, 212, 213, .5)
+}
+
+.btn-light.disabled, .btn-light:disabled {
+ color: #000;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa
+}
+
+.btn-dark {
+ color: #fff;
+ background-color: #212529;
+ border-color: #212529
+}
+
+.btn-dark:hover {
+ color: #fff;
+ background-color: #1c1f23;
+ border-color: #1a1e21
+}
+
+.btn-check:focus + .btn-dark, .btn-dark:focus {
+ color: #fff;
+ background-color: #1c1f23;
+ border-color: #1a1e21;
+ box-shadow: 0 0 0 .25rem rgba(66, 70, 73, .5)
+}
+
+.btn-check:active + .btn-dark, .btn-check:checked + .btn-dark, .btn-dark.active, .btn-dark:active, .show > .btn-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #1a1e21;
+ border-color: #191c1f
+}
+
+.btn-check:active + .btn-dark:focus, .btn-check:checked + .btn-dark:focus, .btn-dark.active:focus, .btn-dark:active:focus, .show > .btn-dark.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .25rem rgba(66, 70, 73, .5)
+}
+
+.btn-dark.disabled, .btn-dark:disabled {
+ color: #fff;
+ background-color: #212529;
+ border-color: #212529
+}
+
+.btn-outline-primary {
+ color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.btn-outline-primary:hover {
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .5)
+}
+
+.btn-check:active + .btn-outline-primary, .btn-check:checked + .btn-outline-primary, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show, .btn-outline-primary:active {
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.btn-check:active + .btn-outline-primary:focus, .btn-check:checked + .btn-outline-primary:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus, .btn-outline-primary:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .5)
+}
+
+.btn-outline-primary.disabled, .btn-outline-primary:disabled {
+ color: #0d6efd;
+ background-color: transparent
+}
+
+.btn-outline-secondary {
+ color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-outline-secondary:hover {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {
+ box-shadow: 0 0 0 .25rem rgba(108, 117, 125, .5)
+}
+
+.btn-check:active + .btn-outline-secondary, .btn-check:checked + .btn-outline-secondary, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show, .btn-outline-secondary:active {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-check:active + .btn-outline-secondary:focus, .btn-check:checked + .btn-outline-secondary:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus, .btn-outline-secondary:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(108, 117, 125, .5)
+}
+
+.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
+ color: #6c757d;
+ background-color: transparent
+}
+
+.btn-outline-success {
+ color: #198754;
+ border-color: #198754
+}
+
+.btn-outline-success:hover {
+ color: #fff;
+ background-color: #198754;
+ border-color: #198754
+}
+
+.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {
+ box-shadow: 0 0 0 .25rem rgba(25, 135, 84, .5)
+}
+
+.btn-check:active + .btn-outline-success, .btn-check:checked + .btn-outline-success, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show, .btn-outline-success:active {
+ color: #fff;
+ background-color: #198754;
+ border-color: #198754
+}
+
+.btn-check:active + .btn-outline-success:focus, .btn-check:checked + .btn-outline-success:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus, .btn-outline-success:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(25, 135, 84, .5)
+}
+
+.btn-outline-success.disabled, .btn-outline-success:disabled {
+ color: #198754;
+ background-color: transparent
+}
+
+.btn-outline-info {
+ color: #0dcaf0;
+ border-color: #0dcaf0
+}
+
+.btn-outline-info:hover {
+ color: #000;
+ background-color: #0dcaf0;
+ border-color: #0dcaf0
+}
+
+.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {
+ box-shadow: 0 0 0 .25rem rgba(13, 202, 240, .5)
+}
+
+.btn-check:active + .btn-outline-info, .btn-check:checked + .btn-outline-info, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show, .btn-outline-info:active {
+ color: #000;
+ background-color: #0dcaf0;
+ border-color: #0dcaf0
+}
+
+.btn-check:active + .btn-outline-info:focus, .btn-check:checked + .btn-outline-info:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus, .btn-outline-info:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(13, 202, 240, .5)
+}
+
+.btn-outline-info.disabled, .btn-outline-info:disabled {
+ color: #0dcaf0;
+ background-color: transparent
+}
+
+.btn-outline-warning {
+ color: #ffc107;
+ border-color: #ffc107
+}
+
+.btn-outline-warning:hover {
+ color: #000;
+ background-color: #ffc107;
+ border-color: #ffc107
+}
+
+.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {
+ box-shadow: 0 0 0 .25rem rgba(255, 193, 7, .5)
+}
+
+.btn-check:active + .btn-outline-warning, .btn-check:checked + .btn-outline-warning, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show, .btn-outline-warning:active {
+ color: #000;
+ background-color: #ffc107;
+ border-color: #ffc107
+}
+
+.btn-check:active + .btn-outline-warning:focus, .btn-check:checked + .btn-outline-warning:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus, .btn-outline-warning:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(255, 193, 7, .5)
+}
+
+.btn-outline-warning.disabled, .btn-outline-warning:disabled {
+ color: #ffc107;
+ background-color: transparent
+}
+
+.btn-outline-danger {
+ color: #dc3545;
+ border-color: #dc3545
+}
+
+.btn-outline-danger:hover {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545
+}
+
+.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .5)
+}
+
+.btn-check:active + .btn-outline-danger, .btn-check:checked + .btn-outline-danger, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show, .btn-outline-danger:active {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545
+}
+
+.btn-check:active + .btn-outline-danger:focus, .btn-check:checked + .btn-outline-danger:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus, .btn-outline-danger:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .5)
+}
+
+.btn-outline-danger.disabled, .btn-outline-danger:disabled {
+ color: #dc3545;
+ background-color: transparent
+}
+
+.btn-outline-light {
+ color: #f8f9fa;
+ border-color: #f8f9fa
+}
+
+.btn-outline-light:hover {
+ color: #000;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa
+}
+
+.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {
+ box-shadow: 0 0 0 .25rem rgba(248, 249, 250, .5)
+}
+
+.btn-check:active + .btn-outline-light, .btn-check:checked + .btn-outline-light, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show, .btn-outline-light:active {
+ color: #000;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa
+}
+
+.btn-check:active + .btn-outline-light:focus, .btn-check:checked + .btn-outline-light:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus, .btn-outline-light:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(248, 249, 250, .5)
+}
+
+.btn-outline-light.disabled, .btn-outline-light:disabled {
+ color: #f8f9fa;
+ background-color: transparent
+}
+
+.btn-outline-dark {
+ color: #212529;
+ border-color: #212529
+}
+
+.btn-outline-dark:hover {
+ color: #fff;
+ background-color: #212529;
+ border-color: #212529
+}
+
+.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {
+ box-shadow: 0 0 0 .25rem rgba(33, 37, 41, .5)
+}
+
+.btn-check:active + .btn-outline-dark, .btn-check:checked + .btn-outline-dark, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show, .btn-outline-dark:active {
+ color: #fff;
+ background-color: #212529;
+ border-color: #212529
+}
+
+.btn-check:active + .btn-outline-dark:focus, .btn-check:checked + .btn-outline-dark:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus, .btn-outline-dark:active:focus {
+ box-shadow: 0 0 0 .25rem rgba(33, 37, 41, .5)
+}
+
+.btn-outline-dark.disabled, .btn-outline-dark:disabled {
+ color: #212529;
+ background-color: transparent
+}
+
+.btn-link {
+ font-weight: 400;
+ color: #0d6efd;
+ text-decoration: underline
+}
+
+.btn-link:hover {
+ color: #0a58ca
+}
+
+.btn-link.disabled, .btn-link:disabled {
+ color: #6c757d
+}
+
+.btn-group-lg > .btn, .btn-lg {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ border-radius: .3rem
+}
+
+.btn-group-sm > .btn, .btn-sm {
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ border-radius: .2rem
+}
+
+.fade {
+ transition: opacity .15s linear
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .fade {
+ transition: none
+ }
+}
+
+.fade:not(.show) {
+ opacity: 0
+}
+
+.collapse:not(.show) {
+ display: none
+}
+
+.collapsing {
+ height: 0;
+ overflow: hidden;
+ transition: height .35s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .collapsing {
+ transition: none
+ }
+}
+
+.collapsing.collapse-horizontal {
+ width: 0;
+ height: auto;
+ transition: width .35s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .collapsing.collapse-horizontal {
+ transition: none
+ }
+}
+
+.dropdown, .dropend, .dropstart, .dropup {
+ position: relative
+}
+
+.dropdown-toggle {
+ white-space: nowrap
+}
+
+.dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid;
+ border-right: .3em solid transparent;
+ border-bottom: 0;
+ border-left: .3em solid transparent
+}
+
+.dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ z-index: 1000;
+ display: none;
+ min-width: 10rem;
+ padding: .5rem 0;
+ margin: 0;
+ font-size: 1rem;
+ color: #212529;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: .25rem
+}
+
+.dropdown-menu[data-bs-popper] {
+ top: 100%;
+ left: 0;
+ margin-top: .125rem
+}
+
+.dropdown-menu-start {
+ --bs-position: start
+}
+
+.dropdown-menu-start[data-bs-popper] {
+ right: auto;
+ left: 0
+}
+
+.dropdown-menu-end {
+ --bs-position: end
+}
+
+.dropdown-menu-end[data-bs-popper] {
+ right: 0;
+ left: auto
+}
+
+@media (min-width: 576px) {
+ .dropdown-menu-sm-start {
+ --bs-position: start
+ }
+
+ .dropdown-menu-sm-start[data-bs-popper] {
+ right: auto;
+ left: 0
+ }
+
+ .dropdown-menu-sm-end {
+ --bs-position: end
+ }
+
+ .dropdown-menu-sm-end[data-bs-popper] {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 768px) {
+ .dropdown-menu-md-start {
+ --bs-position: start
+ }
+
+ .dropdown-menu-md-start[data-bs-popper] {
+ right: auto;
+ left: 0
+ }
+
+ .dropdown-menu-md-end {
+ --bs-position: end
+ }
+
+ .dropdown-menu-md-end[data-bs-popper] {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 992px) {
+ .dropdown-menu-lg-start {
+ --bs-position: start
+ }
+
+ .dropdown-menu-lg-start[data-bs-popper] {
+ right: auto;
+ left: 0
+ }
+
+ .dropdown-menu-lg-end {
+ --bs-position: end
+ }
+
+ .dropdown-menu-lg-end[data-bs-popper] {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 1200px) {
+ .dropdown-menu-xl-start {
+ --bs-position: start
+ }
+
+ .dropdown-menu-xl-start[data-bs-popper] {
+ right: auto;
+ left: 0
+ }
+
+ .dropdown-menu-xl-end {
+ --bs-position: end
+ }
+
+ .dropdown-menu-xl-end[data-bs-popper] {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 1400px) {
+ .dropdown-menu-xxl-start {
+ --bs-position: start
+ }
+
+ .dropdown-menu-xxl-start[data-bs-popper] {
+ right: auto;
+ left: 0
+ }
+
+ .dropdown-menu-xxl-end {
+ --bs-position: end
+ }
+
+ .dropdown-menu-xxl-end[data-bs-popper] {
+ right: 0;
+ left: auto
+ }
+}
+
+.dropup .dropdown-menu[data-bs-popper] {
+ top: auto;
+ bottom: 100%;
+ margin-top: 0;
+ margin-bottom: .125rem
+}
+
+.dropup .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: 0;
+ border-right: .3em solid transparent;
+ border-bottom: .3em solid;
+ border-left: .3em solid transparent
+}
+
+.dropup .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropend .dropdown-menu[data-bs-popper] {
+ top: 0;
+ right: auto;
+ left: 100%;
+ margin-top: 0;
+ margin-left: .125rem
+}
+
+.dropend .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-right: 0;
+ border-bottom: .3em solid transparent;
+ border-left: .3em solid
+}
+
+.dropend .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropend .dropdown-toggle::after {
+ vertical-align: 0
+}
+
+.dropstart .dropdown-menu[data-bs-popper] {
+ top: 0;
+ right: 100%;
+ left: auto;
+ margin-top: 0;
+ margin-right: .125rem
+}
+
+.dropstart .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: ""
+}
+
+.dropstart .dropdown-toggle::after {
+ display: none
+}
+
+.dropstart .dropdown-toggle::before {
+ display: inline-block;
+ margin-right: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-right: .3em solid;
+ border-bottom: .3em solid transparent
+}
+
+.dropstart .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropstart .dropdown-toggle::before {
+ vertical-align: 0
+}
+
+.dropdown-divider {
+ height: 0;
+ margin: .5rem 0;
+ overflow: hidden;
+ border-top: 1px solid rgba(0, 0, 0, .15)
+}
+
+.dropdown-item {
+ display: block;
+ width: 100%;
+ padding: .25rem 1rem;
+ clear: both;
+ font-weight: 400;
+ color: #212529;
+ text-align: inherit;
+ text-decoration: none;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 0
+}
+
+.dropdown-item:focus, .dropdown-item:hover {
+ color: #1e2125;
+ background-color: #e9ecef
+}
+
+.dropdown-item.active, .dropdown-item:active {
+ color: #fff;
+ text-decoration: none;
+ background-color: #0d6efd
+}
+
+.dropdown-item.disabled, .dropdown-item:disabled {
+ color: #adb5bd;
+ pointer-events: none;
+ background-color: transparent
+}
+
+.dropdown-menu.show {
+ display: block
+}
+
+.dropdown-header {
+ display: block;
+ padding: .5rem 1rem;
+ margin-bottom: 0;
+ font-size: .875rem;
+ color: #6c757d;
+ white-space: nowrap
+}
+
+.dropdown-item-text {
+ display: block;
+ padding: .25rem 1rem;
+ color: #212529
+}
+
+.dropdown-menu-dark {
+ color: #dee2e6;
+ background-color: #343a40;
+ border-color: rgba(0, 0, 0, .15)
+}
+
+.dropdown-menu-dark .dropdown-item {
+ color: #dee2e6
+}
+
+.dropdown-menu-dark .dropdown-item:focus, .dropdown-menu-dark .dropdown-item:hover {
+ color: #fff;
+ background-color: rgba(255, 255, 255, .15)
+}
+
+.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {
+ color: #fff;
+ background-color: #0d6efd
+}
+
+.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {
+ color: #adb5bd
+}
+
+.dropdown-menu-dark .dropdown-divider {
+ border-color: rgba(0, 0, 0, .15)
+}
+
+.dropdown-menu-dark .dropdown-item-text {
+ color: #dee2e6
+}
+
+.dropdown-menu-dark .dropdown-header {
+ color: #adb5bd
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ display: inline-flex;
+ vertical-align: middle
+}
+
+.btn-group-vertical > .btn, .btn-group > .btn {
+ position: relative;
+ flex: 1 1 auto
+}
+
+.btn-group-vertical > .btn-check:checked + .btn, .btn-group-vertical > .btn-check:focus + .btn, .btn-group-vertical > .btn.active, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:hover, .btn-group > .btn-check:checked + .btn, .btn-group > .btn-check:focus + .btn, .btn-group > .btn.active, .btn-group > .btn:active, .btn-group > .btn:focus, .btn-group > .btn:hover {
+ z-index: 1
+}
+
+.btn-toolbar {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start
+}
+
+.btn-toolbar .input-group {
+ width: auto
+}
+
+.btn-group > .btn-group:not(:first-child), .btn-group > .btn:not(:first-child) {
+ margin-left: -1px
+}
+
+.btn-group > .btn-group:not(:last-child) > .btn, .btn-group > .btn:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.btn-group > .btn-group:not(:first-child) > .btn, .btn-group > .btn:nth-child(n+3), .btn-group > :not(.btn-check) + .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.dropdown-toggle-split {
+ padding-right: .5625rem;
+ padding-left: .5625rem
+}
+
+.dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after {
+ margin-left: 0
+}
+
+.dropstart .dropdown-toggle-split::before {
+ margin-right: 0
+}
+
+.btn-group-sm > .btn + .dropdown-toggle-split, .btn-sm + .dropdown-toggle-split {
+ padding-right: .375rem;
+ padding-left: .375rem
+}
+
+.btn-group-lg > .btn + .dropdown-toggle-split, .btn-lg + .dropdown-toggle-split {
+ padding-right: .75rem;
+ padding-left: .75rem
+}
+
+.btn-group-vertical {
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {
+ width: 100%
+}
+
+.btn-group-vertical > .btn-group:not(:first-child), .btn-group-vertical > .btn:not(:first-child) {
+ margin-top: -1px
+}
+
+.btn-group-vertical > .btn-group:not(:last-child) > .btn, .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child) > .btn, .btn-group-vertical > .btn ~ .btn {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.nav {
+ display: flex;
+ flex-wrap: wrap;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.nav-link {
+ display: block;
+ padding: .5rem 1rem;
+ color: #0d6efd;
+ text-decoration: none;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .nav-link {
+ transition: none
+ }
+}
+
+.nav-link:focus, .nav-link:hover {
+ color: #0a58ca
+}
+
+.nav-link.disabled {
+ color: #6c757d;
+ pointer-events: none;
+ cursor: default
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #dee2e6
+}
+
+.nav-tabs .nav-link {
+ margin-bottom: -1px;
+ background: 0 0;
+ border: 1px solid transparent;
+ border-top-left-radius: .25rem;
+ border-top-right-radius: .25rem
+}
+
+.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {
+ border-color: #e9ecef #e9ecef #dee2e6;
+ isolation: isolate
+}
+
+.nav-tabs .nav-link.disabled {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: transparent
+}
+
+.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {
+ color: #495057;
+ background-color: #fff;
+ border-color: #dee2e6 #dee2e6 #fff
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.nav-pills .nav-link {
+ background: 0 0;
+ border: 0;
+ border-radius: .25rem
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+ color: #fff;
+ background-color: #0d6efd
+}
+
+.nav-fill .nav-item, .nav-fill > .nav-link {
+ flex: 1 1 auto;
+ text-align: center
+}
+
+.nav-justified .nav-item, .nav-justified > .nav-link {
+ flex-basis: 0;
+ flex-grow: 1;
+ text-align: center
+}
+
+.nav-fill .nav-item .nav-link, .nav-justified .nav-item .nav-link {
+ width: 100%
+}
+
+.tab-content > .tab-pane {
+ display: none
+}
+
+.tab-content > .active {
+ display: block
+}
+
+.navbar {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ padding-top: .5rem;
+ padding-bottom: .5rem
+}
+
+.navbar > .container, .navbar > .container-fluid, .navbar > .container-lg, .navbar > .container-md, .navbar > .container-sm, .navbar > .container-xl, .navbar > .container-xxl {
+ display: flex;
+ flex-wrap: inherit;
+ align-items: center;
+ justify-content: space-between
+}
+
+.navbar-brand {
+ padding-top: .3125rem;
+ padding-bottom: .3125rem;
+ margin-right: 1rem;
+ font-size: 1.25rem;
+ text-decoration: none;
+ white-space: nowrap
+}
+
+.navbar-nav {
+ display: flex;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.navbar-nav .nav-link {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.navbar-nav .dropdown-menu {
+ position: static
+}
+
+.navbar-text {
+ padding-top: .5rem;
+ padding-bottom: .5rem
+}
+
+.navbar-collapse {
+ flex-basis: 100%;
+ flex-grow: 1;
+ align-items: center
+}
+
+.navbar-toggler {
+ padding: .25rem .75rem;
+ font-size: 1.25rem;
+ line-height: 1;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: .25rem;
+ transition: box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .navbar-toggler {
+ transition: none
+ }
+}
+
+.navbar-toggler:hover {
+ text-decoration: none
+}
+
+.navbar-toggler:focus {
+ text-decoration: none;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem
+}
+
+.navbar-toggler-icon {
+ display: inline-block;
+ width: 1.5em;
+ height: 1.5em;
+ vertical-align: middle;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 100%
+}
+
+.navbar-nav-scroll {
+ max-height: var(--bs-scroll-height, 75vh);
+ overflow-y: auto
+}
+
+@media (min-width: 576px) {
+ .navbar-expand-sm {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-sm .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-sm .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-sm .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-sm .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-sm .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-sm .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-sm .offcanvas-header {
+ display: none
+ }
+
+ .navbar-expand-sm .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+ }
+
+ .navbar-expand-sm .offcanvas-bottom, .navbar-expand-sm .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+ }
+
+ .navbar-expand-sm .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-expand-md {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-md .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-md .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-md .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-md .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-md .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-md .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-md .offcanvas-header {
+ display: none
+ }
+
+ .navbar-expand-md .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+ }
+
+ .navbar-expand-md .offcanvas-bottom, .navbar-expand-md .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+ }
+
+ .navbar-expand-md .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-expand-lg {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-lg .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-lg .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-lg .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-lg .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-lg .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-lg .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-lg .offcanvas-header {
+ display: none
+ }
+
+ .navbar-expand-lg .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+ }
+
+ .navbar-expand-lg .offcanvas-bottom, .navbar-expand-lg .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+ }
+
+ .navbar-expand-lg .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+ }
+}
+
+@media (min-width: 1200px) {
+ .navbar-expand-xl {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-xl .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-xl .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-xl .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-xl .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-xl .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-xl .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-xl .offcanvas-header {
+ display: none
+ }
+
+ .navbar-expand-xl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+ }
+
+ .navbar-expand-xl .offcanvas-bottom, .navbar-expand-xl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+ }
+
+ .navbar-expand-xl .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+ }
+}
+
+@media (min-width: 1400px) {
+ .navbar-expand-xxl {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-xxl .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-xxl .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-xxl .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-xxl .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-xxl .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-xxl .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-xxl .offcanvas-header {
+ display: none
+ }
+
+ .navbar-expand-xxl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+ }
+
+ .navbar-expand-xxl .offcanvas-bottom, .navbar-expand-xxl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+ }
+
+ .navbar-expand-xxl .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+ }
+}
+
+.navbar-expand {
+ flex-wrap: nowrap;
+ justify-content: flex-start
+}
+
+.navbar-expand .navbar-nav {
+ flex-direction: row
+}
+
+.navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute
+}
+
+.navbar-expand .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+}
+
+.navbar-expand .navbar-nav-scroll {
+ overflow: visible
+}
+
+.navbar-expand .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+}
+
+.navbar-expand .navbar-toggler {
+ display: none
+}
+
+.navbar-expand .offcanvas-header {
+ display: none
+}
+
+.navbar-expand .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ transform: none
+}
+
+.navbar-expand .offcanvas-bottom, .navbar-expand .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0
+}
+
+.navbar-expand .offcanvas-body {
+ display: flex;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible
+}
+
+.navbar-light .navbar-brand {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-light .navbar-nav .nav-link {
+ color: rgba(0, 0, 0, .55)
+}
+
+.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {
+ color: rgba(0, 0, 0, .7)
+}
+
+.navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0, 0, 0, .3)
+}
+
+.navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .show > .nav-link {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-light .navbar-toggler {
+ color: rgba(0, 0, 0, .55);
+ border-color: rgba(0, 0, 0, .1)
+}
+
+.navbar-light .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")
+}
+
+.navbar-light .navbar-text {
+ color: rgba(0, 0, 0, .55)
+}
+
+.navbar-light .navbar-text a, .navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-dark .navbar-brand {
+ color: #fff
+}
+
+.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover {
+ color: #fff
+}
+
+.navbar-dark .navbar-nav .nav-link {
+ color: rgba(255, 255, 255, .55)
+}
+
+.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover {
+ color: rgba(255, 255, 255, .75)
+}
+
+.navbar-dark .navbar-nav .nav-link.disabled {
+ color: rgba(255, 255, 255, .25)
+}
+
+.navbar-dark .navbar-nav .nav-link.active, .navbar-dark .navbar-nav .show > .nav-link {
+ color: #fff
+}
+
+.navbar-dark .navbar-toggler {
+ color: rgba(255, 255, 255, .55);
+ border-color: rgba(255, 255, 255, .1)
+}
+
+.navbar-dark .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")
+}
+
+.navbar-dark .navbar-text {
+ color: rgba(255, 255, 255, .55)
+}
+
+.navbar-dark .navbar-text a, .navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover {
+ color: #fff
+}
+
+.card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: border-box;
+ border: 1px solid rgba(0, 0, 0, .125);
+ border-radius: .25rem
+}
+
+.card > hr {
+ margin-right: 0;
+ margin-left: 0
+}
+
+.card > .list-group {
+ border-top: inherit;
+ border-bottom: inherit
+}
+
+.card > .list-group:first-child {
+ border-top-width: 0;
+ border-top-left-radius: calc(.25rem - 1px);
+ border-top-right-radius: calc(.25rem - 1px)
+}
+
+.card > .list-group:last-child {
+ border-bottom-width: 0;
+ border-bottom-right-radius: calc(.25rem - 1px);
+ border-bottom-left-radius: calc(.25rem - 1px)
+}
+
+.card > .card-header + .list-group, .card > .list-group + .card-footer {
+ border-top: 0
+}
+
+.card-body {
+ flex: 1 1 auto;
+ padding: 1rem 1rem
+}
+
+.card-title {
+ margin-bottom: .5rem
+}
+
+.card-subtitle {
+ margin-top: -.25rem;
+ margin-bottom: 0
+}
+
+.card-text:last-child {
+ margin-bottom: 0
+}
+
+.card-link + .card-link {
+ margin-left: 1rem
+}
+
+.card-header {
+ padding: .5rem 1rem;
+ margin-bottom: 0;
+ background-color: rgba(0, 0, 0, .03);
+ border-bottom: 1px solid rgba(0, 0, 0, .125)
+}
+
+.card-header:first-child {
+ border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0
+}
+
+.card-footer {
+ padding: .5rem 1rem;
+ background-color: rgba(0, 0, 0, .03);
+ border-top: 1px solid rgba(0, 0, 0, .125)
+}
+
+.card-footer:last-child {
+ border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px)
+}
+
+.card-header-tabs {
+ margin-right: -.5rem;
+ margin-bottom: -.5rem;
+ margin-left: -.5rem;
+ border-bottom: 0
+}
+
+.card-header-pills {
+ margin-right: -.5rem;
+ margin-left: -.5rem
+}
+
+.card-img-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1rem;
+ border-radius: calc(.25rem - 1px)
+}
+
+.card-img, .card-img-bottom, .card-img-top {
+ width: 100%
+}
+
+.card-img, .card-img-top {
+ border-top-left-radius: calc(.25rem - 1px);
+ border-top-right-radius: calc(.25rem - 1px)
+}
+
+.card-img, .card-img-bottom {
+ border-bottom-right-radius: calc(.25rem - 1px);
+ border-bottom-left-radius: calc(.25rem - 1px)
+}
+
+.card-group > .card {
+ margin-bottom: .75rem
+}
+
+@media (min-width: 576px) {
+ .card-group {
+ display: flex;
+ flex-flow: row wrap
+ }
+
+ .card-group > .card {
+ flex: 1 0 0%;
+ margin-bottom: 0
+ }
+
+ .card-group > .card + .card {
+ margin-left: 0;
+ border-left: 0
+ }
+
+ .card-group > .card:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+ }
+
+ .card-group > .card:not(:last-child) .card-header, .card-group > .card:not(:last-child) .card-img-top {
+ border-top-right-radius: 0
+ }
+
+ .card-group > .card:not(:last-child) .card-footer, .card-group > .card:not(:last-child) .card-img-bottom {
+ border-bottom-right-radius: 0
+ }
+
+ .card-group > .card:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+ }
+
+ .card-group > .card:not(:first-child) .card-header, .card-group > .card:not(:first-child) .card-img-top {
+ border-top-left-radius: 0
+ }
+
+ .card-group > .card:not(:first-child) .card-footer, .card-group > .card:not(:first-child) .card-img-bottom {
+ border-bottom-left-radius: 0
+ }
+}
+
+.accordion-button {
+ position: relative;
+ display: flex;
+ align-items: center;
+ width: 100%;
+ padding: 1rem 1.25rem;
+ font-size: 1rem;
+ color: #212529;
+ text-align: left;
+ background-color: #fff;
+ border: 0;
+ border-radius: 0;
+ overflow-anchor: none;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .accordion-button {
+ transition: none
+ }
+}
+
+.accordion-button:not(.collapsed) {
+ color: #0c63e4;
+ background-color: #e7f1ff;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .125)
+}
+
+.accordion-button:not(.collapsed)::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ transform: rotate(-180deg)
+}
+
+.accordion-button::after {
+ flex-shrink: 0;
+ width: 1.25rem;
+ height: 1.25rem;
+ margin-left: auto;
+ content: "";
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-size: 1.25rem;
+ transition: transform .2s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .accordion-button::after {
+ transition: none
+ }
+}
+
+.accordion-button:hover {
+ z-index: 2
+}
+
+.accordion-button:focus {
+ z-index: 3;
+ border-color: #86b7fe;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.accordion-header {
+ margin-bottom: 0
+}
+
+.accordion-item {
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, .125)
+}
+
+.accordion-item:first-of-type {
+ border-top-left-radius: .25rem;
+ border-top-right-radius: .25rem
+}
+
+.accordion-item:first-of-type .accordion-button {
+ border-top-left-radius: calc(.25rem - 1px);
+ border-top-right-radius: calc(.25rem - 1px)
+}
+
+.accordion-item:not(:first-of-type) {
+ border-top: 0
+}
+
+.accordion-item:last-of-type {
+ border-bottom-right-radius: .25rem;
+ border-bottom-left-radius: .25rem
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+ border-bottom-right-radius: calc(.25rem - 1px);
+ border-bottom-left-radius: calc(.25rem - 1px)
+}
+
+.accordion-item:last-of-type .accordion-collapse {
+ border-bottom-right-radius: .25rem;
+ border-bottom-left-radius: .25rem
+}
+
+.accordion-body {
+ padding: 1rem 1.25rem
+}
+
+.accordion-flush .accordion-collapse {
+ border-width: 0
+}
+
+.accordion-flush .accordion-item {
+ border-right: 0;
+ border-left: 0;
+ border-radius: 0
+}
+
+.accordion-flush .accordion-item:first-child {
+ border-top: 0
+}
+
+.accordion-flush .accordion-item:last-child {
+ border-bottom: 0
+}
+
+.accordion-flush .accordion-item .accordion-button {
+ border-radius: 0
+}
+
+.breadcrumb {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 0 0;
+ margin-bottom: 1rem;
+ list-style: none
+}
+
+.breadcrumb-item + .breadcrumb-item {
+ padding-left: .5rem
+}
+
+.breadcrumb-item + .breadcrumb-item::before {
+ float: left;
+ padding-right: .5rem;
+ color: #6c757d;
+ content: var(--bs-breadcrumb-divider, "/")
+}
+
+.breadcrumb-item.active {
+ color: #6c757d
+}
+
+.pagination {
+ display: flex;
+ padding-left: 0;
+ list-style: none
+}
+
+.page-link {
+ position: relative;
+ display: block;
+ color: #0d6efd;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #dee2e6;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .page-link {
+ transition: none
+ }
+}
+
+.page-link:hover {
+ z-index: 2;
+ color: #0a58ca;
+ background-color: #e9ecef;
+ border-color: #dee2e6
+}
+
+.page-link:focus {
+ z-index: 3;
+ color: #0a58ca;
+ background-color: #e9ecef;
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25)
+}
+
+.page-item:not(:first-child) .page-link {
+ margin-left: -1px
+}
+
+.page-item.active .page-link {
+ z-index: 3;
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.page-item.disabled .page-link {
+ color: #6c757d;
+ pointer-events: none;
+ background-color: #fff;
+ border-color: #dee2e6
+}
+
+.page-link {
+ padding: .375rem .75rem
+}
+
+.page-item:first-child .page-link {
+ border-top-left-radius: .25rem;
+ border-bottom-left-radius: .25rem
+}
+
+.page-item:last-child .page-link {
+ border-top-right-radius: .25rem;
+ border-bottom-right-radius: .25rem
+}
+
+.pagination-lg .page-link {
+ padding: .75rem 1.5rem;
+ font-size: 1.25rem
+}
+
+.pagination-lg .page-item:first-child .page-link {
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem
+}
+
+.pagination-lg .page-item:last-child .page-link {
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem
+}
+
+.pagination-sm .page-link {
+ padding: .25rem .5rem;
+ font-size: .875rem
+}
+
+.pagination-sm .page-item:first-child .page-link {
+ border-top-left-radius: .2rem;
+ border-bottom-left-radius: .2rem
+}
+
+.pagination-sm .page-item:last-child .page-link {
+ border-top-right-radius: .2rem;
+ border-bottom-right-radius: .2rem
+}
+
+.badge {
+ display: inline-block;
+ padding: .35em .65em;
+ font-size: .75em;
+ font-weight: 700;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25rem
+}
+
+.badge:empty {
+ display: none
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px
+}
+
+.alert {
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent;
+ border-radius: .25rem
+}
+
+.alert-heading {
+ color: inherit
+}
+
+.alert-link {
+ font-weight: 700
+}
+
+.alert-dismissible {
+ padding-right: 3rem
+}
+
+.alert-dismissible .btn-close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ padding: 1.25rem 1rem
+}
+
+.alert-primary {
+ color: #084298;
+ background-color: #cfe2ff;
+ border-color: #b6d4fe
+}
+
+.alert-primary .alert-link {
+ color: #06357a
+}
+
+.alert-secondary {
+ color: #41464b;
+ background-color: #e2e3e5;
+ border-color: #d3d6d8
+}
+
+.alert-secondary .alert-link {
+ color: #34383c
+}
+
+.alert-success {
+ color: #0f5132;
+ background-color: #d1e7dd;
+ border-color: #badbcc
+}
+
+.alert-success .alert-link {
+ color: #0c4128
+}
+
+.alert-info {
+ color: #055160;
+ background-color: #cff4fc;
+ border-color: #b6effb
+}
+
+.alert-info .alert-link {
+ color: #04414d
+}
+
+.alert-warning {
+ color: #664d03;
+ background-color: #fff3cd;
+ border-color: #ffecb5
+}
+
+.alert-warning .alert-link {
+ color: #523e02
+}
+
+.alert-danger {
+ color: #842029;
+ background-color: #f8d7da;
+ border-color: #f5c2c7
+}
+
+.alert-danger .alert-link {
+ color: #6a1a21
+}
+
+.alert-light {
+ color: #636464;
+ background-color: #fefefe;
+ border-color: #fdfdfe
+}
+
+.alert-light .alert-link {
+ color: #4f5050
+}
+
+.alert-dark {
+ color: #141619;
+ background-color: #d3d3d4;
+ border-color: #bcbebf
+}
+
+.alert-dark .alert-link {
+ color: #101214
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ 0% {
+ background-position-x: 1rem
+ }
+}
+
+@keyframes progress-bar-stripes {
+ 0% {
+ background-position-x: 1rem
+ }
+}
+
+.progress {
+ display: flex;
+ height: 1rem;
+ overflow: hidden;
+ font-size: .75rem;
+ background-color: #e9ecef;
+ border-radius: .25rem
+}
+
+.progress-bar {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #0d6efd;
+ transition: width .6s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .progress-bar {
+ transition: none
+ }
+}
+
+.progress-bar-striped {
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 1rem 1rem
+}
+
+.progress-bar-animated {
+ -webkit-animation: 1s linear infinite progress-bar-stripes;
+ animation: 1s linear infinite progress-bar-stripes
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .progress-bar-animated {
+ -webkit-animation: none;
+ animation: none
+ }
+}
+
+.list-group {
+ display: flex;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ border-radius: .25rem
+}
+
+.list-group-numbered {
+ list-style-type: none;
+ counter-reset: section
+}
+
+.list-group-numbered > li::before {
+ content: counters(section, ".") ". ";
+ counter-increment: section
+}
+
+.list-group-item-action {
+ width: 100%;
+ color: #495057;
+ text-align: inherit
+}
+
+.list-group-item-action:focus, .list-group-item-action:hover {
+ z-index: 1;
+ color: #495057;
+ text-decoration: none;
+ background-color: #f8f9fa
+}
+
+.list-group-item-action:active {
+ color: #212529;
+ background-color: #e9ecef
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: .5rem 1rem;
+ color: #212529;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, .125)
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: inherit;
+ border-top-right-radius: inherit
+}
+
+.list-group-item:last-child {
+ border-bottom-right-radius: inherit;
+ border-bottom-left-radius: inherit
+}
+
+.list-group-item.disabled, .list-group-item:disabled {
+ color: #6c757d;
+ pointer-events: none;
+ background-color: #fff
+}
+
+.list-group-item.active {
+ z-index: 2;
+ color: #fff;
+ background-color: #0d6efd;
+ border-color: #0d6efd
+}
+
+.list-group-item + .list-group-item {
+ border-top-width: 0
+}
+
+.list-group-item + .list-group-item.active {
+ margin-top: -1px;
+ border-top-width: 1px
+}
+
+.list-group-horizontal {
+ flex-direction: row
+}
+
+.list-group-horizontal > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+}
+
+.list-group-horizontal > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+}
+
+.list-group-horizontal > .list-group-item.active {
+ margin-top: 0
+}
+
+.list-group-horizontal > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+}
+
+.list-group-horizontal > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+}
+
+@media (min-width: 576px) {
+ .list-group-horizontal-sm {
+ flex-direction: row
+ }
+
+ .list-group-horizontal-sm > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-sm > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-sm > .list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-sm > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+ }
+}
+
+@media (min-width: 768px) {
+ .list-group-horizontal-md {
+ flex-direction: row
+ }
+
+ .list-group-horizontal-md > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-md > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-md > .list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-md > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-md > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+ }
+}
+
+@media (min-width: 992px) {
+ .list-group-horizontal-lg {
+ flex-direction: row
+ }
+
+ .list-group-horizontal-lg > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-lg > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-lg > .list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-lg > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+ }
+}
+
+@media (min-width: 1200px) {
+ .list-group-horizontal-xl {
+ flex-direction: row
+ }
+
+ .list-group-horizontal-xl > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-xl > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-xl > .list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-xl > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+ }
+}
+
+@media (min-width: 1400px) {
+ .list-group-horizontal-xxl {
+ flex-direction: row
+ }
+
+ .list-group-horizontal-xxl > .list-group-item:first-child {
+ border-bottom-left-radius: .25rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-xxl > .list-group-item:last-child {
+ border-top-right-radius: .25rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-xxl > .list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-xxl > .list-group-item + .list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 1px
+ }
+}
+
+.list-group-flush {
+ border-radius: 0
+}
+
+.list-group-flush > .list-group-item {
+ border-width: 0 0 1px
+}
+
+.list-group-flush > .list-group-item:last-child {
+ border-bottom-width: 0
+}
+
+.list-group-item-primary {
+ color: #084298;
+ background-color: #cfe2ff
+}
+
+.list-group-item-primary.list-group-item-action:focus, .list-group-item-primary.list-group-item-action:hover {
+ color: #084298;
+ background-color: #bacbe6
+}
+
+.list-group-item-primary.list-group-item-action.active {
+ color: #fff;
+ background-color: #084298;
+ border-color: #084298
+}
+
+.list-group-item-secondary {
+ color: #41464b;
+ background-color: #e2e3e5
+}
+
+.list-group-item-secondary.list-group-item-action:focus, .list-group-item-secondary.list-group-item-action:hover {
+ color: #41464b;
+ background-color: #cbccce
+}
+
+.list-group-item-secondary.list-group-item-action.active {
+ color: #fff;
+ background-color: #41464b;
+ border-color: #41464b
+}
+
+.list-group-item-success {
+ color: #0f5132;
+ background-color: #d1e7dd
+}
+
+.list-group-item-success.list-group-item-action:focus, .list-group-item-success.list-group-item-action:hover {
+ color: #0f5132;
+ background-color: #bcd0c7
+}
+
+.list-group-item-success.list-group-item-action.active {
+ color: #fff;
+ background-color: #0f5132;
+ border-color: #0f5132
+}
+
+.list-group-item-info {
+ color: #055160;
+ background-color: #cff4fc
+}
+
+.list-group-item-info.list-group-item-action:focus, .list-group-item-info.list-group-item-action:hover {
+ color: #055160;
+ background-color: #badce3
+}
+
+.list-group-item-info.list-group-item-action.active {
+ color: #fff;
+ background-color: #055160;
+ border-color: #055160
+}
+
+.list-group-item-warning {
+ color: #664d03;
+ background-color: #fff3cd
+}
+
+.list-group-item-warning.list-group-item-action:focus, .list-group-item-warning.list-group-item-action:hover {
+ color: #664d03;
+ background-color: #e6dbb9
+}
+
+.list-group-item-warning.list-group-item-action.active {
+ color: #fff;
+ background-color: #664d03;
+ border-color: #664d03
+}
+
+.list-group-item-danger {
+ color: #842029;
+ background-color: #f8d7da
+}
+
+.list-group-item-danger.list-group-item-action:focus, .list-group-item-danger.list-group-item-action:hover {
+ color: #842029;
+ background-color: #dfc2c4
+}
+
+.list-group-item-danger.list-group-item-action.active {
+ color: #fff;
+ background-color: #842029;
+ border-color: #842029
+}
+
+.list-group-item-light {
+ color: #636464;
+ background-color: #fefefe
+}
+
+.list-group-item-light.list-group-item-action:focus, .list-group-item-light.list-group-item-action:hover {
+ color: #636464;
+ background-color: #e5e5e5
+}
+
+.list-group-item-light.list-group-item-action.active {
+ color: #fff;
+ background-color: #636464;
+ border-color: #636464
+}
+
+.list-group-item-dark {
+ color: #141619;
+ background-color: #d3d3d4
+}
+
+.list-group-item-dark.list-group-item-action:focus, .list-group-item-dark.list-group-item-action:hover {
+ color: #141619;
+ background-color: #bebebf
+}
+
+.list-group-item-dark.list-group-item-action.active {
+ color: #fff;
+ background-color: #141619;
+ border-color: #141619
+}
+
+.btn-close {
+ box-sizing: content-box;
+ width: 1em;
+ height: 1em;
+ padding: .25em .25em;
+ color: #000;
+ background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
+ border: 0;
+ border-radius: .25rem;
+ opacity: .5
+}
+
+.btn-close:hover {
+ color: #000;
+ text-decoration: none;
+ opacity: .75
+}
+
+.btn-close:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
+ opacity: 1
+}
+
+.btn-close.disabled, .btn-close:disabled {
+ pointer-events: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ opacity: .25
+}
+
+.btn-close-white {
+ filter: invert(1) grayscale(100%) brightness(200%)
+}
+
+.toast {
+ width: 350px;
+ max-width: 100%;
+ font-size: .875rem;
+ pointer-events: auto;
+ background-color: rgba(255, 255, 255, .85);
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .1);
+ box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);
+ border-radius: .25rem
+}
+
+.toast.showing {
+ opacity: 0
+}
+
+.toast:not(.show) {
+ display: none
+}
+
+.toast-container {
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: max-content;
+ max-width: 100%;
+ pointer-events: none
+}
+
+.toast-container > :not(:last-child) {
+ margin-bottom: .75rem
+}
+
+.toast-header {
+ display: flex;
+ align-items: center;
+ padding: .5rem .75rem;
+ color: #6c757d;
+ background-color: rgba(255, 255, 255, .85);
+ background-clip: padding-box;
+ border-bottom: 1px solid rgba(0, 0, 0, .05);
+ border-top-left-radius: calc(.25rem - 1px);
+ border-top-right-radius: calc(.25rem - 1px)
+}
+
+.toast-header .btn-close {
+ margin-right: -.375rem;
+ margin-left: .75rem
+}
+
+.toast-body {
+ padding: .75rem;
+ word-wrap: break-word
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1055;
+ display: none;
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ outline: 0
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: .5rem;
+ pointer-events: none
+}
+
+.modal.fade .modal-dialog {
+ transition: transform .3s ease-out;
+ transform: translate(0, -50px)
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .modal.fade .modal-dialog {
+ transition: none
+ }
+}
+
+.modal.show .modal-dialog {
+ transform: none
+}
+
+.modal.modal-static .modal-dialog {
+ transform: scale(1.02)
+}
+
+.modal-dialog-scrollable {
+ height: calc(100% - 1rem)
+}
+
+.modal-dialog-scrollable .modal-content {
+ max-height: 100%;
+ overflow: hidden
+}
+
+.modal-dialog-scrollable .modal-body {
+ overflow-y: auto
+}
+
+.modal-dialog-centered {
+ display: flex;
+ align-items: center;
+ min-height: calc(100% - 1rem)
+}
+
+.modal-content {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ pointer-events: auto;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: .3rem;
+ outline: 0
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1050;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0
+}
+
+.modal-backdrop.show {
+ opacity: .5
+}
+
+.modal-header {
+ display: flex;
+ flex-shrink: 0;
+ align-items: center;
+ justify-content: space-between;
+ padding: 1rem 1rem;
+ border-bottom: 1px solid #dee2e6;
+ border-top-left-radius: calc(.3rem - 1px);
+ border-top-right-radius: calc(.3rem - 1px)
+}
+
+.modal-header .btn-close {
+ padding: .5rem .5rem;
+ margin: -.5rem -.5rem -.5rem auto
+}
+
+.modal-title {
+ margin-bottom: 0;
+ line-height: 1.5
+}
+
+.modal-body {
+ position: relative;
+ flex: 1 1 auto;
+ padding: 1rem
+}
+
+.modal-footer {
+ display: flex;
+ flex-wrap: wrap;
+ flex-shrink: 0;
+ align-items: center;
+ justify-content: flex-end;
+ padding: .75rem;
+ border-top: 1px solid #dee2e6;
+ border-bottom-right-radius: calc(.3rem - 1px);
+ border-bottom-left-radius: calc(.3rem - 1px)
+}
+
+.modal-footer > * {
+ margin: .25rem
+}
+
+@media (min-width: 576px) {
+ .modal-dialog {
+ max-width: 500px;
+ margin: 1.75rem auto
+ }
+
+ .modal-dialog-scrollable {
+ height: calc(100% - 3.5rem)
+ }
+
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem)
+ }
+
+ .modal-sm {
+ max-width: 300px
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg, .modal-xl {
+ max-width: 800px
+ }
+}
+
+@media (min-width: 1200px) {
+ .modal-xl {
+ max-width: 1140px
+ }
+}
+
+.modal-fullscreen {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+}
+
+.modal-fullscreen .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+}
+
+.modal-fullscreen .modal-header {
+ border-radius: 0
+}
+
+.modal-fullscreen .modal-body {
+ overflow-y: auto
+}
+
+.modal-fullscreen .modal-footer {
+ border-radius: 0
+}
+
+@media (max-width: 575.98px) {
+ .modal-fullscreen-sm-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+ }
+
+ .modal-fullscreen-sm-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+ }
+
+ .modal-fullscreen-sm-down .modal-header {
+ border-radius: 0
+ }
+
+ .modal-fullscreen-sm-down .modal-body {
+ overflow-y: auto
+ }
+
+ .modal-fullscreen-sm-down .modal-footer {
+ border-radius: 0
+ }
+}
+
+@media (max-width: 767.98px) {
+ .modal-fullscreen-md-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+ }
+
+ .modal-fullscreen-md-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+ }
+
+ .modal-fullscreen-md-down .modal-header {
+ border-radius: 0
+ }
+
+ .modal-fullscreen-md-down .modal-body {
+ overflow-y: auto
+ }
+
+ .modal-fullscreen-md-down .modal-footer {
+ border-radius: 0
+ }
+}
+
+@media (max-width: 991.98px) {
+ .modal-fullscreen-lg-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+ }
+
+ .modal-fullscreen-lg-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+ }
+
+ .modal-fullscreen-lg-down .modal-header {
+ border-radius: 0
+ }
+
+ .modal-fullscreen-lg-down .modal-body {
+ overflow-y: auto
+ }
+
+ .modal-fullscreen-lg-down .modal-footer {
+ border-radius: 0
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .modal-fullscreen-xl-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+ }
+
+ .modal-fullscreen-xl-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+ }
+
+ .modal-fullscreen-xl-down .modal-header {
+ border-radius: 0
+ }
+
+ .modal-fullscreen-xl-down .modal-body {
+ overflow-y: auto
+ }
+
+ .modal-fullscreen-xl-down .modal-footer {
+ border-radius: 0
+ }
+}
+
+@media (max-width: 1399.98px) {
+ .modal-fullscreen-xxl-down {
+ width: 100vw;
+ max-width: none;
+ height: 100%;
+ margin: 0
+ }
+
+ .modal-fullscreen-xxl-down .modal-content {
+ height: 100%;
+ border: 0;
+ border-radius: 0
+ }
+
+ .modal-fullscreen-xxl-down .modal-header {
+ border-radius: 0
+ }
+
+ .modal-fullscreen-xxl-down .modal-body {
+ overflow-y: auto
+ }
+
+ .modal-fullscreen-xxl-down .modal-footer {
+ border-radius: 0
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1080;
+ display: block;
+ margin: 0;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ opacity: 0
+}
+
+.tooltip.show {
+ opacity: .9
+}
+
+.tooltip .tooltip-arrow {
+ position: absolute;
+ display: block;
+ width: .8rem;
+ height: .4rem
+}
+
+.tooltip .tooltip-arrow::before {
+ position: absolute;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-tooltip-auto[data-popper-placement^=top], .bs-tooltip-top {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow, .bs-tooltip-top .tooltip-arrow {
+ bottom: 0
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before, .bs-tooltip-top .tooltip-arrow::before {
+ top: -1px;
+ border-width: .4rem .4rem 0;
+ border-top-color: #000
+}
+
+.bs-tooltip-auto[data-popper-placement^=right], .bs-tooltip-end {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow, .bs-tooltip-end .tooltip-arrow {
+ left: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before, .bs-tooltip-end .tooltip-arrow::before {
+ right: -1px;
+ border-width: .4rem .4rem .4rem 0;
+ border-right-color: #000
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom], .bs-tooltip-bottom {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow, .bs-tooltip-bottom .tooltip-arrow {
+ top: 0
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before, .bs-tooltip-bottom .tooltip-arrow::before {
+ bottom: -1px;
+ border-width: 0 .4rem .4rem;
+ border-bottom-color: #000
+}
+
+.bs-tooltip-auto[data-popper-placement^=left], .bs-tooltip-start {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow, .bs-tooltip-start .tooltip-arrow {
+ right: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before, .bs-tooltip-start .tooltip-arrow::before {
+ left: -1px;
+ border-width: .4rem 0 .4rem .4rem;
+ border-left-color: #000
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: .25rem .5rem;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: .25rem
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1070;
+ display: block;
+ max-width: 276px;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: .3rem
+}
+
+.popover .popover-arrow {
+ position: absolute;
+ display: block;
+ width: 1rem;
+ height: .5rem
+}
+
+.popover .popover-arrow::after, .popover .popover-arrow::before {
+ position: absolute;
+ display: block;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow, .bs-popover-top > .popover-arrow {
+ bottom: calc(-.5rem - 1px)
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::before {
+ bottom: 0;
+ border-width: .5rem .5rem 0;
+ border-top-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after, .bs-popover-top > .popover-arrow::after {
+ bottom: 1px;
+ border-width: .5rem .5rem 0;
+ border-top-color: #fff
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow, .bs-popover-end > .popover-arrow {
+ left: calc(-.5rem - 1px);
+ width: .5rem;
+ height: 1rem
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::before {
+ left: 0;
+ border-width: .5rem .5rem .5rem 0;
+ border-right-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after, .bs-popover-end > .popover-arrow::after {
+ left: 1px;
+ border-width: .5rem .5rem .5rem 0;
+ border-right-color: #fff
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow, .bs-popover-bottom > .popover-arrow {
+ top: calc(-.5rem - 1px)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::before {
+ top: 0;
+ border-width: 0 .5rem .5rem .5rem;
+ border-bottom-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after, .bs-popover-bottom > .popover-arrow::after {
+ top: 1px;
+ border-width: 0 .5rem .5rem .5rem;
+ border-bottom-color: #fff
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before, .bs-popover-bottom .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -.5rem;
+ content: "";
+ border-bottom: 1px solid #f0f0f0
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow, .bs-popover-start > .popover-arrow {
+ right: calc(-.5rem - 1px);
+ width: .5rem;
+ height: 1rem
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::before {
+ right: 0;
+ border-width: .5rem 0 .5rem .5rem;
+ border-left-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after, .bs-popover-start > .popover-arrow::after {
+ right: 1px;
+ border-width: .5rem 0 .5rem .5rem;
+ border-left-color: #fff
+}
+
+.popover-header {
+ padding: .5rem 1rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ background-color: #f0f0f0;
+ border-bottom: 1px solid rgba(0, 0, 0, .2);
+ border-top-left-radius: calc(.3rem - 1px);
+ border-top-right-radius: calc(.3rem - 1px)
+}
+
+.popover-header:empty {
+ display: none
+}
+
+.popover-body {
+ padding: 1rem 1rem;
+ color: #212529
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel.pointer-event {
+ touch-action: pan-y
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden
+}
+
+.carousel-inner::after {
+ display: block;
+ clear: both;
+ content: ""
+}
+
+.carousel-item {
+ position: relative;
+ display: none;
+ float: left;
+ width: 100%;
+ margin-right: -100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ transition: transform .6s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .carousel-item {
+ transition: none
+ }
+}
+
+.carousel-item-next, .carousel-item-prev, .carousel-item.active {
+ display: block
+}
+
+.active.carousel-item-end, .carousel-item-next:not(.carousel-item-start) {
+ transform: translateX(100%)
+}
+
+.active.carousel-item-start, .carousel-item-prev:not(.carousel-item-end) {
+ transform: translateX(-100%)
+}
+
+.carousel-fade .carousel-item {
+ opacity: 0;
+ transition-property: opacity;
+ transform: none
+}
+
+.carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end, .carousel-fade .carousel-item.active {
+ z-index: 1;
+ opacity: 1
+}
+
+.carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s .6s
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start {
+ transition: none
+ }
+}
+
+.carousel-control-next, .carousel-control-prev {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 15%;
+ padding: 0;
+ color: #fff;
+ text-align: center;
+ background: 0 0;
+ border: 0;
+ opacity: .5;
+ transition: opacity .15s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .carousel-control-next, .carousel-control-prev {
+ transition: none
+ }
+}
+
+.carousel-control-next:focus, .carousel-control-next:hover, .carousel-control-prev:focus, .carousel-control-prev:hover {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ opacity: .9
+}
+
+.carousel-control-prev {
+ left: 0
+}
+
+.carousel-control-next {
+ right: 0
+}
+
+.carousel-control-next-icon, .carousel-control-prev-icon {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ background-repeat: no-repeat;
+ background-position: 50%;
+ background-size: 100% 100%
+}
+
+.carousel-control-prev-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")
+}
+
+.carousel-control-next-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")
+}
+
+.carousel-indicators {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 2;
+ display: flex;
+ justify-content: center;
+ padding: 0;
+ margin-right: 15%;
+ margin-bottom: 1rem;
+ margin-left: 15%;
+ list-style: none
+}
+
+.carousel-indicators [data-bs-target] {
+ box-sizing: content-box;
+ flex: 0 1 auto;
+ width: 30px;
+ height: 3px;
+ padding: 0;
+ margin-right: 3px;
+ margin-left: 3px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 0;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ opacity: .5;
+ transition: opacity .6s ease
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .carousel-indicators [data-bs-target] {
+ transition: none
+ }
+}
+
+.carousel-indicators .active {
+ opacity: 1
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 1.25rem;
+ left: 15%;
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem;
+ color: #fff;
+ text-align: center
+}
+
+.carousel-dark .carousel-control-next-icon, .carousel-dark .carousel-control-prev-icon {
+ filter: invert(1) grayscale(100)
+}
+
+.carousel-dark .carousel-indicators [data-bs-target] {
+ background-color: #000
+}
+
+.carousel-dark .carousel-caption {
+ color: #000
+}
+
+@-webkit-keyframes spinner-border {
+ to {
+ transform: rotate(360deg)
+ }
+}
+
+@keyframes spinner-border {
+ to {
+ transform: rotate(360deg)
+ }
+}
+
+.spinner-border {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: -.125em;
+ border: .25em solid currentColor;
+ border-right-color: transparent;
+ border-radius: 50%;
+ -webkit-animation: .75s linear infinite spinner-border;
+ animation: .75s linear infinite spinner-border
+}
+
+.spinner-border-sm {
+ width: 1rem;
+ height: 1rem;
+ border-width: .2em
+}
+
+@-webkit-keyframes spinner-grow {
+ 0% {
+ transform: scale(0)
+ }
+ 50% {
+ opacity: 1;
+ transform: none
+ }
+}
+
+@keyframes spinner-grow {
+ 0% {
+ transform: scale(0)
+ }
+ 50% {
+ opacity: 1;
+ transform: none
+ }
+}
+
+.spinner-grow {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: -.125em;
+ background-color: currentColor;
+ border-radius: 50%;
+ opacity: 0;
+ -webkit-animation: .75s linear infinite spinner-grow;
+ animation: .75s linear infinite spinner-grow
+}
+
+.spinner-grow-sm {
+ width: 1rem;
+ height: 1rem
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .spinner-border, .spinner-grow {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s
+ }
+}
+
+.offcanvas {
+ position: fixed;
+ bottom: 0;
+ z-index: 1045;
+ display: flex;
+ flex-direction: column;
+ max-width: 100%;
+ visibility: hidden;
+ background-color: #fff;
+ background-clip: padding-box;
+ outline: 0;
+ transition: transform .3s ease-in-out
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .offcanvas {
+ transition: none
+ }
+}
+
+.offcanvas-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1040;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000
+}
+
+.offcanvas-backdrop.fade {
+ opacity: 0
+}
+
+.offcanvas-backdrop.show {
+ opacity: .5
+}
+
+.offcanvas-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 1rem 1rem
+}
+
+.offcanvas-header .btn-close {
+ padding: .5rem .5rem;
+ margin-top: -.5rem;
+ margin-right: -.5rem;
+ margin-bottom: -.5rem
+}
+
+.offcanvas-title {
+ margin-bottom: 0;
+ line-height: 1.5
+}
+
+.offcanvas-body {
+ flex-grow: 1;
+ padding: 1rem 1rem;
+ overflow-y: auto
+}
+
+.offcanvas-start {
+ top: 0;
+ left: 0;
+ width: 400px;
+ border-right: 1px solid rgba(0, 0, 0, .2);
+ transform: translateX(-100%)
+}
+
+.offcanvas-end {
+ top: 0;
+ right: 0;
+ width: 400px;
+ border-left: 1px solid rgba(0, 0, 0, .2);
+ transform: translateX(100%)
+}
+
+.offcanvas-top {
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 30vh;
+ max-height: 100%;
+ border-bottom: 1px solid rgba(0, 0, 0, .2);
+ transform: translateY(-100%)
+}
+
+.offcanvas-bottom {
+ right: 0;
+ left: 0;
+ height: 30vh;
+ max-height: 100%;
+ border-top: 1px solid rgba(0, 0, 0, .2);
+ transform: translateY(100%)
+}
+
+.offcanvas.show {
+ transform: none
+}
+
+.placeholder {
+ display: inline-block;
+ min-height: 1em;
+ vertical-align: middle;
+ cursor: wait;
+ background-color: currentColor;
+ opacity: .5
+}
+
+.placeholder.btn::before {
+ display: inline-block;
+ content: ""
+}
+
+.placeholder-xs {
+ min-height: .6em
+}
+
+.placeholder-sm {
+ min-height: .8em
+}
+
+.placeholder-lg {
+ min-height: 1.2em
+}
+
+.placeholder-glow .placeholder {
+ -webkit-animation: placeholder-glow 2s ease-in-out infinite;
+ animation: placeholder-glow 2s ease-in-out infinite
+}
+
+@-webkit-keyframes placeholder-glow {
+ 50% {
+ opacity: .2
+ }
+}
+
+@keyframes placeholder-glow {
+ 50% {
+ opacity: .2
+ }
+}
+
+.placeholder-wave {
+ -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+ mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+ -webkit-mask-size: 200% 100%;
+ mask-size: 200% 100%;
+ -webkit-animation: placeholder-wave 2s linear infinite;
+ animation: placeholder-wave 2s linear infinite
+}
+
+@-webkit-keyframes placeholder-wave {
+ 100% {
+ -webkit-mask-position: -200% 0%;
+ mask-position: -200% 0%
+ }
+}
+
+@keyframes placeholder-wave {
+ 100% {
+ -webkit-mask-position: -200% 0%;
+ mask-position: -200% 0%
+ }
+}
+
+.clearfix::after {
+ display: block;
+ clear: both;
+ content: ""
+}
+
+.link-primary {
+ color: #0d6efd
+}
+
+.link-primary:focus, .link-primary:hover {
+ color: #0a58ca
+}
+
+.link-secondary {
+ color: #6c757d
+}
+
+.link-secondary:focus, .link-secondary:hover {
+ color: #565e64
+}
+
+.link-success {
+ color: #198754
+}
+
+.link-success:focus, .link-success:hover {
+ color: #146c43
+}
+
+.link-info {
+ color: #0dcaf0
+}
+
+.link-info:focus, .link-info:hover {
+ color: #3dd5f3
+}
+
+.link-warning {
+ color: #ffc107
+}
+
+.link-warning:focus, .link-warning:hover {
+ color: #ffcd39
+}
+
+.link-danger {
+ color: #dc3545
+}
+
+.link-danger:focus, .link-danger:hover {
+ color: #b02a37
+}
+
+.link-light {
+ color: #f8f9fa
+}
+
+.link-light:focus, .link-light:hover {
+ color: #f9fafb
+}
+
+.link-dark {
+ color: #212529
+}
+
+.link-dark:focus, .link-dark:hover {
+ color: #1a1e21
+}
+
+.ratio {
+ position: relative;
+ width: 100%
+}
+
+.ratio::before {
+ display: block;
+ padding-top: var(--bs-aspect-ratio);
+ content: ""
+}
+
+.ratio > * {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%
+}
+
+.ratio-1x1 {
+ --bs-aspect-ratio: 100%
+}
+
+.ratio-4x3 {
+ --bs-aspect-ratio: 75%
+}
+
+.ratio-16x9 {
+ --bs-aspect-ratio: 56.25%
+}
+
+.ratio-21x9 {
+ --bs-aspect-ratio: 42.8571428571%
+}
+
+.fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1030
+}
+
+.fixed-bottom {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1030
+}
+
+.sticky-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+}
+
+@media (min-width: 576px) {
+ .sticky-sm-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+@media (min-width: 768px) {
+ .sticky-md-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+@media (min-width: 992px) {
+ .sticky-lg-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+@media (min-width: 1200px) {
+ .sticky-xl-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+@media (min-width: 1400px) {
+ .sticky-xxl-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+.hstack {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-self: stretch
+}
+
+.vstack {
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: column;
+ align-self: stretch
+}
+
+.visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) {
+ position: absolute !important;
+ width: 1px !important;
+ height: 1px !important;
+ padding: 0 !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ clip: rect(0, 0, 0, 0) !important;
+ white-space: nowrap !important;
+ border: 0 !important
+}
+
+.stretched-link::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ content: ""
+}
+
+.text-truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.vr {
+ display: inline-block;
+ align-self: stretch;
+ width: 1px;
+ min-height: 1em;
+ background-color: currentColor;
+ opacity: .25
+}
+
+.align-baseline {
+ vertical-align: baseline !important
+}
+
+.align-top {
+ vertical-align: top !important
+}
+
+.align-middle {
+ vertical-align: middle !important
+}
+
+.align-bottom {
+ vertical-align: bottom !important
+}
+
+.align-text-bottom {
+ vertical-align: text-bottom !important
+}
+
+.align-text-top {
+ vertical-align: text-top !important
+}
+
+.float-start {
+ float: left !important
+}
+
+.float-end {
+ float: right !important
+}
+
+.float-none {
+ float: none !important
+}
+
+.opacity-0 {
+ opacity: 0 !important
+}
+
+.opacity-25 {
+ opacity: .25 !important
+}
+
+.opacity-50 {
+ opacity: .5 !important
+}
+
+.opacity-75 {
+ opacity: .75 !important
+}
+
+.opacity-100 {
+ opacity: 1 !important
+}
+
+.overflow-auto {
+ overflow: auto !important
+}
+
+.overflow-hidden {
+ overflow: hidden !important
+}
+
+.overflow-visible {
+ overflow: visible !important
+}
+
+.overflow-scroll {
+ overflow: scroll !important
+}
+
+.d-inline {
+ display: inline !important
+}
+
+.d-inline-block {
+ display: inline-block !important
+}
+
+.d-block {
+ display: block !important
+}
+
+.d-grid {
+ display: grid !important
+}
+
+.d-table {
+ display: table !important
+}
+
+.d-table-row {
+ display: table-row !important
+}
+
+.d-table-cell {
+ display: table-cell !important
+}
+
+.d-flex {
+ display: flex !important
+}
+
+.d-inline-flex {
+ display: inline-flex !important
+}
+
+.d-none {
+ display: none !important
+}
+
+.shadow {
+ box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important
+}
+
+.shadow-sm {
+ box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important
+}
+
+.shadow-lg {
+ box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important
+}
+
+.shadow-none {
+ box-shadow: none !important
+}
+
+.position-static {
+ position: static !important
+}
+
+.position-relative {
+ position: relative !important
+}
+
+.position-absolute {
+ position: absolute !important
+}
+
+.position-fixed {
+ position: fixed !important
+}
+
+.position-sticky {
+ position: -webkit-sticky !important;
+ position: sticky !important
+}
+
+.top-0 {
+ top: 0 !important
+}
+
+.top-50 {
+ top: 50% !important
+}
+
+.top-100 {
+ top: 100% !important
+}
+
+.bottom-0 {
+ bottom: 0 !important
+}
+
+.bottom-50 {
+ bottom: 50% !important
+}
+
+.bottom-100 {
+ bottom: 100% !important
+}
+
+.start-0 {
+ left: 0 !important
+}
+
+.start-50 {
+ left: 50% !important
+}
+
+.start-100 {
+ left: 100% !important
+}
+
+.end-0 {
+ right: 0 !important
+}
+
+.end-50 {
+ right: 50% !important
+}
+
+.end-100 {
+ right: 100% !important
+}
+
+.translate-middle {
+ transform: translate(-50%, -50%) !important
+}
+
+.translate-middle-x {
+ transform: translateX(-50%) !important
+}
+
+.translate-middle-y {
+ transform: translateY(-50%) !important
+}
+
+.border {
+ border: 1px solid #dee2e6 !important
+}
+
+.border-0 {
+ border: 0 !important
+}
+
+.border-top {
+ border-top: 1px solid #dee2e6 !important
+}
+
+.border-top-0 {
+ border-top: 0 !important
+}
+
+.border-end {
+ border-right: 1px solid #dee2e6 !important
+}
+
+.border-end-0 {
+ border-right: 0 !important
+}
+
+.border-bottom {
+ border-bottom: 1px solid #dee2e6 !important
+}
+
+.border-bottom-0 {
+ border-bottom: 0 !important
+}
+
+.border-start {
+ border-left: 1px solid #dee2e6 !important
+}
+
+.border-start-0 {
+ border-left: 0 !important
+}
+
+.border-primary {
+ border-color: #0d6efd !important
+}
+
+.border-secondary {
+ border-color: #6c757d !important
+}
+
+.border-success {
+ border-color: #198754 !important
+}
+
+.border-info {
+ border-color: #0dcaf0 !important
+}
+
+.border-warning {
+ border-color: #ffc107 !important
+}
+
+.border-danger {
+ border-color: #dc3545 !important
+}
+
+.border-light {
+ border-color: #f8f9fa !important
+}
+
+.border-dark {
+ border-color: #212529 !important
+}
+
+.border-white {
+ border-color: #fff !important
+}
+
+.border-1 {
+ border-width: 1px !important
+}
+
+.border-2 {
+ border-width: 2px !important
+}
+
+.border-3 {
+ border-width: 3px !important
+}
+
+.border-4 {
+ border-width: 4px !important
+}
+
+.border-5 {
+ border-width: 5px !important
+}
+
+.w-25 {
+ width: 25% !important
+}
+
+.w-50 {
+ width: 50% !important
+}
+
+.w-75 {
+ width: 75% !important
+}
+
+.w-100 {
+ width: 100% !important
+}
+
+.w-auto {
+ width: auto !important
+}
+
+.mw-100 {
+ max-width: 100% !important
+}
+
+.vw-100 {
+ width: 100vw !important
+}
+
+.min-vw-100 {
+ min-width: 100vw !important
+}
+
+.h-25 {
+ height: 25% !important
+}
+
+.h-50 {
+ height: 50% !important
+}
+
+.h-75 {
+ height: 75% !important
+}
+
+.h-100 {
+ height: 100% !important
+}
+
+.h-auto {
+ height: auto !important
+}
+
+.mh-100 {
+ max-height: 100% !important
+}
+
+.vh-100 {
+ height: 100vh !important
+}
+
+.min-vh-100 {
+ min-height: 100vh !important
+}
+
+.flex-fill {
+ flex: 1 1 auto !important
+}
+
+.flex-row {
+ flex-direction: row !important
+}
+
+.flex-column {
+ flex-direction: column !important
+}
+
+.flex-row-reverse {
+ flex-direction: row-reverse !important
+}
+
+.flex-column-reverse {
+ flex-direction: column-reverse !important
+}
+
+.flex-grow-0 {
+ flex-grow: 0 !important
+}
+
+.flex-grow-1 {
+ flex-grow: 1 !important
+}
+
+.flex-shrink-0 {
+ flex-shrink: 0 !important
+}
+
+.flex-shrink-1 {
+ flex-shrink: 1 !important
+}
+
+.flex-wrap {
+ flex-wrap: wrap !important
+}
+
+.flex-nowrap {
+ flex-wrap: nowrap !important
+}
+
+.flex-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+}
+
+.gap-0 {
+ gap: 0 !important
+}
+
+.gap-1 {
+ gap: .25rem !important
+}
+
+.gap-2 {
+ gap: .5rem !important
+}
+
+.gap-3 {
+ gap: 1rem !important
+}
+
+.gap-4 {
+ gap: 1.5rem !important
+}
+
+.gap-5 {
+ gap: 3rem !important
+}
+
+.justify-content-start {
+ justify-content: flex-start !important
+}
+
+.justify-content-end {
+ justify-content: flex-end !important
+}
+
+.justify-content-center {
+ justify-content: center !important
+}
+
+.justify-content-between {
+ justify-content: space-between !important
+}
+
+.justify-content-around {
+ justify-content: space-around !important
+}
+
+.justify-content-evenly {
+ justify-content: space-evenly !important
+}
+
+.align-items-start {
+ align-items: flex-start !important
+}
+
+.align-items-end {
+ align-items: flex-end !important
+}
+
+.align-items-center {
+ align-items: center !important
+}
+
+.align-items-baseline {
+ align-items: baseline !important
+}
+
+.align-items-stretch {
+ align-items: stretch !important
+}
+
+.align-content-start {
+ align-content: flex-start !important
+}
+
+.align-content-end {
+ align-content: flex-end !important
+}
+
+.align-content-center {
+ align-content: center !important
+}
+
+.align-content-between {
+ align-content: space-between !important
+}
+
+.align-content-around {
+ align-content: space-around !important
+}
+
+.align-content-stretch {
+ align-content: stretch !important
+}
+
+.align-self-auto {
+ align-self: auto !important
+}
+
+.align-self-start {
+ align-self: flex-start !important
+}
+
+.align-self-end {
+ align-self: flex-end !important
+}
+
+.align-self-center {
+ align-self: center !important
+}
+
+.align-self-baseline {
+ align-self: baseline !important
+}
+
+.align-self-stretch {
+ align-self: stretch !important
+}
+
+.order-first {
+ order: -1 !important
+}
+
+.order-0 {
+ order: 0 !important
+}
+
+.order-1 {
+ order: 1 !important
+}
+
+.order-2 {
+ order: 2 !important
+}
+
+.order-3 {
+ order: 3 !important
+}
+
+.order-4 {
+ order: 4 !important
+}
+
+.order-5 {
+ order: 5 !important
+}
+
+.order-last {
+ order: 6 !important
+}
+
+.m-0 {
+ margin: 0 !important
+}
+
+.m-1 {
+ margin: .25rem !important
+}
+
+.m-2 {
+ margin: .5rem !important
+}
+
+.m-3 {
+ margin: 1rem !important
+}
+
+.m-4 {
+ margin: 1.5rem !important
+}
+
+.m-5 {
+ margin: 3rem !important
+}
+
+.m-auto {
+ margin: auto !important
+}
+
+.mx-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+}
+
+.mx-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+}
+
+.mx-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+}
+
+.mx-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+}
+
+.mx-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+}
+
+.mx-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+}
+
+.mx-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+}
+
+.my-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+}
+
+.my-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+}
+
+.my-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+}
+
+.my-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+}
+
+.my-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+}
+
+.my-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+}
+
+.my-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+}
+
+.mt-0 {
+ margin-top: 0 !important
+}
+
+.mt-1 {
+ margin-top: .25rem !important
+}
+
+.mt-2 {
+ margin-top: .5rem !important
+}
+
+.mt-3 {
+ margin-top: 1rem !important
+}
+
+.mt-4 {
+ margin-top: 1.5rem !important
+}
+
+.mt-5 {
+ margin-top: 3rem !important
+}
+
+.mt-auto {
+ margin-top: auto !important
+}
+
+.me-0 {
+ margin-right: 0 !important
+}
+
+.me-1 {
+ margin-right: .25rem !important
+}
+
+.me-2 {
+ margin-right: .5rem !important
+}
+
+.me-3 {
+ margin-right: 1rem !important
+}
+
+.me-4 {
+ margin-right: 1.5rem !important
+}
+
+.me-5 {
+ margin-right: 3rem !important
+}
+
+.me-auto {
+ margin-right: auto !important
+}
+
+.mb-0 {
+ margin-bottom: 0 !important
+}
+
+.mb-1 {
+ margin-bottom: .25rem !important
+}
+
+.mb-2 {
+ margin-bottom: .5rem !important
+}
+
+.mb-3 {
+ margin-bottom: 1rem !important
+}
+
+.mb-4 {
+ margin-bottom: 1.5rem !important
+}
+
+.mb-5 {
+ margin-bottom: 3rem !important
+}
+
+.mb-auto {
+ margin-bottom: auto !important
+}
+
+.ms-0 {
+ margin-left: 0 !important
+}
+
+.ms-1 {
+ margin-left: .25rem !important
+}
+
+.ms-2 {
+ margin-left: .5rem !important
+}
+
+.ms-3 {
+ margin-left: 1rem !important
+}
+
+.ms-4 {
+ margin-left: 1.5rem !important
+}
+
+.ms-5 {
+ margin-left: 3rem !important
+}
+
+.ms-auto {
+ margin-left: auto !important
+}
+
+.p-0 {
+ padding: 0 !important
+}
+
+.p-1 {
+ padding: .25rem !important
+}
+
+.p-2 {
+ padding: .5rem !important
+}
+
+.p-3 {
+ padding: 1rem !important
+}
+
+.p-4 {
+ padding: 1.5rem !important
+}
+
+.p-5 {
+ padding: 3rem !important
+}
+
+.px-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+}
+
+.px-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+}
+
+.px-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+}
+
+.px-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+}
+
+.px-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+}
+
+.px-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+}
+
+.py-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+}
+
+.py-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+}
+
+.py-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+}
+
+.py-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+}
+
+.py-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+}
+
+.py-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+}
+
+.pt-0 {
+ padding-top: 0 !important
+}
+
+.pt-1 {
+ padding-top: .25rem !important
+}
+
+.pt-2 {
+ padding-top: .5rem !important
+}
+
+.pt-3 {
+ padding-top: 1rem !important
+}
+
+.pt-4 {
+ padding-top: 1.5rem !important
+}
+
+.pt-5 {
+ padding-top: 3rem !important
+}
+
+.pe-0 {
+ padding-right: 0 !important
+}
+
+.pe-1 {
+ padding-right: .25rem !important
+}
+
+.pe-2 {
+ padding-right: .5rem !important
+}
+
+.pe-3 {
+ padding-right: 1rem !important
+}
+
+.pe-4 {
+ padding-right: 1.5rem !important
+}
+
+.pe-5 {
+ padding-right: 3rem !important
+}
+
+.pb-0 {
+ padding-bottom: 0 !important
+}
+
+.pb-1 {
+ padding-bottom: .25rem !important
+}
+
+.pb-2 {
+ padding-bottom: .5rem !important
+}
+
+.pb-3 {
+ padding-bottom: 1rem !important
+}
+
+.pb-4 {
+ padding-bottom: 1.5rem !important
+}
+
+.pb-5 {
+ padding-bottom: 3rem !important
+}
+
+.ps-0 {
+ padding-left: 0 !important
+}
+
+.ps-1 {
+ padding-left: .25rem !important
+}
+
+.ps-2 {
+ padding-left: .5rem !important
+}
+
+.ps-3 {
+ padding-left: 1rem !important
+}
+
+.ps-4 {
+ padding-left: 1.5rem !important
+}
+
+.ps-5 {
+ padding-left: 3rem !important
+}
+
+.font-monospace {
+ font-family: var(--bs-font-monospace) !important
+}
+
+.fs-1 {
+ font-size: calc(1.375rem + 1.5vw) !important
+}
+
+.fs-2 {
+ font-size: calc(1.325rem + .9vw) !important
+}
+
+.fs-3 {
+ font-size: calc(1.3rem + .6vw) !important
+}
+
+.fs-4 {
+ font-size: calc(1.275rem + .3vw) !important
+}
+
+.fs-5 {
+ font-size: 1.25rem !important
+}
+
+.fs-6 {
+ font-size: 1rem !important
+}
+
+.fst-italic {
+ font-style: italic !important
+}
+
+.fst-normal {
+ font-style: normal !important
+}
+
+.fw-light {
+ font-weight: 300 !important
+}
+
+.fw-lighter {
+ font-weight: lighter !important
+}
+
+.fw-normal {
+ font-weight: 400 !important
+}
+
+.fw-bold {
+ font-weight: 700 !important
+}
+
+.fw-bolder {
+ font-weight: bolder !important
+}
+
+.lh-1 {
+ line-height: 1 !important
+}
+
+.lh-sm {
+ line-height: 1.25 !important
+}
+
+.lh-base {
+ line-height: 1.5 !important
+}
+
+.lh-lg {
+ line-height: 2 !important
+}
+
+.text-start {
+ text-align: left !important
+}
+
+.text-end {
+ text-align: right !important
+}
+
+.text-center {
+ text-align: center !important
+}
+
+.text-decoration-none {
+ text-decoration: none !important
+}
+
+.text-decoration-underline {
+ text-decoration: underline !important
+}
+
+.text-decoration-line-through {
+ text-decoration: line-through !important
+}
+
+.text-lowercase {
+ text-transform: lowercase !important
+}
+
+.text-uppercase {
+ text-transform: uppercase !important
+}
+
+.text-capitalize {
+ text-transform: capitalize !important
+}
+
+.text-wrap {
+ white-space: normal !important
+}
+
+.text-nowrap {
+ white-space: nowrap !important
+}
+
+.text-break {
+ word-wrap: break-word !important;
+ word-break: break-word !important
+}
+
+.text-primary {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-secondary {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-success {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-info {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-warning {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-danger {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-light {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-dark {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-black {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-white {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-body {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important
+}
+
+.text-muted {
+ --bs-text-opacity: 1;
+ color: #6c757d !important
+}
+
+.text-black-50 {
+ --bs-text-opacity: 1;
+ color: rgba(0, 0, 0, .5) !important
+}
+
+.text-white-50 {
+ --bs-text-opacity: 1;
+ color: rgba(255, 255, 255, .5) !important
+}
+
+.text-reset {
+ --bs-text-opacity: 1;
+ color: inherit !important
+}
+
+.text-opacity-25 {
+ --bs-text-opacity: 0.25
+}
+
+.text-opacity-50 {
+ --bs-text-opacity: 0.5
+}
+
+.text-opacity-75 {
+ --bs-text-opacity: 0.75
+}
+
+.text-opacity-100 {
+ --bs-text-opacity: 1
+}
+
+.bg-primary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-secondary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-success {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-info {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-warning {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-danger {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-light {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-dark {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-black {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-white {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-body {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important
+}
+
+.bg-transparent {
+ --bs-bg-opacity: 1;
+ background-color: transparent !important
+}
+
+.bg-opacity-10 {
+ --bs-bg-opacity: 0.1
+}
+
+.bg-opacity-25 {
+ --bs-bg-opacity: 0.25
+}
+
+.bg-opacity-50 {
+ --bs-bg-opacity: 0.5
+}
+
+.bg-opacity-75 {
+ --bs-bg-opacity: 0.75
+}
+
+.bg-opacity-100 {
+ --bs-bg-opacity: 1
+}
+
+.bg-gradient {
+ background-image: var(--bs-gradient) !important
+}
+
+.user-select-all {
+ -webkit-user-select: all !important;
+ -moz-user-select: all !important;
+ user-select: all !important
+}
+
+.user-select-auto {
+ -webkit-user-select: auto !important;
+ -moz-user-select: auto !important;
+ user-select: auto !important
+}
+
+.user-select-none {
+ -webkit-user-select: none !important;
+ -moz-user-select: none !important;
+ user-select: none !important
+}
+
+.pe-none {
+ pointer-events: none !important
+}
+
+.pe-auto {
+ pointer-events: auto !important
+}
+
+.rounded {
+ border-radius: .25rem !important
+}
+
+.rounded-0 {
+ border-radius: 0 !important
+}
+
+.rounded-1 {
+ border-radius: .2rem !important
+}
+
+.rounded-2 {
+ border-radius: .25rem !important
+}
+
+.rounded-3 {
+ border-radius: .3rem !important
+}
+
+.rounded-circle {
+ border-radius: 50% !important
+}
+
+.rounded-pill {
+ border-radius: 50rem !important
+}
+
+.rounded-top {
+ border-top-left-radius: .25rem !important;
+ border-top-right-radius: .25rem !important
+}
+
+.rounded-end {
+ border-top-right-radius: .25rem !important;
+ border-bottom-right-radius: .25rem !important
+}
+
+.rounded-bottom {
+ border-bottom-right-radius: .25rem !important;
+ border-bottom-left-radius: .25rem !important
+}
+
+.rounded-start {
+ border-bottom-left-radius: .25rem !important;
+ border-top-left-radius: .25rem !important
+}
+
+.visible {
+ visibility: visible !important
+}
+
+.invisible {
+ visibility: hidden !important
+}
+
+@media (min-width: 576px) {
+ .float-sm-start {
+ float: left !important
+ }
+
+ .float-sm-end {
+ float: right !important
+ }
+
+ .float-sm-none {
+ float: none !important
+ }
+
+ .d-sm-inline {
+ display: inline !important
+ }
+
+ .d-sm-inline-block {
+ display: inline-block !important
+ }
+
+ .d-sm-block {
+ display: block !important
+ }
+
+ .d-sm-grid {
+ display: grid !important
+ }
+
+ .d-sm-table {
+ display: table !important
+ }
+
+ .d-sm-table-row {
+ display: table-row !important
+ }
+
+ .d-sm-table-cell {
+ display: table-cell !important
+ }
+
+ .d-sm-flex {
+ display: flex !important
+ }
+
+ .d-sm-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-sm-none {
+ display: none !important
+ }
+
+ .flex-sm-fill {
+ flex: 1 1 auto !important
+ }
+
+ .flex-sm-row {
+ flex-direction: row !important
+ }
+
+ .flex-sm-column {
+ flex-direction: column !important
+ }
+
+ .flex-sm-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-sm-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-sm-grow-0 {
+ flex-grow: 0 !important
+ }
+
+ .flex-sm-grow-1 {
+ flex-grow: 1 !important
+ }
+
+ .flex-sm-shrink-0 {
+ flex-shrink: 0 !important
+ }
+
+ .flex-sm-shrink-1 {
+ flex-shrink: 1 !important
+ }
+
+ .flex-sm-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-sm-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-sm-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .gap-sm-0 {
+ gap: 0 !important
+ }
+
+ .gap-sm-1 {
+ gap: .25rem !important
+ }
+
+ .gap-sm-2 {
+ gap: .5rem !important
+ }
+
+ .gap-sm-3 {
+ gap: 1rem !important
+ }
+
+ .gap-sm-4 {
+ gap: 1.5rem !important
+ }
+
+ .gap-sm-5 {
+ gap: 3rem !important
+ }
+
+ .justify-content-sm-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-sm-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-sm-center {
+ justify-content: center !important
+ }
+
+ .justify-content-sm-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-sm-around {
+ justify-content: space-around !important
+ }
+
+ .justify-content-sm-evenly {
+ justify-content: space-evenly !important
+ }
+
+ .align-items-sm-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-sm-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-sm-center {
+ align-items: center !important
+ }
+
+ .align-items-sm-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-sm-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-sm-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-sm-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-sm-center {
+ align-content: center !important
+ }
+
+ .align-content-sm-between {
+ align-content: space-between !important
+ }
+
+ .align-content-sm-around {
+ align-content: space-around !important
+ }
+
+ .align-content-sm-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-sm-auto {
+ align-self: auto !important
+ }
+
+ .align-self-sm-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-sm-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-sm-center {
+ align-self: center !important
+ }
+
+ .align-self-sm-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-sm-stretch {
+ align-self: stretch !important
+ }
+
+ .order-sm-first {
+ order: -1 !important
+ }
+
+ .order-sm-0 {
+ order: 0 !important
+ }
+
+ .order-sm-1 {
+ order: 1 !important
+ }
+
+ .order-sm-2 {
+ order: 2 !important
+ }
+
+ .order-sm-3 {
+ order: 3 !important
+ }
+
+ .order-sm-4 {
+ order: 4 !important
+ }
+
+ .order-sm-5 {
+ order: 5 !important
+ }
+
+ .order-sm-last {
+ order: 6 !important
+ }
+
+ .m-sm-0 {
+ margin: 0 !important
+ }
+
+ .m-sm-1 {
+ margin: .25rem !important
+ }
+
+ .m-sm-2 {
+ margin: .5rem !important
+ }
+
+ .m-sm-3 {
+ margin: 1rem !important
+ }
+
+ .m-sm-4 {
+ margin: 1.5rem !important
+ }
+
+ .m-sm-5 {
+ margin: 3rem !important
+ }
+
+ .m-sm-auto {
+ margin: auto !important
+ }
+
+ .mx-sm-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+ }
+
+ .mx-sm-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+ }
+
+ .mx-sm-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+ }
+
+ .mx-sm-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+ }
+
+ .mx-sm-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+ }
+
+ .mx-sm-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+ }
+
+ .mx-sm-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+ }
+
+ .my-sm-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+ }
+
+ .my-sm-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+ }
+
+ .my-sm-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+ }
+
+ .my-sm-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+ }
+
+ .my-sm-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+ }
+
+ .my-sm-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+ }
+
+ .my-sm-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+ }
+
+ .mt-sm-0 {
+ margin-top: 0 !important
+ }
+
+ .mt-sm-1 {
+ margin-top: .25rem !important
+ }
+
+ .mt-sm-2 {
+ margin-top: .5rem !important
+ }
+
+ .mt-sm-3 {
+ margin-top: 1rem !important
+ }
+
+ .mt-sm-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mt-sm-5 {
+ margin-top: 3rem !important
+ }
+
+ .mt-sm-auto {
+ margin-top: auto !important
+ }
+
+ .me-sm-0 {
+ margin-right: 0 !important
+ }
+
+ .me-sm-1 {
+ margin-right: .25rem !important
+ }
+
+ .me-sm-2 {
+ margin-right: .5rem !important
+ }
+
+ .me-sm-3 {
+ margin-right: 1rem !important
+ }
+
+ .me-sm-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .me-sm-5 {
+ margin-right: 3rem !important
+ }
+
+ .me-sm-auto {
+ margin-right: auto !important
+ }
+
+ .mb-sm-0 {
+ margin-bottom: 0 !important
+ }
+
+ .mb-sm-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .mb-sm-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .mb-sm-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .mb-sm-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .mb-sm-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .mb-sm-auto {
+ margin-bottom: auto !important
+ }
+
+ .ms-sm-0 {
+ margin-left: 0 !important
+ }
+
+ .ms-sm-1 {
+ margin-left: .25rem !important
+ }
+
+ .ms-sm-2 {
+ margin-left: .5rem !important
+ }
+
+ .ms-sm-3 {
+ margin-left: 1rem !important
+ }
+
+ .ms-sm-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .ms-sm-5 {
+ margin-left: 3rem !important
+ }
+
+ .ms-sm-auto {
+ margin-left: auto !important
+ }
+
+ .p-sm-0 {
+ padding: 0 !important
+ }
+
+ .p-sm-1 {
+ padding: .25rem !important
+ }
+
+ .p-sm-2 {
+ padding: .5rem !important
+ }
+
+ .p-sm-3 {
+ padding: 1rem !important
+ }
+
+ .p-sm-4 {
+ padding: 1.5rem !important
+ }
+
+ .p-sm-5 {
+ padding: 3rem !important
+ }
+
+ .px-sm-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+ }
+
+ .px-sm-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+ }
+
+ .px-sm-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+ }
+
+ .px-sm-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+ }
+
+ .px-sm-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+ }
+
+ .px-sm-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+ }
+
+ .py-sm-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+ }
+
+ .py-sm-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+ }
+
+ .py-sm-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+ }
+
+ .py-sm-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+ }
+
+ .py-sm-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+ }
+
+ .py-sm-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+ }
+
+ .pt-sm-0 {
+ padding-top: 0 !important
+ }
+
+ .pt-sm-1 {
+ padding-top: .25rem !important
+ }
+
+ .pt-sm-2 {
+ padding-top: .5rem !important
+ }
+
+ .pt-sm-3 {
+ padding-top: 1rem !important
+ }
+
+ .pt-sm-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pt-sm-5 {
+ padding-top: 3rem !important
+ }
+
+ .pe-sm-0 {
+ padding-right: 0 !important
+ }
+
+ .pe-sm-1 {
+ padding-right: .25rem !important
+ }
+
+ .pe-sm-2 {
+ padding-right: .5rem !important
+ }
+
+ .pe-sm-3 {
+ padding-right: 1rem !important
+ }
+
+ .pe-sm-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pe-sm-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-sm-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pb-sm-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pb-sm-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pb-sm-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pb-sm-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pb-sm-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .ps-sm-0 {
+ padding-left: 0 !important
+ }
+
+ .ps-sm-1 {
+ padding-left: .25rem !important
+ }
+
+ .ps-sm-2 {
+ padding-left: .5rem !important
+ }
+
+ .ps-sm-3 {
+ padding-left: 1rem !important
+ }
+
+ .ps-sm-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .ps-sm-5 {
+ padding-left: 3rem !important
+ }
+
+ .text-sm-start {
+ text-align: left !important
+ }
+
+ .text-sm-end {
+ text-align: right !important
+ }
+
+ .text-sm-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 768px) {
+ .float-md-start {
+ float: left !important
+ }
+
+ .float-md-end {
+ float: right !important
+ }
+
+ .float-md-none {
+ float: none !important
+ }
+
+ .d-md-inline {
+ display: inline !important
+ }
+
+ .d-md-inline-block {
+ display: inline-block !important
+ }
+
+ .d-md-block {
+ display: block !important
+ }
+
+ .d-md-grid {
+ display: grid !important
+ }
+
+ .d-md-table {
+ display: table !important
+ }
+
+ .d-md-table-row {
+ display: table-row !important
+ }
+
+ .d-md-table-cell {
+ display: table-cell !important
+ }
+
+ .d-md-flex {
+ display: flex !important
+ }
+
+ .d-md-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-md-none {
+ display: none !important
+ }
+
+ .flex-md-fill {
+ flex: 1 1 auto !important
+ }
+
+ .flex-md-row {
+ flex-direction: row !important
+ }
+
+ .flex-md-column {
+ flex-direction: column !important
+ }
+
+ .flex-md-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-md-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-md-grow-0 {
+ flex-grow: 0 !important
+ }
+
+ .flex-md-grow-1 {
+ flex-grow: 1 !important
+ }
+
+ .flex-md-shrink-0 {
+ flex-shrink: 0 !important
+ }
+
+ .flex-md-shrink-1 {
+ flex-shrink: 1 !important
+ }
+
+ .flex-md-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-md-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-md-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .gap-md-0 {
+ gap: 0 !important
+ }
+
+ .gap-md-1 {
+ gap: .25rem !important
+ }
+
+ .gap-md-2 {
+ gap: .5rem !important
+ }
+
+ .gap-md-3 {
+ gap: 1rem !important
+ }
+
+ .gap-md-4 {
+ gap: 1.5rem !important
+ }
+
+ .gap-md-5 {
+ gap: 3rem !important
+ }
+
+ .justify-content-md-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-md-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-md-center {
+ justify-content: center !important
+ }
+
+ .justify-content-md-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-md-around {
+ justify-content: space-around !important
+ }
+
+ .justify-content-md-evenly {
+ justify-content: space-evenly !important
+ }
+
+ .align-items-md-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-md-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-md-center {
+ align-items: center !important
+ }
+
+ .align-items-md-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-md-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-md-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-md-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-md-center {
+ align-content: center !important
+ }
+
+ .align-content-md-between {
+ align-content: space-between !important
+ }
+
+ .align-content-md-around {
+ align-content: space-around !important
+ }
+
+ .align-content-md-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-md-auto {
+ align-self: auto !important
+ }
+
+ .align-self-md-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-md-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-md-center {
+ align-self: center !important
+ }
+
+ .align-self-md-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-md-stretch {
+ align-self: stretch !important
+ }
+
+ .order-md-first {
+ order: -1 !important
+ }
+
+ .order-md-0 {
+ order: 0 !important
+ }
+
+ .order-md-1 {
+ order: 1 !important
+ }
+
+ .order-md-2 {
+ order: 2 !important
+ }
+
+ .order-md-3 {
+ order: 3 !important
+ }
+
+ .order-md-4 {
+ order: 4 !important
+ }
+
+ .order-md-5 {
+ order: 5 !important
+ }
+
+ .order-md-last {
+ order: 6 !important
+ }
+
+ .m-md-0 {
+ margin: 0 !important
+ }
+
+ .m-md-1 {
+ margin: .25rem !important
+ }
+
+ .m-md-2 {
+ margin: .5rem !important
+ }
+
+ .m-md-3 {
+ margin: 1rem !important
+ }
+
+ .m-md-4 {
+ margin: 1.5rem !important
+ }
+
+ .m-md-5 {
+ margin: 3rem !important
+ }
+
+ .m-md-auto {
+ margin: auto !important
+ }
+
+ .mx-md-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+ }
+
+ .mx-md-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+ }
+
+ .mx-md-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+ }
+
+ .mx-md-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+ }
+
+ .mx-md-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+ }
+
+ .mx-md-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+ }
+
+ .mx-md-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+ }
+
+ .my-md-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+ }
+
+ .my-md-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+ }
+
+ .my-md-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+ }
+
+ .my-md-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+ }
+
+ .my-md-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+ }
+
+ .my-md-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+ }
+
+ .my-md-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+ }
+
+ .mt-md-0 {
+ margin-top: 0 !important
+ }
+
+ .mt-md-1 {
+ margin-top: .25rem !important
+ }
+
+ .mt-md-2 {
+ margin-top: .5rem !important
+ }
+
+ .mt-md-3 {
+ margin-top: 1rem !important
+ }
+
+ .mt-md-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mt-md-5 {
+ margin-top: 3rem !important
+ }
+
+ .mt-md-auto {
+ margin-top: auto !important
+ }
+
+ .me-md-0 {
+ margin-right: 0 !important
+ }
+
+ .me-md-1 {
+ margin-right: .25rem !important
+ }
+
+ .me-md-2 {
+ margin-right: .5rem !important
+ }
+
+ .me-md-3 {
+ margin-right: 1rem !important
+ }
+
+ .me-md-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .me-md-5 {
+ margin-right: 3rem !important
+ }
+
+ .me-md-auto {
+ margin-right: auto !important
+ }
+
+ .mb-md-0 {
+ margin-bottom: 0 !important
+ }
+
+ .mb-md-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .mb-md-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .mb-md-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .mb-md-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .mb-md-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .mb-md-auto {
+ margin-bottom: auto !important
+ }
+
+ .ms-md-0 {
+ margin-left: 0 !important
+ }
+
+ .ms-md-1 {
+ margin-left: .25rem !important
+ }
+
+ .ms-md-2 {
+ margin-left: .5rem !important
+ }
+
+ .ms-md-3 {
+ margin-left: 1rem !important
+ }
+
+ .ms-md-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .ms-md-5 {
+ margin-left: 3rem !important
+ }
+
+ .ms-md-auto {
+ margin-left: auto !important
+ }
+
+ .p-md-0 {
+ padding: 0 !important
+ }
+
+ .p-md-1 {
+ padding: .25rem !important
+ }
+
+ .p-md-2 {
+ padding: .5rem !important
+ }
+
+ .p-md-3 {
+ padding: 1rem !important
+ }
+
+ .p-md-4 {
+ padding: 1.5rem !important
+ }
+
+ .p-md-5 {
+ padding: 3rem !important
+ }
+
+ .px-md-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+ }
+
+ .px-md-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+ }
+
+ .px-md-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+ }
+
+ .px-md-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+ }
+
+ .px-md-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+ }
+
+ .px-md-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+ }
+
+ .py-md-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+ }
+
+ .py-md-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+ }
+
+ .py-md-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+ }
+
+ .py-md-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+ }
+
+ .py-md-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+ }
+
+ .py-md-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+ }
+
+ .pt-md-0 {
+ padding-top: 0 !important
+ }
+
+ .pt-md-1 {
+ padding-top: .25rem !important
+ }
+
+ .pt-md-2 {
+ padding-top: .5rem !important
+ }
+
+ .pt-md-3 {
+ padding-top: 1rem !important
+ }
+
+ .pt-md-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pt-md-5 {
+ padding-top: 3rem !important
+ }
+
+ .pe-md-0 {
+ padding-right: 0 !important
+ }
+
+ .pe-md-1 {
+ padding-right: .25rem !important
+ }
+
+ .pe-md-2 {
+ padding-right: .5rem !important
+ }
+
+ .pe-md-3 {
+ padding-right: 1rem !important
+ }
+
+ .pe-md-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pe-md-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-md-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pb-md-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pb-md-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pb-md-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pb-md-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pb-md-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .ps-md-0 {
+ padding-left: 0 !important
+ }
+
+ .ps-md-1 {
+ padding-left: .25rem !important
+ }
+
+ .ps-md-2 {
+ padding-left: .5rem !important
+ }
+
+ .ps-md-3 {
+ padding-left: 1rem !important
+ }
+
+ .ps-md-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .ps-md-5 {
+ padding-left: 3rem !important
+ }
+
+ .text-md-start {
+ text-align: left !important
+ }
+
+ .text-md-end {
+ text-align: right !important
+ }
+
+ .text-md-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 992px) {
+ .float-lg-start {
+ float: left !important
+ }
+
+ .float-lg-end {
+ float: right !important
+ }
+
+ .float-lg-none {
+ float: none !important
+ }
+
+ .d-lg-inline {
+ display: inline !important
+ }
+
+ .d-lg-inline-block {
+ display: inline-block !important
+ }
+
+ .d-lg-block {
+ display: block !important
+ }
+
+ .d-lg-grid {
+ display: grid !important
+ }
+
+ .d-lg-table {
+ display: table !important
+ }
+
+ .d-lg-table-row {
+ display: table-row !important
+ }
+
+ .d-lg-table-cell {
+ display: table-cell !important
+ }
+
+ .d-lg-flex {
+ display: flex !important
+ }
+
+ .d-lg-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-lg-none {
+ display: none !important
+ }
+
+ .flex-lg-fill {
+ flex: 1 1 auto !important
+ }
+
+ .flex-lg-row {
+ flex-direction: row !important
+ }
+
+ .flex-lg-column {
+ flex-direction: column !important
+ }
+
+ .flex-lg-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-lg-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-lg-grow-0 {
+ flex-grow: 0 !important
+ }
+
+ .flex-lg-grow-1 {
+ flex-grow: 1 !important
+ }
+
+ .flex-lg-shrink-0 {
+ flex-shrink: 0 !important
+ }
+
+ .flex-lg-shrink-1 {
+ flex-shrink: 1 !important
+ }
+
+ .flex-lg-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-lg-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-lg-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .gap-lg-0 {
+ gap: 0 !important
+ }
+
+ .gap-lg-1 {
+ gap: .25rem !important
+ }
+
+ .gap-lg-2 {
+ gap: .5rem !important
+ }
+
+ .gap-lg-3 {
+ gap: 1rem !important
+ }
+
+ .gap-lg-4 {
+ gap: 1.5rem !important
+ }
+
+ .gap-lg-5 {
+ gap: 3rem !important
+ }
+
+ .justify-content-lg-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-lg-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-lg-center {
+ justify-content: center !important
+ }
+
+ .justify-content-lg-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-lg-around {
+ justify-content: space-around !important
+ }
+
+ .justify-content-lg-evenly {
+ justify-content: space-evenly !important
+ }
+
+ .align-items-lg-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-lg-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-lg-center {
+ align-items: center !important
+ }
+
+ .align-items-lg-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-lg-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-lg-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-lg-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-lg-center {
+ align-content: center !important
+ }
+
+ .align-content-lg-between {
+ align-content: space-between !important
+ }
+
+ .align-content-lg-around {
+ align-content: space-around !important
+ }
+
+ .align-content-lg-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-lg-auto {
+ align-self: auto !important
+ }
+
+ .align-self-lg-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-lg-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-lg-center {
+ align-self: center !important
+ }
+
+ .align-self-lg-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-lg-stretch {
+ align-self: stretch !important
+ }
+
+ .order-lg-first {
+ order: -1 !important
+ }
+
+ .order-lg-0 {
+ order: 0 !important
+ }
+
+ .order-lg-1 {
+ order: 1 !important
+ }
+
+ .order-lg-2 {
+ order: 2 !important
+ }
+
+ .order-lg-3 {
+ order: 3 !important
+ }
+
+ .order-lg-4 {
+ order: 4 !important
+ }
+
+ .order-lg-5 {
+ order: 5 !important
+ }
+
+ .order-lg-last {
+ order: 6 !important
+ }
+
+ .m-lg-0 {
+ margin: 0 !important
+ }
+
+ .m-lg-1 {
+ margin: .25rem !important
+ }
+
+ .m-lg-2 {
+ margin: .5rem !important
+ }
+
+ .m-lg-3 {
+ margin: 1rem !important
+ }
+
+ .m-lg-4 {
+ margin: 1.5rem !important
+ }
+
+ .m-lg-5 {
+ margin: 3rem !important
+ }
+
+ .m-lg-auto {
+ margin: auto !important
+ }
+
+ .mx-lg-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+ }
+
+ .mx-lg-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+ }
+
+ .mx-lg-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+ }
+
+ .mx-lg-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+ }
+
+ .mx-lg-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+ }
+
+ .mx-lg-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+ }
+
+ .mx-lg-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+ }
+
+ .my-lg-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+ }
+
+ .my-lg-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+ }
+
+ .my-lg-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+ }
+
+ .my-lg-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+ }
+
+ .my-lg-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+ }
+
+ .my-lg-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+ }
+
+ .my-lg-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+ }
+
+ .mt-lg-0 {
+ margin-top: 0 !important
+ }
+
+ .mt-lg-1 {
+ margin-top: .25rem !important
+ }
+
+ .mt-lg-2 {
+ margin-top: .5rem !important
+ }
+
+ .mt-lg-3 {
+ margin-top: 1rem !important
+ }
+
+ .mt-lg-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mt-lg-5 {
+ margin-top: 3rem !important
+ }
+
+ .mt-lg-auto {
+ margin-top: auto !important
+ }
+
+ .me-lg-0 {
+ margin-right: 0 !important
+ }
+
+ .me-lg-1 {
+ margin-right: .25rem !important
+ }
+
+ .me-lg-2 {
+ margin-right: .5rem !important
+ }
+
+ .me-lg-3 {
+ margin-right: 1rem !important
+ }
+
+ .me-lg-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .me-lg-5 {
+ margin-right: 3rem !important
+ }
+
+ .me-lg-auto {
+ margin-right: auto !important
+ }
+
+ .mb-lg-0 {
+ margin-bottom: 0 !important
+ }
+
+ .mb-lg-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .mb-lg-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .mb-lg-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .mb-lg-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .mb-lg-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .mb-lg-auto {
+ margin-bottom: auto !important
+ }
+
+ .ms-lg-0 {
+ margin-left: 0 !important
+ }
+
+ .ms-lg-1 {
+ margin-left: .25rem !important
+ }
+
+ .ms-lg-2 {
+ margin-left: .5rem !important
+ }
+
+ .ms-lg-3 {
+ margin-left: 1rem !important
+ }
+
+ .ms-lg-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .ms-lg-5 {
+ margin-left: 3rem !important
+ }
+
+ .ms-lg-auto {
+ margin-left: auto !important
+ }
+
+ .p-lg-0 {
+ padding: 0 !important
+ }
+
+ .p-lg-1 {
+ padding: .25rem !important
+ }
+
+ .p-lg-2 {
+ padding: .5rem !important
+ }
+
+ .p-lg-3 {
+ padding: 1rem !important
+ }
+
+ .p-lg-4 {
+ padding: 1.5rem !important
+ }
+
+ .p-lg-5 {
+ padding: 3rem !important
+ }
+
+ .px-lg-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+ }
+
+ .px-lg-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+ }
+
+ .px-lg-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+ }
+
+ .px-lg-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+ }
+
+ .px-lg-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+ }
+
+ .px-lg-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+ }
+
+ .py-lg-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+ }
+
+ .py-lg-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+ }
+
+ .py-lg-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+ }
+
+ .py-lg-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+ }
+
+ .py-lg-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+ }
+
+ .py-lg-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+ }
+
+ .pt-lg-0 {
+ padding-top: 0 !important
+ }
+
+ .pt-lg-1 {
+ padding-top: .25rem !important
+ }
+
+ .pt-lg-2 {
+ padding-top: .5rem !important
+ }
+
+ .pt-lg-3 {
+ padding-top: 1rem !important
+ }
+
+ .pt-lg-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pt-lg-5 {
+ padding-top: 3rem !important
+ }
+
+ .pe-lg-0 {
+ padding-right: 0 !important
+ }
+
+ .pe-lg-1 {
+ padding-right: .25rem !important
+ }
+
+ .pe-lg-2 {
+ padding-right: .5rem !important
+ }
+
+ .pe-lg-3 {
+ padding-right: 1rem !important
+ }
+
+ .pe-lg-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pe-lg-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-lg-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pb-lg-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pb-lg-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pb-lg-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pb-lg-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pb-lg-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .ps-lg-0 {
+ padding-left: 0 !important
+ }
+
+ .ps-lg-1 {
+ padding-left: .25rem !important
+ }
+
+ .ps-lg-2 {
+ padding-left: .5rem !important
+ }
+
+ .ps-lg-3 {
+ padding-left: 1rem !important
+ }
+
+ .ps-lg-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .ps-lg-5 {
+ padding-left: 3rem !important
+ }
+
+ .text-lg-start {
+ text-align: left !important
+ }
+
+ .text-lg-end {
+ text-align: right !important
+ }
+
+ .text-lg-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .float-xl-start {
+ float: left !important
+ }
+
+ .float-xl-end {
+ float: right !important
+ }
+
+ .float-xl-none {
+ float: none !important
+ }
+
+ .d-xl-inline {
+ display: inline !important
+ }
+
+ .d-xl-inline-block {
+ display: inline-block !important
+ }
+
+ .d-xl-block {
+ display: block !important
+ }
+
+ .d-xl-grid {
+ display: grid !important
+ }
+
+ .d-xl-table {
+ display: table !important
+ }
+
+ .d-xl-table-row {
+ display: table-row !important
+ }
+
+ .d-xl-table-cell {
+ display: table-cell !important
+ }
+
+ .d-xl-flex {
+ display: flex !important
+ }
+
+ .d-xl-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-xl-none {
+ display: none !important
+ }
+
+ .flex-xl-fill {
+ flex: 1 1 auto !important
+ }
+
+ .flex-xl-row {
+ flex-direction: row !important
+ }
+
+ .flex-xl-column {
+ flex-direction: column !important
+ }
+
+ .flex-xl-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-xl-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-xl-grow-0 {
+ flex-grow: 0 !important
+ }
+
+ .flex-xl-grow-1 {
+ flex-grow: 1 !important
+ }
+
+ .flex-xl-shrink-0 {
+ flex-shrink: 0 !important
+ }
+
+ .flex-xl-shrink-1 {
+ flex-shrink: 1 !important
+ }
+
+ .flex-xl-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-xl-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-xl-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .gap-xl-0 {
+ gap: 0 !important
+ }
+
+ .gap-xl-1 {
+ gap: .25rem !important
+ }
+
+ .gap-xl-2 {
+ gap: .5rem !important
+ }
+
+ .gap-xl-3 {
+ gap: 1rem !important
+ }
+
+ .gap-xl-4 {
+ gap: 1.5rem !important
+ }
+
+ .gap-xl-5 {
+ gap: 3rem !important
+ }
+
+ .justify-content-xl-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-xl-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-xl-center {
+ justify-content: center !important
+ }
+
+ .justify-content-xl-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-xl-around {
+ justify-content: space-around !important
+ }
+
+ .justify-content-xl-evenly {
+ justify-content: space-evenly !important
+ }
+
+ .align-items-xl-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-xl-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-xl-center {
+ align-items: center !important
+ }
+
+ .align-items-xl-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-xl-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-xl-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-xl-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-xl-center {
+ align-content: center !important
+ }
+
+ .align-content-xl-between {
+ align-content: space-between !important
+ }
+
+ .align-content-xl-around {
+ align-content: space-around !important
+ }
+
+ .align-content-xl-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-xl-auto {
+ align-self: auto !important
+ }
+
+ .align-self-xl-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-xl-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-xl-center {
+ align-self: center !important
+ }
+
+ .align-self-xl-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-xl-stretch {
+ align-self: stretch !important
+ }
+
+ .order-xl-first {
+ order: -1 !important
+ }
+
+ .order-xl-0 {
+ order: 0 !important
+ }
+
+ .order-xl-1 {
+ order: 1 !important
+ }
+
+ .order-xl-2 {
+ order: 2 !important
+ }
+
+ .order-xl-3 {
+ order: 3 !important
+ }
+
+ .order-xl-4 {
+ order: 4 !important
+ }
+
+ .order-xl-5 {
+ order: 5 !important
+ }
+
+ .order-xl-last {
+ order: 6 !important
+ }
+
+ .m-xl-0 {
+ margin: 0 !important
+ }
+
+ .m-xl-1 {
+ margin: .25rem !important
+ }
+
+ .m-xl-2 {
+ margin: .5rem !important
+ }
+
+ .m-xl-3 {
+ margin: 1rem !important
+ }
+
+ .m-xl-4 {
+ margin: 1.5rem !important
+ }
+
+ .m-xl-5 {
+ margin: 3rem !important
+ }
+
+ .m-xl-auto {
+ margin: auto !important
+ }
+
+ .mx-xl-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+ }
+
+ .mx-xl-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+ }
+
+ .mx-xl-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+ }
+
+ .mx-xl-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+ }
+
+ .mx-xl-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+ }
+
+ .mx-xl-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+ }
+
+ .mx-xl-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+ }
+
+ .my-xl-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+ }
+
+ .my-xl-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+ }
+
+ .my-xl-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+ }
+
+ .my-xl-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+ }
+
+ .my-xl-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+ }
+
+ .my-xl-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+ }
+
+ .my-xl-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+ }
+
+ .mt-xl-0 {
+ margin-top: 0 !important
+ }
+
+ .mt-xl-1 {
+ margin-top: .25rem !important
+ }
+
+ .mt-xl-2 {
+ margin-top: .5rem !important
+ }
+
+ .mt-xl-3 {
+ margin-top: 1rem !important
+ }
+
+ .mt-xl-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mt-xl-5 {
+ margin-top: 3rem !important
+ }
+
+ .mt-xl-auto {
+ margin-top: auto !important
+ }
+
+ .me-xl-0 {
+ margin-right: 0 !important
+ }
+
+ .me-xl-1 {
+ margin-right: .25rem !important
+ }
+
+ .me-xl-2 {
+ margin-right: .5rem !important
+ }
+
+ .me-xl-3 {
+ margin-right: 1rem !important
+ }
+
+ .me-xl-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .me-xl-5 {
+ margin-right: 3rem !important
+ }
+
+ .me-xl-auto {
+ margin-right: auto !important
+ }
+
+ .mb-xl-0 {
+ margin-bottom: 0 !important
+ }
+
+ .mb-xl-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .mb-xl-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .mb-xl-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .mb-xl-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .mb-xl-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .mb-xl-auto {
+ margin-bottom: auto !important
+ }
+
+ .ms-xl-0 {
+ margin-left: 0 !important
+ }
+
+ .ms-xl-1 {
+ margin-left: .25rem !important
+ }
+
+ .ms-xl-2 {
+ margin-left: .5rem !important
+ }
+
+ .ms-xl-3 {
+ margin-left: 1rem !important
+ }
+
+ .ms-xl-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .ms-xl-5 {
+ margin-left: 3rem !important
+ }
+
+ .ms-xl-auto {
+ margin-left: auto !important
+ }
+
+ .p-xl-0 {
+ padding: 0 !important
+ }
+
+ .p-xl-1 {
+ padding: .25rem !important
+ }
+
+ .p-xl-2 {
+ padding: .5rem !important
+ }
+
+ .p-xl-3 {
+ padding: 1rem !important
+ }
+
+ .p-xl-4 {
+ padding: 1.5rem !important
+ }
+
+ .p-xl-5 {
+ padding: 3rem !important
+ }
+
+ .px-xl-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+ }
+
+ .px-xl-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+ }
+
+ .px-xl-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+ }
+
+ .px-xl-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+ }
+
+ .px-xl-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+ }
+
+ .px-xl-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+ }
+
+ .py-xl-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+ }
+
+ .py-xl-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+ }
+
+ .py-xl-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+ }
+
+ .py-xl-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+ }
+
+ .py-xl-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+ }
+
+ .py-xl-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+ }
+
+ .pt-xl-0 {
+ padding-top: 0 !important
+ }
+
+ .pt-xl-1 {
+ padding-top: .25rem !important
+ }
+
+ .pt-xl-2 {
+ padding-top: .5rem !important
+ }
+
+ .pt-xl-3 {
+ padding-top: 1rem !important
+ }
+
+ .pt-xl-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pt-xl-5 {
+ padding-top: 3rem !important
+ }
+
+ .pe-xl-0 {
+ padding-right: 0 !important
+ }
+
+ .pe-xl-1 {
+ padding-right: .25rem !important
+ }
+
+ .pe-xl-2 {
+ padding-right: .5rem !important
+ }
+
+ .pe-xl-3 {
+ padding-right: 1rem !important
+ }
+
+ .pe-xl-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pe-xl-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-xl-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pb-xl-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pb-xl-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pb-xl-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pb-xl-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pb-xl-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .ps-xl-0 {
+ padding-left: 0 !important
+ }
+
+ .ps-xl-1 {
+ padding-left: .25rem !important
+ }
+
+ .ps-xl-2 {
+ padding-left: .5rem !important
+ }
+
+ .ps-xl-3 {
+ padding-left: 1rem !important
+ }
+
+ .ps-xl-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .ps-xl-5 {
+ padding-left: 3rem !important
+ }
+
+ .text-xl-start {
+ text-align: left !important
+ }
+
+ .text-xl-end {
+ text-align: right !important
+ }
+
+ .text-xl-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 1400px) {
+ .float-xxl-start {
+ float: left !important
+ }
+
+ .float-xxl-end {
+ float: right !important
+ }
+
+ .float-xxl-none {
+ float: none !important
+ }
+
+ .d-xxl-inline {
+ display: inline !important
+ }
+
+ .d-xxl-inline-block {
+ display: inline-block !important
+ }
+
+ .d-xxl-block {
+ display: block !important
+ }
+
+ .d-xxl-grid {
+ display: grid !important
+ }
+
+ .d-xxl-table {
+ display: table !important
+ }
+
+ .d-xxl-table-row {
+ display: table-row !important
+ }
+
+ .d-xxl-table-cell {
+ display: table-cell !important
+ }
+
+ .d-xxl-flex {
+ display: flex !important
+ }
+
+ .d-xxl-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-xxl-none {
+ display: none !important
+ }
+
+ .flex-xxl-fill {
+ flex: 1 1 auto !important
+ }
+
+ .flex-xxl-row {
+ flex-direction: row !important
+ }
+
+ .flex-xxl-column {
+ flex-direction: column !important
+ }
+
+ .flex-xxl-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-xxl-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-xxl-grow-0 {
+ flex-grow: 0 !important
+ }
+
+ .flex-xxl-grow-1 {
+ flex-grow: 1 !important
+ }
+
+ .flex-xxl-shrink-0 {
+ flex-shrink: 0 !important
+ }
+
+ .flex-xxl-shrink-1 {
+ flex-shrink: 1 !important
+ }
+
+ .flex-xxl-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-xxl-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-xxl-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .gap-xxl-0 {
+ gap: 0 !important
+ }
+
+ .gap-xxl-1 {
+ gap: .25rem !important
+ }
+
+ .gap-xxl-2 {
+ gap: .5rem !important
+ }
+
+ .gap-xxl-3 {
+ gap: 1rem !important
+ }
+
+ .gap-xxl-4 {
+ gap: 1.5rem !important
+ }
+
+ .gap-xxl-5 {
+ gap: 3rem !important
+ }
+
+ .justify-content-xxl-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-xxl-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-xxl-center {
+ justify-content: center !important
+ }
+
+ .justify-content-xxl-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-xxl-around {
+ justify-content: space-around !important
+ }
+
+ .justify-content-xxl-evenly {
+ justify-content: space-evenly !important
+ }
+
+ .align-items-xxl-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-xxl-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-xxl-center {
+ align-items: center !important
+ }
+
+ .align-items-xxl-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-xxl-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-xxl-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-xxl-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-xxl-center {
+ align-content: center !important
+ }
+
+ .align-content-xxl-between {
+ align-content: space-between !important
+ }
+
+ .align-content-xxl-around {
+ align-content: space-around !important
+ }
+
+ .align-content-xxl-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-xxl-auto {
+ align-self: auto !important
+ }
+
+ .align-self-xxl-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-xxl-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-xxl-center {
+ align-self: center !important
+ }
+
+ .align-self-xxl-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-xxl-stretch {
+ align-self: stretch !important
+ }
+
+ .order-xxl-first {
+ order: -1 !important
+ }
+
+ .order-xxl-0 {
+ order: 0 !important
+ }
+
+ .order-xxl-1 {
+ order: 1 !important
+ }
+
+ .order-xxl-2 {
+ order: 2 !important
+ }
+
+ .order-xxl-3 {
+ order: 3 !important
+ }
+
+ .order-xxl-4 {
+ order: 4 !important
+ }
+
+ .order-xxl-5 {
+ order: 5 !important
+ }
+
+ .order-xxl-last {
+ order: 6 !important
+ }
+
+ .m-xxl-0 {
+ margin: 0 !important
+ }
+
+ .m-xxl-1 {
+ margin: .25rem !important
+ }
+
+ .m-xxl-2 {
+ margin: .5rem !important
+ }
+
+ .m-xxl-3 {
+ margin: 1rem !important
+ }
+
+ .m-xxl-4 {
+ margin: 1.5rem !important
+ }
+
+ .m-xxl-5 {
+ margin: 3rem !important
+ }
+
+ .m-xxl-auto {
+ margin: auto !important
+ }
+
+ .mx-xxl-0 {
+ margin-right: 0 !important;
+ margin-left: 0 !important
+ }
+
+ .mx-xxl-1 {
+ margin-right: .25rem !important;
+ margin-left: .25rem !important
+ }
+
+ .mx-xxl-2 {
+ margin-right: .5rem !important;
+ margin-left: .5rem !important
+ }
+
+ .mx-xxl-3 {
+ margin-right: 1rem !important;
+ margin-left: 1rem !important
+ }
+
+ .mx-xxl-4 {
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important
+ }
+
+ .mx-xxl-5 {
+ margin-right: 3rem !important;
+ margin-left: 3rem !important
+ }
+
+ .mx-xxl-auto {
+ margin-right: auto !important;
+ margin-left: auto !important
+ }
+
+ .my-xxl-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important
+ }
+
+ .my-xxl-1 {
+ margin-top: .25rem !important;
+ margin-bottom: .25rem !important
+ }
+
+ .my-xxl-2 {
+ margin-top: .5rem !important;
+ margin-bottom: .5rem !important
+ }
+
+ .my-xxl-3 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important
+ }
+
+ .my-xxl-4 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important
+ }
+
+ .my-xxl-5 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important
+ }
+
+ .my-xxl-auto {
+ margin-top: auto !important;
+ margin-bottom: auto !important
+ }
+
+ .mt-xxl-0 {
+ margin-top: 0 !important
+ }
+
+ .mt-xxl-1 {
+ margin-top: .25rem !important
+ }
+
+ .mt-xxl-2 {
+ margin-top: .5rem !important
+ }
+
+ .mt-xxl-3 {
+ margin-top: 1rem !important
+ }
+
+ .mt-xxl-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mt-xxl-5 {
+ margin-top: 3rem !important
+ }
+
+ .mt-xxl-auto {
+ margin-top: auto !important
+ }
+
+ .me-xxl-0 {
+ margin-right: 0 !important
+ }
+
+ .me-xxl-1 {
+ margin-right: .25rem !important
+ }
+
+ .me-xxl-2 {
+ margin-right: .5rem !important
+ }
+
+ .me-xxl-3 {
+ margin-right: 1rem !important
+ }
+
+ .me-xxl-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .me-xxl-5 {
+ margin-right: 3rem !important
+ }
+
+ .me-xxl-auto {
+ margin-right: auto !important
+ }
+
+ .mb-xxl-0 {
+ margin-bottom: 0 !important
+ }
+
+ .mb-xxl-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .mb-xxl-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .mb-xxl-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .mb-xxl-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .mb-xxl-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .mb-xxl-auto {
+ margin-bottom: auto !important
+ }
+
+ .ms-xxl-0 {
+ margin-left: 0 !important
+ }
+
+ .ms-xxl-1 {
+ margin-left: .25rem !important
+ }
+
+ .ms-xxl-2 {
+ margin-left: .5rem !important
+ }
+
+ .ms-xxl-3 {
+ margin-left: 1rem !important
+ }
+
+ .ms-xxl-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .ms-xxl-5 {
+ margin-left: 3rem !important
+ }
+
+ .ms-xxl-auto {
+ margin-left: auto !important
+ }
+
+ .p-xxl-0 {
+ padding: 0 !important
+ }
+
+ .p-xxl-1 {
+ padding: .25rem !important
+ }
+
+ .p-xxl-2 {
+ padding: .5rem !important
+ }
+
+ .p-xxl-3 {
+ padding: 1rem !important
+ }
+
+ .p-xxl-4 {
+ padding: 1.5rem !important
+ }
+
+ .p-xxl-5 {
+ padding: 3rem !important
+ }
+
+ .px-xxl-0 {
+ padding-right: 0 !important;
+ padding-left: 0 !important
+ }
+
+ .px-xxl-1 {
+ padding-right: .25rem !important;
+ padding-left: .25rem !important
+ }
+
+ .px-xxl-2 {
+ padding-right: .5rem !important;
+ padding-left: .5rem !important
+ }
+
+ .px-xxl-3 {
+ padding-right: 1rem !important;
+ padding-left: 1rem !important
+ }
+
+ .px-xxl-4 {
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important
+ }
+
+ .px-xxl-5 {
+ padding-right: 3rem !important;
+ padding-left: 3rem !important
+ }
+
+ .py-xxl-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important
+ }
+
+ .py-xxl-1 {
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important
+ }
+
+ .py-xxl-2 {
+ padding-top: .5rem !important;
+ padding-bottom: .5rem !important
+ }
+
+ .py-xxl-3 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important
+ }
+
+ .py-xxl-4 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important
+ }
+
+ .py-xxl-5 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important
+ }
+
+ .pt-xxl-0 {
+ padding-top: 0 !important
+ }
+
+ .pt-xxl-1 {
+ padding-top: .25rem !important
+ }
+
+ .pt-xxl-2 {
+ padding-top: .5rem !important
+ }
+
+ .pt-xxl-3 {
+ padding-top: 1rem !important
+ }
+
+ .pt-xxl-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pt-xxl-5 {
+ padding-top: 3rem !important
+ }
+
+ .pe-xxl-0 {
+ padding-right: 0 !important
+ }
+
+ .pe-xxl-1 {
+ padding-right: .25rem !important
+ }
+
+ .pe-xxl-2 {
+ padding-right: .5rem !important
+ }
+
+ .pe-xxl-3 {
+ padding-right: 1rem !important
+ }
+
+ .pe-xxl-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pe-xxl-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-xxl-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pb-xxl-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pb-xxl-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pb-xxl-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pb-xxl-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pb-xxl-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .ps-xxl-0 {
+ padding-left: 0 !important
+ }
+
+ .ps-xxl-1 {
+ padding-left: .25rem !important
+ }
+
+ .ps-xxl-2 {
+ padding-left: .5rem !important
+ }
+
+ .ps-xxl-3 {
+ padding-left: 1rem !important
+ }
+
+ .ps-xxl-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .ps-xxl-5 {
+ padding-left: 3rem !important
+ }
+
+ .text-xxl-start {
+ text-align: left !important
+ }
+
+ .text-xxl-end {
+ text-align: right !important
+ }
+
+ .text-xxl-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .fs-1 {
+ font-size: 2.5rem !important
+ }
+
+ .fs-2 {
+ font-size: 2rem !important
+ }
+
+ .fs-3 {
+ font-size: 1.75rem !important
+ }
+
+ .fs-4 {
+ font-size: 1.5rem !important
+ }
+}
+
+@media print {
+ .d-print-inline {
+ display: inline !important
+ }
+
+ .d-print-inline-block {
+ display: inline-block !important
+ }
+
+ .d-print-block {
+ display: block !important
+ }
+
+ .d-print-grid {
+ display: grid !important
+ }
+
+ .d-print-table {
+ display: table !important
+ }
+
+ .d-print-table-row {
+ display: table-row !important
+ }
+
+ .d-print-table-cell {
+ display: table-cell !important
+ }
+
+ .d-print-flex {
+ display: flex !important
+ }
+
+ .d-print-inline-flex {
+ display: inline-flex !important
+ }
+
+ .d-print-none {
+ display: none !important
+ }
+}
+
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/src/main/resources/static/css/fonts/bootstrap-icons.woff b/src/main/resources/static/css/fonts/bootstrap-icons.woff
new file mode 100644
index 0000000..667b51b
Binary files /dev/null and b/src/main/resources/static/css/fonts/bootstrap-icons.woff differ
diff --git a/src/main/resources/static/css/fonts/bootstrap-icons.woff2 b/src/main/resources/static/css/fonts/bootstrap-icons.woff2
new file mode 100644
index 0000000..177cf3f
Binary files /dev/null and b/src/main/resources/static/css/fonts/bootstrap-icons.woff2 differ
diff --git a/src/main/resources/static/js/app/bootstrap.bundle.min.js b/src/main/resources/static/js/app/bootstrap.bundle.min.js
new file mode 100644
index 0000000..030bd91
--- /dev/null
+++ b/src/main/resources/static/js/app/bootstrap.bundle.min.js
@@ -0,0 +1,2573 @@
+/*!
+ * Bootstrap v5.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+!function (t, e) {
+ "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = e()
+}(this, (function () {
+ "use strict";
+ const t = "transitionend", e = t => {
+ let e = t.getAttribute("data-bs-target");
+ if (!e || "#" === e) {
+ let i = t.getAttribute("href");
+ if (!i || !i.includes("#") && !i.startsWith(".")) return null;
+ i.includes("#") && !i.startsWith("#") && (i = `#${i.split("#")[1]}`), e = i && "#" !== i ? i.trim() : null
+ }
+ return e
+ }, i = t => {
+ const i = e(t);
+ return i && document.querySelector(i) ? i : null
+ }, n = t => {
+ const i = e(t);
+ return i ? document.querySelector(i) : null
+ }, s = e => {
+ e.dispatchEvent(new Event(t))
+ }, o = t => !(!t || "object" != typeof t) && (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType),
+ r = t => o(t) ? t.jquery ? t[0] : t : "string" == typeof t && t.length > 0 ? document.querySelector(t) : null,
+ a = (t, e, i) => {
+ Object.keys(i).forEach((n => {
+ const s = i[n], r = e[n],
+ a = r && o(r) ? "element" : null == (l = r) ? `${l}` : {}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();
+ var l;
+ if (!new RegExp(s).test(a)) throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)
+ }))
+ },
+ l = t => !(!o(t) || 0 === t.getClientRects().length) && "visible" === getComputedStyle(t).getPropertyValue("visibility"),
+ c = t => !t || t.nodeType !== Node.ELEMENT_NODE || !!t.classList.contains("disabled") || (void 0 !== t.disabled ? t.disabled : t.hasAttribute("disabled") && "false" !== t.getAttribute("disabled")),
+ h = t => {
+ if (!document.documentElement.attachShadow) return null;
+ if ("function" == typeof t.getRootNode) {
+ const e = t.getRootNode();
+ return e instanceof ShadowRoot ? e : null
+ }
+ return t instanceof ShadowRoot ? t : t.parentNode ? h(t.parentNode) : null
+ }, d = () => {
+ }, u = t => {
+ t.offsetHeight
+ }, f = () => {
+ const {jQuery: t} = window;
+ return t && !document.body.hasAttribute("data-bs-no-jquery") ? t : null
+ }, p = [], m = () => "rtl" === document.documentElement.dir, g = t => {
+ var e;
+ e = () => {
+ const e = f();
+ if (e) {
+ const i = t.NAME, n = e.fn[i];
+ e.fn[i] = t.jQueryInterface, e.fn[i].Constructor = t, e.fn[i].noConflict = () => (e.fn[i] = n, t.jQueryInterface)
+ }
+ }, "loading" === document.readyState ? (p.length || document.addEventListener("DOMContentLoaded", (() => {
+ p.forEach((t => t()))
+ })), p.push(e)) : e()
+ }, _ = t => {
+ "function" == typeof t && t()
+ }, b = (e, i, n = !0) => {
+ if (!n) return void _(e);
+ const o = (t => {
+ if (!t) return 0;
+ let {transitionDuration: e, transitionDelay: i} = window.getComputedStyle(t);
+ const n = Number.parseFloat(e), s = Number.parseFloat(i);
+ return n || s ? (e = e.split(",")[0], i = i.split(",")[0], 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) : 0
+ })(i) + 5;
+ let r = !1;
+ const a = ({target: n}) => {
+ n === i && (r = !0, i.removeEventListener(t, a), _(e))
+ };
+ i.addEventListener(t, a), setTimeout((() => {
+ r || s(i)
+ }), o)
+ }, v = (t, e, i, n) => {
+ let s = t.indexOf(e);
+ if (-1 === s) return t[!i && n ? t.length - 1 : 0];
+ const o = t.length;
+ return s += i ? 1 : -1, n && (s = (s + o) % o), t[Math.max(0, Math.min(s, o - 1))]
+ }, y = /[^.]*(?=\..*)\.|.*/, w = /\..*/, E = /::\d+$/, A = {};
+ let T = 1;
+ const O = {mouseenter: "mouseover", mouseleave: "mouseout"}, C = /^(mouseenter|mouseleave)/i,
+ k = new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]);
+
+ function L(t, e) {
+ return e && `${e}::${T++}` || t.uidEvent || T++
+ }
+
+ function x(t) {
+ const e = L(t);
+ return t.uidEvent = e, A[e] = A[e] || {}, A[e]
+ }
+
+ function D(t, e, i = null) {
+ const n = Object.keys(t);
+ for (let s = 0, o = n.length; s < o; s++) {
+ const o = t[n[s]];
+ if (o.originalHandler === e && o.delegationSelector === i) return o
+ }
+ return null
+ }
+
+ function S(t, e, i) {
+ const n = "string" == typeof e, s = n ? i : e;
+ let o = P(t);
+ return k.has(o) || (o = t), [n, s, o]
+ }
+
+ function N(t, e, i, n, s) {
+ if ("string" != typeof e || !t) return;
+ if (i || (i = n, n = null), C.test(e)) {
+ const t = t => function (e) {
+ if (!e.relatedTarget || e.relatedTarget !== e.delegateTarget && !e.delegateTarget.contains(e.relatedTarget)) return t.call(this, e)
+ };
+ n ? n = t(n) : i = t(i)
+ }
+ const [o, r, a] = S(e, i, n), l = x(t), c = l[a] || (l[a] = {}), h = D(c, r, o ? i : null);
+ if (h) return void (h.oneOff = h.oneOff && s);
+ const d = L(r, e.replace(y, "")), u = o ? function (t, e, i) {
+ return function n(s) {
+ const o = t.querySelectorAll(e);
+ for (let {target: r} = s; r && r !== this; r = r.parentNode) for (let a = o.length; a--;) if (o[a] === r) return s.delegateTarget = r, n.oneOff && j.off(t, s.type, e, i), i.apply(r, [s]);
+ return null
+ }
+ }(t, i, n) : function (t, e) {
+ return function i(n) {
+ return n.delegateTarget = t, i.oneOff && j.off(t, n.type, e), e.apply(t, [n])
+ }
+ }(t, i);
+ u.delegationSelector = o ? i : null, u.originalHandler = r, u.oneOff = s, u.uidEvent = d, c[d] = u, t.addEventListener(a, u, o)
+ }
+
+ function I(t, e, i, n, s) {
+ const o = D(e[i], n, s);
+ o && (t.removeEventListener(i, o, Boolean(s)), delete e[i][o.uidEvent])
+ }
+
+ function P(t) {
+ return t = t.replace(w, ""), O[t] || t
+ }
+
+ const j = {
+ on(t, e, i, n) {
+ N(t, e, i, n, !1)
+ }, one(t, e, i, n) {
+ N(t, e, i, n, !0)
+ }, off(t, e, i, n) {
+ if ("string" != typeof e || !t) return;
+ const [s, o, r] = S(e, i, n), a = r !== e, l = x(t), c = e.startsWith(".");
+ if (void 0 !== o) {
+ if (!l || !l[r]) return;
+ return void I(t, l, r, o, s ? i : null)
+ }
+ c && Object.keys(l).forEach((i => {
+ !function (t, e, i, n) {
+ const s = e[i] || {};
+ Object.keys(s).forEach((o => {
+ if (o.includes(n)) {
+ const n = s[o];
+ I(t, e, i, n.originalHandler, n.delegationSelector)
+ }
+ }))
+ }(t, l, i, e.slice(1))
+ }));
+ const h = l[r] || {};
+ Object.keys(h).forEach((i => {
+ const n = i.replace(E, "");
+ if (!a || e.includes(n)) {
+ const e = h[i];
+ I(t, l, r, e.originalHandler, e.delegationSelector)
+ }
+ }))
+ }, trigger(t, e, i) {
+ if ("string" != typeof e || !t) return null;
+ const n = f(), s = P(e), o = e !== s, r = k.has(s);
+ let a, l = !0, c = !0, h = !1, d = null;
+ return o && n && (a = n.Event(e, i), n(t).trigger(a), l = !a.isPropagationStopped(), c = !a.isImmediatePropagationStopped(), h = a.isDefaultPrevented()), r ? (d = document.createEvent("HTMLEvents"), d.initEvent(s, l, !0)) : d = new CustomEvent(e, {
+ bubbles: l,
+ cancelable: !0
+ }), void 0 !== i && Object.keys(i).forEach((t => {
+ Object.defineProperty(d, t, {get: () => i[t]})
+ })), h && d.preventDefault(), c && t.dispatchEvent(d), d.defaultPrevented && void 0 !== a && a.preventDefault(), d
+ }
+ }, M = new Map, H = {
+ set(t, e, i) {
+ M.has(t) || M.set(t, new Map);
+ const n = M.get(t);
+ n.has(e) || 0 === n.size ? n.set(e, i) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)
+ }, get: (t, e) => M.has(t) && M.get(t).get(e) || null, remove(t, e) {
+ if (!M.has(t)) return;
+ const i = M.get(t);
+ i.delete(e), 0 === i.size && M.delete(t)
+ }
+ };
+
+ class B {
+ constructor(t) {
+ (t = r(t)) && (this._element = t, H.set(this._element, this.constructor.DATA_KEY, this))
+ }
+
+ dispose() {
+ H.remove(this._element, this.constructor.DATA_KEY), j.off(this._element, this.constructor.EVENT_KEY), Object.getOwnPropertyNames(this).forEach((t => {
+ this[t] = null
+ }))
+ }
+
+ _queueCallback(t, e, i = !0) {
+ b(t, e, i)
+ }
+
+ static getInstance(t) {
+ return H.get(r(t), this.DATA_KEY)
+ }
+
+ static getOrCreateInstance(t, e = {}) {
+ return this.getInstance(t) || new this(t, "object" == typeof e ? e : null)
+ }
+
+ static get VERSION() {
+ return "5.1.3"
+ }
+
+ static get NAME() {
+ throw new Error('You have to implement the static method "NAME", for each component!')
+ }
+
+ static get DATA_KEY() {
+ return `bs.${this.NAME}`
+ }
+
+ static get EVENT_KEY() {
+ return `.${this.DATA_KEY}`
+ }
+ }
+
+ const R = (t, e = "hide") => {
+ const i = `click.dismiss${t.EVENT_KEY}`, s = t.NAME;
+ j.on(document, i, `[data-bs-dismiss="${s}"]`, (function (i) {
+ if (["A", "AREA"].includes(this.tagName) && i.preventDefault(), c(this)) return;
+ const o = n(this) || this.closest(`.${s}`);
+ t.getOrCreateInstance(o)[e]()
+ }))
+ };
+
+ class W extends B {
+ static get NAME() {
+ return "alert"
+ }
+
+ close() {
+ if (j.trigger(this._element, "close.bs.alert").defaultPrevented) return;
+ this._element.classList.remove("show");
+ const t = this._element.classList.contains("fade");
+ this._queueCallback((() => this._destroyElement()), this._element, t)
+ }
+
+ _destroyElement() {
+ this._element.remove(), j.trigger(this._element, "closed.bs.alert"), this.dispose()
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = W.getOrCreateInstance(this);
+ if ("string" == typeof t) {
+ if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`);
+ e[t](this)
+ }
+ }))
+ }
+ }
+
+ R(W, "close"), g(W);
+ const $ = '[data-bs-toggle="button"]';
+
+ class z extends B {
+ static get NAME() {
+ return "button"
+ }
+
+ toggle() {
+ this._element.setAttribute("aria-pressed", this._element.classList.toggle("active"))
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = z.getOrCreateInstance(this);
+ "toggle" === t && e[t]()
+ }))
+ }
+ }
+
+ function q(t) {
+ return "true" === t || "false" !== t && (t === Number(t).toString() ? Number(t) : "" === t || "null" === t ? null : t)
+ }
+
+ function F(t) {
+ return t.replace(/[A-Z]/g, (t => `-${t.toLowerCase()}`))
+ }
+
+ j.on(document, "click.bs.button.data-api", $, (t => {
+ t.preventDefault();
+ const e = t.target.closest($);
+ z.getOrCreateInstance(e).toggle()
+ })), g(z);
+ const U = {
+ setDataAttribute(t, e, i) {
+ t.setAttribute(`data-bs-${F(e)}`, i)
+ }, removeDataAttribute(t, e) {
+ t.removeAttribute(`data-bs-${F(e)}`)
+ }, getDataAttributes(t) {
+ if (!t) return {};
+ const e = {};
+ return Object.keys(t.dataset).filter((t => t.startsWith("bs"))).forEach((i => {
+ let n = i.replace(/^bs/, "");
+ n = n.charAt(0).toLowerCase() + n.slice(1, n.length), e[n] = q(t.dataset[i])
+ })), e
+ }, getDataAttribute: (t, e) => q(t.getAttribute(`data-bs-${F(e)}`)), offset(t) {
+ const e = t.getBoundingClientRect();
+ return {top: e.top + window.pageYOffset, left: e.left + window.pageXOffset}
+ }, position: t => ({top: t.offsetTop, left: t.offsetLeft})
+ }, V = {
+ find: (t, e = document.documentElement) => [].concat(...Element.prototype.querySelectorAll.call(e, t)),
+ findOne: (t, e = document.documentElement) => Element.prototype.querySelector.call(e, t),
+ children: (t, e) => [].concat(...t.children).filter((t => t.matches(e))),
+ parents(t, e) {
+ const i = [];
+ let n = t.parentNode;
+ for (; n && n.nodeType === Node.ELEMENT_NODE && 3 !== n.nodeType;) n.matches(e) && i.push(n), n = n.parentNode;
+ return i
+ },
+ prev(t, e) {
+ let i = t.previousElementSibling;
+ for (; i;) {
+ if (i.matches(e)) return [i];
+ i = i.previousElementSibling
+ }
+ return []
+ },
+ next(t, e) {
+ let i = t.nextElementSibling;
+ for (; i;) {
+ if (i.matches(e)) return [i];
+ i = i.nextElementSibling
+ }
+ return []
+ },
+ focusableChildren(t) {
+ const e = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((t => `${t}:not([tabindex^="-"])`)).join(", ");
+ return this.find(e, t).filter((t => !c(t) && l(t)))
+ }
+ }, K = "carousel", X = {interval: 5e3, keyboard: !0, slide: !1, pause: "hover", wrap: !0, touch: !0}, Y = {
+ interval: "(number|boolean)",
+ keyboard: "boolean",
+ slide: "(boolean|string)",
+ pause: "(string|boolean)",
+ wrap: "boolean",
+ touch: "boolean"
+ }, Q = "next", G = "prev", Z = "left", J = "right", tt = {ArrowLeft: J, ArrowRight: Z}, et = "slid.bs.carousel",
+ it = "active", nt = ".active.carousel-item";
+
+ class st extends B {
+ constructor(t, e) {
+ super(t), this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this.touchStartX = 0, this.touchDeltaX = 0, this._config = this._getConfig(e), this._indicatorsElement = V.findOne(".carousel-indicators", this._element), this._touchSupported = "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0, this._pointerEvent = Boolean(window.PointerEvent), this._addEventListeners()
+ }
+
+ static get Default() {
+ return X
+ }
+
+ static get NAME() {
+ return K
+ }
+
+ next() {
+ this._slide(Q)
+ }
+
+ nextWhenVisible() {
+ !document.hidden && l(this._element) && this.next()
+ }
+
+ prev() {
+ this._slide(G)
+ }
+
+ pause(t) {
+ t || (this._isPaused = !0), V.findOne(".carousel-item-next, .carousel-item-prev", this._element) && (s(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null
+ }
+
+ cycle(t) {
+ t || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config && this._config.interval && !this._isPaused && (this._updateInterval(), this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval))
+ }
+
+ to(t) {
+ this._activeElement = V.findOne(nt, this._element);
+ const e = this._getItemIndex(this._activeElement);
+ if (t > this._items.length - 1 || t < 0) return;
+ if (this._isSliding) return void j.one(this._element, et, (() => this.to(t)));
+ if (e === t) return this.pause(), void this.cycle();
+ const i = t > e ? Q : G;
+ this._slide(i, this._items[t])
+ }
+
+ _getConfig(t) {
+ return t = {...X, ...U.getDataAttributes(this._element), ..."object" == typeof t ? t : {}}, a(K, t, Y), t
+ }
+
+ _handleSwipe() {
+ const t = Math.abs(this.touchDeltaX);
+ if (t <= 40) return;
+ const e = t / this.touchDeltaX;
+ this.touchDeltaX = 0, e && this._slide(e > 0 ? J : Z)
+ }
+
+ _addEventListeners() {
+ this._config.keyboard && j.on(this._element, "keydown.bs.carousel", (t => this._keydown(t))), "hover" === this._config.pause && (j.on(this._element, "mouseenter.bs.carousel", (t => this.pause(t))), j.on(this._element, "mouseleave.bs.carousel", (t => this.cycle(t)))), this._config.touch && this._touchSupported && this._addTouchEventListeners()
+ }
+
+ _addTouchEventListeners() {
+ const t = t => this._pointerEvent && ("pen" === t.pointerType || "touch" === t.pointerType), e = e => {
+ t(e) ? this.touchStartX = e.clientX : this._pointerEvent || (this.touchStartX = e.touches[0].clientX)
+ }, i = t => {
+ this.touchDeltaX = t.touches && t.touches.length > 1 ? 0 : t.touches[0].clientX - this.touchStartX
+ }, n = e => {
+ t(e) && (this.touchDeltaX = e.clientX - this.touchStartX), this._handleSwipe(), "hover" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout((t => this.cycle(t)), 500 + this._config.interval))
+ };
+ V.find(".carousel-item img", this._element).forEach((t => {
+ j.on(t, "dragstart.bs.carousel", (t => t.preventDefault()))
+ })), this._pointerEvent ? (j.on(this._element, "pointerdown.bs.carousel", (t => e(t))), j.on(this._element, "pointerup.bs.carousel", (t => n(t))), this._element.classList.add("pointer-event")) : (j.on(this._element, "touchstart.bs.carousel", (t => e(t))), j.on(this._element, "touchmove.bs.carousel", (t => i(t))), j.on(this._element, "touchend.bs.carousel", (t => n(t))))
+ }
+
+ _keydown(t) {
+ if (/input|textarea/i.test(t.target.tagName)) return;
+ const e = tt[t.key];
+ e && (t.preventDefault(), this._slide(e))
+ }
+
+ _getItemIndex(t) {
+ return this._items = t && t.parentNode ? V.find(".carousel-item", t.parentNode) : [], this._items.indexOf(t)
+ }
+
+ _getItemByOrder(t, e) {
+ const i = t === Q;
+ return v(this._items, e, i, this._config.wrap)
+ }
+
+ _triggerSlideEvent(t, e) {
+ const i = this._getItemIndex(t), n = this._getItemIndex(V.findOne(nt, this._element));
+ return j.trigger(this._element, "slide.bs.carousel", {relatedTarget: t, direction: e, from: n, to: i})
+ }
+
+ _setActiveIndicatorElement(t) {
+ if (this._indicatorsElement) {
+ const e = V.findOne(".active", this._indicatorsElement);
+ e.classList.remove(it), e.removeAttribute("aria-current");
+ const i = V.find("[data-bs-target]", this._indicatorsElement);
+ for (let e = 0; e < i.length; e++) if (Number.parseInt(i[e].getAttribute("data-bs-slide-to"), 10) === this._getItemIndex(t)) {
+ i[e].classList.add(it), i[e].setAttribute("aria-current", "true");
+ break
+ }
+ }
+ }
+
+ _updateInterval() {
+ const t = this._activeElement || V.findOne(nt, this._element);
+ if (!t) return;
+ const e = Number.parseInt(t.getAttribute("data-bs-interval"), 10);
+ e ? (this._config.defaultInterval = this._config.defaultInterval || this._config.interval, this._config.interval = e) : this._config.interval = this._config.defaultInterval || this._config.interval
+ }
+
+ _slide(t, e) {
+ const i = this._directionToOrder(t), n = V.findOne(nt, this._element), s = this._getItemIndex(n),
+ o = e || this._getItemByOrder(i, n), r = this._getItemIndex(o), a = Boolean(this._interval),
+ l = i === Q, c = l ? "carousel-item-start" : "carousel-item-end",
+ h = l ? "carousel-item-next" : "carousel-item-prev", d = this._orderToDirection(i);
+ if (o && o.classList.contains(it)) return void (this._isSliding = !1);
+ if (this._isSliding) return;
+ if (this._triggerSlideEvent(o, d).defaultPrevented) return;
+ if (!n || !o) return;
+ this._isSliding = !0, a && this.pause(), this._setActiveIndicatorElement(o), this._activeElement = o;
+ const f = () => {
+ j.trigger(this._element, et, {relatedTarget: o, direction: d, from: s, to: r})
+ };
+ if (this._element.classList.contains("slide")) {
+ o.classList.add(h), u(o), n.classList.add(c), o.classList.add(c);
+ const t = () => {
+ o.classList.remove(c, h), o.classList.add(it), n.classList.remove(it, h, c), this._isSliding = !1, setTimeout(f, 0)
+ };
+ this._queueCallback(t, n, !0)
+ } else n.classList.remove(it), o.classList.add(it), this._isSliding = !1, f();
+ a && this.cycle()
+ }
+
+ _directionToOrder(t) {
+ return [J, Z].includes(t) ? m() ? t === Z ? G : Q : t === Z ? Q : G : t
+ }
+
+ _orderToDirection(t) {
+ return [Q, G].includes(t) ? m() ? t === G ? Z : J : t === G ? J : Z : t
+ }
+
+ static carouselInterface(t, e) {
+ const i = st.getOrCreateInstance(t, e);
+ let {_config: n} = i;
+ "object" == typeof e && (n = {...n, ...e});
+ const s = "string" == typeof e ? e : n.slide;
+ if ("number" == typeof e) i.to(e); else if ("string" == typeof s) {
+ if (void 0 === i[s]) throw new TypeError(`No method named "${s}"`);
+ i[s]()
+ } else n.interval && n.ride && (i.pause(), i.cycle())
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ st.carouselInterface(this, t)
+ }))
+ }
+
+ static dataApiClickHandler(t) {
+ const e = n(this);
+ if (!e || !e.classList.contains("carousel")) return;
+ const i = {...U.getDataAttributes(e), ...U.getDataAttributes(this)},
+ s = this.getAttribute("data-bs-slide-to");
+ s && (i.interval = !1), st.carouselInterface(e, i), s && st.getInstance(e).to(s), t.preventDefault()
+ }
+ }
+
+ j.on(document, "click.bs.carousel.data-api", "[data-bs-slide], [data-bs-slide-to]", st.dataApiClickHandler), j.on(window, "load.bs.carousel.data-api", (() => {
+ const t = V.find('[data-bs-ride="carousel"]');
+ for (let e = 0, i = t.length; e < i; e++) st.carouselInterface(t[e], st.getInstance(t[e]))
+ })), g(st);
+ const ot = "collapse", rt = {toggle: !0, parent: null}, at = {toggle: "boolean", parent: "(null|element)"},
+ lt = "show", ct = "collapse", ht = "collapsing", dt = "collapsed", ut = ":scope .collapse .collapse",
+ ft = '[data-bs-toggle="collapse"]';
+
+ class pt extends B {
+ constructor(t, e) {
+ super(t), this._isTransitioning = !1, this._config = this._getConfig(e), this._triggerArray = [];
+ const n = V.find(ft);
+ for (let t = 0, e = n.length; t < e; t++) {
+ const e = n[t], s = i(e), o = V.find(s).filter((t => t === this._element));
+ null !== s && o.length && (this._selector = s, this._triggerArray.push(e))
+ }
+ this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle()
+ }
+
+ static get Default() {
+ return rt
+ }
+
+ static get NAME() {
+ return ot
+ }
+
+ toggle() {
+ this._isShown() ? this.hide() : this.show()
+ }
+
+ show() {
+ if (this._isTransitioning || this._isShown()) return;
+ let t, e = [];
+ if (this._config.parent) {
+ const t = V.find(ut, this._config.parent);
+ e = V.find(".collapse.show, .collapse.collapsing", this._config.parent).filter((e => !t.includes(e)))
+ }
+ const i = V.findOne(this._selector);
+ if (e.length) {
+ const n = e.find((t => i !== t));
+ if (t = n ? pt.getInstance(n) : null, t && t._isTransitioning) return
+ }
+ if (j.trigger(this._element, "show.bs.collapse").defaultPrevented) return;
+ e.forEach((e => {
+ i !== e && pt.getOrCreateInstance(e, {toggle: !1}).hide(), t || H.set(e, "bs.collapse", null)
+ }));
+ const n = this._getDimension();
+ this._element.classList.remove(ct), this._element.classList.add(ht), this._element.style[n] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0;
+ const s = `scroll${n[0].toUpperCase() + n.slice(1)}`;
+ this._queueCallback((() => {
+ this._isTransitioning = !1, this._element.classList.remove(ht), this._element.classList.add(ct, lt), this._element.style[n] = "", j.trigger(this._element, "shown.bs.collapse")
+ }), this._element, !0), this._element.style[n] = `${this._element[s]}px`
+ }
+
+ hide() {
+ if (this._isTransitioning || !this._isShown()) return;
+ if (j.trigger(this._element, "hide.bs.collapse").defaultPrevented) return;
+ const t = this._getDimension();
+ this._element.style[t] = `${this._element.getBoundingClientRect()[t]}px`, u(this._element), this._element.classList.add(ht), this._element.classList.remove(ct, lt);
+ const e = this._triggerArray.length;
+ for (let t = 0; t < e; t++) {
+ const e = this._triggerArray[t], i = n(e);
+ i && !this._isShown(i) && this._addAriaAndCollapsedClass([e], !1)
+ }
+ this._isTransitioning = !0, this._element.style[t] = "", this._queueCallback((() => {
+ this._isTransitioning = !1, this._element.classList.remove(ht), this._element.classList.add(ct), j.trigger(this._element, "hidden.bs.collapse")
+ }), this._element, !0)
+ }
+
+ _isShown(t = this._element) {
+ return t.classList.contains(lt)
+ }
+
+ _getConfig(t) {
+ return (t = {...rt, ...U.getDataAttributes(this._element), ...t}).toggle = Boolean(t.toggle), t.parent = r(t.parent), a(ot, t, at), t
+ }
+
+ _getDimension() {
+ return this._element.classList.contains("collapse-horizontal") ? "width" : "height"
+ }
+
+ _initializeChildren() {
+ if (!this._config.parent) return;
+ const t = V.find(ut, this._config.parent);
+ V.find(ft, this._config.parent).filter((e => !t.includes(e))).forEach((t => {
+ const e = n(t);
+ e && this._addAriaAndCollapsedClass([t], this._isShown(e))
+ }))
+ }
+
+ _addAriaAndCollapsedClass(t, e) {
+ t.length && t.forEach((t => {
+ e ? t.classList.remove(dt) : t.classList.add(dt), t.setAttribute("aria-expanded", e)
+ }))
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = {};
+ "string" == typeof t && /show|hide/.test(t) && (e.toggle = !1);
+ const i = pt.getOrCreateInstance(this, e);
+ if ("string" == typeof t) {
+ if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`);
+ i[t]()
+ }
+ }))
+ }
+ }
+
+ j.on(document, "click.bs.collapse.data-api", ft, (function (t) {
+ ("A" === t.target.tagName || t.delegateTarget && "A" === t.delegateTarget.tagName) && t.preventDefault();
+ const e = i(this);
+ V.find(e).forEach((t => {
+ pt.getOrCreateInstance(t, {toggle: !1}).toggle()
+ }))
+ })), g(pt);
+ var mt = "top", gt = "bottom", _t = "right", bt = "left", vt = "auto", yt = [mt, gt, _t, bt], wt = "start",
+ Et = "end", At = "clippingParents", Tt = "viewport", Ot = "popper", Ct = "reference",
+ kt = yt.reduce((function (t, e) {
+ return t.concat([e + "-" + wt, e + "-" + Et])
+ }), []), Lt = [].concat(yt, [vt]).reduce((function (t, e) {
+ return t.concat([e, e + "-" + wt, e + "-" + Et])
+ }), []), xt = "beforeRead", Dt = "read", St = "afterRead", Nt = "beforeMain", It = "main", Pt = "afterMain",
+ jt = "beforeWrite", Mt = "write", Ht = "afterWrite", Bt = [xt, Dt, St, Nt, It, Pt, jt, Mt, Ht];
+
+ function Rt(t) {
+ return t ? (t.nodeName || "").toLowerCase() : null
+ }
+
+ function Wt(t) {
+ if (null == t) return window;
+ if ("[object Window]" !== t.toString()) {
+ var e = t.ownerDocument;
+ return e && e.defaultView || window
+ }
+ return t
+ }
+
+ function $t(t) {
+ return t instanceof Wt(t).Element || t instanceof Element
+ }
+
+ function zt(t) {
+ return t instanceof Wt(t).HTMLElement || t instanceof HTMLElement
+ }
+
+ function qt(t) {
+ return "undefined" != typeof ShadowRoot && (t instanceof Wt(t).ShadowRoot || t instanceof ShadowRoot)
+ }
+
+ const Ft = {
+ name: "applyStyles", enabled: !0, phase: "write", fn: function (t) {
+ var e = t.state;
+ Object.keys(e.elements).forEach((function (t) {
+ var i = e.styles[t] || {}, n = e.attributes[t] || {}, s = e.elements[t];
+ zt(s) && Rt(s) && (Object.assign(s.style, i), Object.keys(n).forEach((function (t) {
+ var e = n[t];
+ !1 === e ? s.removeAttribute(t) : s.setAttribute(t, !0 === e ? "" : e)
+ })))
+ }))
+ }, effect: function (t) {
+ var e = t.state, i = {
+ popper: {position: e.options.strategy, left: "0", top: "0", margin: "0"},
+ arrow: {position: "absolute"},
+ reference: {}
+ };
+ return Object.assign(e.elements.popper.style, i.popper), e.styles = i, e.elements.arrow && Object.assign(e.elements.arrow.style, i.arrow), function () {
+ Object.keys(e.elements).forEach((function (t) {
+ var n = e.elements[t], s = e.attributes[t] || {},
+ o = Object.keys(e.styles.hasOwnProperty(t) ? e.styles[t] : i[t]).reduce((function (t, e) {
+ return t[e] = "", t
+ }), {});
+ zt(n) && Rt(n) && (Object.assign(n.style, o), Object.keys(s).forEach((function (t) {
+ n.removeAttribute(t)
+ })))
+ }))
+ }
+ }, requires: ["computeStyles"]
+ };
+
+ function Ut(t) {
+ return t.split("-")[0]
+ }
+
+ function Vt(t, e) {
+ var i = t.getBoundingClientRect();
+ return {
+ width: i.width / 1,
+ height: i.height / 1,
+ top: i.top / 1,
+ right: i.right / 1,
+ bottom: i.bottom / 1,
+ left: i.left / 1,
+ x: i.left / 1,
+ y: i.top / 1
+ }
+ }
+
+ function Kt(t) {
+ var e = Vt(t), i = t.offsetWidth, n = t.offsetHeight;
+ return Math.abs(e.width - i) <= 1 && (i = e.width), Math.abs(e.height - n) <= 1 && (n = e.height), {
+ x: t.offsetLeft,
+ y: t.offsetTop,
+ width: i,
+ height: n
+ }
+ }
+
+ function Xt(t, e) {
+ var i = e.getRootNode && e.getRootNode();
+ if (t.contains(e)) return !0;
+ if (i && qt(i)) {
+ var n = e;
+ do {
+ if (n && t.isSameNode(n)) return !0;
+ n = n.parentNode || n.host
+ } while (n)
+ }
+ return !1
+ }
+
+ function Yt(t) {
+ return Wt(t).getComputedStyle(t)
+ }
+
+ function Qt(t) {
+ return ["table", "td", "th"].indexOf(Rt(t)) >= 0
+ }
+
+ function Gt(t) {
+ return (($t(t) ? t.ownerDocument : t.document) || window.document).documentElement
+ }
+
+ function Zt(t) {
+ return "html" === Rt(t) ? t : t.assignedSlot || t.parentNode || (qt(t) ? t.host : null) || Gt(t)
+ }
+
+ function Jt(t) {
+ return zt(t) && "fixed" !== Yt(t).position ? t.offsetParent : null
+ }
+
+ function te(t) {
+ for (var e = Wt(t), i = Jt(t); i && Qt(i) && "static" === Yt(i).position;) i = Jt(i);
+ return i && ("html" === Rt(i) || "body" === Rt(i) && "static" === Yt(i).position) ? e : i || function (t) {
+ var e = -1 !== navigator.userAgent.toLowerCase().indexOf("firefox");
+ if (-1 !== navigator.userAgent.indexOf("Trident") && zt(t) && "fixed" === Yt(t).position) return null;
+ for (var i = Zt(t); zt(i) && ["html", "body"].indexOf(Rt(i)) < 0;) {
+ var n = Yt(i);
+ if ("none" !== n.transform || "none" !== n.perspective || "paint" === n.contain || -1 !== ["transform", "perspective"].indexOf(n.willChange) || e && "filter" === n.willChange || e && n.filter && "none" !== n.filter) return i;
+ i = i.parentNode
+ }
+ return null
+ }(t) || e
+ }
+
+ function ee(t) {
+ return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y"
+ }
+
+ var ie = Math.max, ne = Math.min, se = Math.round;
+
+ function oe(t, e, i) {
+ return ie(t, ne(e, i))
+ }
+
+ function re(t) {
+ return Object.assign({}, {top: 0, right: 0, bottom: 0, left: 0}, t)
+ }
+
+ function ae(t, e) {
+ return e.reduce((function (e, i) {
+ return e[i] = t, e
+ }), {})
+ }
+
+ const le = {
+ name: "arrow", enabled: !0, phase: "main", fn: function (t) {
+ var e, i = t.state, n = t.name, s = t.options, o = i.elements.arrow, r = i.modifiersData.popperOffsets,
+ a = Ut(i.placement), l = ee(a), c = [bt, _t].indexOf(a) >= 0 ? "height" : "width";
+ if (o && r) {
+ var h = function (t, e) {
+ return re("number" != typeof (t = "function" == typeof t ? t(Object.assign({}, e.rects, {placement: e.placement})) : t) ? t : ae(t, yt))
+ }(s.padding, i), d = Kt(o), u = "y" === l ? mt : bt, f = "y" === l ? gt : _t,
+ p = i.rects.reference[c] + i.rects.reference[l] - r[l] - i.rects.popper[c],
+ m = r[l] - i.rects.reference[l], g = te(o),
+ _ = g ? "y" === l ? g.clientHeight || 0 : g.clientWidth || 0 : 0, b = p / 2 - m / 2, v = h[u],
+ y = _ - d[c] - h[f], w = _ / 2 - d[c] / 2 + b, E = oe(v, w, y), A = l;
+ i.modifiersData[n] = ((e = {})[A] = E, e.centerOffset = E - w, e)
+ }
+ }, effect: function (t) {
+ var e = t.state, i = t.options.element, n = void 0 === i ? "[data-popper-arrow]" : i;
+ null != n && ("string" != typeof n || (n = e.elements.popper.querySelector(n))) && Xt(e.elements.popper, n) && (e.elements.arrow = n)
+ }, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"]
+ };
+
+ function ce(t) {
+ return t.split("-")[1]
+ }
+
+ var he = {top: "auto", right: "auto", bottom: "auto", left: "auto"};
+
+ function de(t) {
+ var e, i = t.popper, n = t.popperRect, s = t.placement, o = t.variation, r = t.offsets, a = t.position,
+ l = t.gpuAcceleration, c = t.adaptive, h = t.roundOffsets, d = !0 === h ? function (t) {
+ var e = t.x, i = t.y, n = window.devicePixelRatio || 1;
+ return {x: se(se(e * n) / n) || 0, y: se(se(i * n) / n) || 0}
+ }(r) : "function" == typeof h ? h(r) : r, u = d.x, f = void 0 === u ? 0 : u, p = d.y, m = void 0 === p ? 0 : p,
+ g = r.hasOwnProperty("x"), _ = r.hasOwnProperty("y"), b = bt, v = mt, y = window;
+ if (c) {
+ var w = te(i), E = "clientHeight", A = "clientWidth";
+ w === Wt(i) && "static" !== Yt(w = Gt(i)).position && "absolute" === a && (E = "scrollHeight", A = "scrollWidth"), w = w, s !== mt && (s !== bt && s !== _t || o !== Et) || (v = gt, m -= w[E] - n.height, m *= l ? 1 : -1), s !== bt && (s !== mt && s !== gt || o !== Et) || (b = _t, f -= w[A] - n.width, f *= l ? 1 : -1)
+ }
+ var T, O = Object.assign({position: a}, c && he);
+ return l ? Object.assign({}, O, ((T = {})[v] = _ ? "0" : "", T[b] = g ? "0" : "", T.transform = (y.devicePixelRatio || 1) <= 1 ? "translate(" + f + "px, " + m + "px)" : "translate3d(" + f + "px, " + m + "px, 0)", T)) : Object.assign({}, O, ((e = {})[v] = _ ? m + "px" : "", e[b] = g ? f + "px" : "", e.transform = "", e))
+ }
+
+ const ue = {
+ name: "computeStyles", enabled: !0, phase: "beforeWrite", fn: function (t) {
+ var e = t.state, i = t.options, n = i.gpuAcceleration, s = void 0 === n || n, o = i.adaptive,
+ r = void 0 === o || o, a = i.roundOffsets, l = void 0 === a || a, c = {
+ placement: Ut(e.placement),
+ variation: ce(e.placement),
+ popper: e.elements.popper,
+ popperRect: e.rects.popper,
+ gpuAcceleration: s
+ };
+ null != e.modifiersData.popperOffsets && (e.styles.popper = Object.assign({}, e.styles.popper, de(Object.assign({}, c, {
+ offsets: e.modifiersData.popperOffsets,
+ position: e.options.strategy,
+ adaptive: r,
+ roundOffsets: l
+ })))), null != e.modifiersData.arrow && (e.styles.arrow = Object.assign({}, e.styles.arrow, de(Object.assign({}, c, {
+ offsets: e.modifiersData.arrow,
+ position: "absolute",
+ adaptive: !1,
+ roundOffsets: l
+ })))), e.attributes.popper = Object.assign({}, e.attributes.popper, {"data-popper-placement": e.placement})
+ }, data: {}
+ };
+ var fe = {passive: !0};
+ const pe = {
+ name: "eventListeners", enabled: !0, phase: "write", fn: function () {
+ }, effect: function (t) {
+ var e = t.state, i = t.instance, n = t.options, s = n.scroll, o = void 0 === s || s, r = n.resize,
+ a = void 0 === r || r, l = Wt(e.elements.popper),
+ c = [].concat(e.scrollParents.reference, e.scrollParents.popper);
+ return o && c.forEach((function (t) {
+ t.addEventListener("scroll", i.update, fe)
+ })), a && l.addEventListener("resize", i.update, fe), function () {
+ o && c.forEach((function (t) {
+ t.removeEventListener("scroll", i.update, fe)
+ })), a && l.removeEventListener("resize", i.update, fe)
+ }
+ }, data: {}
+ };
+ var me = {left: "right", right: "left", bottom: "top", top: "bottom"};
+
+ function ge(t) {
+ return t.replace(/left|right|bottom|top/g, (function (t) {
+ return me[t]
+ }))
+ }
+
+ var _e = {start: "end", end: "start"};
+
+ function be(t) {
+ return t.replace(/start|end/g, (function (t) {
+ return _e[t]
+ }))
+ }
+
+ function ve(t) {
+ var e = Wt(t);
+ return {scrollLeft: e.pageXOffset, scrollTop: e.pageYOffset}
+ }
+
+ function ye(t) {
+ return Vt(Gt(t)).left + ve(t).scrollLeft
+ }
+
+ function we(t) {
+ var e = Yt(t), i = e.overflow, n = e.overflowX, s = e.overflowY;
+ return /auto|scroll|overlay|hidden/.test(i + s + n)
+ }
+
+ function Ee(t) {
+ return ["html", "body", "#document"].indexOf(Rt(t)) >= 0 ? t.ownerDocument.body : zt(t) && we(t) ? t : Ee(Zt(t))
+ }
+
+ function Ae(t, e) {
+ var i;
+ void 0 === e && (e = []);
+ var n = Ee(t), s = n === (null == (i = t.ownerDocument) ? void 0 : i.body), o = Wt(n),
+ r = s ? [o].concat(o.visualViewport || [], we(n) ? n : []) : n, a = e.concat(r);
+ return s ? a : a.concat(Ae(Zt(r)))
+ }
+
+ function Te(t) {
+ return Object.assign({}, t, {left: t.x, top: t.y, right: t.x + t.width, bottom: t.y + t.height})
+ }
+
+ function Oe(t, e) {
+ return e === Tt ? Te(function (t) {
+ var e = Wt(t), i = Gt(t), n = e.visualViewport, s = i.clientWidth, o = i.clientHeight, r = 0, a = 0;
+ return n && (s = n.width, o = n.height, /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || (r = n.offsetLeft, a = n.offsetTop)), {
+ width: s,
+ height: o,
+ x: r + ye(t),
+ y: a
+ }
+ }(t)) : zt(e) ? function (t) {
+ var e = Vt(t);
+ return e.top = e.top + t.clientTop, e.left = e.left + t.clientLeft, e.bottom = e.top + t.clientHeight, e.right = e.left + t.clientWidth, e.width = t.clientWidth, e.height = t.clientHeight, e.x = e.left, e.y = e.top, e
+ }(e) : Te(function (t) {
+ var e, i = Gt(t), n = ve(t), s = null == (e = t.ownerDocument) ? void 0 : e.body,
+ o = ie(i.scrollWidth, i.clientWidth, s ? s.scrollWidth : 0, s ? s.clientWidth : 0),
+ r = ie(i.scrollHeight, i.clientHeight, s ? s.scrollHeight : 0, s ? s.clientHeight : 0),
+ a = -n.scrollLeft + ye(t), l = -n.scrollTop;
+ return "rtl" === Yt(s || i).direction && (a += ie(i.clientWidth, s ? s.clientWidth : 0) - o), {
+ width: o,
+ height: r,
+ x: a,
+ y: l
+ }
+ }(Gt(t)))
+ }
+
+ function Ce(t) {
+ var e, i = t.reference, n = t.element, s = t.placement, o = s ? Ut(s) : null, r = s ? ce(s) : null,
+ a = i.x + i.width / 2 - n.width / 2, l = i.y + i.height / 2 - n.height / 2;
+ switch (o) {
+ case mt:
+ e = {x: a, y: i.y - n.height};
+ break;
+ case gt:
+ e = {x: a, y: i.y + i.height};
+ break;
+ case _t:
+ e = {x: i.x + i.width, y: l};
+ break;
+ case bt:
+ e = {x: i.x - n.width, y: l};
+ break;
+ default:
+ e = {x: i.x, y: i.y}
+ }
+ var c = o ? ee(o) : null;
+ if (null != c) {
+ var h = "y" === c ? "height" : "width";
+ switch (r) {
+ case wt:
+ e[c] = e[c] - (i[h] / 2 - n[h] / 2);
+ break;
+ case Et:
+ e[c] = e[c] + (i[h] / 2 - n[h] / 2)
+ }
+ }
+ return e
+ }
+
+ function ke(t, e) {
+ void 0 === e && (e = {});
+ var i = e, n = i.placement, s = void 0 === n ? t.placement : n, o = i.boundary, r = void 0 === o ? At : o,
+ a = i.rootBoundary, l = void 0 === a ? Tt : a, c = i.elementContext, h = void 0 === c ? Ot : c,
+ d = i.altBoundary, u = void 0 !== d && d, f = i.padding, p = void 0 === f ? 0 : f,
+ m = re("number" != typeof p ? p : ae(p, yt)), g = h === Ot ? Ct : Ot, _ = t.rects.popper,
+ b = t.elements[u ? g : h], v = function (t, e, i) {
+ var n = "clippingParents" === e ? function (t) {
+ var e = Ae(Zt(t)), i = ["absolute", "fixed"].indexOf(Yt(t).position) >= 0 && zt(t) ? te(t) : t;
+ return $t(i) ? e.filter((function (t) {
+ return $t(t) && Xt(t, i) && "body" !== Rt(t)
+ })) : []
+ }(t) : [].concat(e), s = [].concat(n, [i]), o = s[0], r = s.reduce((function (e, i) {
+ var n = Oe(t, i);
+ return e.top = ie(n.top, e.top), e.right = ne(n.right, e.right), e.bottom = ne(n.bottom, e.bottom), e.left = ie(n.left, e.left), e
+ }), Oe(t, o));
+ return r.width = r.right - r.left, r.height = r.bottom - r.top, r.x = r.left, r.y = r.top, r
+ }($t(b) ? b : b.contextElement || Gt(t.elements.popper), r, l), y = Vt(t.elements.reference),
+ w = Ce({reference: y, element: _, strategy: "absolute", placement: s}), E = Te(Object.assign({}, _, w)),
+ A = h === Ot ? E : y, T = {
+ top: v.top - A.top + m.top,
+ bottom: A.bottom - v.bottom + m.bottom,
+ left: v.left - A.left + m.left,
+ right: A.right - v.right + m.right
+ }, O = t.modifiersData.offset;
+ if (h === Ot && O) {
+ var C = O[s];
+ Object.keys(T).forEach((function (t) {
+ var e = [_t, gt].indexOf(t) >= 0 ? 1 : -1, i = [mt, gt].indexOf(t) >= 0 ? "y" : "x";
+ T[t] += C[i] * e
+ }))
+ }
+ return T
+ }
+
+ function Le(t, e) {
+ void 0 === e && (e = {});
+ var i = e, n = i.placement, s = i.boundary, o = i.rootBoundary, r = i.padding, a = i.flipVariations,
+ l = i.allowedAutoPlacements, c = void 0 === l ? Lt : l, h = ce(n),
+ d = h ? a ? kt : kt.filter((function (t) {
+ return ce(t) === h
+ })) : yt, u = d.filter((function (t) {
+ return c.indexOf(t) >= 0
+ }));
+ 0 === u.length && (u = d);
+ var f = u.reduce((function (e, i) {
+ return e[i] = ke(t, {placement: i, boundary: s, rootBoundary: o, padding: r})[Ut(i)], e
+ }), {});
+ return Object.keys(f).sort((function (t, e) {
+ return f[t] - f[e]
+ }))
+ }
+
+ const xe = {
+ name: "flip", enabled: !0, phase: "main", fn: function (t) {
+ var e = t.state, i = t.options, n = t.name;
+ if (!e.modifiersData[n]._skip) {
+ for (var s = i.mainAxis, o = void 0 === s || s, r = i.altAxis, a = void 0 === r || r, l = i.fallbackPlacements, c = i.padding, h = i.boundary, d = i.rootBoundary, u = i.altBoundary, f = i.flipVariations, p = void 0 === f || f, m = i.allowedAutoPlacements, g = e.options.placement, _ = Ut(g), b = l || (_ !== g && p ? function (t) {
+ if (Ut(t) === vt) return [];
+ var e = ge(t);
+ return [be(t), e, be(e)]
+ }(g) : [ge(g)]), v = [g].concat(b).reduce((function (t, i) {
+ return t.concat(Ut(i) === vt ? Le(e, {
+ placement: i,
+ boundary: h,
+ rootBoundary: d,
+ padding: c,
+ flipVariations: p,
+ allowedAutoPlacements: m
+ }) : i)
+ }), []), y = e.rects.reference, w = e.rects.popper, E = new Map, A = !0, T = v[0], O = 0; O < v.length; O++) {
+ var C = v[O], k = Ut(C), L = ce(C) === wt, x = [mt, gt].indexOf(k) >= 0, D = x ? "width" : "height",
+ S = ke(e, {placement: C, boundary: h, rootBoundary: d, altBoundary: u, padding: c}),
+ N = x ? L ? _t : bt : L ? gt : mt;
+ y[D] > w[D] && (N = ge(N));
+ var I = ge(N), P = [];
+ if (o && P.push(S[k] <= 0), a && P.push(S[N] <= 0, S[I] <= 0), P.every((function (t) {
+ return t
+ }))) {
+ T = C, A = !1;
+ break
+ }
+ E.set(C, P)
+ }
+ if (A) for (var j = function (t) {
+ var e = v.find((function (e) {
+ var i = E.get(e);
+ if (i) return i.slice(0, t).every((function (t) {
+ return t
+ }))
+ }));
+ if (e) return T = e, "break"
+ }, M = p ? 3 : 1; M > 0 && "break" !== j(M); M--) ;
+ e.placement !== T && (e.modifiersData[n]._skip = !0, e.placement = T, e.reset = !0)
+ }
+ }, requiresIfExists: ["offset"], data: {_skip: !1}
+ };
+
+ function De(t, e, i) {
+ return void 0 === i && (i = {x: 0, y: 0}), {
+ top: t.top - e.height - i.y,
+ right: t.right - e.width + i.x,
+ bottom: t.bottom - e.height + i.y,
+ left: t.left - e.width - i.x
+ }
+ }
+
+ function Se(t) {
+ return [mt, _t, gt, bt].some((function (e) {
+ return t[e] >= 0
+ }))
+ }
+
+ const Ne = {
+ name: "hide", enabled: !0, phase: "main", requiresIfExists: ["preventOverflow"], fn: function (t) {
+ var e = t.state, i = t.name, n = e.rects.reference, s = e.rects.popper, o = e.modifiersData.preventOverflow,
+ r = ke(e, {elementContext: "reference"}), a = ke(e, {altBoundary: !0}), l = De(r, n), c = De(a, s, o),
+ h = Se(l), d = Se(c);
+ e.modifiersData[i] = {
+ referenceClippingOffsets: l,
+ popperEscapeOffsets: c,
+ isReferenceHidden: h,
+ hasPopperEscaped: d
+ }, e.attributes.popper = Object.assign({}, e.attributes.popper, {
+ "data-popper-reference-hidden": h,
+ "data-popper-escaped": d
+ })
+ }
+ }, Ie = {
+ name: "offset", enabled: !0, phase: "main", requires: ["popperOffsets"], fn: function (t) {
+ var e = t.state, i = t.options, n = t.name, s = i.offset, o = void 0 === s ? [0, 0] : s,
+ r = Lt.reduce((function (t, i) {
+ return t[i] = function (t, e, i) {
+ var n = Ut(t), s = [bt, mt].indexOf(n) >= 0 ? -1 : 1,
+ o = "function" == typeof i ? i(Object.assign({}, e, {placement: t})) : i, r = o[0],
+ a = o[1];
+ return r = r || 0, a = (a || 0) * s, [bt, _t].indexOf(n) >= 0 ? {x: a, y: r} : {x: r, y: a}
+ }(i, e.rects, o), t
+ }), {}), a = r[e.placement], l = a.x, c = a.y;
+ null != e.modifiersData.popperOffsets && (e.modifiersData.popperOffsets.x += l, e.modifiersData.popperOffsets.y += c), e.modifiersData[n] = r
+ }
+ }, Pe = {
+ name: "popperOffsets", enabled: !0, phase: "read", fn: function (t) {
+ var e = t.state, i = t.name;
+ e.modifiersData[i] = Ce({
+ reference: e.rects.reference,
+ element: e.rects.popper,
+ strategy: "absolute",
+ placement: e.placement
+ })
+ }, data: {}
+ }, je = {
+ name: "preventOverflow", enabled: !0, phase: "main", fn: function (t) {
+ var e = t.state, i = t.options, n = t.name, s = i.mainAxis, o = void 0 === s || s, r = i.altAxis,
+ a = void 0 !== r && r, l = i.boundary, c = i.rootBoundary, h = i.altBoundary, d = i.padding,
+ u = i.tether, f = void 0 === u || u, p = i.tetherOffset, m = void 0 === p ? 0 : p,
+ g = ke(e, {boundary: l, rootBoundary: c, padding: d, altBoundary: h}), _ = Ut(e.placement),
+ b = ce(e.placement), v = !b, y = ee(_), w = "x" === y ? "y" : "x", E = e.modifiersData.popperOffsets,
+ A = e.rects.reference, T = e.rects.popper,
+ O = "function" == typeof m ? m(Object.assign({}, e.rects, {placement: e.placement})) : m,
+ C = {x: 0, y: 0};
+ if (E) {
+ if (o || a) {
+ var k = "y" === y ? mt : bt, L = "y" === y ? gt : _t, x = "y" === y ? "height" : "width", D = E[y],
+ S = E[y] + g[k], N = E[y] - g[L], I = f ? -T[x] / 2 : 0, P = b === wt ? A[x] : T[x],
+ j = b === wt ? -T[x] : -A[x], M = e.elements.arrow, H = f && M ? Kt(M) : {width: 0, height: 0},
+ B = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : {
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0
+ }, R = B[k], W = B[L], $ = oe(0, A[x], H[x]), z = v ? A[x] / 2 - I - $ - R - O : P - $ - R - O,
+ q = v ? -A[x] / 2 + I + $ + W + O : j + $ + W + O, F = e.elements.arrow && te(e.elements.arrow),
+ U = F ? "y" === y ? F.clientTop || 0 : F.clientLeft || 0 : 0,
+ V = e.modifiersData.offset ? e.modifiersData.offset[e.placement][y] : 0, K = E[y] + z - V - U,
+ X = E[y] + q - V;
+ if (o) {
+ var Y = oe(f ? ne(S, K) : S, D, f ? ie(N, X) : N);
+ E[y] = Y, C[y] = Y - D
+ }
+ if (a) {
+ var Q = "x" === y ? mt : bt, G = "x" === y ? gt : _t, Z = E[w], J = Z + g[Q], tt = Z - g[G],
+ et = oe(f ? ne(J, K) : J, Z, f ? ie(tt, X) : tt);
+ E[w] = et, C[w] = et - Z
+ }
+ }
+ e.modifiersData[n] = C
+ }
+ }, requiresIfExists: ["offset"]
+ };
+
+ function Me(t, e, i) {
+ void 0 === i && (i = !1);
+ var n = zt(e);
+ zt(e) && function (t) {
+ var e = t.getBoundingClientRect();
+ e.width, t.offsetWidth, e.height, t.offsetHeight
+ }(e);
+ var s, o, r = Gt(e), a = Vt(t), l = {scrollLeft: 0, scrollTop: 0}, c = {x: 0, y: 0};
+ return (n || !n && !i) && (("body" !== Rt(e) || we(r)) && (l = (s = e) !== Wt(s) && zt(s) ? {
+ scrollLeft: (o = s).scrollLeft,
+ scrollTop: o.scrollTop
+ } : ve(s)), zt(e) ? ((c = Vt(e)).x += e.clientLeft, c.y += e.clientTop) : r && (c.x = ye(r))), {
+ x: a.left + l.scrollLeft - c.x,
+ y: a.top + l.scrollTop - c.y,
+ width: a.width,
+ height: a.height
+ }
+ }
+
+ function He(t) {
+ var e = new Map, i = new Set, n = [];
+
+ function s(t) {
+ i.add(t.name), [].concat(t.requires || [], t.requiresIfExists || []).forEach((function (t) {
+ if (!i.has(t)) {
+ var n = e.get(t);
+ n && s(n)
+ }
+ })), n.push(t)
+ }
+
+ return t.forEach((function (t) {
+ e.set(t.name, t)
+ })), t.forEach((function (t) {
+ i.has(t.name) || s(t)
+ })), n
+ }
+
+ var Be = {placement: "bottom", modifiers: [], strategy: "absolute"};
+
+ function Re() {
+ for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i];
+ return !e.some((function (t) {
+ return !(t && "function" == typeof t.getBoundingClientRect)
+ }))
+ }
+
+ function We(t) {
+ void 0 === t && (t = {});
+ var e = t, i = e.defaultModifiers, n = void 0 === i ? [] : i, s = e.defaultOptions, o = void 0 === s ? Be : s;
+ return function (t, e, i) {
+ void 0 === i && (i = o);
+ var s, r, a = {
+ placement: "bottom",
+ orderedModifiers: [],
+ options: Object.assign({}, Be, o),
+ modifiersData: {},
+ elements: {reference: t, popper: e},
+ attributes: {},
+ styles: {}
+ }, l = [], c = !1, h = {
+ state: a, setOptions: function (i) {
+ var s = "function" == typeof i ? i(a.options) : i;
+ d(), a.options = Object.assign({}, o, a.options, s), a.scrollParents = {
+ reference: $t(t) ? Ae(t) : t.contextElement ? Ae(t.contextElement) : [],
+ popper: Ae(e)
+ };
+ var r, c, u = function (t) {
+ var e = He(t);
+ return Bt.reduce((function (t, i) {
+ return t.concat(e.filter((function (t) {
+ return t.phase === i
+ })))
+ }), [])
+ }((r = [].concat(n, a.options.modifiers), c = r.reduce((function (t, e) {
+ var i = t[e.name];
+ return t[e.name] = i ? Object.assign({}, i, e, {
+ options: Object.assign({}, i.options, e.options),
+ data: Object.assign({}, i.data, e.data)
+ }) : e, t
+ }), {}), Object.keys(c).map((function (t) {
+ return c[t]
+ }))));
+ return a.orderedModifiers = u.filter((function (t) {
+ return t.enabled
+ })), a.orderedModifiers.forEach((function (t) {
+ var e = t.name, i = t.options, n = void 0 === i ? {} : i, s = t.effect;
+ if ("function" == typeof s) {
+ var o = s({state: a, name: e, instance: h, options: n});
+ l.push(o || function () {
+ })
+ }
+ })), h.update()
+ }, forceUpdate: function () {
+ if (!c) {
+ var t = a.elements, e = t.reference, i = t.popper;
+ if (Re(e, i)) {
+ a.rects = {
+ reference: Me(e, te(i), "fixed" === a.options.strategy),
+ popper: Kt(i)
+ }, a.reset = !1, a.placement = a.options.placement, a.orderedModifiers.forEach((function (t) {
+ return a.modifiersData[t.name] = Object.assign({}, t.data)
+ }));
+ for (var n = 0; n < a.orderedModifiers.length; n++) if (!0 !== a.reset) {
+ var s = a.orderedModifiers[n], o = s.fn, r = s.options, l = void 0 === r ? {} : r,
+ d = s.name;
+ "function" == typeof o && (a = o({state: a, options: l, name: d, instance: h}) || a)
+ } else a.reset = !1, n = -1
+ }
+ }
+ }, update: (s = function () {
+ return new Promise((function (t) {
+ h.forceUpdate(), t(a)
+ }))
+ }, function () {
+ return r || (r = new Promise((function (t) {
+ Promise.resolve().then((function () {
+ r = void 0, t(s())
+ }))
+ }))), r
+ }), destroy: function () {
+ d(), c = !0
+ }
+ };
+ if (!Re(t, e)) return h;
+
+ function d() {
+ l.forEach((function (t) {
+ return t()
+ })), l = []
+ }
+
+ return h.setOptions(i).then((function (t) {
+ !c && i.onFirstUpdate && i.onFirstUpdate(t)
+ })), h
+ }
+ }
+
+ var $e = We(), ze = We({defaultModifiers: [pe, Pe, ue, Ft]}),
+ qe = We({defaultModifiers: [pe, Pe, ue, Ft, Ie, xe, je, le, Ne]});
+ const Fe = Object.freeze({
+ __proto__: null,
+ popperGenerator: We,
+ detectOverflow: ke,
+ createPopperBase: $e,
+ createPopper: qe,
+ createPopperLite: ze,
+ top: mt,
+ bottom: gt,
+ right: _t,
+ left: bt,
+ auto: vt,
+ basePlacements: yt,
+ start: wt,
+ end: Et,
+ clippingParents: At,
+ viewport: Tt,
+ popper: Ot,
+ reference: Ct,
+ variationPlacements: kt,
+ placements: Lt,
+ beforeRead: xt,
+ read: Dt,
+ afterRead: St,
+ beforeMain: Nt,
+ main: It,
+ afterMain: Pt,
+ beforeWrite: jt,
+ write: Mt,
+ afterWrite: Ht,
+ modifierPhases: Bt,
+ applyStyles: Ft,
+ arrow: le,
+ computeStyles: ue,
+ eventListeners: pe,
+ flip: xe,
+ hide: Ne,
+ offset: Ie,
+ popperOffsets: Pe,
+ preventOverflow: je
+ }), Ue = "dropdown", Ve = "Escape", Ke = "Space", Xe = "ArrowUp", Ye = "ArrowDown",
+ Qe = new RegExp("ArrowUp|ArrowDown|Escape"), Ge = "click.bs.dropdown.data-api",
+ Ze = "keydown.bs.dropdown.data-api", Je = "show", ti = '[data-bs-toggle="dropdown"]', ei = ".dropdown-menu",
+ ii = m() ? "top-end" : "top-start", ni = m() ? "top-start" : "top-end",
+ si = m() ? "bottom-end" : "bottom-start", oi = m() ? "bottom-start" : "bottom-end",
+ ri = m() ? "left-start" : "right-start", ai = m() ? "right-start" : "left-start", li = {
+ offset: [0, 2],
+ boundary: "clippingParents",
+ reference: "toggle",
+ display: "dynamic",
+ popperConfig: null,
+ autoClose: !0
+ }, ci = {
+ offset: "(array|string|function)",
+ boundary: "(string|element)",
+ reference: "(string|element|object)",
+ display: "string",
+ popperConfig: "(null|object|function)",
+ autoClose: "(boolean|string)"
+ };
+
+ class hi extends B {
+ constructor(t, e) {
+ super(t), this._popper = null, this._config = this._getConfig(e), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar()
+ }
+
+ static get Default() {
+ return li
+ }
+
+ static get DefaultType() {
+ return ci
+ }
+
+ static get NAME() {
+ return Ue
+ }
+
+ toggle() {
+ return this._isShown() ? this.hide() : this.show()
+ }
+
+ show() {
+ if (c(this._element) || this._isShown(this._menu)) return;
+ const t = {relatedTarget: this._element};
+ if (j.trigger(this._element, "show.bs.dropdown", t).defaultPrevented) return;
+ const e = hi.getParentFromElement(this._element);
+ this._inNavbar ? U.setDataAttribute(this._menu, "popper", "none") : this._createPopper(e), "ontouchstart" in document.documentElement && !e.closest(".navbar-nav") && [].concat(...document.body.children).forEach((t => j.on(t, "mouseover", d))), this._element.focus(), this._element.setAttribute("aria-expanded", !0), this._menu.classList.add(Je), this._element.classList.add(Je), j.trigger(this._element, "shown.bs.dropdown", t)
+ }
+
+ hide() {
+ if (c(this._element) || !this._isShown(this._menu)) return;
+ const t = {relatedTarget: this._element};
+ this._completeHide(t)
+ }
+
+ dispose() {
+ this._popper && this._popper.destroy(), super.dispose()
+ }
+
+ update() {
+ this._inNavbar = this._detectNavbar(), this._popper && this._popper.update()
+ }
+
+ _completeHide(t) {
+ j.trigger(this._element, "hide.bs.dropdown", t).defaultPrevented || ("ontouchstart" in document.documentElement && [].concat(...document.body.children).forEach((t => j.off(t, "mouseover", d))), this._popper && this._popper.destroy(), this._menu.classList.remove(Je), this._element.classList.remove(Je), this._element.setAttribute("aria-expanded", "false"), U.removeDataAttribute(this._menu, "popper"), j.trigger(this._element, "hidden.bs.dropdown", t))
+ }
+
+ _getConfig(t) {
+ if (t = {...this.constructor.Default, ...U.getDataAttributes(this._element), ...t}, a(Ue, t, this.constructor.DefaultType), "object" == typeof t.reference && !o(t.reference) && "function" != typeof t.reference.getBoundingClientRect) throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
+ return t
+ }
+
+ _createPopper(t) {
+ if (void 0 === Fe) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");
+ let e = this._element;
+ "parent" === this._config.reference ? e = t : o(this._config.reference) ? e = r(this._config.reference) : "object" == typeof this._config.reference && (e = this._config.reference);
+ const i = this._getPopperConfig(),
+ n = i.modifiers.find((t => "applyStyles" === t.name && !1 === t.enabled));
+ this._popper = qe(e, this._menu, i), n && U.setDataAttribute(this._menu, "popper", "static")
+ }
+
+ _isShown(t = this._element) {
+ return t.classList.contains(Je)
+ }
+
+ _getMenuElement() {
+ return V.next(this._element, ei)[0]
+ }
+
+ _getPlacement() {
+ const t = this._element.parentNode;
+ if (t.classList.contains("dropend")) return ri;
+ if (t.classList.contains("dropstart")) return ai;
+ const e = "end" === getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();
+ return t.classList.contains("dropup") ? e ? ni : ii : e ? oi : si
+ }
+
+ _detectNavbar() {
+ return null !== this._element.closest(".navbar")
+ }
+
+ _getOffset() {
+ const {offset: t} = this._config;
+ return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t
+ }
+
+ _getPopperConfig() {
+ const t = {
+ placement: this._getPlacement(),
+ modifiers: [{name: "preventOverflow", options: {boundary: this._config.boundary}}, {
+ name: "offset",
+ options: {offset: this._getOffset()}
+ }]
+ };
+ return "static" === this._config.display && (t.modifiers = [{
+ name: "applyStyles",
+ enabled: !1
+ }]), {...t, ..."function" == typeof this._config.popperConfig ? this._config.popperConfig(t) : this._config.popperConfig}
+ }
+
+ _selectMenuItem({key: t, target: e}) {
+ const i = V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", this._menu).filter(l);
+ i.length && v(i, e, t === Ye, !i.includes(e)).focus()
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = hi.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]()
+ }
+ }))
+ }
+
+ static clearMenus(t) {
+ if (t && (2 === t.button || "keyup" === t.type && "Tab" !== t.key)) return;
+ const e = V.find(ti);
+ for (let i = 0, n = e.length; i < n; i++) {
+ const n = hi.getInstance(e[i]);
+ if (!n || !1 === n._config.autoClose) continue;
+ if (!n._isShown()) continue;
+ const s = {relatedTarget: n._element};
+ if (t) {
+ const e = t.composedPath(), i = e.includes(n._menu);
+ if (e.includes(n._element) || "inside" === n._config.autoClose && !i || "outside" === n._config.autoClose && i) continue;
+ if (n._menu.contains(t.target) && ("keyup" === t.type && "Tab" === t.key || /input|select|option|textarea|form/i.test(t.target.tagName))) continue;
+ "click" === t.type && (s.clickEvent = t)
+ }
+ n._completeHide(s)
+ }
+ }
+
+ static getParentFromElement(t) {
+ return n(t) || t.parentNode
+ }
+
+ static dataApiKeydownHandler(t) {
+ if (/input|textarea/i.test(t.target.tagName) ? t.key === Ke || t.key !== Ve && (t.key !== Ye && t.key !== Xe || t.target.closest(ei)) : !Qe.test(t.key)) return;
+ const e = this.classList.contains(Je);
+ if (!e && t.key === Ve) return;
+ if (t.preventDefault(), t.stopPropagation(), c(this)) return;
+ const i = this.matches(ti) ? this : V.prev(this, ti)[0], n = hi.getOrCreateInstance(i);
+ if (t.key !== Ve) return t.key === Xe || t.key === Ye ? (e || n.show(), void n._selectMenuItem(t)) : void (e && t.key !== Ke || hi.clearMenus());
+ n.hide()
+ }
+ }
+
+ j.on(document, Ze, ti, hi.dataApiKeydownHandler), j.on(document, Ze, ei, hi.dataApiKeydownHandler), j.on(document, Ge, hi.clearMenus), j.on(document, "keyup.bs.dropdown.data-api", hi.clearMenus), j.on(document, Ge, ti, (function (t) {
+ t.preventDefault(), hi.getOrCreateInstance(this).toggle()
+ })), g(hi);
+ const di = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", ui = ".sticky-top";
+
+ class fi {
+ constructor() {
+ this._element = document.body
+ }
+
+ getWidth() {
+ const t = document.documentElement.clientWidth;
+ return Math.abs(window.innerWidth - t)
+ }
+
+ hide() {
+ const t = this.getWidth();
+ this._disableOverFlow(), this._setElementAttributes(this._element, "paddingRight", (e => e + t)), this._setElementAttributes(di, "paddingRight", (e => e + t)), this._setElementAttributes(ui, "marginRight", (e => e - t))
+ }
+
+ _disableOverFlow() {
+ this._saveInitialAttribute(this._element, "overflow"), this._element.style.overflow = "hidden"
+ }
+
+ _setElementAttributes(t, e, i) {
+ const n = this.getWidth();
+ this._applyManipulationCallback(t, (t => {
+ if (t !== this._element && window.innerWidth > t.clientWidth + n) return;
+ this._saveInitialAttribute(t, e);
+ const s = window.getComputedStyle(t)[e];
+ t.style[e] = `${i(Number.parseFloat(s))}px`
+ }))
+ }
+
+ reset() {
+ this._resetElementAttributes(this._element, "overflow"), this._resetElementAttributes(this._element, "paddingRight"), this._resetElementAttributes(di, "paddingRight"), this._resetElementAttributes(ui, "marginRight")
+ }
+
+ _saveInitialAttribute(t, e) {
+ const i = t.style[e];
+ i && U.setDataAttribute(t, e, i)
+ }
+
+ _resetElementAttributes(t, e) {
+ this._applyManipulationCallback(t, (t => {
+ const i = U.getDataAttribute(t, e);
+ void 0 === i ? t.style.removeProperty(e) : (U.removeDataAttribute(t, e), t.style[e] = i)
+ }))
+ }
+
+ _applyManipulationCallback(t, e) {
+ o(t) ? e(t) : V.find(t, this._element).forEach(e)
+ }
+
+ isOverflowing() {
+ return this.getWidth() > 0
+ }
+ }
+
+ const pi = {className: "modal-backdrop", isVisible: !0, isAnimated: !1, rootElement: "body", clickCallback: null},
+ mi = {
+ className: "string",
+ isVisible: "boolean",
+ isAnimated: "boolean",
+ rootElement: "(element|string)",
+ clickCallback: "(function|null)"
+ }, gi = "show", _i = "mousedown.bs.backdrop";
+
+ class bi {
+ constructor(t) {
+ this._config = this._getConfig(t), this._isAppended = !1, this._element = null
+ }
+
+ show(t) {
+ this._config.isVisible ? (this._append(), this._config.isAnimated && u(this._getElement()), this._getElement().classList.add(gi), this._emulateAnimation((() => {
+ _(t)
+ }))) : _(t)
+ }
+
+ hide(t) {
+ this._config.isVisible ? (this._getElement().classList.remove(gi), this._emulateAnimation((() => {
+ this.dispose(), _(t)
+ }))) : _(t)
+ }
+
+ _getElement() {
+ if (!this._element) {
+ const t = document.createElement("div");
+ t.className = this._config.className, this._config.isAnimated && t.classList.add("fade"), this._element = t
+ }
+ return this._element
+ }
+
+ _getConfig(t) {
+ return (t = {...pi, ..."object" == typeof t ? t : {}}).rootElement = r(t.rootElement), a("backdrop", t, mi), t
+ }
+
+ _append() {
+ this._isAppended || (this._config.rootElement.append(this._getElement()), j.on(this._getElement(), _i, (() => {
+ _(this._config.clickCallback)
+ })), this._isAppended = !0)
+ }
+
+ dispose() {
+ this._isAppended && (j.off(this._element, _i), this._element.remove(), this._isAppended = !1)
+ }
+
+ _emulateAnimation(t) {
+ b(t, this._getElement(), this._config.isAnimated)
+ }
+ }
+
+ const vi = {trapElement: null, autofocus: !0}, yi = {trapElement: "element", autofocus: "boolean"},
+ wi = ".bs.focustrap", Ei = "backward";
+
+ class Ai {
+ constructor(t) {
+ this._config = this._getConfig(t), this._isActive = !1, this._lastTabNavDirection = null
+ }
+
+ activate() {
+ const {trapElement: t, autofocus: e} = this._config;
+ this._isActive || (e && t.focus(), j.off(document, wi), j.on(document, "focusin.bs.focustrap", (t => this._handleFocusin(t))), j.on(document, "keydown.tab.bs.focustrap", (t => this._handleKeydown(t))), this._isActive = !0)
+ }
+
+ deactivate() {
+ this._isActive && (this._isActive = !1, j.off(document, wi))
+ }
+
+ _handleFocusin(t) {
+ const {target: e} = t, {trapElement: i} = this._config;
+ if (e === document || e === i || i.contains(e)) return;
+ const n = V.focusableChildren(i);
+ 0 === n.length ? i.focus() : this._lastTabNavDirection === Ei ? n[n.length - 1].focus() : n[0].focus()
+ }
+
+ _handleKeydown(t) {
+ "Tab" === t.key && (this._lastTabNavDirection = t.shiftKey ? Ei : "forward")
+ }
+
+ _getConfig(t) {
+ return t = {...vi, ..."object" == typeof t ? t : {}}, a("focustrap", t, yi), t
+ }
+ }
+
+ const Ti = "modal", Oi = "Escape", Ci = {backdrop: !0, keyboard: !0, focus: !0},
+ ki = {backdrop: "(boolean|string)", keyboard: "boolean", focus: "boolean"}, Li = "hidden.bs.modal",
+ xi = "show.bs.modal", Di = "resize.bs.modal", Si = "click.dismiss.bs.modal", Ni = "keydown.dismiss.bs.modal",
+ Ii = "mousedown.dismiss.bs.modal", Pi = "modal-open", ji = "show", Mi = "modal-static";
+
+ class Hi extends B {
+ constructor(t, e) {
+ super(t), this._config = this._getConfig(e), this._dialog = V.findOne(".modal-dialog", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._ignoreBackdropClick = !1, this._isTransitioning = !1, this._scrollBar = new fi
+ }
+
+ static get Default() {
+ return Ci
+ }
+
+ static get NAME() {
+ return Ti
+ }
+
+ toggle(t) {
+ return this._isShown ? this.hide() : this.show(t)
+ }
+
+ show(t) {
+ this._isShown || this._isTransitioning || j.trigger(this._element, xi, {relatedTarget: t}).defaultPrevented || (this._isShown = !0, this._isAnimated() && (this._isTransitioning = !0), this._scrollBar.hide(), document.body.classList.add(Pi), this._adjustDialog(), this._setEscapeEvent(), this._setResizeEvent(), j.on(this._dialog, Ii, (() => {
+ j.one(this._element, "mouseup.dismiss.bs.modal", (t => {
+ t.target === this._element && (this._ignoreBackdropClick = !0)
+ }))
+ })), this._showBackdrop((() => this._showElement(t))))
+ }
+
+ hide() {
+ if (!this._isShown || this._isTransitioning) return;
+ if (j.trigger(this._element, "hide.bs.modal").defaultPrevented) return;
+ this._isShown = !1;
+ const t = this._isAnimated();
+ t && (this._isTransitioning = !0), this._setEscapeEvent(), this._setResizeEvent(), this._focustrap.deactivate(), this._element.classList.remove(ji), j.off(this._element, Si), j.off(this._dialog, Ii), this._queueCallback((() => this._hideModal()), this._element, t)
+ }
+
+ dispose() {
+ [window, this._dialog].forEach((t => j.off(t, ".bs.modal"))), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
+ }
+
+ handleUpdate() {
+ this._adjustDialog()
+ }
+
+ _initializeBackDrop() {
+ return new bi({isVisible: Boolean(this._config.backdrop), isAnimated: this._isAnimated()})
+ }
+
+ _initializeFocusTrap() {
+ return new Ai({trapElement: this._element})
+ }
+
+ _getConfig(t) {
+ return t = {...Ci, ...U.getDataAttributes(this._element), ..."object" == typeof t ? t : {}}, a(Ti, t, ki), t
+ }
+
+ _showElement(t) {
+ const e = this._isAnimated(), i = V.findOne(".modal-body", this._dialog);
+ this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.append(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.scrollTop = 0, i && (i.scrollTop = 0), e && u(this._element), this._element.classList.add(ji), this._queueCallback((() => {
+ this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, j.trigger(this._element, "shown.bs.modal", {relatedTarget: t})
+ }), this._dialog, e)
+ }
+
+ _setEscapeEvent() {
+ this._isShown ? j.on(this._element, Ni, (t => {
+ this._config.keyboard && t.key === Oi ? (t.preventDefault(), this.hide()) : this._config.keyboard || t.key !== Oi || this._triggerBackdropTransition()
+ })) : j.off(this._element, Ni)
+ }
+
+ _setResizeEvent() {
+ this._isShown ? j.on(window, Di, (() => this._adjustDialog())) : j.off(window, Di)
+ }
+
+ _hideModal() {
+ this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._backdrop.hide((() => {
+ document.body.classList.remove(Pi), this._resetAdjustments(), this._scrollBar.reset(), j.trigger(this._element, Li)
+ }))
+ }
+
+ _showBackdrop(t) {
+ j.on(this._element, Si, (t => {
+ this._ignoreBackdropClick ? this._ignoreBackdropClick = !1 : t.target === t.currentTarget && (!0 === this._config.backdrop ? this.hide() : "static" === this._config.backdrop && this._triggerBackdropTransition())
+ })), this._backdrop.show(t)
+ }
+
+ _isAnimated() {
+ return this._element.classList.contains("fade")
+ }
+
+ _triggerBackdropTransition() {
+ if (j.trigger(this._element, "hidePrevented.bs.modal").defaultPrevented) return;
+ const {classList: t, scrollHeight: e, style: i} = this._element,
+ n = e > document.documentElement.clientHeight;
+ !n && "hidden" === i.overflowY || t.contains(Mi) || (n || (i.overflowY = "hidden"), t.add(Mi), this._queueCallback((() => {
+ t.remove(Mi), n || this._queueCallback((() => {
+ i.overflowY = ""
+ }), this._dialog)
+ }), this._dialog), this._element.focus())
+ }
+
+ _adjustDialog() {
+ const t = this._element.scrollHeight > document.documentElement.clientHeight,
+ e = this._scrollBar.getWidth(), i = e > 0;
+ (!i && t && !m() || i && !t && m()) && (this._element.style.paddingLeft = `${e}px`), (i && !t && !m() || !i && t && m()) && (this._element.style.paddingRight = `${e}px`)
+ }
+
+ _resetAdjustments() {
+ this._element.style.paddingLeft = "", this._element.style.paddingRight = ""
+ }
+
+ static jQueryInterface(t, e) {
+ return this.each((function () {
+ const i = Hi.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`);
+ i[t](e)
+ }
+ }))
+ }
+ }
+
+ j.on(document, "click.bs.modal.data-api", '[data-bs-toggle="modal"]', (function (t) {
+ const e = n(this);
+ ["A", "AREA"].includes(this.tagName) && t.preventDefault(), j.one(e, xi, (t => {
+ t.defaultPrevented || j.one(e, Li, (() => {
+ l(this) && this.focus()
+ }))
+ }));
+ const i = V.findOne(".modal.show");
+ i && Hi.getInstance(i).hide(), Hi.getOrCreateInstance(e).toggle(this)
+ })), R(Hi), g(Hi);
+ const Bi = "offcanvas", Ri = {backdrop: !0, keyboard: !0, scroll: !1},
+ Wi = {backdrop: "boolean", keyboard: "boolean", scroll: "boolean"}, $i = "show", zi = ".offcanvas.show",
+ qi = "hidden.bs.offcanvas";
+
+ class Fi extends B {
+ constructor(t, e) {
+ super(t), this._config = this._getConfig(e), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners()
+ }
+
+ static get NAME() {
+ return Bi
+ }
+
+ static get Default() {
+ return Ri
+ }
+
+ toggle(t) {
+ return this._isShown ? this.hide() : this.show(t)
+ }
+
+ show(t) {
+ this._isShown || j.trigger(this._element, "show.bs.offcanvas", {relatedTarget: t}).defaultPrevented || (this._isShown = !0, this._element.style.visibility = "visible", this._backdrop.show(), this._config.scroll || (new fi).hide(), this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.classList.add($i), this._queueCallback((() => {
+ this._config.scroll || this._focustrap.activate(), j.trigger(this._element, "shown.bs.offcanvas", {relatedTarget: t})
+ }), this._element, !0))
+ }
+
+ hide() {
+ this._isShown && (j.trigger(this._element, "hide.bs.offcanvas").defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.remove($i), this._backdrop.hide(), this._queueCallback((() => {
+ this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._element.style.visibility = "hidden", this._config.scroll || (new fi).reset(), j.trigger(this._element, qi)
+ }), this._element, !0)))
+ }
+
+ dispose() {
+ this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
+ }
+
+ _getConfig(t) {
+ return t = {...Ri, ...U.getDataAttributes(this._element), ..."object" == typeof t ? t : {}}, a(Bi, t, Wi), t
+ }
+
+ _initializeBackDrop() {
+ return new bi({
+ className: "offcanvas-backdrop",
+ isVisible: this._config.backdrop,
+ isAnimated: !0,
+ rootElement: this._element.parentNode,
+ clickCallback: () => this.hide()
+ })
+ }
+
+ _initializeFocusTrap() {
+ return new Ai({trapElement: this._element})
+ }
+
+ _addEventListeners() {
+ j.on(this._element, "keydown.dismiss.bs.offcanvas", (t => {
+ this._config.keyboard && "Escape" === t.key && this.hide()
+ }))
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = Fi.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`);
+ e[t](this)
+ }
+ }))
+ }
+ }
+
+ j.on(document, "click.bs.offcanvas.data-api", '[data-bs-toggle="offcanvas"]', (function (t) {
+ const e = n(this);
+ if (["A", "AREA"].includes(this.tagName) && t.preventDefault(), c(this)) return;
+ j.one(e, qi, (() => {
+ l(this) && this.focus()
+ }));
+ const i = V.findOne(zi);
+ i && i !== e && Fi.getInstance(i).hide(), Fi.getOrCreateInstance(e).toggle(this)
+ })), j.on(window, "load.bs.offcanvas.data-api", (() => V.find(zi).forEach((t => Fi.getOrCreateInstance(t).show())))), R(Fi), g(Fi);
+ const Ui = new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]),
+ Vi = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,
+ Ki = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,
+ Xi = (t, e) => {
+ const i = t.nodeName.toLowerCase();
+ if (e.includes(i)) return !Ui.has(i) || Boolean(Vi.test(t.nodeValue) || Ki.test(t.nodeValue));
+ const n = e.filter((t => t instanceof RegExp));
+ for (let t = 0, e = n.length; t < e; t++) if (n[t].test(i)) return !0;
+ return !1
+ };
+
+ function Yi(t, e, i) {
+ if (!t.length) return t;
+ if (i && "function" == typeof i) return i(t);
+ const n = (new window.DOMParser).parseFromString(t, "text/html"),
+ s = [].concat(...n.body.querySelectorAll("*"));
+ for (let t = 0, i = s.length; t < i; t++) {
+ const i = s[t], n = i.nodeName.toLowerCase();
+ if (!Object.keys(e).includes(n)) {
+ i.remove();
+ continue
+ }
+ const o = [].concat(...i.attributes), r = [].concat(e["*"] || [], e[n] || []);
+ o.forEach((t => {
+ Xi(t, r) || i.removeAttribute(t.nodeName)
+ }))
+ }
+ return n.body.innerHTML
+ }
+
+ const Qi = "tooltip", Gi = new Set(["sanitize", "allowList", "sanitizeFn"]), Zi = {
+ animation: "boolean",
+ template: "string",
+ title: "(string|element|function)",
+ trigger: "string",
+ delay: "(number|object)",
+ html: "boolean",
+ selector: "(string|boolean)",
+ placement: "(string|function)",
+ offset: "(array|string|function)",
+ container: "(string|element|boolean)",
+ fallbackPlacements: "array",
+ boundary: "(string|element)",
+ customClass: "(string|function)",
+ sanitize: "boolean",
+ sanitizeFn: "(null|function)",
+ allowList: "object",
+ popperConfig: "(null|object|function)"
+ }, Ji = {AUTO: "auto", TOP: "top", RIGHT: m() ? "left" : "right", BOTTOM: "bottom", LEFT: m() ? "right" : "left"},
+ tn = {
+ animation: !0,
+ template: '',
+ trigger: "hover focus",
+ title: "",
+ delay: 0,
+ html: !1,
+ selector: !1,
+ placement: "top",
+ offset: [0, 0],
+ container: !1,
+ fallbackPlacements: ["top", "right", "bottom", "left"],
+ boundary: "clippingParents",
+ customClass: "",
+ sanitize: !0,
+ sanitizeFn: null,
+ allowList: {
+ "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i],
+ a: ["target", "href", "title", "rel"],
+ area: [],
+ b: [],
+ br: [],
+ col: [],
+ code: [],
+ div: [],
+ em: [],
+ hr: [],
+ h1: [],
+ h2: [],
+ h3: [],
+ h4: [],
+ h5: [],
+ h6: [],
+ i: [],
+ img: ["src", "srcset", "alt", "title", "width", "height"],
+ li: [],
+ ol: [],
+ p: [],
+ pre: [],
+ s: [],
+ small: [],
+ span: [],
+ sub: [],
+ sup: [],
+ strong: [],
+ u: [],
+ ul: []
+ },
+ popperConfig: null
+ }, en = {
+ HIDE: "hide.bs.tooltip",
+ HIDDEN: "hidden.bs.tooltip",
+ SHOW: "show.bs.tooltip",
+ SHOWN: "shown.bs.tooltip",
+ INSERTED: "inserted.bs.tooltip",
+ CLICK: "click.bs.tooltip",
+ FOCUSIN: "focusin.bs.tooltip",
+ FOCUSOUT: "focusout.bs.tooltip",
+ MOUSEENTER: "mouseenter.bs.tooltip",
+ MOUSELEAVE: "mouseleave.bs.tooltip"
+ }, nn = "fade", sn = "show", on = "show", rn = "out", an = ".tooltip-inner", ln = ".modal", cn = "hide.bs.modal",
+ hn = "hover", dn = "focus";
+
+ class un extends B {
+ constructor(t, e) {
+ if (void 0 === Fe) throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");
+ super(t), this._isEnabled = !0, this._timeout = 0, this._hoverState = "", this._activeTrigger = {}, this._popper = null, this._config = this._getConfig(e), this.tip = null, this._setListeners()
+ }
+
+ static get Default() {
+ return tn
+ }
+
+ static get NAME() {
+ return Qi
+ }
+
+ static get Event() {
+ return en
+ }
+
+ static get DefaultType() {
+ return Zi
+ }
+
+ enable() {
+ this._isEnabled = !0
+ }
+
+ disable() {
+ this._isEnabled = !1
+ }
+
+ toggleEnabled() {
+ this._isEnabled = !this._isEnabled
+ }
+
+ toggle(t) {
+ if (this._isEnabled) if (t) {
+ const e = this._initializeOnDelegatedTarget(t);
+ e._activeTrigger.click = !e._activeTrigger.click, e._isWithActiveTrigger() ? e._enter(null, e) : e._leave(null, e)
+ } else {
+ if (this.getTipElement().classList.contains(sn)) return void this._leave(null, this);
+ this._enter(null, this)
+ }
+ }
+
+ dispose() {
+ clearTimeout(this._timeout), j.off(this._element.closest(ln), cn, this._hideModalHandler), this.tip && this.tip.remove(), this._disposePopper(), super.dispose()
+ }
+
+ show() {
+ if ("none" === this._element.style.display) throw new Error("Please use show on visible elements");
+ if (!this.isWithContent() || !this._isEnabled) return;
+ const t = j.trigger(this._element, this.constructor.Event.SHOW), e = h(this._element),
+ i = null === e ? this._element.ownerDocument.documentElement.contains(this._element) : e.contains(this._element);
+ if (t.defaultPrevented || !i) return;
+ "tooltip" === this.constructor.NAME && this.tip && this.getTitle() !== this.tip.querySelector(an).innerHTML && (this._disposePopper(), this.tip.remove(), this.tip = null);
+ const n = this.getTipElement(), s = (t => {
+ do {
+ t += Math.floor(1e6 * Math.random())
+ } while (document.getElementById(t));
+ return t
+ })(this.constructor.NAME);
+ n.setAttribute("id", s), this._element.setAttribute("aria-describedby", s), this._config.animation && n.classList.add(nn);
+ const o = "function" == typeof this._config.placement ? this._config.placement.call(this, n, this._element) : this._config.placement,
+ r = this._getAttachment(o);
+ this._addAttachmentClass(r);
+ const {container: a} = this._config;
+ H.set(n, this.constructor.DATA_KEY, this), this._element.ownerDocument.documentElement.contains(this.tip) || (a.append(n), j.trigger(this._element, this.constructor.Event.INSERTED)), this._popper ? this._popper.update() : this._popper = qe(this._element, n, this._getPopperConfig(r)), n.classList.add(sn);
+ const l = this._resolvePossibleFunction(this._config.customClass);
+ l && n.classList.add(...l.split(" ")), "ontouchstart" in document.documentElement && [].concat(...document.body.children).forEach((t => {
+ j.on(t, "mouseover", d)
+ }));
+ const c = this.tip.classList.contains(nn);
+ this._queueCallback((() => {
+ const t = this._hoverState;
+ this._hoverState = null, j.trigger(this._element, this.constructor.Event.SHOWN), t === rn && this._leave(null, this)
+ }), this.tip, c)
+ }
+
+ hide() {
+ if (!this._popper) return;
+ const t = this.getTipElement();
+ if (j.trigger(this._element, this.constructor.Event.HIDE).defaultPrevented) return;
+ t.classList.remove(sn), "ontouchstart" in document.documentElement && [].concat(...document.body.children).forEach((t => j.off(t, "mouseover", d))), this._activeTrigger.click = !1, this._activeTrigger.focus = !1, this._activeTrigger.hover = !1;
+ const e = this.tip.classList.contains(nn);
+ this._queueCallback((() => {
+ this._isWithActiveTrigger() || (this._hoverState !== on && t.remove(), this._cleanTipClass(), this._element.removeAttribute("aria-describedby"), j.trigger(this._element, this.constructor.Event.HIDDEN), this._disposePopper())
+ }), this.tip, e), this._hoverState = ""
+ }
+
+ update() {
+ null !== this._popper && this._popper.update()
+ }
+
+ isWithContent() {
+ return Boolean(this.getTitle())
+ }
+
+ getTipElement() {
+ if (this.tip) return this.tip;
+ const t = document.createElement("div");
+ t.innerHTML = this._config.template;
+ const e = t.children[0];
+ return this.setContent(e), e.classList.remove(nn, sn), this.tip = e, this.tip
+ }
+
+ setContent(t) {
+ this._sanitizeAndSetContent(t, this.getTitle(), an)
+ }
+
+ _sanitizeAndSetContent(t, e, i) {
+ const n = V.findOne(i, t);
+ e || !n ? this.setElementContent(n, e) : n.remove()
+ }
+
+ setElementContent(t, e) {
+ if (null !== t) return o(e) ? (e = r(e), void (this._config.html ? e.parentNode !== t && (t.innerHTML = "", t.append(e)) : t.textContent = e.textContent)) : void (this._config.html ? (this._config.sanitize && (e = Yi(e, this._config.allowList, this._config.sanitizeFn)), t.innerHTML = e) : t.textContent = e)
+ }
+
+ getTitle() {
+ const t = this._element.getAttribute("data-bs-original-title") || this._config.title;
+ return this._resolvePossibleFunction(t)
+ }
+
+ updateAttachment(t) {
+ return "right" === t ? "end" : "left" === t ? "start" : t
+ }
+
+ _initializeOnDelegatedTarget(t, e) {
+ return e || this.constructor.getOrCreateInstance(t.delegateTarget, this._getDelegateConfig())
+ }
+
+ _getOffset() {
+ const {offset: t} = this._config;
+ return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t
+ }
+
+ _resolvePossibleFunction(t) {
+ return "function" == typeof t ? t.call(this._element) : t
+ }
+
+ _getPopperConfig(t) {
+ const e = {
+ placement: t,
+ modifiers: [{
+ name: "flip",
+ options: {fallbackPlacements: this._config.fallbackPlacements}
+ }, {name: "offset", options: {offset: this._getOffset()}}, {
+ name: "preventOverflow",
+ options: {boundary: this._config.boundary}
+ }, {name: "arrow", options: {element: `.${this.constructor.NAME}-arrow`}}, {
+ name: "onChange",
+ enabled: !0,
+ phase: "afterWrite",
+ fn: t => this._handlePopperPlacementChange(t)
+ }],
+ onFirstUpdate: t => {
+ t.options.placement !== t.placement && this._handlePopperPlacementChange(t)
+ }
+ };
+ return {...e, ..."function" == typeof this._config.popperConfig ? this._config.popperConfig(e) : this._config.popperConfig}
+ }
+
+ _addAttachmentClass(t) {
+ this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)
+ }
+
+ _getAttachment(t) {
+ return Ji[t.toUpperCase()]
+ }
+
+ _setListeners() {
+ this._config.trigger.split(" ").forEach((t => {
+ if ("click" === t) j.on(this._element, this.constructor.Event.CLICK, this._config.selector, (t => this.toggle(t))); else if ("manual" !== t) {
+ const e = t === hn ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN,
+ i = t === hn ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
+ j.on(this._element, e, this._config.selector, (t => this._enter(t))), j.on(this._element, i, this._config.selector, (t => this._leave(t)))
+ }
+ })), this._hideModalHandler = () => {
+ this._element && this.hide()
+ }, j.on(this._element.closest(ln), cn, this._hideModalHandler), this._config.selector ? this._config = {
+ ...this._config,
+ trigger: "manual",
+ selector: ""
+ } : this._fixTitle()
+ }
+
+ _fixTitle() {
+ const t = this._element.getAttribute("title"),
+ e = typeof this._element.getAttribute("data-bs-original-title");
+ (t || "string" !== e) && (this._element.setAttribute("data-bs-original-title", t || ""), !t || this._element.getAttribute("aria-label") || this._element.textContent || this._element.setAttribute("aria-label", t), this._element.setAttribute("title", ""))
+ }
+
+ _enter(t, e) {
+ e = this._initializeOnDelegatedTarget(t, e), t && (e._activeTrigger["focusin" === t.type ? dn : hn] = !0), e.getTipElement().classList.contains(sn) || e._hoverState === on ? e._hoverState = on : (clearTimeout(e._timeout), e._hoverState = on, e._config.delay && e._config.delay.show ? e._timeout = setTimeout((() => {
+ e._hoverState === on && e.show()
+ }), e._config.delay.show) : e.show())
+ }
+
+ _leave(t, e) {
+ e = this._initializeOnDelegatedTarget(t, e), t && (e._activeTrigger["focusout" === t.type ? dn : hn] = e._element.contains(t.relatedTarget)), e._isWithActiveTrigger() || (clearTimeout(e._timeout), e._hoverState = rn, e._config.delay && e._config.delay.hide ? e._timeout = setTimeout((() => {
+ e._hoverState === rn && e.hide()
+ }), e._config.delay.hide) : e.hide())
+ }
+
+ _isWithActiveTrigger() {
+ for (const t in this._activeTrigger) if (this._activeTrigger[t]) return !0;
+ return !1
+ }
+
+ _getConfig(t) {
+ const e = U.getDataAttributes(this._element);
+ return Object.keys(e).forEach((t => {
+ Gi.has(t) && delete e[t]
+ })), (t = {...this.constructor.Default, ...e, ..."object" == typeof t && t ? t : {}}).container = !1 === t.container ? document.body : r(t.container), "number" == typeof t.delay && (t.delay = {
+ show: t.delay,
+ hide: t.delay
+ }), "number" == typeof t.title && (t.title = t.title.toString()), "number" == typeof t.content && (t.content = t.content.toString()), a(Qi, t, this.constructor.DefaultType), t.sanitize && (t.template = Yi(t.template, t.allowList, t.sanitizeFn)), t
+ }
+
+ _getDelegateConfig() {
+ const t = {};
+ for (const e in this._config) this.constructor.Default[e] !== this._config[e] && (t[e] = this._config[e]);
+ return t
+ }
+
+ _cleanTipClass() {
+ const t = this.getTipElement(), e = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, "g"),
+ i = t.getAttribute("class").match(e);
+ null !== i && i.length > 0 && i.map((t => t.trim())).forEach((e => t.classList.remove(e)))
+ }
+
+ _getBasicClassPrefix() {
+ return "bs-tooltip"
+ }
+
+ _handlePopperPlacementChange(t) {
+ const {state: e} = t;
+ e && (this.tip = e.elements.popper, this._cleanTipClass(), this._addAttachmentClass(this._getAttachment(e.placement)))
+ }
+
+ _disposePopper() {
+ this._popper && (this._popper.destroy(), this._popper = null)
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = un.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]()
+ }
+ }))
+ }
+ }
+
+ g(un);
+ const fn = {
+ ...un.Default,
+ placement: "right",
+ offset: [0, 8],
+ trigger: "click",
+ content: "",
+ template: ''
+ }, pn = {...un.DefaultType, content: "(string|element|function)"}, mn = {
+ HIDE: "hide.bs.popover",
+ HIDDEN: "hidden.bs.popover",
+ SHOW: "show.bs.popover",
+ SHOWN: "shown.bs.popover",
+ INSERTED: "inserted.bs.popover",
+ CLICK: "click.bs.popover",
+ FOCUSIN: "focusin.bs.popover",
+ FOCUSOUT: "focusout.bs.popover",
+ MOUSEENTER: "mouseenter.bs.popover",
+ MOUSELEAVE: "mouseleave.bs.popover"
+ };
+
+ class gn extends un {
+ static get Default() {
+ return fn
+ }
+
+ static get NAME() {
+ return "popover"
+ }
+
+ static get Event() {
+ return mn
+ }
+
+ static get DefaultType() {
+ return pn
+ }
+
+ isWithContent() {
+ return this.getTitle() || this._getContent()
+ }
+
+ setContent(t) {
+ this._sanitizeAndSetContent(t, this.getTitle(), ".popover-header"), this._sanitizeAndSetContent(t, this._getContent(), ".popover-body")
+ }
+
+ _getContent() {
+ return this._resolvePossibleFunction(this._config.content)
+ }
+
+ _getBasicClassPrefix() {
+ return "bs-popover"
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = gn.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]()
+ }
+ }))
+ }
+ }
+
+ g(gn);
+ const _n = "scrollspy", bn = {offset: 10, method: "auto", target: ""},
+ vn = {offset: "number", method: "string", target: "(string|element)"}, yn = "active",
+ wn = ".nav-link, .list-group-item, .dropdown-item", En = "position";
+
+ class An extends B {
+ constructor(t, e) {
+ super(t), this._scrollElement = "BODY" === this._element.tagName ? window : this._element, this._config = this._getConfig(e), this._offsets = [], this._targets = [], this._activeTarget = null, this._scrollHeight = 0, j.on(this._scrollElement, "scroll.bs.scrollspy", (() => this._process())), this.refresh(), this._process()
+ }
+
+ static get Default() {
+ return bn
+ }
+
+ static get NAME() {
+ return _n
+ }
+
+ refresh() {
+ const t = this._scrollElement === this._scrollElement.window ? "offset" : En,
+ e = "auto" === this._config.method ? t : this._config.method, n = e === En ? this._getScrollTop() : 0;
+ this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), V.find(wn, this._config.target).map((t => {
+ const s = i(t), o = s ? V.findOne(s) : null;
+ if (o) {
+ const t = o.getBoundingClientRect();
+ if (t.width || t.height) return [U[e](o).top + n, s]
+ }
+ return null
+ })).filter((t => t)).sort(((t, e) => t[0] - e[0])).forEach((t => {
+ this._offsets.push(t[0]), this._targets.push(t[1])
+ }))
+ }
+
+ dispose() {
+ j.off(this._scrollElement, ".bs.scrollspy"), super.dispose()
+ }
+
+ _getConfig(t) {
+ return (t = {...bn, ...U.getDataAttributes(this._element), ..."object" == typeof t && t ? t : {}}).target = r(t.target) || document.documentElement, a(_n, t, vn), t
+ }
+
+ _getScrollTop() {
+ return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop
+ }
+
+ _getScrollHeight() {
+ return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ _getOffsetHeight() {
+ return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height
+ }
+
+ _process() {
+ const t = this._getScrollTop() + this._config.offset, e = this._getScrollHeight(),
+ i = this._config.offset + e - this._getOffsetHeight();
+ if (this._scrollHeight !== e && this.refresh(), t >= i) {
+ const t = this._targets[this._targets.length - 1];
+ this._activeTarget !== t && this._activate(t)
+ } else {
+ if (this._activeTarget && t < this._offsets[0] && this._offsets[0] > 0) return this._activeTarget = null, void this._clear();
+ for (let e = this._offsets.length; e--;) this._activeTarget !== this._targets[e] && t >= this._offsets[e] && (void 0 === this._offsets[e + 1] || t < this._offsets[e + 1]) && this._activate(this._targets[e])
+ }
+ }
+
+ _activate(t) {
+ this._activeTarget = t, this._clear();
+ const e = wn.split(",").map((e => `${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),
+ i = V.findOne(e.join(","), this._config.target);
+ i.classList.add(yn), i.classList.contains("dropdown-item") ? V.findOne(".dropdown-toggle", i.closest(".dropdown")).classList.add(yn) : V.parents(i, ".nav, .list-group").forEach((t => {
+ V.prev(t, ".nav-link, .list-group-item").forEach((t => t.classList.add(yn))), V.prev(t, ".nav-item").forEach((t => {
+ V.children(t, ".nav-link").forEach((t => t.classList.add(yn)))
+ }))
+ })), j.trigger(this._scrollElement, "activate.bs.scrollspy", {relatedTarget: t})
+ }
+
+ _clear() {
+ V.find(wn, this._config.target).filter((t => t.classList.contains(yn))).forEach((t => t.classList.remove(yn)))
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = An.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]()
+ }
+ }))
+ }
+ }
+
+ j.on(window, "load.bs.scrollspy.data-api", (() => {
+ V.find('[data-bs-spy="scroll"]').forEach((t => new An(t)))
+ })), g(An);
+ const Tn = "active", On = "fade", Cn = "show", kn = ".active", Ln = ":scope > li > .active";
+
+ class xn extends B {
+ static get NAME() {
+ return "tab"
+ }
+
+ show() {
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(Tn)) return;
+ let t;
+ const e = n(this._element), i = this._element.closest(".nav, .list-group");
+ if (i) {
+ const e = "UL" === i.nodeName || "OL" === i.nodeName ? Ln : kn;
+ t = V.find(e, i), t = t[t.length - 1]
+ }
+ const s = t ? j.trigger(t, "hide.bs.tab", {relatedTarget: this._element}) : null;
+ if (j.trigger(this._element, "show.bs.tab", {relatedTarget: t}).defaultPrevented || null !== s && s.defaultPrevented) return;
+ this._activate(this._element, i);
+ const o = () => {
+ j.trigger(t, "hidden.bs.tab", {relatedTarget: this._element}), j.trigger(this._element, "shown.bs.tab", {relatedTarget: t})
+ };
+ e ? this._activate(e, e.parentNode, o) : o()
+ }
+
+ _activate(t, e, i) {
+ const n = (!e || "UL" !== e.nodeName && "OL" !== e.nodeName ? V.children(e, kn) : V.find(Ln, e))[0],
+ s = i && n && n.classList.contains(On), o = () => this._transitionComplete(t, n, i);
+ n && s ? (n.classList.remove(Cn), this._queueCallback(o, t, !0)) : o()
+ }
+
+ _transitionComplete(t, e, i) {
+ if (e) {
+ e.classList.remove(Tn);
+ const t = V.findOne(":scope > .dropdown-menu .active", e.parentNode);
+ t && t.classList.remove(Tn), "tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !1)
+ }
+ t.classList.add(Tn), "tab" === t.getAttribute("role") && t.setAttribute("aria-selected", !0), u(t), t.classList.contains(On) && t.classList.add(Cn);
+ let n = t.parentNode;
+ if (n && "LI" === n.nodeName && (n = n.parentNode), n && n.classList.contains("dropdown-menu")) {
+ const e = t.closest(".dropdown");
+ e && V.find(".dropdown-toggle", e).forEach((t => t.classList.add(Tn))), t.setAttribute("aria-expanded", !0)
+ }
+ i && i()
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = xn.getOrCreateInstance(this);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]()
+ }
+ }))
+ }
+ }
+
+ j.on(document, "click.bs.tab.data-api", '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', (function (t) {
+ ["A", "AREA"].includes(this.tagName) && t.preventDefault(), c(this) || xn.getOrCreateInstance(this).show()
+ })), g(xn);
+ const Dn = "toast", Sn = "hide", Nn = "show", In = "showing",
+ Pn = {animation: "boolean", autohide: "boolean", delay: "number"},
+ jn = {animation: !0, autohide: !0, delay: 5e3};
+
+ class Mn extends B {
+ constructor(t, e) {
+ super(t), this._config = this._getConfig(e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners()
+ }
+
+ static get DefaultType() {
+ return Pn
+ }
+
+ static get Default() {
+ return jn
+ }
+
+ static get NAME() {
+ return Dn
+ }
+
+ show() {
+ j.trigger(this._element, "show.bs.toast").defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove(Sn), u(this._element), this._element.classList.add(Nn), this._element.classList.add(In), this._queueCallback((() => {
+ this._element.classList.remove(In), j.trigger(this._element, "shown.bs.toast"), this._maybeScheduleHide()
+ }), this._element, this._config.animation))
+ }
+
+ hide() {
+ this._element.classList.contains(Nn) && (j.trigger(this._element, "hide.bs.toast").defaultPrevented || (this._element.classList.add(In), this._queueCallback((() => {
+ this._element.classList.add(Sn), this._element.classList.remove(In), this._element.classList.remove(Nn), j.trigger(this._element, "hidden.bs.toast")
+ }), this._element, this._config.animation)))
+ }
+
+ dispose() {
+ this._clearTimeout(), this._element.classList.contains(Nn) && this._element.classList.remove(Nn), super.dispose()
+ }
+
+ _getConfig(t) {
+ return t = {...jn, ...U.getDataAttributes(this._element), ..."object" == typeof t && t ? t : {}}, a(Dn, t, this.constructor.DefaultType), t
+ }
+
+ _maybeScheduleHide() {
+ this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout((() => {
+ this.hide()
+ }), this._config.delay)))
+ }
+
+ _onInteraction(t, e) {
+ switch (t.type) {
+ case"mouseover":
+ case"mouseout":
+ this._hasMouseInteraction = e;
+ break;
+ case"focusin":
+ case"focusout":
+ this._hasKeyboardInteraction = e
+ }
+ if (e) return void this._clearTimeout();
+ const i = t.relatedTarget;
+ this._element === i || this._element.contains(i) || this._maybeScheduleHide()
+ }
+
+ _setListeners() {
+ j.on(this._element, "mouseover.bs.toast", (t => this._onInteraction(t, !0))), j.on(this._element, "mouseout.bs.toast", (t => this._onInteraction(t, !1))), j.on(this._element, "focusin.bs.toast", (t => this._onInteraction(t, !0))), j.on(this._element, "focusout.bs.toast", (t => this._onInteraction(t, !1)))
+ }
+
+ _clearTimeout() {
+ clearTimeout(this._timeout), this._timeout = null
+ }
+
+ static jQueryInterface(t) {
+ return this.each((function () {
+ const e = Mn.getOrCreateInstance(this, t);
+ if ("string" == typeof t) {
+ if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t](this)
+ }
+ }))
+ }
+ }
+
+ return R(Mn), g(Mn), {
+ Alert: W,
+ Button: z,
+ Carousel: st,
+ Collapse: pt,
+ Dropdown: hi,
+ Modal: Hi,
+ Offcanvas: Fi,
+ Popover: gn,
+ ScrollSpy: An,
+ Tab: xn,
+ Toast: Mn,
+ Tooltip: un
+ }
+}));
+//# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
diff --git a/src/main/resources/static/js/app/common.js b/src/main/resources/static/js/app/common.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/resources/static/js/app/jquery-3.6.0.min.js b/src/main/resources/static/js/app/jquery-3.6.0.min.js
new file mode 100644
index 0000000..8825d3f
--- /dev/null
+++ b/src/main/resources/static/js/app/jquery-3.6.0.min.js
@@ -0,0 +1,2595 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function (e, t) {
+ "use strict";
+ "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) {
+ if (!e.document) throw new Error("jQuery requires a window with a document");
+ return t(e)
+ } : t(e)
+}("undefined" != typeof window ? window : this, function (C, e) {
+ "use strict";
+ var t = [], r = Object.getPrototypeOf, s = t.slice, g = t.flat ? function (e) {
+ return t.flat.call(e)
+ } : function (e) {
+ return t.concat.apply([], e)
+ }, u = t.push, i = t.indexOf, n = {}, o = n.toString, v = n.hasOwnProperty, a = v.toString, l = a.call(Object),
+ y = {}, m = function (e) {
+ return "function" == typeof e && "number" != typeof e.nodeType && "function" != typeof e.item
+ }, x = function (e) {
+ return null != e && e === e.window
+ }, E = C.document, c = {type: !0, src: !0, nonce: !0, noModule: !0};
+
+ function b(e, t, n) {
+ var r, i, o = (n = n || E).createElement("script");
+ if (o.text = e, t) for (r in c) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
+ n.head.appendChild(o).parentNode.removeChild(o)
+ }
+
+ function w(e) {
+ return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e
+ }
+
+ var f = "3.6.0", S = function (e, t) {
+ return new S.fn.init(e, t)
+ };
+
+ function p(e) {
+ var t = !!e && "length" in e && e.length, n = w(e);
+ return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
+ }
+
+ S.fn = S.prototype = {
+ jquery: f, constructor: S, length: 0, toArray: function () {
+ return s.call(this)
+ }, get: function (e) {
+ return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e]
+ }, pushStack: function (e) {
+ var t = S.merge(this.constructor(), e);
+ return t.prevObject = this, t
+ }, each: function (e) {
+ return S.each(this, e)
+ }, map: function (n) {
+ return this.pushStack(S.map(this, function (e, t) {
+ return n.call(e, t, e)
+ }))
+ }, slice: function () {
+ return this.pushStack(s.apply(this, arguments))
+ }, first: function () {
+ return this.eq(0)
+ }, last: function () {
+ return this.eq(-1)
+ }, even: function () {
+ return this.pushStack(S.grep(this, function (e, t) {
+ return (t + 1) % 2
+ }))
+ }, odd: function () {
+ return this.pushStack(S.grep(this, function (e, t) {
+ return t % 2
+ }))
+ }, eq: function (e) {
+ var t = this.length, n = +e + (e < 0 ? t : 0);
+ return this.pushStack(0 <= n && n < t ? [this[n]] : [])
+ }, end: function () {
+ return this.prevObject || this.constructor()
+ }, push: u, sort: t.sort, splice: t.splice
+ }, S.extend = S.fn.extend = function () {
+ var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1;
+ for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++) if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r));
+ return a
+ }, S.extend({
+ expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) {
+ throw new Error(e)
+ }, noop: function () {
+ }, isPlainObject: function (e) {
+ var t, n;
+ return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l)
+ }, isEmptyObject: function (e) {
+ var t;
+ for (t in e) return !1;
+ return !0
+ }, globalEval: function (e, t, n) {
+ b(e, {nonce: t && t.nonce}, n)
+ }, each: function (e, t) {
+ var n, r = 0;
+ if (p(e)) {
+ for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break
+ } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break;
+ return e
+ }, makeArray: function (e, t) {
+ var n = t || [];
+ return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n
+ }, inArray: function (e, t, n) {
+ return null == t ? -1 : i.call(t, e, n)
+ }, merge: function (e, t) {
+ for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
+ return e.length = i, e
+ }, grep: function (e, t, n) {
+ for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);
+ return r
+ }, map: function (e, t, n) {
+ var r, i, o = 0, a = [];
+ if (p(e)) for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i); else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);
+ return g(a)
+ }, guid: 1, support: y
+ }), "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) {
+ n["[object " + t + "]"] = t.toLowerCase()
+ });
+ var d = function (n) {
+ var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, S = "sizzle" + 1 * new Date, p = n.document, k = 0,
+ r = 0, m = ue(), x = ue(), A = ue(), N = ue(), j = function (e, t) {
+ return e === t && (l = !0), 0
+ }, D = {}.hasOwnProperty, t = [], q = t.pop, L = t.push, H = t.push, O = t.slice, P = function (e, t) {
+ for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n;
+ return -1
+ },
+ R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+ M = "[\\x20\\t\\r\\n\\f]", I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+ W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]",
+ F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)",
+ B = new RegExp(M + "+", "g"), $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
+ _ = new RegExp("^" + M + "*," + M + "*"), z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
+ U = new RegExp(M + "|>"), X = new RegExp(F), V = new RegExp("^" + I + "$"), G = {
+ ID: new RegExp("^#(" + I + ")"),
+ CLASS: new RegExp("^\\.(" + I + ")"),
+ TAG: new RegExp("^(" + I + "|[*])"),
+ ATTR: new RegExp("^" + W),
+ PSEUDO: new RegExp("^" + F),
+ CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
+ bool: new RegExp("^(?:" + R + ")$", "i"),
+ needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
+ }, Y = /HTML$/i, Q = /^(?:input|select|textarea|button)$/i, J = /^h\d$/i, K = /^[^{]+\{\s*\[native \w/,
+ Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ee = /[+~]/,
+ te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"), ne = function (e, t) {
+ var n = "0x" + e.slice(1) - 65536;
+ return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320))
+ }, re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, ie = function (e, t) {
+ return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
+ }, oe = function () {
+ T()
+ }, ae = be(function (e) {
+ return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase()
+ }, {dir: "parentNode", next: "legend"});
+ try {
+ H.apply(t = O.call(p.childNodes), p.childNodes), t[p.childNodes.length].nodeType
+ } catch (e) {
+ H = {
+ apply: t.length ? function (e, t) {
+ L.apply(e, O.call(t))
+ } : function (e, t) {
+ var n = e.length, r = 0;
+ while (e[n++] = t[r++]) ;
+ e.length = n - 1
+ }
+ }
+ }
+
+ function se(t, e, n, r) {
+ var i, o, a, s, u, l, c, f = e && e.ownerDocument, p = e ? e.nodeType : 9;
+ if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n;
+ if (!r && (T(e), e = e || C, E)) {
+ if (11 !== p && (u = Z.exec(t))) if (i = u[1]) {
+ if (9 === p) {
+ if (!(a = e.getElementById(i))) return n;
+ if (a.id === i) return n.push(a), n
+ } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n
+ } else {
+ if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;
+ if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n
+ }
+ if (d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) {
+ if (c = t, f = e, 1 === p && (U.test(t) || z.test(t))) {
+ (f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)), o = (l = h(t)).length;
+ while (o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]);
+ c = l.join(",")
+ }
+ try {
+ return H.apply(n, f.querySelectorAll(c)), n
+ } catch (e) {
+ N(t, !0)
+ } finally {
+ s === S && e.removeAttribute("id")
+ }
+ }
+ }
+ return g(t.replace($, "$1"), e, n, r)
+ }
+
+ function ue() {
+ var r = [];
+ return function e(t, n) {
+ return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n
+ }
+ }
+
+ function le(e) {
+ return e[S] = !0, e
+ }
+
+ function ce(e) {
+ var t = C.createElement("fieldset");
+ try {
+ return !!e(t)
+ } catch (e) {
+ return !1
+ } finally {
+ t.parentNode && t.parentNode.removeChild(t), t = null
+ }
+ }
+
+ function fe(e, t) {
+ var n = e.split("|"), r = n.length;
+ while (r--) b.attrHandle[n[r]] = t
+ }
+
+ function pe(e, t) {
+ var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
+ if (r) return r;
+ if (n) while (n = n.nextSibling) if (n === t) return -1;
+ return e ? 1 : -1
+ }
+
+ function de(t) {
+ return function (e) {
+ return "input" === e.nodeName.toLowerCase() && e.type === t
+ }
+ }
+
+ function he(n) {
+ return function (e) {
+ var t = e.nodeName.toLowerCase();
+ return ("input" === t || "button" === t) && e.type === n
+ }
+ }
+
+ function ge(t) {
+ return function (e) {
+ return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t
+ }
+ }
+
+ function ve(a) {
+ return le(function (o) {
+ return o = +o, le(function (e, t) {
+ var n, r = a([], e.length, o), i = r.length;
+ while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n]))
+ })
+ })
+ }
+
+ function ye(e) {
+ return e && "undefined" != typeof e.getElementsByTagName && e
+ }
+
+ for (e in d = se.support = {}, i = se.isXML = function (e) {
+ var t = e && e.namespaceURI, n = e && (e.ownerDocument || e).documentElement;
+ return !Y.test(t || n && n.nodeName || "HTML")
+ }, T = se.setDocument = function (e) {
+ var t, n, r = e ? e.ownerDocument || e : p;
+ return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function (e) {
+ return a.appendChild(e).appendChild(C.createElement("div")), "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length
+ }), d.attributes = ce(function (e) {
+ return e.className = "i", !e.getAttribute("className")
+ }), d.getElementsByTagName = ce(function (e) {
+ return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length
+ }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function (e) {
+ return a.appendChild(e).id = S, !C.getElementsByName || !C.getElementsByName(S).length
+ }), d.getById ? (b.filter.ID = function (e) {
+ var t = e.replace(te, ne);
+ return function (e) {
+ return e.getAttribute("id") === t
+ }
+ }, b.find.ID = function (e, t) {
+ if ("undefined" != typeof t.getElementById && E) {
+ var n = t.getElementById(e);
+ return n ? [n] : []
+ }
+ }) : (b.filter.ID = function (e) {
+ var n = e.replace(te, ne);
+ return function (e) {
+ var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
+ return t && t.value === n
+ }
+ }, b.find.ID = function (e, t) {
+ if ("undefined" != typeof t.getElementById && E) {
+ var n, r, i, o = t.getElementById(e);
+ if (o) {
+ if ((n = o.getAttributeNode("id")) && n.value === e) return [o];
+ i = t.getElementsByName(e), r = 0;
+ while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o]
+ }
+ return []
+ }
+ }), b.find.TAG = d.getElementsByTagName ? function (e, t) {
+ return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0
+ } : function (e, t) {
+ var n, r = [], i = 0, o = t.getElementsByTagName(e);
+ if ("*" === e) {
+ while (n = o[i++]) 1 === n.nodeType && r.push(n);
+ return r
+ }
+ return o
+ }, b.find.CLASS = d.getElementsByClassName && function (e, t) {
+ if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e)
+ }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) {
+ var t;
+ a.appendChild(e).innerHTML = " ", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), (t = C.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"), e.querySelectorAll("\\\f"), v.push("[\\r\\n\\f]")
+ }), ce(function (e) {
+ e.innerHTML = " ";
+ var t = C.createElement("input");
+ t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:")
+ })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function (e) {
+ d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", F)
+ }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function (e, t) {
+ var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode;
+ return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
+ } : function (e, t) {
+ if (t) while (t = t.parentNode) if (t === e) return !0;
+ return !1
+ }, j = t ? function (e, t) {
+ if (e === t) return l = !0, 0;
+ var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
+ return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1)
+ } : function (e, t) {
+ if (e === t) return l = !0, 0;
+ var n, r = 0, i = e.parentNode, o = t.parentNode, a = [e], s = [t];
+ if (!i || !o) return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;
+ if (i === o) return pe(e, t);
+ n = e;
+ while (n = n.parentNode) a.unshift(n);
+ n = t;
+ while (n = n.parentNode) s.unshift(n);
+ while (a[r] === s[r]) r++;
+ return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0
+ }), C
+ }, se.matches = function (e, t) {
+ return se(e, null, null, t)
+ }, se.matchesSelector = function (e, t) {
+ if (T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try {
+ var n = c.call(e, t);
+ if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
+ } catch (e) {
+ N(t, !0)
+ }
+ return 0 < se(t, C, null, [e]).length
+ }, se.contains = function (e, t) {
+ return (e.ownerDocument || e) != C && T(e), y(e, t)
+ }, se.attr = function (e, t) {
+ (e.ownerDocument || e) != C && T(e);
+ var n = b.attrHandle[t.toLowerCase()],
+ r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
+ return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
+ }, se.escape = function (e) {
+ return (e + "").replace(re, ie)
+ }, se.error = function (e) {
+ throw new Error("Syntax error, unrecognized expression: " + e)
+ }, se.uniqueSort = function (e) {
+ var t, n = [], r = 0, i = 0;
+ if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(j), l) {
+ while (t = e[i++]) t === e[i] && (r = n.push(i));
+ while (r--) e.splice(n[r], 1)
+ }
+ return u = null, e
+ }, o = se.getText = function (e) {
+ var t, n = "", r = 0, i = e.nodeType;
+ if (i) {
+ if (1 === i || 9 === i || 11 === i) {
+ if ("string" == typeof e.textContent) return e.textContent;
+ for (e = e.firstChild; e; e = e.nextSibling) n += o(e)
+ } else if (3 === i || 4 === i) return e.nodeValue
+ } else while (t = e[r++]) n += o(t);
+ return n
+ }, (b = se.selectors = {
+ cacheLength: 50,
+ createPseudo: le,
+ match: G,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": {dir: "parentNode", first: !0},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: !0},
+ "~": {dir: "previousSibling"}
+ },
+ preFilter: {
+ ATTR: function (e) {
+ return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
+ }, CHILD: function (e) {
+ return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e
+ }, PSEUDO: function (e) {
+ var t, n = !e[6] && e[2];
+ return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
+ }
+ },
+ filter: {
+ TAG: function (e) {
+ var t = e.replace(te, ne).toLowerCase();
+ return "*" === e ? function () {
+ return !0
+ } : function (e) {
+ return e.nodeName && e.nodeName.toLowerCase() === t
+ }
+ }, CLASS: function (e) {
+ var t = m[e + " "];
+ return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function (e) {
+ return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
+ })
+ }, ATTR: function (n, r, i) {
+ return function (e) {
+ var t = se.attr(e, n);
+ return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"))
+ }
+ }, CHILD: function (h, e, t, g, v) {
+ var y = "nth" !== h.slice(0, 3), m = "last" !== h.slice(-4), x = "of-type" === e;
+ return 1 === g && 0 === v ? function (e) {
+ return !!e.parentNode
+ } : function (e, t, n) {
+ var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling", c = e.parentNode,
+ f = x && e.nodeName.toLowerCase(), p = !n && !x, d = !1;
+ if (c) {
+ if (y) {
+ while (l) {
+ a = e;
+ while (a = a[l]) if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;
+ u = l = "only" === h && !u && "nextSibling"
+ }
+ return !0
+ }
+ if (u = [m ? c.firstChild : c.lastChild], m && p) {
+ d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2], a = s && c.childNodes[s];
+ while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if (1 === a.nodeType && ++d && a === e) {
+ i[h] = [k, s, d];
+ break
+ }
+ } else if (p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d) while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e)) break;
+ return (d -= v) === g || d % g == 0 && 0 <= d / g
+ }
+ }
+ }, PSEUDO: function (e, o) {
+ var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e);
+ return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) {
+ var n, r = a(e, o), i = r.length;
+ while (i--) e[n = P(e, r[i])] = !(t[n] = r[i])
+ }) : function (e) {
+ return a(e, 0, t)
+ }) : a
+ }
+ },
+ pseudos: {
+ not: le(function (e) {
+ var r = [], i = [], s = f(e.replace($, "$1"));
+ return s[S] ? le(function (e, t, n, r) {
+ var i, o = s(e, null, r, []), a = e.length;
+ while (a--) (i = o[a]) && (e[a] = !(t[a] = i))
+ }) : function (e, t, n) {
+ return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop()
+ }
+ }), has: le(function (t) {
+ return function (e) {
+ return 0 < se(t, e).length
+ }
+ }), contains: le(function (t) {
+ return t = t.replace(te, ne), function (e) {
+ return -1 < (e.textContent || o(e)).indexOf(t)
+ }
+ }), lang: le(function (n) {
+ return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), function (e) {
+ var t;
+ do {
+ if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-")
+ } while ((e = e.parentNode) && 1 === e.nodeType);
+ return !1
+ }
+ }), target: function (e) {
+ var t = n.location && n.location.hash;
+ return t && t.slice(1) === e.id
+ }, root: function (e) {
+ return e === a
+ }, focus: function (e) {
+ return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
+ }, enabled: ge(!1), disabled: ge(!0), checked: function (e) {
+ var t = e.nodeName.toLowerCase();
+ return "input" === t && !!e.checked || "option" === t && !!e.selected
+ }, selected: function (e) {
+ return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected
+ }, empty: function (e) {
+ for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;
+ return !0
+ }, parent: function (e) {
+ return !b.pseudos.empty(e)
+ }, header: function (e) {
+ return J.test(e.nodeName)
+ }, input: function (e) {
+ return Q.test(e.nodeName)
+ }, button: function (e) {
+ var t = e.nodeName.toLowerCase();
+ return "input" === t && "button" === e.type || "button" === t
+ }, text: function (e) {
+ var t;
+ return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
+ }, first: ve(function () {
+ return [0]
+ }), last: ve(function (e, t) {
+ return [t - 1]
+ }), eq: ve(function (e, t, n) {
+ return [n < 0 ? n + t : n]
+ }), even: ve(function (e, t) {
+ for (var n = 0; n < t; n += 2) e.push(n);
+ return e
+ }), odd: ve(function (e, t) {
+ for (var n = 1; n < t; n += 2) e.push(n);
+ return e
+ }), lt: ve(function (e, t, n) {
+ for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r);
+ return e
+ }), gt: ve(function (e, t, n) {
+ for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
+ return e
+ })
+ }
+ }).pseudos.nth = b.pseudos.eq, {
+ radio: !0,
+ checkbox: !0,
+ file: !0,
+ password: !0,
+ image: !0
+ }) b.pseudos[e] = de(e);
+ for (e in {submit: !0, reset: !0}) b.pseudos[e] = he(e);
+
+ function me() {
+ }
+
+ function xe(e) {
+ for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
+ return r
+ }
+
+ function be(s, e, t) {
+ var u = e.dir, l = e.next, c = l || u, f = t && "parentNode" === c, p = r++;
+ return e.first ? function (e, t, n) {
+ while (e = e[u]) if (1 === e.nodeType || f) return s(e, t, n);
+ return !1
+ } : function (e, t, n) {
+ var r, i, o, a = [k, p];
+ if (n) {
+ while (e = e[u]) if ((1 === e.nodeType || f) && s(e, t, n)) return !0
+ } else while (e = e[u]) if (1 === e.nodeType || f) if (i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e; else {
+ if ((r = i[c]) && r[0] === k && r[1] === p) return a[2] = r[2];
+ if ((i[c] = a)[2] = s(e, t, n)) return !0
+ }
+ return !1
+ }
+ }
+
+ function we(i) {
+ return 1 < i.length ? function (e, t, n) {
+ var r = i.length;
+ while (r--) if (!i[r](e, t, n)) return !1;
+ return !0
+ } : i[0]
+ }
+
+ function Te(e, t, n, r, i) {
+ for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) (o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s)));
+ return a
+ }
+
+ function Ce(d, h, g, v, y, e) {
+ return v && !v[S] && (v = Ce(v)), y && !y[S] && (y = Ce(y, e)), le(function (e, t, n, r) {
+ var i, o, a, s = [], u = [], l = t.length, c = e || function (e, t, n) {
+ for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);
+ return n
+ }(h || "*", n.nodeType ? [n] : n, []), f = !d || !e && h ? c : Te(c, s, d, n, r),
+ p = g ? y || (e ? d : l || v) ? [] : t : f;
+ if (g && g(f, p, n, r), v) {
+ i = Te(p, u), v(i, [], n, r), o = i.length;
+ while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a))
+ }
+ if (e) {
+ if (y || d) {
+ if (y) {
+ i = [], o = p.length;
+ while (o--) (a = p[o]) && i.push(f[o] = a);
+ y(null, p = [], i, r)
+ }
+ o = p.length;
+ while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a))
+ }
+ } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p)
+ })
+ }
+
+ function Ee(e) {
+ for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) {
+ return e === i
+ }, a, !0), l = be(function (e) {
+ return -1 < P(i, e)
+ }, a, !0), c = [function (e, t, n) {
+ var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
+ return i = null, r
+ }]; s < r; s++) if (t = b.relative[e[s].type]) c = [be(we(c), t)]; else {
+ if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) {
+ for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break;
+ return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({value: " " === e[s - 2].type ? "*" : ""})).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e))
+ }
+ c.push(t)
+ }
+ return we(c)
+ }
+
+ return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function (e, t) {
+ var n, r, i, o, a, s, u, l = x[e + " "];
+ if (l) return t ? 0 : l.slice(0);
+ a = e, s = [], u = b.preFilter;
+ while (a) {
+ for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({
+ value: n,
+ type: r[0].replace($, " ")
+ }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({
+ value: n,
+ type: o,
+ matches: r
+ }), a = a.slice(n.length));
+ if (!n) break
+ }
+ return t ? a.length : a ? se.error(e) : x(e, s).slice(0)
+ }, f = se.compile = function (e, t) {
+ var n, v, y, m, x, r, i = [], o = [], a = A[e + " "];
+ if (!a) {
+ t || (t = h(e)), n = t.length;
+ while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a);
+ (a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) {
+ var o, a, s, u = 0, l = "0", c = e && [], f = [], p = w, d = e || x && b.find.TAG("*", i),
+ h = k += null == p ? 1 : Math.random() || .1, g = d.length;
+ for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) {
+ if (x && o) {
+ a = 0, t || o.ownerDocument == C || (T(o), n = !E);
+ while (s = v[a++]) if (s(o, t || C, n)) {
+ r.push(o);
+ break
+ }
+ i && (k = h)
+ }
+ m && ((o = !s && o) && u--, e && c.push(o))
+ }
+ if (u += l, m && l !== u) {
+ a = 0;
+ while (s = y[a++]) s(c, f, t, n);
+ if (e) {
+ if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r));
+ f = Te(f)
+ }
+ H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r)
+ }
+ return i && (k = h, w = p), c
+ }, m ? le(r) : r))).selector = e
+ }
+ return a
+ }, g = se.select = function (e, t, n, r) {
+ var i, o, a, s, u, l = "function" == typeof e && e, c = !r && h(e = l.selector || e);
+ if (n = n || [], 1 === c.length) {
+ if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {
+ if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;
+ l && (t = t.parentNode), e = e.slice(o.shift().value.length)
+ }
+ i = G.needsContext.test(e) ? 0 : o.length;
+ while (i--) {
+ if (a = o[i], b.relative[s = a.type]) break;
+ if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) {
+ if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n;
+ break
+ }
+ }
+ }
+ return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n
+ }, d.sortStable = S.split("").sort(j).join("") === S, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function (e) {
+ return 1 & e.compareDocumentPosition(C.createElement("fieldset"))
+ }), ce(function (e) {
+ return e.innerHTML = " ", "#" === e.firstChild.getAttribute("href")
+ }) || fe("type|href|height|width", function (e, t, n) {
+ if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
+ }), d.attributes && ce(function (e) {
+ return e.innerHTML = " ", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
+ }) || fe("value", function (e, t, n) {
+ if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue
+ }), ce(function (e) {
+ return null == e.getAttribute("disabled")
+ }) || fe(R, function (e, t, n) {
+ var r;
+ if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
+ }), se
+ }(C);
+ S.find = d, S.expr = d.selectors, S.expr[":"] = S.expr.pseudos, S.uniqueSort = S.unique = d.uniqueSort, S.text = d.getText, S.isXMLDoc = d.isXML, S.contains = d.contains, S.escapeSelector = d.escape;
+ var h = function (e, t, n) {
+ var r = [], i = void 0 !== n;
+ while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) {
+ if (i && S(e).is(n)) break;
+ r.push(e)
+ }
+ return r
+ }, T = function (e, t) {
+ for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
+ return n
+ }, k = S.expr.match.needsContext;
+
+ function A(e, t) {
+ return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
+ }
+
+ var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
+
+ function j(e, n, r) {
+ return m(n) ? S.grep(e, function (e, t) {
+ return !!n.call(e, t, e) !== r
+ }) : n.nodeType ? S.grep(e, function (e) {
+ return e === n !== r
+ }) : "string" != typeof n ? S.grep(e, function (e) {
+ return -1 < i.call(n, e) !== r
+ }) : S.filter(n, e, r)
+ }
+
+ S.filter = function (e, t, n) {
+ var r = t[0];
+ return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function (e) {
+ return 1 === e.nodeType
+ }))
+ }, S.fn.extend({
+ find: function (e) {
+ var t, n, r = this.length, i = this;
+ if ("string" != typeof e) return this.pushStack(S(e).filter(function () {
+ for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0
+ }));
+ for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n);
+ return 1 < r ? S.uniqueSort(n) : n
+ }, filter: function (e) {
+ return this.pushStack(j(this, e || [], !1))
+ }, not: function (e) {
+ return this.pushStack(j(this, e || [], !0))
+ }, is: function (e) {
+ return !!j(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1).length
+ }
+ });
+ var D, q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
+ (S.fn.init = function (e, t, n) {
+ var r, i;
+ if (!e) return this;
+ if (n = n || D, "string" == typeof e) {
+ if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
+ if (r[1]) {
+ if (t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t)) for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
+ return this
+ }
+ return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this
+ }
+ return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this)
+ }).prototype = S.fn, D = S(E);
+ var L = /^(?:parents|prev(?:Until|All))/, H = {children: !0, contents: !0, next: !0, prev: !0};
+
+ function O(e, t) {
+ while ((e = e[t]) && 1 !== e.nodeType) ;
+ return e
+ }
+
+ S.fn.extend({
+ has: function (e) {
+ var t = S(e, this), n = t.length;
+ return this.filter(function () {
+ for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0
+ })
+ }, closest: function (e, t) {
+ var n, r = 0, i = this.length, o = [], a = "string" != typeof e && S(e);
+ if (!k.test(e)) for (; r < i; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))) {
+ o.push(n);
+ break
+ }
+ return this.pushStack(1 < o.length ? S.uniqueSort(o) : o)
+ }, index: function (e) {
+ return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+ }, add: function (e, t) {
+ return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t))))
+ }, addBack: function (e) {
+ return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
+ }
+ }), S.each({
+ parent: function (e) {
+ var t = e.parentNode;
+ return t && 11 !== t.nodeType ? t : null
+ }, parents: function (e) {
+ return h(e, "parentNode")
+ }, parentsUntil: function (e, t, n) {
+ return h(e, "parentNode", n)
+ }, next: function (e) {
+ return O(e, "nextSibling")
+ }, prev: function (e) {
+ return O(e, "previousSibling")
+ }, nextAll: function (e) {
+ return h(e, "nextSibling")
+ }, prevAll: function (e) {
+ return h(e, "previousSibling")
+ }, nextUntil: function (e, t, n) {
+ return h(e, "nextSibling", n)
+ }, prevUntil: function (e, t, n) {
+ return h(e, "previousSibling", n)
+ }, siblings: function (e) {
+ return T((e.parentNode || {}).firstChild, e)
+ }, children: function (e) {
+ return T(e.firstChild)
+ }, contents: function (e) {
+ return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes))
+ }
+ }, function (r, i) {
+ S.fn[r] = function (e, t) {
+ var n = S.map(this, i, e);
+ return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = S.filter(t, n)), 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), this.pushStack(n)
+ }
+ });
+ var P = /[^\x20\t\r\n\f]+/g;
+
+ function R(e) {
+ return e
+ }
+
+ function M(e) {
+ throw e
+ }
+
+ function I(e, t, n, r) {
+ var i;
+ try {
+ e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r))
+ } catch (e) {
+ n.apply(void 0, [e])
+ }
+ }
+
+ S.Callbacks = function (r) {
+ var e, n;
+ r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function (e, t) {
+ n[t] = !0
+ }), n) : S.extend({}, r);
+ var i, t, o, a, s = [], u = [], l = -1, c = function () {
+ for (a = a || r.once, o = i = !0; u.length; l = -1) {
+ t = u.shift();
+ while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1)
+ }
+ r.memory || (t = !1), i = !1, a && (s = t ? [] : "")
+ }, f = {
+ add: function () {
+ return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) {
+ S.each(e, function (e, t) {
+ m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t)
+ })
+ }(arguments), t && !i && c()), this
+ }, remove: function () {
+ return S.each(arguments, function (e, t) {
+ var n;
+ while (-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l--
+ }), this
+ }, has: function (e) {
+ return e ? -1 < S.inArray(e, s) : 0 < s.length
+ }, empty: function () {
+ return s && (s = []), this
+ }, disable: function () {
+ return a = u = [], s = t = "", this
+ }, disabled: function () {
+ return !s
+ }, lock: function () {
+ return a = u = [], t || i || (s = t = ""), this
+ }, locked: function () {
+ return !!a
+ }, fireWith: function (e, t) {
+ return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this
+ }, fire: function () {
+ return f.fireWith(this, arguments), this
+ }, fired: function () {
+ return !!o
+ }
+ };
+ return f
+ }, S.extend({
+ Deferred: function (e) {
+ var o = [["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2], ["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"]],
+ i = "pending", a = {
+ state: function () {
+ return i
+ }, always: function () {
+ return s.done(arguments).fail(arguments), this
+ }, "catch": function (e) {
+ return a.then(null, e)
+ }, pipe: function () {
+ var i = arguments;
+ return S.Deferred(function (r) {
+ S.each(o, function (e, t) {
+ var n = m(i[t[4]]) && i[t[4]];
+ s[t[1]](function () {
+ var e = n && n.apply(this, arguments);
+ e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments)
+ })
+ }), i = null
+ }).promise()
+ }, then: function (t, n, r) {
+ var u = 0;
+
+ function l(i, o, a, s) {
+ return function () {
+ var n = this, r = arguments, e = function () {
+ var e, t;
+ if (!(i < u)) {
+ if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution");
+ t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r))
+ }
+ }, t = s ? e : function () {
+ try {
+ e()
+ } catch (e) {
+ S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r))
+ }
+ };
+ i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t))
+ }
+ }
+
+ return S.Deferred(function (e) {
+ o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : R)), o[2][3].add(l(0, e, m(n) ? n : M))
+ }).promise()
+ }, promise: function (e) {
+ return null != e ? S.extend(e, a) : a
+ }
+ }, s = {};
+ return S.each(o, function (e, t) {
+ var n = t[2], r = t[5];
+ a[t[1]] = n.add, r && n.add(function () {
+ i = r
+ }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () {
+ return s[t[0] + "With"](this === s ? void 0 : this, arguments), this
+ }, s[t[0] + "With"] = n.fireWith
+ }), a.promise(s), e && e.call(s, s), s
+ }, when: function (e) {
+ var n = arguments.length, t = n, r = Array(t), i = s.call(arguments), o = S.Deferred(), a = function (t) {
+ return function (e) {
+ r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i)
+ }
+ };
+ if (n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then();
+ while (t--) I(i[t], a(t), o.reject);
+ return o.promise()
+ }
+ });
+ var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+ S.Deferred.exceptionHook = function (e, t) {
+ C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t)
+ }, S.readyException = function (e) {
+ C.setTimeout(function () {
+ throw e
+ })
+ };
+ var F = S.Deferred();
+
+ function B() {
+ E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), S.ready()
+ }
+
+ S.fn.ready = function (e) {
+ return F.then(e)["catch"](function (e) {
+ S.readyException(e)
+ }), this
+ }, S.extend({
+ isReady: !1, readyWait: 1, ready: function (e) {
+ (!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S])
+ }
+ }), S.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B));
+ var $ = function (e, t, n, r, i, o, a) {
+ var s = 0, u = e.length, l = null == n;
+ if ("object" === w(n)) for (s in i = !0, n) $(e, t, s, n[s], !0, o, a); else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) {
+ return l.call(S(e), n)
+ })), t)) for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
+ return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
+ }, _ = /^-ms-/, z = /-([a-z])/g;
+
+ function U(e, t) {
+ return t.toUpperCase()
+ }
+
+ function X(e) {
+ return e.replace(_, "ms-").replace(z, U)
+ }
+
+ var V = function (e) {
+ return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
+ };
+
+ function G() {
+ this.expando = S.expando + G.uid++
+ }
+
+ G.uid = 1, G.prototype = {
+ cache: function (e) {
+ var t = e[this.expando];
+ return t || (t = {}, V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
+ value: t,
+ configurable: !0
+ }))), t
+ }, set: function (e, t, n) {
+ var r, i = this.cache(e);
+ if ("string" == typeof t) i[X(t)] = n; else for (r in t) i[X(r)] = t[r];
+ return i
+ }, get: function (e, t) {
+ return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)]
+ }, access: function (e, t, n) {
+ return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
+ }, remove: function (e, t) {
+ var n, r = e[this.expando];
+ if (void 0 !== r) {
+ if (void 0 !== t) {
+ n = (t = Array.isArray(t) ? t.map(X) : (t = X(t)) in r ? [t] : t.match(P) || []).length;
+ while (n--) delete r[t[n]]
+ }
+ (void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
+ }
+ }, hasData: function (e) {
+ var t = e[this.expando];
+ return void 0 !== t && !S.isEmptyObject(t)
+ }
+ };
+ var Y = new G, Q = new G, J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, K = /[A-Z]/g;
+
+ function Z(e, t, n) {
+ var r, i;
+ if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) {
+ try {
+ n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i)
+ } catch (e) {
+ }
+ Q.set(e, t, n)
+ } else n = void 0;
+ return n
+ }
+
+ S.extend({
+ hasData: function (e) {
+ return Q.hasData(e) || Y.hasData(e)
+ }, data: function (e, t, n) {
+ return Q.access(e, t, n)
+ }, removeData: function (e, t) {
+ Q.remove(e, t)
+ }, _data: function (e, t, n) {
+ return Y.access(e, t, n)
+ }, _removeData: function (e, t) {
+ Y.remove(e, t)
+ }
+ }), S.fn.extend({
+ data: function (n, e) {
+ var t, r, i, o = this[0], a = o && o.attributes;
+ if (void 0 === n) {
+ if (this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) {
+ t = a.length;
+ while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r]));
+ Y.set(o, "hasDataAttrs", !0)
+ }
+ return i
+ }
+ return "object" == typeof n ? this.each(function () {
+ Q.set(this, n)
+ }) : $(this, function (e) {
+ var t;
+ if (o && void 0 === e) return void 0 !== (t = Q.get(o, n)) ? t : void 0 !== (t = Z(o, n)) ? t : void 0;
+ this.each(function () {
+ Q.set(this, n, e)
+ })
+ }, null, e, 1 < arguments.length, null, !0)
+ }, removeData: function (e) {
+ return this.each(function () {
+ Q.remove(this, e)
+ })
+ }
+ }), S.extend({
+ queue: function (e, t, n) {
+ var r;
+ if (e) return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || []
+ }, dequeue: function (e, t) {
+ t = t || "fx";
+ var n = S.queue(e, t), r = n.length, i = n.shift(), o = S._queueHooks(e, t);
+ "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () {
+ S.dequeue(e, t)
+ }, o)), !r && o && o.empty.fire()
+ }, _queueHooks: function (e, t) {
+ var n = t + "queueHooks";
+ return Y.get(e, n) || Y.access(e, n, {
+ empty: S.Callbacks("once memory").add(function () {
+ Y.remove(e, [t + "queue", n])
+ })
+ })
+ }
+ }), S.fn.extend({
+ queue: function (t, n) {
+ var e = 2;
+ return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this : this.each(function () {
+ var e = S.queue(this, t, n);
+ S._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t)
+ })
+ }, dequeue: function (e) {
+ return this.each(function () {
+ S.dequeue(this, e)
+ })
+ }, clearQueue: function (e) {
+ return this.queue(e || "fx", [])
+ }, promise: function (e, t) {
+ var n, r = 1, i = S.Deferred(), o = this, a = this.length, s = function () {
+ --r || i.resolveWith(o, [o])
+ };
+ "string" != typeof e && (t = e, e = void 0), e = e || "fx";
+ while (a--) (n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
+ return s(), i.promise(t)
+ }
+ });
+ var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"),
+ ne = ["Top", "Right", "Bottom", "Left"], re = E.documentElement, ie = function (e) {
+ return S.contains(e.ownerDocument, e)
+ }, oe = {composed: !0};
+ re.getRootNode && (ie = function (e) {
+ return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument
+ });
+ var ae = function (e, t) {
+ return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display")
+ };
+
+ function se(e, t, n, r) {
+ var i, o, a = 20, s = r ? function () {
+ return r.cur()
+ } : function () {
+ return S.css(e, t, "")
+ }, u = s(), l = n && n[3] || (S.cssNumber[t] ? "" : "px"),
+ c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t));
+ if (c && c[3] !== l) {
+ u /= 2, l = l || c[3], c = +u || 1;
+ while (a--) S.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o;
+ c *= 2, S.style(e, t, c + l), n = n || []
+ }
+ return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i
+ }
+
+ var ue = {};
+
+ function le(e, t) {
+ for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++) (r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n)));
+ for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);
+ return e
+ }
+
+ S.fn.extend({
+ show: function () {
+ return le(this, !0)
+ }, hide: function () {
+ return le(this)
+ }, toggle: function (e) {
+ return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () {
+ ae(this) ? S(this).show() : S(this).hide()
+ })
+ }
+ });
+ var ce, fe, pe = /^(?:checkbox|radio)$/i, de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
+ he = /^$|^module$|\/(?:java|ecma)script/i;
+ ce = E.createDocumentFragment().appendChild(E.createElement("div")), (fe = E.createElement("input")).setAttribute("type", "radio"), fe.setAttribute("checked", "checked"), fe.setAttribute("name", "t"), ce.appendChild(fe), y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked, ce.innerHTML = "", y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue, ce.innerHTML = " ", y.option = !!ce.lastChild;
+ var ge = {
+ thead: [1, ""],
+ col: [2, ""],
+ tr: [2, ""],
+ td: [3, ""],
+ _default: [0, "", ""]
+ };
+
+ function ve(e, t) {
+ var n;
+ return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? S.merge([e], n) : n
+ }
+
+ function ye(e, t) {
+ for (var n = 0, r = e.length; n < r; n++) Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval"))
+ }
+
+ ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td, y.option || (ge.optgroup = ge.option = [1, "", " "]);
+ var me = /<|?\w+;/;
+
+ function xe(e, t, n, r, i) {
+ for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++) if ((o = e[d]) || 0 === o) if ("object" === w(o)) S.merge(p, o.nodeType ? [o] : o); else if (me.test(o)) {
+ a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2], c = u[0];
+ while (c--) a = a.lastChild;
+ S.merge(p, a.childNodes), (a = f.firstChild).textContent = ""
+ } else p.push(t.createTextNode(o));
+ f.textContent = "", d = 0;
+ while (o = p[d++]) if (r && -1 < S.inArray(o, r)) i && i.push(o); else if (l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) {
+ c = 0;
+ while (o = a[c++]) he.test(o.type || "") && n.push(o)
+ }
+ return f
+ }
+
+ var be = /^([^.]*)(?:\.(.+)|)/;
+
+ function we() {
+ return !0
+ }
+
+ function Te() {
+ return !1
+ }
+
+ function Ce(e, t) {
+ return e === function () {
+ try {
+ return E.activeElement
+ } catch (e) {
+ }
+ }() == ("focus" === t)
+ }
+
+ function Ee(e, t, n, r, i, o) {
+ var a, s;
+ if ("object" == typeof t) {
+ for (s in "string" != typeof n && (r = r || n, n = void 0), t) Ee(e, s, n, r, t[s], o);
+ return e
+ }
+ if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Te; else if (!i) return e;
+ return 1 === o && (a = i, (i = function (e) {
+ return S().off(e), a.apply(this, arguments)
+ }).guid = a.guid || (a.guid = S.guid++)), e.each(function () {
+ S.event.add(this, t, i, r, n)
+ })
+ }
+
+ function Se(e, i, o) {
+ o ? (Y.set(e, i, !1), S.event.add(e, i, {
+ namespace: !1, handler: function (e) {
+ var t, n, r = Y.get(this, i);
+ if (1 & e.isTrigger && this[i]) {
+ if (r.length) (S.event.special[i] || {}).delegateType && e.stopPropagation(); else if (r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n && n.value
+ } else r.length && (Y.set(this, i, {value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this)}), e.stopImmediatePropagation())
+ }
+ })) : void 0 === Y.get(e, i) && S.event.add(e, i, we)
+ }
+
+ S.event = {
+ global: {}, add: function (t, e, n, r, i) {
+ var o, a, s, u, l, c, f, p, d, h, g, v = Y.get(t);
+ if (V(t)) {
+ n.handler && (n = (o = n).handler, i = o.selector), i && S.find.matchesSelector(re, i), n.guid || (n.guid = S.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function (e) {
+ return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0
+ }), l = (e = (e || "").match(P) || [""]).length;
+ while (l--) d = g = (s = be.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({
+ type: d,
+ origType: g,
+ data: r,
+ handler: n,
+ guid: n.guid,
+ selector: i,
+ needsContext: i && S.expr.match.needsContext.test(i),
+ namespace: h.join(".")
+ }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0)
+ }
+ }, remove: function (e, t, n, r, i) {
+ var o, a, s, u, l, c, f, p, d, h, g, v = Y.hasData(e) && Y.get(e);
+ if (v && (u = v.events)) {
+ l = (t = (t || "").match(P) || [""]).length;
+ while (l--) if (d = g = (s = be.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) {
+ f = S.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length;
+ while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
+ a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d])
+ } else for (d in u) S.event.remove(e, d + t[l], n, r, !0);
+ S.isEmptyObject(u) && Y.remove(e, "handle events")
+ }
+ }, dispatch: function (e) {
+ var t, n, r, i, o, a, s = new Array(arguments.length), u = S.event.fix(e),
+ l = (Y.get(this, "events") || Object.create(null))[u.type] || [], c = S.event.special[u.type] || {};
+ for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t];
+ if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) {
+ a = S.event.handlers.call(this, u, l), t = 0;
+ while ((i = a[t++]) && !u.isPropagationStopped()) {
+ u.currentTarget = i.elem, n = 0;
+ while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation()))
+ }
+ return c.postDispatch && c.postDispatch.call(this, u), u.result
+ }
+ }, handlers: function (e, t) {
+ var n, r, i, o, a, s = [], u = t.delegateCount, l = e.target;
+ if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) for (; l !== this; l = l.parentNode || this) if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
+ for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r);
+ o.length && s.push({elem: l, handlers: o})
+ }
+ return l = this, u < t.length && s.push({elem: l, handlers: t.slice(u)}), s
+ }, addProp: function (t, e) {
+ Object.defineProperty(S.Event.prototype, t, {
+ enumerable: !0, configurable: !0, get: m(e) ? function () {
+ if (this.originalEvent) return e(this.originalEvent)
+ } : function () {
+ if (this.originalEvent) return this.originalEvent[t]
+ }, set: function (e) {
+ Object.defineProperty(this, t, {enumerable: !0, configurable: !0, writable: !0, value: e})
+ }
+ })
+ }, fix: function (e) {
+ return e[S.expando] ? e : new S.Event(e)
+ }, special: {
+ load: {noBubble: !0}, click: {
+ setup: function (e) {
+ var t = this || e;
+ return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click", we), !1
+ }, trigger: function (e) {
+ var t = this || e;
+ return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click"), !0
+ }, _default: function (e) {
+ var t = e.target;
+ return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a")
+ }
+ }, beforeunload: {
+ postDispatch: function (e) {
+ void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
+ }
+ }
+ }
+ }, S.removeEvent = function (e, t, n) {
+ e.removeEventListener && e.removeEventListener(t, n)
+ }, S.Event = function (e, t) {
+ if (!(this instanceof S.Event)) return new S.Event(e, t);
+ e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? we : Te, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && S.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[S.expando] = !0
+ }, S.Event.prototype = {
+ constructor: S.Event,
+ isDefaultPrevented: Te,
+ isPropagationStopped: Te,
+ isImmediatePropagationStopped: Te,
+ isSimulated: !1,
+ preventDefault: function () {
+ var e = this.originalEvent;
+ this.isDefaultPrevented = we, e && !this.isSimulated && e.preventDefault()
+ },
+ stopPropagation: function () {
+ var e = this.originalEvent;
+ this.isPropagationStopped = we, e && !this.isSimulated && e.stopPropagation()
+ },
+ stopImmediatePropagation: function () {
+ var e = this.originalEvent;
+ this.isImmediatePropagationStopped = we, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation()
+ }
+ }, S.each({
+ altKey: !0,
+ bubbles: !0,
+ cancelable: !0,
+ changedTouches: !0,
+ ctrlKey: !0,
+ detail: !0,
+ eventPhase: !0,
+ metaKey: !0,
+ pageX: !0,
+ pageY: !0,
+ shiftKey: !0,
+ view: !0,
+ "char": !0,
+ code: !0,
+ charCode: !0,
+ key: !0,
+ keyCode: !0,
+ button: !0,
+ buttons: !0,
+ clientX: !0,
+ clientY: !0,
+ offsetX: !0,
+ offsetY: !0,
+ pointerId: !0,
+ pointerType: !0,
+ screenX: !0,
+ screenY: !0,
+ targetTouches: !0,
+ toElement: !0,
+ touches: !0,
+ which: !0
+ }, S.event.addProp), S.each({focus: "focusin", blur: "focusout"}, function (e, t) {
+ S.event.special[e] = {
+ setup: function () {
+ return Se(this, e, Ce), !1
+ }, trigger: function () {
+ return Se(this, e), !0
+ }, _default: function () {
+ return !0
+ }, delegateType: t
+ }
+ }), S.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function (e, i) {
+ S.event.special[e] = {
+ delegateType: i, bindType: i, handle: function (e) {
+ var t, n = e.relatedTarget, r = e.handleObj;
+ return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t
+ }
+ }
+ }), S.fn.extend({
+ on: function (e, t, n, r) {
+ return Ee(this, e, t, n, r)
+ }, one: function (e, t, n, r) {
+ return Ee(this, e, t, n, r, 1)
+ }, off: function (e, t, n) {
+ var r, i;
+ if (e && e.preventDefault && e.handleObj) return r = e.handleObj, S(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
+ if ("object" == typeof e) {
+ for (i in e) this.off(i, t, e[i]);
+ return this
+ }
+ return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Te), this.each(function () {
+ S.event.remove(this, e, n, t)
+ })
+ }
+ });
+ var ke = /
+
+