Version Description
Download this release
Release Info
Developer | paultgoodchild |
Plugin | Shield Security for WordPress |
Version | 9.1.0 |
Comparing to | |
See all releases |
Code changes from version 9.0.4 to 9.1.0
- icwp-wpsf.php +1 -1
- plugin-spec.php +28 -22
- readme.txt +21 -38
- resources/css/bootstrap4.css +128 -74
- resources/css/bootstrap4.min.css +4 -4
- resources/css/plugin.css +4 -0
- resources/js/bootstrap4.bundle.js +515 -616
- resources/js/bootstrap4.bundle.min.js +3 -3
- resources/js/bootstrap4.js +516 -617
- resources/js/bootstrap4.min.js +3 -3
- resources/js/global-plugin.js +1 -1
- resources/js/shield-scans.js +0 -2
- resources/js/shield-u2f-admin.js +67 -0
- resources/js/shield-userprofile.js +21 -0
- resources/js/u2f-bundle.js +830 -0
- resources/js/u2f-frontend.js +42 -0
- src/config/feature-admin_access_restriction.php +10 -7
- src/config/feature-comments_filter.php +3 -3
- src/config/feature-email.php +3 -0
- src/config/feature-events.php +3 -0
- src/config/feature-firewall.php +5 -1
- src/config/feature-hack_protect.php +4 -1
- src/config/feature-insights.php +3 -0
- src/config/feature-login_protect.php +21 -9
- src/config/feature-plugin.php +13 -1
- src/config/feature-sessions.php +3 -0
- src/features/admin_access_restriction.php +25 -6
- src/features/base.php +75 -11
- src/features/base_wpsf.php +5 -36
- src/features/firewall.php +0 -26
- src/features/hack_protect.php +0 -61
- src/features/insights.php +1 -1
- src/features/login_protect.php +0 -68
- src/features/plugin.php +1 -25
- src/features/traffic.php +0 -24
- src/features/user_management.php +0 -9
- src/lib/custom/U2F/Yubico/U2F.php +572 -0
- src/lib/src/Controller/Controller.php +31 -14
- src/lib/src/Controller/Utilities/Upgrade.php +26 -0
- src/lib/src/Databases/Base/Handler.php +53 -1
- src/lib/src/Databases/IPs/Handler.php +12 -16
- src/lib/src/License/EddLicenseVO.php +2 -1
- src/lib/src/Modules/AuditTrail/AjaxHandler.php +1 -1
- src/lib/src/Modules/AuditTrail/Options.php +0 -8
- src/lib/src/Modules/AuditTrail/WpCli.php +18 -0
- src/lib/src/Modules/AuditTrail/WpCli/Display.php +75 -0
- src/lib/src/Modules/Autoupdates/Options.php +0 -25
- src/lib/src/Modules/Base/Options.php +78 -53
- src/lib/src/Modules/Base/Options/OptValueSanitize.php +92 -0
- src/lib/src/Modules/Base/Strings.php +10 -6
- src/lib/src/Modules/Base/Upgrade.php +8 -20
- src/lib/src/Modules/Base/WpCli.php +39 -0
- src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php +130 -0
- src/lib/src/Modules/Base/WpCli/ModuleStandard.php +201 -0
- src/lib/src/Modules/BaseShield/ShieldProcessor.php +0 -46
- src/lib/src/Modules/CommentsFilter/Scan/Human.php +0 -2
- src/lib/src/Modules/CommentsFilter/Upgrade.php +13 -0
- src/lib/src/Modules/Events/Strings.php +2 -2
- src/lib/src/Modules/HackGuard/AjaxHandler.php +16 -9
- src/lib/src/Modules/HackGuard/Lib/FileLocker/File.php +1 -1
- src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php +13 -6
- src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Accept.php +1 -0
- src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/CreateFileLocks.php +0 -1
- src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php +76 -0
- src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/LoadFileLocks.php +6 -5
- src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/PerformAction.php +3 -27
- src/lib/src/Modules/HackGuard/Options.php +0 -84
- src/lib/src/Modules/HackGuard/Strings.php +2 -1
- src/lib/src/Modules/IPs/AjaxHandler.php +1 -1
- src/lib/src/Modules/IPs/Lib/Ops/AddIp.php +8 -3
- src/lib/src/Modules/IPs/Upgrade.php +19 -0
- src/lib/src/Modules/IPs/WpCli.php +20 -0
- src/lib/src/Modules/IPs/WpCli/Add.php +55 -0
- src/lib/src/Modules/IPs/WpCli/BaseAddRemove.php +32 -0
- src/lib/src/Modules/IPs/WpCli/Enumerate.php +54 -0
- src/lib/src/Modules/IPs/WpCli/Remove.php +45 -0
- src/lib/src/Modules/License/WpCli.php +18 -0
- src/lib/src/Modules/License/WpCli/License.php +123 -0
- src/lib/src/Modules/LoginGuard/AjaxHandler.php +44 -0
- src/lib/src/Modules/LoginGuard/Lib/AntiBot/IncludeJs.php +0 -25
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php +22 -10
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php +24 -34
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaSkip.php +67 -0
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Backup.php +1 -0
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php +22 -4
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php +35 -22
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php +1 -2
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php +377 -0
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php +24 -6
- src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php +9 -1
- src/lib/src/Modules/LoginGuard/Options.php +9 -0
- src/lib/src/Modules/LoginGuard/Strings.php +23 -7
- src/lib/src/Modules/Plugin/AjaxHandler.php +10 -4
- src/lib/src/Modules/Plugin/Components/PluginBadge.php +15 -6
- src/lib/src/Modules/Plugin/Lib/ImportExport/Export.php +10 -3
- src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php +106 -96
- src/lib/src/Modules/Plugin/Lib/Ops/ResetPlugin.php +23 -0
- src/lib/src/Modules/Plugin/Options.php +8 -1
- src/lib/src/Modules/Plugin/Strings.php +20 -4
- src/lib/src/Modules/Plugin/WpCli.php +21 -0
- src/lib/src/Modules/Plugin/WpCli/Export.php +25 -0
icwp-wpsf.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://shsec.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
-
* Version: 9.0
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: Shield Security
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://shsec.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
+
* Version: 9.1.0
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: Shield Security
|
plugin-spec.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
{
|
2 |
-
"properties":
|
3 |
-
"version": "9.0
|
4 |
-
"release_timestamp":
|
5 |
-
"build": "202006.
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield",
|
@@ -18,11 +18,11 @@
|
|
18 |
"options_encoding": "json",
|
19 |
"enable_premium": true
|
20 |
},
|
21 |
-
"requirements":
|
22 |
"php": "5.4.0",
|
23 |
"wordpress": "3.5.2"
|
24 |
},
|
25 |
-
"upgrade_reqs":
|
26 |
"7.0": {
|
27 |
"php": "5.4",
|
28 |
"wp": "3.5.2"
|
@@ -32,16 +32,17 @@
|
|
32 |
"wp": "3.5.2"
|
33 |
}
|
34 |
},
|
35 |
-
"paths":
|
36 |
-
"source":
|
37 |
-
"autoload":
|
38 |
-
"assets":
|
39 |
-
"languages":
|
40 |
-
"templates":
|
41 |
-
"
|
42 |
-
"
|
|
|
43 |
},
|
44 |
-
"includes":
|
45 |
"admin": {
|
46 |
"css": [
|
47 |
"global-plugin"
|
@@ -75,7 +76,7 @@
|
|
75 |
"css": null
|
76 |
}
|
77 |
},
|
78 |
-
"menu":
|
79 |
"show": true,
|
80 |
"title": "Shield Security",
|
81 |
"top_level": true,
|
@@ -84,7 +85,7 @@
|
|
84 |
"icon_image": "pluginlogo_16x16.png",
|
85 |
"has_submenu": true
|
86 |
},
|
87 |
-
"labels":
|
88 |
"Name": "Shield",
|
89 |
"Description": "Ultimate WP Security Protection - Scans, 2FA, Firewall, SPAM, Audit Trail, Security Admin, and so much more.",
|
90 |
"Title": "Shield Security",
|
@@ -96,18 +97,23 @@
|
|
96 |
"icon_url_32x32": "pluginlogo_32x32.png",
|
97 |
"icon_url_128x128": "pluginlogo_128x128.png"
|
98 |
},
|
99 |
-
"meta":
|
100 |
-
"url_repo_home":
|
101 |
"announcekit_changelog_id": "3ObUvS",
|
102 |
-
"privacy_policy_href":
|
103 |
},
|
104 |
-
"plugin_meta":
|
105 |
{
|
106 |
"name": "5✩ Rate This Plugin",
|
107 |
"href": "https://shsec.io/wpsf29"
|
108 |
}
|
109 |
],
|
110 |
-
"
|
|
|
|
|
|
|
|
|
|
|
111 |
"remove": null,
|
112 |
"add": [
|
113 |
{
|
1 |
{
|
2 |
+
"properties": {
|
3 |
+
"version": "9.1.0",
|
4 |
+
"release_timestamp": 1592902029,
|
5 |
+
"build": "202006.2301",
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield",
|
18 |
"options_encoding": "json",
|
19 |
"enable_premium": true
|
20 |
},
|
21 |
+
"requirements": {
|
22 |
"php": "5.4.0",
|
23 |
"wordpress": "3.5.2"
|
24 |
},
|
25 |
+
"upgrade_reqs": {
|
26 |
"7.0": {
|
27 |
"php": "5.4",
|
28 |
"wp": "3.5.2"
|
32 |
"wp": "3.5.2"
|
33 |
}
|
34 |
},
|
35 |
+
"paths": {
|
36 |
+
"source": "src",
|
37 |
+
"autoload": "lib/vendor/autoload.php",
|
38 |
+
"assets": "resources",
|
39 |
+
"languages": "languages",
|
40 |
+
"templates": "templates",
|
41 |
+
"custom_templates": "shield_templates",
|
42 |
+
"flags": "flags",
|
43 |
+
"cache": "shield"
|
44 |
},
|
45 |
+
"includes": {
|
46 |
"admin": {
|
47 |
"css": [
|
48 |
"global-plugin"
|
76 |
"css": null
|
77 |
}
|
78 |
},
|
79 |
+
"menu": {
|
80 |
"show": true,
|
81 |
"title": "Shield Security",
|
82 |
"top_level": true,
|
85 |
"icon_image": "pluginlogo_16x16.png",
|
86 |
"has_submenu": true
|
87 |
},
|
88 |
+
"labels": {
|
89 |
"Name": "Shield",
|
90 |
"Description": "Ultimate WP Security Protection - Scans, 2FA, Firewall, SPAM, Audit Trail, Security Admin, and so much more.",
|
91 |
"Title": "Shield Security",
|
97 |
"icon_url_32x32": "pluginlogo_32x32.png",
|
98 |
"icon_url_128x128": "pluginlogo_128x128.png"
|
99 |
},
|
100 |
+
"meta": {
|
101 |
+
"url_repo_home": "https://shsec.io/eh",
|
102 |
"announcekit_changelog_id": "3ObUvS",
|
103 |
+
"privacy_policy_href": "https://shsec.io/shieldprivacypolicy"
|
104 |
},
|
105 |
+
"plugin_meta": [
|
106 |
{
|
107 |
"name": "5✩ Rate This Plugin",
|
108 |
"href": "https://shsec.io/wpsf29"
|
109 |
}
|
110 |
],
|
111 |
+
"version_upgrades": [
|
112 |
+
"9.0.0",
|
113 |
+
"9.0.3",
|
114 |
+
"9.0.5"
|
115 |
+
],
|
116 |
+
"action_links": {
|
117 |
"remove": null,
|
118 |
"add": [
|
119 |
{
|
readme.txt
CHANGED
@@ -7,8 +7,8 @@ Tags: scan, malware, firewall, two factor authentication, login protection
|
|
7 |
Requires at least: 3.5.2
|
8 |
Requires PHP: 5.4.0
|
9 |
Recommended PHP: 7.0
|
10 |
-
Tested up to: 5.
|
11 |
-
Stable tag: 9.0
|
12 |
|
13 |
Smarter security protection from hackers through automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
|
14 |
|
@@ -370,41 +370,24 @@ You will always be able to use Shield Security and its free features in-full.
|
|
370 |
|
371 |
[Go Pro for just $1/month](https://shsec.io/aa).
|
372 |
|
373 |
-
#### 9.0 Series
|
374 |
-
*Released: 5th April 2020* - [Release Announcement](https://shsec.io/hq)
|
375 |
-
|
376 |
**Important**: The 9.0 Series is the last major version to support PHP 5.x. Shield 10+ will require a minimum of PHP 7.0.
|
377 |
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
* **(.
|
384 |
-
* **(.
|
385 |
-
* **(.
|
386 |
-
* **(.
|
387 |
-
* **(.
|
388 |
-
* **(.
|
389 |
-
* **(.
|
390 |
-
* **(.
|
391 |
-
* **(.
|
392 |
-
* **(.
|
393 |
-
* **(.
|
394 |
-
* **(.0)
|
395 |
-
|
396 |
-
|
397 |
-
* **(.0) NEW**: Reporting Module - streamline notifications and alerts and provide regular statistics updates.
|
398 |
-
* **(.0) NEW**: Integrated Help desk widget for searching documentation.
|
399 |
-
* **(.0) NEW**: Debug page to show summary and important information for debugging.
|
400 |
-
* **(.0) IMPROVED**: Hourly and Daily crons set to specific run times.
|
401 |
-
* **(.0) IMPROVED**: Automatic file repair for WordPress, plugins, and themes is much more reliable.
|
402 |
-
* **(.0) IMPROVED**: Major refactoring and improvements to Bot protection on login, register and lost password forms.
|
403 |
-
* **(.0) IMPROVED**: Simplification of many options and plugin configuration.
|
404 |
-
* **(.0) IMPROVED**: Where an IP address gets repeatedly blocked - consolidates Audit Trail entries over a 24hr period.
|
405 |
-
* **(.0) IMPROVED**: Tweaks and changes to UI.
|
406 |
-
* **(.0) FIXED**: Minor issues with the MFA page.
|
407 |
-
* **(.0) FIXED**: Older Twig Library compatibility with PHP 7.4.
|
408 |
-
* **(.0) REMOVED**: Several unused/useless options, including "Mask WordPress Version".
|
409 |
-
|
410 |
-
##### [Full Shield Security Changelog](https://shsec.io/shieldwporgfullchangelog)
|
7 |
Requires at least: 3.5.2
|
8 |
Requires PHP: 5.4.0
|
9 |
Recommended PHP: 7.0
|
10 |
+
Tested up to: 5.5
|
11 |
+
Stable tag: 9.1.0
|
12 |
|
13 |
Smarter security protection from hackers through automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
|
14 |
|
370 |
|
371 |
[Go Pro for just $1/month](https://shsec.io/aa).
|
372 |
|
|
|
|
|
|
|
373 |
**Important**: The 9.0 Series is the last major version to support PHP 5.x. Shield 10+ will require a minimum of PHP 7.0.
|
374 |
|
375 |
+
#### 9.1 Series
|
376 |
+
*Released: 23rd April 2020* - [Release Announcement](https://shsec.io/shieldrelease91)
|
377 |
+
|
378 |
+
##### [Please review the full Shield 9.1 Upgrade Guide here](https://shsec.io/shieldupgradeguide91).
|
379 |
+
|
380 |
+
* **(.0) NEW**: [*PRO*] [WP-CLI](https://shsec.io/hw) Support for WP-CLI (beta).
|
381 |
+
* **(.0) NEW**: [*PRO*] [U2F Login](https://shsec.io/hv) - Support for registration and use of U2F keys for 2-factor authentication.
|
382 |
+
* **(.0) NEW**: [*PRO*] [Custom Email Templates](https://shsec.io/hy) - Support for custom email templates, starting with 2FA.
|
383 |
+
* **(.0) NEW**: [*PRO*] [Affiliate Rewards](https://shsec.io/hz) - We now offer affiliate rewards with ShieldPRO.
|
384 |
+
* **(.0) IMPROVED**: WP-Config File Locker protection now correctly display the file diff for empty lines.
|
385 |
+
* **(.0) IMPROVED**: 2-Factor Authentication "Remember Me" now uses the visitor IP address as a factor.
|
386 |
+
* **(.0) IMPROVED**: Restored the option search but turned it into a modal dialog.
|
387 |
+
* **(.0) IMPROVED**: Plugin upgrade handling.
|
388 |
+
* **(.0) CHANGED**: To avoid confusion, "Security Admin Key" has been renamed to "Security Admin PIN" throughout.
|
389 |
+
* **(.0) FIXED**: Adding IPv6 address ranges didn't work in all cases.
|
390 |
+
* **(.0) FIXED**: Errors while trying to access an uninitialised database.
|
391 |
+
* **(.0) FIXED**: Upgrade Carbon PHP library to latest available (v1.39).
|
392 |
+
|
393 |
+
##### [Entire Shield Security Changelog](https://shsec.io/shieldwporgfullchangelog)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resources/css/bootstrap4.css
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
-
* Copyright 2011-
|
5 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
6 |
*/
|
7 |
:root {
|
@@ -185,6 +185,7 @@ pre {
|
|
185 |
margin-top: 0;
|
186 |
margin-bottom: 1rem;
|
187 |
overflow: auto;
|
|
|
188 |
}
|
189 |
|
190 |
figure {
|
@@ -252,6 +253,10 @@ select {
|
|
252 |
text-transform: none;
|
253 |
}
|
254 |
|
|
|
|
|
|
|
|
|
255 |
select {
|
256 |
word-wrap: normal;
|
257 |
}
|
@@ -284,13 +289,6 @@ input[type="checkbox"] {
|
|
284 |
padding: 0;
|
285 |
}
|
286 |
|
287 |
-
input[type="date"],
|
288 |
-
input[type="time"],
|
289 |
-
input[type="datetime-local"],
|
290 |
-
input[type="month"] {
|
291 |
-
-webkit-appearance: listbox;
|
292 |
-
}
|
293 |
-
|
294 |
textarea {
|
295 |
overflow: auto;
|
296 |
resize: vertical;
|
@@ -642,6 +640,7 @@ pre code {
|
|
642 |
flex-basis: 0;
|
643 |
-ms-flex-positive: 1;
|
644 |
flex-grow: 1;
|
|
|
645 |
max-width: 100%;
|
646 |
}
|
647 |
|
@@ -885,6 +884,7 @@ pre code {
|
|
885 |
flex-basis: 0;
|
886 |
-ms-flex-positive: 1;
|
887 |
flex-grow: 1;
|
|
|
888 |
max-width: 100%;
|
889 |
}
|
890 |
.row-cols-sm-1 > * {
|
@@ -1087,6 +1087,7 @@ pre code {
|
|
1087 |
flex-basis: 0;
|
1088 |
-ms-flex-positive: 1;
|
1089 |
flex-grow: 1;
|
|
|
1090 |
max-width: 100%;
|
1091 |
}
|
1092 |
.row-cols-md-1 > * {
|
@@ -1289,6 +1290,7 @@ pre code {
|
|
1289 |
flex-basis: 0;
|
1290 |
-ms-flex-positive: 1;
|
1291 |
flex-grow: 1;
|
|
|
1292 |
max-width: 100%;
|
1293 |
}
|
1294 |
.row-cols-lg-1 > * {
|
@@ -1491,6 +1493,7 @@ pre code {
|
|
1491 |
flex-basis: 0;
|
1492 |
-ms-flex-positive: 1;
|
1493 |
flex-grow: 1;
|
|
|
1494 |
max-width: 100%;
|
1495 |
}
|
1496 |
.row-cols-xl-1 > * {
|
@@ -2100,6 +2103,15 @@ pre code {
|
|
2100 |
opacity: 1;
|
2101 |
}
|
2102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2103 |
select.form-control:focus::-ms-value {
|
2104 |
color: #495057;
|
2105 |
background-color: #fff;
|
@@ -2517,7 +2529,6 @@ textarea.form-control {
|
|
2517 |
color: #212529;
|
2518 |
text-align: center;
|
2519 |
vertical-align: middle;
|
2520 |
-
cursor: pointer;
|
2521 |
-webkit-user-select: none;
|
2522 |
-moz-user-select: none;
|
2523 |
-ms-user-select: none;
|
@@ -2551,6 +2562,10 @@ textarea.form-control {
|
|
2551 |
opacity: 0.65;
|
2552 |
}
|
2553 |
|
|
|
|
|
|
|
|
|
2554 |
a.btn.disabled,
|
2555 |
fieldset:disabled a.btn {
|
2556 |
pointer-events: none;
|
@@ -3121,7 +3136,6 @@ fieldset:disabled a.btn {
|
|
3121 |
|
3122 |
.btn-link:focus, .btn-link.focus {
|
3123 |
text-decoration: underline;
|
3124 |
-
box-shadow: none;
|
3125 |
}
|
3126 |
|
3127 |
.btn-link:disabled, .btn-link.disabled {
|
@@ -3580,8 +3594,9 @@ input[type="button"].btn-block {
|
|
3580 |
.input-group > .custom-select,
|
3581 |
.input-group > .custom-file {
|
3582 |
position: relative;
|
3583 |
-
-ms-flex: 1 1
|
3584 |
-
flex: 1 1
|
|
|
3585 |
min-width: 0;
|
3586 |
margin-bottom: 0;
|
3587 |
}
|
@@ -4661,7 +4676,7 @@ input[type="button"].btn-block {
|
|
4661 |
}
|
4662 |
|
4663 |
.navbar-light .navbar-toggler-icon {
|
4664 |
-
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba
|
4665 |
}
|
4666 |
|
4667 |
.navbar-light .navbar-text {
|
@@ -4709,7 +4724,7 @@ input[type="button"].btn-block {
|
|
4709 |
}
|
4710 |
|
4711 |
.navbar-dark .navbar-toggler-icon {
|
4712 |
-
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba
|
4713 |
}
|
4714 |
|
4715 |
.navbar-dark .navbar-text {
|
@@ -4743,14 +4758,21 @@ input[type="button"].btn-block {
|
|
4743 |
margin-left: 0;
|
4744 |
}
|
4745 |
|
4746 |
-
.card > .list-group
|
4747 |
-
border-top
|
4748 |
-
border-
|
4749 |
}
|
4750 |
|
4751 |
-
.card > .list-group:
|
4752 |
-
border-
|
4753 |
-
border-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4754 |
}
|
4755 |
|
4756 |
.card-body {
|
@@ -4968,6 +4990,11 @@ input[type="button"].btn-block {
|
|
4968 |
border-radius: 0.25rem;
|
4969 |
}
|
4970 |
|
|
|
|
|
|
|
|
|
|
|
4971 |
.breadcrumb-item + .breadcrumb-item {
|
4972 |
padding-left: 0.5rem;
|
4973 |
}
|
@@ -5422,6 +5449,7 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5422 |
display: flex;
|
5423 |
height: 1rem;
|
5424 |
overflow: hidden;
|
|
|
5425 |
font-size: 0.75rem;
|
5426 |
background-color: #e9ecef;
|
5427 |
border-radius: 0.25rem;
|
@@ -5484,6 +5512,7 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5484 |
flex-direction: column;
|
5485 |
padding-left: 0;
|
5486 |
margin-bottom: 0;
|
|
|
5487 |
}
|
5488 |
|
5489 |
.list-group-item-action {
|
@@ -5513,13 +5542,13 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5513 |
}
|
5514 |
|
5515 |
.list-group-item:first-child {
|
5516 |
-
border-top-left-radius:
|
5517 |
-
border-top-right-radius:
|
5518 |
}
|
5519 |
|
5520 |
.list-group-item:last-child {
|
5521 |
-
border-bottom-right-radius:
|
5522 |
-
border-bottom-left-radius:
|
5523 |
}
|
5524 |
|
5525 |
.list-group-item.disabled, .list-group-item:disabled {
|
@@ -5549,26 +5578,26 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5549 |
flex-direction: row;
|
5550 |
}
|
5551 |
|
5552 |
-
.list-group-horizontal .list-group-item:first-child {
|
5553 |
border-bottom-left-radius: 0.25rem;
|
5554 |
border-top-right-radius: 0;
|
5555 |
}
|
5556 |
|
5557 |
-
.list-group-horizontal .list-group-item:last-child {
|
5558 |
border-top-right-radius: 0.25rem;
|
5559 |
border-bottom-left-radius: 0;
|
5560 |
}
|
5561 |
|
5562 |
-
.list-group-horizontal .list-group-item.active {
|
5563 |
margin-top: 0;
|
5564 |
}
|
5565 |
|
5566 |
-
.list-group-horizontal .list-group-item + .list-group-item {
|
5567 |
border-top-width: 1px;
|
5568 |
border-left-width: 0;
|
5569 |
}
|
5570 |
|
5571 |
-
.list-group-horizontal .list-group-item + .list-group-item.active {
|
5572 |
margin-left: -1px;
|
5573 |
border-left-width: 1px;
|
5574 |
}
|
@@ -5578,22 +5607,22 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5578 |
-ms-flex-direction: row;
|
5579 |
flex-direction: row;
|
5580 |
}
|
5581 |
-
.list-group-horizontal-sm .list-group-item:first-child {
|
5582 |
border-bottom-left-radius: 0.25rem;
|
5583 |
border-top-right-radius: 0;
|
5584 |
}
|
5585 |
-
.list-group-horizontal-sm .list-group-item:last-child {
|
5586 |
border-top-right-radius: 0.25rem;
|
5587 |
border-bottom-left-radius: 0;
|
5588 |
}
|
5589 |
-
.list-group-horizontal-sm .list-group-item.active {
|
5590 |
margin-top: 0;
|
5591 |
}
|
5592 |
-
.list-group-horizontal-sm .list-group-item + .list-group-item {
|
5593 |
border-top-width: 1px;
|
5594 |
border-left-width: 0;
|
5595 |
}
|
5596 |
-
.list-group-horizontal-sm .list-group-item + .list-group-item.active {
|
5597 |
margin-left: -1px;
|
5598 |
border-left-width: 1px;
|
5599 |
}
|
@@ -5604,22 +5633,22 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5604 |
-ms-flex-direction: row;
|
5605 |
flex-direction: row;
|
5606 |
}
|
5607 |
-
.list-group-horizontal-md .list-group-item:first-child {
|
5608 |
border-bottom-left-radius: 0.25rem;
|
5609 |
border-top-right-radius: 0;
|
5610 |
}
|
5611 |
-
.list-group-horizontal-md .list-group-item:last-child {
|
5612 |
border-top-right-radius: 0.25rem;
|
5613 |
border-bottom-left-radius: 0;
|
5614 |
}
|
5615 |
-
.list-group-horizontal-md .list-group-item.active {
|
5616 |
margin-top: 0;
|
5617 |
}
|
5618 |
-
.list-group-horizontal-md .list-group-item + .list-group-item {
|
5619 |
border-top-width: 1px;
|
5620 |
border-left-width: 0;
|
5621 |
}
|
5622 |
-
.list-group-horizontal-md .list-group-item + .list-group-item.active {
|
5623 |
margin-left: -1px;
|
5624 |
border-left-width: 1px;
|
5625 |
}
|
@@ -5630,22 +5659,22 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5630 |
-ms-flex-direction: row;
|
5631 |
flex-direction: row;
|
5632 |
}
|
5633 |
-
.list-group-horizontal-lg .list-group-item:first-child {
|
5634 |
border-bottom-left-radius: 0.25rem;
|
5635 |
border-top-right-radius: 0;
|
5636 |
}
|
5637 |
-
.list-group-horizontal-lg .list-group-item:last-child {
|
5638 |
border-top-right-radius: 0.25rem;
|
5639 |
border-bottom-left-radius: 0;
|
5640 |
}
|
5641 |
-
.list-group-horizontal-lg .list-group-item.active {
|
5642 |
margin-top: 0;
|
5643 |
}
|
5644 |
-
.list-group-horizontal-lg .list-group-item + .list-group-item {
|
5645 |
border-top-width: 1px;
|
5646 |
border-left-width: 0;
|
5647 |
}
|
5648 |
-
.list-group-horizontal-lg .list-group-item + .list-group-item.active {
|
5649 |
margin-left: -1px;
|
5650 |
border-left-width: 1px;
|
5651 |
}
|
@@ -5656,38 +5685,36 @@ a.badge-dark:focus, a.badge-dark.focus {
|
|
5656 |
-ms-flex-direction: row;
|
5657 |
flex-direction: row;
|
5658 |
}
|
5659 |
-
.list-group-horizontal-xl .list-group-item:first-child {
|
5660 |
border-bottom-left-radius: 0.25rem;
|
5661 |
border-top-right-radius: 0;
|
5662 |
}
|
5663 |
-
.list-group-horizontal-xl .list-group-item:last-child {
|
5664 |
border-top-right-radius: 0.25rem;
|
5665 |
border-bottom-left-radius: 0;
|
5666 |
}
|
5667 |
-
.list-group-horizontal-xl .list-group-item.active {
|
5668 |
margin-top: 0;
|
5669 |
}
|
5670 |
-
.list-group-horizontal-xl .list-group-item + .list-group-item {
|
5671 |
border-top-width: 1px;
|
5672 |
border-left-width: 0;
|
5673 |
}
|
5674 |
-
.list-group-horizontal-xl .list-group-item + .list-group-item.active {
|
5675 |
margin-left: -1px;
|
5676 |
border-left-width: 1px;
|
5677 |
}
|
5678 |
}
|
5679 |
|
5680 |
-
.list-group-flush
|
5681 |
-
border-right-width: 0;
|
5682 |
-
border-left-width: 0;
|
5683 |
border-radius: 0;
|
5684 |
}
|
5685 |
|
5686 |
-
.list-group-flush .list-group-item
|
5687 |
-
border-
|
5688 |
}
|
5689 |
|
5690 |
-
.list-group-flush
|
5691 |
border-bottom-width: 0;
|
5692 |
}
|
5693 |
|
@@ -5842,9 +5869,6 @@ button.close {
|
|
5842 |
padding: 0;
|
5843 |
background-color: transparent;
|
5844 |
border: 0;
|
5845 |
-
-webkit-appearance: none;
|
5846 |
-
-moz-appearance: none;
|
5847 |
-
appearance: none;
|
5848 |
}
|
5849 |
|
5850 |
a.close.disabled {
|
@@ -5982,6 +6006,9 @@ a.close.disabled {
|
|
5982 |
.modal-dialog-centered::before {
|
5983 |
display: block;
|
5984 |
height: calc(100vh - 1rem);
|
|
|
|
|
|
|
5985 |
content: "";
|
5986 |
}
|
5987 |
|
@@ -6107,6 +6134,9 @@ a.close.disabled {
|
|
6107 |
}
|
6108 |
.modal-dialog-centered::before {
|
6109 |
height: calc(100vh - 3.5rem);
|
|
|
|
|
|
|
6110 |
}
|
6111 |
.modal-sm {
|
6112 |
max-width: 300px;
|
@@ -6638,6 +6668,8 @@ a.close.disabled {
|
|
6638 |
}
|
6639 |
50% {
|
6640 |
opacity: 1;
|
|
|
|
|
6641 |
}
|
6642 |
}
|
6643 |
|
@@ -6648,6 +6680,8 @@ a.close.disabled {
|
|
6648 |
}
|
6649 |
50% {
|
6650 |
opacity: 1;
|
|
|
|
|
6651 |
}
|
6652 |
}
|
6653 |
|
@@ -7933,6 +7967,27 @@ button.bg-dark:focus {
|
|
7933 |
}
|
7934 |
}
|
7935 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7936 |
.overflow-auto {
|
7937 |
overflow: auto !important;
|
7938 |
}
|
@@ -8088,18 +8143,6 @@ button.bg-dark:focus {
|
|
8088 |
height: 100vh !important;
|
8089 |
}
|
8090 |
|
8091 |
-
.stretched-link::after {
|
8092 |
-
position: absolute;
|
8093 |
-
top: 0;
|
8094 |
-
right: 0;
|
8095 |
-
bottom: 0;
|
8096 |
-
left: 0;
|
8097 |
-
z-index: 1;
|
8098 |
-
pointer-events: auto;
|
8099 |
-
content: "";
|
8100 |
-
background-color: rgba(0, 0, 0, 0);
|
8101 |
-
}
|
8102 |
-
|
8103 |
.m-0 {
|
8104 |
margin: 0 !important;
|
8105 |
}
|
@@ -9912,6 +9955,18 @@ button.bg-dark:focus {
|
|
9912 |
}
|
9913 |
}
|
9914 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9915 |
.text-monospace {
|
9916 |
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
|
9917 |
}
|
@@ -10127,8 +10182,7 @@ a.text-dark:hover, a.text-dark:focus {
|
|
10127 |
}
|
10128 |
|
10129 |
.text-break {
|
10130 |
-
word-
|
10131 |
-
overflow-wrap: break-word !important;
|
10132 |
}
|
10133 |
|
10134 |
.text-reset {
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors
|
4 |
+
* Copyright 2011-2020 Twitter, Inc.
|
5 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
6 |
*/
|
7 |
:root {
|
185 |
margin-top: 0;
|
186 |
margin-bottom: 1rem;
|
187 |
overflow: auto;
|
188 |
+
-ms-overflow-style: scrollbar;
|
189 |
}
|
190 |
|
191 |
figure {
|
253 |
text-transform: none;
|
254 |
}
|
255 |
|
256 |
+
[role="button"] {
|
257 |
+
cursor: pointer;
|
258 |
+
}
|
259 |
+
|
260 |
select {
|
261 |
word-wrap: normal;
|
262 |
}
|
289 |
padding: 0;
|
290 |
}
|
291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
textarea {
|
293 |
overflow: auto;
|
294 |
resize: vertical;
|
640 |
flex-basis: 0;
|
641 |
-ms-flex-positive: 1;
|
642 |
flex-grow: 1;
|
643 |
+
min-width: 0;
|
644 |
max-width: 100%;
|
645 |
}
|
646 |
|
884 |
flex-basis: 0;
|
885 |
-ms-flex-positive: 1;
|
886 |
flex-grow: 1;
|
887 |
+
min-width: 0;
|
888 |
max-width: 100%;
|
889 |
}
|
890 |
.row-cols-sm-1 > * {
|
1087 |
flex-basis: 0;
|
1088 |
-ms-flex-positive: 1;
|
1089 |
flex-grow: 1;
|
1090 |
+
min-width: 0;
|
1091 |
max-width: 100%;
|
1092 |
}
|
1093 |
.row-cols-md-1 > * {
|
1290 |
flex-basis: 0;
|
1291 |
-ms-flex-positive: 1;
|
1292 |
flex-grow: 1;
|
1293 |
+
min-width: 0;
|
1294 |
max-width: 100%;
|
1295 |
}
|
1296 |
.row-cols-lg-1 > * {
|
1493 |
flex-basis: 0;
|
1494 |
-ms-flex-positive: 1;
|
1495 |
flex-grow: 1;
|
1496 |
+
min-width: 0;
|
1497 |
max-width: 100%;
|
1498 |
}
|
1499 |
.row-cols-xl-1 > * {
|
2103 |
opacity: 1;
|
2104 |
}
|
2105 |
|
2106 |
+
input[type="date"].form-control,
|
2107 |
+
input[type="time"].form-control,
|
2108 |
+
input[type="datetime-local"].form-control,
|
2109 |
+
input[type="month"].form-control {
|
2110 |
+
-webkit-appearance: none;
|
2111 |
+
-moz-appearance: none;
|
2112 |
+
appearance: none;
|
2113 |
+
}
|
2114 |
+
|
2115 |
select.form-control:focus::-ms-value {
|
2116 |
color: #495057;
|
2117 |
background-color: #fff;
|
2529 |
color: #212529;
|
2530 |
text-align: center;
|
2531 |
vertical-align: middle;
|
|
|
2532 |
-webkit-user-select: none;
|
2533 |
-moz-user-select: none;
|
2534 |
-ms-user-select: none;
|
2562 |
opacity: 0.65;
|
2563 |
}
|
2564 |
|
2565 |
+
.btn:not(:disabled):not(.disabled) {
|
2566 |
+
cursor: pointer;
|
2567 |
+
}
|
2568 |
+
|
2569 |
a.btn.disabled,
|
2570 |
fieldset:disabled a.btn {
|
2571 |
pointer-events: none;
|
3136 |
|
3137 |
.btn-link:focus, .btn-link.focus {
|
3138 |
text-decoration: underline;
|
|
|
3139 |
}
|
3140 |
|
3141 |
.btn-link:disabled, .btn-link.disabled {
|
3594 |
.input-group > .custom-select,
|
3595 |
.input-group > .custom-file {
|
3596 |
position: relative;
|
3597 |
+
-ms-flex: 1 1 auto;
|
3598 |
+
flex: 1 1 auto;
|
3599 |
+
width: 1%;
|
3600 |
min-width: 0;
|
3601 |
margin-bottom: 0;
|
3602 |
}
|
4676 |
}
|
4677 |
|
4678 |
.navbar-light .navbar-toggler-icon {
|
4679 |
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
|
4680 |
}
|
4681 |
|
4682 |
.navbar-light .navbar-text {
|
4724 |
}
|
4725 |
|
4726 |
.navbar-dark .navbar-toggler-icon {
|
4727 |
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
|
4728 |
}
|
4729 |
|
4730 |
.navbar-dark .navbar-text {
|
4758 |
margin-left: 0;
|
4759 |
}
|
4760 |
|
4761 |
+
.card > .list-group {
|
4762 |
+
border-top: inherit;
|
4763 |
+
border-bottom: inherit;
|
4764 |
}
|
4765 |
|
4766 |
+
.card > .list-group:first-child {
|
4767 |
+
border-top-width: 0;
|
4768 |
+
border-top-left-radius: calc(0.25rem - 1px);
|
4769 |
+
border-top-right-radius: calc(0.25rem - 1px);
|
4770 |
+
}
|
4771 |
+
|
4772 |
+
.card > .list-group:last-child {
|
4773 |
+
border-bottom-width: 0;
|
4774 |
+
border-bottom-right-radius: calc(0.25rem - 1px);
|
4775 |
+
border-bottom-left-radius: calc(0.25rem - 1px);
|
4776 |
}
|
4777 |
|
4778 |
.card-body {
|
4990 |
border-radius: 0.25rem;
|
4991 |
}
|
4992 |
|
4993 |
+
.breadcrumb-item {
|
4994 |
+
display: -ms-flexbox;
|
4995 |
+
display: flex;
|
4996 |
+
}
|
4997 |
+
|
4998 |
.breadcrumb-item + .breadcrumb-item {
|
4999 |
padding-left: 0.5rem;
|
5000 |
}
|
5449 |
display: flex;
|
5450 |
height: 1rem;
|
5451 |
overflow: hidden;
|
5452 |
+
line-height: 0;
|
5453 |
font-size: 0.75rem;
|
5454 |
background-color: #e9ecef;
|
5455 |
border-radius: 0.25rem;
|
5512 |
flex-direction: column;
|
5513 |
padding-left: 0;
|
5514 |
margin-bottom: 0;
|
5515 |
+
border-radius: 0.25rem;
|
5516 |
}
|
5517 |
|
5518 |
.list-group-item-action {
|
5542 |
}
|
5543 |
|
5544 |
.list-group-item:first-child {
|
5545 |
+
border-top-left-radius: inherit;
|
5546 |
+
border-top-right-radius: inherit;
|
5547 |
}
|
5548 |
|
5549 |
.list-group-item:last-child {
|
5550 |
+
border-bottom-right-radius: inherit;
|
5551 |
+
border-bottom-left-radius: inherit;
|
5552 |
}
|
5553 |
|
5554 |
.list-group-item.disabled, .list-group-item:disabled {
|
5578 |
flex-direction: row;
|
5579 |
}
|
5580 |
|
5581 |
+
.list-group-horizontal > .list-group-item:first-child {
|
5582 |
border-bottom-left-radius: 0.25rem;
|
5583 |
border-top-right-radius: 0;
|
5584 |
}
|
5585 |
|
5586 |
+
.list-group-horizontal > .list-group-item:last-child {
|
5587 |
border-top-right-radius: 0.25rem;
|
5588 |
border-bottom-left-radius: 0;
|
5589 |
}
|
5590 |
|
5591 |
+
.list-group-horizontal > .list-group-item.active {
|
5592 |
margin-top: 0;
|
5593 |
}
|
5594 |
|
5595 |
+
.list-group-horizontal > .list-group-item + .list-group-item {
|
5596 |
border-top-width: 1px;
|
5597 |
border-left-width: 0;
|
5598 |
}
|
5599 |
|
5600 |
+
.list-group-horizontal > .list-group-item + .list-group-item.active {
|
5601 |
margin-left: -1px;
|
5602 |
border-left-width: 1px;
|
5603 |
}
|
5607 |
-ms-flex-direction: row;
|
5608 |
flex-direction: row;
|
5609 |
}
|
5610 |
+
.list-group-horizontal-sm > .list-group-item:first-child {
|
5611 |
border-bottom-left-radius: 0.25rem;
|
5612 |
border-top-right-radius: 0;
|
5613 |
}
|
5614 |
+
.list-group-horizontal-sm > .list-group-item:last-child {
|
5615 |
border-top-right-radius: 0.25rem;
|
5616 |
border-bottom-left-radius: 0;
|
5617 |
}
|
5618 |
+
.list-group-horizontal-sm > .list-group-item.active {
|
5619 |
margin-top: 0;
|
5620 |
}
|
5621 |
+
.list-group-horizontal-sm > .list-group-item + .list-group-item {
|
5622 |
border-top-width: 1px;
|
5623 |
border-left-width: 0;
|
5624 |
}
|
5625 |
+
.list-group-horizontal-sm > .list-group-item + .list-group-item.active {
|
5626 |
margin-left: -1px;
|
5627 |
border-left-width: 1px;
|
5628 |
}
|
5633 |
-ms-flex-direction: row;
|
5634 |
flex-direction: row;
|
5635 |
}
|
5636 |
+
.list-group-horizontal-md > .list-group-item:first-child {
|
5637 |
border-bottom-left-radius: 0.25rem;
|
5638 |
border-top-right-radius: 0;
|
5639 |
}
|
5640 |
+
.list-group-horizontal-md > .list-group-item:last-child {
|
5641 |
border-top-right-radius: 0.25rem;
|
5642 |
border-bottom-left-radius: 0;
|
5643 |
}
|
5644 |
+
.list-group-horizontal-md > .list-group-item.active {
|
5645 |
margin-top: 0;
|
5646 |
}
|
5647 |
+
.list-group-horizontal-md > .list-group-item + .list-group-item {
|
5648 |
border-top-width: 1px;
|
5649 |
border-left-width: 0;
|
5650 |
}
|
5651 |
+
.list-group-horizontal-md > .list-group-item + .list-group-item.active {
|
5652 |
margin-left: -1px;
|
5653 |
border-left-width: 1px;
|
5654 |
}
|
5659 |
-ms-flex-direction: row;
|
5660 |
flex-direction: row;
|
5661 |
}
|
5662 |
+
.list-group-horizontal-lg > .list-group-item:first-child {
|
5663 |
border-bottom-left-radius: 0.25rem;
|
5664 |
border-top-right-radius: 0;
|
5665 |
}
|
5666 |
+
.list-group-horizontal-lg > .list-group-item:last-child {
|
5667 |
border-top-right-radius: 0.25rem;
|
5668 |
border-bottom-left-radius: 0;
|
5669 |
}
|
5670 |
+
.list-group-horizontal-lg > .list-group-item.active {
|
5671 |
margin-top: 0;
|
5672 |
}
|
5673 |
+
.list-group-horizontal-lg > .list-group-item + .list-group-item {
|
5674 |
border-top-width: 1px;
|
5675 |
border-left-width: 0;
|
5676 |
}
|
5677 |
+
.list-group-horizontal-lg > .list-group-item + .list-group-item.active {
|
5678 |
margin-left: -1px;
|
5679 |
border-left-width: 1px;
|
5680 |
}
|
5685 |
-ms-flex-direction: row;
|
5686 |
flex-direction: row;
|
5687 |
}
|
5688 |
+
.list-group-horizontal-xl > .list-group-item:first-child {
|
5689 |
border-bottom-left-radius: 0.25rem;
|
5690 |
border-top-right-radius: 0;
|
5691 |
}
|
5692 |
+
.list-group-horizontal-xl > .list-group-item:last-child {
|
5693 |
border-top-right-radius: 0.25rem;
|
5694 |
border-bottom-left-radius: 0;
|
5695 |
}
|
5696 |
+
.list-group-horizontal-xl > .list-group-item.active {
|
5697 |
margin-top: 0;
|
5698 |
}
|
5699 |
+
.list-group-horizontal-xl > .list-group-item + .list-group-item {
|
5700 |
border-top-width: 1px;
|
5701 |
border-left-width: 0;
|
5702 |
}
|
5703 |
+
.list-group-horizontal-xl > .list-group-item + .list-group-item.active {
|
5704 |
margin-left: -1px;
|
5705 |
border-left-width: 1px;
|
5706 |
}
|
5707 |
}
|
5708 |
|
5709 |
+
.list-group-flush {
|
|
|
|
|
5710 |
border-radius: 0;
|
5711 |
}
|
5712 |
|
5713 |
+
.list-group-flush > .list-group-item {
|
5714 |
+
border-width: 0 0 1px;
|
5715 |
}
|
5716 |
|
5717 |
+
.list-group-flush > .list-group-item:last-child {
|
5718 |
border-bottom-width: 0;
|
5719 |
}
|
5720 |
|
5869 |
padding: 0;
|
5870 |
background-color: transparent;
|
5871 |
border: 0;
|
|
|
|
|
|
|
5872 |
}
|
5873 |
|
5874 |
a.close.disabled {
|
6006 |
.modal-dialog-centered::before {
|
6007 |
display: block;
|
6008 |
height: calc(100vh - 1rem);
|
6009 |
+
height: -webkit-min-content;
|
6010 |
+
height: -moz-min-content;
|
6011 |
+
height: min-content;
|
6012 |
content: "";
|
6013 |
}
|
6014 |
|
6134 |
}
|
6135 |
.modal-dialog-centered::before {
|
6136 |
height: calc(100vh - 3.5rem);
|
6137 |
+
height: -webkit-min-content;
|
6138 |
+
height: -moz-min-content;
|
6139 |
+
height: min-content;
|
6140 |
}
|
6141 |
.modal-sm {
|
6142 |
max-width: 300px;
|
6668 |
}
|
6669 |
50% {
|
6670 |
opacity: 1;
|
6671 |
+
-webkit-transform: none;
|
6672 |
+
transform: none;
|
6673 |
}
|
6674 |
}
|
6675 |
|
6680 |
}
|
6681 |
50% {
|
6682 |
opacity: 1;
|
6683 |
+
-webkit-transform: none;
|
6684 |
+
transform: none;
|
6685 |
}
|
6686 |
}
|
6687 |
|
7967 |
}
|
7968 |
}
|
7969 |
|
7970 |
+
.user-select-all {
|
7971 |
+
-webkit-user-select: all !important;
|
7972 |
+
-moz-user-select: all !important;
|
7973 |
+
-ms-user-select: all !important;
|
7974 |
+
user-select: all !important;
|
7975 |
+
}
|
7976 |
+
|
7977 |
+
.user-select-auto {
|
7978 |
+
-webkit-user-select: auto !important;
|
7979 |
+
-moz-user-select: auto !important;
|
7980 |
+
-ms-user-select: auto !important;
|
7981 |
+
user-select: auto !important;
|
7982 |
+
}
|
7983 |
+
|
7984 |
+
.user-select-none {
|
7985 |
+
-webkit-user-select: none !important;
|
7986 |
+
-moz-user-select: none !important;
|
7987 |
+
-ms-user-select: none !important;
|
7988 |
+
user-select: none !important;
|
7989 |
+
}
|
7990 |
+
|
7991 |
.overflow-auto {
|
7992 |
overflow: auto !important;
|
7993 |
}
|
8143 |
height: 100vh !important;
|
8144 |
}
|
8145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8146 |
.m-0 {
|
8147 |
margin: 0 !important;
|
8148 |
}
|
9955 |
}
|
9956 |
}
|
9957 |
|
9958 |
+
.stretched-link::after {
|
9959 |
+
position: absolute;
|
9960 |
+
top: 0;
|
9961 |
+
right: 0;
|
9962 |
+
bottom: 0;
|
9963 |
+
left: 0;
|
9964 |
+
z-index: 1;
|
9965 |
+
pointer-events: auto;
|
9966 |
+
content: "";
|
9967 |
+
background-color: rgba(0, 0, 0, 0);
|
9968 |
+
}
|
9969 |
+
|
9970 |
.text-monospace {
|
9971 |
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
|
9972 |
}
|
10182 |
}
|
10183 |
|
10184 |
.text-break {
|
10185 |
+
word-wrap: break-word !important;
|
|
|
10186 |
}
|
10187 |
|
10188 |
.text-reset {
|
resources/css/bootstrap4.min.css
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
-
* Copyright 2011-
|
5 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
6 |
-
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}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{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[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}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.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:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;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}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;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::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.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;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;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{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.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:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.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)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;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;line-height:1.5;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' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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 .2rem 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)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem 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-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;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;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.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;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 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-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{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}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .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}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .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}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;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:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .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{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;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:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;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){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;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){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-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;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{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}.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{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;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;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;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}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.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,.5)}.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 .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);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' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' 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,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.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,.5)}.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 .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);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' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' 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,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;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:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;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-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;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:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;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-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;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}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;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}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.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;line-height:1.5}.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:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;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){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;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:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.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:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.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:#007bff;border-color:#007bff}.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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;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:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;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 .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;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}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 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}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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 .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;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:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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 .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-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 #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;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:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-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-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;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:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.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}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{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-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!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}.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}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!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}.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}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
|
7 |
/*# sourceMappingURL=bootstrap.min.css.map */
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors
|
4 |
+
* Copyright 2011-2020 Twitter, Inc.
|
5 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
6 |
+
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}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{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[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}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.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:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;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}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;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::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.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;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;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{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.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:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.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)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;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;line-height:1.5;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' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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 .2rem 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)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem 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-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;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;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.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;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 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-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{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}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .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}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .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}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;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:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .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{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;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:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;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){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;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){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-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;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{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}.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{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;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;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;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}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;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>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.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,.5)}.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 .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);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' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%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,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.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,.5)}.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 .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);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' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%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,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;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-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;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-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;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:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;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-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;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}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;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}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.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;line-height:1.5}.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:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;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){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;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:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.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:.75rem 1.25rem;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:#007bff;border-color:#007bff}.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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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{-ms-flex-direction:row;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}}.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:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;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:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;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 .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;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}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.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}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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 .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;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:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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 .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-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 #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;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:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-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-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;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:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.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}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{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-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!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}.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}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!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}.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}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
|
7 |
/*# sourceMappingURL=bootstrap.min.css.map */
|
resources/css/plugin.css
CHANGED
@@ -357,6 +357,10 @@ label input[type=checkbox] {
|
|
357 |
.module-icon-support:before {
|
358 |
content: "\f525";
|
359 |
}
|
|
|
|
|
|
|
|
|
360 |
.dropdown-item .module-icon:before {
|
361 |
font-size: 1.6rem;
|
362 |
}
|
357 |
.module-icon-support:before {
|
358 |
content: "\f525";
|
359 |
}
|
360 |
+
#NavItem-SearchOptionsLaunch > a {
|
361 |
+
width: 35px;
|
362 |
+
content: "\f179";
|
363 |
+
}
|
364 |
.dropdown-item .module-icon:before {
|
365 |
font-size: 1.6rem;
|
366 |
}
|
resources/js/bootstrap4.bundle.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
(function (global, factory) {
|
@@ -9,7 +9,7 @@
|
|
9 |
(global = global || self, factory(global.bootstrap = {}, global.jQuery));
|
10 |
}(this, (function (exports, $) { 'use strict';
|
11 |
|
12 |
-
$ = $ &&
|
13 |
|
14 |
function _defineProperties(target, props) {
|
15 |
for (var i = 0; i < props.length; i++) {
|
@@ -84,7 +84,7 @@
|
|
84 |
|
85 |
/**
|
86 |
* --------------------------------------------------------------------------
|
87 |
-
* Bootstrap (v4.
|
88 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
89 |
* --------------------------------------------------------------------------
|
90 |
*/
|
@@ -99,6 +99,10 @@
|
|
99 |
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
100 |
|
101 |
function toType(obj) {
|
|
|
|
|
|
|
|
|
102 |
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
103 |
}
|
104 |
|
@@ -111,7 +115,7 @@
|
|
111 |
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
112 |
}
|
113 |
|
114 |
-
return undefined;
|
115 |
}
|
116 |
};
|
117 |
}
|
@@ -261,33 +265,25 @@
|
|
261 |
*/
|
262 |
|
263 |
var NAME = 'alert';
|
264 |
-
var VERSION = '4.
|
265 |
var DATA_KEY = 'bs.alert';
|
266 |
var EVENT_KEY = "." + DATA_KEY;
|
267 |
var DATA_API_KEY = '.data-api';
|
268 |
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
269 |
-
var
|
270 |
-
|
271 |
-
|
272 |
-
var
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
};
|
277 |
-
var ClassName = {
|
278 |
-
ALERT: 'alert',
|
279 |
-
FADE: 'fade',
|
280 |
-
SHOW: 'show'
|
281 |
-
};
|
282 |
/**
|
283 |
* ------------------------------------------------------------------------
|
284 |
* Class Definition
|
285 |
* ------------------------------------------------------------------------
|
286 |
*/
|
287 |
|
288 |
-
var Alert =
|
289 |
-
/*#__PURE__*/
|
290 |
-
function () {
|
291 |
function Alert(element) {
|
292 |
this._element = element;
|
293 |
} // Getters
|
@@ -327,14 +323,14 @@
|
|
327 |
}
|
328 |
|
329 |
if (!parent) {
|
330 |
-
parent = $(element).closest("." +
|
331 |
}
|
332 |
|
333 |
return parent;
|
334 |
};
|
335 |
|
336 |
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
|
337 |
-
var closeEvent = $.Event(
|
338 |
$(element).trigger(closeEvent);
|
339 |
return closeEvent;
|
340 |
};
|
@@ -342,9 +338,9 @@
|
|
342 |
_proto._removeElement = function _removeElement(element) {
|
343 |
var _this = this;
|
344 |
|
345 |
-
$(element).removeClass(
|
346 |
|
347 |
-
if (!$(element).hasClass(
|
348 |
this._destroyElement(element);
|
349 |
|
350 |
return;
|
@@ -357,7 +353,7 @@
|
|
357 |
};
|
358 |
|
359 |
_proto._destroyElement = function _destroyElement(element) {
|
360 |
-
$(element).detach().trigger(
|
361 |
} // Static
|
362 |
;
|
363 |
|
@@ -403,7 +399,7 @@
|
|
403 |
*/
|
404 |
|
405 |
|
406 |
-
$(document).on(
|
407 |
/**
|
408 |
* ------------------------------------------------------------------------
|
409 |
* jQuery
|
@@ -425,39 +421,31 @@
|
|
425 |
*/
|
426 |
|
427 |
var NAME$1 = 'button';
|
428 |
-
var VERSION$1 = '4.
|
429 |
var DATA_KEY$1 = 'bs.button';
|
430 |
var EVENT_KEY$1 = "." + DATA_KEY$1;
|
431 |
var DATA_API_KEY$1 = '.data-api';
|
432 |
var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
|
433 |
-
var
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
var
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
};
|
447 |
-
var Event$1 = {
|
448 |
-
CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
|
449 |
-
FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1),
|
450 |
-
LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1
|
451 |
-
};
|
452 |
/**
|
453 |
* ------------------------------------------------------------------------
|
454 |
* Class Definition
|
455 |
* ------------------------------------------------------------------------
|
456 |
*/
|
457 |
|
458 |
-
var Button =
|
459 |
-
/*#__PURE__*/
|
460 |
-
function () {
|
461 |
function Button(element) {
|
462 |
this._element = element;
|
463 |
} // Getters
|
@@ -469,33 +457,30 @@
|
|
469 |
_proto.toggle = function toggle() {
|
470 |
var triggerChangeEvent = true;
|
471 |
var addAriaPressed = true;
|
472 |
-
var rootElement = $(this._element).closest(
|
473 |
|
474 |
if (rootElement) {
|
475 |
-
var input = this._element.querySelector(
|
476 |
|
477 |
if (input) {
|
478 |
if (input.type === 'radio') {
|
479 |
-
if (input.checked && this._element.classList.contains(
|
480 |
triggerChangeEvent = false;
|
481 |
} else {
|
482 |
-
var activeElement = rootElement.querySelector(
|
483 |
|
484 |
if (activeElement) {
|
485 |
-
$(activeElement).removeClass(
|
486 |
}
|
487 |
}
|
488 |
-
} else if (input.type === 'checkbox') {
|
489 |
-
if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {
|
490 |
-
triggerChangeEvent = false;
|
491 |
-
}
|
492 |
-
} else {
|
493 |
-
// if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
|
494 |
-
triggerChangeEvent = false;
|
495 |
}
|
496 |
|
497 |
if (triggerChangeEvent) {
|
498 |
-
|
|
|
|
|
|
|
|
|
499 |
$(input).trigger('change');
|
500 |
}
|
501 |
|
@@ -506,11 +491,11 @@
|
|
506 |
|
507 |
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
|
508 |
if (addAriaPressed) {
|
509 |
-
this._element.setAttribute('aria-pressed', !this._element.classList.contains(
|
510 |
}
|
511 |
|
512 |
if (triggerChangeEvent) {
|
513 |
-
$(this._element).toggleClass(
|
514 |
}
|
515 |
}
|
516 |
};
|
@@ -552,17 +537,18 @@
|
|
552 |
*/
|
553 |
|
554 |
|
555 |
-
$(document).on(
|
556 |
var button = event.target;
|
|
|
557 |
|
558 |
-
if (!$(button).hasClass(
|
559 |
-
button = $(button).closest(
|
560 |
}
|
561 |
|
562 |
if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
|
563 |
event.preventDefault(); // work around Firefox bug #1540995
|
564 |
} else {
|
565 |
-
var inputBtn = button.querySelector(
|
566 |
|
567 |
if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
|
568 |
event.preventDefault(); // work around Firefox bug #1540995
|
@@ -570,38 +556,42 @@
|
|
570 |
return;
|
571 |
}
|
572 |
|
|
|
|
|
|
|
|
|
573 |
Button._jQueryInterface.call($(button), 'toggle');
|
574 |
}
|
575 |
-
}).on(
|
576 |
-
var button = $(event.target).closest(
|
577 |
-
$(button).toggleClass(
|
578 |
});
|
579 |
-
$(window).on(
|
580 |
// ensure correct active class is set to match the controls' actual values/states
|
581 |
// find all checkboxes/readio buttons inside data-toggle groups
|
582 |
-
var buttons = [].slice.call(document.querySelectorAll(
|
583 |
|
584 |
for (var i = 0, len = buttons.length; i < len; i++) {
|
585 |
var button = buttons[i];
|
586 |
-
var input = button.querySelector(
|
587 |
|
588 |
if (input.checked || input.hasAttribute('checked')) {
|
589 |
-
button.classList.add(
|
590 |
} else {
|
591 |
-
button.classList.remove(
|
592 |
}
|
593 |
} // find all button toggles
|
594 |
|
595 |
|
596 |
-
buttons = [].slice.call(document.querySelectorAll(
|
597 |
|
598 |
for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
|
599 |
var _button = buttons[_i];
|
600 |
|
601 |
if (_button.getAttribute('aria-pressed') === 'true') {
|
602 |
-
_button.classList.add(
|
603 |
} else {
|
604 |
-
_button.classList.remove(
|
605 |
}
|
606 |
}
|
607 |
});
|
@@ -626,7 +616,7 @@
|
|
626 |
*/
|
627 |
|
628 |
var NAME$2 = 'carousel';
|
629 |
-
var VERSION$2 = '4.
|
630 |
var DATA_KEY$2 = 'bs.carousel';
|
631 |
var EVENT_KEY$2 = "." + DATA_KEY$2;
|
632 |
var DATA_API_KEY$2 = '.data-api';
|
@@ -654,48 +644,39 @@
|
|
654 |
wrap: 'boolean',
|
655 |
touch: 'boolean'
|
656 |
};
|
657 |
-
var
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
var
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
var
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
var
|
690 |
-
ACTIVE: '.active',
|
691 |
-
ACTIVE_ITEM: '.active.carousel-item',
|
692 |
-
ITEM: '.carousel-item',
|
693 |
-
ITEM_IMG: '.carousel-item img',
|
694 |
-
NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
|
695 |
-
INDICATORS: '.carousel-indicators',
|
696 |
-
DATA_SLIDE: '[data-slide], [data-slide-to]',
|
697 |
-
DATA_RIDE: '[data-ride="carousel"]'
|
698 |
-
};
|
699 |
var PointerType = {
|
700 |
TOUCH: 'touch',
|
701 |
PEN: 'pen'
|
@@ -706,9 +687,7 @@
|
|
706 |
* ------------------------------------------------------------------------
|
707 |
*/
|
708 |
|
709 |
-
var Carousel =
|
710 |
-
/*#__PURE__*/
|
711 |
-
function () {
|
712 |
function Carousel(element, config) {
|
713 |
this._items = null;
|
714 |
this._interval = null;
|
@@ -720,7 +699,7 @@
|
|
720 |
this.touchDeltaX = 0;
|
721 |
this._config = this._getConfig(config);
|
722 |
this._element = element;
|
723 |
-
this._indicatorsElement = this._element.querySelector(
|
724 |
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
725 |
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
|
726 |
|
@@ -733,7 +712,7 @@
|
|
733 |
// Public
|
734 |
_proto.next = function next() {
|
735 |
if (!this._isSliding) {
|
736 |
-
this._slide(
|
737 |
}
|
738 |
};
|
739 |
|
@@ -747,7 +726,7 @@
|
|
747 |
|
748 |
_proto.prev = function prev() {
|
749 |
if (!this._isSliding) {
|
750 |
-
this._slide(
|
751 |
}
|
752 |
};
|
753 |
|
@@ -756,7 +735,7 @@
|
|
756 |
this._isPaused = true;
|
757 |
}
|
758 |
|
759 |
-
if (this._element.querySelector(
|
760 |
Util.triggerTransitionEnd(this._element);
|
761 |
this.cycle(true);
|
762 |
}
|
@@ -783,7 +762,7 @@
|
|
783 |
_proto.to = function to(index) {
|
784 |
var _this = this;
|
785 |
|
786 |
-
this._activeElement = this._element.querySelector(
|
787 |
|
788 |
var activeIndex = this._getItemIndex(this._activeElement);
|
789 |
|
@@ -792,7 +771,7 @@
|
|
792 |
}
|
793 |
|
794 |
if (this._isSliding) {
|
795 |
-
$(this._element).one(
|
796 |
return _this.to(index);
|
797 |
});
|
798 |
return;
|
@@ -804,7 +783,7 @@
|
|
804 |
return;
|
805 |
}
|
806 |
|
807 |
-
var direction = index > activeIndex ?
|
808 |
|
809 |
this._slide(direction, this._items[index]);
|
810 |
};
|
@@ -824,7 +803,7 @@
|
|
824 |
;
|
825 |
|
826 |
_proto._getConfig = function _getConfig(config) {
|
827 |
-
config = _objectSpread2({}, Default,
|
828 |
Util.typeCheckConfig(NAME$2, config, DefaultType);
|
829 |
return config;
|
830 |
};
|
@@ -853,15 +832,15 @@
|
|
853 |
var _this2 = this;
|
854 |
|
855 |
if (this._config.keyboard) {
|
856 |
-
$(this._element).on(
|
857 |
return _this2._keydown(event);
|
858 |
});
|
859 |
}
|
860 |
|
861 |
if (this._config.pause === 'hover') {
|
862 |
-
$(this._element).on(
|
863 |
return _this2.pause(event);
|
864 |
-
}).on(
|
865 |
return _this2.cycle(event);
|
866 |
});
|
867 |
}
|
@@ -922,27 +901,27 @@
|
|
922 |
}
|
923 |
};
|
924 |
|
925 |
-
$(this._element.querySelectorAll(
|
926 |
return e.preventDefault();
|
927 |
});
|
928 |
|
929 |
if (this._pointerEvent) {
|
930 |
-
$(this._element).on(
|
931 |
return start(event);
|
932 |
});
|
933 |
-
$(this._element).on(
|
934 |
return end(event);
|
935 |
});
|
936 |
|
937 |
-
this._element.classList.add(
|
938 |
} else {
|
939 |
-
$(this._element).on(
|
940 |
return start(event);
|
941 |
});
|
942 |
-
$(this._element).on(
|
943 |
return move(event);
|
944 |
});
|
945 |
-
$(this._element).on(
|
946 |
return end(event);
|
947 |
});
|
948 |
}
|
@@ -967,13 +946,13 @@
|
|
967 |
};
|
968 |
|
969 |
_proto._getItemIndex = function _getItemIndex(element) {
|
970 |
-
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(
|
971 |
return this._items.indexOf(element);
|
972 |
};
|
973 |
|
974 |
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
|
975 |
-
var isNextDirection = direction ===
|
976 |
-
var isPrevDirection = direction ===
|
977 |
|
978 |
var activeIndex = this._getItemIndex(activeElement);
|
979 |
|
@@ -984,7 +963,7 @@
|
|
984 |
return activeElement;
|
985 |
}
|
986 |
|
987 |
-
var delta = direction ===
|
988 |
var itemIndex = (activeIndex + delta) % this._items.length;
|
989 |
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
990 |
};
|
@@ -992,9 +971,9 @@
|
|
992 |
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
|
993 |
var targetIndex = this._getItemIndex(relatedTarget);
|
994 |
|
995 |
-
var fromIndex = this._getItemIndex(this._element.querySelector(
|
996 |
|
997 |
-
var slideEvent = $.Event(
|
998 |
relatedTarget: relatedTarget,
|
999 |
direction: eventDirectionName,
|
1000 |
from: fromIndex,
|
@@ -1006,13 +985,13 @@
|
|
1006 |
|
1007 |
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
|
1008 |
if (this._indicatorsElement) {
|
1009 |
-
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(
|
1010 |
-
$(indicators).removeClass(
|
1011 |
|
1012 |
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
|
1013 |
|
1014 |
if (nextIndicator) {
|
1015 |
-
$(nextIndicator).addClass(
|
1016 |
}
|
1017 |
}
|
1018 |
};
|
@@ -1020,7 +999,7 @@
|
|
1020 |
_proto._slide = function _slide(direction, element) {
|
1021 |
var _this4 = this;
|
1022 |
|
1023 |
-
var activeElement = this._element.querySelector(
|
1024 |
|
1025 |
var activeElementIndex = this._getItemIndex(activeElement);
|
1026 |
|
@@ -1033,17 +1012,17 @@
|
|
1033 |
var orderClassName;
|
1034 |
var eventDirectionName;
|
1035 |
|
1036 |
-
if (direction ===
|
1037 |
-
directionalClassName =
|
1038 |
-
orderClassName =
|
1039 |
-
eventDirectionName =
|
1040 |
} else {
|
1041 |
-
directionalClassName =
|
1042 |
-
orderClassName =
|
1043 |
-
eventDirectionName =
|
1044 |
}
|
1045 |
|
1046 |
-
if (nextElement && $(nextElement).hasClass(
|
1047 |
this._isSliding = false;
|
1048 |
return;
|
1049 |
}
|
@@ -1067,14 +1046,14 @@
|
|
1067 |
|
1068 |
this._setActiveIndicatorElement(nextElement);
|
1069 |
|
1070 |
-
var slidEvent = $.Event(
|
1071 |
relatedTarget: nextElement,
|
1072 |
direction: eventDirectionName,
|
1073 |
from: activeElementIndex,
|
1074 |
to: nextElementIndex
|
1075 |
});
|
1076 |
|
1077 |
-
if ($(this._element).hasClass(
|
1078 |
$(nextElement).addClass(orderClassName);
|
1079 |
Util.reflow(nextElement);
|
1080 |
$(activeElement).addClass(directionalClassName);
|
@@ -1090,16 +1069,16 @@
|
|
1090 |
|
1091 |
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
|
1092 |
$(activeElement).one(Util.TRANSITION_END, function () {
|
1093 |
-
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(
|
1094 |
-
$(activeElement).removeClass(
|
1095 |
_this4._isSliding = false;
|
1096 |
setTimeout(function () {
|
1097 |
return $(_this4._element).trigger(slidEvent);
|
1098 |
}, 0);
|
1099 |
}).emulateTransitionEnd(transitionDuration);
|
1100 |
} else {
|
1101 |
-
$(activeElement).removeClass(
|
1102 |
-
$(nextElement).addClass(
|
1103 |
this._isSliding = false;
|
1104 |
$(this._element).trigger(slidEvent);
|
1105 |
}
|
@@ -1114,10 +1093,10 @@
|
|
1114 |
return this.each(function () {
|
1115 |
var data = $(this).data(DATA_KEY$2);
|
1116 |
|
1117 |
-
var _config = _objectSpread2({}, Default,
|
1118 |
|
1119 |
if (typeof config === 'object') {
|
1120 |
-
_config = _objectSpread2({}, _config,
|
1121 |
}
|
1122 |
|
1123 |
var action = typeof config === 'string' ? config : _config.slide;
|
@@ -1151,11 +1130,11 @@
|
|
1151 |
|
1152 |
var target = $(selector)[0];
|
1153 |
|
1154 |
-
if (!target || !$(target).hasClass(
|
1155 |
return;
|
1156 |
}
|
1157 |
|
1158 |
-
var config = _objectSpread2({}, $(target).data(),
|
1159 |
|
1160 |
var slideIndex = this.getAttribute('data-slide-to');
|
1161 |
|
@@ -1193,9 +1172,9 @@
|
|
1193 |
*/
|
1194 |
|
1195 |
|
1196 |
-
$(document).on(
|
1197 |
-
$(window).on(
|
1198 |
-
var carousels = [].slice.call(document.querySelectorAll(
|
1199 |
|
1200 |
for (var i = 0, len = carousels.length; i < len; i++) {
|
1201 |
var $carousel = $(carousels[i]);
|
@@ -1224,7 +1203,7 @@
|
|
1224 |
*/
|
1225 |
|
1226 |
var NAME$3 = 'collapse';
|
1227 |
-
var VERSION$3 = '4.
|
1228 |
var DATA_KEY$3 = 'bs.collapse';
|
1229 |
var EVENT_KEY$3 = "." + DATA_KEY$3;
|
1230 |
var DATA_API_KEY$3 = '.data-api';
|
@@ -1237,42 +1216,32 @@
|
|
1237 |
toggle: 'boolean',
|
1238 |
parent: '(string|element)'
|
1239 |
};
|
1240 |
-
var
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
var
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
var Dimension = {
|
1254 |
-
WIDTH: 'width',
|
1255 |
-
HEIGHT: 'height'
|
1256 |
-
};
|
1257 |
-
var Selector$3 = {
|
1258 |
-
ACTIVES: '.show, .collapsing',
|
1259 |
-
DATA_TOGGLE: '[data-toggle="collapse"]'
|
1260 |
-
};
|
1261 |
/**
|
1262 |
* ------------------------------------------------------------------------
|
1263 |
* Class Definition
|
1264 |
* ------------------------------------------------------------------------
|
1265 |
*/
|
1266 |
|
1267 |
-
var Collapse =
|
1268 |
-
/*#__PURE__*/
|
1269 |
-
function () {
|
1270 |
function Collapse(element, config) {
|
1271 |
this._isTransitioning = false;
|
1272 |
this._element = element;
|
1273 |
this._config = this._getConfig(config);
|
1274 |
this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
|
1275 |
-
var toggleList = [].slice.call(document.querySelectorAll(
|
1276 |
|
1277 |
for (var i = 0, len = toggleList.length; i < len; i++) {
|
1278 |
var elem = toggleList[i];
|
@@ -1304,7 +1273,7 @@
|
|
1304 |
|
1305 |
// Public
|
1306 |
_proto.toggle = function toggle() {
|
1307 |
-
if ($(this._element).hasClass(
|
1308 |
this.hide();
|
1309 |
} else {
|
1310 |
this.show();
|
@@ -1314,7 +1283,7 @@
|
|
1314 |
_proto.show = function show() {
|
1315 |
var _this = this;
|
1316 |
|
1317 |
-
if (this._isTransitioning || $(this._element).hasClass(
|
1318 |
return;
|
1319 |
}
|
1320 |
|
@@ -1322,12 +1291,12 @@
|
|
1322 |
var activesData;
|
1323 |
|
1324 |
if (this._parent) {
|
1325 |
-
actives = [].slice.call(this._parent.querySelectorAll(
|
1326 |
if (typeof _this._config.parent === 'string') {
|
1327 |
return elem.getAttribute('data-parent') === _this._config.parent;
|
1328 |
}
|
1329 |
|
1330 |
-
return elem.classList.contains(
|
1331 |
});
|
1332 |
|
1333 |
if (actives.length === 0) {
|
@@ -1343,7 +1312,7 @@
|
|
1343 |
}
|
1344 |
}
|
1345 |
|
1346 |
-
var startEvent = $.Event(
|
1347 |
$(this._element).trigger(startEvent);
|
1348 |
|
1349 |
if (startEvent.isDefaultPrevented()) {
|
@@ -1360,22 +1329,22 @@
|
|
1360 |
|
1361 |
var dimension = this._getDimension();
|
1362 |
|
1363 |
-
$(this._element).removeClass(
|
1364 |
this._element.style[dimension] = 0;
|
1365 |
|
1366 |
if (this._triggerArray.length) {
|
1367 |
-
$(this._triggerArray).removeClass(
|
1368 |
}
|
1369 |
|
1370 |
this.setTransitioning(true);
|
1371 |
|
1372 |
var complete = function complete() {
|
1373 |
-
$(_this._element).removeClass(
|
1374 |
_this._element.style[dimension] = '';
|
1375 |
|
1376 |
_this.setTransitioning(false);
|
1377 |
|
1378 |
-
$(_this._element).trigger(
|
1379 |
};
|
1380 |
|
1381 |
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
@@ -1388,11 +1357,11 @@
|
|
1388 |
_proto.hide = function hide() {
|
1389 |
var _this2 = this;
|
1390 |
|
1391 |
-
if (this._isTransitioning || !$(this._element).hasClass(
|
1392 |
return;
|
1393 |
}
|
1394 |
|
1395 |
-
var startEvent = $.Event(
|
1396 |
$(this._element).trigger(startEvent);
|
1397 |
|
1398 |
if (startEvent.isDefaultPrevented()) {
|
@@ -1403,7 +1372,7 @@
|
|
1403 |
|
1404 |
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
|
1405 |
Util.reflow(this._element);
|
1406 |
-
$(this._element).addClass(
|
1407 |
var triggerArrayLength = this._triggerArray.length;
|
1408 |
|
1409 |
if (triggerArrayLength > 0) {
|
@@ -1414,8 +1383,8 @@
|
|
1414 |
if (selector !== null) {
|
1415 |
var $elem = $([].slice.call(document.querySelectorAll(selector)));
|
1416 |
|
1417 |
-
if (!$elem.hasClass(
|
1418 |
-
$(trigger).addClass(
|
1419 |
}
|
1420 |
}
|
1421 |
}
|
@@ -1426,7 +1395,7 @@
|
|
1426 |
var complete = function complete() {
|
1427 |
_this2.setTransitioning(false);
|
1428 |
|
1429 |
-
$(_this2._element).removeClass(
|
1430 |
};
|
1431 |
|
1432 |
this._element.style[dimension] = '';
|
@@ -1449,7 +1418,7 @@
|
|
1449 |
;
|
1450 |
|
1451 |
_proto._getConfig = function _getConfig(config) {
|
1452 |
-
config = _objectSpread2({}, Default$1,
|
1453 |
config.toggle = Boolean(config.toggle); // Coerce string values
|
1454 |
|
1455 |
Util.typeCheckConfig(NAME$3, config, DefaultType$1);
|
@@ -1457,8 +1426,8 @@
|
|
1457 |
};
|
1458 |
|
1459 |
_proto._getDimension = function _getDimension() {
|
1460 |
-
var hasWidth = $(this._element).hasClass(
|
1461 |
-
return hasWidth ?
|
1462 |
};
|
1463 |
|
1464 |
_proto._getParent = function _getParent() {
|
@@ -1485,10 +1454,10 @@
|
|
1485 |
};
|
1486 |
|
1487 |
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
|
1488 |
-
var isOpen = $(element).hasClass(
|
1489 |
|
1490 |
if (triggerArray.length) {
|
1491 |
-
$(triggerArray).toggleClass(
|
1492 |
}
|
1493 |
} // Static
|
1494 |
;
|
@@ -1503,9 +1472,9 @@
|
|
1503 |
var $this = $(this);
|
1504 |
var data = $this.data(DATA_KEY$3);
|
1505 |
|
1506 |
-
var _config = _objectSpread2({}, Default$1,
|
1507 |
|
1508 |
-
if (!data && _config.toggle && /show|hide/.test(config)) {
|
1509 |
_config.toggle = false;
|
1510 |
}
|
1511 |
|
@@ -1545,7 +1514,7 @@
|
|
1545 |
*/
|
1546 |
|
1547 |
|
1548 |
-
$(document).on(
|
1549 |
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
1550 |
if (event.currentTarget.tagName === 'A') {
|
1551 |
event.preventDefault();
|
@@ -4197,7 +4166,7 @@
|
|
4197 |
*/
|
4198 |
|
4199 |
var NAME$4 = 'dropdown';
|
4200 |
-
var VERSION$4 = '4.
|
4201 |
var DATA_KEY$4 = 'bs.dropdown';
|
4202 |
var EVENT_KEY$4 = "." + DATA_KEY$4;
|
4203 |
var DATA_API_KEY$4 = '.data-api';
|
@@ -4215,43 +4184,32 @@
|
|
4215 |
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
4216 |
|
4217 |
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
|
4218 |
-
var
|
4219 |
-
|
4220 |
-
|
4221 |
-
|
4222 |
-
|
4223 |
-
|
4224 |
-
|
4225 |
-
|
4226 |
-
|
4227 |
-
|
4228 |
-
var
|
4229 |
-
|
4230 |
-
|
4231 |
-
|
4232 |
-
|
4233 |
-
|
4234 |
-
|
4235 |
-
|
4236 |
-
|
4237 |
-
|
4238 |
-
var
|
4239 |
-
|
4240 |
-
|
4241 |
-
|
4242 |
-
|
4243 |
-
|
4244 |
-
};
|
4245 |
-
var AttachmentMap = {
|
4246 |
-
TOP: 'top-start',
|
4247 |
-
TOPEND: 'top-end',
|
4248 |
-
BOTTOM: 'bottom-start',
|
4249 |
-
BOTTOMEND: 'bottom-end',
|
4250 |
-
RIGHT: 'right-start',
|
4251 |
-
RIGHTEND: 'right-end',
|
4252 |
-
LEFT: 'left-start',
|
4253 |
-
LEFTEND: 'left-end'
|
4254 |
-
};
|
4255 |
var Default$2 = {
|
4256 |
offset: 0,
|
4257 |
flip: true,
|
@@ -4274,9 +4232,7 @@
|
|
4274 |
* ------------------------------------------------------------------------
|
4275 |
*/
|
4276 |
|
4277 |
-
var Dropdown =
|
4278 |
-
/*#__PURE__*/
|
4279 |
-
function () {
|
4280 |
function Dropdown(element, config) {
|
4281 |
this._element = element;
|
4282 |
this._popper = null;
|
@@ -4292,11 +4248,11 @@
|
|
4292 |
|
4293 |
// Public
|
4294 |
_proto.toggle = function toggle() {
|
4295 |
-
if (this._element.disabled || $(this._element).hasClass(
|
4296 |
return;
|
4297 |
}
|
4298 |
|
4299 |
-
var isActive = $(this._menu).hasClass(
|
4300 |
|
4301 |
Dropdown._clearMenus();
|
4302 |
|
@@ -4312,14 +4268,14 @@
|
|
4312 |
usePopper = false;
|
4313 |
}
|
4314 |
|
4315 |
-
if (this._element.disabled || $(this._element).hasClass(
|
4316 |
return;
|
4317 |
}
|
4318 |
|
4319 |
var relatedTarget = {
|
4320 |
relatedTarget: this._element
|
4321 |
};
|
4322 |
-
var showEvent = $.Event(
|
4323 |
|
4324 |
var parent = Dropdown._getParentFromElement(this._element);
|
4325 |
|
@@ -4355,7 +4311,7 @@
|
|
4355 |
|
4356 |
|
4357 |
if (this._config.boundary !== 'scrollParent') {
|
4358 |
-
$(parent).addClass(
|
4359 |
}
|
4360 |
|
4361 |
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
@@ -4365,7 +4321,7 @@
|
|
4365 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
4366 |
|
4367 |
|
4368 |
-
if ('ontouchstart' in document.documentElement && $(parent).closest(
|
4369 |
$(document.body).children().on('mouseover', null, $.noop);
|
4370 |
}
|
4371 |
|
@@ -4373,19 +4329,19 @@
|
|
4373 |
|
4374 |
this._element.setAttribute('aria-expanded', true);
|
4375 |
|
4376 |
-
$(this._menu).toggleClass(
|
4377 |
-
$(parent).toggleClass(
|
4378 |
};
|
4379 |
|
4380 |
_proto.hide = function hide() {
|
4381 |
-
if (this._element.disabled || $(this._element).hasClass(
|
4382 |
return;
|
4383 |
}
|
4384 |
|
4385 |
var relatedTarget = {
|
4386 |
relatedTarget: this._element
|
4387 |
};
|
4388 |
-
var hideEvent = $.Event(
|
4389 |
|
4390 |
var parent = Dropdown._getParentFromElement(this._element);
|
4391 |
|
@@ -4399,8 +4355,8 @@
|
|
4399 |
this._popper.destroy();
|
4400 |
}
|
4401 |
|
4402 |
-
$(this._menu).toggleClass(
|
4403 |
-
$(parent).toggleClass(
|
4404 |
};
|
4405 |
|
4406 |
_proto.dispose = function dispose() {
|
@@ -4428,7 +4384,7 @@
|
|
4428 |
_proto._addEventListeners = function _addEventListeners() {
|
4429 |
var _this = this;
|
4430 |
|
4431 |
-
$(this._element).on(
|
4432 |
event.preventDefault();
|
4433 |
event.stopPropagation();
|
4434 |
|
@@ -4437,7 +4393,7 @@
|
|
4437 |
};
|
4438 |
|
4439 |
_proto._getConfig = function _getConfig(config) {
|
4440 |
-
config = _objectSpread2({}, this.constructor.Default,
|
4441 |
Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
4442 |
return config;
|
4443 |
};
|
@@ -4447,7 +4403,7 @@
|
|
4447 |
var parent = Dropdown._getParentFromElement(this._element);
|
4448 |
|
4449 |
if (parent) {
|
4450 |
-
this._menu = parent.querySelector(
|
4451 |
}
|
4452 |
}
|
4453 |
|
@@ -4456,20 +4412,16 @@
|
|
4456 |
|
4457 |
_proto._getPlacement = function _getPlacement() {
|
4458 |
var $parentDropdown = $(this._element.parentNode);
|
4459 |
-
var placement =
|
4460 |
-
|
4461 |
-
if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
|
4462 |
-
placement = AttachmentMap.TOP;
|
4463 |
|
4464 |
-
|
4465 |
-
|
4466 |
-
|
4467 |
-
|
4468 |
-
|
4469 |
-
|
4470 |
-
|
4471 |
-
|
4472 |
-
placement = AttachmentMap.BOTTOMEND;
|
4473 |
}
|
4474 |
|
4475 |
return placement;
|
@@ -4486,7 +4438,7 @@
|
|
4486 |
|
4487 |
if (typeof this._config.offset === 'function') {
|
4488 |
offset.fn = function (data) {
|
4489 |
-
data.offsets = _objectSpread2({}, data.offsets,
|
4490 |
return data;
|
4491 |
};
|
4492 |
} else {
|
@@ -4516,7 +4468,7 @@
|
|
4516 |
};
|
4517 |
}
|
4518 |
|
4519 |
-
return _objectSpread2({}, popperConfig,
|
4520 |
} // Static
|
4521 |
;
|
4522 |
|
@@ -4546,7 +4498,7 @@
|
|
4546 |
return;
|
4547 |
}
|
4548 |
|
4549 |
-
var toggles = [].slice.call(document.querySelectorAll(
|
4550 |
|
4551 |
for (var i = 0, len = toggles.length; i < len; i++) {
|
4552 |
var parent = Dropdown._getParentFromElement(toggles[i]);
|
@@ -4566,7 +4518,7 @@
|
|
4566 |
|
4567 |
var dropdownMenu = context._menu;
|
4568 |
|
4569 |
-
if (!$(parent).hasClass(
|
4570 |
continue;
|
4571 |
}
|
4572 |
|
@@ -4574,7 +4526,7 @@
|
|
4574 |
continue;
|
4575 |
}
|
4576 |
|
4577 |
-
var hideEvent = $.Event(
|
4578 |
$(parent).trigger(hideEvent);
|
4579 |
|
4580 |
if (hideEvent.isDefaultPrevented()) {
|
@@ -4593,8 +4545,8 @@
|
|
4593 |
context._popper.destroy();
|
4594 |
}
|
4595 |
|
4596 |
-
$(dropdownMenu).removeClass(
|
4597 |
-
$(parent).removeClass(
|
4598 |
}
|
4599 |
};
|
4600 |
|
@@ -4618,36 +4570,35 @@
|
|
4618 |
// - If key is other than escape
|
4619 |
// - If key is not up or down => not a dropdown command
|
4620 |
// - If trigger inside the menu => not a dropdown command
|
4621 |
-
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(
|
4622 |
return;
|
4623 |
}
|
4624 |
|
4625 |
-
|
4626 |
-
event.stopPropagation();
|
4627 |
-
|
4628 |
-
if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
|
4629 |
return;
|
4630 |
}
|
4631 |
|
4632 |
var parent = Dropdown._getParentFromElement(this);
|
4633 |
|
4634 |
-
var isActive = $(parent).hasClass(
|
4635 |
|
4636 |
if (!isActive && event.which === ESCAPE_KEYCODE) {
|
4637 |
return;
|
4638 |
}
|
4639 |
|
|
|
|
|
|
|
4640 |
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
4641 |
if (event.which === ESCAPE_KEYCODE) {
|
4642 |
-
|
4643 |
-
$(toggle).trigger('focus');
|
4644 |
}
|
4645 |
|
4646 |
$(this).trigger('click');
|
4647 |
return;
|
4648 |
}
|
4649 |
|
4650 |
-
var items = [].slice.call(parent.querySelectorAll(
|
4651 |
return $(item).is(':visible');
|
4652 |
});
|
4653 |
|
@@ -4700,12 +4651,12 @@
|
|
4700 |
*/
|
4701 |
|
4702 |
|
4703 |
-
$(document).on(
|
4704 |
event.preventDefault();
|
4705 |
event.stopPropagation();
|
4706 |
|
4707 |
Dropdown._jQueryInterface.call($(this), 'toggle');
|
4708 |
-
}).on(
|
4709 |
e.stopPropagation();
|
4710 |
});
|
4711 |
/**
|
@@ -4729,7 +4680,7 @@
|
|
4729 |
*/
|
4730 |
|
4731 |
var NAME$5 = 'modal';
|
4732 |
-
var VERSION$5 = '4.
|
4733 |
var DATA_KEY$5 = 'bs.modal';
|
4734 |
var EVENT_KEY$5 = "." + DATA_KEY$5;
|
4735 |
var DATA_API_KEY$5 = '.data-api';
|
@@ -4748,50 +4699,42 @@
|
|
4748 |
focus: 'boolean',
|
4749 |
show: 'boolean'
|
4750 |
};
|
4751 |
-
var
|
4752 |
-
|
4753 |
-
|
4754 |
-
|
4755 |
-
|
4756 |
-
|
4757 |
-
|
4758 |
-
|
4759 |
-
|
4760 |
-
|
4761 |
-
|
4762 |
-
|
4763 |
-
|
4764 |
-
|
4765 |
-
var
|
4766 |
-
|
4767 |
-
|
4768 |
-
|
4769 |
-
|
4770 |
-
|
4771 |
-
|
4772 |
-
|
4773 |
-
|
4774 |
-
var
|
4775 |
-
|
4776 |
-
MODAL_BODY: '.modal-body',
|
4777 |
-
DATA_TOGGLE: '[data-toggle="modal"]',
|
4778 |
-
DATA_DISMISS: '[data-dismiss="modal"]',
|
4779 |
-
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
|
4780 |
-
STICKY_CONTENT: '.sticky-top'
|
4781 |
-
};
|
4782 |
/**
|
4783 |
* ------------------------------------------------------------------------
|
4784 |
* Class Definition
|
4785 |
* ------------------------------------------------------------------------
|
4786 |
*/
|
4787 |
|
4788 |
-
var Modal =
|
4789 |
-
/*#__PURE__*/
|
4790 |
-
function () {
|
4791 |
function Modal(element, config) {
|
4792 |
this._config = this._getConfig(config);
|
4793 |
this._element = element;
|
4794 |
-
this._dialog = element.querySelector(
|
4795 |
this._backdrop = null;
|
4796 |
this._isShown = false;
|
4797 |
this._isBodyOverflowing = false;
|
@@ -4815,11 +4758,11 @@
|
|
4815 |
return;
|
4816 |
}
|
4817 |
|
4818 |
-
if ($(this._element).hasClass(
|
4819 |
this._isTransitioning = true;
|
4820 |
}
|
4821 |
|
4822 |
-
var showEvent = $.Event(
|
4823 |
relatedTarget: relatedTarget
|
4824 |
});
|
4825 |
$(this._element).trigger(showEvent);
|
@@ -4840,11 +4783,11 @@
|
|
4840 |
|
4841 |
this._setResizeEvent();
|
4842 |
|
4843 |
-
$(this._element).on(
|
4844 |
return _this.hide(event);
|
4845 |
});
|
4846 |
-
$(this._dialog).on(
|
4847 |
-
$(_this._element).one(
|
4848 |
if ($(event.target).is(_this._element)) {
|
4849 |
_this._ignoreBackdropClick = true;
|
4850 |
}
|
@@ -4867,7 +4810,7 @@
|
|
4867 |
return;
|
4868 |
}
|
4869 |
|
4870 |
-
var hideEvent = $.Event(
|
4871 |
$(this._element).trigger(hideEvent);
|
4872 |
|
4873 |
if (!this._isShown || hideEvent.isDefaultPrevented()) {
|
@@ -4875,7 +4818,7 @@
|
|
4875 |
}
|
4876 |
|
4877 |
this._isShown = false;
|
4878 |
-
var transition = $(this._element).hasClass(
|
4879 |
|
4880 |
if (transition) {
|
4881 |
this._isTransitioning = true;
|
@@ -4885,10 +4828,10 @@
|
|
4885 |
|
4886 |
this._setResizeEvent();
|
4887 |
|
4888 |
-
$(document).off(
|
4889 |
-
$(this._element).removeClass(
|
4890 |
-
$(this._element).off(
|
4891 |
-
$(this._dialog).off(
|
4892 |
|
4893 |
if (transition) {
|
4894 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
@@ -4905,12 +4848,12 @@
|
|
4905 |
return $(htmlElement).off(EVENT_KEY$5);
|
4906 |
});
|
4907 |
/**
|
4908 |
-
* `document` has 2 events `
|
4909 |
* Do not move `document` in `htmlElements` array
|
4910 |
-
* It will remove `
|
4911 |
*/
|
4912 |
|
4913 |
-
$(document).off(
|
4914 |
$.removeData(this._element, DATA_KEY$5);
|
4915 |
this._config = null;
|
4916 |
this._element = null;
|
@@ -4929,7 +4872,7 @@
|
|
4929 |
;
|
4930 |
|
4931 |
_proto._getConfig = function _getConfig(config) {
|
4932 |
-
config = _objectSpread2({}, Default$3,
|
4933 |
Util.typeCheckConfig(NAME$5, config, DefaultType$3);
|
4934 |
return config;
|
4935 |
};
|
@@ -4938,18 +4881,18 @@
|
|
4938 |
var _this3 = this;
|
4939 |
|
4940 |
if (this._config.backdrop === 'static') {
|
4941 |
-
var hideEventPrevented = $.Event(
|
4942 |
$(this._element).trigger(hideEventPrevented);
|
4943 |
|
4944 |
if (hideEventPrevented.defaultPrevented) {
|
4945 |
return;
|
4946 |
}
|
4947 |
|
4948 |
-
this._element.classList.add(
|
4949 |
|
4950 |
var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
|
4951 |
$(this._element).one(Util.TRANSITION_END, function () {
|
4952 |
-
_this3._element.classList.remove(
|
4953 |
}).emulateTransitionEnd(modalTransitionDuration);
|
4954 |
|
4955 |
this._element.focus();
|
@@ -4961,8 +4904,8 @@
|
|
4961 |
_proto._showElement = function _showElement(relatedTarget) {
|
4962 |
var _this4 = this;
|
4963 |
|
4964 |
-
var transition = $(this._element).hasClass(
|
4965 |
-
var modalBody = this._dialog ? this._dialog.querySelector(
|
4966 |
|
4967 |
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
4968 |
// Don't move modal's DOM position
|
@@ -4975,7 +4918,7 @@
|
|
4975 |
|
4976 |
this._element.setAttribute('aria-modal', true);
|
4977 |
|
4978 |
-
if ($(this._dialog).hasClass(
|
4979 |
modalBody.scrollTop = 0;
|
4980 |
} else {
|
4981 |
this._element.scrollTop = 0;
|
@@ -4985,13 +4928,13 @@
|
|
4985 |
Util.reflow(this._element);
|
4986 |
}
|
4987 |
|
4988 |
-
$(this._element).addClass(
|
4989 |
|
4990 |
if (this._config.focus) {
|
4991 |
this._enforceFocus();
|
4992 |
}
|
4993 |
|
4994 |
-
var shownEvent = $.Event(
|
4995 |
relatedTarget: relatedTarget
|
4996 |
});
|
4997 |
|
@@ -5015,8 +4958,8 @@
|
|
5015 |
_proto._enforceFocus = function _enforceFocus() {
|
5016 |
var _this5 = this;
|
5017 |
|
5018 |
-
$(document).off(
|
5019 |
-
.on(
|
5020 |
if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
|
5021 |
_this5._element.focus();
|
5022 |
}
|
@@ -5026,14 +4969,18 @@
|
|
5026 |
_proto._setEscapeEvent = function _setEscapeEvent() {
|
5027 |
var _this6 = this;
|
5028 |
|
5029 |
-
if (this._isShown
|
5030 |
-
$(this._element).on(
|
5031 |
-
if (event.which === ESCAPE_KEYCODE$1) {
|
|
|
|
|
|
|
|
|
5032 |
_this6._triggerBackdropTransition();
|
5033 |
}
|
5034 |
});
|
5035 |
} else if (!this._isShown) {
|
5036 |
-
$(this._element).off(
|
5037 |
}
|
5038 |
};
|
5039 |
|
@@ -5041,11 +4988,11 @@
|
|
5041 |
var _this7 = this;
|
5042 |
|
5043 |
if (this._isShown) {
|
5044 |
-
$(window).on(
|
5045 |
return _this7.handleUpdate(event);
|
5046 |
});
|
5047 |
} else {
|
5048 |
-
$(window).off(
|
5049 |
}
|
5050 |
};
|
5051 |
|
@@ -5061,13 +5008,13 @@
|
|
5061 |
this._isTransitioning = false;
|
5062 |
|
5063 |
this._showBackdrop(function () {
|
5064 |
-
$(document.body).removeClass(
|
5065 |
|
5066 |
_this8._resetAdjustments();
|
5067 |
|
5068 |
_this8._resetScrollbar();
|
5069 |
|
5070 |
-
$(_this8._element).trigger(
|
5071 |
});
|
5072 |
};
|
5073 |
|
@@ -5081,18 +5028,18 @@
|
|
5081 |
_proto._showBackdrop = function _showBackdrop(callback) {
|
5082 |
var _this9 = this;
|
5083 |
|
5084 |
-
var animate = $(this._element).hasClass(
|
5085 |
|
5086 |
if (this._isShown && this._config.backdrop) {
|
5087 |
this._backdrop = document.createElement('div');
|
5088 |
-
this._backdrop.className =
|
5089 |
|
5090 |
if (animate) {
|
5091 |
this._backdrop.classList.add(animate);
|
5092 |
}
|
5093 |
|
5094 |
$(this._backdrop).appendTo(document.body);
|
5095 |
-
$(this._element).on(
|
5096 |
if (_this9._ignoreBackdropClick) {
|
5097 |
_this9._ignoreBackdropClick = false;
|
5098 |
return;
|
@@ -5109,7 +5056,7 @@
|
|
5109 |
Util.reflow(this._backdrop);
|
5110 |
}
|
5111 |
|
5112 |
-
$(this._backdrop).addClass(
|
5113 |
|
5114 |
if (!callback) {
|
5115 |
return;
|
@@ -5123,7 +5070,7 @@
|
|
5123 |
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
5124 |
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
|
5125 |
} else if (!this._isShown && this._backdrop) {
|
5126 |
-
$(this._backdrop).removeClass(
|
5127 |
|
5128 |
var callbackRemove = function callbackRemove() {
|
5129 |
_this9._removeBackdrop();
|
@@ -5133,7 +5080,7 @@
|
|
5133 |
}
|
5134 |
};
|
5135 |
|
5136 |
-
if ($(this._element).hasClass(
|
5137 |
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
5138 |
|
5139 |
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
|
@@ -5168,7 +5115,7 @@
|
|
5168 |
|
5169 |
_proto._checkScrollbar = function _checkScrollbar() {
|
5170 |
var rect = document.body.getBoundingClientRect();
|
5171 |
-
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
|
5172 |
this._scrollbarWidth = this._getScrollbarWidth();
|
5173 |
};
|
5174 |
|
@@ -5178,8 +5125,8 @@
|
|
5178 |
if (this._isBodyOverflowing) {
|
5179 |
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
5180 |
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
5181 |
-
var fixedContent = [].slice.call(document.querySelectorAll(
|
5182 |
-
var stickyContent = [].slice.call(document.querySelectorAll(
|
5183 |
|
5184 |
$(fixedContent).each(function (index, element) {
|
5185 |
var actualPadding = element.style.paddingRight;
|
@@ -5198,19 +5145,19 @@
|
|
5198 |
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
|
5199 |
}
|
5200 |
|
5201 |
-
$(document.body).addClass(
|
5202 |
};
|
5203 |
|
5204 |
_proto._resetScrollbar = function _resetScrollbar() {
|
5205 |
// Restore fixed content padding
|
5206 |
-
var fixedContent = [].slice.call(document.querySelectorAll(
|
5207 |
$(fixedContent).each(function (index, element) {
|
5208 |
var padding = $(element).data('padding-right');
|
5209 |
$(element).removeData('padding-right');
|
5210 |
element.style.paddingRight = padding ? padding : '';
|
5211 |
}); // Restore sticky content
|
5212 |
|
5213 |
-
var elements = [].slice.call(document.querySelectorAll("" +
|
5214 |
$(elements).each(function (index, element) {
|
5215 |
var margin = $(element).data('margin-right');
|
5216 |
|
@@ -5227,7 +5174,7 @@
|
|
5227 |
_proto._getScrollbarWidth = function _getScrollbarWidth() {
|
5228 |
// thx d.walsh
|
5229 |
var scrollDiv = document.createElement('div');
|
5230 |
-
scrollDiv.className =
|
5231 |
document.body.appendChild(scrollDiv);
|
5232 |
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
5233 |
document.body.removeChild(scrollDiv);
|
@@ -5239,7 +5186,7 @@
|
|
5239 |
return this.each(function () {
|
5240 |
var data = $(this).data(DATA_KEY$5);
|
5241 |
|
5242 |
-
var _config = _objectSpread2({}, Default$3,
|
5243 |
|
5244 |
if (!data) {
|
5245 |
data = new Modal(this, _config);
|
@@ -5279,7 +5226,7 @@
|
|
5279 |
*/
|
5280 |
|
5281 |
|
5282 |
-
$(document).on(
|
5283 |
var _this11 = this;
|
5284 |
|
5285 |
var target;
|
@@ -5289,19 +5236,19 @@
|
|
5289 |
target = document.querySelector(selector);
|
5290 |
}
|
5291 |
|
5292 |
-
var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(),
|
5293 |
|
5294 |
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
5295 |
event.preventDefault();
|
5296 |
}
|
5297 |
|
5298 |
-
var $target = $(target).one(
|
5299 |
if (showEvent.isDefaultPrevented()) {
|
5300 |
// Only register focus restorer if modal will actually get shown
|
5301 |
return;
|
5302 |
}
|
5303 |
|
5304 |
-
$target.one(
|
5305 |
if ($(_this11).is(':visible')) {
|
5306 |
_this11.focus();
|
5307 |
}
|
@@ -5326,7 +5273,7 @@
|
|
5326 |
|
5327 |
/**
|
5328 |
* --------------------------------------------------------------------------
|
5329 |
-
* Bootstrap (v4.
|
5330 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5331 |
* --------------------------------------------------------------------------
|
5332 |
*/
|
@@ -5351,7 +5298,7 @@
|
|
5351 |
h5: [],
|
5352 |
h6: [],
|
5353 |
i: [],
|
5354 |
-
img: ['src', 'alt', 'title', 'width', 'height'],
|
5355 |
li: [],
|
5356 |
ol: [],
|
5357 |
p: [],
|
@@ -5371,14 +5318,14 @@
|
|
5371 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
5372 |
*/
|
5373 |
|
5374 |
-
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[
|
5375 |
/**
|
5376 |
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
5377 |
*
|
5378 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
5379 |
*/
|
5380 |
|
5381 |
-
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-
|
5382 |
|
5383 |
function allowedAttribute(attr, allowedAttributeList) {
|
5384 |
var attrName = attr.nodeName.toLowerCase();
|
@@ -5395,7 +5342,7 @@
|
|
5395 |
return attrRegex instanceof RegExp;
|
5396 |
}); // Check if a regular expression validates the attribute.
|
5397 |
|
5398 |
-
for (var i = 0,
|
5399 |
if (attrName.match(regExp[i])) {
|
5400 |
return true;
|
5401 |
}
|
@@ -5452,7 +5399,7 @@
|
|
5452 |
*/
|
5453 |
|
5454 |
var NAME$6 = 'tooltip';
|
5455 |
-
var VERSION$6 = '4.
|
5456 |
var DATA_KEY$6 = 'bs.tooltip';
|
5457 |
var EVENT_KEY$6 = "." + DATA_KEY$6;
|
5458 |
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
|
@@ -5477,7 +5424,7 @@
|
|
5477 |
whiteList: 'object',
|
5478 |
popperConfig: '(null|object)'
|
5479 |
};
|
5480 |
-
var AttachmentMap
|
5481 |
AUTO: 'auto',
|
5482 |
TOP: 'top',
|
5483 |
RIGHT: 'right',
|
@@ -5502,11 +5449,9 @@
|
|
5502 |
whiteList: DefaultWhitelist,
|
5503 |
popperConfig: null
|
5504 |
};
|
5505 |
-
var
|
5506 |
-
|
5507 |
-
|
5508 |
-
};
|
5509 |
-
var Event$6 = {
|
5510 |
HIDE: "hide" + EVENT_KEY$6,
|
5511 |
HIDDEN: "hidden" + EVENT_KEY$6,
|
5512 |
SHOW: "show" + EVENT_KEY$6,
|
@@ -5518,30 +5463,21 @@
|
|
5518 |
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
|
5519 |
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
|
5520 |
};
|
5521 |
-
var
|
5522 |
-
|
5523 |
-
|
5524 |
-
|
5525 |
-
var
|
5526 |
-
|
5527 |
-
|
5528 |
-
|
5529 |
-
};
|
5530 |
-
var Trigger = {
|
5531 |
-
HOVER: 'hover',
|
5532 |
-
FOCUS: 'focus',
|
5533 |
-
CLICK: 'click',
|
5534 |
-
MANUAL: 'manual'
|
5535 |
-
};
|
5536 |
/**
|
5537 |
* ------------------------------------------------------------------------
|
5538 |
* Class Definition
|
5539 |
* ------------------------------------------------------------------------
|
5540 |
*/
|
5541 |
|
5542 |
-
var Tooltip =
|
5543 |
-
/*#__PURE__*/
|
5544 |
-
function () {
|
5545 |
function Tooltip(element, config) {
|
5546 |
if (typeof Popper === 'undefined') {
|
5547 |
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
|
@@ -5599,7 +5535,7 @@
|
|
5599 |
context._leave(null, context);
|
5600 |
}
|
5601 |
} else {
|
5602 |
-
if ($(this.getTipElement()).hasClass(
|
5603 |
this._leave(null, this);
|
5604 |
|
5605 |
return;
|
@@ -5659,7 +5595,7 @@
|
|
5659 |
this.setContent();
|
5660 |
|
5661 |
if (this.config.animation) {
|
5662 |
-
$(tip).addClass(
|
5663 |
}
|
5664 |
|
5665 |
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
|
@@ -5678,7 +5614,7 @@
|
|
5678 |
|
5679 |
$(this.element).trigger(this.constructor.Event.INSERTED);
|
5680 |
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
|
5681 |
-
$(tip).addClass(
|
5682 |
// empty mouseover listeners to the body's immediate children;
|
5683 |
// only needed because of broken event delegation on iOS
|
5684 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
@@ -5696,12 +5632,12 @@
|
|
5696 |
_this._hoverState = null;
|
5697 |
$(_this.element).trigger(_this.constructor.Event.SHOWN);
|
5698 |
|
5699 |
-
if (prevHoverState ===
|
5700 |
_this._leave(null, _this);
|
5701 |
}
|
5702 |
};
|
5703 |
|
5704 |
-
if ($(this.tip).hasClass(
|
5705 |
var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
|
5706 |
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
5707 |
} else {
|
@@ -5717,7 +5653,7 @@
|
|
5717 |
var hideEvent = $.Event(this.constructor.Event.HIDE);
|
5718 |
|
5719 |
var complete = function complete() {
|
5720 |
-
if (_this2._hoverState !==
|
5721 |
tip.parentNode.removeChild(tip);
|
5722 |
}
|
5723 |
|
@@ -5742,18 +5678,18 @@
|
|
5742 |
return;
|
5743 |
}
|
5744 |
|
5745 |
-
$(tip).removeClass(
|
5746 |
// empty mouseover listeners we added for iOS support
|
5747 |
|
5748 |
if ('ontouchstart' in document.documentElement) {
|
5749 |
$(document.body).children().off('mouseover', null, $.noop);
|
5750 |
}
|
5751 |
|
5752 |
-
this._activeTrigger[
|
5753 |
-
this._activeTrigger[
|
5754 |
-
this._activeTrigger[
|
5755 |
|
5756 |
-
if ($(this.tip).hasClass(
|
5757 |
var transitionDuration = Util.getTransitionDurationFromElement(tip);
|
5758 |
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
5759 |
} else {
|
@@ -5785,8 +5721,8 @@
|
|
5785 |
|
5786 |
_proto.setContent = function setContent() {
|
5787 |
var tip = this.getTipElement();
|
5788 |
-
this.setElementContent($(tip.querySelectorAll(
|
5789 |
-
$(tip).removeClass(
|
5790 |
};
|
5791 |
|
5792 |
_proto.setElementContent = function setElementContent($element, content) {
|
@@ -5836,7 +5772,7 @@
|
|
5836 |
behavior: this.config.fallbackPlacement
|
5837 |
},
|
5838 |
arrow: {
|
5839 |
-
element:
|
5840 |
},
|
5841 |
preventOverflow: {
|
5842 |
boundariesElement: this.config.boundary
|
@@ -5851,7 +5787,7 @@
|
|
5851 |
return _this3._handlePopperPlacementChange(data);
|
5852 |
}
|
5853 |
};
|
5854 |
-
return _objectSpread2({}, defaultBsConfig,
|
5855 |
};
|
5856 |
|
5857 |
_proto._getOffset = function _getOffset() {
|
@@ -5861,7 +5797,7 @@
|
|
5861 |
|
5862 |
if (typeof this.config.offset === 'function') {
|
5863 |
offset.fn = function (data) {
|
5864 |
-
data.offsets = _objectSpread2({}, data.offsets,
|
5865 |
return data;
|
5866 |
};
|
5867 |
} else {
|
@@ -5884,7 +5820,7 @@
|
|
5884 |
};
|
5885 |
|
5886 |
_proto._getAttachment = function _getAttachment(placement) {
|
5887 |
-
return AttachmentMap
|
5888 |
};
|
5889 |
|
5890 |
_proto._setListeners = function _setListeners() {
|
@@ -5896,9 +5832,9 @@
|
|
5896 |
$(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
|
5897 |
return _this5.toggle(event);
|
5898 |
});
|
5899 |
-
} else if (trigger !==
|
5900 |
-
var eventIn = trigger ===
|
5901 |
-
var eventOut = trigger ===
|
5902 |
$(_this5.element).on(eventIn, _this5.config.selector, function (event) {
|
5903 |
return _this5._enter(event);
|
5904 |
}).on(eventOut, _this5.config.selector, function (event) {
|
@@ -5916,7 +5852,7 @@
|
|
5916 |
$(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
|
5917 |
|
5918 |
if (this.config.selector) {
|
5919 |
-
this.config = _objectSpread2({}, this.config, {
|
5920 |
trigger: 'manual',
|
5921 |
selector: ''
|
5922 |
});
|
@@ -5944,16 +5880,16 @@
|
|
5944 |
}
|
5945 |
|
5946 |
if (event) {
|
5947 |
-
context._activeTrigger[event.type === 'focusin' ?
|
5948 |
}
|
5949 |
|
5950 |
-
if ($(context.getTipElement()).hasClass(
|
5951 |
-
context._hoverState =
|
5952 |
return;
|
5953 |
}
|
5954 |
|
5955 |
clearTimeout(context._timeout);
|
5956 |
-
context._hoverState =
|
5957 |
|
5958 |
if (!context.config.delay || !context.config.delay.show) {
|
5959 |
context.show();
|
@@ -5961,7 +5897,7 @@
|
|
5961 |
}
|
5962 |
|
5963 |
context._timeout = setTimeout(function () {
|
5964 |
-
if (context._hoverState ===
|
5965 |
context.show();
|
5966 |
}
|
5967 |
}, context.config.delay.show);
|
@@ -5977,7 +5913,7 @@
|
|
5977 |
}
|
5978 |
|
5979 |
if (event) {
|
5980 |
-
context._activeTrigger[event.type === 'focusout' ?
|
5981 |
}
|
5982 |
|
5983 |
if (context._isWithActiveTrigger()) {
|
@@ -5985,7 +5921,7 @@
|
|
5985 |
}
|
5986 |
|
5987 |
clearTimeout(context._timeout);
|
5988 |
-
context._hoverState =
|
5989 |
|
5990 |
if (!context.config.delay || !context.config.delay.hide) {
|
5991 |
context.hide();
|
@@ -5993,7 +5929,7 @@
|
|
5993 |
}
|
5994 |
|
5995 |
context._timeout = setTimeout(function () {
|
5996 |
-
if (context._hoverState ===
|
5997 |
context.hide();
|
5998 |
}
|
5999 |
}, context.config.delay.hide);
|
@@ -6016,7 +5952,7 @@
|
|
6016 |
delete dataAttributes[dataAttr];
|
6017 |
}
|
6018 |
});
|
6019 |
-
config = _objectSpread2({}, this.constructor.Default,
|
6020 |
|
6021 |
if (typeof config.delay === 'number') {
|
6022 |
config.delay = {
|
@@ -6066,8 +6002,7 @@
|
|
6066 |
};
|
6067 |
|
6068 |
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
|
6069 |
-
|
6070 |
-
this.tip = popperInstance.popper;
|
6071 |
|
6072 |
this._cleanTipClass();
|
6073 |
|
@@ -6082,7 +6017,7 @@
|
|
6082 |
return;
|
6083 |
}
|
6084 |
|
6085 |
-
$(tip).removeClass(
|
6086 |
this.config.animation = false;
|
6087 |
this.hide();
|
6088 |
this.show();
|
@@ -6138,7 +6073,7 @@
|
|
6138 |
}, {
|
6139 |
key: "Event",
|
6140 |
get: function get() {
|
6141 |
-
return Event
|
6142 |
}
|
6143 |
}, {
|
6144 |
key: "EVENT_KEY",
|
@@ -6176,33 +6111,29 @@
|
|
6176 |
*/
|
6177 |
|
6178 |
var NAME$7 = 'popover';
|
6179 |
-
var VERSION$7 = '4.
|
6180 |
var DATA_KEY$7 = 'bs.popover';
|
6181 |
var EVENT_KEY$7 = "." + DATA_KEY$7;
|
6182 |
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
|
6183 |
var CLASS_PREFIX$1 = 'bs-popover';
|
6184 |
var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
|
6185 |
|
6186 |
-
var Default$5 = _objectSpread2({}, Tooltip.Default, {
|
6187 |
placement: 'right',
|
6188 |
trigger: 'click',
|
6189 |
content: '',
|
6190 |
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
6191 |
});
|
6192 |
|
6193 |
-
var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {
|
6194 |
content: '(string|element|function)'
|
6195 |
});
|
6196 |
|
6197 |
-
var
|
6198 |
-
|
6199 |
-
|
6200 |
-
|
6201 |
-
var
|
6202 |
-
TITLE: '.popover-header',
|
6203 |
-
CONTENT: '.popover-body'
|
6204 |
-
};
|
6205 |
-
var Event$7 = {
|
6206 |
HIDE: "hide" + EVENT_KEY$7,
|
6207 |
HIDDEN: "hidden" + EVENT_KEY$7,
|
6208 |
SHOW: "show" + EVENT_KEY$7,
|
@@ -6220,9 +6151,7 @@
|
|
6220 |
* ------------------------------------------------------------------------
|
6221 |
*/
|
6222 |
|
6223 |
-
var Popover =
|
6224 |
-
/*#__PURE__*/
|
6225 |
-
function (_Tooltip) {
|
6226 |
_inheritsLoose(Popover, _Tooltip);
|
6227 |
|
6228 |
function Popover() {
|
@@ -6248,7 +6177,7 @@
|
|
6248 |
_proto.setContent = function setContent() {
|
6249 |
var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
|
6250 |
|
6251 |
-
this.setElementContent($tip.find(
|
6252 |
|
6253 |
var content = this._getContent();
|
6254 |
|
@@ -6256,8 +6185,8 @@
|
|
6256 |
content = content.call(this.element);
|
6257 |
}
|
6258 |
|
6259 |
-
this.setElementContent($tip.find(
|
6260 |
-
$tip.removeClass(
|
6261 |
} // Private
|
6262 |
;
|
6263 |
|
@@ -6324,7 +6253,7 @@
|
|
6324 |
}, {
|
6325 |
key: "Event",
|
6326 |
get: function get() {
|
6327 |
-
return Event$
|
6328 |
}
|
6329 |
}, {
|
6330 |
key: "EVENT_KEY",
|
@@ -6362,7 +6291,7 @@
|
|
6362 |
*/
|
6363 |
|
6364 |
var NAME$8 = 'scrollspy';
|
6365 |
-
var VERSION$8 = '4.
|
6366 |
var DATA_KEY$8 = 'bs.scrollspy';
|
6367 |
var EVENT_KEY$8 = "." + DATA_KEY$8;
|
6368 |
var DATA_API_KEY$6 = '.data-api';
|
@@ -6377,52 +6306,40 @@
|
|
6377 |
method: 'string',
|
6378 |
target: '(string|element)'
|
6379 |
};
|
6380 |
-
var
|
6381 |
-
|
6382 |
-
|
6383 |
-
|
6384 |
-
|
6385 |
-
var
|
6386 |
-
|
6387 |
-
|
6388 |
-
|
6389 |
-
|
6390 |
-
var
|
6391 |
-
|
6392 |
-
|
6393 |
-
|
6394 |
-
|
6395 |
-
NAV_ITEMS: '.nav-item',
|
6396 |
-
LIST_ITEMS: '.list-group-item',
|
6397 |
-
DROPDOWN: '.dropdown',
|
6398 |
-
DROPDOWN_ITEMS: '.dropdown-item',
|
6399 |
-
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
6400 |
-
};
|
6401 |
-
var OffsetMethod = {
|
6402 |
-
OFFSET: 'offset',
|
6403 |
-
POSITION: 'position'
|
6404 |
-
};
|
6405 |
/**
|
6406 |
* ------------------------------------------------------------------------
|
6407 |
* Class Definition
|
6408 |
* ------------------------------------------------------------------------
|
6409 |
*/
|
6410 |
|
6411 |
-
var ScrollSpy =
|
6412 |
-
/*#__PURE__*/
|
6413 |
-
function () {
|
6414 |
function ScrollSpy(element, config) {
|
6415 |
var _this = this;
|
6416 |
|
6417 |
this._element = element;
|
6418 |
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
6419 |
this._config = this._getConfig(config);
|
6420 |
-
this._selector = this._config.target + " " +
|
6421 |
this._offsets = [];
|
6422 |
this._targets = [];
|
6423 |
this._activeTarget = null;
|
6424 |
this._scrollHeight = 0;
|
6425 |
-
$(this._scrollElement).on(
|
6426 |
return _this._process(event);
|
6427 |
});
|
6428 |
this.refresh();
|
@@ -6437,9 +6354,9 @@
|
|
6437 |
_proto.refresh = function refresh() {
|
6438 |
var _this2 = this;
|
6439 |
|
6440 |
-
var autoMethod = this._scrollElement === this._scrollElement.window ?
|
6441 |
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
6442 |
-
var offsetBase = offsetMethod ===
|
6443 |
this._offsets = [];
|
6444 |
this._targets = [];
|
6445 |
this._scrollHeight = this._getScrollHeight();
|
@@ -6488,9 +6405,9 @@
|
|
6488 |
;
|
6489 |
|
6490 |
_proto._getConfig = function _getConfig(config) {
|
6491 |
-
config = _objectSpread2({}, Default$6,
|
6492 |
|
6493 |
-
if (typeof config.target !== 'string') {
|
6494 |
var id = $(config.target).attr('id');
|
6495 |
|
6496 |
if (!id) {
|
@@ -6546,9 +6463,7 @@
|
|
6546 |
return;
|
6547 |
}
|
6548 |
|
6549 |
-
var
|
6550 |
-
|
6551 |
-
for (var i = offsetLength; i--;) {
|
6552 |
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
6553 |
|
6554 |
if (isActiveTarget) {
|
@@ -6568,29 +6483,29 @@
|
|
6568 |
|
6569 |
var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
|
6570 |
|
6571 |
-
if ($link.hasClass(
|
6572 |
-
$link.closest(
|
6573 |
-
$link.addClass(
|
6574 |
} else {
|
6575 |
// Set triggered link as active
|
6576 |
-
$link.addClass(
|
6577 |
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
6578 |
|
6579 |
-
$link.parents(
|
6580 |
|
6581 |
-
$link.parents(
|
6582 |
}
|
6583 |
|
6584 |
-
$(this._scrollElement).trigger(
|
6585 |
relatedTarget: target
|
6586 |
});
|
6587 |
};
|
6588 |
|
6589 |
_proto._clear = function _clear() {
|
6590 |
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
|
6591 |
-
return node.classList.contains(
|
6592 |
}).forEach(function (node) {
|
6593 |
-
return node.classList.remove(
|
6594 |
});
|
6595 |
} // Static
|
6596 |
;
|
@@ -6637,8 +6552,8 @@
|
|
6637 |
*/
|
6638 |
|
6639 |
|
6640 |
-
$(window).on(
|
6641 |
-
var scrollSpys = [].slice.call(document.querySelectorAll(
|
6642 |
var scrollSpysLength = scrollSpys.length;
|
6643 |
|
6644 |
for (var i = scrollSpysLength; i--;) {
|
@@ -6668,43 +6583,35 @@
|
|
6668 |
*/
|
6669 |
|
6670 |
var NAME$9 = 'tab';
|
6671 |
-
var VERSION$9 = '4.
|
6672 |
var DATA_KEY$9 = 'bs.tab';
|
6673 |
var EVENT_KEY$9 = "." + DATA_KEY$9;
|
6674 |
var DATA_API_KEY$7 = '.data-api';
|
6675 |
var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
|
6676 |
-
var
|
6677 |
-
|
6678 |
-
|
6679 |
-
|
6680 |
-
|
6681 |
-
|
6682 |
-
|
6683 |
-
var
|
6684 |
-
|
6685 |
-
|
6686 |
-
|
6687 |
-
|
6688 |
-
|
6689 |
-
|
6690 |
-
var
|
6691 |
-
|
6692 |
-
|
6693 |
-
ACTIVE: '.active',
|
6694 |
-
ACTIVE_UL: '> li > .active',
|
6695 |
-
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
6696 |
-
DROPDOWN_TOGGLE: '.dropdown-toggle',
|
6697 |
-
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
|
6698 |
-
};
|
6699 |
/**
|
6700 |
* ------------------------------------------------------------------------
|
6701 |
* Class Definition
|
6702 |
* ------------------------------------------------------------------------
|
6703 |
*/
|
6704 |
|
6705 |
-
var Tab =
|
6706 |
-
/*#__PURE__*/
|
6707 |
-
function () {
|
6708 |
function Tab(element) {
|
6709 |
this._element = element;
|
6710 |
} // Getters
|
@@ -6716,25 +6623,25 @@
|
|
6716 |
_proto.show = function show() {
|
6717 |
var _this = this;
|
6718 |
|
6719 |
-
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(
|
6720 |
return;
|
6721 |
}
|
6722 |
|
6723 |
var target;
|
6724 |
var previous;
|
6725 |
-
var listElement = $(this._element).closest(
|
6726 |
var selector = Util.getSelectorFromElement(this._element);
|
6727 |
|
6728 |
if (listElement) {
|
6729 |
-
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ?
|
6730 |
previous = $.makeArray($(listElement).find(itemSelector));
|
6731 |
previous = previous[previous.length - 1];
|
6732 |
}
|
6733 |
|
6734 |
-
var hideEvent = $.Event(
|
6735 |
relatedTarget: this._element
|
6736 |
});
|
6737 |
-
var showEvent = $.Event(
|
6738 |
relatedTarget: previous
|
6739 |
});
|
6740 |
|
@@ -6755,10 +6662,10 @@
|
|
6755 |
this._activate(this._element, listElement);
|
6756 |
|
6757 |
var complete = function complete() {
|
6758 |
-
var hiddenEvent = $.Event(
|
6759 |
relatedTarget: _this._element
|
6760 |
});
|
6761 |
-
var shownEvent = $.Event(
|
6762 |
relatedTarget: previous
|
6763 |
});
|
6764 |
$(previous).trigger(hiddenEvent);
|
@@ -6781,9 +6688,9 @@
|
|
6781 |
_proto._activate = function _activate(element, container, callback) {
|
6782 |
var _this2 = this;
|
6783 |
|
6784 |
-
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(
|
6785 |
var active = activeElements[0];
|
6786 |
-
var isTransitioning = callback && active && $(active).hasClass(
|
6787 |
|
6788 |
var complete = function complete() {
|
6789 |
return _this2._transitionComplete(element, active, callback);
|
@@ -6791,7 +6698,7 @@
|
|
6791 |
|
6792 |
if (active && isTransitioning) {
|
6793 |
var transitionDuration = Util.getTransitionDurationFromElement(active);
|
6794 |
-
$(active).removeClass(
|
6795 |
} else {
|
6796 |
complete();
|
6797 |
}
|
@@ -6799,11 +6706,11 @@
|
|
6799 |
|
6800 |
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
|
6801 |
if (active) {
|
6802 |
-
$(active).removeClass(
|
6803 |
-
var dropdownChild = $(active.parentNode).find(
|
6804 |
|
6805 |
if (dropdownChild) {
|
6806 |
-
$(dropdownChild).removeClass(
|
6807 |
}
|
6808 |
|
6809 |
if (active.getAttribute('role') === 'tab') {
|
@@ -6811,7 +6718,7 @@
|
|
6811 |
}
|
6812 |
}
|
6813 |
|
6814 |
-
$(element).addClass(
|
6815 |
|
6816 |
if (element.getAttribute('role') === 'tab') {
|
6817 |
element.setAttribute('aria-selected', true);
|
@@ -6819,16 +6726,16 @@
|
|
6819 |
|
6820 |
Util.reflow(element);
|
6821 |
|
6822 |
-
if (element.classList.contains(
|
6823 |
-
element.classList.add(
|
6824 |
}
|
6825 |
|
6826 |
-
if (element.parentNode && $(element.parentNode).hasClass(
|
6827 |
-
var dropdownElement = $(element).closest(
|
6828 |
|
6829 |
if (dropdownElement) {
|
6830 |
-
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(
|
6831 |
-
$(dropdownToggleList).addClass(
|
6832 |
}
|
6833 |
|
6834 |
element.setAttribute('aria-expanded', true);
|
@@ -6876,7 +6783,7 @@
|
|
6876 |
*/
|
6877 |
|
6878 |
|
6879 |
-
$(document).on(
|
6880 |
event.preventDefault();
|
6881 |
|
6882 |
Tab._jQueryInterface.call($(this), 'show');
|
@@ -6902,23 +6809,19 @@
|
|
6902 |
*/
|
6903 |
|
6904 |
var NAME$a = 'toast';
|
6905 |
-
var VERSION$a = '4.
|
6906 |
var DATA_KEY$a = 'bs.toast';
|
6907 |
var EVENT_KEY$a = "." + DATA_KEY$a;
|
6908 |
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
|
6909 |
-
var
|
6910 |
-
|
6911 |
-
|
6912 |
-
|
6913 |
-
|
6914 |
-
|
6915 |
-
|
6916 |
-
var
|
6917 |
-
|
6918 |
-
HIDE: 'hide',
|
6919 |
-
SHOW: 'show',
|
6920 |
-
SHOWING: 'showing'
|
6921 |
-
};
|
6922 |
var DefaultType$7 = {
|
6923 |
animation: 'boolean',
|
6924 |
autohide: 'boolean',
|
@@ -6929,18 +6832,14 @@
|
|
6929 |
autohide: true,
|
6930 |
delay: 500
|
6931 |
};
|
6932 |
-
var
|
6933 |
-
DATA_DISMISS: '[data-dismiss="toast"]'
|
6934 |
-
};
|
6935 |
/**
|
6936 |
* ------------------------------------------------------------------------
|
6937 |
* Class Definition
|
6938 |
* ------------------------------------------------------------------------
|
6939 |
*/
|
6940 |
|
6941 |
-
var Toast =
|
6942 |
-
/*#__PURE__*/
|
6943 |
-
function () {
|
6944 |
function Toast(element, config) {
|
6945 |
this._element = element;
|
6946 |
this._config = this._getConfig(config);
|
@@ -6956,7 +6855,7 @@
|
|
6956 |
_proto.show = function show() {
|
6957 |
var _this = this;
|
6958 |
|
6959 |
-
var showEvent = $.Event(
|
6960 |
$(this._element).trigger(showEvent);
|
6961 |
|
6962 |
if (showEvent.isDefaultPrevented()) {
|
@@ -6964,15 +6863,15 @@
|
|
6964 |
}
|
6965 |
|
6966 |
if (this._config.animation) {
|
6967 |
-
this._element.classList.add(
|
6968 |
}
|
6969 |
|
6970 |
var complete = function complete() {
|
6971 |
-
_this._element.classList.remove(
|
6972 |
|
6973 |
-
_this._element.classList.add(
|
6974 |
|
6975 |
-
$(_this._element).trigger(
|
6976 |
|
6977 |
if (_this._config.autohide) {
|
6978 |
_this._timeout = setTimeout(function () {
|
@@ -6981,11 +6880,11 @@
|
|
6981 |
}
|
6982 |
};
|
6983 |
|
6984 |
-
this._element.classList.remove(
|
6985 |
|
6986 |
Util.reflow(this._element);
|
6987 |
|
6988 |
-
this._element.classList.add(
|
6989 |
|
6990 |
if (this._config.animation) {
|
6991 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
@@ -6996,11 +6895,11 @@
|
|
6996 |
};
|
6997 |
|
6998 |
_proto.hide = function hide() {
|
6999 |
-
if (!this._element.classList.contains(
|
7000 |
return;
|
7001 |
}
|
7002 |
|
7003 |
-
var hideEvent = $.Event(
|
7004 |
$(this._element).trigger(hideEvent);
|
7005 |
|
7006 |
if (hideEvent.isDefaultPrevented()) {
|
@@ -7014,11 +6913,11 @@
|
|
7014 |
clearTimeout(this._timeout);
|
7015 |
this._timeout = null;
|
7016 |
|
7017 |
-
if (this._element.classList.contains(
|
7018 |
-
this._element.classList.remove(
|
7019 |
}
|
7020 |
|
7021 |
-
$(this._element).off(
|
7022 |
$.removeData(this._element, DATA_KEY$a);
|
7023 |
this._element = null;
|
7024 |
this._config = null;
|
@@ -7026,7 +6925,7 @@
|
|
7026 |
;
|
7027 |
|
7028 |
_proto._getConfig = function _getConfig(config) {
|
7029 |
-
config = _objectSpread2({}, Default$7,
|
7030 |
Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
|
7031 |
return config;
|
7032 |
};
|
@@ -7034,7 +6933,7 @@
|
|
7034 |
_proto._setListeners = function _setListeners() {
|
7035 |
var _this2 = this;
|
7036 |
|
7037 |
-
$(this._element).on(
|
7038 |
return _this2.hide();
|
7039 |
});
|
7040 |
};
|
@@ -7043,12 +6942,12 @@
|
|
7043 |
var _this3 = this;
|
7044 |
|
7045 |
var complete = function complete() {
|
7046 |
-
_this3._element.classList.add(
|
7047 |
|
7048 |
-
$(_this3._element).trigger(
|
7049 |
};
|
7050 |
|
7051 |
-
this._element.classList.remove(
|
7052 |
|
7053 |
if (this._config.animation) {
|
7054 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
(function (global, factory) {
|
9 |
(global = global || self, factory(global.bootstrap = {}, global.jQuery));
|
10 |
}(this, (function (exports, $) { 'use strict';
|
11 |
|
12 |
+
$ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
|
13 |
|
14 |
function _defineProperties(target, props) {
|
15 |
for (var i = 0; i < props.length; i++) {
|
84 |
|
85 |
/**
|
86 |
* --------------------------------------------------------------------------
|
87 |
+
* Bootstrap (v4.5.0): util.js
|
88 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
89 |
* --------------------------------------------------------------------------
|
90 |
*/
|
99 |
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
100 |
|
101 |
function toType(obj) {
|
102 |
+
if (obj === null || typeof obj === 'undefined') {
|
103 |
+
return "" + obj;
|
104 |
+
}
|
105 |
+
|
106 |
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
107 |
}
|
108 |
|
115 |
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
116 |
}
|
117 |
|
118 |
+
return undefined;
|
119 |
}
|
120 |
};
|
121 |
}
|
265 |
*/
|
266 |
|
267 |
var NAME = 'alert';
|
268 |
+
var VERSION = '4.5.0';
|
269 |
var DATA_KEY = 'bs.alert';
|
270 |
var EVENT_KEY = "." + DATA_KEY;
|
271 |
var DATA_API_KEY = '.data-api';
|
272 |
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
273 |
+
var SELECTOR_DISMISS = '[data-dismiss="alert"]';
|
274 |
+
var EVENT_CLOSE = "close" + EVENT_KEY;
|
275 |
+
var EVENT_CLOSED = "closed" + EVENT_KEY;
|
276 |
+
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
|
277 |
+
var CLASS_NAME_ALERT = 'alert';
|
278 |
+
var CLASS_NAME_FADE = 'fade';
|
279 |
+
var CLASS_NAME_SHOW = 'show';
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
/**
|
281 |
* ------------------------------------------------------------------------
|
282 |
* Class Definition
|
283 |
* ------------------------------------------------------------------------
|
284 |
*/
|
285 |
|
286 |
+
var Alert = /*#__PURE__*/function () {
|
|
|
|
|
287 |
function Alert(element) {
|
288 |
this._element = element;
|
289 |
} // Getters
|
323 |
}
|
324 |
|
325 |
if (!parent) {
|
326 |
+
parent = $(element).closest("." + CLASS_NAME_ALERT)[0];
|
327 |
}
|
328 |
|
329 |
return parent;
|
330 |
};
|
331 |
|
332 |
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
|
333 |
+
var closeEvent = $.Event(EVENT_CLOSE);
|
334 |
$(element).trigger(closeEvent);
|
335 |
return closeEvent;
|
336 |
};
|
338 |
_proto._removeElement = function _removeElement(element) {
|
339 |
var _this = this;
|
340 |
|
341 |
+
$(element).removeClass(CLASS_NAME_SHOW);
|
342 |
|
343 |
+
if (!$(element).hasClass(CLASS_NAME_FADE)) {
|
344 |
this._destroyElement(element);
|
345 |
|
346 |
return;
|
353 |
};
|
354 |
|
355 |
_proto._destroyElement = function _destroyElement(element) {
|
356 |
+
$(element).detach().trigger(EVENT_CLOSED).remove();
|
357 |
} // Static
|
358 |
;
|
359 |
|
399 |
*/
|
400 |
|
401 |
|
402 |
+
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
|
403 |
/**
|
404 |
* ------------------------------------------------------------------------
|
405 |
* jQuery
|
421 |
*/
|
422 |
|
423 |
var NAME$1 = 'button';
|
424 |
+
var VERSION$1 = '4.5.0';
|
425 |
var DATA_KEY$1 = 'bs.button';
|
426 |
var EVENT_KEY$1 = "." + DATA_KEY$1;
|
427 |
var DATA_API_KEY$1 = '.data-api';
|
428 |
var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
|
429 |
+
var CLASS_NAME_ACTIVE = 'active';
|
430 |
+
var CLASS_NAME_BUTTON = 'btn';
|
431 |
+
var CLASS_NAME_FOCUS = 'focus';
|
432 |
+
var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
|
433 |
+
var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
|
434 |
+
var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
|
435 |
+
var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
|
436 |
+
var SELECTOR_INPUT = 'input:not([type="hidden"])';
|
437 |
+
var SELECTOR_ACTIVE = '.active';
|
438 |
+
var SELECTOR_BUTTON = '.btn';
|
439 |
+
var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
|
440 |
+
var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
|
441 |
+
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
|
|
|
|
|
|
|
|
|
|
|
|
|
442 |
/**
|
443 |
* ------------------------------------------------------------------------
|
444 |
* Class Definition
|
445 |
* ------------------------------------------------------------------------
|
446 |
*/
|
447 |
|
448 |
+
var Button = /*#__PURE__*/function () {
|
|
|
|
|
449 |
function Button(element) {
|
450 |
this._element = element;
|
451 |
} // Getters
|
457 |
_proto.toggle = function toggle() {
|
458 |
var triggerChangeEvent = true;
|
459 |
var addAriaPressed = true;
|
460 |
+
var rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0];
|
461 |
|
462 |
if (rootElement) {
|
463 |
+
var input = this._element.querySelector(SELECTOR_INPUT);
|
464 |
|
465 |
if (input) {
|
466 |
if (input.type === 'radio') {
|
467 |
+
if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
468 |
triggerChangeEvent = false;
|
469 |
} else {
|
470 |
+
var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
|
471 |
|
472 |
if (activeElement) {
|
473 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE);
|
474 |
}
|
475 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
476 |
}
|
477 |
|
478 |
if (triggerChangeEvent) {
|
479 |
+
// if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
|
480 |
+
if (input.type === 'checkbox' || input.type === 'radio') {
|
481 |
+
input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
|
482 |
+
}
|
483 |
+
|
484 |
$(input).trigger('change');
|
485 |
}
|
486 |
|
491 |
|
492 |
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
|
493 |
if (addAriaPressed) {
|
494 |
+
this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
|
495 |
}
|
496 |
|
497 |
if (triggerChangeEvent) {
|
498 |
+
$(this._element).toggleClass(CLASS_NAME_ACTIVE);
|
499 |
}
|
500 |
}
|
501 |
};
|
537 |
*/
|
538 |
|
539 |
|
540 |
+
$(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
|
541 |
var button = event.target;
|
542 |
+
var initialButton = button;
|
543 |
|
544 |
+
if (!$(button).hasClass(CLASS_NAME_BUTTON)) {
|
545 |
+
button = $(button).closest(SELECTOR_BUTTON)[0];
|
546 |
}
|
547 |
|
548 |
if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
|
549 |
event.preventDefault(); // work around Firefox bug #1540995
|
550 |
} else {
|
551 |
+
var inputBtn = button.querySelector(SELECTOR_INPUT);
|
552 |
|
553 |
if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
|
554 |
event.preventDefault(); // work around Firefox bug #1540995
|
556 |
return;
|
557 |
}
|
558 |
|
559 |
+
if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {
|
560 |
+
event.preventDefault(); // work around event sent to label and input
|
561 |
+
}
|
562 |
+
|
563 |
Button._jQueryInterface.call($(button), 'toggle');
|
564 |
}
|
565 |
+
}).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
|
566 |
+
var button = $(event.target).closest(SELECTOR_BUTTON)[0];
|
567 |
+
$(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
|
568 |
});
|
569 |
+
$(window).on(EVENT_LOAD_DATA_API, function () {
|
570 |
// ensure correct active class is set to match the controls' actual values/states
|
571 |
// find all checkboxes/readio buttons inside data-toggle groups
|
572 |
+
var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
|
573 |
|
574 |
for (var i = 0, len = buttons.length; i < len; i++) {
|
575 |
var button = buttons[i];
|
576 |
+
var input = button.querySelector(SELECTOR_INPUT);
|
577 |
|
578 |
if (input.checked || input.hasAttribute('checked')) {
|
579 |
+
button.classList.add(CLASS_NAME_ACTIVE);
|
580 |
} else {
|
581 |
+
button.classList.remove(CLASS_NAME_ACTIVE);
|
582 |
}
|
583 |
} // find all button toggles
|
584 |
|
585 |
|
586 |
+
buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
|
587 |
|
588 |
for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
|
589 |
var _button = buttons[_i];
|
590 |
|
591 |
if (_button.getAttribute('aria-pressed') === 'true') {
|
592 |
+
_button.classList.add(CLASS_NAME_ACTIVE);
|
593 |
} else {
|
594 |
+
_button.classList.remove(CLASS_NAME_ACTIVE);
|
595 |
}
|
596 |
}
|
597 |
});
|
616 |
*/
|
617 |
|
618 |
var NAME$2 = 'carousel';
|
619 |
+
var VERSION$2 = '4.5.0';
|
620 |
var DATA_KEY$2 = 'bs.carousel';
|
621 |
var EVENT_KEY$2 = "." + DATA_KEY$2;
|
622 |
var DATA_API_KEY$2 = '.data-api';
|
644 |
wrap: 'boolean',
|
645 |
touch: 'boolean'
|
646 |
};
|
647 |
+
var DIRECTION_NEXT = 'next';
|
648 |
+
var DIRECTION_PREV = 'prev';
|
649 |
+
var DIRECTION_LEFT = 'left';
|
650 |
+
var DIRECTION_RIGHT = 'right';
|
651 |
+
var EVENT_SLIDE = "slide" + EVENT_KEY$2;
|
652 |
+
var EVENT_SLID = "slid" + EVENT_KEY$2;
|
653 |
+
var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
|
654 |
+
var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
|
655 |
+
var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
|
656 |
+
var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
|
657 |
+
var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
|
658 |
+
var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
|
659 |
+
var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
|
660 |
+
var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
|
661 |
+
var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
|
662 |
+
var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
|
663 |
+
var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
|
664 |
+
var CLASS_NAME_CAROUSEL = 'carousel';
|
665 |
+
var CLASS_NAME_ACTIVE$1 = 'active';
|
666 |
+
var CLASS_NAME_SLIDE = 'slide';
|
667 |
+
var CLASS_NAME_RIGHT = 'carousel-item-right';
|
668 |
+
var CLASS_NAME_LEFT = 'carousel-item-left';
|
669 |
+
var CLASS_NAME_NEXT = 'carousel-item-next';
|
670 |
+
var CLASS_NAME_PREV = 'carousel-item-prev';
|
671 |
+
var CLASS_NAME_POINTER_EVENT = 'pointer-event';
|
672 |
+
var SELECTOR_ACTIVE$1 = '.active';
|
673 |
+
var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
|
674 |
+
var SELECTOR_ITEM = '.carousel-item';
|
675 |
+
var SELECTOR_ITEM_IMG = '.carousel-item img';
|
676 |
+
var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
|
677 |
+
var SELECTOR_INDICATORS = '.carousel-indicators';
|
678 |
+
var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
|
679 |
+
var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
680 |
var PointerType = {
|
681 |
TOUCH: 'touch',
|
682 |
PEN: 'pen'
|
687 |
* ------------------------------------------------------------------------
|
688 |
*/
|
689 |
|
690 |
+
var Carousel = /*#__PURE__*/function () {
|
|
|
|
|
691 |
function Carousel(element, config) {
|
692 |
this._items = null;
|
693 |
this._interval = null;
|
699 |
this.touchDeltaX = 0;
|
700 |
this._config = this._getConfig(config);
|
701 |
this._element = element;
|
702 |
+
this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
|
703 |
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
704 |
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
|
705 |
|
712 |
// Public
|
713 |
_proto.next = function next() {
|
714 |
if (!this._isSliding) {
|
715 |
+
this._slide(DIRECTION_NEXT);
|
716 |
}
|
717 |
};
|
718 |
|
726 |
|
727 |
_proto.prev = function prev() {
|
728 |
if (!this._isSliding) {
|
729 |
+
this._slide(DIRECTION_PREV);
|
730 |
}
|
731 |
};
|
732 |
|
735 |
this._isPaused = true;
|
736 |
}
|
737 |
|
738 |
+
if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
|
739 |
Util.triggerTransitionEnd(this._element);
|
740 |
this.cycle(true);
|
741 |
}
|
762 |
_proto.to = function to(index) {
|
763 |
var _this = this;
|
764 |
|
765 |
+
this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
|
766 |
|
767 |
var activeIndex = this._getItemIndex(this._activeElement);
|
768 |
|
771 |
}
|
772 |
|
773 |
if (this._isSliding) {
|
774 |
+
$(this._element).one(EVENT_SLID, function () {
|
775 |
return _this.to(index);
|
776 |
});
|
777 |
return;
|
783 |
return;
|
784 |
}
|
785 |
|
786 |
+
var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
|
787 |
|
788 |
this._slide(direction, this._items[index]);
|
789 |
};
|
803 |
;
|
804 |
|
805 |
_proto._getConfig = function _getConfig(config) {
|
806 |
+
config = _objectSpread2(_objectSpread2({}, Default), config);
|
807 |
Util.typeCheckConfig(NAME$2, config, DefaultType);
|
808 |
return config;
|
809 |
};
|
832 |
var _this2 = this;
|
833 |
|
834 |
if (this._config.keyboard) {
|
835 |
+
$(this._element).on(EVENT_KEYDOWN, function (event) {
|
836 |
return _this2._keydown(event);
|
837 |
});
|
838 |
}
|
839 |
|
840 |
if (this._config.pause === 'hover') {
|
841 |
+
$(this._element).on(EVENT_MOUSEENTER, function (event) {
|
842 |
return _this2.pause(event);
|
843 |
+
}).on(EVENT_MOUSELEAVE, function (event) {
|
844 |
return _this2.cycle(event);
|
845 |
});
|
846 |
}
|
901 |
}
|
902 |
};
|
903 |
|
904 |
+
$(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
|
905 |
return e.preventDefault();
|
906 |
});
|
907 |
|
908 |
if (this._pointerEvent) {
|
909 |
+
$(this._element).on(EVENT_POINTERDOWN, function (event) {
|
910 |
return start(event);
|
911 |
});
|
912 |
+
$(this._element).on(EVENT_POINTERUP, function (event) {
|
913 |
return end(event);
|
914 |
});
|
915 |
|
916 |
+
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
|
917 |
} else {
|
918 |
+
$(this._element).on(EVENT_TOUCHSTART, function (event) {
|
919 |
return start(event);
|
920 |
});
|
921 |
+
$(this._element).on(EVENT_TOUCHMOVE, function (event) {
|
922 |
return move(event);
|
923 |
});
|
924 |
+
$(this._element).on(EVENT_TOUCHEND, function (event) {
|
925 |
return end(event);
|
926 |
});
|
927 |
}
|
946 |
};
|
947 |
|
948 |
_proto._getItemIndex = function _getItemIndex(element) {
|
949 |
+
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
|
950 |
return this._items.indexOf(element);
|
951 |
};
|
952 |
|
953 |
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
|
954 |
+
var isNextDirection = direction === DIRECTION_NEXT;
|
955 |
+
var isPrevDirection = direction === DIRECTION_PREV;
|
956 |
|
957 |
var activeIndex = this._getItemIndex(activeElement);
|
958 |
|
963 |
return activeElement;
|
964 |
}
|
965 |
|
966 |
+
var delta = direction === DIRECTION_PREV ? -1 : 1;
|
967 |
var itemIndex = (activeIndex + delta) % this._items.length;
|
968 |
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
969 |
};
|
971 |
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
|
972 |
var targetIndex = this._getItemIndex(relatedTarget);
|
973 |
|
974 |
+
var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
|
975 |
|
976 |
+
var slideEvent = $.Event(EVENT_SLIDE, {
|
977 |
relatedTarget: relatedTarget,
|
978 |
direction: eventDirectionName,
|
979 |
from: fromIndex,
|
985 |
|
986 |
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
|
987 |
if (this._indicatorsElement) {
|
988 |
+
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
|
989 |
+
$(indicators).removeClass(CLASS_NAME_ACTIVE$1);
|
990 |
|
991 |
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
|
992 |
|
993 |
if (nextIndicator) {
|
994 |
+
$(nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
|
995 |
}
|
996 |
}
|
997 |
};
|
999 |
_proto._slide = function _slide(direction, element) {
|
1000 |
var _this4 = this;
|
1001 |
|
1002 |
+
var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
|
1003 |
|
1004 |
var activeElementIndex = this._getItemIndex(activeElement);
|
1005 |
|
1012 |
var orderClassName;
|
1013 |
var eventDirectionName;
|
1014 |
|
1015 |
+
if (direction === DIRECTION_NEXT) {
|
1016 |
+
directionalClassName = CLASS_NAME_LEFT;
|
1017 |
+
orderClassName = CLASS_NAME_NEXT;
|
1018 |
+
eventDirectionName = DIRECTION_LEFT;
|
1019 |
} else {
|
1020 |
+
directionalClassName = CLASS_NAME_RIGHT;
|
1021 |
+
orderClassName = CLASS_NAME_PREV;
|
1022 |
+
eventDirectionName = DIRECTION_RIGHT;
|
1023 |
}
|
1024 |
|
1025 |
+
if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {
|
1026 |
this._isSliding = false;
|
1027 |
return;
|
1028 |
}
|
1046 |
|
1047 |
this._setActiveIndicatorElement(nextElement);
|
1048 |
|
1049 |
+
var slidEvent = $.Event(EVENT_SLID, {
|
1050 |
relatedTarget: nextElement,
|
1051 |
direction: eventDirectionName,
|
1052 |
from: activeElementIndex,
|
1053 |
to: nextElementIndex
|
1054 |
});
|
1055 |
|
1056 |
+
if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {
|
1057 |
$(nextElement).addClass(orderClassName);
|
1058 |
Util.reflow(nextElement);
|
1059 |
$(activeElement).addClass(directionalClassName);
|
1069 |
|
1070 |
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
|
1071 |
$(activeElement).one(Util.TRANSITION_END, function () {
|
1072 |
+
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
|
1073 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
|
1074 |
_this4._isSliding = false;
|
1075 |
setTimeout(function () {
|
1076 |
return $(_this4._element).trigger(slidEvent);
|
1077 |
}, 0);
|
1078 |
}).emulateTransitionEnd(transitionDuration);
|
1079 |
} else {
|
1080 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1);
|
1081 |
+
$(nextElement).addClass(CLASS_NAME_ACTIVE$1);
|
1082 |
this._isSliding = false;
|
1083 |
$(this._element).trigger(slidEvent);
|
1084 |
}
|
1093 |
return this.each(function () {
|
1094 |
var data = $(this).data(DATA_KEY$2);
|
1095 |
|
1096 |
+
var _config = _objectSpread2(_objectSpread2({}, Default), $(this).data());
|
1097 |
|
1098 |
if (typeof config === 'object') {
|
1099 |
+
_config = _objectSpread2(_objectSpread2({}, _config), config);
|
1100 |
}
|
1101 |
|
1102 |
var action = typeof config === 'string' ? config : _config.slide;
|
1130 |
|
1131 |
var target = $(selector)[0];
|
1132 |
|
1133 |
+
if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {
|
1134 |
return;
|
1135 |
}
|
1136 |
|
1137 |
+
var config = _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
|
1138 |
|
1139 |
var slideIndex = this.getAttribute('data-slide-to');
|
1140 |
|
1172 |
*/
|
1173 |
|
1174 |
|
1175 |
+
$(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
|
1176 |
+
$(window).on(EVENT_LOAD_DATA_API$1, function () {
|
1177 |
+
var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
|
1178 |
|
1179 |
for (var i = 0, len = carousels.length; i < len; i++) {
|
1180 |
var $carousel = $(carousels[i]);
|
1203 |
*/
|
1204 |
|
1205 |
var NAME$3 = 'collapse';
|
1206 |
+
var VERSION$3 = '4.5.0';
|
1207 |
var DATA_KEY$3 = 'bs.collapse';
|
1208 |
var EVENT_KEY$3 = "." + DATA_KEY$3;
|
1209 |
var DATA_API_KEY$3 = '.data-api';
|
1216 |
toggle: 'boolean',
|
1217 |
parent: '(string|element)'
|
1218 |
};
|
1219 |
+
var EVENT_SHOW = "show" + EVENT_KEY$3;
|
1220 |
+
var EVENT_SHOWN = "shown" + EVENT_KEY$3;
|
1221 |
+
var EVENT_HIDE = "hide" + EVENT_KEY$3;
|
1222 |
+
var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
|
1223 |
+
var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
|
1224 |
+
var CLASS_NAME_SHOW$1 = 'show';
|
1225 |
+
var CLASS_NAME_COLLAPSE = 'collapse';
|
1226 |
+
var CLASS_NAME_COLLAPSING = 'collapsing';
|
1227 |
+
var CLASS_NAME_COLLAPSED = 'collapsed';
|
1228 |
+
var DIMENSION_WIDTH = 'width';
|
1229 |
+
var DIMENSION_HEIGHT = 'height';
|
1230 |
+
var SELECTOR_ACTIVES = '.show, .collapsing';
|
1231 |
+
var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1232 |
/**
|
1233 |
* ------------------------------------------------------------------------
|
1234 |
* Class Definition
|
1235 |
* ------------------------------------------------------------------------
|
1236 |
*/
|
1237 |
|
1238 |
+
var Collapse = /*#__PURE__*/function () {
|
|
|
|
|
1239 |
function Collapse(element, config) {
|
1240 |
this._isTransitioning = false;
|
1241 |
this._element = element;
|
1242 |
this._config = this._getConfig(config);
|
1243 |
this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
|
1244 |
+
var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
|
1245 |
|
1246 |
for (var i = 0, len = toggleList.length; i < len; i++) {
|
1247 |
var elem = toggleList[i];
|
1273 |
|
1274 |
// Public
|
1275 |
_proto.toggle = function toggle() {
|
1276 |
+
if ($(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1277 |
this.hide();
|
1278 |
} else {
|
1279 |
this.show();
|
1283 |
_proto.show = function show() {
|
1284 |
var _this = this;
|
1285 |
|
1286 |
+
if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1287 |
return;
|
1288 |
}
|
1289 |
|
1291 |
var activesData;
|
1292 |
|
1293 |
if (this._parent) {
|
1294 |
+
actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
|
1295 |
if (typeof _this._config.parent === 'string') {
|
1296 |
return elem.getAttribute('data-parent') === _this._config.parent;
|
1297 |
}
|
1298 |
|
1299 |
+
return elem.classList.contains(CLASS_NAME_COLLAPSE);
|
1300 |
});
|
1301 |
|
1302 |
if (actives.length === 0) {
|
1312 |
}
|
1313 |
}
|
1314 |
|
1315 |
+
var startEvent = $.Event(EVENT_SHOW);
|
1316 |
$(this._element).trigger(startEvent);
|
1317 |
|
1318 |
if (startEvent.isDefaultPrevented()) {
|
1329 |
|
1330 |
var dimension = this._getDimension();
|
1331 |
|
1332 |
+
$(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
|
1333 |
this._element.style[dimension] = 0;
|
1334 |
|
1335 |
if (this._triggerArray.length) {
|
1336 |
+
$(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
|
1337 |
}
|
1338 |
|
1339 |
this.setTransitioning(true);
|
1340 |
|
1341 |
var complete = function complete() {
|
1342 |
+
$(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
|
1343 |
_this._element.style[dimension] = '';
|
1344 |
|
1345 |
_this.setTransitioning(false);
|
1346 |
|
1347 |
+
$(_this._element).trigger(EVENT_SHOWN);
|
1348 |
};
|
1349 |
|
1350 |
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
1357 |
_proto.hide = function hide() {
|
1358 |
var _this2 = this;
|
1359 |
|
1360 |
+
if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1361 |
return;
|
1362 |
}
|
1363 |
|
1364 |
+
var startEvent = $.Event(EVENT_HIDE);
|
1365 |
$(this._element).trigger(startEvent);
|
1366 |
|
1367 |
if (startEvent.isDefaultPrevented()) {
|
1372 |
|
1373 |
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
|
1374 |
Util.reflow(this._element);
|
1375 |
+
$(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
|
1376 |
var triggerArrayLength = this._triggerArray.length;
|
1377 |
|
1378 |
if (triggerArrayLength > 0) {
|
1383 |
if (selector !== null) {
|
1384 |
var $elem = $([].slice.call(document.querySelectorAll(selector)));
|
1385 |
|
1386 |
+
if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
|
1387 |
+
$(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
|
1388 |
}
|
1389 |
}
|
1390 |
}
|
1395 |
var complete = function complete() {
|
1396 |
_this2.setTransitioning(false);
|
1397 |
|
1398 |
+
$(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
|
1399 |
};
|
1400 |
|
1401 |
this._element.style[dimension] = '';
|
1418 |
;
|
1419 |
|
1420 |
_proto._getConfig = function _getConfig(config) {
|
1421 |
+
config = _objectSpread2(_objectSpread2({}, Default$1), config);
|
1422 |
config.toggle = Boolean(config.toggle); // Coerce string values
|
1423 |
|
1424 |
Util.typeCheckConfig(NAME$3, config, DefaultType$1);
|
1426 |
};
|
1427 |
|
1428 |
_proto._getDimension = function _getDimension() {
|
1429 |
+
var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH);
|
1430 |
+
return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
|
1431 |
};
|
1432 |
|
1433 |
_proto._getParent = function _getParent() {
|
1454 |
};
|
1455 |
|
1456 |
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
|
1457 |
+
var isOpen = $(element).hasClass(CLASS_NAME_SHOW$1);
|
1458 |
|
1459 |
if (triggerArray.length) {
|
1460 |
+
$(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
|
1461 |
}
|
1462 |
} // Static
|
1463 |
;
|
1472 |
var $this = $(this);
|
1473 |
var data = $this.data(DATA_KEY$3);
|
1474 |
|
1475 |
+
var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config === 'object' && config ? config : {});
|
1476 |
|
1477 |
+
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
|
1478 |
_config.toggle = false;
|
1479 |
}
|
1480 |
|
1514 |
*/
|
1515 |
|
1516 |
|
1517 |
+
$(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
|
1518 |
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
1519 |
if (event.currentTarget.tagName === 'A') {
|
1520 |
event.preventDefault();
|
4166 |
*/
|
4167 |
|
4168 |
var NAME$4 = 'dropdown';
|
4169 |
+
var VERSION$4 = '4.5.0';
|
4170 |
var DATA_KEY$4 = 'bs.dropdown';
|
4171 |
var EVENT_KEY$4 = "." + DATA_KEY$4;
|
4172 |
var DATA_API_KEY$4 = '.data-api';
|
4184 |
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
4185 |
|
4186 |
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
|
4187 |
+
var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
|
4188 |
+
var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
|
4189 |
+
var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
|
4190 |
+
var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
|
4191 |
+
var EVENT_CLICK = "click" + EVENT_KEY$4;
|
4192 |
+
var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
|
4193 |
+
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
|
4194 |
+
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
|
4195 |
+
var CLASS_NAME_DISABLED = 'disabled';
|
4196 |
+
var CLASS_NAME_SHOW$2 = 'show';
|
4197 |
+
var CLASS_NAME_DROPUP = 'dropup';
|
4198 |
+
var CLASS_NAME_DROPRIGHT = 'dropright';
|
4199 |
+
var CLASS_NAME_DROPLEFT = 'dropleft';
|
4200 |
+
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
|
4201 |
+
var CLASS_NAME_POSITION_STATIC = 'position-static';
|
4202 |
+
var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
|
4203 |
+
var SELECTOR_FORM_CHILD = '.dropdown form';
|
4204 |
+
var SELECTOR_MENU = '.dropdown-menu';
|
4205 |
+
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
4206 |
+
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
4207 |
+
var PLACEMENT_TOP = 'top-start';
|
4208 |
+
var PLACEMENT_TOPEND = 'top-end';
|
4209 |
+
var PLACEMENT_BOTTOM = 'bottom-start';
|
4210 |
+
var PLACEMENT_BOTTOMEND = 'bottom-end';
|
4211 |
+
var PLACEMENT_RIGHT = 'right-start';
|
4212 |
+
var PLACEMENT_LEFT = 'left-start';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4213 |
var Default$2 = {
|
4214 |
offset: 0,
|
4215 |
flip: true,
|
4232 |
* ------------------------------------------------------------------------
|
4233 |
*/
|
4234 |
|
4235 |
+
var Dropdown = /*#__PURE__*/function () {
|
|
|
|
|
4236 |
function Dropdown(element, config) {
|
4237 |
this._element = element;
|
4238 |
this._popper = null;
|
4248 |
|
4249 |
// Public
|
4250 |
_proto.toggle = function toggle() {
|
4251 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
|
4252 |
return;
|
4253 |
}
|
4254 |
|
4255 |
+
var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW$2);
|
4256 |
|
4257 |
Dropdown._clearMenus();
|
4258 |
|
4268 |
usePopper = false;
|
4269 |
}
|
4270 |
|
4271 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
|
4272 |
return;
|
4273 |
}
|
4274 |
|
4275 |
var relatedTarget = {
|
4276 |
relatedTarget: this._element
|
4277 |
};
|
4278 |
+
var showEvent = $.Event(EVENT_SHOW$1, relatedTarget);
|
4279 |
|
4280 |
var parent = Dropdown._getParentFromElement(this._element);
|
4281 |
|
4311 |
|
4312 |
|
4313 |
if (this._config.boundary !== 'scrollParent') {
|
4314 |
+
$(parent).addClass(CLASS_NAME_POSITION_STATIC);
|
4315 |
}
|
4316 |
|
4317 |
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
4321 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
4322 |
|
4323 |
|
4324 |
+
if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
|
4325 |
$(document.body).children().on('mouseover', null, $.noop);
|
4326 |
}
|
4327 |
|
4329 |
|
4330 |
this._element.setAttribute('aria-expanded', true);
|
4331 |
|
4332 |
+
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
|
4333 |
+
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget));
|
4334 |
};
|
4335 |
|
4336 |
_proto.hide = function hide() {
|
4337 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
|
4338 |
return;
|
4339 |
}
|
4340 |
|
4341 |
var relatedTarget = {
|
4342 |
relatedTarget: this._element
|
4343 |
};
|
4344 |
+
var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
|
4345 |
|
4346 |
var parent = Dropdown._getParentFromElement(this._element);
|
4347 |
|
4355 |
this._popper.destroy();
|
4356 |
}
|
4357 |
|
4358 |
+
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
|
4359 |
+
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
|
4360 |
};
|
4361 |
|
4362 |
_proto.dispose = function dispose() {
|
4384 |
_proto._addEventListeners = function _addEventListeners() {
|
4385 |
var _this = this;
|
4386 |
|
4387 |
+
$(this._element).on(EVENT_CLICK, function (event) {
|
4388 |
event.preventDefault();
|
4389 |
event.stopPropagation();
|
4390 |
|
4393 |
};
|
4394 |
|
4395 |
_proto._getConfig = function _getConfig(config) {
|
4396 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config);
|
4397 |
Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
4398 |
return config;
|
4399 |
};
|
4403 |
var parent = Dropdown._getParentFromElement(this._element);
|
4404 |
|
4405 |
if (parent) {
|
4406 |
+
this._menu = parent.querySelector(SELECTOR_MENU);
|
4407 |
}
|
4408 |
}
|
4409 |
|
4412 |
|
4413 |
_proto._getPlacement = function _getPlacement() {
|
4414 |
var $parentDropdown = $(this._element.parentNode);
|
4415 |
+
var placement = PLACEMENT_BOTTOM; // Handle dropup
|
|
|
|
|
|
|
4416 |
|
4417 |
+
if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
|
4418 |
+
placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
|
4419 |
+
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
|
4420 |
+
placement = PLACEMENT_RIGHT;
|
4421 |
+
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
|
4422 |
+
placement = PLACEMENT_LEFT;
|
4423 |
+
} else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
|
4424 |
+
placement = PLACEMENT_BOTTOMEND;
|
|
|
4425 |
}
|
4426 |
|
4427 |
return placement;
|
4438 |
|
4439 |
if (typeof this._config.offset === 'function') {
|
4440 |
offset.fn = function (data) {
|
4441 |
+
data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
|
4442 |
return data;
|
4443 |
};
|
4444 |
} else {
|
4468 |
};
|
4469 |
}
|
4470 |
|
4471 |
+
return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
|
4472 |
} // Static
|
4473 |
;
|
4474 |
|
4498 |
return;
|
4499 |
}
|
4500 |
|
4501 |
+
var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
|
4502 |
|
4503 |
for (var i = 0, len = toggles.length; i < len; i++) {
|
4504 |
var parent = Dropdown._getParentFromElement(toggles[i]);
|
4518 |
|
4519 |
var dropdownMenu = context._menu;
|
4520 |
|
4521 |
+
if (!$(parent).hasClass(CLASS_NAME_SHOW$2)) {
|
4522 |
continue;
|
4523 |
}
|
4524 |
|
4526 |
continue;
|
4527 |
}
|
4528 |
|
4529 |
+
var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
|
4530 |
$(parent).trigger(hideEvent);
|
4531 |
|
4532 |
if (hideEvent.isDefaultPrevented()) {
|
4545 |
context._popper.destroy();
|
4546 |
}
|
4547 |
|
4548 |
+
$(dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
|
4549 |
+
$(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
|
4550 |
}
|
4551 |
};
|
4552 |
|
4570 |
// - If key is other than escape
|
4571 |
// - If key is not up or down => not a dropdown command
|
4572 |
// - If trigger inside the menu => not a dropdown command
|
4573 |
+
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
|
4574 |
return;
|
4575 |
}
|
4576 |
|
4577 |
+
if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {
|
|
|
|
|
|
|
4578 |
return;
|
4579 |
}
|
4580 |
|
4581 |
var parent = Dropdown._getParentFromElement(this);
|
4582 |
|
4583 |
+
var isActive = $(parent).hasClass(CLASS_NAME_SHOW$2);
|
4584 |
|
4585 |
if (!isActive && event.which === ESCAPE_KEYCODE) {
|
4586 |
return;
|
4587 |
}
|
4588 |
|
4589 |
+
event.preventDefault();
|
4590 |
+
event.stopPropagation();
|
4591 |
+
|
4592 |
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
4593 |
if (event.which === ESCAPE_KEYCODE) {
|
4594 |
+
$(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
|
|
|
4595 |
}
|
4596 |
|
4597 |
$(this).trigger('click');
|
4598 |
return;
|
4599 |
}
|
4600 |
|
4601 |
+
var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
|
4602 |
return $(item).is(':visible');
|
4603 |
});
|
4604 |
|
4651 |
*/
|
4652 |
|
4653 |
|
4654 |
+
$(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
|
4655 |
event.preventDefault();
|
4656 |
event.stopPropagation();
|
4657 |
|
4658 |
Dropdown._jQueryInterface.call($(this), 'toggle');
|
4659 |
+
}).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
|
4660 |
e.stopPropagation();
|
4661 |
});
|
4662 |
/**
|
4680 |
*/
|
4681 |
|
4682 |
var NAME$5 = 'modal';
|
4683 |
+
var VERSION$5 = '4.5.0';
|
4684 |
var DATA_KEY$5 = 'bs.modal';
|
4685 |
var EVENT_KEY$5 = "." + DATA_KEY$5;
|
4686 |
var DATA_API_KEY$5 = '.data-api';
|
4699 |
focus: 'boolean',
|
4700 |
show: 'boolean'
|
4701 |
};
|
4702 |
+
var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
|
4703 |
+
var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
|
4704 |
+
var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
|
4705 |
+
var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
|
4706 |
+
var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
|
4707 |
+
var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
|
4708 |
+
var EVENT_RESIZE = "resize" + EVENT_KEY$5;
|
4709 |
+
var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
|
4710 |
+
var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
|
4711 |
+
var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
|
4712 |
+
var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
|
4713 |
+
var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
|
4714 |
+
var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
|
4715 |
+
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
|
4716 |
+
var CLASS_NAME_BACKDROP = 'modal-backdrop';
|
4717 |
+
var CLASS_NAME_OPEN = 'modal-open';
|
4718 |
+
var CLASS_NAME_FADE$1 = 'fade';
|
4719 |
+
var CLASS_NAME_SHOW$3 = 'show';
|
4720 |
+
var CLASS_NAME_STATIC = 'modal-static';
|
4721 |
+
var SELECTOR_DIALOG = '.modal-dialog';
|
4722 |
+
var SELECTOR_MODAL_BODY = '.modal-body';
|
4723 |
+
var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
|
4724 |
+
var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
|
4725 |
+
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
4726 |
+
var SELECTOR_STICKY_CONTENT = '.sticky-top';
|
|
|
|
|
|
|
|
|
|
|
|
|
4727 |
/**
|
4728 |
* ------------------------------------------------------------------------
|
4729 |
* Class Definition
|
4730 |
* ------------------------------------------------------------------------
|
4731 |
*/
|
4732 |
|
4733 |
+
var Modal = /*#__PURE__*/function () {
|
|
|
|
|
4734 |
function Modal(element, config) {
|
4735 |
this._config = this._getConfig(config);
|
4736 |
this._element = element;
|
4737 |
+
this._dialog = element.querySelector(SELECTOR_DIALOG);
|
4738 |
this._backdrop = null;
|
4739 |
this._isShown = false;
|
4740 |
this._isBodyOverflowing = false;
|
4758 |
return;
|
4759 |
}
|
4760 |
|
4761 |
+
if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
|
4762 |
this._isTransitioning = true;
|
4763 |
}
|
4764 |
|
4765 |
+
var showEvent = $.Event(EVENT_SHOW$2, {
|
4766 |
relatedTarget: relatedTarget
|
4767 |
});
|
4768 |
$(this._element).trigger(showEvent);
|
4783 |
|
4784 |
this._setResizeEvent();
|
4785 |
|
4786 |
+
$(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
|
4787 |
return _this.hide(event);
|
4788 |
});
|
4789 |
+
$(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
|
4790 |
+
$(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
|
4791 |
if ($(event.target).is(_this._element)) {
|
4792 |
_this._ignoreBackdropClick = true;
|
4793 |
}
|
4810 |
return;
|
4811 |
}
|
4812 |
|
4813 |
+
var hideEvent = $.Event(EVENT_HIDE$2);
|
4814 |
$(this._element).trigger(hideEvent);
|
4815 |
|
4816 |
if (!this._isShown || hideEvent.isDefaultPrevented()) {
|
4818 |
}
|
4819 |
|
4820 |
this._isShown = false;
|
4821 |
+
var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
|
4822 |
|
4823 |
if (transition) {
|
4824 |
this._isTransitioning = true;
|
4828 |
|
4829 |
this._setResizeEvent();
|
4830 |
|
4831 |
+
$(document).off(EVENT_FOCUSIN);
|
4832 |
+
$(this._element).removeClass(CLASS_NAME_SHOW$3);
|
4833 |
+
$(this._element).off(EVENT_CLICK_DISMISS);
|
4834 |
+
$(this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
|
4835 |
|
4836 |
if (transition) {
|
4837 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
4848 |
return $(htmlElement).off(EVENT_KEY$5);
|
4849 |
});
|
4850 |
/**
|
4851 |
+
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
|
4852 |
* Do not move `document` in `htmlElements` array
|
4853 |
+
* It will remove `EVENT_CLICK_DATA_API` event that should remain
|
4854 |
*/
|
4855 |
|
4856 |
+
$(document).off(EVENT_FOCUSIN);
|
4857 |
$.removeData(this._element, DATA_KEY$5);
|
4858 |
this._config = null;
|
4859 |
this._element = null;
|
4872 |
;
|
4873 |
|
4874 |
_proto._getConfig = function _getConfig(config) {
|
4875 |
+
config = _objectSpread2(_objectSpread2({}, Default$3), config);
|
4876 |
Util.typeCheckConfig(NAME$5, config, DefaultType$3);
|
4877 |
return config;
|
4878 |
};
|
4881 |
var _this3 = this;
|
4882 |
|
4883 |
if (this._config.backdrop === 'static') {
|
4884 |
+
var hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED);
|
4885 |
$(this._element).trigger(hideEventPrevented);
|
4886 |
|
4887 |
if (hideEventPrevented.defaultPrevented) {
|
4888 |
return;
|
4889 |
}
|
4890 |
|
4891 |
+
this._element.classList.add(CLASS_NAME_STATIC);
|
4892 |
|
4893 |
var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
|
4894 |
$(this._element).one(Util.TRANSITION_END, function () {
|
4895 |
+
_this3._element.classList.remove(CLASS_NAME_STATIC);
|
4896 |
}).emulateTransitionEnd(modalTransitionDuration);
|
4897 |
|
4898 |
this._element.focus();
|
4904 |
_proto._showElement = function _showElement(relatedTarget) {
|
4905 |
var _this4 = this;
|
4906 |
|
4907 |
+
var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
|
4908 |
+
var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
|
4909 |
|
4910 |
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
4911 |
// Don't move modal's DOM position
|
4918 |
|
4919 |
this._element.setAttribute('aria-modal', true);
|
4920 |
|
4921 |
+
if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
|
4922 |
modalBody.scrollTop = 0;
|
4923 |
} else {
|
4924 |
this._element.scrollTop = 0;
|
4928 |
Util.reflow(this._element);
|
4929 |
}
|
4930 |
|
4931 |
+
$(this._element).addClass(CLASS_NAME_SHOW$3);
|
4932 |
|
4933 |
if (this._config.focus) {
|
4934 |
this._enforceFocus();
|
4935 |
}
|
4936 |
|
4937 |
+
var shownEvent = $.Event(EVENT_SHOWN$2, {
|
4938 |
relatedTarget: relatedTarget
|
4939 |
});
|
4940 |
|
4958 |
_proto._enforceFocus = function _enforceFocus() {
|
4959 |
var _this5 = this;
|
4960 |
|
4961 |
+
$(document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
|
4962 |
+
.on(EVENT_FOCUSIN, function (event) {
|
4963 |
if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
|
4964 |
_this5._element.focus();
|
4965 |
}
|
4969 |
_proto._setEscapeEvent = function _setEscapeEvent() {
|
4970 |
var _this6 = this;
|
4971 |
|
4972 |
+
if (this._isShown) {
|
4973 |
+
$(this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
|
4974 |
+
if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
|
4975 |
+
event.preventDefault();
|
4976 |
+
|
4977 |
+
_this6.hide();
|
4978 |
+
} else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
|
4979 |
_this6._triggerBackdropTransition();
|
4980 |
}
|
4981 |
});
|
4982 |
} else if (!this._isShown) {
|
4983 |
+
$(this._element).off(EVENT_KEYDOWN_DISMISS);
|
4984 |
}
|
4985 |
};
|
4986 |
|
4988 |
var _this7 = this;
|
4989 |
|
4990 |
if (this._isShown) {
|
4991 |
+
$(window).on(EVENT_RESIZE, function (event) {
|
4992 |
return _this7.handleUpdate(event);
|
4993 |
});
|
4994 |
} else {
|
4995 |
+
$(window).off(EVENT_RESIZE);
|
4996 |
}
|
4997 |
};
|
4998 |
|
5008 |
this._isTransitioning = false;
|
5009 |
|
5010 |
this._showBackdrop(function () {
|
5011 |
+
$(document.body).removeClass(CLASS_NAME_OPEN);
|
5012 |
|
5013 |
_this8._resetAdjustments();
|
5014 |
|
5015 |
_this8._resetScrollbar();
|
5016 |
|
5017 |
+
$(_this8._element).trigger(EVENT_HIDDEN$2);
|
5018 |
});
|
5019 |
};
|
5020 |
|
5028 |
_proto._showBackdrop = function _showBackdrop(callback) {
|
5029 |
var _this9 = this;
|
5030 |
|
5031 |
+
var animate = $(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';
|
5032 |
|
5033 |
if (this._isShown && this._config.backdrop) {
|
5034 |
this._backdrop = document.createElement('div');
|
5035 |
+
this._backdrop.className = CLASS_NAME_BACKDROP;
|
5036 |
|
5037 |
if (animate) {
|
5038 |
this._backdrop.classList.add(animate);
|
5039 |
}
|
5040 |
|
5041 |
$(this._backdrop).appendTo(document.body);
|
5042 |
+
$(this._element).on(EVENT_CLICK_DISMISS, function (event) {
|
5043 |
if (_this9._ignoreBackdropClick) {
|
5044 |
_this9._ignoreBackdropClick = false;
|
5045 |
return;
|
5056 |
Util.reflow(this._backdrop);
|
5057 |
}
|
5058 |
|
5059 |
+
$(this._backdrop).addClass(CLASS_NAME_SHOW$3);
|
5060 |
|
5061 |
if (!callback) {
|
5062 |
return;
|
5070 |
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
5071 |
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
|
5072 |
} else if (!this._isShown && this._backdrop) {
|
5073 |
+
$(this._backdrop).removeClass(CLASS_NAME_SHOW$3);
|
5074 |
|
5075 |
var callbackRemove = function callbackRemove() {
|
5076 |
_this9._removeBackdrop();
|
5080 |
}
|
5081 |
};
|
5082 |
|
5083 |
+
if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
|
5084 |
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
5085 |
|
5086 |
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
|
5115 |
|
5116 |
_proto._checkScrollbar = function _checkScrollbar() {
|
5117 |
var rect = document.body.getBoundingClientRect();
|
5118 |
+
this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
|
5119 |
this._scrollbarWidth = this._getScrollbarWidth();
|
5120 |
};
|
5121 |
|
5125 |
if (this._isBodyOverflowing) {
|
5126 |
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
5127 |
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
5128 |
+
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
|
5129 |
+
var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
|
5130 |
|
5131 |
$(fixedContent).each(function (index, element) {
|
5132 |
var actualPadding = element.style.paddingRight;
|
5145 |
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
|
5146 |
}
|
5147 |
|
5148 |
+
$(document.body).addClass(CLASS_NAME_OPEN);
|
5149 |
};
|
5150 |
|
5151 |
_proto._resetScrollbar = function _resetScrollbar() {
|
5152 |
// Restore fixed content padding
|
5153 |
+
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
|
5154 |
$(fixedContent).each(function (index, element) {
|
5155 |
var padding = $(element).data('padding-right');
|
5156 |
$(element).removeData('padding-right');
|
5157 |
element.style.paddingRight = padding ? padding : '';
|
5158 |
}); // Restore sticky content
|
5159 |
|
5160 |
+
var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
|
5161 |
$(elements).each(function (index, element) {
|
5162 |
var margin = $(element).data('margin-right');
|
5163 |
|
5174 |
_proto._getScrollbarWidth = function _getScrollbarWidth() {
|
5175 |
// thx d.walsh
|
5176 |
var scrollDiv = document.createElement('div');
|
5177 |
+
scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
|
5178 |
document.body.appendChild(scrollDiv);
|
5179 |
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
5180 |
document.body.removeChild(scrollDiv);
|
5186 |
return this.each(function () {
|
5187 |
var data = $(this).data(DATA_KEY$5);
|
5188 |
|
5189 |
+
var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config === 'object' && config ? config : {});
|
5190 |
|
5191 |
if (!data) {
|
5192 |
data = new Modal(this, _config);
|
5226 |
*/
|
5227 |
|
5228 |
|
5229 |
+
$(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {
|
5230 |
var _this11 = this;
|
5231 |
|
5232 |
var target;
|
5236 |
target = document.querySelector(selector);
|
5237 |
}
|
5238 |
|
5239 |
+
var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
|
5240 |
|
5241 |
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
5242 |
event.preventDefault();
|
5243 |
}
|
5244 |
|
5245 |
+
var $target = $(target).one(EVENT_SHOW$2, function (showEvent) {
|
5246 |
if (showEvent.isDefaultPrevented()) {
|
5247 |
// Only register focus restorer if modal will actually get shown
|
5248 |
return;
|
5249 |
}
|
5250 |
|
5251 |
+
$target.one(EVENT_HIDDEN$2, function () {
|
5252 |
if ($(_this11).is(':visible')) {
|
5253 |
_this11.focus();
|
5254 |
}
|
5273 |
|
5274 |
/**
|
5275 |
* --------------------------------------------------------------------------
|
5276 |
+
* Bootstrap (v4.5.0): tools/sanitizer.js
|
5277 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5278 |
* --------------------------------------------------------------------------
|
5279 |
*/
|
5298 |
h5: [],
|
5299 |
h6: [],
|
5300 |
i: [],
|
5301 |
+
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
|
5302 |
li: [],
|
5303 |
ol: [],
|
5304 |
p: [],
|
5318 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
5319 |
*/
|
5320 |
|
5321 |
+
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
|
5322 |
/**
|
5323 |
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
5324 |
*
|
5325 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
5326 |
*/
|
5327 |
|
5328 |
+
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
|
5329 |
|
5330 |
function allowedAttribute(attr, allowedAttributeList) {
|
5331 |
var attrName = attr.nodeName.toLowerCase();
|
5342 |
return attrRegex instanceof RegExp;
|
5343 |
}); // Check if a regular expression validates the attribute.
|
5344 |
|
5345 |
+
for (var i = 0, len = regExp.length; i < len; i++) {
|
5346 |
if (attrName.match(regExp[i])) {
|
5347 |
return true;
|
5348 |
}
|
5399 |
*/
|
5400 |
|
5401 |
var NAME$6 = 'tooltip';
|
5402 |
+
var VERSION$6 = '4.5.0';
|
5403 |
var DATA_KEY$6 = 'bs.tooltip';
|
5404 |
var EVENT_KEY$6 = "." + DATA_KEY$6;
|
5405 |
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
|
5424 |
whiteList: 'object',
|
5425 |
popperConfig: '(null|object)'
|
5426 |
};
|
5427 |
+
var AttachmentMap = {
|
5428 |
AUTO: 'auto',
|
5429 |
TOP: 'top',
|
5430 |
RIGHT: 'right',
|
5449 |
whiteList: DefaultWhitelist,
|
5450 |
popperConfig: null
|
5451 |
};
|
5452 |
+
var HOVER_STATE_SHOW = 'show';
|
5453 |
+
var HOVER_STATE_OUT = 'out';
|
5454 |
+
var Event = {
|
|
|
|
|
5455 |
HIDE: "hide" + EVENT_KEY$6,
|
5456 |
HIDDEN: "hidden" + EVENT_KEY$6,
|
5457 |
SHOW: "show" + EVENT_KEY$6,
|
5463 |
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
|
5464 |
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
|
5465 |
};
|
5466 |
+
var CLASS_NAME_FADE$2 = 'fade';
|
5467 |
+
var CLASS_NAME_SHOW$4 = 'show';
|
5468 |
+
var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
5469 |
+
var SELECTOR_ARROW = '.arrow';
|
5470 |
+
var TRIGGER_HOVER = 'hover';
|
5471 |
+
var TRIGGER_FOCUS = 'focus';
|
5472 |
+
var TRIGGER_CLICK = 'click';
|
5473 |
+
var TRIGGER_MANUAL = 'manual';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5474 |
/**
|
5475 |
* ------------------------------------------------------------------------
|
5476 |
* Class Definition
|
5477 |
* ------------------------------------------------------------------------
|
5478 |
*/
|
5479 |
|
5480 |
+
var Tooltip = /*#__PURE__*/function () {
|
|
|
|
|
5481 |
function Tooltip(element, config) {
|
5482 |
if (typeof Popper === 'undefined') {
|
5483 |
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
|
5535 |
context._leave(null, context);
|
5536 |
}
|
5537 |
} else {
|
5538 |
+
if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {
|
5539 |
this._leave(null, this);
|
5540 |
|
5541 |
return;
|
5595 |
this.setContent();
|
5596 |
|
5597 |
if (this.config.animation) {
|
5598 |
+
$(tip).addClass(CLASS_NAME_FADE$2);
|
5599 |
}
|
5600 |
|
5601 |
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
|
5614 |
|
5615 |
$(this.element).trigger(this.constructor.Event.INSERTED);
|
5616 |
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
|
5617 |
+
$(tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra
|
5618 |
// empty mouseover listeners to the body's immediate children;
|
5619 |
// only needed because of broken event delegation on iOS
|
5620 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
5632 |
_this._hoverState = null;
|
5633 |
$(_this.element).trigger(_this.constructor.Event.SHOWN);
|
5634 |
|
5635 |
+
if (prevHoverState === HOVER_STATE_OUT) {
|
5636 |
_this._leave(null, _this);
|
5637 |
}
|
5638 |
};
|
5639 |
|
5640 |
+
if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
|
5641 |
var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
|
5642 |
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
5643 |
} else {
|
5653 |
var hideEvent = $.Event(this.constructor.Event.HIDE);
|
5654 |
|
5655 |
var complete = function complete() {
|
5656 |
+
if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
|
5657 |
tip.parentNode.removeChild(tip);
|
5658 |
}
|
5659 |
|
5678 |
return;
|
5679 |
}
|
5680 |
|
5681 |
+
$(tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
|
5682 |
// empty mouseover listeners we added for iOS support
|
5683 |
|
5684 |
if ('ontouchstart' in document.documentElement) {
|
5685 |
$(document.body).children().off('mouseover', null, $.noop);
|
5686 |
}
|
5687 |
|
5688 |
+
this._activeTrigger[TRIGGER_CLICK] = false;
|
5689 |
+
this._activeTrigger[TRIGGER_FOCUS] = false;
|
5690 |
+
this._activeTrigger[TRIGGER_HOVER] = false;
|
5691 |
|
5692 |
+
if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
|
5693 |
var transitionDuration = Util.getTransitionDurationFromElement(tip);
|
5694 |
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
5695 |
} else {
|
5721 |
|
5722 |
_proto.setContent = function setContent() {
|
5723 |
var tip = this.getTipElement();
|
5724 |
+
this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
|
5725 |
+
$(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
|
5726 |
};
|
5727 |
|
5728 |
_proto.setElementContent = function setElementContent($element, content) {
|
5772 |
behavior: this.config.fallbackPlacement
|
5773 |
},
|
5774 |
arrow: {
|
5775 |
+
element: SELECTOR_ARROW
|
5776 |
},
|
5777 |
preventOverflow: {
|
5778 |
boundariesElement: this.config.boundary
|
5787 |
return _this3._handlePopperPlacementChange(data);
|
5788 |
}
|
5789 |
};
|
5790 |
+
return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
|
5791 |
};
|
5792 |
|
5793 |
_proto._getOffset = function _getOffset() {
|
5797 |
|
5798 |
if (typeof this.config.offset === 'function') {
|
5799 |
offset.fn = function (data) {
|
5800 |
+
data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {});
|
5801 |
return data;
|
5802 |
};
|
5803 |
} else {
|
5820 |
};
|
5821 |
|
5822 |
_proto._getAttachment = function _getAttachment(placement) {
|
5823 |
+
return AttachmentMap[placement.toUpperCase()];
|
5824 |
};
|
5825 |
|
5826 |
_proto._setListeners = function _setListeners() {
|
5832 |
$(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
|
5833 |
return _this5.toggle(event);
|
5834 |
});
|
5835 |
+
} else if (trigger !== TRIGGER_MANUAL) {
|
5836 |
+
var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
|
5837 |
+
var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
|
5838 |
$(_this5.element).on(eventIn, _this5.config.selector, function (event) {
|
5839 |
return _this5._enter(event);
|
5840 |
}).on(eventOut, _this5.config.selector, function (event) {
|
5852 |
$(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
|
5853 |
|
5854 |
if (this.config.selector) {
|
5855 |
+
this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
|
5856 |
trigger: 'manual',
|
5857 |
selector: ''
|
5858 |
});
|
5880 |
}
|
5881 |
|
5882 |
if (event) {
|
5883 |
+
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
5884 |
}
|
5885 |
|
5886 |
+
if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
|
5887 |
+
context._hoverState = HOVER_STATE_SHOW;
|
5888 |
return;
|
5889 |
}
|
5890 |
|
5891 |
clearTimeout(context._timeout);
|
5892 |
+
context._hoverState = HOVER_STATE_SHOW;
|
5893 |
|
5894 |
if (!context.config.delay || !context.config.delay.show) {
|
5895 |
context.show();
|
5897 |
}
|
5898 |
|
5899 |
context._timeout = setTimeout(function () {
|
5900 |
+
if (context._hoverState === HOVER_STATE_SHOW) {
|
5901 |
context.show();
|
5902 |
}
|
5903 |
}, context.config.delay.show);
|
5913 |
}
|
5914 |
|
5915 |
if (event) {
|
5916 |
+
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
|
5917 |
}
|
5918 |
|
5919 |
if (context._isWithActiveTrigger()) {
|
5921 |
}
|
5922 |
|
5923 |
clearTimeout(context._timeout);
|
5924 |
+
context._hoverState = HOVER_STATE_OUT;
|
5925 |
|
5926 |
if (!context.config.delay || !context.config.delay.hide) {
|
5927 |
context.hide();
|
5929 |
}
|
5930 |
|
5931 |
context._timeout = setTimeout(function () {
|
5932 |
+
if (context._hoverState === HOVER_STATE_OUT) {
|
5933 |
context.hide();
|
5934 |
}
|
5935 |
}, context.config.delay.hide);
|
5952 |
delete dataAttributes[dataAttr];
|
5953 |
}
|
5954 |
});
|
5955 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {});
|
5956 |
|
5957 |
if (typeof config.delay === 'number') {
|
5958 |
config.delay = {
|
6002 |
};
|
6003 |
|
6004 |
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
|
6005 |
+
this.tip = popperData.instance.popper;
|
|
|
6006 |
|
6007 |
this._cleanTipClass();
|
6008 |
|
6017 |
return;
|
6018 |
}
|
6019 |
|
6020 |
+
$(tip).removeClass(CLASS_NAME_FADE$2);
|
6021 |
this.config.animation = false;
|
6022 |
this.hide();
|
6023 |
this.show();
|
6073 |
}, {
|
6074 |
key: "Event",
|
6075 |
get: function get() {
|
6076 |
+
return Event;
|
6077 |
}
|
6078 |
}, {
|
6079 |
key: "EVENT_KEY",
|
6111 |
*/
|
6112 |
|
6113 |
var NAME$7 = 'popover';
|
6114 |
+
var VERSION$7 = '4.5.0';
|
6115 |
var DATA_KEY$7 = 'bs.popover';
|
6116 |
var EVENT_KEY$7 = "." + DATA_KEY$7;
|
6117 |
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
|
6118 |
var CLASS_PREFIX$1 = 'bs-popover';
|
6119 |
var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
|
6120 |
|
6121 |
+
var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
|
6122 |
placement: 'right',
|
6123 |
trigger: 'click',
|
6124 |
content: '',
|
6125 |
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
6126 |
});
|
6127 |
|
6128 |
+
var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
|
6129 |
content: '(string|element|function)'
|
6130 |
});
|
6131 |
|
6132 |
+
var CLASS_NAME_FADE$3 = 'fade';
|
6133 |
+
var CLASS_NAME_SHOW$5 = 'show';
|
6134 |
+
var SELECTOR_TITLE = '.popover-header';
|
6135 |
+
var SELECTOR_CONTENT = '.popover-body';
|
6136 |
+
var Event$1 = {
|
|
|
|
|
|
|
|
|
6137 |
HIDE: "hide" + EVENT_KEY$7,
|
6138 |
HIDDEN: "hidden" + EVENT_KEY$7,
|
6139 |
SHOW: "show" + EVENT_KEY$7,
|
6151 |
* ------------------------------------------------------------------------
|
6152 |
*/
|
6153 |
|
6154 |
+
var Popover = /*#__PURE__*/function (_Tooltip) {
|
|
|
|
|
6155 |
_inheritsLoose(Popover, _Tooltip);
|
6156 |
|
6157 |
function Popover() {
|
6177 |
_proto.setContent = function setContent() {
|
6178 |
var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
|
6179 |
|
6180 |
+
this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
|
6181 |
|
6182 |
var content = this._getContent();
|
6183 |
|
6185 |
content = content.call(this.element);
|
6186 |
}
|
6187 |
|
6188 |
+
this.setElementContent($tip.find(SELECTOR_CONTENT), content);
|
6189 |
+
$tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
|
6190 |
} // Private
|
6191 |
;
|
6192 |
|
6253 |
}, {
|
6254 |
key: "Event",
|
6255 |
get: function get() {
|
6256 |
+
return Event$1;
|
6257 |
}
|
6258 |
}, {
|
6259 |
key: "EVENT_KEY",
|
6291 |
*/
|
6292 |
|
6293 |
var NAME$8 = 'scrollspy';
|
6294 |
+
var VERSION$8 = '4.5.0';
|
6295 |
var DATA_KEY$8 = 'bs.scrollspy';
|
6296 |
var EVENT_KEY$8 = "." + DATA_KEY$8;
|
6297 |
var DATA_API_KEY$6 = '.data-api';
|
6306 |
method: 'string',
|
6307 |
target: '(string|element)'
|
6308 |
};
|
6309 |
+
var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
|
6310 |
+
var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
|
6311 |
+
var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
|
6312 |
+
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
6313 |
+
var CLASS_NAME_ACTIVE$2 = 'active';
|
6314 |
+
var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
|
6315 |
+
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
6316 |
+
var SELECTOR_NAV_LINKS = '.nav-link';
|
6317 |
+
var SELECTOR_NAV_ITEMS = '.nav-item';
|
6318 |
+
var SELECTOR_LIST_ITEMS = '.list-group-item';
|
6319 |
+
var SELECTOR_DROPDOWN = '.dropdown';
|
6320 |
+
var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
|
6321 |
+
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
6322 |
+
var METHOD_OFFSET = 'offset';
|
6323 |
+
var METHOD_POSITION = 'position';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6324 |
/**
|
6325 |
* ------------------------------------------------------------------------
|
6326 |
* Class Definition
|
6327 |
* ------------------------------------------------------------------------
|
6328 |
*/
|
6329 |
|
6330 |
+
var ScrollSpy = /*#__PURE__*/function () {
|
|
|
|
|
6331 |
function ScrollSpy(element, config) {
|
6332 |
var _this = this;
|
6333 |
|
6334 |
this._element = element;
|
6335 |
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
6336 |
this._config = this._getConfig(config);
|
6337 |
+
this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
|
6338 |
this._offsets = [];
|
6339 |
this._targets = [];
|
6340 |
this._activeTarget = null;
|
6341 |
this._scrollHeight = 0;
|
6342 |
+
$(this._scrollElement).on(EVENT_SCROLL, function (event) {
|
6343 |
return _this._process(event);
|
6344 |
});
|
6345 |
this.refresh();
|
6354 |
_proto.refresh = function refresh() {
|
6355 |
var _this2 = this;
|
6356 |
|
6357 |
+
var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
|
6358 |
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
6359 |
+
var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
6360 |
this._offsets = [];
|
6361 |
this._targets = [];
|
6362 |
this._scrollHeight = this._getScrollHeight();
|
6405 |
;
|
6406 |
|
6407 |
_proto._getConfig = function _getConfig(config) {
|
6408 |
+
config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {});
|
6409 |
|
6410 |
+
if (typeof config.target !== 'string' && Util.isElement(config.target)) {
|
6411 |
var id = $(config.target).attr('id');
|
6412 |
|
6413 |
if (!id) {
|
6463 |
return;
|
6464 |
}
|
6465 |
|
6466 |
+
for (var i = this._offsets.length; i--;) {
|
|
|
|
|
6467 |
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
6468 |
|
6469 |
if (isActiveTarget) {
|
6483 |
|
6484 |
var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
|
6485 |
|
6486 |
+
if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
|
6487 |
+
$link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
|
6488 |
+
$link.addClass(CLASS_NAME_ACTIVE$2);
|
6489 |
} else {
|
6490 |
// Set triggered link as active
|
6491 |
+
$link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active
|
6492 |
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
6493 |
|
6494 |
+
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item
|
6495 |
|
6496 |
+
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
|
6497 |
}
|
6498 |
|
6499 |
+
$(this._scrollElement).trigger(EVENT_ACTIVATE, {
|
6500 |
relatedTarget: target
|
6501 |
});
|
6502 |
};
|
6503 |
|
6504 |
_proto._clear = function _clear() {
|
6505 |
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
|
6506 |
+
return node.classList.contains(CLASS_NAME_ACTIVE$2);
|
6507 |
}).forEach(function (node) {
|
6508 |
+
return node.classList.remove(CLASS_NAME_ACTIVE$2);
|
6509 |
});
|
6510 |
} // Static
|
6511 |
;
|
6552 |
*/
|
6553 |
|
6554 |
|
6555 |
+
$(window).on(EVENT_LOAD_DATA_API$2, function () {
|
6556 |
+
var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
|
6557 |
var scrollSpysLength = scrollSpys.length;
|
6558 |
|
6559 |
for (var i = scrollSpysLength; i--;) {
|
6583 |
*/
|
6584 |
|
6585 |
var NAME$9 = 'tab';
|
6586 |
+
var VERSION$9 = '4.5.0';
|
6587 |
var DATA_KEY$9 = 'bs.tab';
|
6588 |
var EVENT_KEY$9 = "." + DATA_KEY$9;
|
6589 |
var DATA_API_KEY$7 = '.data-api';
|
6590 |
var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
|
6591 |
+
var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
|
6592 |
+
var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
|
6593 |
+
var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
|
6594 |
+
var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
|
6595 |
+
var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
|
6596 |
+
var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
6597 |
+
var CLASS_NAME_ACTIVE$3 = 'active';
|
6598 |
+
var CLASS_NAME_DISABLED$1 = 'disabled';
|
6599 |
+
var CLASS_NAME_FADE$4 = 'fade';
|
6600 |
+
var CLASS_NAME_SHOW$6 = 'show';
|
6601 |
+
var SELECTOR_DROPDOWN$1 = '.dropdown';
|
6602 |
+
var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
|
6603 |
+
var SELECTOR_ACTIVE$2 = '.active';
|
6604 |
+
var SELECTOR_ACTIVE_UL = '> li > .active';
|
6605 |
+
var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
|
6606 |
+
var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
|
6607 |
+
var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
|
|
|
|
|
|
|
|
|
|
|
|
|
6608 |
/**
|
6609 |
* ------------------------------------------------------------------------
|
6610 |
* Class Definition
|
6611 |
* ------------------------------------------------------------------------
|
6612 |
*/
|
6613 |
|
6614 |
+
var Tab = /*#__PURE__*/function () {
|
|
|
|
|
6615 |
function Tab(element) {
|
6616 |
this._element = element;
|
6617 |
} // Getters
|
6623 |
_proto.show = function show() {
|
6624 |
var _this = this;
|
6625 |
|
6626 |
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE$3) || $(this._element).hasClass(CLASS_NAME_DISABLED$1)) {
|
6627 |
return;
|
6628 |
}
|
6629 |
|
6630 |
var target;
|
6631 |
var previous;
|
6632 |
+
var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
|
6633 |
var selector = Util.getSelectorFromElement(this._element);
|
6634 |
|
6635 |
if (listElement) {
|
6636 |
+
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;
|
6637 |
previous = $.makeArray($(listElement).find(itemSelector));
|
6638 |
previous = previous[previous.length - 1];
|
6639 |
}
|
6640 |
|
6641 |
+
var hideEvent = $.Event(EVENT_HIDE$3, {
|
6642 |
relatedTarget: this._element
|
6643 |
});
|
6644 |
+
var showEvent = $.Event(EVENT_SHOW$3, {
|
6645 |
relatedTarget: previous
|
6646 |
});
|
6647 |
|
6662 |
this._activate(this._element, listElement);
|
6663 |
|
6664 |
var complete = function complete() {
|
6665 |
+
var hiddenEvent = $.Event(EVENT_HIDDEN$3, {
|
6666 |
relatedTarget: _this._element
|
6667 |
});
|
6668 |
+
var shownEvent = $.Event(EVENT_SHOWN$3, {
|
6669 |
relatedTarget: previous
|
6670 |
});
|
6671 |
$(previous).trigger(hiddenEvent);
|
6688 |
_proto._activate = function _activate(element, container, callback) {
|
6689 |
var _this2 = this;
|
6690 |
|
6691 |
+
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE$2);
|
6692 |
var active = activeElements[0];
|
6693 |
+
var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE$4);
|
6694 |
|
6695 |
var complete = function complete() {
|
6696 |
return _this2._transitionComplete(element, active, callback);
|
6698 |
|
6699 |
if (active && isTransitioning) {
|
6700 |
var transitionDuration = Util.getTransitionDurationFromElement(active);
|
6701 |
+
$(active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
6702 |
} else {
|
6703 |
complete();
|
6704 |
}
|
6706 |
|
6707 |
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
|
6708 |
if (active) {
|
6709 |
+
$(active).removeClass(CLASS_NAME_ACTIVE$3);
|
6710 |
+
var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
|
6711 |
|
6712 |
if (dropdownChild) {
|
6713 |
+
$(dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
|
6714 |
}
|
6715 |
|
6716 |
if (active.getAttribute('role') === 'tab') {
|
6718 |
}
|
6719 |
}
|
6720 |
|
6721 |
+
$(element).addClass(CLASS_NAME_ACTIVE$3);
|
6722 |
|
6723 |
if (element.getAttribute('role') === 'tab') {
|
6724 |
element.setAttribute('aria-selected', true);
|
6726 |
|
6727 |
Util.reflow(element);
|
6728 |
|
6729 |
+
if (element.classList.contains(CLASS_NAME_FADE$4)) {
|
6730 |
+
element.classList.add(CLASS_NAME_SHOW$6);
|
6731 |
}
|
6732 |
|
6733 |
+
if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
|
6734 |
+
var dropdownElement = $(element).closest(SELECTOR_DROPDOWN$1)[0];
|
6735 |
|
6736 |
if (dropdownElement) {
|
6737 |
+
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
|
6738 |
+
$(dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
|
6739 |
}
|
6740 |
|
6741 |
element.setAttribute('aria-expanded', true);
|
6783 |
*/
|
6784 |
|
6785 |
|
6786 |
+
$(document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {
|
6787 |
event.preventDefault();
|
6788 |
|
6789 |
Tab._jQueryInterface.call($(this), 'show');
|
6809 |
*/
|
6810 |
|
6811 |
var NAME$a = 'toast';
|
6812 |
+
var VERSION$a = '4.5.0';
|
6813 |
var DATA_KEY$a = 'bs.toast';
|
6814 |
var EVENT_KEY$a = "." + DATA_KEY$a;
|
6815 |
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
|
6816 |
+
var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
|
6817 |
+
var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
|
6818 |
+
var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
|
6819 |
+
var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
|
6820 |
+
var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
|
6821 |
+
var CLASS_NAME_FADE$5 = 'fade';
|
6822 |
+
var CLASS_NAME_HIDE = 'hide';
|
6823 |
+
var CLASS_NAME_SHOW$7 = 'show';
|
6824 |
+
var CLASS_NAME_SHOWING = 'showing';
|
|
|
|
|
|
|
|
|
6825 |
var DefaultType$7 = {
|
6826 |
animation: 'boolean',
|
6827 |
autohide: 'boolean',
|
6832 |
autohide: true,
|
6833 |
delay: 500
|
6834 |
};
|
6835 |
+
var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
|
|
|
|
|
6836 |
/**
|
6837 |
* ------------------------------------------------------------------------
|
6838 |
* Class Definition
|
6839 |
* ------------------------------------------------------------------------
|
6840 |
*/
|
6841 |
|
6842 |
+
var Toast = /*#__PURE__*/function () {
|
|
|
|
|
6843 |
function Toast(element, config) {
|
6844 |
this._element = element;
|
6845 |
this._config = this._getConfig(config);
|
6855 |
_proto.show = function show() {
|
6856 |
var _this = this;
|
6857 |
|
6858 |
+
var showEvent = $.Event(EVENT_SHOW$4);
|
6859 |
$(this._element).trigger(showEvent);
|
6860 |
|
6861 |
if (showEvent.isDefaultPrevented()) {
|
6863 |
}
|
6864 |
|
6865 |
if (this._config.animation) {
|
6866 |
+
this._element.classList.add(CLASS_NAME_FADE$5);
|
6867 |
}
|
6868 |
|
6869 |
var complete = function complete() {
|
6870 |
+
_this._element.classList.remove(CLASS_NAME_SHOWING);
|
6871 |
|
6872 |
+
_this._element.classList.add(CLASS_NAME_SHOW$7);
|
6873 |
|
6874 |
+
$(_this._element).trigger(EVENT_SHOWN$4);
|
6875 |
|
6876 |
if (_this._config.autohide) {
|
6877 |
_this._timeout = setTimeout(function () {
|
6880 |
}
|
6881 |
};
|
6882 |
|
6883 |
+
this._element.classList.remove(CLASS_NAME_HIDE);
|
6884 |
|
6885 |
Util.reflow(this._element);
|
6886 |
|
6887 |
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
6888 |
|
6889 |
if (this._config.animation) {
|
6890 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
6895 |
};
|
6896 |
|
6897 |
_proto.hide = function hide() {
|
6898 |
+
if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
|
6899 |
return;
|
6900 |
}
|
6901 |
|
6902 |
+
var hideEvent = $.Event(EVENT_HIDE$4);
|
6903 |
$(this._element).trigger(hideEvent);
|
6904 |
|
6905 |
if (hideEvent.isDefaultPrevented()) {
|
6913 |
clearTimeout(this._timeout);
|
6914 |
this._timeout = null;
|
6915 |
|
6916 |
+
if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
|
6917 |
+
this._element.classList.remove(CLASS_NAME_SHOW$7);
|
6918 |
}
|
6919 |
|
6920 |
+
$(this._element).off(EVENT_CLICK_DISMISS$1);
|
6921 |
$.removeData(this._element, DATA_KEY$a);
|
6922 |
this._element = null;
|
6923 |
this._config = null;
|
6925 |
;
|
6926 |
|
6927 |
_proto._getConfig = function _getConfig(config) {
|
6928 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), $(this._element).data()), typeof config === 'object' && config ? config : {});
|
6929 |
Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
|
6930 |
return config;
|
6931 |
};
|
6933 |
_proto._setListeners = function _setListeners() {
|
6934 |
var _this2 = this;
|
6935 |
|
6936 |
+
$(this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
|
6937 |
return _this2.hide();
|
6938 |
});
|
6939 |
};
|
6942 |
var _this3 = this;
|
6943 |
|
6944 |
var complete = function complete() {
|
6945 |
+
_this3._element.classList.add(CLASS_NAME_HIDE);
|
6946 |
|
6947 |
+
$(_this3._element).trigger(EVENT_HIDDEN$4);
|
6948 |
};
|
6949 |
|
6950 |
+
this._element.classList.remove(CLASS_NAME_SHOW$7);
|
6951 |
|
6952 |
if (this._config.animation) {
|
6953 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
resources/js/bootstrap4.bundle.min.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t((e=e||self).bootstrap={},e.jQuery)}(this,function(e,p){"use strict";function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function s(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach(function(e){var t,n,i;t=o,i=r[n=e],n in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var n="transitionend";function o(e){var t=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(t)},e),this}var m={TRANSITION_END:"bsTransitionEnd",getUID:function(e){for(;e+=~~(1e6*Math.random()),document.getElementById(e););return e},getSelectorFromElement:function(e){var t=e.getAttribute("data-target");if(!t||"#"===t){var n=e.getAttribute("href");t=n&&"#"!==n?n.trim():""}try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=p(e).css("transition-duration"),n=p(e).css("transition-delay"),i=parseFloat(t),o=parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(t)+parseFloat(n))):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){p(e).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=t[i],s=r&&m.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(e.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(e){if(!document.documentElement.attachShadow)return null;if("function"!=typeof e.getRootNode)return e instanceof ShadowRoot?e:e.parentNode?m.findShadowRoot(e.parentNode):null;var t=e.getRootNode();return t instanceof ShadowRoot?t:null},jQueryDetection:function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=p.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};m.jQueryDetection(),p.fn.emulateTransitionEnd=o,p.event.special[m.TRANSITION_END]={bindType:n,delegateType:n,handle:function(e){if(p(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=p.fn[r],u={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},f="alert",d="fade",g="show",_=function(){function i(e){this._element=e}var e=i.prototype;return e.close=function(e){var t=this._element;e&&(t=this._getRootElement(e)),this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},e.dispose=function(){p.removeData(this._element,a),this._element=null},e._getRootElement=function(e){var t=m.getSelectorFromElement(e),n=!1;return t&&(n=document.querySelector(t)),n=n||p(e).closest("."+f)[0]},e._triggerCloseEvent=function(e){var t=p.Event(u.CLOSE);return p(e).trigger(t),t},e._removeElement=function(t){var n=this;if(p(t).removeClass(g),p(t).hasClass(d)){var e=m.getTransitionDurationFromElement(t);p(t).one(m.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(e)}else this._destroyElement(t)},e._destroyElement=function(e){p(e).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(a);t||(t=new i(this),e.data(a,t)),"close"===n&&t[n](this)})},i._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',_._handleDismiss(new _)),p.fn[r]=_._jQueryInterface,p.fn[r].Constructor=_,p.fn[r].noConflict=function(){return p.fn[r]=h,_._jQueryInterface};var v="button",y="bs.button",E="."+y,b=".data-api",w=p.fn[v],T="active",C="btn",S="focus",D='[data-toggle^="button"]',I='[data-toggle="buttons"]',A='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',N='input:not([type="hidden"])',k=".active",L=".btn",P={CLICK_DATA_API:"click"+E+b,FOCUS_BLUR_DATA_API:"focus"+E+b+" blur"+E+b,LOAD_DATA_API:"load"+E+b},x=function(){function n(e){this._element=e}var e=n.prototype;return e.toggle=function(){var e=!0,t=!0,n=p(this._element).closest(I)[0];if(n){var i=this._element.querySelector(N);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(T))e=!1;else{var o=n.querySelector(k);o&&p(o).removeClass(T)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(T)&&(e=!1):e=!1;e&&(i.checked=!this._element.classList.contains(T),p(i).trigger("change")),i.focus(),t=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(t&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(T)),e&&p(this._element).toggleClass(T))},e.dispose=function(){p.removeData(this._element,y),this._element=null},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(y);e||(e=new n(this),p(this).data(y,e)),"toggle"===t&&e[t]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();p(document).on(P.CLICK_DATA_API,D,function(e){var t=e.target;if(p(t).hasClass(C)||(t=p(t).closest(L)[0]),!t||t.hasAttribute("disabled")||t.classList.contains("disabled"))e.preventDefault();else{var n=t.querySelector(N);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void e.preventDefault();x._jQueryInterface.call(p(t),"toggle")}}).on(P.FOCUS_BLUR_DATA_API,D,function(e){var t=p(e.target).closest(L)[0];p(t).toggleClass(S,/^focus(in)?$/.test(e.type))}),p(window).on(P.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(O)),t=0,n=e.length;t<n;t++){var i=e[t],o=i.querySelector(N);o.checked||o.hasAttribute("checked")?i.classList.add(T):i.classList.remove(T)}for(var r=0,s=(e=[].slice.call(document.querySelectorAll(A))).length;r<s;r++){var a=e[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(T):a.classList.remove(T)}}),p.fn[v]=x._jQueryInterface,p.fn[v].Constructor=x,p.fn[v].noConflict=function(){return p.fn[v]=w,x._jQueryInterface};var j="carousel",H="bs.carousel",R="."+H,F=".data-api",M=p.fn[j],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},B="next",q="prev",K="left",Q="right",V={SLIDE:"slide"+R,SLID:"slid"+R,KEYDOWN:"keydown"+R,MOUSEENTER:"mouseenter"+R,MOUSELEAVE:"mouseleave"+R,TOUCHSTART:"touchstart"+R,TOUCHMOVE:"touchmove"+R,TOUCHEND:"touchend"+R,POINTERDOWN:"pointerdown"+R,POINTERUP:"pointerup"+R,DRAG_START:"dragstart"+R,LOAD_DATA_API:"load"+R+F,CLICK_DATA_API:"click"+R+F},Y="carousel",z="active",X="slide",G="carousel-item-right",$="carousel-item-left",J="carousel-item-next",Z="carousel-item-prev",ee="pointer-event",te=".active",ne=".active.carousel-item",ie=".carousel-item",oe=".carousel-item img",re=".carousel-item-next, .carousel-item-prev",se=".carousel-indicators",ae="[data-slide], [data-slide-to]",le='[data-ride="carousel"]',ce={TOUCH:"touch",PEN:"pen"},he=function(){function r(e,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(t),this._element=e,this._indicatorsElement=this._element.querySelector(se),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=r.prototype;return e.next=function(){this._isSliding||this._slide(B)},e.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(q)},e.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(re)&&(m.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(e){var t=this;this._activeElement=this._element.querySelector(ne);var n=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)p(this._element).one(V.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n<e?B:q;this._slide(i,this._items[e])}},e.dispose=function(){p(this._element).off(R),p.removeData(this._element,H),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(e){return e=l({},W,{},e),m.typeCheckConfig(j,e,U),e},e._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=40)){var t=e/this.touchDeltaX;(this.touchDeltaX=0)<t&&this.prev(),t<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&p(this._element).on(V.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&p(this._element).on(V.MOUSEENTER,function(e){return t.pause(e)}).on(V.MOUSELEAVE,function(e){return t.cycle(e)}),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval))};p(this._element.querySelectorAll(oe)).on(V.DRAG_START,function(e){return e.preventDefault()}),this._pointerEvent?(p(this._element).on(V.POINTERDOWN,function(e){return n(e)}),p(this._element).on(V.POINTERUP,function(e){return i(e)}),this._element.classList.add(ee)):(p(this._element).on(V.TOUCHSTART,function(e){return n(e)}),p(this._element).on(V.TOUCHMOVE,function(e){return function(e){e.originalEvent.touches&&1<e.originalEvent.touches.length?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)}),p(this._element).on(V.TOUCHEND,function(e){return i(e)}))}},e._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},e._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(ie)):[],this._items.indexOf(e)},e._getItemByDirection=function(e,t){var n=e===B,i=e===q,o=this._getItemIndex(t),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return t;var s=(o+(e===q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(e,t){var n=this._getItemIndex(e),i=this._getItemIndex(this._element.querySelector(ne)),o=p.Event(V.SLIDE,{relatedTarget:e,direction:t,from:i,to:n});return p(this._element).trigger(o),o},e._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(te));p(t).removeClass(z);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&p(n).addClass(z)}},e._slide=function(e,t){var n,i,o,r=this,s=this._element.querySelector(ne),a=this._getItemIndex(s),l=t||s&&this._getItemByDirection(e,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=e===B?(n=$,i=J,K):(n=G,i=Z,Q),l&&p(l).hasClass(z))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=p.Event(V.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(X)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(z),p(s).removeClass(z+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(z),p(l).addClass(z),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var e=p(this).data(H),t=l({},W,{},p(this).data());"object"==typeof i&&(t=l({},t,{},i));var n="string"==typeof i?i:t.slide;if(e||(e=new r(this,t),p(this).data(H,e)),"number"==typeof i)e.to(i);else if("string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}else t.interval&&t.ride&&(e.pause(),e.cycle())})},r._dataApiClickHandler=function(e){var t=m.getSelectorFromElement(this);if(t){var n=p(t)[0];if(n&&p(n).hasClass(Y)){var i=l({},p(n).data(),{},p(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(p(n),i),o&&p(n).data(H).to(o),e.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return W}}]),r}();p(document).on(V.CLICK_DATA_API,ae,he._dataApiClickHandler),p(window).on(V.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(le)),t=0,n=e.length;t<n;t++){var i=p(e[t]);he._jQueryInterface.call(i,i.data())}}),p.fn[j]=he._jQueryInterface,p.fn[j].Constructor=he,p.fn[j].noConflict=function(){return p.fn[j]=M,he._jQueryInterface};var ue="collapse",fe="bs.collapse",de="."+fe,pe=p.fn[ue],me={toggle:!0,parent:""},ge={toggle:"boolean",parent:"(string|element)"},_e={SHOW:"show"+de,SHOWN:"shown"+de,HIDE:"hide"+de,HIDDEN:"hidden"+de,CLICK_DATA_API:"click"+de+".data-api"},ve="show",ye="collapse",Ee="collapsing",be="collapsed",we="width",Te="height",Ce=".show, .collapsing",Se='[data-toggle="collapse"]',De=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Se)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(e){return e===t});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=a.prototype;return e.toggle=function(){p(this._element).hasClass(ve)?this.hide():this.show()},e.show=function(){var e,t,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(ve)&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(Ce)).filter(function(e){return"string"==typeof n._config.parent?e.getAttribute("data-parent")===n._config.parent:e.classList.contains(ye)})).length&&(e=null),!(e&&(t=p(e).not(this._selector).data(fe))&&t._isTransitioning))){var i=p.Event(_e.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){e&&(a._jQueryInterface.call(p(e).not(this._selector),"hide"),t||p(e).data(fe,null));var o=this._getDimension();p(this._element).removeClass(ye).addClass(Ee),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(be).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){p(n._element).removeClass(Ee).addClass(ye).addClass(ve),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(_e.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},e.hide=function(){var e=this;if(!this._isTransitioning&&p(this._element).hasClass(ve)){var t=p.Event(_e.HIDE);if(p(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(Ee).removeClass(ye).removeClass(ve);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=m.getSelectorFromElement(r);if(null!==s)p([].slice.call(document.querySelectorAll(s))).hasClass(ve)||p(r).addClass(be).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e.setTransitioning(!1),p(e._element).removeClass(Ee).addClass(ye).trigger(_e.HIDDEN)}).emulateTransitionEnd(a)}}},e.setTransitioning=function(e){this._isTransitioning=e},e.dispose=function(){p.removeData(this._element,fe),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(e){return(e=l({},me,{},e)).toggle=Boolean(e.toggle),m.typeCheckConfig(ue,e,ge),e},e._getDimension=function(){return p(this._element).hasClass(we)?we:Te},e._getParent=function(){var e,n=this;m.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var t='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(e.querySelectorAll(t));return p(i).each(function(e,t){n._addAriaAndCollapsedClass(a._getTargetFromElement(t),[t])}),e},e._addAriaAndCollapsedClass=function(e,t){var n=p(e).hasClass(ve);t.length&&p(t).toggleClass(be,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(e){var t=m.getSelectorFromElement(e);return t?document.querySelector(t):null},a._jQueryInterface=function(i){return this.each(function(){var e=p(this),t=e.data(fe),n=l({},me,{},e.data(),{},"object"==typeof i&&i?i:{});if(!t&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),t||(t=new a(this,n),e.data(fe,t)),"string"==typeof i){if("undefined"==typeof t[i])throw new TypeError('No method named "'+i+'"');t[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return me}}]),a}();p(document).on(_e.CLICK_DATA_API,Se,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var n=p(this),t=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(t));p(i).each(function(){var e=p(this),t=e.data(fe)?"toggle":n.data();De._jQueryInterface.call(e,t)})}),p.fn[ue]=De._jQueryInterface,p.fn[ue].Constructor=De,p.fn[ue].noConflict=function(){return p.fn[ue]=pe,De._jQueryInterface};var Ie="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,Ae=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(Ie&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}();var Oe=Ie&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},Ae))}};function Ne(e){return e&&"[object Function]"==={}.toString.call(e)}function ke(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function Le(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function Pe(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=ke(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?e:Pe(Le(e))}function xe(e){return e&&e.referenceNode?e.referenceNode:e}var je=Ie&&!(!window.MSInputMethodContext||!document.documentMode),He=Ie&&/MSIE 10/.test(navigator.userAgent);function Re(e){return 11===e?je:10===e?He:je||He}function Fe(e){if(!e)return document.documentElement;for(var t=Re(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===ke(n,"position")?Fe(n):n:e?e.ownerDocument.documentElement:document.documentElement}function Me(e){return null!==e.parentNode?Me(e.parentNode):e}function We(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,o=n?t:e,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s=r.commonAncestorContainer;if(e!==s&&t!==s||i.contains(o))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||Fe(e.firstElementChild)===e)}(s)?s:Fe(s);var a=Me(e);return a.host?We(a.host,t):We(e,Me(t).host)}function Ue(e,t){var n="top"===(1<arguments.length&&void 0!==t?t:"top")?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"!==i&&"HTML"!==i)return e[n];var o=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||o)[n]}function Be(e,t){var n="x"===t?"Left":"Top",i="Left"==n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+i+"Width"],10)}function qe(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],Re(10)?parseInt(n["offset"+e])+parseInt(i["margin"+("Height"===e?"Top":"Left")])+parseInt(i["margin"+("Height"===e?"Bottom":"Right")]):0)}function Ke(e){var t=e.body,n=e.documentElement,i=Re(10)&&getComputedStyle(n);return{height:qe("Height",t,n,i),width:qe("Width",t,n,i)}}var Qe=function(e,t,n){return t&&Ve(e.prototype,t),n&&Ve(e,n),e};function Ve(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function Ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ze=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function Xe(e){return ze({},e,{right:e.left+e.width,bottom:e.top+e.height})}function Ge(e){var t={};try{if(Re(10)){t=e.getBoundingClientRect();var n=Ue(e,"top"),i=Ue(e,"left");t.top+=n,t.left+=i,t.bottom+=n,t.right+=i}else t=e.getBoundingClientRect()}catch(e){}var o={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},r="HTML"===e.nodeName?Ke(e.ownerDocument):{},s=r.width||e.clientWidth||o.width,a=r.height||e.clientHeight||o.height,l=e.offsetWidth-s,c=e.offsetHeight-a;if(l||c){var h=ke(e);l-=Be(h,"x"),c-=Be(h,"y"),o.width-=l,o.height-=c}return Xe(o)}function $e(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Re(10),r="HTML"===t.nodeName,s=Ge(e),a=Ge(t),l=Pe(e),c=ke(t),h=parseFloat(c.borderTopWidth,10),u=parseFloat(c.borderLeftWidth,10);i&&r&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var f=Xe({top:s.top-a.top-h,left:s.left-a.left-u,width:s.width,height:s.height});if(f.marginTop=0,f.marginLeft=0,!o&&r){var d=parseFloat(c.marginTop,10),p=parseFloat(c.marginLeft,10);f.top-=h-d,f.bottom-=h-d,f.left-=u-p,f.right-=u-p,f.marginTop=d,f.marginLeft=p}return(o&&!i?t.contains(l):t===l&&"BODY"!==l.nodeName)&&(f=function(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Ue(t,"top"),r=Ue(t,"left"),s=i?-1:1;return e.top+=o*s,e.bottom+=o*s,e.left+=r*s,e.right+=r*s,e}(f,t)),f}function Je(e){if(!e||!e.parentElement||Re())return document.documentElement;for(var t=e.parentElement;t&&"none"===ke(t,"transform");)t=t.parentElement;return t||document.documentElement}function Ze(e,t,n,i,o){var r=4<arguments.length&&void 0!==o&&o,s={top:0,left:0},a=r?Je(e):We(e,xe(t));if("viewport"===i)s=function(e,t){var n=1<arguments.length&&void 0!==t&&t,i=e.ownerDocument.documentElement,o=$e(e,i),r=Math.max(i.clientWidth,window.innerWidth||0),s=Math.max(i.clientHeight,window.innerHeight||0),a=n?0:Ue(i),l=n?0:Ue(i,"left");return Xe({top:a-o.top+o.marginTop,left:l-o.left+o.marginLeft,width:r,height:s})}(a,r);else{var l=void 0;"scrollParent"===i?"BODY"===(l=Pe(Le(t))).nodeName&&(l=e.ownerDocument.documentElement):l="window"===i?e.ownerDocument.documentElement:i;var c=$e(l,a,r);if("HTML"!==l.nodeName||function e(t){var n=t.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===ke(t,"position"))return!0;var i=Le(t);return!!i&&e(i)}(a))s=c;else{var h=Ke(e.ownerDocument),u=h.height,f=h.width;s.top+=c.top-c.marginTop,s.bottom=u+c.top,s.left+=c.left-c.marginLeft,s.right=f+c.left}}var d="number"==typeof(n=n||0);return s.left+=d?n:n.left||0,s.top+=d?n:n.top||0,s.right-=d?n:n.right||0,s.bottom-=d?n:n.bottom||0,s}function et(e,t,i,n,o,r){var s=5<arguments.length&&void 0!==r?r:0;if(-1===e.indexOf("auto"))return e;var a=Ze(i,n,s,o),l={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},c=Object.keys(l).map(function(e){return ze({key:e},l[e],{area:function(e){return e.width*e.height}(l[e])})}).sort(function(e,t){return t.area-e.area}),h=c.filter(function(e){var t=e.width,n=e.height;return t>=i.clientWidth&&n>=i.clientHeight}),u=0<h.length?h[0].key:c[0].key,f=e.split("-")[1];return u+(f?"-"+f:"")}function tt(e,t,n,i){var o=3<arguments.length&&void 0!==i?i:null;return $e(n,o?Je(t):We(t,xe(n)),o)}function nt(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),i=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+i,height:e.offsetHeight+n}}function it(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function ot(e,t,n){n=n.split("-")[0];var i=nt(e),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=t[s]+t[l]/2-i[l]/2,o[a]=n===a?t[a]-i[c]:t[it(a)],o}function rt(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function st(e,n,t){return(void 0===t?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var i=rt(e,function(e){return e[t]===n});return e.indexOf(i)}(e,"name",t))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var t=e.function||e.fn;e.enabled&&Ne(t)&&(n.offsets.popper=Xe(n.offsets.popper),n.offsets.reference=Xe(n.offsets.reference),n=t(n,e))}),n}function at(e,n){return e.some(function(e){var t=e.name;return e.enabled&&t===n})}function lt(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<t.length;i++){var o=t[i],r=o?""+o+n:e;if("undefined"!=typeof document.body.style[r])return r}return null}function ct(e){var t=e.ownerDocument;return t?t.defaultView:window}function ht(e,t,n,i){n.updateBound=i,ct(e).addEventListener("resize",n.updateBound,{passive:!0});var o=Pe(e);return function e(t,n,i,o){var r="BODY"===t.nodeName,s=r?t.ownerDocument.defaultView:t;s.addEventListener(n,i,{passive:!0}),r||e(Pe(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function ut(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=function(e,t){return ct(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}(this.reference,this.state))}function ft(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function dt(n,i){Object.keys(i).forEach(function(e){var t="";-1!==["width","height","top","right","bottom","left"].indexOf(e)&&ft(i[e])&&(t="px"),n.style[e]=i[e]+t})}function pt(e,t){function n(e){return e}var i=e.offsets,o=i.popper,r=i.reference,s=Math.round,a=Math.floor,l=s(r.width),c=s(o.width),h=-1!==["left","right"].indexOf(e.placement),u=-1!==e.placement.indexOf("-"),f=t?h||u||l%2==c%2?s:a:n,d=t?s:n;return{left:f(l%2==1&&c%2==1&&!u&&t?o.left-1:o.left),top:d(o.top),bottom:d(o.bottom),right:f(o.right)}}var mt=Ie&&/Firefox/i.test(navigator.userAgent);function gt(e,t,n){var i=rt(e,function(e){return e.name===t}),o=!!i&&e.some(function(e){return e.name===n&&e.enabled&&e.order<i.order});if(!o){var r="`"+t+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var _t=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],vt=_t.slice(3);function yt(e,t){var n=1<arguments.length&&void 0!==t&&t,i=vt.indexOf(e),o=vt.slice(i+1).concat(vt.slice(0,i));return n?o.reverse():o}var Et="flip",bt="clockwise",wt="counterclockwise";function Tt(e,o,r,t){var s=[0,0],a=-1!==["right","left"].indexOf(t),n=e.split(/(\+|\-)/).map(function(e){return e.trim()}),i=n.indexOf(rt(n,function(e){return-1!==e.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(e,t){var n=(1===t?!a:a)?"height":"width",i=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,i){var o=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return e;if(0!==s.indexOf("%"))return"vh"!==s&&"vw"!==s?r:("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Xe(a)[t]/100*r}(e,n,o,r)})})).forEach(function(n,i){n.forEach(function(e,t){ft(e)&&(s[i]+=e*("-"===n[t-1]?-1:1))})}),s}var Ct={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var o=e.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",h={start:Ye({},l,r[l]),end:Ye({},l,r[l]+r[c]-s[c])};e.offsets.popper=ze({},s,h[i])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,i=e.placement,o=e.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=ft(+n)?[+n,0]:Tt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),e.popper=r,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,i){var t=i.boundariesElement||Fe(e.instance.popper);e.instance.reference===t&&(t=Fe(t));var n=lt("transform"),o=e.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Ze(e.instance.popper,e.instance.reference,i.padding,t,e.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=e.offsets.popper,u={primary:function(e){var t=h[e];return h[e]<l[e]&&!i.escapeWithReference&&(t=Math.max(h[e],l[e])),Ye({},e,t)},secondary:function(e){var t="right"===e?"left":"top",n=h[t];return h[e]>l[e]&&!i.escapeWithReference&&(n=Math.min(h[t],l[e]-("right"===e?h.width:h.height))),Ye({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";h=ze({},h,u[t](e))}),e.offsets.popper=h,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,o=e.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(e.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(e.offsets.popper[l]=r(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!gt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var o=e.placement.split("-")[0],r=e.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-p<s[u]&&(e.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(e.offsets.popper[u]+=a[u]+p-s[d]),e.offsets.popper=Xe(e.offsets.popper);var m=a[u]+a[c]/2-p/2,g=ke(e.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-e.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ye(n={},u,Math.round(y)),Ye(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(m,g){if(at(m.instance.modifiers,"inner"))return m;if(m.flipped&&m.placement===m.originalPlacement)return m;var _=Ze(m.instance.popper,m.instance.reference,g.padding,g.boundariesElement,m.positionFixed),v=m.placement.split("-")[0],y=it(v),E=m.placement.split("-")[1]||"",b=[];switch(g.behavior){case Et:b=[v,y];break;case bt:b=yt(v);break;case wt:b=yt(v,!0);break;default:b=g.behavior}return b.forEach(function(e,t){if(v!==e||b.length===t+1)return m;v=m.placement.split("-")[0],y=it(v);var n=m.offsets.popper,i=m.offsets.reference,o=Math.floor,r="left"===v&&o(n.right)>o(i.left)||"right"===v&&o(n.left)<o(i.right)||"top"===v&&o(n.bottom)>o(i.top)||"bottom"===v&&o(n.top)<o(i.bottom),s=o(n.left)<o(_.left),a=o(n.right)>o(_.right),l=o(n.top)<o(_.top),c=o(n.bottom)>o(_.bottom),h="left"===v&&s||"right"===v&&a||"top"===v&&l||"bottom"===v&&c,u=-1!==["top","bottom"].indexOf(v),f=!!g.flipVariations&&(u&&"start"===E&&s||u&&"end"===E&&a||!u&&"start"===E&&l||!u&&"end"===E&&c),d=!!g.flipVariationsByContent&&(u&&"start"===E&&a||u&&"end"===E&&s||!u&&"start"===E&&c||!u&&"end"===E&&l),p=f||d;(r||h||p)&&(m.flipped=!0,(r||h)&&(v=b[t+1]),p&&(E=function(e){return"end"===e?"start":"start"===e?"end":e}(E)),m.placement=v+(E?"-"+E:""),m.offsets.popper=ze({},m.offsets.popper,ot(m.instance.popper,m.offsets.reference,m.placement)),m=st(m.instance.modifiers,m,"flip"))}),m},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Xe(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!gt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=rt(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,i=t.y,o=e.offsets.popper,r=rt(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:t.gpuAcceleration,a=Fe(e.instance.popper),l=Ge(a),c={position:o.position},h=pt(e,window.devicePixelRatio<2||!mt),u="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=lt("transform"),p=void 0,m=void 0;if(m="bottom"==u?"HTML"===a.nodeName?-a.clientHeight+h.bottom:-l.height+h.bottom:h.top,p="right"==f?"HTML"===a.nodeName?-a.clientWidth+h.right:-l.width+h.right:h.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[u]=0,c[f]=0,c.willChange="transform";else{var g="bottom"==u?-1:1,_="right"==f?-1:1;c[u]=m*g,c[f]=p*_,c.willChange=u+", "+f}var v={"x-placement":e.placement};return e.attributes=ze({},v,e.attributes),e.styles=ze({},c,e.styles),e.arrowStyles=ze({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){return dt(e.instance.popper,e.styles),function(t,n){Object.keys(n).forEach(function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})}(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&dt(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,i,o){var r=tt(o,t,e,n.positionFixed),s=et(n.placement,r,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",s),dt(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},St=(Qe(Dt,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=tt(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=et(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=ot(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=st(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,at(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[lt("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ht(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return ut.call(this)}}]),Dt);function Dt(e,t){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Dt),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=Oe(this.update.bind(this)),this.options=ze({},Dt.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(ze({},Dt.Defaults.modifiers,i.modifiers)).forEach(function(e){n.options.modifiers[e]=ze({},Dt.Defaults.modifiers[e]||{},i.modifiers?i.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return ze({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&Ne(e.onLoad)&&e.onLoad(n.reference,n.popper,n.options,e,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}St.Utils=("undefined"!=typeof window?window:global).PopperUtils,St.placements=_t,St.Defaults=Ct;var It="dropdown",At="bs.dropdown",Ot="."+At,Nt=".data-api",kt=p.fn[It],Lt=new RegExp("38|40|27"),Pt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+Nt,KEYDOWN_DATA_API:"keydown"+Ot+Nt,KEYUP_DATA_API:"keyup"+Ot+Nt},xt="disabled",jt="show",Ht="dropup",Rt="dropright",Ft="dropleft",Mt="dropdown-menu-right",Wt="position-static",Ut='[data-toggle="dropdown"]',Bt=".dropdown form",qt=".dropdown-menu",Kt=".navbar-nav",Qt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Vt="top-start",Yt="top-end",zt="bottom-start",Xt="bottom-end",Gt="right-start",$t="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},en=function(){function c(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=c.prototype;return e.toggle=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)){var e=p(this._menu).hasClass(jt);c._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||p(this._element).hasClass(xt)||p(this._menu).hasClass(jt))){var t={relatedTarget:this._element},n=p.Event(Pt.SHOW,t),i=c._getParentFromElement(this._element);if(p(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof St)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:m.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&p(i).addClass(Wt),this._popper=new St(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(i).closest(Kt).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(jt),p(i).toggleClass(jt).trigger(p.Event(Pt.SHOWN,t))}}},e.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)&&p(this._menu).hasClass(jt)){var e={relatedTarget:this._element},t=p.Event(Pt.HIDE,e),n=c._getParentFromElement(this._element);p(n).trigger(t),t.isDefaultPrevented()||(this._popper&&this._popper.destroy(),p(this._menu).toggleClass(jt),p(n).toggleClass(jt).trigger(p.Event(Pt.HIDDEN,e)))}},e.dispose=function(){p.removeData(this._element,At),p(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;p(this._element).on(Pt.CLICK,function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},e._getConfig=function(e){return e=l({},this.constructor.Default,{},p(this._element).data(),{},e),m.typeCheckConfig(It,e,this.constructor.DefaultType),e},e._getMenuElement=function(){if(!this._menu){var e=c._getParentFromElement(this._element);e&&(this._menu=e.querySelector(qt))}return this._menu},e._getPlacement=function(){var e=p(this._element.parentNode),t=zt;return e.hasClass(Ht)?(t=Vt,p(this._menu).hasClass(Mt)&&(t=Yt)):e.hasClass(Rt)?t=Gt:e.hasClass(Ft)?t=$t:p(this._menu).hasClass(Mt)&&(t=Xt),t},e._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),l({},e,{},this._config.popperConfig)},c._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(At);if(e||(e=new c(this,"object"==typeof t?t:null),p(this).data(At,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},c._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var t=[].slice.call(document.querySelectorAll(Ut)),n=0,i=t.length;n<i;n++){var o=c._getParentFromElement(t[n]),r=p(t[n]).data(At),s={relatedTarget:t[n]};if(e&&"click"===e.type&&(s.clickEvent=e),r){var a=r._menu;if(p(o).hasClass(jt)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&p.contains(o,e.target))){var l=p.Event(Pt.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),t[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),p(a).removeClass(jt),p(o).removeClass(jt).trigger(p.Event(Pt.HIDDEN,s)))}}}},c._getParentFromElement=function(e){var t,n=m.getSelectorFromElement(e);return n&&(t=document.querySelector(n)),t||e.parentNode},c._dataApiKeydownHandler=function(e){if((/input|textarea/i.test(e.target.tagName)?!(32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||p(e.target).closest(qt).length)):Lt.test(e.which))&&(e.preventDefault(),e.stopPropagation(),!this.disabled&&!p(this).hasClass(xt))){var t=c._getParentFromElement(this),n=p(t).hasClass(jt);if(n||27!==e.which)if(n&&(!n||27!==e.which&&32!==e.which)){var i=[].slice.call(t.querySelectorAll(Qt)).filter(function(e){return p(e).is(":visible")});if(0!==i.length){var o=i.indexOf(e.target);38===e.which&&0<o&&o--,40===e.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===e.which){var r=t.querySelector(Ut);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}();p(document).on(Pt.KEYDOWN_DATA_API,Ut,en._dataApiKeydownHandler).on(Pt.KEYDOWN_DATA_API,qt,en._dataApiKeydownHandler).on(Pt.CLICK_DATA_API+" "+Pt.KEYUP_DATA_API,en._clearMenus).on(Pt.CLICK_DATA_API,Ut,function(e){e.preventDefault(),e.stopPropagation(),en._jQueryInterface.call(p(this),"toggle")}).on(Pt.CLICK_DATA_API,Bt,function(e){e.stopPropagation()}),p.fn[It]=en._jQueryInterface,p.fn[It].Constructor=en,p.fn[It].noConflict=function(){return p.fn[It]=kt,en._jQueryInterface};var tn="modal",nn="bs.modal",on="."+nn,rn=p.fn[tn],sn={backdrop:!0,keyboard:!0,focus:!0,show:!0},an={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},ln={HIDE:"hide"+on,HIDE_PREVENTED:"hidePrevented"+on,HIDDEN:"hidden"+on,SHOW:"show"+on,SHOWN:"shown"+on,FOCUSIN:"focusin"+on,RESIZE:"resize"+on,CLICK_DISMISS:"click.dismiss"+on,KEYDOWN_DISMISS:"keydown.dismiss"+on,MOUSEUP_DISMISS:"mouseup.dismiss"+on,MOUSEDOWN_DISMISS:"mousedown.dismiss"+on,CLICK_DATA_API:"click"+on+".data-api"},cn="modal-dialog-scrollable",hn="modal-scrollbar-measure",un="modal-backdrop",fn="modal-open",dn="fade",pn="show",mn="modal-static",gn=".modal-dialog",_n=".modal-body",vn='[data-toggle="modal"]',yn='[data-dismiss="modal"]',En=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",bn=".sticky-top",wn=function(){function o(e,t){this._config=this._getConfig(t),this._element=e,this._dialog=e.querySelector(gn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=o.prototype;return e.toggle=function(e){return this._isShown?this.hide():this.show(e)},e.show=function(e){var t=this;if(!this._isShown&&!this._isTransitioning){p(this._element).hasClass(dn)&&(this._isTransitioning=!0);var n=p.Event(ln.SHOW,{relatedTarget:e});p(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p(this._element).on(ln.CLICK_DISMISS,yn,function(e){return t.hide(e)}),p(this._dialog).on(ln.MOUSEDOWN_DISMISS,function(){p(t._element).one(ln.MOUSEUP_DISMISS,function(e){p(e.target).is(t._element)&&(t._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return t._showElement(e)}))}},e.hide=function(e){var t=this;if(e&&e.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.Event(ln.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(dn);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(ln.FOCUSIN),p(this._element).removeClass(pn),p(this._element).off(ln.CLICK_DISMISS),p(this._dialog).off(ln.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(e){return t._hideModal(e)}).emulateTransitionEnd(o)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach(function(e){return p(e).off(on)}),p(document).off(ln.FOCUSIN),p.removeData(this._element,nn),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(e){return e=l({},sn,{},e),m.typeCheckConfig(tn,e,an),e},e._triggerBackdropTransition=function(){var e=this;if("static"===this._config.backdrop){var t=p.Event(ln.HIDE_PREVENTED);if(p(this._element).trigger(t),t.defaultPrevented)return;this._element.classList.add(mn);var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e._element.classList.remove(mn)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},e._showElement=function(e){var t=this,n=p(this._element).hasClass(dn),i=this._dialog?this._dialog.querySelector(_n):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),p(this._dialog).hasClass(cn)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(pn),this._config.focus&&this._enforceFocus();function o(){t._config.focus&&t._element.focus(),t._isTransitioning=!1,p(t._element).trigger(r)}var r=p.Event(ln.SHOWN,{relatedTarget:e});if(n){var s=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},e._enforceFocus=function(){var t=this;p(document).off(ln.FOCUSIN).on(ln.FOCUSIN,function(e){document!==e.target&&t._element!==e.target&&0===p(t._element).has(e.target).length&&t._element.focus()})},e._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?p(this._element).on(ln.KEYDOWN_DISMISS,function(e){27===e.which&&t._triggerBackdropTransition()}):this._isShown||p(this._element).off(ln.KEYDOWN_DISMISS)},e._setResizeEvent=function(){var t=this;this._isShown?p(window).on(ln.RESIZE,function(e){return t.handleUpdate(e)}):p(window).off(ln.RESIZE)},e._hideModal=function(){var e=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){p(document.body).removeClass(fn),e._resetAdjustments(),e._resetScrollbar(),p(e._element).trigger(ln.HIDDEN)})},e._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(e){var t=this,n=p(this._element).hasClass(dn)?dn:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=un,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(ln.CLICK_DISMISS,function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=!1:e.target===e.currentTarget&&t._triggerBackdropTransition()}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(pn),!e)return;if(!n)return void e();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,e).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(pn);var o=function(){t._removeBackdrop(),e&&e()};if(p(this._element).hasClass(dn)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else e&&e()},e._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(En)),t=[].slice.call(document.querySelectorAll(bn));p(e).each(function(e,t){var n=t.style.paddingRight,i=p(t).css("padding-right");p(t).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(t).each(function(e,t){var n=t.style.marginRight,i=p(t).css("margin-right");p(t).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=p(document.body).css("padding-right");p(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}p(document.body).addClass(fn)},e._resetScrollbar=function(){var e=[].slice.call(document.querySelectorAll(En));p(e).each(function(e,t){var n=p(t).data("padding-right");p(t).removeData("padding-right"),t.style.paddingRight=n||""});var t=[].slice.call(document.querySelectorAll(""+bn));p(t).each(function(e,t){var n=p(t).data("margin-right");"undefined"!=typeof n&&p(t).css("margin-right",n).removeData("margin-right")});var n=p(document.body).data("padding-right");p(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var e=document.createElement("div");e.className=hn,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},o._jQueryInterface=function(n,i){return this.each(function(){var e=p(this).data(nn),t=l({},sn,{},p(this).data(),{},"object"==typeof n&&n?n:{});if(e||(e=new o(this,t),p(this).data(nn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](i)}else t.show&&e.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return sn}}]),o}();p(document).on(ln.CLICK_DATA_API,vn,function(e){var t,n=this,i=m.getSelectorFromElement(this);i&&(t=document.querySelector(i));var o=p(t).data(nn)?"toggle":l({},p(t).data(),{},p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||e.preventDefault();var r=p(t).one(ln.SHOW,function(e){e.isDefaultPrevented()||r.one(ln.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});wn._jQueryInterface.call(p(t),o,this)}),p.fn[tn]=wn._jQueryInterface,p.fn[tn].Constructor=wn,p.fn[tn].noConflict=function(){return p.fn[tn]=rn,wn._jQueryInterface};var Tn=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Cn={"*":["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","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Sn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Dn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function In(e,r,t){if(0===e.length)return e;if(t&&"function"==typeof t)return t(e);for(var n=(new window.DOMParser).parseFromString(e,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(e){var t=a[e],n=t.nodeName.toLowerCase();if(-1===s.indexOf(t.nodeName.toLowerCase()))return t.parentNode.removeChild(t),"continue";var i=[].slice.call(t.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(e){!function(e,t){var n=e.nodeName.toLowerCase();if(-1!==t.indexOf(n))return-1===Tn.indexOf(n)||Boolean(e.nodeValue.match(Sn)||e.nodeValue.match(Dn));for(var i=t.filter(function(e){return e instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(e,o)&&t.removeAttribute(e.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var An="tooltip",On="bs.tooltip",Nn="."+On,kn=p.fn[An],Ln="bs-tooltip",Pn=new RegExp("(^|\\s)"+Ln+"\\S+","g"),xn=["sanitize","whiteList","sanitizeFn"],jn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Hn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Rn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Cn,popperConfig:null},Fn="show",Mn="out",Wn={HIDE:"hide"+Nn,HIDDEN:"hidden"+Nn,SHOW:"show"+Nn,SHOWN:"shown"+Nn,INSERTED:"inserted"+Nn,CLICK:"click"+Nn,FOCUSIN:"focusin"+Nn,FOCUSOUT:"focusout"+Nn,MOUSEENTER:"mouseenter"+Nn,MOUSELEAVE:"mouseleave"+Nn},Un="fade",Bn="show",qn=".tooltip-inner",Kn=".arrow",Qn="hover",Vn="focus",Yn="click",zn="manual",Xn=function(){function i(e,t){if("undefined"==typeof St)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(Bn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(e);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Un);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new St(this.element,o,this._getPopperConfig(a)),p(o).addClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p(t.element).trigger(t.constructor.Event.SHOWN),e===Mn&&t._leave(null,t)};if(p(this.tip).hasClass(Un)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(e){function t(){n._hoverState!==Fn&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),p(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()}var n=this,i=this.getTipElement(),o=p.Event(this.constructor.Event.HIDE);if(p(this.element).trigger(o),!o.isDefaultPrevented()){if(p(i).removeClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Yn]=!1,this._activeTrigger[Vn]=!1,this._activeTrigger[Qn]=!1,p(this.tip).hasClass(Un)){var r=m.getTransitionDurationFromElement(i);p(i).one(m.TRANSITION_END,t).emulateTransitionEnd(r)}else t();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Ln+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(p(e.querySelectorAll(qn)),this.getTitle()),p(e).removeClass(Un+" "+Bn)},e.setElementContent=function(e,t){"object"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=In(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p(t).parent().is(e)||e.empty().append(t):e.text(p(t).text())},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e=e||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},e._getPopperConfig=function(e){var t=this;return l({},{placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Kn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}},{},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},e._getAttachment=function(e){return Hn[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==zn){var t=e===Qn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Qn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}}),this._hideModalHandler=function(){i.element&&i.hide()},p(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==e||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Vn:Qn]=!0),p(t.getTipElement()).hasClass(Bn)||t._hoverState===Fn?t._hoverState=Fn:(clearTimeout(t._timeout),t._hoverState=Fn,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===Fn&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Vn:Qn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Mn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Mn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){var t=p(this.element).data();return Object.keys(t).forEach(function(e){-1!==xn.indexOf(e)&&delete t[e]}),"number"==typeof(e=l({},this.constructor.Default,{},t,{},"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),m.typeCheckConfig(An,e,this.constructor.DefaultType),e.sanitize&&(e.template=In(e.template,e.whiteList,e.sanitizeFn)),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(Pn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(p(e).removeClass(Un),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data(On),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data(On,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Rn}},{key:"NAME",get:function(){return An}},{key:"DATA_KEY",get:function(){return On}},{key:"Event",get:function(){return Wn}},{key:"EVENT_KEY",get:function(){return Nn}},{key:"DefaultType",get:function(){return jn}}]),i}();p.fn[An]=Xn._jQueryInterface,p.fn[An].Constructor=Xn,p.fn[An].noConflict=function(){return p.fn[An]=kn,Xn._jQueryInterface};var Gn="popover",$n="bs.popover",Jn="."+$n,Zn=p.fn[Gn],ei="bs-popover",ti=new RegExp("(^|\\s)"+ei+"\\S+","g"),ni=l({},Xn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),ii=l({},Xn.DefaultType,{content:"(string|element|function)"}),oi="fade",ri="show",si=".popover-header",ai=".popover-body",li={HIDE:"hide"+Jn,HIDDEN:"hidden"+Jn,SHOW:"show"+Jn,SHOWN:"shown"+Jn,INSERTED:"inserted"+Jn,CLICK:"click"+Jn,FOCUSIN:"focusin"+Jn,FOCUSOUT:"focusout"+Jn,MOUSEENTER:"mouseenter"+Jn,MOUSELEAVE:"mouseleave"+Jn},ci=function(e){function i(){return e.apply(this,arguments)||this}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(i,e);var t=i.prototype;return t.isWithContent=function(){return this.getTitle()||this._getContent()},t.addAttachmentClass=function(e){p(this.getTipElement()).addClass(ei+"-"+e)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var e=p(this.getTipElement());this.setElementContent(e.find(si),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(ai),t),e.removeClass(oi+" "+ri)},t._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},t._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(ti);null!==t&&0<t.length&&e.removeClass(t.join(""))},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data($n),t="object"==typeof n?n:null;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data($n,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return ni}},{key:"NAME",get:function(){return Gn}},{key:"DATA_KEY",get:function(){return $n}},{key:"Event",get:function(){return li}},{key:"EVENT_KEY",get:function(){return Jn}},{key:"DefaultType",get:function(){return ii}}]),i}(Xn);p.fn[Gn]=ci._jQueryInterface,p.fn[Gn].Constructor=ci,p.fn[Gn].noConflict=function(){return p.fn[Gn]=Zn,ci._jQueryInterface};var hi="scrollspy",ui="bs.scrollspy",fi="."+ui,di=p.fn[hi],pi={offset:10,method:"auto",target:""},mi={offset:"number",method:"string",target:"(string|element)"},gi={ACTIVATE:"activate"+fi,SCROLL:"scroll"+fi,LOAD_DATA_API:"load"+fi+".data-api"},_i="dropdown-item",vi="active",yi='[data-spy="scroll"]',Ei=".nav, .list-group",bi=".nav-link",wi=".nav-item",Ti=".list-group-item",Ci=".dropdown",Si=".dropdown-item",Di=".dropdown-toggle",Ii="offset",Ai="position",Oi=function(){function n(e,t){var n=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+" "+bi+","+this._config.target+" "+Ti+","+this._config.target+" "+Si,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(gi.SCROLL,function(e){return n._process(e)}),this.refresh(),this._process()}var e=n.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?Ii:Ai,o="auto"===this._config.method?e:this._config.method,r=o===Ai?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(e){var t,n=m.getSelectorFromElement(e);if(n&&(t=document.querySelector(n)),t){var i=t.getBoundingClientRect();if(i.width||i.height)return[p(t)[o]().top+r,n]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},e.dispose=function(){p.removeData(this._element,ui),p(this._scrollElement).off(fi),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(e){if("string"!=typeof(e=l({},pi,{},"object"==typeof e&&e?e:{})).target){var t=p(e.target).attr("id");t||(t=m.getUID(hi),p(e.target).attr("id",t)),e.target="#"+t}return m.typeCheckConfig(hi,e,mi),e},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),n<=e){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&e<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&e>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||e<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map(function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'}),n=p([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass(_i)?(n.closest(Ci).find(Di).addClass(vi),n.addClass(vi)):(n.addClass(vi),n.parents(Ei).prev(bi+", "+Ti).addClass(vi),n.parents(Ei).prev(wi).children(bi).addClass(vi)),p(this._scrollElement).trigger(gi.ACTIVATE,{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(e){return e.classList.contains(vi)}).forEach(function(e){return e.classList.remove(vi)})},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(ui);if(e||(e=new n(this,"object"==typeof t&&t),p(this).data(ui,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return pi}}]),n}();p(window).on(gi.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(yi)),t=e.length;t--;){var n=p(e[t]);Oi._jQueryInterface.call(n,n.data())}}),p.fn[hi]=Oi._jQueryInterface,p.fn[hi].Constructor=Oi,p.fn[hi].noConflict=function(){return p.fn[hi]=di,Oi._jQueryInterface};var Ni="bs.tab",ki="."+Ni,Li=p.fn.tab,Pi={HIDE:"hide"+ki,HIDDEN:"hidden"+ki,SHOW:"show"+ki,SHOWN:"shown"+ki,CLICK_DATA_API:"click"+ki+".data-api"},xi="dropdown-menu",ji="active",Hi="disabled",Ri="fade",Fi="show",Mi=".dropdown",Wi=".nav, .list-group",Ui=".active",Bi="> li > .active",qi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ki=".dropdown-toggle",Qi="> .dropdown-menu .active",Vi=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(ji)||p(this._element).hasClass(Hi))){var e,i,t=p(this._element).closest(Wi)[0],o=m.getSelectorFromElement(this._element);if(t){var r="UL"===t.nodeName||"OL"===t.nodeName?Bi:Ui;i=(i=p.makeArray(p(t).find(r)))[i.length-1]}var s=p.Event(Pi.HIDE,{relatedTarget:this._element}),a=p.Event(Pi.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(e=document.querySelector(o)),this._activate(this._element,t);var l=function(){var e=p.Event(Pi.HIDDEN,{relatedTarget:n._element}),t=p.Event(Pi.SHOWN,{relatedTarget:i});p(i).trigger(e),p(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){p.removeData(this._element,Ni),this._element=null},e._activate=function(e,t,n){function i(){return o._transitionComplete(e,r,n)}var o=this,r=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?p(t).children(Ui):p(t).find(Bi))[0],s=n&&r&&p(r).hasClass(Ri);if(r&&s){var a=m.getTransitionDurationFromElement(r);p(r).removeClass(Fi).one(m.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._transitionComplete=function(e,t,n){if(t){p(t).removeClass(ji);var i=p(t.parentNode).find(Qi)[0];i&&p(i).removeClass(ji),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(p(e).addClass(ji),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),m.reflow(e),e.classList.contains(Ri)&&e.classList.add(Fi),e.parentNode&&p(e.parentNode).hasClass(xi)){var o=p(e).closest(Mi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ki));p(r).addClass(ji)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(Ni);if(t||(t=new i(this),e.data(Ni,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(Pi.CLICK_DATA_API,qi,function(e){e.preventDefault(),Vi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Vi._jQueryInterface,p.fn.tab.Constructor=Vi,p.fn.tab.noConflict=function(){return p.fn.tab=Li,Vi._jQueryInterface};var Yi="toast",zi="bs.toast",Xi="."+zi,Gi=p.fn[Yi],$i={CLICK_DISMISS:"click.dismiss"+Xi,HIDE:"hide"+Xi,HIDDEN:"hidden"+Xi,SHOW:"show"+Xi,SHOWN:"shown"+Xi},Ji="fade",Zi="hide",eo="show",to="showing",no={animation:"boolean",autohide:"boolean",delay:"number"},io={animation:!0,autohide:!0,delay:500},oo='[data-dismiss="toast"]',ro=function(){function i(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var e=i.prototype;return e.show=function(){var e=this,t=p.Event($i.SHOW);if(p(this._element).trigger(t),!t.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Ji);var n=function(){e._element.classList.remove(to),e._element.classList.add(eo),p(e._element).trigger($i.SHOWN),e._config.autohide&&(e._timeout=setTimeout(function(){e.hide()},e._config.delay))};if(this._element.classList.remove(Zi),m.reflow(this._element),this._element.classList.add(to),this._config.animation){var i=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains(eo)){var e=p.Event($i.HIDE);p(this._element).trigger(e),e.isDefaultPrevented()||this._close()}},e.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(eo)&&this._element.classList.remove(eo),p(this._element).off($i.CLICK_DISMISS),p.removeData(this._element,zi),this._element=null,this._config=null},e._getConfig=function(e){return e=l({},io,{},p(this._element).data(),{},"object"==typeof e&&e?e:{}),m.typeCheckConfig(Yi,e,this.constructor.DefaultType),e},e._setListeners=function(){var e=this;p(this._element).on($i.CLICK_DISMISS,oo,function(){return e.hide()})},e._close=function(){function e(){t._element.classList.add(Zi),p(t._element).trigger($i.HIDDEN)}var t=this;if(this._element.classList.remove(eo),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(zi);if(t||(t=new i(this,"object"==typeof n&&n),e.data(zi,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return no}},{key:"Default",get:function(){return io}}]),i}();p.fn[Yi]=ro._jQueryInterface,p.fn[Yi].Constructor=ro,p.fn[Yi].noConflict=function(){return p.fn[Yi]=Gi,ro._jQueryInterface},e.Alert=_,e.Button=x,e.Carousel=he,e.Collapse=De,e.Dropdown=en,e.Modal=wn,e.Popover=ci,e.Scrollspy=Oi,e.Tab=Vi,e.Toast=ro,e.Tooltip=Xn,e.Util=m,Object.defineProperty(e,"__esModule",{value:!0})});
|
7 |
//# sourceMappingURL=bootstrap.bundle.min.js.map
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t=t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function i(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){o(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;function a(t){var n=this,i=!1;return e(this).one(l.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||l.triggerTransitionEnd(n)}),t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),r=parseFloat(i);return o||r?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&l.isElement(r)?"element":null===(a=r)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};l.jQueryDetection(),e.fn.emulateTransitionEnd=a,e.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c="alert",u=e.fn[c],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=l.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=l.getTransitionDurationFromElement(t);e(t).one(l.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[c]=h._jQueryInterface,e.fn[c].Constructor=h,e.fn[c].noConflict=function(){return e.fn[c]=u,h._jQueryInterface};var f=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=i.querySelector(".active");r&&e(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,s=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=f,d._jQueryInterface};var p="carousel",m=".bs.carousel",g=e.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=function(){function t(t,e){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._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(m),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s(s({},v),t),l.typeCheckConfig(p,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(r),r},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,r,s=this,a=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(a),u=n||a&&this._getItemByDirection(t,a),h=this._getItemIndex(u),f=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",r="left"):(i="carousel-item-right",o="carousel-item-prev",r="right"),u&&e(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,r).isDefaultPrevented()&&a&&u){this._isSliding=!0,f&&this.pause(),this._setActiveIndicatorElement(u);var d=e.Event("slid.bs.carousel",{relatedTarget:u,direction:r,from:c,to:h});if(e(this._element).hasClass("slide")){e(u).addClass(o),l.reflow(u),e(a).addClass(i),e(u).addClass(i);var p=parseInt(u.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var m=l.getTransitionDurationFromElement(a);e(a).one(l.TRANSITION_END,(function(){e(u).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),s._isSliding=!1,setTimeout((function(){return e(s._element).trigger(d)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(u).addClass("active"),this._isSliding=!1,e(this._element).trigger(d);f&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s(s({},v),e(this).data());"object"==typeof n&&(o=s(s({},o),n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=l.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s(s({},e(o).data()),e(this).data()),a=this.getAttribute("data-slide-to");a&&(r.interval=!1),t._jQueryInterface.call(e(o),r),a&&e(o).data("bs.carousel").to(a),n.preventDefault()}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);y._jQueryInterface.call(o,o.data())}})),e.fn[p]=y._jQueryInterface,e.fn[p].Constructor=y,e.fn[p].noConflict=function(){return e.fn[p]=g,y._jQueryInterface};var w="collapse",E=e.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],s=l.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter((function(e){return e===t}));null!==s&&a.length>0&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var r=e.Event("show.bs.collapse");if(e(this._element).trigger(r),!r.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var s=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(s[0].toUpperCase()+s.slice(1)),c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[s]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[s]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",l.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var s=this._triggerArray[r],a=l.getSelectorFromElement(s);if(null!==a)e([].slice.call(document.querySelectorAll(a))).hasClass("show")||e(s).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s(s({},T),t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;l.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(n.querySelectorAll(o));return e(r).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s(s(s({},T),i.data()),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return T}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();S._jQueryInterface.call(t,i)}))})),e.fn[w]=S._jQueryInterface,e.fn[w].Constructor=S,e.fn[w].noConflict=function(){return e.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,k=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var N=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),k))}};function O(t){return t&&"[object Function]"==={}.toString.call(t)}function A(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function I(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=A(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(I(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===A(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function M(t){return null!==t.parentNode?M(t.parentNode):t}function B(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&R(s.firstElementChild)!==s?R(l):l;var c=M(t);return c.host?B(c.host,e):B(t,M(e).host)}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function H(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=q(e,"top"),o=q(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"],10)+parseFloat(t["border"+i+"Width"],10)}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=q(t,"top"),i=q(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},s=r.width||t.clientWidth||o.width,a=r.height||t.clientHeight||o.height,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var u=A(t);l-=Q(u,"x"),c-=Q(u,"y"),o.width-=l,o.height-=c}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),s=G(e),a=x(t),l=A(e),c=parseFloat(l.borderTopWidth,10),u=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=K({top:r.top-s.top-c,left:r.left-s.left-u,width:r.width,height:r.height});if(h.marginTop=0,h.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);h.top-=c-f,h.bottom-=c-f,h.left-=u-d,h.right-=u-d,h.marginTop=f,h.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(h=H(h,e)),h}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:q(n),a=e?0:q(n,"left"),l={top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===A(t,"position"))return!0;var n=I(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===A(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?tt(t):B(t,j(e));if("viewport"===i)r=J(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=x(I(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=$(a,s,o);if("HTML"!==a.nodeName||Z(s))r=l;else{var c=U(t.ownerDocument),u=c.height,h=c.width;r.top+=l.top-l.marginTop,r.bottom=u+l.top,r.left+=l.left-l.marginLeft,r.right=h+l.left}}var f="number"==typeof(n=n||0);return r.left+=f?n:n.left||0,r.top+=f?n:n.top||0,r.right-=f?n:n.right||0,r.bottom-=f?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=et(n,i,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map((function(t){return X({key:t},a[t],{area:nt(a[t])})})).sort((function(t,e){return e.area-t.area})),c=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,h=t.split("-")[1];return u+(h?"-"+h:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):B(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function st(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function at(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-i[l]/2,o[a]=n===a?e[a]-i[c]:e[st(a)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ct(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&O(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ut(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=at(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ct(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function ht(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ft(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function dt(){return this.state.isDestroyed=!0,ht(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ft("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,s=r?e.ownerDocument.defaultView:e;s.addEventListener(n,i,{passive:!0}),r||t(x(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",kt="counterclockwise";function Nt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),s=t.split(/(\+|\-)/).map((function(t){return t.trim()})),a=s.indexOf(lt(s,(function(t){return-1!==t.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==a?[s.slice(0,a).concat([s[a].split(l)[0]]),[s[a].split(l)[1]].concat(s.slice(a+1))]:[s];return(c=c.map((function(t,i){var o=(1===i?!r:r)?"height":"width",s=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,s=!0,t):s?(t[t.length-1]+=e,s=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return K(a)[e]/100*r}if("vh"===s||"vw"===s){return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var Ot={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",u={start:z({},l,r[l]),end:z({},l,r[l]+r[c]-s[c])};t.offsets.popper=X({},s,u[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:Nt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ft("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=s,o[i]=a,e.boundaries=l;var c=e.priority,u=t.offsets.popper,h={primary:function(t){var n=u[t];return u[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(u[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=u[n];return u[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(u[n],l[t]-("right"===t?u.width:u.height))),z({},n,i)}};return c.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";u=X({},u,h[e](t))})),t.offsets.popper=u,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(t.offsets.popper[l]=r(i[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",u=l?"Top":"Left",h=u.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=rt(i)[c];a[d]-p<s[h]&&(t.offsets.popper[h]-=s[h]-(a[d]-p)),a[h]+p>s[d]&&(t.offsets.popper[h]+=a[h]+p-s[d]),t.offsets.popper=K(t.offsets.popper);var m=a[h]+a[c]/2-p/2,g=A(t.instance.popper),v=parseFloat(g["margin"+u],10),_=parseFloat(g["border"+u+"Width"],10),b=m-t.offsets.popper[h]-v-_;return b=Math.max(Math.min(s[c]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},h,Math.round(b)),z(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(ht(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=st(i),r=t.placement.split("-")[1]||"",s=[];switch(e.behavior){case St:s=[i,o];break;case Dt:s=Ct(i);break;case kt:s=Ct(i,!0);break;default:s=e.behavior}return s.forEach((function(a,l){if(i!==a||s.length===l+1)return t;i=t.placement.split("-")[0],o=st(i);var c=t.offsets.popper,u=t.offsets.reference,h=Math.floor,f="left"===i&&h(c.right)>h(u.left)||"right"===i&&h(c.left)<h(u.right)||"top"===i&&h(c.bottom)>h(u.top)||"bottom"===i&&h(c.top)<h(u.bottom),d=h(c.left)<h(n.left),p=h(c.right)>h(n.right),m=h(c.top)<h(n.top),g=h(c.bottom)>h(n.bottom),v="left"===i&&d||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&d||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&d||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(f||v||w)&&(t.flipped=!0,(f||v)&&(i=s[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,at(t.instance.popper,t.offsets.reference,t.placement)),t=ct(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),t.placement=st(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:e.gpuAcceleration,a=R(t.instance.popper),l=G(a),c={position:o.position},u=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,s=Math.floor,a=function(t){return t},l=r(o.width),c=r(i.width),u=-1!==["left","right"].indexOf(t.placement),h=-1!==t.placement.indexOf("-"),f=e?u||h||l%2==c%2?r:s:a,d=e?r:a;return{left:f(l%2==1&&c%2==1&&!h&&e?i.left-1:i.left),top:d(i.top),bottom:d(i.bottom),right:f(i.right)}}(t,window.devicePixelRatio<2||!yt),h="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=ft("transform"),p=void 0,m=void 0;if(m="bottom"===h?"HTML"===a.nodeName?-a.clientHeight+u.bottom:-l.height+u.bottom:u.top,p="right"===f?"HTML"===a.nodeName?-a.clientWidth+u.right:-l.width+u.right:u.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[h]=0,c[f]=0,c.willChange="transform";else{var g="bottom"===h?-1:1,v="right"===f?-1:1;c[h]=m*g,c[f]=p*v,c.willChange=h+", "+f}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},c,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),s=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},At=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=N(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&O(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ut.call(this)}},{key:"destroy",value:function(){return dt.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();At.Utils=("undefined"!=typeof window?window:global).PopperUtils,At.placements=Et,At.Defaults=Ot;var It="dropdown",xt=e.fn[It],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var n=t.prototype;return n.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},n.show=function(n){if(void 0===n&&(n=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var i={relatedTarget:this._element},o=e.Event("show.bs.dropdown",i),r=t._getParentFromElement(this._element);if(e(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&n){if("undefined"==typeof At)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var s=this._element;"parent"===this._config.reference?s=r:l.isElement(this._config.reference)&&(s=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(s=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new At(s,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",i))}}},n.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},n.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},n.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},n._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},n._getConfig=function(t){return t=s(s(s({},this.constructor.Default),e(this._element).data()),t),l.typeCheckConfig(It,t,this.constructor.DefaultType),t},n._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},n._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},n._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},n._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},n._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s(s({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,r=i.length;o<r;o++){var s=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(s).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(s,n.target))){var u=e.Event("hide.bs.dropdown",l);e(s).trigger(u),u.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(s).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!jt.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var r=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==r.length){var s=r.indexOf(n.target);38===n.which&&s>0&&s--,40===n.which&&s<r.length-1&&s++,s<0&&(s=0),r[s].focus()}}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[It]=Ft._jQueryInterface,e.fn[It].Constructor=Ft,e.fn[It].noConflict=function(){return e.fn[It]=xt,Ft._jQueryInterface};var Rt=e.fn.modal,Mt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Bt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},qt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s(s({},Mt),t),l.typeCheckConfig("modal",t,Bt),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;this._element.classList.add("modal-static");var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static")})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&l.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t}),s=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(r)};if(i){var a=l.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(l.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&l.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var r=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var s=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,r=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,r=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s(s(s({},Mt),e(this).data()),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Mt}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=l.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s(s({},e(n).data()),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var a=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));qt._jQueryInterface.call(e(n),r,this)})),e.fn.modal=qt._jQueryInterface,e.fn.modal.Constructor=qt,e.fn.modal.noConflict=function(){return e.fn.modal=Rt,qt._jQueryInterface};var Ht=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["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:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Vt(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),r=[].slice.call(i.body.querySelectorAll("*")),s=function(t,n){var i=r[t],s=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[s]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===Ht.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=r.length;a<l;a++)s(a);return i.body.innerHTML}var Yt="tooltip",zt=e.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={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"},te=function(){function t(t,e){if("undefined"==typeof At)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var n=t.prototype;return n.enable=function(){this._isEnabled=!0},n.disable=function(){this._isEnabled=!1},n.toggleEnabled=function(){this._isEnabled=!this._isEnabled},n.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},n.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},n.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var n=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(n);var i=l.findShadowRoot(this.element),o=e.contains(null!==i?i:this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!o)return;var r=this.getTipElement(),s=l.getUID(this.constructor.NAME);r.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&e(r).addClass("fade");var a="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,c=this._getAttachment(a);this.addAttachmentClass(c);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new At(this.element,r,this._getPopperConfig(c)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var h=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=l.getTransitionDurationFromElement(this.tip);e(this.tip).one(l.TRANSITION_END,h).emulateTransitionEnd(f)}else h()}},n.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),r=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var s=l.getTransitionDurationFromElement(i);e(i).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=""}},n.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},n.isWithContent=function(){return Boolean(this.getTitle())},n.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},n.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},n.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},n.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Vt(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},n.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},n._getPopperConfig=function(t){var e=this;return s(s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},n._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},n._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},n._getAttachment=function(t){return $t[t.toUpperCase()]},n._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s(s({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},n._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},n._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},n._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},n._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},n._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==Kt.indexOf(t)&&delete n[t]})),"number"==typeof(t=s(s(s({},this.constructor.Default),n),"object"==typeof t&&t?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()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},n._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},n._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Xt);null!==n&&n.length&&t.removeClass(n.join(""))},n._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},n._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();e.fn[Yt]=te._jQueryInterface,e.fn[Yt].Constructor=te,e.fn[Yt].noConflict=function(){return e.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=e.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=s(s({},te.Default),{},{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=s(s({},te.DefaultType),{},{content:"(string|element|function)"}),se={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"},ae=function(t){var n,o;function r(){return t.apply(this,arguments)||this}o=t,(n=r).prototype=Object.create(o.prototype),n.prototype.constructor=n,n.__proto__=o;var s=r.prototype;return s.isWithContent=function(){return this.getTitle()||this._getContent()},s.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},s.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},s.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},s._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},s._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(ie);null!==n&&n.length>0&&t.removeClass(n.join(""))},r._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new r(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},i(r,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return se}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),r}(te);e.fn[ee]=ae._jQueryInterface,e.fn[ee].Constructor=ae,e.fn[ee].noConflict=function(){return e.fn[ee]=ne,ae._jQueryInterface};var le="scrollspy",ce=e.fn[le],ue={offset:10,method:"auto",target:""},he={offset:"number",method:"string",target:"(string|element)"},fe=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,r=l.getSelectorFromElement(t);if(r&&(n=document.querySelector(r)),n){var s=n.getBoundingClientRect();if(s.width||s.height)return[e(n)[i]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s(s({},ue),"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var n=e(t.target).attr("id");n||(n=l.getUID(le),e(t.target).attr("id",n)),t.target="#"+n}return l.typeCheckConfig(le,t,he),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return ue}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);fe._jQueryInterface.call(i,i.data())}})),e.fn[le]=fe._jQueryInterface,e.fn[le].Constructor=fe,e.fn[le].noConflict=function(){return e.fn[le]=ce,fe._jQueryInterface};var de=e.fn.tab,pe=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var s="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(s)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(c),!c.isDefaultPrevented()&&!a.isDefaultPrevented()){r&&(n=document.querySelector(r)),this._activate(this._element,o);var u=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,u):u()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,r=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],s=i&&r&&e(r).hasClass("fade"),a=function(){return o._transitionComplete(t,r,i)};if(r&&s){var c=l.getTransitionDurationFromElement(r);e(r).removeClass("show").one(l.TRANSITION_END,a).emulateTransitionEnd(c)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var r=e(t).closest(".dropdown")[0];if(r){var s=[].slice.call(r.querySelectorAll(".dropdown-toggle"));e(s).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(e(this),"show")})),e.fn.tab=pe._jQueryInterface,e.fn.tab.Constructor=pe,e.fn.tab.noConflict=function(){return e.fn.tab=de,pe._jQueryInterface};var me=e.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s(s(s({},ve),e(this._element).data()),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();e.fn.toast=_e._jQueryInterface,e.fn.toast.Constructor=_e,e.fn.toast.noConflict=function(){return e.fn.toast=me,_e._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=ae,t.Scrollspy=fe,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})}));
|
7 |
//# sourceMappingURL=bootstrap.bundle.min.js.map
|
resources/js/bootstrap4.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
(function (global, factory) {
|
@@ -9,8 +9,8 @@
|
|
9 |
(global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
|
10 |
}(this, (function (exports, $, Popper) { 'use strict';
|
11 |
|
12 |
-
$ = $ &&
|
13 |
-
Popper = Popper &&
|
14 |
|
15 |
function _defineProperties(target, props) {
|
16 |
for (var i = 0; i < props.length; i++) {
|
@@ -85,7 +85,7 @@
|
|
85 |
|
86 |
/**
|
87 |
* --------------------------------------------------------------------------
|
88 |
-
* Bootstrap (v4.
|
89 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
90 |
* --------------------------------------------------------------------------
|
91 |
*/
|
@@ -100,6 +100,10 @@
|
|
100 |
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
101 |
|
102 |
function toType(obj) {
|
|
|
|
|
|
|
|
|
103 |
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
104 |
}
|
105 |
|
@@ -112,7 +116,7 @@
|
|
112 |
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
113 |
}
|
114 |
|
115 |
-
return undefined;
|
116 |
}
|
117 |
};
|
118 |
}
|
@@ -262,33 +266,25 @@
|
|
262 |
*/
|
263 |
|
264 |
var NAME = 'alert';
|
265 |
-
var VERSION = '4.
|
266 |
var DATA_KEY = 'bs.alert';
|
267 |
var EVENT_KEY = "." + DATA_KEY;
|
268 |
var DATA_API_KEY = '.data-api';
|
269 |
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
270 |
-
var
|
271 |
-
|
272 |
-
|
273 |
-
var
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
};
|
278 |
-
var ClassName = {
|
279 |
-
ALERT: 'alert',
|
280 |
-
FADE: 'fade',
|
281 |
-
SHOW: 'show'
|
282 |
-
};
|
283 |
/**
|
284 |
* ------------------------------------------------------------------------
|
285 |
* Class Definition
|
286 |
* ------------------------------------------------------------------------
|
287 |
*/
|
288 |
|
289 |
-
var Alert =
|
290 |
-
/*#__PURE__*/
|
291 |
-
function () {
|
292 |
function Alert(element) {
|
293 |
this._element = element;
|
294 |
} // Getters
|
@@ -328,14 +324,14 @@
|
|
328 |
}
|
329 |
|
330 |
if (!parent) {
|
331 |
-
parent = $(element).closest("." +
|
332 |
}
|
333 |
|
334 |
return parent;
|
335 |
};
|
336 |
|
337 |
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
|
338 |
-
var closeEvent = $.Event(
|
339 |
$(element).trigger(closeEvent);
|
340 |
return closeEvent;
|
341 |
};
|
@@ -343,9 +339,9 @@
|
|
343 |
_proto._removeElement = function _removeElement(element) {
|
344 |
var _this = this;
|
345 |
|
346 |
-
$(element).removeClass(
|
347 |
|
348 |
-
if (!$(element).hasClass(
|
349 |
this._destroyElement(element);
|
350 |
|
351 |
return;
|
@@ -358,7 +354,7 @@
|
|
358 |
};
|
359 |
|
360 |
_proto._destroyElement = function _destroyElement(element) {
|
361 |
-
$(element).detach().trigger(
|
362 |
} // Static
|
363 |
;
|
364 |
|
@@ -404,7 +400,7 @@
|
|
404 |
*/
|
405 |
|
406 |
|
407 |
-
$(document).on(
|
408 |
/**
|
409 |
* ------------------------------------------------------------------------
|
410 |
* jQuery
|
@@ -426,39 +422,31 @@
|
|
426 |
*/
|
427 |
|
428 |
var NAME$1 = 'button';
|
429 |
-
var VERSION$1 = '4.
|
430 |
var DATA_KEY$1 = 'bs.button';
|
431 |
var EVENT_KEY$1 = "." + DATA_KEY$1;
|
432 |
var DATA_API_KEY$1 = '.data-api';
|
433 |
var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
|
434 |
-
var
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
var
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
};
|
448 |
-
var Event$1 = {
|
449 |
-
CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
|
450 |
-
FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1),
|
451 |
-
LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1
|
452 |
-
};
|
453 |
/**
|
454 |
* ------------------------------------------------------------------------
|
455 |
* Class Definition
|
456 |
* ------------------------------------------------------------------------
|
457 |
*/
|
458 |
|
459 |
-
var Button =
|
460 |
-
/*#__PURE__*/
|
461 |
-
function () {
|
462 |
function Button(element) {
|
463 |
this._element = element;
|
464 |
} // Getters
|
@@ -470,33 +458,30 @@
|
|
470 |
_proto.toggle = function toggle() {
|
471 |
var triggerChangeEvent = true;
|
472 |
var addAriaPressed = true;
|
473 |
-
var rootElement = $(this._element).closest(
|
474 |
|
475 |
if (rootElement) {
|
476 |
-
var input = this._element.querySelector(
|
477 |
|
478 |
if (input) {
|
479 |
if (input.type === 'radio') {
|
480 |
-
if (input.checked && this._element.classList.contains(
|
481 |
triggerChangeEvent = false;
|
482 |
} else {
|
483 |
-
var activeElement = rootElement.querySelector(
|
484 |
|
485 |
if (activeElement) {
|
486 |
-
$(activeElement).removeClass(
|
487 |
}
|
488 |
}
|
489 |
-
} else if (input.type === 'checkbox') {
|
490 |
-
if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {
|
491 |
-
triggerChangeEvent = false;
|
492 |
-
}
|
493 |
-
} else {
|
494 |
-
// if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
|
495 |
-
triggerChangeEvent = false;
|
496 |
}
|
497 |
|
498 |
if (triggerChangeEvent) {
|
499 |
-
|
|
|
|
|
|
|
|
|
500 |
$(input).trigger('change');
|
501 |
}
|
502 |
|
@@ -507,11 +492,11 @@
|
|
507 |
|
508 |
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
|
509 |
if (addAriaPressed) {
|
510 |
-
this._element.setAttribute('aria-pressed', !this._element.classList.contains(
|
511 |
}
|
512 |
|
513 |
if (triggerChangeEvent) {
|
514 |
-
$(this._element).toggleClass(
|
515 |
}
|
516 |
}
|
517 |
};
|
@@ -553,17 +538,18 @@
|
|
553 |
*/
|
554 |
|
555 |
|
556 |
-
$(document).on(
|
557 |
var button = event.target;
|
|
|
558 |
|
559 |
-
if (!$(button).hasClass(
|
560 |
-
button = $(button).closest(
|
561 |
}
|
562 |
|
563 |
if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
|
564 |
event.preventDefault(); // work around Firefox bug #1540995
|
565 |
} else {
|
566 |
-
var inputBtn = button.querySelector(
|
567 |
|
568 |
if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
|
569 |
event.preventDefault(); // work around Firefox bug #1540995
|
@@ -571,38 +557,42 @@
|
|
571 |
return;
|
572 |
}
|
573 |
|
|
|
|
|
|
|
|
|
574 |
Button._jQueryInterface.call($(button), 'toggle');
|
575 |
}
|
576 |
-
}).on(
|
577 |
-
var button = $(event.target).closest(
|
578 |
-
$(button).toggleClass(
|
579 |
});
|
580 |
-
$(window).on(
|
581 |
// ensure correct active class is set to match the controls' actual values/states
|
582 |
// find all checkboxes/readio buttons inside data-toggle groups
|
583 |
-
var buttons = [].slice.call(document.querySelectorAll(
|
584 |
|
585 |
for (var i = 0, len = buttons.length; i < len; i++) {
|
586 |
var button = buttons[i];
|
587 |
-
var input = button.querySelector(
|
588 |
|
589 |
if (input.checked || input.hasAttribute('checked')) {
|
590 |
-
button.classList.add(
|
591 |
} else {
|
592 |
-
button.classList.remove(
|
593 |
}
|
594 |
} // find all button toggles
|
595 |
|
596 |
|
597 |
-
buttons = [].slice.call(document.querySelectorAll(
|
598 |
|
599 |
for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
|
600 |
var _button = buttons[_i];
|
601 |
|
602 |
if (_button.getAttribute('aria-pressed') === 'true') {
|
603 |
-
_button.classList.add(
|
604 |
} else {
|
605 |
-
_button.classList.remove(
|
606 |
}
|
607 |
}
|
608 |
});
|
@@ -627,7 +617,7 @@
|
|
627 |
*/
|
628 |
|
629 |
var NAME$2 = 'carousel';
|
630 |
-
var VERSION$2 = '4.
|
631 |
var DATA_KEY$2 = 'bs.carousel';
|
632 |
var EVENT_KEY$2 = "." + DATA_KEY$2;
|
633 |
var DATA_API_KEY$2 = '.data-api';
|
@@ -655,48 +645,39 @@
|
|
655 |
wrap: 'boolean',
|
656 |
touch: 'boolean'
|
657 |
};
|
658 |
-
var
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
var
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
var
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
var
|
691 |
-
ACTIVE: '.active',
|
692 |
-
ACTIVE_ITEM: '.active.carousel-item',
|
693 |
-
ITEM: '.carousel-item',
|
694 |
-
ITEM_IMG: '.carousel-item img',
|
695 |
-
NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
|
696 |
-
INDICATORS: '.carousel-indicators',
|
697 |
-
DATA_SLIDE: '[data-slide], [data-slide-to]',
|
698 |
-
DATA_RIDE: '[data-ride="carousel"]'
|
699 |
-
};
|
700 |
var PointerType = {
|
701 |
TOUCH: 'touch',
|
702 |
PEN: 'pen'
|
@@ -707,9 +688,7 @@
|
|
707 |
* ------------------------------------------------------------------------
|
708 |
*/
|
709 |
|
710 |
-
var Carousel =
|
711 |
-
/*#__PURE__*/
|
712 |
-
function () {
|
713 |
function Carousel(element, config) {
|
714 |
this._items = null;
|
715 |
this._interval = null;
|
@@ -721,7 +700,7 @@
|
|
721 |
this.touchDeltaX = 0;
|
722 |
this._config = this._getConfig(config);
|
723 |
this._element = element;
|
724 |
-
this._indicatorsElement = this._element.querySelector(
|
725 |
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
726 |
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
|
727 |
|
@@ -734,7 +713,7 @@
|
|
734 |
// Public
|
735 |
_proto.next = function next() {
|
736 |
if (!this._isSliding) {
|
737 |
-
this._slide(
|
738 |
}
|
739 |
};
|
740 |
|
@@ -748,7 +727,7 @@
|
|
748 |
|
749 |
_proto.prev = function prev() {
|
750 |
if (!this._isSliding) {
|
751 |
-
this._slide(
|
752 |
}
|
753 |
};
|
754 |
|
@@ -757,7 +736,7 @@
|
|
757 |
this._isPaused = true;
|
758 |
}
|
759 |
|
760 |
-
if (this._element.querySelector(
|
761 |
Util.triggerTransitionEnd(this._element);
|
762 |
this.cycle(true);
|
763 |
}
|
@@ -784,7 +763,7 @@
|
|
784 |
_proto.to = function to(index) {
|
785 |
var _this = this;
|
786 |
|
787 |
-
this._activeElement = this._element.querySelector(
|
788 |
|
789 |
var activeIndex = this._getItemIndex(this._activeElement);
|
790 |
|
@@ -793,7 +772,7 @@
|
|
793 |
}
|
794 |
|
795 |
if (this._isSliding) {
|
796 |
-
$(this._element).one(
|
797 |
return _this.to(index);
|
798 |
});
|
799 |
return;
|
@@ -805,7 +784,7 @@
|
|
805 |
return;
|
806 |
}
|
807 |
|
808 |
-
var direction = index > activeIndex ?
|
809 |
|
810 |
this._slide(direction, this._items[index]);
|
811 |
};
|
@@ -825,7 +804,7 @@
|
|
825 |
;
|
826 |
|
827 |
_proto._getConfig = function _getConfig(config) {
|
828 |
-
config = _objectSpread2({}, Default,
|
829 |
Util.typeCheckConfig(NAME$2, config, DefaultType);
|
830 |
return config;
|
831 |
};
|
@@ -854,15 +833,15 @@
|
|
854 |
var _this2 = this;
|
855 |
|
856 |
if (this._config.keyboard) {
|
857 |
-
$(this._element).on(
|
858 |
return _this2._keydown(event);
|
859 |
});
|
860 |
}
|
861 |
|
862 |
if (this._config.pause === 'hover') {
|
863 |
-
$(this._element).on(
|
864 |
return _this2.pause(event);
|
865 |
-
}).on(
|
866 |
return _this2.cycle(event);
|
867 |
});
|
868 |
}
|
@@ -923,27 +902,27 @@
|
|
923 |
}
|
924 |
};
|
925 |
|
926 |
-
$(this._element.querySelectorAll(
|
927 |
return e.preventDefault();
|
928 |
});
|
929 |
|
930 |
if (this._pointerEvent) {
|
931 |
-
$(this._element).on(
|
932 |
return start(event);
|
933 |
});
|
934 |
-
$(this._element).on(
|
935 |
return end(event);
|
936 |
});
|
937 |
|
938 |
-
this._element.classList.add(
|
939 |
} else {
|
940 |
-
$(this._element).on(
|
941 |
return start(event);
|
942 |
});
|
943 |
-
$(this._element).on(
|
944 |
return move(event);
|
945 |
});
|
946 |
-
$(this._element).on(
|
947 |
return end(event);
|
948 |
});
|
949 |
}
|
@@ -968,13 +947,13 @@
|
|
968 |
};
|
969 |
|
970 |
_proto._getItemIndex = function _getItemIndex(element) {
|
971 |
-
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(
|
972 |
return this._items.indexOf(element);
|
973 |
};
|
974 |
|
975 |
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
|
976 |
-
var isNextDirection = direction ===
|
977 |
-
var isPrevDirection = direction ===
|
978 |
|
979 |
var activeIndex = this._getItemIndex(activeElement);
|
980 |
|
@@ -985,7 +964,7 @@
|
|
985 |
return activeElement;
|
986 |
}
|
987 |
|
988 |
-
var delta = direction ===
|
989 |
var itemIndex = (activeIndex + delta) % this._items.length;
|
990 |
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
991 |
};
|
@@ -993,9 +972,9 @@
|
|
993 |
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
|
994 |
var targetIndex = this._getItemIndex(relatedTarget);
|
995 |
|
996 |
-
var fromIndex = this._getItemIndex(this._element.querySelector(
|
997 |
|
998 |
-
var slideEvent = $.Event(
|
999 |
relatedTarget: relatedTarget,
|
1000 |
direction: eventDirectionName,
|
1001 |
from: fromIndex,
|
@@ -1007,13 +986,13 @@
|
|
1007 |
|
1008 |
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
|
1009 |
if (this._indicatorsElement) {
|
1010 |
-
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(
|
1011 |
-
$(indicators).removeClass(
|
1012 |
|
1013 |
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
|
1014 |
|
1015 |
if (nextIndicator) {
|
1016 |
-
$(nextIndicator).addClass(
|
1017 |
}
|
1018 |
}
|
1019 |
};
|
@@ -1021,7 +1000,7 @@
|
|
1021 |
_proto._slide = function _slide(direction, element) {
|
1022 |
var _this4 = this;
|
1023 |
|
1024 |
-
var activeElement = this._element.querySelector(
|
1025 |
|
1026 |
var activeElementIndex = this._getItemIndex(activeElement);
|
1027 |
|
@@ -1034,17 +1013,17 @@
|
|
1034 |
var orderClassName;
|
1035 |
var eventDirectionName;
|
1036 |
|
1037 |
-
if (direction ===
|
1038 |
-
directionalClassName =
|
1039 |
-
orderClassName =
|
1040 |
-
eventDirectionName =
|
1041 |
} else {
|
1042 |
-
directionalClassName =
|
1043 |
-
orderClassName =
|
1044 |
-
eventDirectionName =
|
1045 |
}
|
1046 |
|
1047 |
-
if (nextElement && $(nextElement).hasClass(
|
1048 |
this._isSliding = false;
|
1049 |
return;
|
1050 |
}
|
@@ -1068,14 +1047,14 @@
|
|
1068 |
|
1069 |
this._setActiveIndicatorElement(nextElement);
|
1070 |
|
1071 |
-
var slidEvent = $.Event(
|
1072 |
relatedTarget: nextElement,
|
1073 |
direction: eventDirectionName,
|
1074 |
from: activeElementIndex,
|
1075 |
to: nextElementIndex
|
1076 |
});
|
1077 |
|
1078 |
-
if ($(this._element).hasClass(
|
1079 |
$(nextElement).addClass(orderClassName);
|
1080 |
Util.reflow(nextElement);
|
1081 |
$(activeElement).addClass(directionalClassName);
|
@@ -1091,16 +1070,16 @@
|
|
1091 |
|
1092 |
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
|
1093 |
$(activeElement).one(Util.TRANSITION_END, function () {
|
1094 |
-
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(
|
1095 |
-
$(activeElement).removeClass(
|
1096 |
_this4._isSliding = false;
|
1097 |
setTimeout(function () {
|
1098 |
return $(_this4._element).trigger(slidEvent);
|
1099 |
}, 0);
|
1100 |
}).emulateTransitionEnd(transitionDuration);
|
1101 |
} else {
|
1102 |
-
$(activeElement).removeClass(
|
1103 |
-
$(nextElement).addClass(
|
1104 |
this._isSliding = false;
|
1105 |
$(this._element).trigger(slidEvent);
|
1106 |
}
|
@@ -1115,10 +1094,10 @@
|
|
1115 |
return this.each(function () {
|
1116 |
var data = $(this).data(DATA_KEY$2);
|
1117 |
|
1118 |
-
var _config = _objectSpread2({}, Default,
|
1119 |
|
1120 |
if (typeof config === 'object') {
|
1121 |
-
_config = _objectSpread2({}, _config,
|
1122 |
}
|
1123 |
|
1124 |
var action = typeof config === 'string' ? config : _config.slide;
|
@@ -1152,11 +1131,11 @@
|
|
1152 |
|
1153 |
var target = $(selector)[0];
|
1154 |
|
1155 |
-
if (!target || !$(target).hasClass(
|
1156 |
return;
|
1157 |
}
|
1158 |
|
1159 |
-
var config = _objectSpread2({}, $(target).data(),
|
1160 |
|
1161 |
var slideIndex = this.getAttribute('data-slide-to');
|
1162 |
|
@@ -1194,9 +1173,9 @@
|
|
1194 |
*/
|
1195 |
|
1196 |
|
1197 |
-
$(document).on(
|
1198 |
-
$(window).on(
|
1199 |
-
var carousels = [].slice.call(document.querySelectorAll(
|
1200 |
|
1201 |
for (var i = 0, len = carousels.length; i < len; i++) {
|
1202 |
var $carousel = $(carousels[i]);
|
@@ -1225,7 +1204,7 @@
|
|
1225 |
*/
|
1226 |
|
1227 |
var NAME$3 = 'collapse';
|
1228 |
-
var VERSION$3 = '4.
|
1229 |
var DATA_KEY$3 = 'bs.collapse';
|
1230 |
var EVENT_KEY$3 = "." + DATA_KEY$3;
|
1231 |
var DATA_API_KEY$3 = '.data-api';
|
@@ -1238,42 +1217,32 @@
|
|
1238 |
toggle: 'boolean',
|
1239 |
parent: '(string|element)'
|
1240 |
};
|
1241 |
-
var
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
var
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
var Dimension = {
|
1255 |
-
WIDTH: 'width',
|
1256 |
-
HEIGHT: 'height'
|
1257 |
-
};
|
1258 |
-
var Selector$3 = {
|
1259 |
-
ACTIVES: '.show, .collapsing',
|
1260 |
-
DATA_TOGGLE: '[data-toggle="collapse"]'
|
1261 |
-
};
|
1262 |
/**
|
1263 |
* ------------------------------------------------------------------------
|
1264 |
* Class Definition
|
1265 |
* ------------------------------------------------------------------------
|
1266 |
*/
|
1267 |
|
1268 |
-
var Collapse =
|
1269 |
-
/*#__PURE__*/
|
1270 |
-
function () {
|
1271 |
function Collapse(element, config) {
|
1272 |
this._isTransitioning = false;
|
1273 |
this._element = element;
|
1274 |
this._config = this._getConfig(config);
|
1275 |
this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
|
1276 |
-
var toggleList = [].slice.call(document.querySelectorAll(
|
1277 |
|
1278 |
for (var i = 0, len = toggleList.length; i < len; i++) {
|
1279 |
var elem = toggleList[i];
|
@@ -1305,7 +1274,7 @@
|
|
1305 |
|
1306 |
// Public
|
1307 |
_proto.toggle = function toggle() {
|
1308 |
-
if ($(this._element).hasClass(
|
1309 |
this.hide();
|
1310 |
} else {
|
1311 |
this.show();
|
@@ -1315,7 +1284,7 @@
|
|
1315 |
_proto.show = function show() {
|
1316 |
var _this = this;
|
1317 |
|
1318 |
-
if (this._isTransitioning || $(this._element).hasClass(
|
1319 |
return;
|
1320 |
}
|
1321 |
|
@@ -1323,12 +1292,12 @@
|
|
1323 |
var activesData;
|
1324 |
|
1325 |
if (this._parent) {
|
1326 |
-
actives = [].slice.call(this._parent.querySelectorAll(
|
1327 |
if (typeof _this._config.parent === 'string') {
|
1328 |
return elem.getAttribute('data-parent') === _this._config.parent;
|
1329 |
}
|
1330 |
|
1331 |
-
return elem.classList.contains(
|
1332 |
});
|
1333 |
|
1334 |
if (actives.length === 0) {
|
@@ -1344,7 +1313,7 @@
|
|
1344 |
}
|
1345 |
}
|
1346 |
|
1347 |
-
var startEvent = $.Event(
|
1348 |
$(this._element).trigger(startEvent);
|
1349 |
|
1350 |
if (startEvent.isDefaultPrevented()) {
|
@@ -1361,22 +1330,22 @@
|
|
1361 |
|
1362 |
var dimension = this._getDimension();
|
1363 |
|
1364 |
-
$(this._element).removeClass(
|
1365 |
this._element.style[dimension] = 0;
|
1366 |
|
1367 |
if (this._triggerArray.length) {
|
1368 |
-
$(this._triggerArray).removeClass(
|
1369 |
}
|
1370 |
|
1371 |
this.setTransitioning(true);
|
1372 |
|
1373 |
var complete = function complete() {
|
1374 |
-
$(_this._element).removeClass(
|
1375 |
_this._element.style[dimension] = '';
|
1376 |
|
1377 |
_this.setTransitioning(false);
|
1378 |
|
1379 |
-
$(_this._element).trigger(
|
1380 |
};
|
1381 |
|
1382 |
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
@@ -1389,11 +1358,11 @@
|
|
1389 |
_proto.hide = function hide() {
|
1390 |
var _this2 = this;
|
1391 |
|
1392 |
-
if (this._isTransitioning || !$(this._element).hasClass(
|
1393 |
return;
|
1394 |
}
|
1395 |
|
1396 |
-
var startEvent = $.Event(
|
1397 |
$(this._element).trigger(startEvent);
|
1398 |
|
1399 |
if (startEvent.isDefaultPrevented()) {
|
@@ -1404,7 +1373,7 @@
|
|
1404 |
|
1405 |
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
|
1406 |
Util.reflow(this._element);
|
1407 |
-
$(this._element).addClass(
|
1408 |
var triggerArrayLength = this._triggerArray.length;
|
1409 |
|
1410 |
if (triggerArrayLength > 0) {
|
@@ -1415,8 +1384,8 @@
|
|
1415 |
if (selector !== null) {
|
1416 |
var $elem = $([].slice.call(document.querySelectorAll(selector)));
|
1417 |
|
1418 |
-
if (!$elem.hasClass(
|
1419 |
-
$(trigger).addClass(
|
1420 |
}
|
1421 |
}
|
1422 |
}
|
@@ -1427,7 +1396,7 @@
|
|
1427 |
var complete = function complete() {
|
1428 |
_this2.setTransitioning(false);
|
1429 |
|
1430 |
-
$(_this2._element).removeClass(
|
1431 |
};
|
1432 |
|
1433 |
this._element.style[dimension] = '';
|
@@ -1450,7 +1419,7 @@
|
|
1450 |
;
|
1451 |
|
1452 |
_proto._getConfig = function _getConfig(config) {
|
1453 |
-
config = _objectSpread2({}, Default$1,
|
1454 |
config.toggle = Boolean(config.toggle); // Coerce string values
|
1455 |
|
1456 |
Util.typeCheckConfig(NAME$3, config, DefaultType$1);
|
@@ -1458,8 +1427,8 @@
|
|
1458 |
};
|
1459 |
|
1460 |
_proto._getDimension = function _getDimension() {
|
1461 |
-
var hasWidth = $(this._element).hasClass(
|
1462 |
-
return hasWidth ?
|
1463 |
};
|
1464 |
|
1465 |
_proto._getParent = function _getParent() {
|
@@ -1486,10 +1455,10 @@
|
|
1486 |
};
|
1487 |
|
1488 |
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
|
1489 |
-
var isOpen = $(element).hasClass(
|
1490 |
|
1491 |
if (triggerArray.length) {
|
1492 |
-
$(triggerArray).toggleClass(
|
1493 |
}
|
1494 |
} // Static
|
1495 |
;
|
@@ -1504,9 +1473,9 @@
|
|
1504 |
var $this = $(this);
|
1505 |
var data = $this.data(DATA_KEY$3);
|
1506 |
|
1507 |
-
var _config = _objectSpread2({}, Default$1,
|
1508 |
|
1509 |
-
if (!data && _config.toggle && /show|hide/.test(config)) {
|
1510 |
_config.toggle = false;
|
1511 |
}
|
1512 |
|
@@ -1546,7 +1515,7 @@
|
|
1546 |
*/
|
1547 |
|
1548 |
|
1549 |
-
$(document).on(
|
1550 |
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
1551 |
if (event.currentTarget.tagName === 'A') {
|
1552 |
event.preventDefault();
|
@@ -1584,7 +1553,7 @@
|
|
1584 |
*/
|
1585 |
|
1586 |
var NAME$4 = 'dropdown';
|
1587 |
-
var VERSION$4 = '4.
|
1588 |
var DATA_KEY$4 = 'bs.dropdown';
|
1589 |
var EVENT_KEY$4 = "." + DATA_KEY$4;
|
1590 |
var DATA_API_KEY$4 = '.data-api';
|
@@ -1602,43 +1571,32 @@
|
|
1602 |
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
1603 |
|
1604 |
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
|
1605 |
-
var
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
|
1612 |
-
|
1613 |
-
|
1614 |
-
|
1615 |
-
var
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
|
1624 |
-
|
1625 |
-
var
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
1631 |
-
};
|
1632 |
-
var AttachmentMap = {
|
1633 |
-
TOP: 'top-start',
|
1634 |
-
TOPEND: 'top-end',
|
1635 |
-
BOTTOM: 'bottom-start',
|
1636 |
-
BOTTOMEND: 'bottom-end',
|
1637 |
-
RIGHT: 'right-start',
|
1638 |
-
RIGHTEND: 'right-end',
|
1639 |
-
LEFT: 'left-start',
|
1640 |
-
LEFTEND: 'left-end'
|
1641 |
-
};
|
1642 |
var Default$2 = {
|
1643 |
offset: 0,
|
1644 |
flip: true,
|
@@ -1661,9 +1619,7 @@
|
|
1661 |
* ------------------------------------------------------------------------
|
1662 |
*/
|
1663 |
|
1664 |
-
var Dropdown =
|
1665 |
-
/*#__PURE__*/
|
1666 |
-
function () {
|
1667 |
function Dropdown(element, config) {
|
1668 |
this._element = element;
|
1669 |
this._popper = null;
|
@@ -1679,11 +1635,11 @@
|
|
1679 |
|
1680 |
// Public
|
1681 |
_proto.toggle = function toggle() {
|
1682 |
-
if (this._element.disabled || $(this._element).hasClass(
|
1683 |
return;
|
1684 |
}
|
1685 |
|
1686 |
-
var isActive = $(this._menu).hasClass(
|
1687 |
|
1688 |
Dropdown._clearMenus();
|
1689 |
|
@@ -1699,14 +1655,14 @@
|
|
1699 |
usePopper = false;
|
1700 |
}
|
1701 |
|
1702 |
-
if (this._element.disabled || $(this._element).hasClass(
|
1703 |
return;
|
1704 |
}
|
1705 |
|
1706 |
var relatedTarget = {
|
1707 |
relatedTarget: this._element
|
1708 |
};
|
1709 |
-
var showEvent = $.Event(
|
1710 |
|
1711 |
var parent = Dropdown._getParentFromElement(this._element);
|
1712 |
|
@@ -1742,7 +1698,7 @@
|
|
1742 |
|
1743 |
|
1744 |
if (this._config.boundary !== 'scrollParent') {
|
1745 |
-
$(parent).addClass(
|
1746 |
}
|
1747 |
|
1748 |
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
@@ -1752,7 +1708,7 @@
|
|
1752 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
1753 |
|
1754 |
|
1755 |
-
if ('ontouchstart' in document.documentElement && $(parent).closest(
|
1756 |
$(document.body).children().on('mouseover', null, $.noop);
|
1757 |
}
|
1758 |
|
@@ -1760,19 +1716,19 @@
|
|
1760 |
|
1761 |
this._element.setAttribute('aria-expanded', true);
|
1762 |
|
1763 |
-
$(this._menu).toggleClass(
|
1764 |
-
$(parent).toggleClass(
|
1765 |
};
|
1766 |
|
1767 |
_proto.hide = function hide() {
|
1768 |
-
if (this._element.disabled || $(this._element).hasClass(
|
1769 |
return;
|
1770 |
}
|
1771 |
|
1772 |
var relatedTarget = {
|
1773 |
relatedTarget: this._element
|
1774 |
};
|
1775 |
-
var hideEvent = $.Event(
|
1776 |
|
1777 |
var parent = Dropdown._getParentFromElement(this._element);
|
1778 |
|
@@ -1786,8 +1742,8 @@
|
|
1786 |
this._popper.destroy();
|
1787 |
}
|
1788 |
|
1789 |
-
$(this._menu).toggleClass(
|
1790 |
-
$(parent).toggleClass(
|
1791 |
};
|
1792 |
|
1793 |
_proto.dispose = function dispose() {
|
@@ -1815,7 +1771,7 @@
|
|
1815 |
_proto._addEventListeners = function _addEventListeners() {
|
1816 |
var _this = this;
|
1817 |
|
1818 |
-
$(this._element).on(
|
1819 |
event.preventDefault();
|
1820 |
event.stopPropagation();
|
1821 |
|
@@ -1824,7 +1780,7 @@
|
|
1824 |
};
|
1825 |
|
1826 |
_proto._getConfig = function _getConfig(config) {
|
1827 |
-
config = _objectSpread2({}, this.constructor.Default,
|
1828 |
Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
1829 |
return config;
|
1830 |
};
|
@@ -1834,7 +1790,7 @@
|
|
1834 |
var parent = Dropdown._getParentFromElement(this._element);
|
1835 |
|
1836 |
if (parent) {
|
1837 |
-
this._menu = parent.querySelector(
|
1838 |
}
|
1839 |
}
|
1840 |
|
@@ -1843,20 +1799,16 @@
|
|
1843 |
|
1844 |
_proto._getPlacement = function _getPlacement() {
|
1845 |
var $parentDropdown = $(this._element.parentNode);
|
1846 |
-
var placement =
|
1847 |
-
|
1848 |
-
if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
|
1849 |
-
placement = AttachmentMap.TOP;
|
1850 |
|
1851 |
-
|
1852 |
-
|
1853 |
-
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
placement = AttachmentMap.BOTTOMEND;
|
1860 |
}
|
1861 |
|
1862 |
return placement;
|
@@ -1873,7 +1825,7 @@
|
|
1873 |
|
1874 |
if (typeof this._config.offset === 'function') {
|
1875 |
offset.fn = function (data) {
|
1876 |
-
data.offsets = _objectSpread2({}, data.offsets,
|
1877 |
return data;
|
1878 |
};
|
1879 |
} else {
|
@@ -1903,7 +1855,7 @@
|
|
1903 |
};
|
1904 |
}
|
1905 |
|
1906 |
-
return _objectSpread2({}, popperConfig,
|
1907 |
} // Static
|
1908 |
;
|
1909 |
|
@@ -1933,7 +1885,7 @@
|
|
1933 |
return;
|
1934 |
}
|
1935 |
|
1936 |
-
var toggles = [].slice.call(document.querySelectorAll(
|
1937 |
|
1938 |
for (var i = 0, len = toggles.length; i < len; i++) {
|
1939 |
var parent = Dropdown._getParentFromElement(toggles[i]);
|
@@ -1953,7 +1905,7 @@
|
|
1953 |
|
1954 |
var dropdownMenu = context._menu;
|
1955 |
|
1956 |
-
if (!$(parent).hasClass(
|
1957 |
continue;
|
1958 |
}
|
1959 |
|
@@ -1961,7 +1913,7 @@
|
|
1961 |
continue;
|
1962 |
}
|
1963 |
|
1964 |
-
var hideEvent = $.Event(
|
1965 |
$(parent).trigger(hideEvent);
|
1966 |
|
1967 |
if (hideEvent.isDefaultPrevented()) {
|
@@ -1980,8 +1932,8 @@
|
|
1980 |
context._popper.destroy();
|
1981 |
}
|
1982 |
|
1983 |
-
$(dropdownMenu).removeClass(
|
1984 |
-
$(parent).removeClass(
|
1985 |
}
|
1986 |
};
|
1987 |
|
@@ -2005,36 +1957,35 @@
|
|
2005 |
// - If key is other than escape
|
2006 |
// - If key is not up or down => not a dropdown command
|
2007 |
// - If trigger inside the menu => not a dropdown command
|
2008 |
-
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(
|
2009 |
return;
|
2010 |
}
|
2011 |
|
2012 |
-
|
2013 |
-
event.stopPropagation();
|
2014 |
-
|
2015 |
-
if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
|
2016 |
return;
|
2017 |
}
|
2018 |
|
2019 |
var parent = Dropdown._getParentFromElement(this);
|
2020 |
|
2021 |
-
var isActive = $(parent).hasClass(
|
2022 |
|
2023 |
if (!isActive && event.which === ESCAPE_KEYCODE) {
|
2024 |
return;
|
2025 |
}
|
2026 |
|
|
|
|
|
|
|
2027 |
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
2028 |
if (event.which === ESCAPE_KEYCODE) {
|
2029 |
-
|
2030 |
-
$(toggle).trigger('focus');
|
2031 |
}
|
2032 |
|
2033 |
$(this).trigger('click');
|
2034 |
return;
|
2035 |
}
|
2036 |
|
2037 |
-
var items = [].slice.call(parent.querySelectorAll(
|
2038 |
return $(item).is(':visible');
|
2039 |
});
|
2040 |
|
@@ -2087,12 +2038,12 @@
|
|
2087 |
*/
|
2088 |
|
2089 |
|
2090 |
-
$(document).on(
|
2091 |
event.preventDefault();
|
2092 |
event.stopPropagation();
|
2093 |
|
2094 |
Dropdown._jQueryInterface.call($(this), 'toggle');
|
2095 |
-
}).on(
|
2096 |
e.stopPropagation();
|
2097 |
});
|
2098 |
/**
|
@@ -2116,7 +2067,7 @@
|
|
2116 |
*/
|
2117 |
|
2118 |
var NAME$5 = 'modal';
|
2119 |
-
var VERSION$5 = '4.
|
2120 |
var DATA_KEY$5 = 'bs.modal';
|
2121 |
var EVENT_KEY$5 = "." + DATA_KEY$5;
|
2122 |
var DATA_API_KEY$5 = '.data-api';
|
@@ -2135,50 +2086,42 @@
|
|
2135 |
focus: 'boolean',
|
2136 |
show: 'boolean'
|
2137 |
};
|
2138 |
-
var
|
2139 |
-
|
2140 |
-
|
2141 |
-
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
|
2146 |
-
|
2147 |
-
|
2148 |
-
|
2149 |
-
|
2150 |
-
|
2151 |
-
|
2152 |
-
var
|
2153 |
-
|
2154 |
-
|
2155 |
-
|
2156 |
-
|
2157 |
-
|
2158 |
-
|
2159 |
-
|
2160 |
-
|
2161 |
-
var
|
2162 |
-
|
2163 |
-
MODAL_BODY: '.modal-body',
|
2164 |
-
DATA_TOGGLE: '[data-toggle="modal"]',
|
2165 |
-
DATA_DISMISS: '[data-dismiss="modal"]',
|
2166 |
-
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
|
2167 |
-
STICKY_CONTENT: '.sticky-top'
|
2168 |
-
};
|
2169 |
/**
|
2170 |
* ------------------------------------------------------------------------
|
2171 |
* Class Definition
|
2172 |
* ------------------------------------------------------------------------
|
2173 |
*/
|
2174 |
|
2175 |
-
var Modal =
|
2176 |
-
/*#__PURE__*/
|
2177 |
-
function () {
|
2178 |
function Modal(element, config) {
|
2179 |
this._config = this._getConfig(config);
|
2180 |
this._element = element;
|
2181 |
-
this._dialog = element.querySelector(
|
2182 |
this._backdrop = null;
|
2183 |
this._isShown = false;
|
2184 |
this._isBodyOverflowing = false;
|
@@ -2202,11 +2145,11 @@
|
|
2202 |
return;
|
2203 |
}
|
2204 |
|
2205 |
-
if ($(this._element).hasClass(
|
2206 |
this._isTransitioning = true;
|
2207 |
}
|
2208 |
|
2209 |
-
var showEvent = $.Event(
|
2210 |
relatedTarget: relatedTarget
|
2211 |
});
|
2212 |
$(this._element).trigger(showEvent);
|
@@ -2227,11 +2170,11 @@
|
|
2227 |
|
2228 |
this._setResizeEvent();
|
2229 |
|
2230 |
-
$(this._element).on(
|
2231 |
return _this.hide(event);
|
2232 |
});
|
2233 |
-
$(this._dialog).on(
|
2234 |
-
$(_this._element).one(
|
2235 |
if ($(event.target).is(_this._element)) {
|
2236 |
_this._ignoreBackdropClick = true;
|
2237 |
}
|
@@ -2254,7 +2197,7 @@
|
|
2254 |
return;
|
2255 |
}
|
2256 |
|
2257 |
-
var hideEvent = $.Event(
|
2258 |
$(this._element).trigger(hideEvent);
|
2259 |
|
2260 |
if (!this._isShown || hideEvent.isDefaultPrevented()) {
|
@@ -2262,7 +2205,7 @@
|
|
2262 |
}
|
2263 |
|
2264 |
this._isShown = false;
|
2265 |
-
var transition = $(this._element).hasClass(
|
2266 |
|
2267 |
if (transition) {
|
2268 |
this._isTransitioning = true;
|
@@ -2272,10 +2215,10 @@
|
|
2272 |
|
2273 |
this._setResizeEvent();
|
2274 |
|
2275 |
-
$(document).off(
|
2276 |
-
$(this._element).removeClass(
|
2277 |
-
$(this._element).off(
|
2278 |
-
$(this._dialog).off(
|
2279 |
|
2280 |
if (transition) {
|
2281 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
@@ -2292,12 +2235,12 @@
|
|
2292 |
return $(htmlElement).off(EVENT_KEY$5);
|
2293 |
});
|
2294 |
/**
|
2295 |
-
* `document` has 2 events `
|
2296 |
* Do not move `document` in `htmlElements` array
|
2297 |
-
* It will remove `
|
2298 |
*/
|
2299 |
|
2300 |
-
$(document).off(
|
2301 |
$.removeData(this._element, DATA_KEY$5);
|
2302 |
this._config = null;
|
2303 |
this._element = null;
|
@@ -2316,7 +2259,7 @@
|
|
2316 |
;
|
2317 |
|
2318 |
_proto._getConfig = function _getConfig(config) {
|
2319 |
-
config = _objectSpread2({}, Default$3,
|
2320 |
Util.typeCheckConfig(NAME$5, config, DefaultType$3);
|
2321 |
return config;
|
2322 |
};
|
@@ -2325,18 +2268,18 @@
|
|
2325 |
var _this3 = this;
|
2326 |
|
2327 |
if (this._config.backdrop === 'static') {
|
2328 |
-
var hideEventPrevented = $.Event(
|
2329 |
$(this._element).trigger(hideEventPrevented);
|
2330 |
|
2331 |
if (hideEventPrevented.defaultPrevented) {
|
2332 |
return;
|
2333 |
}
|
2334 |
|
2335 |
-
this._element.classList.add(
|
2336 |
|
2337 |
var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
|
2338 |
$(this._element).one(Util.TRANSITION_END, function () {
|
2339 |
-
_this3._element.classList.remove(
|
2340 |
}).emulateTransitionEnd(modalTransitionDuration);
|
2341 |
|
2342 |
this._element.focus();
|
@@ -2348,8 +2291,8 @@
|
|
2348 |
_proto._showElement = function _showElement(relatedTarget) {
|
2349 |
var _this4 = this;
|
2350 |
|
2351 |
-
var transition = $(this._element).hasClass(
|
2352 |
-
var modalBody = this._dialog ? this._dialog.querySelector(
|
2353 |
|
2354 |
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
2355 |
// Don't move modal's DOM position
|
@@ -2362,7 +2305,7 @@
|
|
2362 |
|
2363 |
this._element.setAttribute('aria-modal', true);
|
2364 |
|
2365 |
-
if ($(this._dialog).hasClass(
|
2366 |
modalBody.scrollTop = 0;
|
2367 |
} else {
|
2368 |
this._element.scrollTop = 0;
|
@@ -2372,13 +2315,13 @@
|
|
2372 |
Util.reflow(this._element);
|
2373 |
}
|
2374 |
|
2375 |
-
$(this._element).addClass(
|
2376 |
|
2377 |
if (this._config.focus) {
|
2378 |
this._enforceFocus();
|
2379 |
}
|
2380 |
|
2381 |
-
var shownEvent = $.Event(
|
2382 |
relatedTarget: relatedTarget
|
2383 |
});
|
2384 |
|
@@ -2402,8 +2345,8 @@
|
|
2402 |
_proto._enforceFocus = function _enforceFocus() {
|
2403 |
var _this5 = this;
|
2404 |
|
2405 |
-
$(document).off(
|
2406 |
-
.on(
|
2407 |
if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
|
2408 |
_this5._element.focus();
|
2409 |
}
|
@@ -2413,14 +2356,18 @@
|
|
2413 |
_proto._setEscapeEvent = function _setEscapeEvent() {
|
2414 |
var _this6 = this;
|
2415 |
|
2416 |
-
if (this._isShown
|
2417 |
-
$(this._element).on(
|
2418 |
-
if (event.which === ESCAPE_KEYCODE$1) {
|
|
|
|
|
|
|
|
|
2419 |
_this6._triggerBackdropTransition();
|
2420 |
}
|
2421 |
});
|
2422 |
} else if (!this._isShown) {
|
2423 |
-
$(this._element).off(
|
2424 |
}
|
2425 |
};
|
2426 |
|
@@ -2428,11 +2375,11 @@
|
|
2428 |
var _this7 = this;
|
2429 |
|
2430 |
if (this._isShown) {
|
2431 |
-
$(window).on(
|
2432 |
return _this7.handleUpdate(event);
|
2433 |
});
|
2434 |
} else {
|
2435 |
-
$(window).off(
|
2436 |
}
|
2437 |
};
|
2438 |
|
@@ -2448,13 +2395,13 @@
|
|
2448 |
this._isTransitioning = false;
|
2449 |
|
2450 |
this._showBackdrop(function () {
|
2451 |
-
$(document.body).removeClass(
|
2452 |
|
2453 |
_this8._resetAdjustments();
|
2454 |
|
2455 |
_this8._resetScrollbar();
|
2456 |
|
2457 |
-
$(_this8._element).trigger(
|
2458 |
});
|
2459 |
};
|
2460 |
|
@@ -2468,18 +2415,18 @@
|
|
2468 |
_proto._showBackdrop = function _showBackdrop(callback) {
|
2469 |
var _this9 = this;
|
2470 |
|
2471 |
-
var animate = $(this._element).hasClass(
|
2472 |
|
2473 |
if (this._isShown && this._config.backdrop) {
|
2474 |
this._backdrop = document.createElement('div');
|
2475 |
-
this._backdrop.className =
|
2476 |
|
2477 |
if (animate) {
|
2478 |
this._backdrop.classList.add(animate);
|
2479 |
}
|
2480 |
|
2481 |
$(this._backdrop).appendTo(document.body);
|
2482 |
-
$(this._element).on(
|
2483 |
if (_this9._ignoreBackdropClick) {
|
2484 |
_this9._ignoreBackdropClick = false;
|
2485 |
return;
|
@@ -2496,7 +2443,7 @@
|
|
2496 |
Util.reflow(this._backdrop);
|
2497 |
}
|
2498 |
|
2499 |
-
$(this._backdrop).addClass(
|
2500 |
|
2501 |
if (!callback) {
|
2502 |
return;
|
@@ -2510,7 +2457,7 @@
|
|
2510 |
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
2511 |
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
|
2512 |
} else if (!this._isShown && this._backdrop) {
|
2513 |
-
$(this._backdrop).removeClass(
|
2514 |
|
2515 |
var callbackRemove = function callbackRemove() {
|
2516 |
_this9._removeBackdrop();
|
@@ -2520,7 +2467,7 @@
|
|
2520 |
}
|
2521 |
};
|
2522 |
|
2523 |
-
if ($(this._element).hasClass(
|
2524 |
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
2525 |
|
2526 |
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
|
@@ -2555,7 +2502,7 @@
|
|
2555 |
|
2556 |
_proto._checkScrollbar = function _checkScrollbar() {
|
2557 |
var rect = document.body.getBoundingClientRect();
|
2558 |
-
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
|
2559 |
this._scrollbarWidth = this._getScrollbarWidth();
|
2560 |
};
|
2561 |
|
@@ -2565,8 +2512,8 @@
|
|
2565 |
if (this._isBodyOverflowing) {
|
2566 |
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
2567 |
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
2568 |
-
var fixedContent = [].slice.call(document.querySelectorAll(
|
2569 |
-
var stickyContent = [].slice.call(document.querySelectorAll(
|
2570 |
|
2571 |
$(fixedContent).each(function (index, element) {
|
2572 |
var actualPadding = element.style.paddingRight;
|
@@ -2585,19 +2532,19 @@
|
|
2585 |
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
|
2586 |
}
|
2587 |
|
2588 |
-
$(document.body).addClass(
|
2589 |
};
|
2590 |
|
2591 |
_proto._resetScrollbar = function _resetScrollbar() {
|
2592 |
// Restore fixed content padding
|
2593 |
-
var fixedContent = [].slice.call(document.querySelectorAll(
|
2594 |
$(fixedContent).each(function (index, element) {
|
2595 |
var padding = $(element).data('padding-right');
|
2596 |
$(element).removeData('padding-right');
|
2597 |
element.style.paddingRight = padding ? padding : '';
|
2598 |
}); // Restore sticky content
|
2599 |
|
2600 |
-
var elements = [].slice.call(document.querySelectorAll("" +
|
2601 |
$(elements).each(function (index, element) {
|
2602 |
var margin = $(element).data('margin-right');
|
2603 |
|
@@ -2614,7 +2561,7 @@
|
|
2614 |
_proto._getScrollbarWidth = function _getScrollbarWidth() {
|
2615 |
// thx d.walsh
|
2616 |
var scrollDiv = document.createElement('div');
|
2617 |
-
scrollDiv.className =
|
2618 |
document.body.appendChild(scrollDiv);
|
2619 |
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
2620 |
document.body.removeChild(scrollDiv);
|
@@ -2626,7 +2573,7 @@
|
|
2626 |
return this.each(function () {
|
2627 |
var data = $(this).data(DATA_KEY$5);
|
2628 |
|
2629 |
-
var _config = _objectSpread2({}, Default$3,
|
2630 |
|
2631 |
if (!data) {
|
2632 |
data = new Modal(this, _config);
|
@@ -2666,7 +2613,7 @@
|
|
2666 |
*/
|
2667 |
|
2668 |
|
2669 |
-
$(document).on(
|
2670 |
var _this11 = this;
|
2671 |
|
2672 |
var target;
|
@@ -2676,19 +2623,19 @@
|
|
2676 |
target = document.querySelector(selector);
|
2677 |
}
|
2678 |
|
2679 |
-
var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(),
|
2680 |
|
2681 |
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
2682 |
event.preventDefault();
|
2683 |
}
|
2684 |
|
2685 |
-
var $target = $(target).one(
|
2686 |
if (showEvent.isDefaultPrevented()) {
|
2687 |
// Only register focus restorer if modal will actually get shown
|
2688 |
return;
|
2689 |
}
|
2690 |
|
2691 |
-
$target.one(
|
2692 |
if ($(_this11).is(':visible')) {
|
2693 |
_this11.focus();
|
2694 |
}
|
@@ -2713,7 +2660,7 @@
|
|
2713 |
|
2714 |
/**
|
2715 |
* --------------------------------------------------------------------------
|
2716 |
-
* Bootstrap (v4.
|
2717 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2718 |
* --------------------------------------------------------------------------
|
2719 |
*/
|
@@ -2738,7 +2685,7 @@
|
|
2738 |
h5: [],
|
2739 |
h6: [],
|
2740 |
i: [],
|
2741 |
-
img: ['src', 'alt', 'title', 'width', 'height'],
|
2742 |
li: [],
|
2743 |
ol: [],
|
2744 |
p: [],
|
@@ -2758,14 +2705,14 @@
|
|
2758 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
2759 |
*/
|
2760 |
|
2761 |
-
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[
|
2762 |
/**
|
2763 |
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
2764 |
*
|
2765 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
2766 |
*/
|
2767 |
|
2768 |
-
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-
|
2769 |
|
2770 |
function allowedAttribute(attr, allowedAttributeList) {
|
2771 |
var attrName = attr.nodeName.toLowerCase();
|
@@ -2782,7 +2729,7 @@
|
|
2782 |
return attrRegex instanceof RegExp;
|
2783 |
}); // Check if a regular expression validates the attribute.
|
2784 |
|
2785 |
-
for (var i = 0,
|
2786 |
if (attrName.match(regExp[i])) {
|
2787 |
return true;
|
2788 |
}
|
@@ -2839,7 +2786,7 @@
|
|
2839 |
*/
|
2840 |
|
2841 |
var NAME$6 = 'tooltip';
|
2842 |
-
var VERSION$6 = '4.
|
2843 |
var DATA_KEY$6 = 'bs.tooltip';
|
2844 |
var EVENT_KEY$6 = "." + DATA_KEY$6;
|
2845 |
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
|
@@ -2864,7 +2811,7 @@
|
|
2864 |
whiteList: 'object',
|
2865 |
popperConfig: '(null|object)'
|
2866 |
};
|
2867 |
-
var AttachmentMap
|
2868 |
AUTO: 'auto',
|
2869 |
TOP: 'top',
|
2870 |
RIGHT: 'right',
|
@@ -2889,11 +2836,9 @@
|
|
2889 |
whiteList: DefaultWhitelist,
|
2890 |
popperConfig: null
|
2891 |
};
|
2892 |
-
var
|
2893 |
-
|
2894 |
-
|
2895 |
-
};
|
2896 |
-
var Event$6 = {
|
2897 |
HIDE: "hide" + EVENT_KEY$6,
|
2898 |
HIDDEN: "hidden" + EVENT_KEY$6,
|
2899 |
SHOW: "show" + EVENT_KEY$6,
|
@@ -2905,30 +2850,21 @@
|
|
2905 |
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
|
2906 |
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
|
2907 |
};
|
2908 |
-
var
|
2909 |
-
|
2910 |
-
|
2911 |
-
|
2912 |
-
var
|
2913 |
-
|
2914 |
-
|
2915 |
-
|
2916 |
-
};
|
2917 |
-
var Trigger = {
|
2918 |
-
HOVER: 'hover',
|
2919 |
-
FOCUS: 'focus',
|
2920 |
-
CLICK: 'click',
|
2921 |
-
MANUAL: 'manual'
|
2922 |
-
};
|
2923 |
/**
|
2924 |
* ------------------------------------------------------------------------
|
2925 |
* Class Definition
|
2926 |
* ------------------------------------------------------------------------
|
2927 |
*/
|
2928 |
|
2929 |
-
var Tooltip =
|
2930 |
-
/*#__PURE__*/
|
2931 |
-
function () {
|
2932 |
function Tooltip(element, config) {
|
2933 |
if (typeof Popper === 'undefined') {
|
2934 |
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
|
@@ -2986,7 +2922,7 @@
|
|
2986 |
context._leave(null, context);
|
2987 |
}
|
2988 |
} else {
|
2989 |
-
if ($(this.getTipElement()).hasClass(
|
2990 |
this._leave(null, this);
|
2991 |
|
2992 |
return;
|
@@ -3046,7 +2982,7 @@
|
|
3046 |
this.setContent();
|
3047 |
|
3048 |
if (this.config.animation) {
|
3049 |
-
$(tip).addClass(
|
3050 |
}
|
3051 |
|
3052 |
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
|
@@ -3065,7 +3001,7 @@
|
|
3065 |
|
3066 |
$(this.element).trigger(this.constructor.Event.INSERTED);
|
3067 |
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
|
3068 |
-
$(tip).addClass(
|
3069 |
// empty mouseover listeners to the body's immediate children;
|
3070 |
// only needed because of broken event delegation on iOS
|
3071 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
@@ -3083,12 +3019,12 @@
|
|
3083 |
_this._hoverState = null;
|
3084 |
$(_this.element).trigger(_this.constructor.Event.SHOWN);
|
3085 |
|
3086 |
-
if (prevHoverState ===
|
3087 |
_this._leave(null, _this);
|
3088 |
}
|
3089 |
};
|
3090 |
|
3091 |
-
if ($(this.tip).hasClass(
|
3092 |
var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
|
3093 |
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
3094 |
} else {
|
@@ -3104,7 +3040,7 @@
|
|
3104 |
var hideEvent = $.Event(this.constructor.Event.HIDE);
|
3105 |
|
3106 |
var complete = function complete() {
|
3107 |
-
if (_this2._hoverState !==
|
3108 |
tip.parentNode.removeChild(tip);
|
3109 |
}
|
3110 |
|
@@ -3129,18 +3065,18 @@
|
|
3129 |
return;
|
3130 |
}
|
3131 |
|
3132 |
-
$(tip).removeClass(
|
3133 |
// empty mouseover listeners we added for iOS support
|
3134 |
|
3135 |
if ('ontouchstart' in document.documentElement) {
|
3136 |
$(document.body).children().off('mouseover', null, $.noop);
|
3137 |
}
|
3138 |
|
3139 |
-
this._activeTrigger[
|
3140 |
-
this._activeTrigger[
|
3141 |
-
this._activeTrigger[
|
3142 |
|
3143 |
-
if ($(this.tip).hasClass(
|
3144 |
var transitionDuration = Util.getTransitionDurationFromElement(tip);
|
3145 |
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
3146 |
} else {
|
@@ -3172,8 +3108,8 @@
|
|
3172 |
|
3173 |
_proto.setContent = function setContent() {
|
3174 |
var tip = this.getTipElement();
|
3175 |
-
this.setElementContent($(tip.querySelectorAll(
|
3176 |
-
$(tip).removeClass(
|
3177 |
};
|
3178 |
|
3179 |
_proto.setElementContent = function setElementContent($element, content) {
|
@@ -3223,7 +3159,7 @@
|
|
3223 |
behavior: this.config.fallbackPlacement
|
3224 |
},
|
3225 |
arrow: {
|
3226 |
-
element:
|
3227 |
},
|
3228 |
preventOverflow: {
|
3229 |
boundariesElement: this.config.boundary
|
@@ -3238,7 +3174,7 @@
|
|
3238 |
return _this3._handlePopperPlacementChange(data);
|
3239 |
}
|
3240 |
};
|
3241 |
-
return _objectSpread2({}, defaultBsConfig,
|
3242 |
};
|
3243 |
|
3244 |
_proto._getOffset = function _getOffset() {
|
@@ -3248,7 +3184,7 @@
|
|
3248 |
|
3249 |
if (typeof this.config.offset === 'function') {
|
3250 |
offset.fn = function (data) {
|
3251 |
-
data.offsets = _objectSpread2({}, data.offsets,
|
3252 |
return data;
|
3253 |
};
|
3254 |
} else {
|
@@ -3271,7 +3207,7 @@
|
|
3271 |
};
|
3272 |
|
3273 |
_proto._getAttachment = function _getAttachment(placement) {
|
3274 |
-
return AttachmentMap
|
3275 |
};
|
3276 |
|
3277 |
_proto._setListeners = function _setListeners() {
|
@@ -3283,9 +3219,9 @@
|
|
3283 |
$(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
|
3284 |
return _this5.toggle(event);
|
3285 |
});
|
3286 |
-
} else if (trigger !==
|
3287 |
-
var eventIn = trigger ===
|
3288 |
-
var eventOut = trigger ===
|
3289 |
$(_this5.element).on(eventIn, _this5.config.selector, function (event) {
|
3290 |
return _this5._enter(event);
|
3291 |
}).on(eventOut, _this5.config.selector, function (event) {
|
@@ -3303,7 +3239,7 @@
|
|
3303 |
$(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
|
3304 |
|
3305 |
if (this.config.selector) {
|
3306 |
-
this.config = _objectSpread2({}, this.config, {
|
3307 |
trigger: 'manual',
|
3308 |
selector: ''
|
3309 |
});
|
@@ -3331,16 +3267,16 @@
|
|
3331 |
}
|
3332 |
|
3333 |
if (event) {
|
3334 |
-
context._activeTrigger[event.type === 'focusin' ?
|
3335 |
}
|
3336 |
|
3337 |
-
if ($(context.getTipElement()).hasClass(
|
3338 |
-
context._hoverState =
|
3339 |
return;
|
3340 |
}
|
3341 |
|
3342 |
clearTimeout(context._timeout);
|
3343 |
-
context._hoverState =
|
3344 |
|
3345 |
if (!context.config.delay || !context.config.delay.show) {
|
3346 |
context.show();
|
@@ -3348,7 +3284,7 @@
|
|
3348 |
}
|
3349 |
|
3350 |
context._timeout = setTimeout(function () {
|
3351 |
-
if (context._hoverState ===
|
3352 |
context.show();
|
3353 |
}
|
3354 |
}, context.config.delay.show);
|
@@ -3364,7 +3300,7 @@
|
|
3364 |
}
|
3365 |
|
3366 |
if (event) {
|
3367 |
-
context._activeTrigger[event.type === 'focusout' ?
|
3368 |
}
|
3369 |
|
3370 |
if (context._isWithActiveTrigger()) {
|
@@ -3372,7 +3308,7 @@
|
|
3372 |
}
|
3373 |
|
3374 |
clearTimeout(context._timeout);
|
3375 |
-
context._hoverState =
|
3376 |
|
3377 |
if (!context.config.delay || !context.config.delay.hide) {
|
3378 |
context.hide();
|
@@ -3380,7 +3316,7 @@
|
|
3380 |
}
|
3381 |
|
3382 |
context._timeout = setTimeout(function () {
|
3383 |
-
if (context._hoverState ===
|
3384 |
context.hide();
|
3385 |
}
|
3386 |
}, context.config.delay.hide);
|
@@ -3403,7 +3339,7 @@
|
|
3403 |
delete dataAttributes[dataAttr];
|
3404 |
}
|
3405 |
});
|
3406 |
-
config = _objectSpread2({}, this.constructor.Default,
|
3407 |
|
3408 |
if (typeof config.delay === 'number') {
|
3409 |
config.delay = {
|
@@ -3453,8 +3389,7 @@
|
|
3453 |
};
|
3454 |
|
3455 |
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
|
3456 |
-
|
3457 |
-
this.tip = popperInstance.popper;
|
3458 |
|
3459 |
this._cleanTipClass();
|
3460 |
|
@@ -3469,7 +3404,7 @@
|
|
3469 |
return;
|
3470 |
}
|
3471 |
|
3472 |
-
$(tip).removeClass(
|
3473 |
this.config.animation = false;
|
3474 |
this.hide();
|
3475 |
this.show();
|
@@ -3525,7 +3460,7 @@
|
|
3525 |
}, {
|
3526 |
key: "Event",
|
3527 |
get: function get() {
|
3528 |
-
return Event
|
3529 |
}
|
3530 |
}, {
|
3531 |
key: "EVENT_KEY",
|
@@ -3563,33 +3498,29 @@
|
|
3563 |
*/
|
3564 |
|
3565 |
var NAME$7 = 'popover';
|
3566 |
-
var VERSION$7 = '4.
|
3567 |
var DATA_KEY$7 = 'bs.popover';
|
3568 |
var EVENT_KEY$7 = "." + DATA_KEY$7;
|
3569 |
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
|
3570 |
var CLASS_PREFIX$1 = 'bs-popover';
|
3571 |
var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
|
3572 |
|
3573 |
-
var Default$5 = _objectSpread2({}, Tooltip.Default, {
|
3574 |
placement: 'right',
|
3575 |
trigger: 'click',
|
3576 |
content: '',
|
3577 |
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
3578 |
});
|
3579 |
|
3580 |
-
var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {
|
3581 |
content: '(string|element|function)'
|
3582 |
});
|
3583 |
|
3584 |
-
var
|
3585 |
-
|
3586 |
-
|
3587 |
-
|
3588 |
-
var
|
3589 |
-
TITLE: '.popover-header',
|
3590 |
-
CONTENT: '.popover-body'
|
3591 |
-
};
|
3592 |
-
var Event$7 = {
|
3593 |
HIDE: "hide" + EVENT_KEY$7,
|
3594 |
HIDDEN: "hidden" + EVENT_KEY$7,
|
3595 |
SHOW: "show" + EVENT_KEY$7,
|
@@ -3607,9 +3538,7 @@
|
|
3607 |
* ------------------------------------------------------------------------
|
3608 |
*/
|
3609 |
|
3610 |
-
var Popover =
|
3611 |
-
/*#__PURE__*/
|
3612 |
-
function (_Tooltip) {
|
3613 |
_inheritsLoose(Popover, _Tooltip);
|
3614 |
|
3615 |
function Popover() {
|
@@ -3635,7 +3564,7 @@
|
|
3635 |
_proto.setContent = function setContent() {
|
3636 |
var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
|
3637 |
|
3638 |
-
this.setElementContent($tip.find(
|
3639 |
|
3640 |
var content = this._getContent();
|
3641 |
|
@@ -3643,8 +3572,8 @@
|
|
3643 |
content = content.call(this.element);
|
3644 |
}
|
3645 |
|
3646 |
-
this.setElementContent($tip.find(
|
3647 |
-
$tip.removeClass(
|
3648 |
} // Private
|
3649 |
;
|
3650 |
|
@@ -3711,7 +3640,7 @@
|
|
3711 |
}, {
|
3712 |
key: "Event",
|
3713 |
get: function get() {
|
3714 |
-
return Event$
|
3715 |
}
|
3716 |
}, {
|
3717 |
key: "EVENT_KEY",
|
@@ -3749,7 +3678,7 @@
|
|
3749 |
*/
|
3750 |
|
3751 |
var NAME$8 = 'scrollspy';
|
3752 |
-
var VERSION$8 = '4.
|
3753 |
var DATA_KEY$8 = 'bs.scrollspy';
|
3754 |
var EVENT_KEY$8 = "." + DATA_KEY$8;
|
3755 |
var DATA_API_KEY$6 = '.data-api';
|
@@ -3764,52 +3693,40 @@
|
|
3764 |
method: 'string',
|
3765 |
target: '(string|element)'
|
3766 |
};
|
3767 |
-
var
|
3768 |
-
|
3769 |
-
|
3770 |
-
|
3771 |
-
|
3772 |
-
var
|
3773 |
-
|
3774 |
-
|
3775 |
-
|
3776 |
-
|
3777 |
-
var
|
3778 |
-
|
3779 |
-
|
3780 |
-
|
3781 |
-
|
3782 |
-
NAV_ITEMS: '.nav-item',
|
3783 |
-
LIST_ITEMS: '.list-group-item',
|
3784 |
-
DROPDOWN: '.dropdown',
|
3785 |
-
DROPDOWN_ITEMS: '.dropdown-item',
|
3786 |
-
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
3787 |
-
};
|
3788 |
-
var OffsetMethod = {
|
3789 |
-
OFFSET: 'offset',
|
3790 |
-
POSITION: 'position'
|
3791 |
-
};
|
3792 |
/**
|
3793 |
* ------------------------------------------------------------------------
|
3794 |
* Class Definition
|
3795 |
* ------------------------------------------------------------------------
|
3796 |
*/
|
3797 |
|
3798 |
-
var ScrollSpy =
|
3799 |
-
/*#__PURE__*/
|
3800 |
-
function () {
|
3801 |
function ScrollSpy(element, config) {
|
3802 |
var _this = this;
|
3803 |
|
3804 |
this._element = element;
|
3805 |
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
3806 |
this._config = this._getConfig(config);
|
3807 |
-
this._selector = this._config.target + " " +
|
3808 |
this._offsets = [];
|
3809 |
this._targets = [];
|
3810 |
this._activeTarget = null;
|
3811 |
this._scrollHeight = 0;
|
3812 |
-
$(this._scrollElement).on(
|
3813 |
return _this._process(event);
|
3814 |
});
|
3815 |
this.refresh();
|
@@ -3824,9 +3741,9 @@
|
|
3824 |
_proto.refresh = function refresh() {
|
3825 |
var _this2 = this;
|
3826 |
|
3827 |
-
var autoMethod = this._scrollElement === this._scrollElement.window ?
|
3828 |
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
3829 |
-
var offsetBase = offsetMethod ===
|
3830 |
this._offsets = [];
|
3831 |
this._targets = [];
|
3832 |
this._scrollHeight = this._getScrollHeight();
|
@@ -3875,9 +3792,9 @@
|
|
3875 |
;
|
3876 |
|
3877 |
_proto._getConfig = function _getConfig(config) {
|
3878 |
-
config = _objectSpread2({}, Default$6,
|
3879 |
|
3880 |
-
if (typeof config.target !== 'string') {
|
3881 |
var id = $(config.target).attr('id');
|
3882 |
|
3883 |
if (!id) {
|
@@ -3933,9 +3850,7 @@
|
|
3933 |
return;
|
3934 |
}
|
3935 |
|
3936 |
-
var
|
3937 |
-
|
3938 |
-
for (var i = offsetLength; i--;) {
|
3939 |
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
3940 |
|
3941 |
if (isActiveTarget) {
|
@@ -3955,29 +3870,29 @@
|
|
3955 |
|
3956 |
var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
|
3957 |
|
3958 |
-
if ($link.hasClass(
|
3959 |
-
$link.closest(
|
3960 |
-
$link.addClass(
|
3961 |
} else {
|
3962 |
// Set triggered link as active
|
3963 |
-
$link.addClass(
|
3964 |
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
3965 |
|
3966 |
-
$link.parents(
|
3967 |
|
3968 |
-
$link.parents(
|
3969 |
}
|
3970 |
|
3971 |
-
$(this._scrollElement).trigger(
|
3972 |
relatedTarget: target
|
3973 |
});
|
3974 |
};
|
3975 |
|
3976 |
_proto._clear = function _clear() {
|
3977 |
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
|
3978 |
-
return node.classList.contains(
|
3979 |
}).forEach(function (node) {
|
3980 |
-
return node.classList.remove(
|
3981 |
});
|
3982 |
} // Static
|
3983 |
;
|
@@ -4024,8 +3939,8 @@
|
|
4024 |
*/
|
4025 |
|
4026 |
|
4027 |
-
$(window).on(
|
4028 |
-
var scrollSpys = [].slice.call(document.querySelectorAll(
|
4029 |
var scrollSpysLength = scrollSpys.length;
|
4030 |
|
4031 |
for (var i = scrollSpysLength; i--;) {
|
@@ -4055,43 +3970,35 @@
|
|
4055 |
*/
|
4056 |
|
4057 |
var NAME$9 = 'tab';
|
4058 |
-
var VERSION$9 = '4.
|
4059 |
var DATA_KEY$9 = 'bs.tab';
|
4060 |
var EVENT_KEY$9 = "." + DATA_KEY$9;
|
4061 |
var DATA_API_KEY$7 = '.data-api';
|
4062 |
var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
|
4063 |
-
var
|
4064 |
-
|
4065 |
-
|
4066 |
-
|
4067 |
-
|
4068 |
-
|
4069 |
-
|
4070 |
-
var
|
4071 |
-
|
4072 |
-
|
4073 |
-
|
4074 |
-
|
4075 |
-
|
4076 |
-
|
4077 |
-
var
|
4078 |
-
|
4079 |
-
|
4080 |
-
ACTIVE: '.active',
|
4081 |
-
ACTIVE_UL: '> li > .active',
|
4082 |
-
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
4083 |
-
DROPDOWN_TOGGLE: '.dropdown-toggle',
|
4084 |
-
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
|
4085 |
-
};
|
4086 |
/**
|
4087 |
* ------------------------------------------------------------------------
|
4088 |
* Class Definition
|
4089 |
* ------------------------------------------------------------------------
|
4090 |
*/
|
4091 |
|
4092 |
-
var Tab =
|
4093 |
-
/*#__PURE__*/
|
4094 |
-
function () {
|
4095 |
function Tab(element) {
|
4096 |
this._element = element;
|
4097 |
} // Getters
|
@@ -4103,25 +4010,25 @@
|
|
4103 |
_proto.show = function show() {
|
4104 |
var _this = this;
|
4105 |
|
4106 |
-
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(
|
4107 |
return;
|
4108 |
}
|
4109 |
|
4110 |
var target;
|
4111 |
var previous;
|
4112 |
-
var listElement = $(this._element).closest(
|
4113 |
var selector = Util.getSelectorFromElement(this._element);
|
4114 |
|
4115 |
if (listElement) {
|
4116 |
-
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ?
|
4117 |
previous = $.makeArray($(listElement).find(itemSelector));
|
4118 |
previous = previous[previous.length - 1];
|
4119 |
}
|
4120 |
|
4121 |
-
var hideEvent = $.Event(
|
4122 |
relatedTarget: this._element
|
4123 |
});
|
4124 |
-
var showEvent = $.Event(
|
4125 |
relatedTarget: previous
|
4126 |
});
|
4127 |
|
@@ -4142,10 +4049,10 @@
|
|
4142 |
this._activate(this._element, listElement);
|
4143 |
|
4144 |
var complete = function complete() {
|
4145 |
-
var hiddenEvent = $.Event(
|
4146 |
relatedTarget: _this._element
|
4147 |
});
|
4148 |
-
var shownEvent = $.Event(
|
4149 |
relatedTarget: previous
|
4150 |
});
|
4151 |
$(previous).trigger(hiddenEvent);
|
@@ -4168,9 +4075,9 @@
|
|
4168 |
_proto._activate = function _activate(element, container, callback) {
|
4169 |
var _this2 = this;
|
4170 |
|
4171 |
-
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(
|
4172 |
var active = activeElements[0];
|
4173 |
-
var isTransitioning = callback && active && $(active).hasClass(
|
4174 |
|
4175 |
var complete = function complete() {
|
4176 |
return _this2._transitionComplete(element, active, callback);
|
@@ -4178,7 +4085,7 @@
|
|
4178 |
|
4179 |
if (active && isTransitioning) {
|
4180 |
var transitionDuration = Util.getTransitionDurationFromElement(active);
|
4181 |
-
$(active).removeClass(
|
4182 |
} else {
|
4183 |
complete();
|
4184 |
}
|
@@ -4186,11 +4093,11 @@
|
|
4186 |
|
4187 |
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
|
4188 |
if (active) {
|
4189 |
-
$(active).removeClass(
|
4190 |
-
var dropdownChild = $(active.parentNode).find(
|
4191 |
|
4192 |
if (dropdownChild) {
|
4193 |
-
$(dropdownChild).removeClass(
|
4194 |
}
|
4195 |
|
4196 |
if (active.getAttribute('role') === 'tab') {
|
@@ -4198,7 +4105,7 @@
|
|
4198 |
}
|
4199 |
}
|
4200 |
|
4201 |
-
$(element).addClass(
|
4202 |
|
4203 |
if (element.getAttribute('role') === 'tab') {
|
4204 |
element.setAttribute('aria-selected', true);
|
@@ -4206,16 +4113,16 @@
|
|
4206 |
|
4207 |
Util.reflow(element);
|
4208 |
|
4209 |
-
if (element.classList.contains(
|
4210 |
-
element.classList.add(
|
4211 |
}
|
4212 |
|
4213 |
-
if (element.parentNode && $(element.parentNode).hasClass(
|
4214 |
-
var dropdownElement = $(element).closest(
|
4215 |
|
4216 |
if (dropdownElement) {
|
4217 |
-
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(
|
4218 |
-
$(dropdownToggleList).addClass(
|
4219 |
}
|
4220 |
|
4221 |
element.setAttribute('aria-expanded', true);
|
@@ -4263,7 +4170,7 @@
|
|
4263 |
*/
|
4264 |
|
4265 |
|
4266 |
-
$(document).on(
|
4267 |
event.preventDefault();
|
4268 |
|
4269 |
Tab._jQueryInterface.call($(this), 'show');
|
@@ -4289,23 +4196,19 @@
|
|
4289 |
*/
|
4290 |
|
4291 |
var NAME$a = 'toast';
|
4292 |
-
var VERSION$a = '4.
|
4293 |
var DATA_KEY$a = 'bs.toast';
|
4294 |
var EVENT_KEY$a = "." + DATA_KEY$a;
|
4295 |
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
|
4296 |
-
var
|
4297 |
-
|
4298 |
-
|
4299 |
-
|
4300 |
-
|
4301 |
-
|
4302 |
-
|
4303 |
-
var
|
4304 |
-
|
4305 |
-
HIDE: 'hide',
|
4306 |
-
SHOW: 'show',
|
4307 |
-
SHOWING: 'showing'
|
4308 |
-
};
|
4309 |
var DefaultType$7 = {
|
4310 |
animation: 'boolean',
|
4311 |
autohide: 'boolean',
|
@@ -4316,18 +4219,14 @@
|
|
4316 |
autohide: true,
|
4317 |
delay: 500
|
4318 |
};
|
4319 |
-
var
|
4320 |
-
DATA_DISMISS: '[data-dismiss="toast"]'
|
4321 |
-
};
|
4322 |
/**
|
4323 |
* ------------------------------------------------------------------------
|
4324 |
* Class Definition
|
4325 |
* ------------------------------------------------------------------------
|
4326 |
*/
|
4327 |
|
4328 |
-
var Toast =
|
4329 |
-
/*#__PURE__*/
|
4330 |
-
function () {
|
4331 |
function Toast(element, config) {
|
4332 |
this._element = element;
|
4333 |
this._config = this._getConfig(config);
|
@@ -4343,7 +4242,7 @@
|
|
4343 |
_proto.show = function show() {
|
4344 |
var _this = this;
|
4345 |
|
4346 |
-
var showEvent = $.Event(
|
4347 |
$(this._element).trigger(showEvent);
|
4348 |
|
4349 |
if (showEvent.isDefaultPrevented()) {
|
@@ -4351,15 +4250,15 @@
|
|
4351 |
}
|
4352 |
|
4353 |
if (this._config.animation) {
|
4354 |
-
this._element.classList.add(
|
4355 |
}
|
4356 |
|
4357 |
var complete = function complete() {
|
4358 |
-
_this._element.classList.remove(
|
4359 |
|
4360 |
-
_this._element.classList.add(
|
4361 |
|
4362 |
-
$(_this._element).trigger(
|
4363 |
|
4364 |
if (_this._config.autohide) {
|
4365 |
_this._timeout = setTimeout(function () {
|
@@ -4368,11 +4267,11 @@
|
|
4368 |
}
|
4369 |
};
|
4370 |
|
4371 |
-
this._element.classList.remove(
|
4372 |
|
4373 |
Util.reflow(this._element);
|
4374 |
|
4375 |
-
this._element.classList.add(
|
4376 |
|
4377 |
if (this._config.animation) {
|
4378 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
@@ -4383,11 +4282,11 @@
|
|
4383 |
};
|
4384 |
|
4385 |
_proto.hide = function hide() {
|
4386 |
-
if (!this._element.classList.contains(
|
4387 |
return;
|
4388 |
}
|
4389 |
|
4390 |
-
var hideEvent = $.Event(
|
4391 |
$(this._element).trigger(hideEvent);
|
4392 |
|
4393 |
if (hideEvent.isDefaultPrevented()) {
|
@@ -4401,11 +4300,11 @@
|
|
4401 |
clearTimeout(this._timeout);
|
4402 |
this._timeout = null;
|
4403 |
|
4404 |
-
if (this._element.classList.contains(
|
4405 |
-
this._element.classList.remove(
|
4406 |
}
|
4407 |
|
4408 |
-
$(this._element).off(
|
4409 |
$.removeData(this._element, DATA_KEY$a);
|
4410 |
this._element = null;
|
4411 |
this._config = null;
|
@@ -4413,7 +4312,7 @@
|
|
4413 |
;
|
4414 |
|
4415 |
_proto._getConfig = function _getConfig(config) {
|
4416 |
-
config = _objectSpread2({}, Default$7,
|
4417 |
Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
|
4418 |
return config;
|
4419 |
};
|
@@ -4421,7 +4320,7 @@
|
|
4421 |
_proto._setListeners = function _setListeners() {
|
4422 |
var _this2 = this;
|
4423 |
|
4424 |
-
$(this._element).on(
|
4425 |
return _this2.hide();
|
4426 |
});
|
4427 |
};
|
@@ -4430,12 +4329,12 @@
|
|
4430 |
var _this3 = this;
|
4431 |
|
4432 |
var complete = function complete() {
|
4433 |
-
_this3._element.classList.add(
|
4434 |
|
4435 |
-
$(_this3._element).trigger(
|
4436 |
};
|
4437 |
|
4438 |
-
this._element.classList.remove(
|
4439 |
|
4440 |
if (this._config.animation) {
|
4441 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
(function (global, factory) {
|
9 |
(global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
|
10 |
}(this, (function (exports, $, Popper) { 'use strict';
|
11 |
|
12 |
+
$ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
|
13 |
+
Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper;
|
14 |
|
15 |
function _defineProperties(target, props) {
|
16 |
for (var i = 0; i < props.length; i++) {
|
85 |
|
86 |
/**
|
87 |
* --------------------------------------------------------------------------
|
88 |
+
* Bootstrap (v4.5.0): util.js
|
89 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
90 |
* --------------------------------------------------------------------------
|
91 |
*/
|
100 |
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
101 |
|
102 |
function toType(obj) {
|
103 |
+
if (obj === null || typeof obj === 'undefined') {
|
104 |
+
return "" + obj;
|
105 |
+
}
|
106 |
+
|
107 |
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
108 |
}
|
109 |
|
116 |
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
117 |
}
|
118 |
|
119 |
+
return undefined;
|
120 |
}
|
121 |
};
|
122 |
}
|
266 |
*/
|
267 |
|
268 |
var NAME = 'alert';
|
269 |
+
var VERSION = '4.5.0';
|
270 |
var DATA_KEY = 'bs.alert';
|
271 |
var EVENT_KEY = "." + DATA_KEY;
|
272 |
var DATA_API_KEY = '.data-api';
|
273 |
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
274 |
+
var SELECTOR_DISMISS = '[data-dismiss="alert"]';
|
275 |
+
var EVENT_CLOSE = "close" + EVENT_KEY;
|
276 |
+
var EVENT_CLOSED = "closed" + EVENT_KEY;
|
277 |
+
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
|
278 |
+
var CLASS_NAME_ALERT = 'alert';
|
279 |
+
var CLASS_NAME_FADE = 'fade';
|
280 |
+
var CLASS_NAME_SHOW = 'show';
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
/**
|
282 |
* ------------------------------------------------------------------------
|
283 |
* Class Definition
|
284 |
* ------------------------------------------------------------------------
|
285 |
*/
|
286 |
|
287 |
+
var Alert = /*#__PURE__*/function () {
|
|
|
|
|
288 |
function Alert(element) {
|
289 |
this._element = element;
|
290 |
} // Getters
|
324 |
}
|
325 |
|
326 |
if (!parent) {
|
327 |
+
parent = $(element).closest("." + CLASS_NAME_ALERT)[0];
|
328 |
}
|
329 |
|
330 |
return parent;
|
331 |
};
|
332 |
|
333 |
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
|
334 |
+
var closeEvent = $.Event(EVENT_CLOSE);
|
335 |
$(element).trigger(closeEvent);
|
336 |
return closeEvent;
|
337 |
};
|
339 |
_proto._removeElement = function _removeElement(element) {
|
340 |
var _this = this;
|
341 |
|
342 |
+
$(element).removeClass(CLASS_NAME_SHOW);
|
343 |
|
344 |
+
if (!$(element).hasClass(CLASS_NAME_FADE)) {
|
345 |
this._destroyElement(element);
|
346 |
|
347 |
return;
|
354 |
};
|
355 |
|
356 |
_proto._destroyElement = function _destroyElement(element) {
|
357 |
+
$(element).detach().trigger(EVENT_CLOSED).remove();
|
358 |
} // Static
|
359 |
;
|
360 |
|
400 |
*/
|
401 |
|
402 |
|
403 |
+
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
|
404 |
/**
|
405 |
* ------------------------------------------------------------------------
|
406 |
* jQuery
|
422 |
*/
|
423 |
|
424 |
var NAME$1 = 'button';
|
425 |
+
var VERSION$1 = '4.5.0';
|
426 |
var DATA_KEY$1 = 'bs.button';
|
427 |
var EVENT_KEY$1 = "." + DATA_KEY$1;
|
428 |
var DATA_API_KEY$1 = '.data-api';
|
429 |
var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
|
430 |
+
var CLASS_NAME_ACTIVE = 'active';
|
431 |
+
var CLASS_NAME_BUTTON = 'btn';
|
432 |
+
var CLASS_NAME_FOCUS = 'focus';
|
433 |
+
var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
|
434 |
+
var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
|
435 |
+
var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
|
436 |
+
var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
|
437 |
+
var SELECTOR_INPUT = 'input:not([type="hidden"])';
|
438 |
+
var SELECTOR_ACTIVE = '.active';
|
439 |
+
var SELECTOR_BUTTON = '.btn';
|
440 |
+
var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
|
441 |
+
var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
|
442 |
+
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
|
|
|
|
|
|
|
|
|
|
|
|
|
443 |
/**
|
444 |
* ------------------------------------------------------------------------
|
445 |
* Class Definition
|
446 |
* ------------------------------------------------------------------------
|
447 |
*/
|
448 |
|
449 |
+
var Button = /*#__PURE__*/function () {
|
|
|
|
|
450 |
function Button(element) {
|
451 |
this._element = element;
|
452 |
} // Getters
|
458 |
_proto.toggle = function toggle() {
|
459 |
var triggerChangeEvent = true;
|
460 |
var addAriaPressed = true;
|
461 |
+
var rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0];
|
462 |
|
463 |
if (rootElement) {
|
464 |
+
var input = this._element.querySelector(SELECTOR_INPUT);
|
465 |
|
466 |
if (input) {
|
467 |
if (input.type === 'radio') {
|
468 |
+
if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
469 |
triggerChangeEvent = false;
|
470 |
} else {
|
471 |
+
var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
|
472 |
|
473 |
if (activeElement) {
|
474 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE);
|
475 |
}
|
476 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
477 |
}
|
478 |
|
479 |
if (triggerChangeEvent) {
|
480 |
+
// if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
|
481 |
+
if (input.type === 'checkbox' || input.type === 'radio') {
|
482 |
+
input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
|
483 |
+
}
|
484 |
+
|
485 |
$(input).trigger('change');
|
486 |
}
|
487 |
|
492 |
|
493 |
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
|
494 |
if (addAriaPressed) {
|
495 |
+
this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
|
496 |
}
|
497 |
|
498 |
if (triggerChangeEvent) {
|
499 |
+
$(this._element).toggleClass(CLASS_NAME_ACTIVE);
|
500 |
}
|
501 |
}
|
502 |
};
|
538 |
*/
|
539 |
|
540 |
|
541 |
+
$(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
|
542 |
var button = event.target;
|
543 |
+
var initialButton = button;
|
544 |
|
545 |
+
if (!$(button).hasClass(CLASS_NAME_BUTTON)) {
|
546 |
+
button = $(button).closest(SELECTOR_BUTTON)[0];
|
547 |
}
|
548 |
|
549 |
if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
|
550 |
event.preventDefault(); // work around Firefox bug #1540995
|
551 |
} else {
|
552 |
+
var inputBtn = button.querySelector(SELECTOR_INPUT);
|
553 |
|
554 |
if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
|
555 |
event.preventDefault(); // work around Firefox bug #1540995
|
557 |
return;
|
558 |
}
|
559 |
|
560 |
+
if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {
|
561 |
+
event.preventDefault(); // work around event sent to label and input
|
562 |
+
}
|
563 |
+
|
564 |
Button._jQueryInterface.call($(button), 'toggle');
|
565 |
}
|
566 |
+
}).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
|
567 |
+
var button = $(event.target).closest(SELECTOR_BUTTON)[0];
|
568 |
+
$(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
|
569 |
});
|
570 |
+
$(window).on(EVENT_LOAD_DATA_API, function () {
|
571 |
// ensure correct active class is set to match the controls' actual values/states
|
572 |
// find all checkboxes/readio buttons inside data-toggle groups
|
573 |
+
var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
|
574 |
|
575 |
for (var i = 0, len = buttons.length; i < len; i++) {
|
576 |
var button = buttons[i];
|
577 |
+
var input = button.querySelector(SELECTOR_INPUT);
|
578 |
|
579 |
if (input.checked || input.hasAttribute('checked')) {
|
580 |
+
button.classList.add(CLASS_NAME_ACTIVE);
|
581 |
} else {
|
582 |
+
button.classList.remove(CLASS_NAME_ACTIVE);
|
583 |
}
|
584 |
} // find all button toggles
|
585 |
|
586 |
|
587 |
+
buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
|
588 |
|
589 |
for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
|
590 |
var _button = buttons[_i];
|
591 |
|
592 |
if (_button.getAttribute('aria-pressed') === 'true') {
|
593 |
+
_button.classList.add(CLASS_NAME_ACTIVE);
|
594 |
} else {
|
595 |
+
_button.classList.remove(CLASS_NAME_ACTIVE);
|
596 |
}
|
597 |
}
|
598 |
});
|
617 |
*/
|
618 |
|
619 |
var NAME$2 = 'carousel';
|
620 |
+
var VERSION$2 = '4.5.0';
|
621 |
var DATA_KEY$2 = 'bs.carousel';
|
622 |
var EVENT_KEY$2 = "." + DATA_KEY$2;
|
623 |
var DATA_API_KEY$2 = '.data-api';
|
645 |
wrap: 'boolean',
|
646 |
touch: 'boolean'
|
647 |
};
|
648 |
+
var DIRECTION_NEXT = 'next';
|
649 |
+
var DIRECTION_PREV = 'prev';
|
650 |
+
var DIRECTION_LEFT = 'left';
|
651 |
+
var DIRECTION_RIGHT = 'right';
|
652 |
+
var EVENT_SLIDE = "slide" + EVENT_KEY$2;
|
653 |
+
var EVENT_SLID = "slid" + EVENT_KEY$2;
|
654 |
+
var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
|
655 |
+
var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
|
656 |
+
var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
|
657 |
+
var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
|
658 |
+
var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
|
659 |
+
var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
|
660 |
+
var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
|
661 |
+
var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
|
662 |
+
var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
|
663 |
+
var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
|
664 |
+
var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
|
665 |
+
var CLASS_NAME_CAROUSEL = 'carousel';
|
666 |
+
var CLASS_NAME_ACTIVE$1 = 'active';
|
667 |
+
var CLASS_NAME_SLIDE = 'slide';
|
668 |
+
var CLASS_NAME_RIGHT = 'carousel-item-right';
|
669 |
+
var CLASS_NAME_LEFT = 'carousel-item-left';
|
670 |
+
var CLASS_NAME_NEXT = 'carousel-item-next';
|
671 |
+
var CLASS_NAME_PREV = 'carousel-item-prev';
|
672 |
+
var CLASS_NAME_POINTER_EVENT = 'pointer-event';
|
673 |
+
var SELECTOR_ACTIVE$1 = '.active';
|
674 |
+
var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
|
675 |
+
var SELECTOR_ITEM = '.carousel-item';
|
676 |
+
var SELECTOR_ITEM_IMG = '.carousel-item img';
|
677 |
+
var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
|
678 |
+
var SELECTOR_INDICATORS = '.carousel-indicators';
|
679 |
+
var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
|
680 |
+
var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
681 |
var PointerType = {
|
682 |
TOUCH: 'touch',
|
683 |
PEN: 'pen'
|
688 |
* ------------------------------------------------------------------------
|
689 |
*/
|
690 |
|
691 |
+
var Carousel = /*#__PURE__*/function () {
|
|
|
|
|
692 |
function Carousel(element, config) {
|
693 |
this._items = null;
|
694 |
this._interval = null;
|
700 |
this.touchDeltaX = 0;
|
701 |
this._config = this._getConfig(config);
|
702 |
this._element = element;
|
703 |
+
this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
|
704 |
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
705 |
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
|
706 |
|
713 |
// Public
|
714 |
_proto.next = function next() {
|
715 |
if (!this._isSliding) {
|
716 |
+
this._slide(DIRECTION_NEXT);
|
717 |
}
|
718 |
};
|
719 |
|
727 |
|
728 |
_proto.prev = function prev() {
|
729 |
if (!this._isSliding) {
|
730 |
+
this._slide(DIRECTION_PREV);
|
731 |
}
|
732 |
};
|
733 |
|
736 |
this._isPaused = true;
|
737 |
}
|
738 |
|
739 |
+
if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
|
740 |
Util.triggerTransitionEnd(this._element);
|
741 |
this.cycle(true);
|
742 |
}
|
763 |
_proto.to = function to(index) {
|
764 |
var _this = this;
|
765 |
|
766 |
+
this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
|
767 |
|
768 |
var activeIndex = this._getItemIndex(this._activeElement);
|
769 |
|
772 |
}
|
773 |
|
774 |
if (this._isSliding) {
|
775 |
+
$(this._element).one(EVENT_SLID, function () {
|
776 |
return _this.to(index);
|
777 |
});
|
778 |
return;
|
784 |
return;
|
785 |
}
|
786 |
|
787 |
+
var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
|
788 |
|
789 |
this._slide(direction, this._items[index]);
|
790 |
};
|
804 |
;
|
805 |
|
806 |
_proto._getConfig = function _getConfig(config) {
|
807 |
+
config = _objectSpread2(_objectSpread2({}, Default), config);
|
808 |
Util.typeCheckConfig(NAME$2, config, DefaultType);
|
809 |
return config;
|
810 |
};
|
833 |
var _this2 = this;
|
834 |
|
835 |
if (this._config.keyboard) {
|
836 |
+
$(this._element).on(EVENT_KEYDOWN, function (event) {
|
837 |
return _this2._keydown(event);
|
838 |
});
|
839 |
}
|
840 |
|
841 |
if (this._config.pause === 'hover') {
|
842 |
+
$(this._element).on(EVENT_MOUSEENTER, function (event) {
|
843 |
return _this2.pause(event);
|
844 |
+
}).on(EVENT_MOUSELEAVE, function (event) {
|
845 |
return _this2.cycle(event);
|
846 |
});
|
847 |
}
|
902 |
}
|
903 |
};
|
904 |
|
905 |
+
$(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
|
906 |
return e.preventDefault();
|
907 |
});
|
908 |
|
909 |
if (this._pointerEvent) {
|
910 |
+
$(this._element).on(EVENT_POINTERDOWN, function (event) {
|
911 |
return start(event);
|
912 |
});
|
913 |
+
$(this._element).on(EVENT_POINTERUP, function (event) {
|
914 |
return end(event);
|
915 |
});
|
916 |
|
917 |
+
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
|
918 |
} else {
|
919 |
+
$(this._element).on(EVENT_TOUCHSTART, function (event) {
|
920 |
return start(event);
|
921 |
});
|
922 |
+
$(this._element).on(EVENT_TOUCHMOVE, function (event) {
|
923 |
return move(event);
|
924 |
});
|
925 |
+
$(this._element).on(EVENT_TOUCHEND, function (event) {
|
926 |
return end(event);
|
927 |
});
|
928 |
}
|
947 |
};
|
948 |
|
949 |
_proto._getItemIndex = function _getItemIndex(element) {
|
950 |
+
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
|
951 |
return this._items.indexOf(element);
|
952 |
};
|
953 |
|
954 |
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
|
955 |
+
var isNextDirection = direction === DIRECTION_NEXT;
|
956 |
+
var isPrevDirection = direction === DIRECTION_PREV;
|
957 |
|
958 |
var activeIndex = this._getItemIndex(activeElement);
|
959 |
|
964 |
return activeElement;
|
965 |
}
|
966 |
|
967 |
+
var delta = direction === DIRECTION_PREV ? -1 : 1;
|
968 |
var itemIndex = (activeIndex + delta) % this._items.length;
|
969 |
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
970 |
};
|
972 |
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
|
973 |
var targetIndex = this._getItemIndex(relatedTarget);
|
974 |
|
975 |
+
var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
|
976 |
|
977 |
+
var slideEvent = $.Event(EVENT_SLIDE, {
|
978 |
relatedTarget: relatedTarget,
|
979 |
direction: eventDirectionName,
|
980 |
from: fromIndex,
|
986 |
|
987 |
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
|
988 |
if (this._indicatorsElement) {
|
989 |
+
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
|
990 |
+
$(indicators).removeClass(CLASS_NAME_ACTIVE$1);
|
991 |
|
992 |
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
|
993 |
|
994 |
if (nextIndicator) {
|
995 |
+
$(nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
|
996 |
}
|
997 |
}
|
998 |
};
|
1000 |
_proto._slide = function _slide(direction, element) {
|
1001 |
var _this4 = this;
|
1002 |
|
1003 |
+
var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
|
1004 |
|
1005 |
var activeElementIndex = this._getItemIndex(activeElement);
|
1006 |
|
1013 |
var orderClassName;
|
1014 |
var eventDirectionName;
|
1015 |
|
1016 |
+
if (direction === DIRECTION_NEXT) {
|
1017 |
+
directionalClassName = CLASS_NAME_LEFT;
|
1018 |
+
orderClassName = CLASS_NAME_NEXT;
|
1019 |
+
eventDirectionName = DIRECTION_LEFT;
|
1020 |
} else {
|
1021 |
+
directionalClassName = CLASS_NAME_RIGHT;
|
1022 |
+
orderClassName = CLASS_NAME_PREV;
|
1023 |
+
eventDirectionName = DIRECTION_RIGHT;
|
1024 |
}
|
1025 |
|
1026 |
+
if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {
|
1027 |
this._isSliding = false;
|
1028 |
return;
|
1029 |
}
|
1047 |
|
1048 |
this._setActiveIndicatorElement(nextElement);
|
1049 |
|
1050 |
+
var slidEvent = $.Event(EVENT_SLID, {
|
1051 |
relatedTarget: nextElement,
|
1052 |
direction: eventDirectionName,
|
1053 |
from: activeElementIndex,
|
1054 |
to: nextElementIndex
|
1055 |
});
|
1056 |
|
1057 |
+
if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {
|
1058 |
$(nextElement).addClass(orderClassName);
|
1059 |
Util.reflow(nextElement);
|
1060 |
$(activeElement).addClass(directionalClassName);
|
1070 |
|
1071 |
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
|
1072 |
$(activeElement).one(Util.TRANSITION_END, function () {
|
1073 |
+
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
|
1074 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
|
1075 |
_this4._isSliding = false;
|
1076 |
setTimeout(function () {
|
1077 |
return $(_this4._element).trigger(slidEvent);
|
1078 |
}, 0);
|
1079 |
}).emulateTransitionEnd(transitionDuration);
|
1080 |
} else {
|
1081 |
+
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1);
|
1082 |
+
$(nextElement).addClass(CLASS_NAME_ACTIVE$1);
|
1083 |
this._isSliding = false;
|
1084 |
$(this._element).trigger(slidEvent);
|
1085 |
}
|
1094 |
return this.each(function () {
|
1095 |
var data = $(this).data(DATA_KEY$2);
|
1096 |
|
1097 |
+
var _config = _objectSpread2(_objectSpread2({}, Default), $(this).data());
|
1098 |
|
1099 |
if (typeof config === 'object') {
|
1100 |
+
_config = _objectSpread2(_objectSpread2({}, _config), config);
|
1101 |
}
|
1102 |
|
1103 |
var action = typeof config === 'string' ? config : _config.slide;
|
1131 |
|
1132 |
var target = $(selector)[0];
|
1133 |
|
1134 |
+
if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {
|
1135 |
return;
|
1136 |
}
|
1137 |
|
1138 |
+
var config = _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
|
1139 |
|
1140 |
var slideIndex = this.getAttribute('data-slide-to');
|
1141 |
|
1173 |
*/
|
1174 |
|
1175 |
|
1176 |
+
$(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
|
1177 |
+
$(window).on(EVENT_LOAD_DATA_API$1, function () {
|
1178 |
+
var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
|
1179 |
|
1180 |
for (var i = 0, len = carousels.length; i < len; i++) {
|
1181 |
var $carousel = $(carousels[i]);
|
1204 |
*/
|
1205 |
|
1206 |
var NAME$3 = 'collapse';
|
1207 |
+
var VERSION$3 = '4.5.0';
|
1208 |
var DATA_KEY$3 = 'bs.collapse';
|
1209 |
var EVENT_KEY$3 = "." + DATA_KEY$3;
|
1210 |
var DATA_API_KEY$3 = '.data-api';
|
1217 |
toggle: 'boolean',
|
1218 |
parent: '(string|element)'
|
1219 |
};
|
1220 |
+
var EVENT_SHOW = "show" + EVENT_KEY$3;
|
1221 |
+
var EVENT_SHOWN = "shown" + EVENT_KEY$3;
|
1222 |
+
var EVENT_HIDE = "hide" + EVENT_KEY$3;
|
1223 |
+
var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
|
1224 |
+
var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
|
1225 |
+
var CLASS_NAME_SHOW$1 = 'show';
|
1226 |
+
var CLASS_NAME_COLLAPSE = 'collapse';
|
1227 |
+
var CLASS_NAME_COLLAPSING = 'collapsing';
|
1228 |
+
var CLASS_NAME_COLLAPSED = 'collapsed';
|
1229 |
+
var DIMENSION_WIDTH = 'width';
|
1230 |
+
var DIMENSION_HEIGHT = 'height';
|
1231 |
+
var SELECTOR_ACTIVES = '.show, .collapsing';
|
1232 |
+
var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1233 |
/**
|
1234 |
* ------------------------------------------------------------------------
|
1235 |
* Class Definition
|
1236 |
* ------------------------------------------------------------------------
|
1237 |
*/
|
1238 |
|
1239 |
+
var Collapse = /*#__PURE__*/function () {
|
|
|
|
|
1240 |
function Collapse(element, config) {
|
1241 |
this._isTransitioning = false;
|
1242 |
this._element = element;
|
1243 |
this._config = this._getConfig(config);
|
1244 |
this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
|
1245 |
+
var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
|
1246 |
|
1247 |
for (var i = 0, len = toggleList.length; i < len; i++) {
|
1248 |
var elem = toggleList[i];
|
1274 |
|
1275 |
// Public
|
1276 |
_proto.toggle = function toggle() {
|
1277 |
+
if ($(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1278 |
this.hide();
|
1279 |
} else {
|
1280 |
this.show();
|
1284 |
_proto.show = function show() {
|
1285 |
var _this = this;
|
1286 |
|
1287 |
+
if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1288 |
return;
|
1289 |
}
|
1290 |
|
1292 |
var activesData;
|
1293 |
|
1294 |
if (this._parent) {
|
1295 |
+
actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
|
1296 |
if (typeof _this._config.parent === 'string') {
|
1297 |
return elem.getAttribute('data-parent') === _this._config.parent;
|
1298 |
}
|
1299 |
|
1300 |
+
return elem.classList.contains(CLASS_NAME_COLLAPSE);
|
1301 |
});
|
1302 |
|
1303 |
if (actives.length === 0) {
|
1313 |
}
|
1314 |
}
|
1315 |
|
1316 |
+
var startEvent = $.Event(EVENT_SHOW);
|
1317 |
$(this._element).trigger(startEvent);
|
1318 |
|
1319 |
if (startEvent.isDefaultPrevented()) {
|
1330 |
|
1331 |
var dimension = this._getDimension();
|
1332 |
|
1333 |
+
$(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
|
1334 |
this._element.style[dimension] = 0;
|
1335 |
|
1336 |
if (this._triggerArray.length) {
|
1337 |
+
$(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
|
1338 |
}
|
1339 |
|
1340 |
this.setTransitioning(true);
|
1341 |
|
1342 |
var complete = function complete() {
|
1343 |
+
$(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
|
1344 |
_this._element.style[dimension] = '';
|
1345 |
|
1346 |
_this.setTransitioning(false);
|
1347 |
|
1348 |
+
$(_this._element).trigger(EVENT_SHOWN);
|
1349 |
};
|
1350 |
|
1351 |
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
1358 |
_proto.hide = function hide() {
|
1359 |
var _this2 = this;
|
1360 |
|
1361 |
+
if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW$1)) {
|
1362 |
return;
|
1363 |
}
|
1364 |
|
1365 |
+
var startEvent = $.Event(EVENT_HIDE);
|
1366 |
$(this._element).trigger(startEvent);
|
1367 |
|
1368 |
if (startEvent.isDefaultPrevented()) {
|
1373 |
|
1374 |
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
|
1375 |
Util.reflow(this._element);
|
1376 |
+
$(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
|
1377 |
var triggerArrayLength = this._triggerArray.length;
|
1378 |
|
1379 |
if (triggerArrayLength > 0) {
|
1384 |
if (selector !== null) {
|
1385 |
var $elem = $([].slice.call(document.querySelectorAll(selector)));
|
1386 |
|
1387 |
+
if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
|
1388 |
+
$(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
|
1389 |
}
|
1390 |
}
|
1391 |
}
|
1396 |
var complete = function complete() {
|
1397 |
_this2.setTransitioning(false);
|
1398 |
|
1399 |
+
$(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
|
1400 |
};
|
1401 |
|
1402 |
this._element.style[dimension] = '';
|
1419 |
;
|
1420 |
|
1421 |
_proto._getConfig = function _getConfig(config) {
|
1422 |
+
config = _objectSpread2(_objectSpread2({}, Default$1), config);
|
1423 |
config.toggle = Boolean(config.toggle); // Coerce string values
|
1424 |
|
1425 |
Util.typeCheckConfig(NAME$3, config, DefaultType$1);
|
1427 |
};
|
1428 |
|
1429 |
_proto._getDimension = function _getDimension() {
|
1430 |
+
var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH);
|
1431 |
+
return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
|
1432 |
};
|
1433 |
|
1434 |
_proto._getParent = function _getParent() {
|
1455 |
};
|
1456 |
|
1457 |
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
|
1458 |
+
var isOpen = $(element).hasClass(CLASS_NAME_SHOW$1);
|
1459 |
|
1460 |
if (triggerArray.length) {
|
1461 |
+
$(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
|
1462 |
}
|
1463 |
} // Static
|
1464 |
;
|
1473 |
var $this = $(this);
|
1474 |
var data = $this.data(DATA_KEY$3);
|
1475 |
|
1476 |
+
var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config === 'object' && config ? config : {});
|
1477 |
|
1478 |
+
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
|
1479 |
_config.toggle = false;
|
1480 |
}
|
1481 |
|
1515 |
*/
|
1516 |
|
1517 |
|
1518 |
+
$(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
|
1519 |
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
1520 |
if (event.currentTarget.tagName === 'A') {
|
1521 |
event.preventDefault();
|
1553 |
*/
|
1554 |
|
1555 |
var NAME$4 = 'dropdown';
|
1556 |
+
var VERSION$4 = '4.5.0';
|
1557 |
var DATA_KEY$4 = 'bs.dropdown';
|
1558 |
var EVENT_KEY$4 = "." + DATA_KEY$4;
|
1559 |
var DATA_API_KEY$4 = '.data-api';
|
1571 |
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
1572 |
|
1573 |
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
|
1574 |
+
var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
|
1575 |
+
var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
|
1576 |
+
var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
|
1577 |
+
var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
|
1578 |
+
var EVENT_CLICK = "click" + EVENT_KEY$4;
|
1579 |
+
var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
|
1580 |
+
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
|
1581 |
+
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
|
1582 |
+
var CLASS_NAME_DISABLED = 'disabled';
|
1583 |
+
var CLASS_NAME_SHOW$2 = 'show';
|
1584 |
+
var CLASS_NAME_DROPUP = 'dropup';
|
1585 |
+
var CLASS_NAME_DROPRIGHT = 'dropright';
|
1586 |
+
var CLASS_NAME_DROPLEFT = 'dropleft';
|
1587 |
+
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
|
1588 |
+
var CLASS_NAME_POSITION_STATIC = 'position-static';
|
1589 |
+
var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
|
1590 |
+
var SELECTOR_FORM_CHILD = '.dropdown form';
|
1591 |
+
var SELECTOR_MENU = '.dropdown-menu';
|
1592 |
+
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
1593 |
+
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
1594 |
+
var PLACEMENT_TOP = 'top-start';
|
1595 |
+
var PLACEMENT_TOPEND = 'top-end';
|
1596 |
+
var PLACEMENT_BOTTOM = 'bottom-start';
|
1597 |
+
var PLACEMENT_BOTTOMEND = 'bottom-end';
|
1598 |
+
var PLACEMENT_RIGHT = 'right-start';
|
1599 |
+
var PLACEMENT_LEFT = 'left-start';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1600 |
var Default$2 = {
|
1601 |
offset: 0,
|
1602 |
flip: true,
|
1619 |
* ------------------------------------------------------------------------
|
1620 |
*/
|
1621 |
|
1622 |
+
var Dropdown = /*#__PURE__*/function () {
|
|
|
|
|
1623 |
function Dropdown(element, config) {
|
1624 |
this._element = element;
|
1625 |
this._popper = null;
|
1635 |
|
1636 |
// Public
|
1637 |
_proto.toggle = function toggle() {
|
1638 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
|
1639 |
return;
|
1640 |
}
|
1641 |
|
1642 |
+
var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW$2);
|
1643 |
|
1644 |
Dropdown._clearMenus();
|
1645 |
|
1655 |
usePopper = false;
|
1656 |
}
|
1657 |
|
1658 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
|
1659 |
return;
|
1660 |
}
|
1661 |
|
1662 |
var relatedTarget = {
|
1663 |
relatedTarget: this._element
|
1664 |
};
|
1665 |
+
var showEvent = $.Event(EVENT_SHOW$1, relatedTarget);
|
1666 |
|
1667 |
var parent = Dropdown._getParentFromElement(this._element);
|
1668 |
|
1698 |
|
1699 |
|
1700 |
if (this._config.boundary !== 'scrollParent') {
|
1701 |
+
$(parent).addClass(CLASS_NAME_POSITION_STATIC);
|
1702 |
}
|
1703 |
|
1704 |
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
1708 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
1709 |
|
1710 |
|
1711 |
+
if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
|
1712 |
$(document.body).children().on('mouseover', null, $.noop);
|
1713 |
}
|
1714 |
|
1716 |
|
1717 |
this._element.setAttribute('aria-expanded', true);
|
1718 |
|
1719 |
+
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
|
1720 |
+
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget));
|
1721 |
};
|
1722 |
|
1723 |
_proto.hide = function hide() {
|
1724 |
+
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
|
1725 |
return;
|
1726 |
}
|
1727 |
|
1728 |
var relatedTarget = {
|
1729 |
relatedTarget: this._element
|
1730 |
};
|
1731 |
+
var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
|
1732 |
|
1733 |
var parent = Dropdown._getParentFromElement(this._element);
|
1734 |
|
1742 |
this._popper.destroy();
|
1743 |
}
|
1744 |
|
1745 |
+
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
|
1746 |
+
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
|
1747 |
};
|
1748 |
|
1749 |
_proto.dispose = function dispose() {
|
1771 |
_proto._addEventListeners = function _addEventListeners() {
|
1772 |
var _this = this;
|
1773 |
|
1774 |
+
$(this._element).on(EVENT_CLICK, function (event) {
|
1775 |
event.preventDefault();
|
1776 |
event.stopPropagation();
|
1777 |
|
1780 |
};
|
1781 |
|
1782 |
_proto._getConfig = function _getConfig(config) {
|
1783 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config);
|
1784 |
Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
1785 |
return config;
|
1786 |
};
|
1790 |
var parent = Dropdown._getParentFromElement(this._element);
|
1791 |
|
1792 |
if (parent) {
|
1793 |
+
this._menu = parent.querySelector(SELECTOR_MENU);
|
1794 |
}
|
1795 |
}
|
1796 |
|
1799 |
|
1800 |
_proto._getPlacement = function _getPlacement() {
|
1801 |
var $parentDropdown = $(this._element.parentNode);
|
1802 |
+
var placement = PLACEMENT_BOTTOM; // Handle dropup
|
|
|
|
|
|
|
1803 |
|
1804 |
+
if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
|
1805 |
+
placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
|
1806 |
+
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
|
1807 |
+
placement = PLACEMENT_RIGHT;
|
1808 |
+
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
|
1809 |
+
placement = PLACEMENT_LEFT;
|
1810 |
+
} else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
|
1811 |
+
placement = PLACEMENT_BOTTOMEND;
|
|
|
1812 |
}
|
1813 |
|
1814 |
return placement;
|
1825 |
|
1826 |
if (typeof this._config.offset === 'function') {
|
1827 |
offset.fn = function (data) {
|
1828 |
+
data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
|
1829 |
return data;
|
1830 |
};
|
1831 |
} else {
|
1855 |
};
|
1856 |
}
|
1857 |
|
1858 |
+
return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
|
1859 |
} // Static
|
1860 |
;
|
1861 |
|
1885 |
return;
|
1886 |
}
|
1887 |
|
1888 |
+
var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
|
1889 |
|
1890 |
for (var i = 0, len = toggles.length; i < len; i++) {
|
1891 |
var parent = Dropdown._getParentFromElement(toggles[i]);
|
1905 |
|
1906 |
var dropdownMenu = context._menu;
|
1907 |
|
1908 |
+
if (!$(parent).hasClass(CLASS_NAME_SHOW$2)) {
|
1909 |
continue;
|
1910 |
}
|
1911 |
|
1913 |
continue;
|
1914 |
}
|
1915 |
|
1916 |
+
var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
|
1917 |
$(parent).trigger(hideEvent);
|
1918 |
|
1919 |
if (hideEvent.isDefaultPrevented()) {
|
1932 |
context._popper.destroy();
|
1933 |
}
|
1934 |
|
1935 |
+
$(dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
|
1936 |
+
$(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
|
1937 |
}
|
1938 |
};
|
1939 |
|
1957 |
// - If key is other than escape
|
1958 |
// - If key is not up or down => not a dropdown command
|
1959 |
// - If trigger inside the menu => not a dropdown command
|
1960 |
+
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
|
1961 |
return;
|
1962 |
}
|
1963 |
|
1964 |
+
if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {
|
|
|
|
|
|
|
1965 |
return;
|
1966 |
}
|
1967 |
|
1968 |
var parent = Dropdown._getParentFromElement(this);
|
1969 |
|
1970 |
+
var isActive = $(parent).hasClass(CLASS_NAME_SHOW$2);
|
1971 |
|
1972 |
if (!isActive && event.which === ESCAPE_KEYCODE) {
|
1973 |
return;
|
1974 |
}
|
1975 |
|
1976 |
+
event.preventDefault();
|
1977 |
+
event.stopPropagation();
|
1978 |
+
|
1979 |
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
1980 |
if (event.which === ESCAPE_KEYCODE) {
|
1981 |
+
$(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
|
|
|
1982 |
}
|
1983 |
|
1984 |
$(this).trigger('click');
|
1985 |
return;
|
1986 |
}
|
1987 |
|
1988 |
+
var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
|
1989 |
return $(item).is(':visible');
|
1990 |
});
|
1991 |
|
2038 |
*/
|
2039 |
|
2040 |
|
2041 |
+
$(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
|
2042 |
event.preventDefault();
|
2043 |
event.stopPropagation();
|
2044 |
|
2045 |
Dropdown._jQueryInterface.call($(this), 'toggle');
|
2046 |
+
}).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
|
2047 |
e.stopPropagation();
|
2048 |
});
|
2049 |
/**
|
2067 |
*/
|
2068 |
|
2069 |
var NAME$5 = 'modal';
|
2070 |
+
var VERSION$5 = '4.5.0';
|
2071 |
var DATA_KEY$5 = 'bs.modal';
|
2072 |
var EVENT_KEY$5 = "." + DATA_KEY$5;
|
2073 |
var DATA_API_KEY$5 = '.data-api';
|
2086 |
focus: 'boolean',
|
2087 |
show: 'boolean'
|
2088 |
};
|
2089 |
+
var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
|
2090 |
+
var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
|
2091 |
+
var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
|
2092 |
+
var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
|
2093 |
+
var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
|
2094 |
+
var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
|
2095 |
+
var EVENT_RESIZE = "resize" + EVENT_KEY$5;
|
2096 |
+
var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
|
2097 |
+
var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
|
2098 |
+
var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
|
2099 |
+
var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
|
2100 |
+
var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
|
2101 |
+
var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
|
2102 |
+
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
|
2103 |
+
var CLASS_NAME_BACKDROP = 'modal-backdrop';
|
2104 |
+
var CLASS_NAME_OPEN = 'modal-open';
|
2105 |
+
var CLASS_NAME_FADE$1 = 'fade';
|
2106 |
+
var CLASS_NAME_SHOW$3 = 'show';
|
2107 |
+
var CLASS_NAME_STATIC = 'modal-static';
|
2108 |
+
var SELECTOR_DIALOG = '.modal-dialog';
|
2109 |
+
var SELECTOR_MODAL_BODY = '.modal-body';
|
2110 |
+
var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
|
2111 |
+
var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
|
2112 |
+
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
2113 |
+
var SELECTOR_STICKY_CONTENT = '.sticky-top';
|
|
|
|
|
|
|
|
|
|
|
|
|
2114 |
/**
|
2115 |
* ------------------------------------------------------------------------
|
2116 |
* Class Definition
|
2117 |
* ------------------------------------------------------------------------
|
2118 |
*/
|
2119 |
|
2120 |
+
var Modal = /*#__PURE__*/function () {
|
|
|
|
|
2121 |
function Modal(element, config) {
|
2122 |
this._config = this._getConfig(config);
|
2123 |
this._element = element;
|
2124 |
+
this._dialog = element.querySelector(SELECTOR_DIALOG);
|
2125 |
this._backdrop = null;
|
2126 |
this._isShown = false;
|
2127 |
this._isBodyOverflowing = false;
|
2145 |
return;
|
2146 |
}
|
2147 |
|
2148 |
+
if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
|
2149 |
this._isTransitioning = true;
|
2150 |
}
|
2151 |
|
2152 |
+
var showEvent = $.Event(EVENT_SHOW$2, {
|
2153 |
relatedTarget: relatedTarget
|
2154 |
});
|
2155 |
$(this._element).trigger(showEvent);
|
2170 |
|
2171 |
this._setResizeEvent();
|
2172 |
|
2173 |
+
$(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
|
2174 |
return _this.hide(event);
|
2175 |
});
|
2176 |
+
$(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
|
2177 |
+
$(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
|
2178 |
if ($(event.target).is(_this._element)) {
|
2179 |
_this._ignoreBackdropClick = true;
|
2180 |
}
|
2197 |
return;
|
2198 |
}
|
2199 |
|
2200 |
+
var hideEvent = $.Event(EVENT_HIDE$2);
|
2201 |
$(this._element).trigger(hideEvent);
|
2202 |
|
2203 |
if (!this._isShown || hideEvent.isDefaultPrevented()) {
|
2205 |
}
|
2206 |
|
2207 |
this._isShown = false;
|
2208 |
+
var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
|
2209 |
|
2210 |
if (transition) {
|
2211 |
this._isTransitioning = true;
|
2215 |
|
2216 |
this._setResizeEvent();
|
2217 |
|
2218 |
+
$(document).off(EVENT_FOCUSIN);
|
2219 |
+
$(this._element).removeClass(CLASS_NAME_SHOW$3);
|
2220 |
+
$(this._element).off(EVENT_CLICK_DISMISS);
|
2221 |
+
$(this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
|
2222 |
|
2223 |
if (transition) {
|
2224 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
2235 |
return $(htmlElement).off(EVENT_KEY$5);
|
2236 |
});
|
2237 |
/**
|
2238 |
+
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
|
2239 |
* Do not move `document` in `htmlElements` array
|
2240 |
+
* It will remove `EVENT_CLICK_DATA_API` event that should remain
|
2241 |
*/
|
2242 |
|
2243 |
+
$(document).off(EVENT_FOCUSIN);
|
2244 |
$.removeData(this._element, DATA_KEY$5);
|
2245 |
this._config = null;
|
2246 |
this._element = null;
|
2259 |
;
|
2260 |
|
2261 |
_proto._getConfig = function _getConfig(config) {
|
2262 |
+
config = _objectSpread2(_objectSpread2({}, Default$3), config);
|
2263 |
Util.typeCheckConfig(NAME$5, config, DefaultType$3);
|
2264 |
return config;
|
2265 |
};
|
2268 |
var _this3 = this;
|
2269 |
|
2270 |
if (this._config.backdrop === 'static') {
|
2271 |
+
var hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED);
|
2272 |
$(this._element).trigger(hideEventPrevented);
|
2273 |
|
2274 |
if (hideEventPrevented.defaultPrevented) {
|
2275 |
return;
|
2276 |
}
|
2277 |
|
2278 |
+
this._element.classList.add(CLASS_NAME_STATIC);
|
2279 |
|
2280 |
var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
|
2281 |
$(this._element).one(Util.TRANSITION_END, function () {
|
2282 |
+
_this3._element.classList.remove(CLASS_NAME_STATIC);
|
2283 |
}).emulateTransitionEnd(modalTransitionDuration);
|
2284 |
|
2285 |
this._element.focus();
|
2291 |
_proto._showElement = function _showElement(relatedTarget) {
|
2292 |
var _this4 = this;
|
2293 |
|
2294 |
+
var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
|
2295 |
+
var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
|
2296 |
|
2297 |
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
2298 |
// Don't move modal's DOM position
|
2305 |
|
2306 |
this._element.setAttribute('aria-modal', true);
|
2307 |
|
2308 |
+
if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
|
2309 |
modalBody.scrollTop = 0;
|
2310 |
} else {
|
2311 |
this._element.scrollTop = 0;
|
2315 |
Util.reflow(this._element);
|
2316 |
}
|
2317 |
|
2318 |
+
$(this._element).addClass(CLASS_NAME_SHOW$3);
|
2319 |
|
2320 |
if (this._config.focus) {
|
2321 |
this._enforceFocus();
|
2322 |
}
|
2323 |
|
2324 |
+
var shownEvent = $.Event(EVENT_SHOWN$2, {
|
2325 |
relatedTarget: relatedTarget
|
2326 |
});
|
2327 |
|
2345 |
_proto._enforceFocus = function _enforceFocus() {
|
2346 |
var _this5 = this;
|
2347 |
|
2348 |
+
$(document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
|
2349 |
+
.on(EVENT_FOCUSIN, function (event) {
|
2350 |
if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
|
2351 |
_this5._element.focus();
|
2352 |
}
|
2356 |
_proto._setEscapeEvent = function _setEscapeEvent() {
|
2357 |
var _this6 = this;
|
2358 |
|
2359 |
+
if (this._isShown) {
|
2360 |
+
$(this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
|
2361 |
+
if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
|
2362 |
+
event.preventDefault();
|
2363 |
+
|
2364 |
+
_this6.hide();
|
2365 |
+
} else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
|
2366 |
_this6._triggerBackdropTransition();
|
2367 |
}
|
2368 |
});
|
2369 |
} else if (!this._isShown) {
|
2370 |
+
$(this._element).off(EVENT_KEYDOWN_DISMISS);
|
2371 |
}
|
2372 |
};
|
2373 |
|
2375 |
var _this7 = this;
|
2376 |
|
2377 |
if (this._isShown) {
|
2378 |
+
$(window).on(EVENT_RESIZE, function (event) {
|
2379 |
return _this7.handleUpdate(event);
|
2380 |
});
|
2381 |
} else {
|
2382 |
+
$(window).off(EVENT_RESIZE);
|
2383 |
}
|
2384 |
};
|
2385 |
|
2395 |
this._isTransitioning = false;
|
2396 |
|
2397 |
this._showBackdrop(function () {
|
2398 |
+
$(document.body).removeClass(CLASS_NAME_OPEN);
|
2399 |
|
2400 |
_this8._resetAdjustments();
|
2401 |
|
2402 |
_this8._resetScrollbar();
|
2403 |
|
2404 |
+
$(_this8._element).trigger(EVENT_HIDDEN$2);
|
2405 |
});
|
2406 |
};
|
2407 |
|
2415 |
_proto._showBackdrop = function _showBackdrop(callback) {
|
2416 |
var _this9 = this;
|
2417 |
|
2418 |
+
var animate = $(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';
|
2419 |
|
2420 |
if (this._isShown && this._config.backdrop) {
|
2421 |
this._backdrop = document.createElement('div');
|
2422 |
+
this._backdrop.className = CLASS_NAME_BACKDROP;
|
2423 |
|
2424 |
if (animate) {
|
2425 |
this._backdrop.classList.add(animate);
|
2426 |
}
|
2427 |
|
2428 |
$(this._backdrop).appendTo(document.body);
|
2429 |
+
$(this._element).on(EVENT_CLICK_DISMISS, function (event) {
|
2430 |
if (_this9._ignoreBackdropClick) {
|
2431 |
_this9._ignoreBackdropClick = false;
|
2432 |
return;
|
2443 |
Util.reflow(this._backdrop);
|
2444 |
}
|
2445 |
|
2446 |
+
$(this._backdrop).addClass(CLASS_NAME_SHOW$3);
|
2447 |
|
2448 |
if (!callback) {
|
2449 |
return;
|
2457 |
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
2458 |
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
|
2459 |
} else if (!this._isShown && this._backdrop) {
|
2460 |
+
$(this._backdrop).removeClass(CLASS_NAME_SHOW$3);
|
2461 |
|
2462 |
var callbackRemove = function callbackRemove() {
|
2463 |
_this9._removeBackdrop();
|
2467 |
}
|
2468 |
};
|
2469 |
|
2470 |
+
if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
|
2471 |
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
2472 |
|
2473 |
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
|
2502 |
|
2503 |
_proto._checkScrollbar = function _checkScrollbar() {
|
2504 |
var rect = document.body.getBoundingClientRect();
|
2505 |
+
this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
|
2506 |
this._scrollbarWidth = this._getScrollbarWidth();
|
2507 |
};
|
2508 |
|
2512 |
if (this._isBodyOverflowing) {
|
2513 |
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
2514 |
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
2515 |
+
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
|
2516 |
+
var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
|
2517 |
|
2518 |
$(fixedContent).each(function (index, element) {
|
2519 |
var actualPadding = element.style.paddingRight;
|
2532 |
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
|
2533 |
}
|
2534 |
|
2535 |
+
$(document.body).addClass(CLASS_NAME_OPEN);
|
2536 |
};
|
2537 |
|
2538 |
_proto._resetScrollbar = function _resetScrollbar() {
|
2539 |
// Restore fixed content padding
|
2540 |
+
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
|
2541 |
$(fixedContent).each(function (index, element) {
|
2542 |
var padding = $(element).data('padding-right');
|
2543 |
$(element).removeData('padding-right');
|
2544 |
element.style.paddingRight = padding ? padding : '';
|
2545 |
}); // Restore sticky content
|
2546 |
|
2547 |
+
var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
|
2548 |
$(elements).each(function (index, element) {
|
2549 |
var margin = $(element).data('margin-right');
|
2550 |
|
2561 |
_proto._getScrollbarWidth = function _getScrollbarWidth() {
|
2562 |
// thx d.walsh
|
2563 |
var scrollDiv = document.createElement('div');
|
2564 |
+
scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
|
2565 |
document.body.appendChild(scrollDiv);
|
2566 |
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
2567 |
document.body.removeChild(scrollDiv);
|
2573 |
return this.each(function () {
|
2574 |
var data = $(this).data(DATA_KEY$5);
|
2575 |
|
2576 |
+
var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config === 'object' && config ? config : {});
|
2577 |
|
2578 |
if (!data) {
|
2579 |
data = new Modal(this, _config);
|
2613 |
*/
|
2614 |
|
2615 |
|
2616 |
+
$(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {
|
2617 |
var _this11 = this;
|
2618 |
|
2619 |
var target;
|
2623 |
target = document.querySelector(selector);
|
2624 |
}
|
2625 |
|
2626 |
+
var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
|
2627 |
|
2628 |
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
2629 |
event.preventDefault();
|
2630 |
}
|
2631 |
|
2632 |
+
var $target = $(target).one(EVENT_SHOW$2, function (showEvent) {
|
2633 |
if (showEvent.isDefaultPrevented()) {
|
2634 |
// Only register focus restorer if modal will actually get shown
|
2635 |
return;
|
2636 |
}
|
2637 |
|
2638 |
+
$target.one(EVENT_HIDDEN$2, function () {
|
2639 |
if ($(_this11).is(':visible')) {
|
2640 |
_this11.focus();
|
2641 |
}
|
2660 |
|
2661 |
/**
|
2662 |
* --------------------------------------------------------------------------
|
2663 |
+
* Bootstrap (v4.5.0): tools/sanitizer.js
|
2664 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2665 |
* --------------------------------------------------------------------------
|
2666 |
*/
|
2685 |
h5: [],
|
2686 |
h6: [],
|
2687 |
i: [],
|
2688 |
+
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
|
2689 |
li: [],
|
2690 |
ol: [],
|
2691 |
p: [],
|
2705 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
2706 |
*/
|
2707 |
|
2708 |
+
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
|
2709 |
/**
|
2710 |
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
2711 |
*
|
2712 |
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
2713 |
*/
|
2714 |
|
2715 |
+
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
|
2716 |
|
2717 |
function allowedAttribute(attr, allowedAttributeList) {
|
2718 |
var attrName = attr.nodeName.toLowerCase();
|
2729 |
return attrRegex instanceof RegExp;
|
2730 |
}); // Check if a regular expression validates the attribute.
|
2731 |
|
2732 |
+
for (var i = 0, len = regExp.length; i < len; i++) {
|
2733 |
if (attrName.match(regExp[i])) {
|
2734 |
return true;
|
2735 |
}
|
2786 |
*/
|
2787 |
|
2788 |
var NAME$6 = 'tooltip';
|
2789 |
+
var VERSION$6 = '4.5.0';
|
2790 |
var DATA_KEY$6 = 'bs.tooltip';
|
2791 |
var EVENT_KEY$6 = "." + DATA_KEY$6;
|
2792 |
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
|
2811 |
whiteList: 'object',
|
2812 |
popperConfig: '(null|object)'
|
2813 |
};
|
2814 |
+
var AttachmentMap = {
|
2815 |
AUTO: 'auto',
|
2816 |
TOP: 'top',
|
2817 |
RIGHT: 'right',
|
2836 |
whiteList: DefaultWhitelist,
|
2837 |
popperConfig: null
|
2838 |
};
|
2839 |
+
var HOVER_STATE_SHOW = 'show';
|
2840 |
+
var HOVER_STATE_OUT = 'out';
|
2841 |
+
var Event = {
|
|
|
|
|
2842 |
HIDE: "hide" + EVENT_KEY$6,
|
2843 |
HIDDEN: "hidden" + EVENT_KEY$6,
|
2844 |
SHOW: "show" + EVENT_KEY$6,
|
2850 |
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
|
2851 |
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
|
2852 |
};
|
2853 |
+
var CLASS_NAME_FADE$2 = 'fade';
|
2854 |
+
var CLASS_NAME_SHOW$4 = 'show';
|
2855 |
+
var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
2856 |
+
var SELECTOR_ARROW = '.arrow';
|
2857 |
+
var TRIGGER_HOVER = 'hover';
|
2858 |
+
var TRIGGER_FOCUS = 'focus';
|
2859 |
+
var TRIGGER_CLICK = 'click';
|
2860 |
+
var TRIGGER_MANUAL = 'manual';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2861 |
/**
|
2862 |
* ------------------------------------------------------------------------
|
2863 |
* Class Definition
|
2864 |
* ------------------------------------------------------------------------
|
2865 |
*/
|
2866 |
|
2867 |
+
var Tooltip = /*#__PURE__*/function () {
|
|
|
|
|
2868 |
function Tooltip(element, config) {
|
2869 |
if (typeof Popper === 'undefined') {
|
2870 |
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
|
2922 |
context._leave(null, context);
|
2923 |
}
|
2924 |
} else {
|
2925 |
+
if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {
|
2926 |
this._leave(null, this);
|
2927 |
|
2928 |
return;
|
2982 |
this.setContent();
|
2983 |
|
2984 |
if (this.config.animation) {
|
2985 |
+
$(tip).addClass(CLASS_NAME_FADE$2);
|
2986 |
}
|
2987 |
|
2988 |
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
|
3001 |
|
3002 |
$(this.element).trigger(this.constructor.Event.INSERTED);
|
3003 |
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
|
3004 |
+
$(tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra
|
3005 |
// empty mouseover listeners to the body's immediate children;
|
3006 |
// only needed because of broken event delegation on iOS
|
3007 |
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
3019 |
_this._hoverState = null;
|
3020 |
$(_this.element).trigger(_this.constructor.Event.SHOWN);
|
3021 |
|
3022 |
+
if (prevHoverState === HOVER_STATE_OUT) {
|
3023 |
_this._leave(null, _this);
|
3024 |
}
|
3025 |
};
|
3026 |
|
3027 |
+
if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
|
3028 |
var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
|
3029 |
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
3030 |
} else {
|
3040 |
var hideEvent = $.Event(this.constructor.Event.HIDE);
|
3041 |
|
3042 |
var complete = function complete() {
|
3043 |
+
if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
|
3044 |
tip.parentNode.removeChild(tip);
|
3045 |
}
|
3046 |
|
3065 |
return;
|
3066 |
}
|
3067 |
|
3068 |
+
$(tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
|
3069 |
// empty mouseover listeners we added for iOS support
|
3070 |
|
3071 |
if ('ontouchstart' in document.documentElement) {
|
3072 |
$(document.body).children().off('mouseover', null, $.noop);
|
3073 |
}
|
3074 |
|
3075 |
+
this._activeTrigger[TRIGGER_CLICK] = false;
|
3076 |
+
this._activeTrigger[TRIGGER_FOCUS] = false;
|
3077 |
+
this._activeTrigger[TRIGGER_HOVER] = false;
|
3078 |
|
3079 |
+
if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
|
3080 |
var transitionDuration = Util.getTransitionDurationFromElement(tip);
|
3081 |
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
3082 |
} else {
|
3108 |
|
3109 |
_proto.setContent = function setContent() {
|
3110 |
var tip = this.getTipElement();
|
3111 |
+
this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
|
3112 |
+
$(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
|
3113 |
};
|
3114 |
|
3115 |
_proto.setElementContent = function setElementContent($element, content) {
|
3159 |
behavior: this.config.fallbackPlacement
|
3160 |
},
|
3161 |
arrow: {
|
3162 |
+
element: SELECTOR_ARROW
|
3163 |
},
|
3164 |
preventOverflow: {
|
3165 |
boundariesElement: this.config.boundary
|
3174 |
return _this3._handlePopperPlacementChange(data);
|
3175 |
}
|
3176 |
};
|
3177 |
+
return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
|
3178 |
};
|
3179 |
|
3180 |
_proto._getOffset = function _getOffset() {
|
3184 |
|
3185 |
if (typeof this.config.offset === 'function') {
|
3186 |
offset.fn = function (data) {
|
3187 |
+
data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {});
|
3188 |
return data;
|
3189 |
};
|
3190 |
} else {
|
3207 |
};
|
3208 |
|
3209 |
_proto._getAttachment = function _getAttachment(placement) {
|
3210 |
+
return AttachmentMap[placement.toUpperCase()];
|
3211 |
};
|
3212 |
|
3213 |
_proto._setListeners = function _setListeners() {
|
3219 |
$(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
|
3220 |
return _this5.toggle(event);
|
3221 |
});
|
3222 |
+
} else if (trigger !== TRIGGER_MANUAL) {
|
3223 |
+
var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
|
3224 |
+
var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
|
3225 |
$(_this5.element).on(eventIn, _this5.config.selector, function (event) {
|
3226 |
return _this5._enter(event);
|
3227 |
}).on(eventOut, _this5.config.selector, function (event) {
|
3239 |
$(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
|
3240 |
|
3241 |
if (this.config.selector) {
|
3242 |
+
this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
|
3243 |
trigger: 'manual',
|
3244 |
selector: ''
|
3245 |
});
|
3267 |
}
|
3268 |
|
3269 |
if (event) {
|
3270 |
+
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
3271 |
}
|
3272 |
|
3273 |
+
if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
|
3274 |
+
context._hoverState = HOVER_STATE_SHOW;
|
3275 |
return;
|
3276 |
}
|
3277 |
|
3278 |
clearTimeout(context._timeout);
|
3279 |
+
context._hoverState = HOVER_STATE_SHOW;
|
3280 |
|
3281 |
if (!context.config.delay || !context.config.delay.show) {
|
3282 |
context.show();
|
3284 |
}
|
3285 |
|
3286 |
context._timeout = setTimeout(function () {
|
3287 |
+
if (context._hoverState === HOVER_STATE_SHOW) {
|
3288 |
context.show();
|
3289 |
}
|
3290 |
}, context.config.delay.show);
|
3300 |
}
|
3301 |
|
3302 |
if (event) {
|
3303 |
+
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
|
3304 |
}
|
3305 |
|
3306 |
if (context._isWithActiveTrigger()) {
|
3308 |
}
|
3309 |
|
3310 |
clearTimeout(context._timeout);
|
3311 |
+
context._hoverState = HOVER_STATE_OUT;
|
3312 |
|
3313 |
if (!context.config.delay || !context.config.delay.hide) {
|
3314 |
context.hide();
|
3316 |
}
|
3317 |
|
3318 |
context._timeout = setTimeout(function () {
|
3319 |
+
if (context._hoverState === HOVER_STATE_OUT) {
|
3320 |
context.hide();
|
3321 |
}
|
3322 |
}, context.config.delay.hide);
|
3339 |
delete dataAttributes[dataAttr];
|
3340 |
}
|
3341 |
});
|
3342 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {});
|
3343 |
|
3344 |
if (typeof config.delay === 'number') {
|
3345 |
config.delay = {
|
3389 |
};
|
3390 |
|
3391 |
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
|
3392 |
+
this.tip = popperData.instance.popper;
|
|
|
3393 |
|
3394 |
this._cleanTipClass();
|
3395 |
|
3404 |
return;
|
3405 |
}
|
3406 |
|
3407 |
+
$(tip).removeClass(CLASS_NAME_FADE$2);
|
3408 |
this.config.animation = false;
|
3409 |
this.hide();
|
3410 |
this.show();
|
3460 |
}, {
|
3461 |
key: "Event",
|
3462 |
get: function get() {
|
3463 |
+
return Event;
|
3464 |
}
|
3465 |
}, {
|
3466 |
key: "EVENT_KEY",
|
3498 |
*/
|
3499 |
|
3500 |
var NAME$7 = 'popover';
|
3501 |
+
var VERSION$7 = '4.5.0';
|
3502 |
var DATA_KEY$7 = 'bs.popover';
|
3503 |
var EVENT_KEY$7 = "." + DATA_KEY$7;
|
3504 |
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
|
3505 |
var CLASS_PREFIX$1 = 'bs-popover';
|
3506 |
var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
|
3507 |
|
3508 |
+
var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
|
3509 |
placement: 'right',
|
3510 |
trigger: 'click',
|
3511 |
content: '',
|
3512 |
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
3513 |
});
|
3514 |
|
3515 |
+
var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
|
3516 |
content: '(string|element|function)'
|
3517 |
});
|
3518 |
|
3519 |
+
var CLASS_NAME_FADE$3 = 'fade';
|
3520 |
+
var CLASS_NAME_SHOW$5 = 'show';
|
3521 |
+
var SELECTOR_TITLE = '.popover-header';
|
3522 |
+
var SELECTOR_CONTENT = '.popover-body';
|
3523 |
+
var Event$1 = {
|
|
|
|
|
|
|
|
|
3524 |
HIDE: "hide" + EVENT_KEY$7,
|
3525 |
HIDDEN: "hidden" + EVENT_KEY$7,
|
3526 |
SHOW: "show" + EVENT_KEY$7,
|
3538 |
* ------------------------------------------------------------------------
|
3539 |
*/
|
3540 |
|
3541 |
+
var Popover = /*#__PURE__*/function (_Tooltip) {
|
|
|
|
|
3542 |
_inheritsLoose(Popover, _Tooltip);
|
3543 |
|
3544 |
function Popover() {
|
3564 |
_proto.setContent = function setContent() {
|
3565 |
var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
|
3566 |
|
3567 |
+
this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
|
3568 |
|
3569 |
var content = this._getContent();
|
3570 |
|
3572 |
content = content.call(this.element);
|
3573 |
}
|
3574 |
|
3575 |
+
this.setElementContent($tip.find(SELECTOR_CONTENT), content);
|
3576 |
+
$tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
|
3577 |
} // Private
|
3578 |
;
|
3579 |
|
3640 |
}, {
|
3641 |
key: "Event",
|
3642 |
get: function get() {
|
3643 |
+
return Event$1;
|
3644 |
}
|
3645 |
}, {
|
3646 |
key: "EVENT_KEY",
|
3678 |
*/
|
3679 |
|
3680 |
var NAME$8 = 'scrollspy';
|
3681 |
+
var VERSION$8 = '4.5.0';
|
3682 |
var DATA_KEY$8 = 'bs.scrollspy';
|
3683 |
var EVENT_KEY$8 = "." + DATA_KEY$8;
|
3684 |
var DATA_API_KEY$6 = '.data-api';
|
3693 |
method: 'string',
|
3694 |
target: '(string|element)'
|
3695 |
};
|
3696 |
+
var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
|
3697 |
+
var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
|
3698 |
+
var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
|
3699 |
+
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
3700 |
+
var CLASS_NAME_ACTIVE$2 = 'active';
|
3701 |
+
var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
|
3702 |
+
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
3703 |
+
var SELECTOR_NAV_LINKS = '.nav-link';
|
3704 |
+
var SELECTOR_NAV_ITEMS = '.nav-item';
|
3705 |
+
var SELECTOR_LIST_ITEMS = '.list-group-item';
|
3706 |
+
var SELECTOR_DROPDOWN = '.dropdown';
|
3707 |
+
var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
|
3708 |
+
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
3709 |
+
var METHOD_OFFSET = 'offset';
|
3710 |
+
var METHOD_POSITION = 'position';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3711 |
/**
|
3712 |
* ------------------------------------------------------------------------
|
3713 |
* Class Definition
|
3714 |
* ------------------------------------------------------------------------
|
3715 |
*/
|
3716 |
|
3717 |
+
var ScrollSpy = /*#__PURE__*/function () {
|
|
|
|
|
3718 |
function ScrollSpy(element, config) {
|
3719 |
var _this = this;
|
3720 |
|
3721 |
this._element = element;
|
3722 |
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
3723 |
this._config = this._getConfig(config);
|
3724 |
+
this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
|
3725 |
this._offsets = [];
|
3726 |
this._targets = [];
|
3727 |
this._activeTarget = null;
|
3728 |
this._scrollHeight = 0;
|
3729 |
+
$(this._scrollElement).on(EVENT_SCROLL, function (event) {
|
3730 |
return _this._process(event);
|
3731 |
});
|
3732 |
this.refresh();
|
3741 |
_proto.refresh = function refresh() {
|
3742 |
var _this2 = this;
|
3743 |
|
3744 |
+
var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
|
3745 |
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
3746 |
+
var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
3747 |
this._offsets = [];
|
3748 |
this._targets = [];
|
3749 |
this._scrollHeight = this._getScrollHeight();
|
3792 |
;
|
3793 |
|
3794 |
_proto._getConfig = function _getConfig(config) {
|
3795 |
+
config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {});
|
3796 |
|
3797 |
+
if (typeof config.target !== 'string' && Util.isElement(config.target)) {
|
3798 |
var id = $(config.target).attr('id');
|
3799 |
|
3800 |
if (!id) {
|
3850 |
return;
|
3851 |
}
|
3852 |
|
3853 |
+
for (var i = this._offsets.length; i--;) {
|
|
|
|
|
3854 |
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
3855 |
|
3856 |
if (isActiveTarget) {
|
3870 |
|
3871 |
var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
|
3872 |
|
3873 |
+
if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
|
3874 |
+
$link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
|
3875 |
+
$link.addClass(CLASS_NAME_ACTIVE$2);
|
3876 |
} else {
|
3877 |
// Set triggered link as active
|
3878 |
+
$link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active
|
3879 |
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
3880 |
|
3881 |
+
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item
|
3882 |
|
3883 |
+
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
|
3884 |
}
|
3885 |
|
3886 |
+
$(this._scrollElement).trigger(EVENT_ACTIVATE, {
|
3887 |
relatedTarget: target
|
3888 |
});
|
3889 |
};
|
3890 |
|
3891 |
_proto._clear = function _clear() {
|
3892 |
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
|
3893 |
+
return node.classList.contains(CLASS_NAME_ACTIVE$2);
|
3894 |
}).forEach(function (node) {
|
3895 |
+
return node.classList.remove(CLASS_NAME_ACTIVE$2);
|
3896 |
});
|
3897 |
} // Static
|
3898 |
;
|
3939 |
*/
|
3940 |
|
3941 |
|
3942 |
+
$(window).on(EVENT_LOAD_DATA_API$2, function () {
|
3943 |
+
var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
|
3944 |
var scrollSpysLength = scrollSpys.length;
|
3945 |
|
3946 |
for (var i = scrollSpysLength; i--;) {
|
3970 |
*/
|
3971 |
|
3972 |
var NAME$9 = 'tab';
|
3973 |
+
var VERSION$9 = '4.5.0';
|
3974 |
var DATA_KEY$9 = 'bs.tab';
|
3975 |
var EVENT_KEY$9 = "." + DATA_KEY$9;
|
3976 |
var DATA_API_KEY$7 = '.data-api';
|
3977 |
var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
|
3978 |
+
var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
|
3979 |
+
var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
|
3980 |
+
var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
|
3981 |
+
var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
|
3982 |
+
var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
|
3983 |
+
var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
3984 |
+
var CLASS_NAME_ACTIVE$3 = 'active';
|
3985 |
+
var CLASS_NAME_DISABLED$1 = 'disabled';
|
3986 |
+
var CLASS_NAME_FADE$4 = 'fade';
|
3987 |
+
var CLASS_NAME_SHOW$6 = 'show';
|
3988 |
+
var SELECTOR_DROPDOWN$1 = '.dropdown';
|
3989 |
+
var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
|
3990 |
+
var SELECTOR_ACTIVE$2 = '.active';
|
3991 |
+
var SELECTOR_ACTIVE_UL = '> li > .active';
|
3992 |
+
var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
|
3993 |
+
var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
|
3994 |
+
var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
|
|
|
|
|
|
|
|
|
|
|
|
|
3995 |
/**
|
3996 |
* ------------------------------------------------------------------------
|
3997 |
* Class Definition
|
3998 |
* ------------------------------------------------------------------------
|
3999 |
*/
|
4000 |
|
4001 |
+
var Tab = /*#__PURE__*/function () {
|
|
|
|
|
4002 |
function Tab(element) {
|
4003 |
this._element = element;
|
4004 |
} // Getters
|
4010 |
_proto.show = function show() {
|
4011 |
var _this = this;
|
4012 |
|
4013 |
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE$3) || $(this._element).hasClass(CLASS_NAME_DISABLED$1)) {
|
4014 |
return;
|
4015 |
}
|
4016 |
|
4017 |
var target;
|
4018 |
var previous;
|
4019 |
+
var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
|
4020 |
var selector = Util.getSelectorFromElement(this._element);
|
4021 |
|
4022 |
if (listElement) {
|
4023 |
+
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;
|
4024 |
previous = $.makeArray($(listElement).find(itemSelector));
|
4025 |
previous = previous[previous.length - 1];
|
4026 |
}
|
4027 |
|
4028 |
+
var hideEvent = $.Event(EVENT_HIDE$3, {
|
4029 |
relatedTarget: this._element
|
4030 |
});
|
4031 |
+
var showEvent = $.Event(EVENT_SHOW$3, {
|
4032 |
relatedTarget: previous
|
4033 |
});
|
4034 |
|
4049 |
this._activate(this._element, listElement);
|
4050 |
|
4051 |
var complete = function complete() {
|
4052 |
+
var hiddenEvent = $.Event(EVENT_HIDDEN$3, {
|
4053 |
relatedTarget: _this._element
|
4054 |
});
|
4055 |
+
var shownEvent = $.Event(EVENT_SHOWN$3, {
|
4056 |
relatedTarget: previous
|
4057 |
});
|
4058 |
$(previous).trigger(hiddenEvent);
|
4075 |
_proto._activate = function _activate(element, container, callback) {
|
4076 |
var _this2 = this;
|
4077 |
|
4078 |
+
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE$2);
|
4079 |
var active = activeElements[0];
|
4080 |
+
var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE$4);
|
4081 |
|
4082 |
var complete = function complete() {
|
4083 |
return _this2._transitionComplete(element, active, callback);
|
4085 |
|
4086 |
if (active && isTransitioning) {
|
4087 |
var transitionDuration = Util.getTransitionDurationFromElement(active);
|
4088 |
+
$(active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
4089 |
} else {
|
4090 |
complete();
|
4091 |
}
|
4093 |
|
4094 |
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
|
4095 |
if (active) {
|
4096 |
+
$(active).removeClass(CLASS_NAME_ACTIVE$3);
|
4097 |
+
var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
|
4098 |
|
4099 |
if (dropdownChild) {
|
4100 |
+
$(dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
|
4101 |
}
|
4102 |
|
4103 |
if (active.getAttribute('role') === 'tab') {
|
4105 |
}
|
4106 |
}
|
4107 |
|
4108 |
+
$(element).addClass(CLASS_NAME_ACTIVE$3);
|
4109 |
|
4110 |
if (element.getAttribute('role') === 'tab') {
|
4111 |
element.setAttribute('aria-selected', true);
|
4113 |
|
4114 |
Util.reflow(element);
|
4115 |
|
4116 |
+
if (element.classList.contains(CLASS_NAME_FADE$4)) {
|
4117 |
+
element.classList.add(CLASS_NAME_SHOW$6);
|
4118 |
}
|
4119 |
|
4120 |
+
if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
|
4121 |
+
var dropdownElement = $(element).closest(SELECTOR_DROPDOWN$1)[0];
|
4122 |
|
4123 |
if (dropdownElement) {
|
4124 |
+
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
|
4125 |
+
$(dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
|
4126 |
}
|
4127 |
|
4128 |
element.setAttribute('aria-expanded', true);
|
4170 |
*/
|
4171 |
|
4172 |
|
4173 |
+
$(document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {
|
4174 |
event.preventDefault();
|
4175 |
|
4176 |
Tab._jQueryInterface.call($(this), 'show');
|
4196 |
*/
|
4197 |
|
4198 |
var NAME$a = 'toast';
|
4199 |
+
var VERSION$a = '4.5.0';
|
4200 |
var DATA_KEY$a = 'bs.toast';
|
4201 |
var EVENT_KEY$a = "." + DATA_KEY$a;
|
4202 |
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
|
4203 |
+
var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
|
4204 |
+
var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
|
4205 |
+
var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
|
4206 |
+
var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
|
4207 |
+
var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
|
4208 |
+
var CLASS_NAME_FADE$5 = 'fade';
|
4209 |
+
var CLASS_NAME_HIDE = 'hide';
|
4210 |
+
var CLASS_NAME_SHOW$7 = 'show';
|
4211 |
+
var CLASS_NAME_SHOWING = 'showing';
|
|
|
|
|
|
|
|
|
4212 |
var DefaultType$7 = {
|
4213 |
animation: 'boolean',
|
4214 |
autohide: 'boolean',
|
4219 |
autohide: true,
|
4220 |
delay: 500
|
4221 |
};
|
4222 |
+
var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
|
|
|
|
|
4223 |
/**
|
4224 |
* ------------------------------------------------------------------------
|
4225 |
* Class Definition
|
4226 |
* ------------------------------------------------------------------------
|
4227 |
*/
|
4228 |
|
4229 |
+
var Toast = /*#__PURE__*/function () {
|
|
|
|
|
4230 |
function Toast(element, config) {
|
4231 |
this._element = element;
|
4232 |
this._config = this._getConfig(config);
|
4242 |
_proto.show = function show() {
|
4243 |
var _this = this;
|
4244 |
|
4245 |
+
var showEvent = $.Event(EVENT_SHOW$4);
|
4246 |
$(this._element).trigger(showEvent);
|
4247 |
|
4248 |
if (showEvent.isDefaultPrevented()) {
|
4250 |
}
|
4251 |
|
4252 |
if (this._config.animation) {
|
4253 |
+
this._element.classList.add(CLASS_NAME_FADE$5);
|
4254 |
}
|
4255 |
|
4256 |
var complete = function complete() {
|
4257 |
+
_this._element.classList.remove(CLASS_NAME_SHOWING);
|
4258 |
|
4259 |
+
_this._element.classList.add(CLASS_NAME_SHOW$7);
|
4260 |
|
4261 |
+
$(_this._element).trigger(EVENT_SHOWN$4);
|
4262 |
|
4263 |
if (_this._config.autohide) {
|
4264 |
_this._timeout = setTimeout(function () {
|
4267 |
}
|
4268 |
};
|
4269 |
|
4270 |
+
this._element.classList.remove(CLASS_NAME_HIDE);
|
4271 |
|
4272 |
Util.reflow(this._element);
|
4273 |
|
4274 |
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
4275 |
|
4276 |
if (this._config.animation) {
|
4277 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
4282 |
};
|
4283 |
|
4284 |
_proto.hide = function hide() {
|
4285 |
+
if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
|
4286 |
return;
|
4287 |
}
|
4288 |
|
4289 |
+
var hideEvent = $.Event(EVENT_HIDE$4);
|
4290 |
$(this._element).trigger(hideEvent);
|
4291 |
|
4292 |
if (hideEvent.isDefaultPrevented()) {
|
4300 |
clearTimeout(this._timeout);
|
4301 |
this._timeout = null;
|
4302 |
|
4303 |
+
if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
|
4304 |
+
this._element.classList.remove(CLASS_NAME_SHOW$7);
|
4305 |
}
|
4306 |
|
4307 |
+
$(this._element).off(EVENT_CLICK_DISMISS$1);
|
4308 |
$.removeData(this._element, DATA_KEY$a);
|
4309 |
this._element = null;
|
4310 |
this._config = null;
|
4312 |
;
|
4313 |
|
4314 |
_proto._getConfig = function _getConfig(config) {
|
4315 |
+
config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), $(this._element).data()), typeof config === 'object' && config ? config : {});
|
4316 |
Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
|
4317 |
return config;
|
4318 |
};
|
4320 |
_proto._setListeners = function _setListeners() {
|
4321 |
var _this2 = this;
|
4322 |
|
4323 |
+
$(this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
|
4324 |
return _this2.hide();
|
4325 |
});
|
4326 |
};
|
4329 |
var _this3 = this;
|
4330 |
|
4331 |
var complete = function complete() {
|
4332 |
+
_this3._element.classList.add(CLASS_NAME_HIDE);
|
4333 |
|
4334 |
+
$(_this3._element).trigger(EVENT_HIDDEN$4);
|
4335 |
};
|
4336 |
|
4337 |
+
this._element.classList.remove(CLASS_NAME_SHOW$7);
|
4338 |
|
4339 |
if (this._config.animation) {
|
4340 |
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
resources/js/bootstrap4.min.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v4.
|
3 |
-
* Copyright 2011-
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?e(Object(r),!0).forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(r,t))})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var n="transitionend";function o(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null},jQueryDetection:function(){if("undefined"==typeof g)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=g.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};_.jQueryDetection(),g.fn.emulateTransitionEnd=o,g.event.special[_.TRANSITION_END]={bindType:n,delegateType:n,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=g.fn[r],f={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},d="alert",m="fade",p="show",v=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,a),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n=n||g(t).closest("."+d)[0]},t._triggerCloseEvent=function(t){var e=g.Event(f.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(p),g(e).hasClass(m)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(f.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(a);e||(e=new i(this),t.data(a,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(f.CLICK_DATA_API,'[data-dismiss="alert"]',v._handleDismiss(new v)),g.fn[r]=v._jQueryInterface,g.fn[r].Constructor=v,g.fn[r].noConflict=function(){return g.fn[r]=h,v._jQueryInterface};var y="button",E="bs.button",C="."+E,T=".data-api",b=g.fn[y],S="active",D="btn",I="focus",w='[data-toggle^="button"]',A='[data-toggle="buttons"]',N='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',k='input:not([type="hidden"])',P=".active",L=".btn",j={CLICK_DATA_API:"click"+C+T,FOCUS_BLUR_DATA_API:"focus"+C+T+" blur"+C+T,LOAD_DATA_API:"load"+C+T},H=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(A)[0];if(n){var i=this._element.querySelector(k);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(P);o&&g(o).removeClass(S)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(S)&&(t=!1):t=!1;t&&(i.checked=!this._element.classList.contains(S),g(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S))},t.dispose=function(){g.removeData(this._element,E),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(E);t||(t=new n(this),g(this).data(E,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();g(document).on(j.CLICK_DATA_API,w,function(t){var e=t.target;if(g(e).hasClass(D)||(e=g(e).closest(L)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var n=e.querySelector(k);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void t.preventDefault();H._jQueryInterface.call(g(e),"toggle")}}).on(j.FOCUS_BLUR_DATA_API,w,function(t){var e=g(t.target).closest(L)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g(window).on(j.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(O)),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector(k);o.checked||o.hasAttribute("checked")?i.classList.add(S):i.classList.remove(S)}for(var r=0,s=(t=[].slice.call(document.querySelectorAll(N))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(S):a.classList.remove(S)}}),g.fn[y]=H._jQueryInterface,g.fn[y].Constructor=H,g.fn[y].noConflict=function(){return g.fn[y]=b,H._jQueryInterface};var R="carousel",x="bs.carousel",F="."+x,U=".data-api",W=g.fn[R],q={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},M={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",Q="prev",B="left",V="right",Y={SLIDE:"slide"+F,SLID:"slid"+F,KEYDOWN:"keydown"+F,MOUSEENTER:"mouseenter"+F,MOUSELEAVE:"mouseleave"+F,TOUCHSTART:"touchstart"+F,TOUCHMOVE:"touchmove"+F,TOUCHEND:"touchend"+F,POINTERDOWN:"pointerdown"+F,POINTERUP:"pointerup"+F,DRAG_START:"dragstart"+F,LOAD_DATA_API:"load"+F+U,CLICK_DATA_API:"click"+F+U},z="carousel",X="active",$="slide",G="carousel-item-right",J="carousel-item-left",Z="carousel-item-next",tt="carousel-item-prev",et="pointer-event",nt=".active",it=".active.carousel-item",ot=".carousel-item",rt=".carousel-item img",st=".carousel-item-next, .carousel-item-prev",at=".carousel-indicators",lt="[data-slide], [data-slide-to]",ct='[data-ride="carousel"]',ht={TOUCH:"touch",PEN:"pen"},ut=function(){function r(t,e){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._element=t,this._indicatorsElement=this._element.querySelector(at),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(K)},t.nextWhenVisible=function(){!document.hidden&&g(this._element).is(":visible")&&"hidden"!==g(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(Q)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(st)&&(_.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(it);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Y.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?K:Q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(F),g.removeData(this._element,x),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},q,{},t),_.typeCheckConfig(R,t,M),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;(this.touchDeltaX=0)<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Y.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Y.MOUSEENTER,function(t){return e.pause(t)}).on(Y.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var e=this;if(this._touchSupported){var n=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX),e._handleSwipe(),"hover"===e._config.pause&&(e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval))};g(this._element.querySelectorAll(rt)).on(Y.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Y.POINTERDOWN,function(t){return n(t)}),g(this._element).on(Y.POINTERUP,function(t){return i(t)}),this._element.classList.add(et)):(g(this._element).on(Y.TOUCHSTART,function(t){return n(t)}),g(this._element).on(Y.TOUCHMOVE,function(t){return function(t){t.originalEvent.touches&&1<t.originalEvent.touches.length?e.touchDeltaX=0:e.touchDeltaX=t.originalEvent.touches[0].clientX-e.touchStartX}(t)}),g(this._element).on(Y.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(ot)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===K,i=t===Q,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===Q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(it)),o=g.Event(Y.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return g(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(nt));g(e).removeClass(X);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(X)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(it),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===K?(n=J,i=Z,B):(n=G,i=tt,V),l&&g(l).hasClass(X))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=g.Event(Y.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass($)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(X),g(s).removeClass(X+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(X),g(l).addClass(X),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(x),e=l({},q,{},g(this).data());"object"==typeof i&&(e=l({},e,{},i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),g(this).data(x,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(z)){var i=l({},g(n).data(),{},g(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(g(n),i),o&&g(n).data(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return q}}]),r}();g(document).on(Y.CLICK_DATA_API,lt,ut._dataApiClickHandler),g(window).on(Y.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ct)),e=0,n=t.length;e<n;e++){var i=g(t[e]);ut._jQueryInterface.call(i,i.data())}}),g.fn[R]=ut._jQueryInterface,g.fn[R].Constructor=ut,g.fn[R].noConflict=function(){return g.fn[R]=W,ut._jQueryInterface};var ft="collapse",dt="bs.collapse",gt="."+dt,_t=g.fn[ft],mt={toggle:!0,parent:""},pt={toggle:"boolean",parent:"(string|element)"},vt={SHOW:"show"+gt,SHOWN:"shown"+gt,HIDE:"hide"+gt,HIDDEN:"hidden"+gt,CLICK_DATA_API:"click"+gt+".data-api"},yt="show",Et="collapse",Ct="collapsing",Tt="collapsed",bt="width",St="height",Dt=".show, .collapsing",It='[data-toggle="collapse"]',wt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(It)),i=0,o=n.length;i<o;i++){var r=n[i],s=_.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){g(this._element).hasClass(yt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(yt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Dt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(Et)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(dt))&&e._isTransitioning))){var i=g.Event(vt.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(dt,null));var o=this._getDimension();g(this._element).removeClass(Et).addClass(Ct),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(Tt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){g(n._element).removeClass(Ct).addClass(Et).addClass(yt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(vt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(yt)){var e=g.Event(vt.HIDE);if(g(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",_.reflow(this._element),g(this._element).addClass(Ct).removeClass(Et).removeClass(yt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=_.getSelectorFromElement(r);if(null!==s)g([].slice.call(document.querySelectorAll(s))).hasClass(yt)||g(r).addClass(Tt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t.setTransitioning(!1),g(t._element).removeClass(Ct).addClass(Et).trigger(vt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,dt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},mt,{},t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ft,t,pt),t},t._getDimension=function(){return g(this._element).hasClass(bt)?bt:St},t._getParent=function(){var t,n=this;_.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return g(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=g(t).hasClass(yt);e.length&&g(e).toggleClass(Tt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=_.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=g(this),e=t.data(dt),n=l({},mt,{},t.data(),{},"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(dt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return mt}}]),a}();g(document).on(vt.CLICK_DATA_API,It,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=g(this),e=_.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));g(i).each(function(){var t=g(this),e=t.data(dt)?"toggle":n.data();wt._jQueryInterface.call(t,e)})}),g.fn[ft]=wt._jQueryInterface,g.fn[ft].Constructor=wt,g.fn[ft].noConflict=function(){return g.fn[ft]=_t,wt._jQueryInterface};var At="dropdown",Nt="bs.dropdown",Ot="."+Nt,kt=".data-api",Pt=g.fn[At],Lt=new RegExp("38|40|27"),jt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+kt,KEYDOWN_DATA_API:"keydown"+Ot+kt,KEYUP_DATA_API:"keyup"+Ot+kt},Ht="disabled",Rt="show",xt="dropup",Ft="dropright",Ut="dropleft",Wt="dropdown-menu-right",qt="position-static",Mt='[data-toggle="dropdown"]',Kt=".dropdown form",Qt=".dropdown-menu",Bt=".navbar-nav",Vt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Yt="top-start",zt="top-end",Xt="bottom-start",$t="bottom-end",Gt="right-start",Jt="left-start",Zt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},te={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},ee=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)){var t=g(this._menu).hasClass(Rt);c._clearMenus(),t||this.show(!0)}},t.show=function(t){if(void 0===t&&(t=!1),!(this._element.disabled||g(this._element).hasClass(Ht)||g(this._menu).hasClass(Rt))){var e={relatedTarget:this._element},n=g.Event(jt.SHOW,e),i=c._getParentFromElement(this._element);if(g(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&t){if("undefined"==typeof u)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(i).addClass(qt),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(i).closest(Bt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Rt),g(i).toggleClass(Rt).trigger(g.Event(jt.SHOWN,e))}}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)&&g(this._menu).hasClass(Rt)){var t={relatedTarget:this._element},e=g.Event(jt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(this._popper&&this._popper.destroy(),g(this._menu).toggleClass(Rt),g(n).toggleClass(Rt).trigger(g.Event(jt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Nt),g(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;g(this._element).on(jt.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,{},g(this._element).data(),{},t),_.typeCheckConfig(At,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Qt))}return this._menu},t._getPlacement=function(){var t=g(this._element.parentNode),e=Xt;return t.hasClass(xt)?(e=Yt,g(this._menu).hasClass(Wt)&&(e=zt)):t.hasClass(Ft)?e=Gt:t.hasClass(Ut)?e=Jt:g(this._menu).hasClass(Wt)&&(e=$t),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),l({},t,{},this._config.popperConfig)},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Nt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Nt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Mt)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Nt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Rt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&g.contains(o,t.target))){var l=g.Event(jt.HIDE,s);g(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),e[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),g(a).removeClass(Rt),g(o).removeClass(Rt).trigger(g.Event(jt.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=_.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||g(t.target).closest(Qt).length)):Lt.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Ht))){var e=c._getParentFromElement(this),n=g(e).hasClass(Rt);if(n||27!==t.which)if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Vt)).filter(function(t){return g(t).is(":visible")});if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(Mt);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Zt}},{key:"DefaultType",get:function(){return te}}]),c}();g(document).on(jt.KEYDOWN_DATA_API,Mt,ee._dataApiKeydownHandler).on(jt.KEYDOWN_DATA_API,Qt,ee._dataApiKeydownHandler).on(jt.CLICK_DATA_API+" "+jt.KEYUP_DATA_API,ee._clearMenus).on(jt.CLICK_DATA_API,Mt,function(t){t.preventDefault(),t.stopPropagation(),ee._jQueryInterface.call(g(this),"toggle")}).on(jt.CLICK_DATA_API,Kt,function(t){t.stopPropagation()}),g.fn[At]=ee._jQueryInterface,g.fn[At].Constructor=ee,g.fn[At].noConflict=function(){return g.fn[At]=Pt,ee._jQueryInterface};var ne="modal",ie="bs.modal",oe="."+ie,re=g.fn[ne],se={backdrop:!0,keyboard:!0,focus:!0,show:!0},ae={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},le={HIDE:"hide"+oe,HIDE_PREVENTED:"hidePrevented"+oe,HIDDEN:"hidden"+oe,SHOW:"show"+oe,SHOWN:"shown"+oe,FOCUSIN:"focusin"+oe,RESIZE:"resize"+oe,CLICK_DISMISS:"click.dismiss"+oe,KEYDOWN_DISMISS:"keydown.dismiss"+oe,MOUSEUP_DISMISS:"mouseup.dismiss"+oe,MOUSEDOWN_DISMISS:"mousedown.dismiss"+oe,CLICK_DATA_API:"click"+oe+".data-api"},ce="modal-dialog-scrollable",he="modal-scrollbar-measure",ue="modal-backdrop",fe="modal-open",de="fade",ge="show",_e="modal-static",me=".modal-dialog",pe=".modal-body",ve='[data-toggle="modal"]',ye='[data-dismiss="modal"]',Ee=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ce=".sticky-top",Te=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(me),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){g(this._element).hasClass(de)&&(this._isTransitioning=!0);var n=g.Event(le.SHOW,{relatedTarget:t});g(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),g(this._element).on(le.CLICK_DISMISS,ye,function(t){return e.hide(t)}),g(this._dialog).on(le.MOUSEDOWN_DISMISS,function(){g(e._element).one(le.MOUSEUP_DISMISS,function(t){g(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=g.Event(le.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(de);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(le.FOCUSIN),g(this._element).removeClass(ge),g(this._element).off(le.CLICK_DISMISS),g(this._dialog).off(le.MOUSEDOWN_DISMISS),i){var o=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return g(t).off(oe)}),g(document).off(le.FOCUSIN),g.removeData(this._element,ie),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},se,{},t),_.typeCheckConfig(ne,t,ae),t},t._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=g.Event(le.HIDE_PREVENTED);if(g(this._element).trigger(e),e.defaultPrevented)return;this._element.classList.add(_e);var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t._element.classList.remove(_e)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},t._showElement=function(t){var e=this,n=g(this._element).hasClass(de),i=this._dialog?this._dialog.querySelector(pe):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),g(this._dialog).hasClass(ce)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(ge),this._config.focus&&this._enforceFocus();function o(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(r)}var r=g.Event(le.SHOWN,{relatedTarget:t});if(n){var s=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},t._enforceFocus=function(){var e=this;g(document).off(le.FOCUSIN).on(le.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===g(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?g(this._element).on(le.KEYDOWN_DISMISS,function(t){27===t.which&&e._triggerBackdropTransition()}):this._isShown||g(this._element).off(le.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(le.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(le.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){g(document.body).removeClass(fe),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(le.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(g(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=g(this._element).hasClass(de)?de:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ue,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(le.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(ge),!t)return;if(!n)return void t();var i=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){g(this._backdrop).removeClass(ge);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(de)){var r=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(Ee)),e=[].slice.call(document.querySelectorAll(Ce));g(t).each(function(t,e){var n=e.style.paddingRight,i=g(e).css("padding-right");g(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),g(e).each(function(t,e){var n=e.style.marginRight,i=g(e).css("margin-right");g(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=g(document.body).css("padding-right");g(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}g(document.body).addClass(fe)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(Ee));g(t).each(function(t,e){var n=g(e).data("padding-right");g(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+Ce));g(e).each(function(t,e){var n=g(e).data("margin-right");"undefined"!=typeof n&&g(e).css("margin-right",n).removeData("margin-right")});var n=g(document.body).data("padding-right");g(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=he,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=g(this).data(ie),e=l({},se,{},g(this).data(),{},"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(ie,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return se}}]),o}();g(document).on(le.CLICK_DATA_API,ve,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(ie)?"toggle":l({},g(e).data(),{},g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(le.SHOW,function(t){t.isDefaultPrevented()||r.one(le.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});Te._jQueryInterface.call(g(e),o,this)}),g.fn[ne]=Te._jQueryInterface,g.fn[ne].Constructor=Te,g.fn[ne].noConflict=function(){return g.fn[ne]=re,Te._jQueryInterface};var be=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Se={"*":["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","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},De=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Ie=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function we(t,r,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(t){var e=a[t],n=e.nodeName.toLowerCase();if(-1===s.indexOf(e.nodeName.toLowerCase()))return e.parentNode.removeChild(e),"continue";var i=[].slice.call(e.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(t){!function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===be.indexOf(n)||Boolean(t.nodeValue.match(De)||t.nodeValue.match(Ie));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(t,o)&&e.removeAttribute(t.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var Ae="tooltip",Ne="bs.tooltip",Oe="."+Ne,ke=g.fn[Ae],Pe="bs-tooltip",Le=new RegExp("(^|\\s)"+Pe+"\\S+","g"),je=["sanitize","whiteList","sanitizeFn"],He={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Re={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},xe={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Se,popperConfig:null},Fe="show",Ue="out",We={HIDE:"hide"+Oe,HIDDEN:"hidden"+Oe,SHOW:"show"+Oe,SHOWN:"shown"+Oe,INSERTED:"inserted"+Oe,CLICK:"click"+Oe,FOCUSIN:"focusin"+Oe,FOCUSOUT:"focusout"+Oe,MOUSEENTER:"mouseenter"+Oe,MOUSELEAVE:"mouseleave"+Oe},qe="fade",Me="show",Ke=".tooltip-inner",Qe=".arrow",Be="hover",Ve="focus",Ye="click",ze="manual",Xe=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Me))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(qe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,this._getPopperConfig(a)),g(o).addClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===Ue&&e._leave(null,e)};if(g(this.tip).hasClass(qe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){function e(){n._hoverState!==Fe&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),g(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()}var n=this,i=this.getTipElement(),o=g.Event(this.constructor.Event.HIDE);if(g(this.element).trigger(o),!o.isDefaultPrevented()){if(g(i).removeClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ye]=!1,this._activeTrigger[Ve]=!1,this._activeTrigger[Be]=!1,g(this.tip).hasClass(qe)){var r=_.getTransitionDurationFromElement(i);g(i).one(_.TRANSITION_END,e).emulateTransitionEnd(r)}else e();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Pe+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ke)),this.getTitle()),g(t).removeClass(qe+" "+Me)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=we(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},t._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Qe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},{},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Re[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==ze){var e=t===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),this._hideModalHandler=function(){i.element&&i.hide()},g(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==t||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ve:Be]=!0),g(e.getTipElement()).hasClass(Me)||e._hoverState===Fe?e._hoverState=Fe:(clearTimeout(e._timeout),e._hoverState=Fe,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Fe&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ve:Be]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ue,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ue&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==je.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,{},e,{},"object"==typeof t&&t?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()),_.typeCheckConfig(Ae,t,this.constructor.DefaultType),t.sanitize&&(t.template=we(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Le);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(qe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ne),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ne,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return xe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return We}},{key:"EVENT_KEY",get:function(){return Oe}},{key:"DefaultType",get:function(){return He}}]),i}();g.fn[Ae]=Xe._jQueryInterface,g.fn[Ae].Constructor=Xe,g.fn[Ae].noConflict=function(){return g.fn[Ae]=ke,Xe._jQueryInterface};var $e="popover",Ge="bs.popover",Je="."+Ge,Ze=g.fn[$e],tn="bs-popover",en=new RegExp("(^|\\s)"+tn+"\\S+","g"),nn=l({},Xe.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),on=l({},Xe.DefaultType,{content:"(string|element|function)"}),rn="fade",sn="show",an=".popover-header",ln=".popover-body",cn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,INSERTED:"inserted"+Je,CLICK:"click"+Je,FOCUSIN:"focusin"+Je,FOCUSOUT:"focusout"+Je,MOUSEENTER:"mouseenter"+Je,MOUSELEAVE:"mouseleave"+Je},hn=function(t){function i(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}(i,t);var e=i.prototype;return e.isWithContent=function(){return this.getTitle()||this._getContent()},e.addAttachmentClass=function(t){g(this.getTipElement()).addClass(tn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},e.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(an),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ln),e),t.removeClass(rn+" "+sn)},e._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},e._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(en);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ge),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ge,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return nn}},{key:"NAME",get:function(){return $e}},{key:"DATA_KEY",get:function(){return Ge}},{key:"Event",get:function(){return cn}},{key:"EVENT_KEY",get:function(){return Je}},{key:"DefaultType",get:function(){return on}}]),i}(Xe);g.fn[$e]=hn._jQueryInterface,g.fn[$e].Constructor=hn,g.fn[$e].noConflict=function(){return g.fn[$e]=Ze,hn._jQueryInterface};var un="scrollspy",fn="bs.scrollspy",dn="."+fn,gn=g.fn[un],_n={offset:10,method:"auto",target:""},mn={offset:"number",method:"string",target:"(string|element)"},pn={ACTIVATE:"activate"+dn,SCROLL:"scroll"+dn,LOAD_DATA_API:"load"+dn+".data-api"},vn="dropdown-item",yn="active",En='[data-spy="scroll"]',Cn=".nav, .list-group",Tn=".nav-link",bn=".nav-item",Sn=".list-group-item",Dn=".dropdown",In=".dropdown-item",wn=".dropdown-toggle",An="offset",Nn="position",On=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+Tn+","+this._config.target+" "+Sn+","+this._config.target+" "+In,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(pn.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?An:Nn,o="auto"===this._config.method?t:this._config.method,r=o===Nn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=_.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[g(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){g.removeData(this._element,fn),g(this._scrollElement).off(dn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},_n,{},"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(un),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(un,t,mn),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=g([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(vn)?(n.closest(Dn).find(wn).addClass(yn),n.addClass(yn)):(n.addClass(yn),n.parents(Cn).prev(Tn+", "+Sn).addClass(yn),n.parents(Cn).prev(bn).children(Tn).addClass(yn)),g(this._scrollElement).trigger(pn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(yn)}).forEach(function(t){return t.classList.remove(yn)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(fn);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data(fn,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return _n}}]),n}();g(window).on(pn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(En)),e=t.length;e--;){var n=g(t[e]);On._jQueryInterface.call(n,n.data())}}),g.fn[un]=On._jQueryInterface,g.fn[un].Constructor=On,g.fn[un].noConflict=function(){return g.fn[un]=gn,On._jQueryInterface};var kn="bs.tab",Pn="."+kn,Ln=g.fn.tab,jn={HIDE:"hide"+Pn,HIDDEN:"hidden"+Pn,SHOW:"show"+Pn,SHOWN:"shown"+Pn,CLICK_DATA_API:"click"+Pn+".data-api"},Hn="dropdown-menu",Rn="active",xn="disabled",Fn="fade",Un="show",Wn=".dropdown",qn=".nav, .list-group",Mn=".active",Kn="> li > .active",Qn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Bn=".dropdown-toggle",Vn="> .dropdown-menu .active",Yn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&g(this._element).hasClass(Rn)||g(this._element).hasClass(xn))){var t,i,e=g(this._element).closest(qn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Kn:Mn;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(jn.HIDE,{relatedTarget:this._element}),a=g.Event(jn.SHOW,{relatedTarget:i});if(i&&g(i).trigger(s),g(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=g.Event(jn.HIDDEN,{relatedTarget:n._element}),e=g.Event(jn.SHOWN,{relatedTarget:i});g(i).trigger(t),g(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){g.removeData(this._element,kn),this._element=null},t._activate=function(t,e,n){function i(){return o._transitionComplete(t,r,n)}var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(Mn):g(e).find(Kn))[0],s=n&&r&&g(r).hasClass(Fn);if(r&&s){var a=_.getTransitionDurationFromElement(r);g(r).removeClass(Un).one(_.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(Rn);var i=g(e.parentNode).find(Vn)[0];i&&g(i).removeClass(Rn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(Rn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),t.classList.contains(Fn)&&t.classList.add(Un),t.parentNode&&g(t.parentNode).hasClass(Hn)){var o=g(t).closest(Wn)[0];if(o){var r=[].slice.call(o.querySelectorAll(Bn));g(r).addClass(Rn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(kn);if(e||(e=new i(this),t.data(kn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(jn.CLICK_DATA_API,Qn,function(t){t.preventDefault(),Yn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Yn._jQueryInterface,g.fn.tab.Constructor=Yn,g.fn.tab.noConflict=function(){return g.fn.tab=Ln,Yn._jQueryInterface};var zn="toast",Xn="bs.toast",$n="."+Xn,Gn=g.fn[zn],Jn={CLICK_DISMISS:"click.dismiss"+$n,HIDE:"hide"+$n,HIDDEN:"hidden"+$n,SHOW:"show"+$n,SHOWN:"shown"+$n},Zn="fade",ti="hide",ei="show",ni="showing",ii={animation:"boolean",autohide:"boolean",delay:"number"},oi={animation:!0,autohide:!0,delay:500},ri='[data-dismiss="toast"]',si=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this,e=g.Event(Jn.SHOW);if(g(this._element).trigger(e),!e.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Zn);var n=function(){t._element.classList.remove(ni),t._element.classList.add(ei),g(t._element).trigger(Jn.SHOWN),t._config.autohide&&(t._timeout=setTimeout(function(){t.hide()},t._config.delay))};if(this._element.classList.remove(ti),_.reflow(this._element),this._element.classList.add(ni),this._config.animation){var i=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},t.hide=function(){if(this._element.classList.contains(ei)){var t=g.Event(Jn.HIDE);g(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(ei)&&this._element.classList.remove(ei),g(this._element).off(Jn.CLICK_DISMISS),g.removeData(this._element,Xn),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},oi,{},g(this._element).data(),{},"object"==typeof t&&t?t:{}),_.typeCheckConfig(zn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(Jn.CLICK_DISMISS,ri,function(){return t.hide()})},t._close=function(){function t(){e._element.classList.add(ti),g(e._element).trigger(Jn.HIDDEN)}var e=this;if(this._element.classList.remove(ei),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Xn);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Xn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return ii}},{key:"Default",get:function(){return oi}}]),i}();g.fn[zn]=si._jQueryInterface,g.fn[zn].Constructor=si,g.fn[zn].noConflict=function(){return g.fn[zn]=Gn,si._jQueryInterface},t.Alert=v,t.Button=H,t.Carousel=ut,t.Collapse=wt,t.Dropdown=ee,t.Modal=Te,t.Popover=hn,t.Scrollspy=On,t.Tab=Yn,t.Toast=si,t.Tooltip=Xe,t.Util=_,Object.defineProperty(t,"__esModule",{value:!0})});
|
7 |
//# sourceMappingURL=bootstrap.min.js.map
|
1 |
/*!
|
2 |
+
* Bootstrap v4.5.0 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
*/
|
6 |
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function l(t){var n=this,i=!1;return e(this).one(c.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||c.triggerTransitionEnd(n)}),t),this}var c={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&c.isElement(s)?"element":null===(a=s)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};c.jQueryDetection(),e.fn.emulateTransitionEnd=l,e.event.special[c.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var h="alert",u=e.fn[h],d=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=c.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=c.getTransitionDurationFromElement(t);e(t).one(c.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),e.fn[h]=d._jQueryInterface,e.fn[h].Constructor=d,e.fn[h].noConflict=function(){return e.fn[h]=u,d._jQueryInterface};var f=e.fn.button,g=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),g._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=g._jQueryInterface,e.fn.button.Constructor=g,e.fn.button.noConflict=function(){return e.fn.button=f,g._jQueryInterface};var m="carousel",p=".bs.carousel",_=e.fn[m],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},b={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},y={TOUCH:"touch",PEN:"pen"},E=function(){function t(t,e){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._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(c.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(p),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=a(a({},v),t),c.typeCheckConfig(m,t,b),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,a=this._element.querySelector(".active.carousel-item"),l=this._getItemIndex(a),h=n||a&&this._getItemByDirection(t,a),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&a&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:l,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),c.reflow(h),e(a).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=c.getTransitionDurationFromElement(a);e(a).one(c.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=a(a({},v),e(this).data());"object"==typeof n&&(o=a(a({},o),n));var s="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof s){if("undefined"==typeof i[s])throw new TypeError('No method named "'+s+'"');i[s]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=c.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var s=a(a({},e(o).data()),e(this).data()),r=this.getAttribute("data-slide-to");r&&(s.interval=!1),t._jQueryInterface.call(e(o),s),r&&e(o).data("bs.carousel").to(r),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",E._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);E._jQueryInterface.call(o,o.data())}})),e.fn[m]=E._jQueryInterface,e.fn[m].Constructor=E,e.fn[m].noConflict=function(){return e.fn[m]=_,E._jQueryInterface};var w="collapse",T=e.fn[w],C={toggle:!0,parent:""},S={toggle:"boolean",parent:"(string|element)"},D=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=c.getSelectorFromElement(s),a=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&a.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(r[0].toUpperCase()+r.slice(1)),l=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(l),this._element.style[r]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",c.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],a=c.getSelectorFromElement(r);if(null!==a)e([].slice.call(document.querySelectorAll(a))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var l=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(l)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=a(a({},C),t)).toggle=Boolean(t.toggle),c.typeCheckConfig(w,t,S),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;c.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=c.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),s=a(a(a({},C),i.data()),"object"==typeof n&&n?n:{});if(!o&&s.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(s.toggle=!1),o||(o=new t(this,s),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return C}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=c.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();D._jQueryInterface.call(t,i)}))})),e.fn[w]=D._jQueryInterface,e.fn[w].Constructor=D,e.fn[w].noConflict=function(){return e.fn[w]=T,D._jQueryInterface};var k="dropdown",N=e.fn[k],A=new RegExp("38|40|27"),I={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},O={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},j=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var a=this._element;"parent"===this._config.reference?a=r:c.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=a(a(a({},this.constructor.Default),e(this._element).data()),t),c.typeCheckConfig(k,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),a(a({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=c.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!A.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return I}},{key:"DefaultType",get:function(){return O}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',j._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",j._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",j._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),j._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[k]=j._jQueryInterface,e.fn[k].Constructor=j,e.fn[k].noConflict=function(){return e.fn[k]=N,j._jQueryInterface};var P=e.fn.modal,x={backdrop:!0,keyboard:!0,focus:!0,show:!0},L={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},R=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=a(a({},x),t),c.typeCheckConfig("modal",t,L),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;this._element.classList.add("modal-static");var i=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){t._element.classList.remove("modal-static")})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&c.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var a=c.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(c.TRANSITION_END,r).emulateTransitionEnd(a)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&c.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=c.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(c.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=c.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(c.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),s=a(a(a({},x),e(this).data()),"object"==typeof n&&n?n:{});if(o||(o=new t(this,s),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else s.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return x}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=c.getSelectorFromElement(this);o&&(n=document.querySelector(o));var s=e(n).data("bs.modal")?"toggle":a(a({},e(n).data()),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||r.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));R._jQueryInterface.call(e(n),s,this)})),e.fn.modal=R._jQueryInterface,e.fn.modal.Constructor=R,e.fn.modal.noConflict=function(){return e.fn.modal=P,R._jQueryInterface};var q=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],F={"*":["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:[]},Q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,B=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function H(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===q.indexOf(n)||Boolean(t.nodeValue.match(Q)||t.nodeValue.match(B));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var U="tooltip",M=e.fn[U],W=new RegExp("(^|\\s)bs-tooltip\\S+","g"),V=["sanitize","whiteList","sanitizeFn"],z={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},K={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},X={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:F,popperConfig:null},Y={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"},$=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=c.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),a=c.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&e(r).addClass("fade");var l="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(l);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=c.getTransitionDurationFromElement(this.tip);e(this.tip).one(c.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=c.getTransitionDurationFromElement(i);e(i).one(c.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=H(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return a(a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:c.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return K[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a(a({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==V.indexOf(t)&&delete n[t]})),"number"==typeof(t=a(a(a({},this.constructor.Default),n),"object"==typeof t&&t?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()),c.typeCheckConfig(U,t,this.constructor.DefaultType),t.sanitize&&(t.template=H(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(W);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return X}},{key:"NAME",get:function(){return U}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Y}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return z}}]),t}();e.fn[U]=$._jQueryInterface,e.fn[U].Constructor=$,e.fn[U].noConflict=function(){return e.fn[U]=M,$._jQueryInterface};var J="popover",G=e.fn[J],Z=new RegExp("(^|\\s)bs-popover\\S+","g"),tt=a(a({},$.Default),{},{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),et=a(a({},$.DefaultType),{},{content:"(string|element|function)"}),nt={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"},it=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Z);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return tt}},{key:"NAME",get:function(){return J}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return nt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return et}}]),s}($);e.fn[J]=it._jQueryInterface,e.fn[J].Constructor=it,e.fn[J].noConflict=function(){return e.fn[J]=G,it._jQueryInterface};var ot="scrollspy",st=e.fn[ot],rt={offset:10,method:"auto",target:""},at={offset:"number",method:"string",target:"(string|element)"},lt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=c.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=a(a({},rt),"object"==typeof t&&t?t:{})).target&&c.isElement(t.target)){var n=e(t.target).attr("id");n||(n=c.getUID(ot),e(t.target).attr("id",n)),t.target="#"+n}return c.typeCheckConfig(ot,t,at),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return rt}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);lt._jQueryInterface.call(i,i.data())}})),e.fn[ot]=lt._jQueryInterface,e.fn[ot].Constructor=lt,e.fn[ot].noConflict=function(){return e.fn[ot]=st,lt._jQueryInterface};var ct=e.fn.tab,ht=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=c.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),l=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),a=function(){return o._transitionComplete(t,s,i)};if(s&&r){var l=c.getTransitionDurationFromElement(s);e(s).removeClass("show").one(c.TRANSITION_END,a).emulateTransitionEnd(l)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),c.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ht._jQueryInterface.call(e(this),"show")})),e.fn.tab=ht._jQueryInterface,e.fn.tab.Constructor=ht,e.fn.tab.noConflict=function(){return e.fn.tab=ct,ht._jQueryInterface};var ut=e.fn.toast,dt={animation:"boolean",autohide:"boolean",delay:"number"},ft={animation:!0,autohide:!0,delay:500},gt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),c.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=a(a(a({},ft),e(this._element).data()),"object"==typeof t&&t?t:{}),c.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return dt}},{key:"Default",get:function(){return ft}}]),t}();e.fn.toast=gt._jQueryInterface,e.fn.toast.Constructor=gt,e.fn.toast.noConflict=function(){return e.fn.toast=ut,gt._jQueryInterface},t.Alert=d,t.Button=g,t.Carousel=E,t.Collapse=D,t.Dropdown=j,t.Modal=R,t.Popover=it,t.Scrollspy=lt,t.Tab=ht,t.Toast=gt,t.Tooltip=$,t.Util=c,Object.defineProperty(t,"__esModule",{value:!0})}));
|
7 |
//# sourceMappingURL=bootstrap.min.js.map
|
resources/js/global-plugin.js
CHANGED
@@ -54,7 +54,7 @@ var iCWP_WPSF_StandardAjax = new function () {
|
|
54 |
|
55 |
if ( oResponse.data.page_reload ) {
|
56 |
setTimeout( function () {
|
57 |
-
location.reload(
|
58 |
}, 2000 );
|
59 |
}
|
60 |
else {
|
54 |
|
55 |
if ( oResponse.data.page_reload ) {
|
56 |
setTimeout( function () {
|
57 |
+
location.reload();
|
58 |
}, 2000 );
|
59 |
}
|
60 |
else {
|
resources/js/shield-scans.js
CHANGED
@@ -1,5 +1,3 @@
|
|
1 |
-
/**
|
2 |
-
*/
|
3 |
jQuery.fn.icwpWpsfScansStart = function ( aOptions ) {
|
4 |
|
5 |
let startScans = function ( evt ) {
|
|
|
|
|
1 |
jQuery.fn.icwpWpsfScansStart = function ( aOptions ) {
|
2 |
|
3 |
let startScans = function ( evt ) {
|
resources/js/shield-u2f-admin.js
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if ( typeof icwp_wpsf_vars_u2f !== 'undefined' ) {
|
2 |
+
jQuery( document ).ready( function () {
|
3 |
+
|
4 |
+
let $oBtnReg = jQuery( 'button#icwp_u2f_key_reg' );
|
5 |
+
let $oU2fStatus = jQuery( '#icwp_u2f_section p.description' );
|
6 |
+
let oLabelRegEx = new RegExp( "^[a-zA-Z0-9_-]{1,16}$" );
|
7 |
+
|
8 |
+
u2fApi.isSupported()
|
9 |
+
.then( function ( supported ) {
|
10 |
+
if ( supported ) {
|
11 |
+
$oBtnReg.prop( 'disabled', false );
|
12 |
+
$oBtnReg.on( 'click', function () {
|
13 |
+
let label = prompt( icwp_wpsf_vars_u2f.strings.prompt_dialog, "<Insert Label>" );
|
14 |
+
if ( typeof label === 'undefined' || label === null ) {
|
15 |
+
alert( icwp_wpsf_vars_u2f.strings.err_no_label )
|
16 |
+
}
|
17 |
+
else if ( !oLabelRegEx.test( label ) ) {
|
18 |
+
alert( icwp_wpsf_vars_u2f.strings.err_invalid_label )
|
19 |
+
}
|
20 |
+
else {
|
21 |
+
u2fApi.register( icwp_wpsf_vars_u2f.reg_request, icwp_wpsf_vars_u2f.signs )
|
22 |
+
.then( function ( response ) {
|
23 |
+
response.label = label;
|
24 |
+
jQuery( '#icwp_wpsf_new_u2f_response' ).val( JSON.stringify( response ) )
|
25 |
+
$oU2fStatus.text( icwp_wpsf_vars_u2f.strings.do_save );
|
26 |
+
$oU2fStatus.css( 'font-weight', 'bolder' )
|
27 |
+
.css( 'color', 'green' );
|
28 |
+
} )
|
29 |
+
.catch( function ( response ) {
|
30 |
+
console.log( response );
|
31 |
+
$oU2fStatus.text( icwp_wpsf_vars_u2f.strings.failed );
|
32 |
+
$oU2fStatus.css( 'font-weight', 'bolder' )
|
33 |
+
.css( 'color', 'red' );
|
34 |
+
} );
|
35 |
+
}
|
36 |
+
} );
|
37 |
+
}
|
38 |
+
else {
|
39 |
+
$oBtnReg.prop( 'disabled', true );
|
40 |
+
$oU2fStatus.text( icwp_wpsf_vars_u2f.strings.not_supported );
|
41 |
+
}
|
42 |
+
} )
|
43 |
+
.catch();
|
44 |
+
|
45 |
+
} );
|
46 |
+
|
47 |
+
|
48 |
+
jQuery.fn.icwpWpsfProfileU2f = function () {
|
49 |
+
|
50 |
+
var initialise = function () {
|
51 |
+
jQuery( document ).ready( function () {
|
52 |
+
jQuery( 'a.icwpWpsf-U2FRemove' ).on( 'click', function ( evt ) {
|
53 |
+
evt.preventDefault();
|
54 |
+
icwp_wpsf_vars_u2f.ajax.u2f_remove.u2fid =
|
55 |
+
jQuery( evt.target ).data( 'u2fid' );
|
56 |
+
iCWP_WPSF_StandardAjax.send_ajax_req( icwp_wpsf_vars_u2f.ajax.u2f_remove );
|
57 |
+
return false;
|
58 |
+
} )
|
59 |
+
} );
|
60 |
+
};
|
61 |
+
|
62 |
+
initialise();
|
63 |
+
return this;
|
64 |
+
};
|
65 |
+
|
66 |
+
jQuery( document ).icwpWpsfProfileU2f();
|
67 |
+
}
|
resources/js/shield-userprofile.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if ( typeof icwp_wpsf_vars_profileyubikey !== 'undefined' ) {
|
2 |
+
jQuery.fn.icwpWpsfProfileYubikey = function () {
|
3 |
+
|
4 |
+
var initialise = function () {
|
5 |
+
jQuery( document ).ready( function () {
|
6 |
+
jQuery( 'a.icwpWpsf-YubikeyRemove' ).on( 'click', function ( evt ) {
|
7 |
+
evt.preventDefault();
|
8 |
+
icwp_wpsf_vars_profileyubikey.yubikey_remove.yubikeyid =
|
9 |
+
jQuery( evt.target ).data( 'yubikeyid' );
|
10 |
+
iCWP_WPSF_StandardAjax.send_ajax_req( icwp_wpsf_vars_profileyubikey.yubikey_remove );
|
11 |
+
return false;
|
12 |
+
} )
|
13 |
+
} );
|
14 |
+
};
|
15 |
+
|
16 |
+
initialise();
|
17 |
+
return this;
|
18 |
+
};
|
19 |
+
|
20 |
+
jQuery( document ).icwpWpsfProfileYubikey();
|
21 |
+
}
|
resources/js/u2f-bundle.js
ADDED
@@ -0,0 +1,830 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function () {
|
2 |
+
'use strict';
|
3 |
+
|
4 |
+
//Copyright 2014-2015 Google Inc. All rights reserved.
|
5 |
+
|
6 |
+
//Use of this source code is governed by a BSD-style
|
7 |
+
//license that can be found in the LICENSE file or at
|
8 |
+
//https://developers.google.com/open-source/licenses/bsd
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @fileoverview The U2F api.
|
12 |
+
*/
|
13 |
+
// 'use strict';
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Namespace for the U2F api.
|
18 |
+
* @type {Object}
|
19 |
+
*/
|
20 |
+
var u2f = u2f || {};
|
21 |
+
|
22 |
+
const chromeApi = u2f; // Adaptation for u2f-api package
|
23 |
+
|
24 |
+
/**
|
25 |
+
* FIDO U2F Javascript API Version
|
26 |
+
* @number
|
27 |
+
*/
|
28 |
+
var js_api_version;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* The U2F extension id
|
32 |
+
* @const {string}
|
33 |
+
*/
|
34 |
+
// The Chrome packaged app extension ID.
|
35 |
+
// Uncomment this if you want to deploy a server instance that uses
|
36 |
+
// the package Chrome app and does not require installing the U2F Chrome extension.
|
37 |
+
u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd';
|
38 |
+
// The U2F Chrome extension ID.
|
39 |
+
// Uncomment this if you want to deploy a server instance that uses
|
40 |
+
// the U2F Chrome extension to authenticate.
|
41 |
+
// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne';
|
42 |
+
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Message types for messsages to/from the extension
|
46 |
+
* @const
|
47 |
+
* @enum {string}
|
48 |
+
*/
|
49 |
+
u2f.MessageTypes = {
|
50 |
+
'U2F_REGISTER_REQUEST': 'u2f_register_request',
|
51 |
+
'U2F_REGISTER_RESPONSE': 'u2f_register_response',
|
52 |
+
'U2F_SIGN_REQUEST': 'u2f_sign_request',
|
53 |
+
'U2F_SIGN_RESPONSE': 'u2f_sign_response',
|
54 |
+
'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request',
|
55 |
+
'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response'
|
56 |
+
};
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Response status codes
|
61 |
+
* @const
|
62 |
+
* @enum {number}
|
63 |
+
*/
|
64 |
+
u2f.ErrorCodes = {
|
65 |
+
'OK': 0,
|
66 |
+
'OTHER_ERROR': 1,
|
67 |
+
'BAD_REQUEST': 2,
|
68 |
+
'CONFIGURATION_UNSUPPORTED': 3,
|
69 |
+
'DEVICE_INELIGIBLE': 4,
|
70 |
+
'TIMEOUT': 5
|
71 |
+
};
|
72 |
+
|
73 |
+
|
74 |
+
//Low level MessagePort API support
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Sets up a MessagePort to the U2F extension using the
|
78 |
+
* available mechanisms.
|
79 |
+
* @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
|
80 |
+
*/
|
81 |
+
u2f.getMessagePort = function(callback) {
|
82 |
+
if (typeof chrome != 'undefined' && chrome.runtime) {
|
83 |
+
// The actual message here does not matter, but we need to get a reply
|
84 |
+
// for the callback to run. Thus, send an empty signature request
|
85 |
+
// in order to get a failure response.
|
86 |
+
var msg = {
|
87 |
+
type: u2f.MessageTypes.U2F_SIGN_REQUEST,
|
88 |
+
signRequests: []
|
89 |
+
};
|
90 |
+
chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() {
|
91 |
+
if (!chrome.runtime.lastError) {
|
92 |
+
// We are on a whitelisted origin and can talk directly
|
93 |
+
// with the extension.
|
94 |
+
u2f.getChromeRuntimePort_(callback);
|
95 |
+
} else {
|
96 |
+
// chrome.runtime was available, but we couldn't message
|
97 |
+
// the extension directly, use iframe
|
98 |
+
u2f.getIframePort_(callback);
|
99 |
+
}
|
100 |
+
});
|
101 |
+
} else if (u2f.isAndroidChrome_()) {
|
102 |
+
u2f.getAuthenticatorPort_(callback);
|
103 |
+
} else if (u2f.isIosChrome_()) {
|
104 |
+
u2f.getIosPort_(callback);
|
105 |
+
} else {
|
106 |
+
// chrome.runtime was not available at all, which is normal
|
107 |
+
// when this origin doesn't have access to any extensions.
|
108 |
+
u2f.getIframePort_(callback);
|
109 |
+
}
|
110 |
+
};
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Detect chrome running on android based on the browser's useragent.
|
114 |
+
* @private
|
115 |
+
*/
|
116 |
+
u2f.isAndroidChrome_ = function() {
|
117 |
+
var userAgent = navigator.userAgent;
|
118 |
+
return userAgent.indexOf('Chrome') != -1 &&
|
119 |
+
userAgent.indexOf('Android') != -1;
|
120 |
+
};
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Detect chrome running on iOS based on the browser's platform.
|
124 |
+
* @private
|
125 |
+
*/
|
126 |
+
u2f.isIosChrome_ = function() {
|
127 |
+
return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1;
|
128 |
+
};
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Connects directly to the extension via chrome.runtime.connect.
|
132 |
+
* @param {function(u2f.WrappedChromeRuntimePort_)} callback
|
133 |
+
* @private
|
134 |
+
*/
|
135 |
+
u2f.getChromeRuntimePort_ = function(callback) {
|
136 |
+
var port = chrome.runtime.connect(u2f.EXTENSION_ID,
|
137 |
+
{'includeTlsChannelId': true});
|
138 |
+
setTimeout(function() {
|
139 |
+
callback(new u2f.WrappedChromeRuntimePort_(port));
|
140 |
+
}, 0);
|
141 |
+
};
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Return a 'port' abstraction to the Authenticator app.
|
145 |
+
* @param {function(u2f.WrappedAuthenticatorPort_)} callback
|
146 |
+
* @private
|
147 |
+
*/
|
148 |
+
u2f.getAuthenticatorPort_ = function(callback) {
|
149 |
+
setTimeout(function() {
|
150 |
+
callback(new u2f.WrappedAuthenticatorPort_());
|
151 |
+
}, 0);
|
152 |
+
};
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Return a 'port' abstraction to the iOS client app.
|
156 |
+
* @param {function(u2f.WrappedIosPort_)} callback
|
157 |
+
* @private
|
158 |
+
*/
|
159 |
+
u2f.getIosPort_ = function(callback) {
|
160 |
+
setTimeout(function() {
|
161 |
+
callback(new u2f.WrappedIosPort_());
|
162 |
+
}, 0);
|
163 |
+
};
|
164 |
+
|
165 |
+
/**
|
166 |
+
* A wrapper for chrome.runtime.Port that is compatible with MessagePort.
|
167 |
+
* @param {Port} port
|
168 |
+
* @constructor
|
169 |
+
* @private
|
170 |
+
*/
|
171 |
+
u2f.WrappedChromeRuntimePort_ = function(port) {
|
172 |
+
this.port_ = port;
|
173 |
+
};
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Format and return a sign request compliant with the JS API version supported by the extension.
|
177 |
+
* @param {Array<u2f.SignRequest>} signRequests
|
178 |
+
* @param {number} timeoutSeconds
|
179 |
+
* @param {number} reqId
|
180 |
+
* @return {Object}
|
181 |
+
*/
|
182 |
+
u2f.formatSignRequest_ =
|
183 |
+
function(appId, challenge, registeredKeys, timeoutSeconds, reqId) {
|
184 |
+
if (js_api_version === undefined || js_api_version < 1.1) {
|
185 |
+
// Adapt request to the 1.0 JS API
|
186 |
+
var signRequests = [];
|
187 |
+
for (var i = 0; i < registeredKeys.length; i++) {
|
188 |
+
signRequests[i] = {
|
189 |
+
version: registeredKeys[i].version,
|
190 |
+
challenge: challenge,
|
191 |
+
keyHandle: registeredKeys[i].keyHandle,
|
192 |
+
appId: appId
|
193 |
+
};
|
194 |
+
}
|
195 |
+
return {
|
196 |
+
type: u2f.MessageTypes.U2F_SIGN_REQUEST,
|
197 |
+
signRequests: signRequests,
|
198 |
+
timeoutSeconds: timeoutSeconds,
|
199 |
+
requestId: reqId
|
200 |
+
};
|
201 |
+
}
|
202 |
+
// JS 1.1 API
|
203 |
+
return {
|
204 |
+
type: u2f.MessageTypes.U2F_SIGN_REQUEST,
|
205 |
+
appId: appId,
|
206 |
+
challenge: challenge,
|
207 |
+
registeredKeys: registeredKeys,
|
208 |
+
timeoutSeconds: timeoutSeconds,
|
209 |
+
requestId: reqId
|
210 |
+
};
|
211 |
+
};
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Format and return a register request compliant with the JS API version supported by the extension..
|
215 |
+
* @param {Array<u2f.SignRequest>} signRequests
|
216 |
+
* @param {Array<u2f.RegisterRequest>} signRequests
|
217 |
+
* @param {number} timeoutSeconds
|
218 |
+
* @param {number} reqId
|
219 |
+
* @return {Object}
|
220 |
+
*/
|
221 |
+
u2f.formatRegisterRequest_ =
|
222 |
+
function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) {
|
223 |
+
if (js_api_version === undefined || js_api_version < 1.1) {
|
224 |
+
// Adapt request to the 1.0 JS API
|
225 |
+
for (var i = 0; i < registerRequests.length; i++) {
|
226 |
+
registerRequests[i].appId = appId;
|
227 |
+
}
|
228 |
+
var signRequests = [];
|
229 |
+
for (var i = 0; i < registeredKeys.length; i++) {
|
230 |
+
signRequests[i] = {
|
231 |
+
version: registeredKeys[i].version,
|
232 |
+
challenge: registerRequests[0],
|
233 |
+
keyHandle: registeredKeys[i].keyHandle,
|
234 |
+
appId: appId
|
235 |
+
};
|
236 |
+
}
|
237 |
+
return {
|
238 |
+
type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
|
239 |
+
signRequests: signRequests,
|
240 |
+
registerRequests: registerRequests,
|
241 |
+
timeoutSeconds: timeoutSeconds,
|
242 |
+
requestId: reqId
|
243 |
+
};
|
244 |
+
}
|
245 |
+
// JS 1.1 API
|
246 |
+
return {
|
247 |
+
type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
|
248 |
+
appId: appId,
|
249 |
+
registerRequests: registerRequests,
|
250 |
+
registeredKeys: registeredKeys,
|
251 |
+
timeoutSeconds: timeoutSeconds,
|
252 |
+
requestId: reqId
|
253 |
+
};
|
254 |
+
};
|
255 |
+
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Posts a message on the underlying channel.
|
259 |
+
* @param {Object} message
|
260 |
+
*/
|
261 |
+
u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) {
|
262 |
+
this.port_.postMessage(message);
|
263 |
+
};
|
264 |
+
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Emulates the HTML 5 addEventListener interface. Works only for the
|
268 |
+
* onmessage event, which is hooked up to the chrome.runtime.Port.onMessage.
|
269 |
+
* @param {string} eventName
|
270 |
+
* @param {function({data: Object})} handler
|
271 |
+
*/
|
272 |
+
u2f.WrappedChromeRuntimePort_.prototype.addEventListener =
|
273 |
+
function(eventName, handler) {
|
274 |
+
var name = eventName.toLowerCase();
|
275 |
+
if (name == 'message' || name == 'onmessage') {
|
276 |
+
this.port_.onMessage.addListener(function(message) {
|
277 |
+
// Emulate a minimal MessageEvent object
|
278 |
+
handler({'data': message});
|
279 |
+
});
|
280 |
+
} else {
|
281 |
+
console.error('WrappedChromeRuntimePort only supports onMessage');
|
282 |
+
}
|
283 |
+
};
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Wrap the Authenticator app with a MessagePort interface.
|
287 |
+
* @constructor
|
288 |
+
* @private
|
289 |
+
*/
|
290 |
+
u2f.WrappedAuthenticatorPort_ = function() {
|
291 |
+
this.requestId_ = -1;
|
292 |
+
this.requestObject_ = null;
|
293 |
+
};
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Launch the Authenticator intent.
|
297 |
+
* @param {Object} message
|
298 |
+
*/
|
299 |
+
u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) {
|
300 |
+
var intentUrl =
|
301 |
+
u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +
|
302 |
+
';S.request=' + encodeURIComponent(JSON.stringify(message)) +
|
303 |
+
';end';
|
304 |
+
document.location = intentUrl;
|
305 |
+
};
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Tells what type of port this is.
|
309 |
+
* @return {String} port type
|
310 |
+
*/
|
311 |
+
u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() {
|
312 |
+
return "WrappedAuthenticatorPort_";
|
313 |
+
};
|
314 |
+
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Emulates the HTML 5 addEventListener interface.
|
318 |
+
* @param {string} eventName
|
319 |
+
* @param {function({data: Object})} handler
|
320 |
+
*/
|
321 |
+
u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) {
|
322 |
+
var name = eventName.toLowerCase();
|
323 |
+
if (name == 'message') {
|
324 |
+
var self = this;
|
325 |
+
/* Register a callback to that executes when
|
326 |
+
* chrome injects the response. */
|
327 |
+
window.addEventListener(
|
328 |
+
'message', self.onRequestUpdate_.bind(self, handler), false);
|
329 |
+
} else {
|
330 |
+
console.error('WrappedAuthenticatorPort only supports message');
|
331 |
+
}
|
332 |
+
};
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Callback invoked when a response is received from the Authenticator.
|
336 |
+
* @param function({data: Object}) callback
|
337 |
+
* @param {Object} message message Object
|
338 |
+
*/
|
339 |
+
u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ =
|
340 |
+
function(callback, message) {
|
341 |
+
var messageObject = JSON.parse(message.data);
|
342 |
+
var intentUrl = messageObject['intentURL'];
|
343 |
+
|
344 |
+
var errorCode = messageObject['errorCode'];
|
345 |
+
var responseObject = null;
|
346 |
+
if (messageObject.hasOwnProperty('data')) {
|
347 |
+
responseObject = /** @type {Object} */ (
|
348 |
+
JSON.parse(messageObject['data']));
|
349 |
+
}
|
350 |
+
|
351 |
+
callback({'data': responseObject});
|
352 |
+
};
|
353 |
+
|
354 |
+
/**
|
355 |
+
* Base URL for intents to Authenticator.
|
356 |
+
* @const
|
357 |
+
* @private
|
358 |
+
*/
|
359 |
+
u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ =
|
360 |
+
'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE';
|
361 |
+
|
362 |
+
/**
|
363 |
+
* Wrap the iOS client app with a MessagePort interface.
|
364 |
+
* @constructor
|
365 |
+
* @private
|
366 |
+
*/
|
367 |
+
u2f.WrappedIosPort_ = function() {};
|
368 |
+
|
369 |
+
/**
|
370 |
+
* Launch the iOS client app request
|
371 |
+
* @param {Object} message
|
372 |
+
*/
|
373 |
+
u2f.WrappedIosPort_.prototype.postMessage = function(message) {
|
374 |
+
var str = JSON.stringify(message);
|
375 |
+
var url = "u2f://auth?" + encodeURI(str);
|
376 |
+
location.replace(url);
|
377 |
+
};
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Tells what type of port this is.
|
381 |
+
* @return {String} port type
|
382 |
+
*/
|
383 |
+
u2f.WrappedIosPort_.prototype.getPortType = function() {
|
384 |
+
return "WrappedIosPort_";
|
385 |
+
};
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Emulates the HTML 5 addEventListener interface.
|
389 |
+
* @param {string} eventName
|
390 |
+
* @param {function({data: Object})} handler
|
391 |
+
*/
|
392 |
+
u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) {
|
393 |
+
var name = eventName.toLowerCase();
|
394 |
+
if (name !== 'message') {
|
395 |
+
console.error('WrappedIosPort only supports message');
|
396 |
+
}
|
397 |
+
};
|
398 |
+
|
399 |
+
/**
|
400 |
+
* Sets up an embedded trampoline iframe, sourced from the extension.
|
401 |
+
* @param {function(MessagePort)} callback
|
402 |
+
* @private
|
403 |
+
*/
|
404 |
+
u2f.getIframePort_ = function(callback) {
|
405 |
+
// Create the iframe
|
406 |
+
var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID;
|
407 |
+
var iframe = document.createElement('iframe');
|
408 |
+
iframe.src = iframeOrigin + '/u2f-comms.html';
|
409 |
+
iframe.setAttribute('style', 'display:none');
|
410 |
+
document.body.appendChild(iframe);
|
411 |
+
|
412 |
+
var channel = new MessageChannel();
|
413 |
+
var ready = function(message) {
|
414 |
+
if (message.data == 'ready') {
|
415 |
+
channel.port1.removeEventListener('message', ready);
|
416 |
+
callback(channel.port1);
|
417 |
+
} else {
|
418 |
+
console.error('First event on iframe port was not "ready"');
|
419 |
+
}
|
420 |
+
};
|
421 |
+
channel.port1.addEventListener('message', ready);
|
422 |
+
channel.port1.start();
|
423 |
+
|
424 |
+
iframe.addEventListener('load', function() {
|
425 |
+
// Deliver the port to the iframe and initialize
|
426 |
+
iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]);
|
427 |
+
});
|
428 |
+
};
|
429 |
+
|
430 |
+
|
431 |
+
//High-level JS API
|
432 |
+
|
433 |
+
/**
|
434 |
+
* Default extension response timeout in seconds.
|
435 |
+
* @const
|
436 |
+
*/
|
437 |
+
u2f.EXTENSION_TIMEOUT_SEC = 30;
|
438 |
+
|
439 |
+
/**
|
440 |
+
* A singleton instance for a MessagePort to the extension.
|
441 |
+
* @type {MessagePort|u2f.WrappedChromeRuntimePort_}
|
442 |
+
* @private
|
443 |
+
*/
|
444 |
+
u2f.port_ = null;
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Callbacks waiting for a port
|
448 |
+
* @type {Array<function((MessagePort|u2f.WrappedChromeRuntimePort_))>}
|
449 |
+
* @private
|
450 |
+
*/
|
451 |
+
u2f.waitingForPort_ = [];
|
452 |
+
|
453 |
+
/**
|
454 |
+
* A counter for requestIds.
|
455 |
+
* @type {number}
|
456 |
+
* @private
|
457 |
+
*/
|
458 |
+
u2f.reqCounter_ = 0;
|
459 |
+
|
460 |
+
/**
|
461 |
+
* A map from requestIds to client callbacks
|
462 |
+
* @type {Object.<number,(function((u2f.Error|u2f.RegisterResponse))
|
463 |
+
* |function((u2f.Error|u2f.SignResponse)))>}
|
464 |
+
* @private
|
465 |
+
*/
|
466 |
+
u2f.callbackMap_ = {};
|
467 |
+
|
468 |
+
/**
|
469 |
+
* Creates or retrieves the MessagePort singleton to use.
|
470 |
+
* @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
|
471 |
+
* @private
|
472 |
+
*/
|
473 |
+
u2f.getPortSingleton_ = function(callback) {
|
474 |
+
if (u2f.port_) {
|
475 |
+
callback(u2f.port_);
|
476 |
+
} else {
|
477 |
+
if (u2f.waitingForPort_.length == 0) {
|
478 |
+
u2f.getMessagePort(function(port) {
|
479 |
+
u2f.port_ = port;
|
480 |
+
u2f.port_.addEventListener('message',
|
481 |
+
/** @type {function(Event)} */ (u2f.responseHandler_));
|
482 |
+
|
483 |
+
// Careful, here be async callbacks. Maybe.
|
484 |
+
while (u2f.waitingForPort_.length)
|
485 |
+
u2f.waitingForPort_.shift()(u2f.port_);
|
486 |
+
});
|
487 |
+
}
|
488 |
+
u2f.waitingForPort_.push(callback);
|
489 |
+
}
|
490 |
+
};
|
491 |
+
|
492 |
+
/**
|
493 |
+
* Handles response messages from the extension.
|
494 |
+
* @param {MessageEvent.<u2f.Response>} message
|
495 |
+
* @private
|
496 |
+
*/
|
497 |
+
u2f.responseHandler_ = function(message) {
|
498 |
+
var response = message.data;
|
499 |
+
var reqId = response['requestId'];
|
500 |
+
if (!reqId || !u2f.callbackMap_[reqId]) {
|
501 |
+
console.error('Unknown or missing requestId in response.');
|
502 |
+
return;
|
503 |
+
}
|
504 |
+
var cb = u2f.callbackMap_[reqId];
|
505 |
+
delete u2f.callbackMap_[reqId];
|
506 |
+
cb(response['responseData']);
|
507 |
+
};
|
508 |
+
|
509 |
+
/**
|
510 |
+
* Calls the callback with true or false as first and only argument
|
511 |
+
* @param {Function} callback
|
512 |
+
*/
|
513 |
+
u2f.isSupported = function(callback) {
|
514 |
+
var hasCalledBack = false;
|
515 |
+
function reply(value) {
|
516 |
+
if (hasCalledBack)
|
517 |
+
return;
|
518 |
+
hasCalledBack = true;
|
519 |
+
callback(value);
|
520 |
+
}
|
521 |
+
u2f.getApiVersion(
|
522 |
+
function (response) {
|
523 |
+
js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];
|
524 |
+
reply(true);
|
525 |
+
}
|
526 |
+
);
|
527 |
+
// No response from extension within 1500ms -> no support
|
528 |
+
setTimeout(reply.bind(null, false), 1500);
|
529 |
+
};
|
530 |
+
|
531 |
+
/**
|
532 |
+
* Dispatches an array of sign requests to available U2F tokens.
|
533 |
+
* If the JS API version supported by the extension is unknown, it first sends a
|
534 |
+
* message to the extension to find out the supported API version and then it sends
|
535 |
+
* the sign request.
|
536 |
+
* @param {string=} appId
|
537 |
+
* @param {string=} challenge
|
538 |
+
* @param {Array<u2f.RegisteredKey>} registeredKeys
|
539 |
+
* @param {function((u2f.Error|u2f.SignResponse))} callback
|
540 |
+
* @param {number=} opt_timeoutSeconds
|
541 |
+
*/
|
542 |
+
u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
|
543 |
+
if (js_api_version === undefined) {
|
544 |
+
// Send a message to get the extension to JS API version, then send the actual sign request.
|
545 |
+
u2f.getApiVersion(
|
546 |
+
function (response) {
|
547 |
+
js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];
|
548 |
+
console.log("Extension JS API Version: ", js_api_version);
|
549 |
+
u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
|
550 |
+
});
|
551 |
+
} else {
|
552 |
+
// We know the JS API version. Send the actual sign request in the supported API version.
|
553 |
+
u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
|
554 |
+
}
|
555 |
+
};
|
556 |
+
|
557 |
+
/**
|
558 |
+
* Dispatches an array of sign requests to available U2F tokens.
|
559 |
+
* @param {string=} appId
|
560 |
+
* @param {string=} challenge
|
561 |
+
* @param {Array<u2f.RegisteredKey>} registeredKeys
|
562 |
+
* @param {function((u2f.Error|u2f.SignResponse))} callback
|
563 |
+
* @param {number=} opt_timeoutSeconds
|
564 |
+
*/
|
565 |
+
u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
|
566 |
+
u2f.getPortSingleton_(function(port) {
|
567 |
+
var reqId = ++u2f.reqCounter_;
|
568 |
+
u2f.callbackMap_[reqId] = callback;
|
569 |
+
var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
|
570 |
+
opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
|
571 |
+
var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId);
|
572 |
+
port.postMessage(req);
|
573 |
+
});
|
574 |
+
};
|
575 |
+
|
576 |
+
/**
|
577 |
+
* Dispatches register requests to available U2F tokens. An array of sign
|
578 |
+
* requests identifies already registered tokens.
|
579 |
+
* If the JS API version supported by the extension is unknown, it first sends a
|
580 |
+
* message to the extension to find out the supported API version and then it sends
|
581 |
+
* the register request.
|
582 |
+
* @param {string=} appId
|
583 |
+
* @param {Array<u2f.RegisterRequest>} registerRequests
|
584 |
+
* @param {Array<u2f.RegisteredKey>} registeredKeys
|
585 |
+
* @param {function((u2f.Error|u2f.RegisterResponse))} callback
|
586 |
+
* @param {number=} opt_timeoutSeconds
|
587 |
+
*/
|
588 |
+
u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
|
589 |
+
if (js_api_version === undefined) {
|
590 |
+
// Send a message to get the extension to JS API version, then send the actual register request.
|
591 |
+
u2f.getApiVersion(
|
592 |
+
function (response) {
|
593 |
+
js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version'];
|
594 |
+
console.log("Extension JS API Version: ", js_api_version);
|
595 |
+
u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
|
596 |
+
callback, opt_timeoutSeconds);
|
597 |
+
});
|
598 |
+
} else {
|
599 |
+
// We know the JS API version. Send the actual register request in the supported API version.
|
600 |
+
u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
|
601 |
+
callback, opt_timeoutSeconds);
|
602 |
+
}
|
603 |
+
};
|
604 |
+
|
605 |
+
/**
|
606 |
+
* Dispatches register requests to available U2F tokens. An array of sign
|
607 |
+
* requests identifies already registered tokens.
|
608 |
+
* @param {string=} appId
|
609 |
+
* @param {Array<u2f.RegisterRequest>} registerRequests
|
610 |
+
* @param {Array<u2f.RegisteredKey>} registeredKeys
|
611 |
+
* @param {function((u2f.Error|u2f.RegisterResponse))} callback
|
612 |
+
* @param {number=} opt_timeoutSeconds
|
613 |
+
*/
|
614 |
+
u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
|
615 |
+
u2f.getPortSingleton_(function(port) {
|
616 |
+
var reqId = ++u2f.reqCounter_;
|
617 |
+
u2f.callbackMap_[reqId] = callback;
|
618 |
+
var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
|
619 |
+
opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
|
620 |
+
var req = u2f.formatRegisterRequest_(
|
621 |
+
appId, registeredKeys, registerRequests, timeoutSeconds, reqId);
|
622 |
+
port.postMessage(req);
|
623 |
+
});
|
624 |
+
};
|
625 |
+
|
626 |
+
|
627 |
+
/**
|
628 |
+
* Dispatches a message to the extension to find out the supported
|
629 |
+
* JS API version.
|
630 |
+
* If the user is on a mobile phone and is thus using Google Authenticator instead
|
631 |
+
* of the Chrome extension, don't send the request and simply return 0.
|
632 |
+
* @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback
|
633 |
+
* @param {number=} opt_timeoutSeconds
|
634 |
+
*/
|
635 |
+
u2f.getApiVersion = function(callback, opt_timeoutSeconds) {
|
636 |
+
u2f.getPortSingleton_(function(port) {
|
637 |
+
// If we are using Android Google Authenticator or iOS client app,
|
638 |
+
// do not fire an intent to ask which JS API version to use.
|
639 |
+
if (port.getPortType) {
|
640 |
+
var apiVersion;
|
641 |
+
switch (port.getPortType()) {
|
642 |
+
case 'WrappedIosPort_':
|
643 |
+
case 'WrappedAuthenticatorPort_':
|
644 |
+
apiVersion = 1.1;
|
645 |
+
break;
|
646 |
+
|
647 |
+
default:
|
648 |
+
apiVersion = 0;
|
649 |
+
break;
|
650 |
+
}
|
651 |
+
callback({ 'js_api_version': apiVersion });
|
652 |
+
return;
|
653 |
+
}
|
654 |
+
var reqId = ++u2f.reqCounter_;
|
655 |
+
u2f.callbackMap_[reqId] = callback;
|
656 |
+
var req = {
|
657 |
+
type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST,
|
658 |
+
timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ?
|
659 |
+
opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC),
|
660 |
+
requestId: reqId
|
661 |
+
};
|
662 |
+
port.postMessage(req);
|
663 |
+
});
|
664 |
+
};
|
665 |
+
|
666 |
+
// Feature detection (yes really)
|
667 |
+
// For IE and Edge detection, see https://stackoverflow.com/questions/31757852#31757969
|
668 |
+
// and https://stackoverflow.com/questions/56360225#56361977
|
669 |
+
var isBrowser = (typeof navigator !== 'undefined') && !!navigator.userAgent;
|
670 |
+
var isSafari = isBrowser && navigator.userAgent.match(/Safari\//)
|
671 |
+
&& !navigator.userAgent.match(/Chrome\//);
|
672 |
+
var isEDGE = isBrowser && /(Edge\/)|(edg\/)/i.test(navigator.userAgent);
|
673 |
+
var isIE = isBrowser && /(MSIE 9|MSIE 10|rv:11.0)/i.test(navigator.userAgent);
|
674 |
+
var _backend = null;
|
675 |
+
function getBackend() {
|
676 |
+
if (_backend)
|
677 |
+
return _backend;
|
678 |
+
var supportChecker = new Promise(function (resolve, reject) {
|
679 |
+
function notSupported() {
|
680 |
+
resolve({ u2f: null });
|
681 |
+
}
|
682 |
+
if (!isBrowser)
|
683 |
+
return notSupported();
|
684 |
+
if (isSafari)
|
685 |
+
// Safari doesn't support U2F, and the Safari-FIDO-U2F
|
686 |
+
// extension lacks full support (Multi-facet apps), so we
|
687 |
+
// block it until proper support.
|
688 |
+
return notSupported();
|
689 |
+
var hasNativeSupport = (typeof window.u2f !== 'undefined') &&
|
690 |
+
(typeof window.u2f.sign === 'function');
|
691 |
+
if (hasNativeSupport)
|
692 |
+
return resolve({ u2f: window.u2f });
|
693 |
+
if (isEDGE || isIE)
|
694 |
+
// We don't want to check for Google's extension hack on EDGE & IE
|
695 |
+
// as it'll cause trouble (popups, etc)
|
696 |
+
return notSupported();
|
697 |
+
if (location.protocol === 'http:')
|
698 |
+
// U2F isn't supported over http, only https
|
699 |
+
return notSupported();
|
700 |
+
if (typeof MessageChannel === 'undefined')
|
701 |
+
// Unsupported browser, the chrome hack would throw
|
702 |
+
return notSupported();
|
703 |
+
// Test for google extension support
|
704 |
+
chromeApi.isSupported(function (ok) {
|
705 |
+
if (ok)
|
706 |
+
resolve({ u2f: chromeApi });
|
707 |
+
else
|
708 |
+
notSupported();
|
709 |
+
});
|
710 |
+
})
|
711 |
+
.then(function (response) {
|
712 |
+
_backend = response.u2f ? supportChecker : null;
|
713 |
+
return response;
|
714 |
+
});
|
715 |
+
return supportChecker;
|
716 |
+
}
|
717 |
+
var ErrorCodes = {
|
718 |
+
OK: 0,
|
719 |
+
OTHER_ERROR: 1,
|
720 |
+
BAD_REQUEST: 2,
|
721 |
+
CONFIGURATION_UNSUPPORTED: 3,
|
722 |
+
DEVICE_INELIGIBLE: 4,
|
723 |
+
TIMEOUT: 5
|
724 |
+
};
|
725 |
+
var ErrorNames = {
|
726 |
+
"0": "OK",
|
727 |
+
"1": "OTHER_ERROR",
|
728 |
+
"2": "BAD_REQUEST",
|
729 |
+
"3": "CONFIGURATION_UNSUPPORTED",
|
730 |
+
"4": "DEVICE_INELIGIBLE",
|
731 |
+
"5": "TIMEOUT"
|
732 |
+
};
|
733 |
+
function makeError(msg, err) {
|
734 |
+
var code = err != null ? err.errorCode : 1; // Default to OTHER_ERROR
|
735 |
+
var type = ErrorNames[('' + code)];
|
736 |
+
var error = new Error(msg);
|
737 |
+
error.metaData = { type: type, code: code };
|
738 |
+
return error;
|
739 |
+
}
|
740 |
+
function isSupported() {
|
741 |
+
return getBackend()
|
742 |
+
.then(function (backend) { return !!backend.u2f; });
|
743 |
+
}
|
744 |
+
function _ensureSupport(backend) {
|
745 |
+
if (!backend.u2f) {
|
746 |
+
if (location.protocol === 'http:')
|
747 |
+
throw new Error("U2F isn't supported over http, only https");
|
748 |
+
throw new Error("U2F not supported");
|
749 |
+
}
|
750 |
+
}
|
751 |
+
function ensureSupport() {
|
752 |
+
return getBackend()
|
753 |
+
.then(_ensureSupport);
|
754 |
+
}
|
755 |
+
function arrayify(value) {
|
756 |
+
if (value != null && Array.isArray(value))
|
757 |
+
return value;
|
758 |
+
return value == null
|
759 |
+
? []
|
760 |
+
: Array.isArray(value)
|
761 |
+
? value.slice() : [value];
|
762 |
+
}
|
763 |
+
function register(registerRequests, signRequests, timeout) {
|
764 |
+
var _registerRequests = arrayify(registerRequests);
|
765 |
+
if (typeof signRequests === 'number' && typeof timeout === 'undefined') {
|
766 |
+
timeout = signRequests;
|
767 |
+
signRequests = [];
|
768 |
+
}
|
769 |
+
var _signRequests = arrayify(signRequests);
|
770 |
+
return getBackend()
|
771 |
+
.then(function (backend) {
|
772 |
+
_ensureSupport(backend);
|
773 |
+
var u2f = backend.u2f;
|
774 |
+
return new Promise(function (resolve, reject) {
|
775 |
+
function callback(response) {
|
776 |
+
if (response.errorCode)
|
777 |
+
reject(makeError("Registration failed", response));
|
778 |
+
else {
|
779 |
+
delete response.errorCode;
|
780 |
+
resolve(response);
|
781 |
+
}
|
782 |
+
}
|
783 |
+
var appId = _registerRequests[0].appId;
|
784 |
+
u2f.register(appId, _registerRequests, _signRequests, callback, timeout);
|
785 |
+
});
|
786 |
+
});
|
787 |
+
}
|
788 |
+
function sign(signRequests, timeout) {
|
789 |
+
var _signRequests = arrayify(signRequests);
|
790 |
+
return getBackend()
|
791 |
+
.then(function (backend) {
|
792 |
+
_ensureSupport(backend);
|
793 |
+
var u2f = backend.u2f;
|
794 |
+
return new Promise(function (resolve, reject) {
|
795 |
+
var _a;
|
796 |
+
function callback(response) {
|
797 |
+
if (response.errorCode)
|
798 |
+
reject(makeError("Sign failed", response));
|
799 |
+
else {
|
800 |
+
delete response.errorCode;
|
801 |
+
resolve(response);
|
802 |
+
}
|
803 |
+
}
|
804 |
+
var appId = _signRequests[0].appId;
|
805 |
+
var challenge = _signRequests[0].challenge;
|
806 |
+
var registeredKeys = (_a = []).concat.apply(_a, _signRequests
|
807 |
+
.map(function (_a) {
|
808 |
+
var version = _a.version, keyHandle = _a.keyHandle, appId = _a.appId;
|
809 |
+
return arrayify(keyHandle)
|
810 |
+
.map(function (keyHandle) {
|
811 |
+
return ({ version: version, keyHandle: keyHandle, appId: appId });
|
812 |
+
});
|
813 |
+
}));
|
814 |
+
u2f.sign(appId, challenge, registeredKeys, callback, timeout);
|
815 |
+
});
|
816 |
+
});
|
817 |
+
}
|
818 |
+
|
819 |
+
var u2fApi = /*#__PURE__*/Object.freeze({
|
820 |
+
ErrorCodes: ErrorCodes,
|
821 |
+
ErrorNames: ErrorNames,
|
822 |
+
isSupported: isSupported,
|
823 |
+
ensureSupport: ensureSupport,
|
824 |
+
register: register,
|
825 |
+
sign: sign
|
826 |
+
});
|
827 |
+
|
828 |
+
window.u2fApi = u2fApi;
|
829 |
+
|
830 |
+
}());
|
resources/js/u2f-frontend.js
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( document ).ready( function () {
|
2 |
+
|
3 |
+
u2fApi.isSupported()
|
4 |
+
.then( function ( supported ) {
|
5 |
+
|
6 |
+
let $oU2fStart = jQuery( 'input#btn_u2f_start' );
|
7 |
+
|
8 |
+
if ( supported ) {
|
9 |
+
|
10 |
+
$oU2fStart.on( 'click', function () {
|
11 |
+
|
12 |
+
u2fApi.sign( JSON.parse( atob( $oU2fStart.data( 'signs' ) ) ) )
|
13 |
+
.then( function ( response ) {
|
14 |
+
let $oForm = $oU2fStart.closest( 'form' );
|
15 |
+
jQuery( '<input>' ).attr( {
|
16 |
+
type: 'hidden',
|
17 |
+
name: 'u2f_signs',
|
18 |
+
value: $oU2fStart.data( 'signs' )
|
19 |
+
} ).appendTo( $oForm );
|
20 |
+
jQuery( '<input>' ).attr( {
|
21 |
+
type: 'hidden',
|
22 |
+
name: $oU2fStart.data( 'input_otp' ),
|
23 |
+
value: JSON.stringify( response )
|
24 |
+
} ).appendTo( $oForm );
|
25 |
+
$oU2fStart.prop( 'disabled', true );
|
26 |
+
$oU2fStart.val( 'U2F successful. Submit the form when ready.' );
|
27 |
+
} )
|
28 |
+
.catch( function ( response ) {
|
29 |
+
alert( 'U2F authentication failed. Reload the page to retry.' );
|
30 |
+
} );
|
31 |
+
} );
|
32 |
+
|
33 |
+
}
|
34 |
+
else {
|
35 |
+
$oU2fStart.prop( 'disabled', true );
|
36 |
+
$oU2fStart.val( "U2F Authentication isn't supported on this browser." );
|
37 |
+
alert( "U2F Authentication isn't supported on this browser." );
|
38 |
+
}
|
39 |
+
} )
|
40 |
+
.catch();
|
41 |
+
|
42 |
+
} );
|
src/config/feature-admin_access_restriction.php
CHANGED
@@ -16,6 +16,9 @@
|
|
16 |
"run_if_wpcli": false,
|
17 |
"order": 20
|
18 |
},
|
|
|
|
|
|
|
19 |
"admin_notices": {
|
20 |
"certain-options-restricted": {
|
21 |
"id": "certain-options-restricted",
|
@@ -39,7 +42,7 @@
|
|
39 |
"title": "Security Admin Restriction Settings",
|
40 |
"title_short": "Security Admin Settings",
|
41 |
"summary": [
|
42 |
-
"Purpose - Restrict access using a simple Access
|
43 |
"Recommendation - Use of this feature is highly recommend."
|
44 |
],
|
45 |
"help_video_id": "338551188"
|
@@ -69,7 +72,7 @@
|
|
69 |
"summary": [
|
70 |
"Purpose - Restricts access to this plugin preventing unauthorized changes to your security settings.",
|
71 |
"Recommendation - Keep the Security Admin feature turned on.",
|
72 |
-
"You need to also enter a new Access
|
73 |
]
|
74 |
},
|
75 |
{
|
@@ -87,7 +90,7 @@
|
|
87 |
"link_blog": "https://shsec.io/wpsf02",
|
88 |
"name": "Enable Security Admin",
|
89 |
"summary": "Enforce Security Admin Access Restriction",
|
90 |
-
"description": "Enable this with great care and consideration. When this Access
|
91 |
},
|
92 |
{
|
93 |
"key": "admin_access_key",
|
@@ -97,8 +100,8 @@
|
|
97 |
"type": "password",
|
98 |
"link_info": "https://shsec.io/42",
|
99 |
"link_blog": "",
|
100 |
-
"name": "Security Admin Access
|
101 |
-
"summary": "Provide/Update Security Admin Access
|
102 |
"description": "Careful: If you forget this, you could potentially lock yourself out from using this plugin."
|
103 |
},
|
104 |
{
|
@@ -106,7 +109,7 @@
|
|
106 |
"section": "section_admin_access_restriction_settings",
|
107 |
"sensitive": true,
|
108 |
"premium": true,
|
109 |
-
"default":
|
110 |
"type": "array",
|
111 |
"link_info": "https://shsec.io/dk",
|
112 |
"link_blog": "",
|
@@ -124,7 +127,7 @@
|
|
124 |
"link_blog": "",
|
125 |
"name": "Security Admin Timeout",
|
126 |
"summary": "Specify An Automatic Timeout Interval For Security Admin Access",
|
127 |
-
"description": "This will automatically expire your Security Admin Session. Does not apply until you enter the access
|
128 |
},
|
129 |
{
|
130 |
"key": "allow_email_override",
|
16 |
"run_if_wpcli": false,
|
17 |
"order": 20
|
18 |
},
|
19 |
+
"wpcli": {
|
20 |
+
"root": "secadmin"
|
21 |
+
},
|
22 |
"admin_notices": {
|
23 |
"certain-options-restricted": {
|
24 |
"id": "certain-options-restricted",
|
42 |
"title": "Security Admin Restriction Settings",
|
43 |
"title_short": "Security Admin Settings",
|
44 |
"summary": [
|
45 |
+
"Purpose - Restrict access using a simple Access PIN.",
|
46 |
"Recommendation - Use of this feature is highly recommend."
|
47 |
],
|
48 |
"help_video_id": "338551188"
|
72 |
"summary": [
|
73 |
"Purpose - Restricts access to this plugin preventing unauthorized changes to your security settings.",
|
74 |
"Recommendation - Keep the Security Admin feature turned on.",
|
75 |
+
"You need to also enter a new Access PIN to enable this feature."
|
76 |
]
|
77 |
},
|
78 |
{
|
90 |
"link_blog": "https://shsec.io/wpsf02",
|
91 |
"name": "Enable Security Admin",
|
92 |
"summary": "Enforce Security Admin Access Restriction",
|
93 |
+
"description": "Enable this with great care and consideration. When this Access PIN option is enabled, you must specify a key below and use it to gain access to this plugin."
|
94 |
},
|
95 |
{
|
96 |
"key": "admin_access_key",
|
100 |
"type": "password",
|
101 |
"link_info": "https://shsec.io/42",
|
102 |
"link_blog": "",
|
103 |
+
"name": "Security Admin Access PIN",
|
104 |
+
"summary": "Provide/Update Security Admin Access PIN",
|
105 |
"description": "Careful: If you forget this, you could potentially lock yourself out from using this plugin."
|
106 |
},
|
107 |
{
|
109 |
"section": "section_admin_access_restriction_settings",
|
110 |
"sensitive": true,
|
111 |
"premium": true,
|
112 |
+
"default": [],
|
113 |
"type": "array",
|
114 |
"link_info": "https://shsec.io/dk",
|
115 |
"link_blog": "",
|
127 |
"link_blog": "",
|
128 |
"name": "Security Admin Timeout",
|
129 |
"summary": "Specify An Automatic Timeout Interval For Security Admin Access",
|
130 |
+
"description": "This will automatically expire your Security Admin Session. Does not apply until you enter the access PIN again. Default: 60 minutes."
|
131 |
},
|
132 |
{
|
133 |
"key": "allow_email_override",
|
src/config/feature-comments_filter.php
CHANGED
@@ -170,7 +170,7 @@
|
|
170 |
"type": "select",
|
171 |
"value_options": [
|
172 |
{
|
173 |
-
"value_key": 0,
|
174 |
"text": "Move To Pending Moderation"
|
175 |
},
|
176 |
{
|
@@ -206,11 +206,11 @@
|
|
206 |
{
|
207 |
"key": "comments_default_action_human_spam",
|
208 |
"section": "section_human_spam_filter",
|
209 |
-
"default": 0,
|
210 |
"type": "select",
|
211 |
"value_options": [
|
212 |
{
|
213 |
-
"value_key": 0,
|
214 |
"text": "Move To Pending Moderation"
|
215 |
},
|
216 |
{
|
170 |
"type": "select",
|
171 |
"value_options": [
|
172 |
{
|
173 |
+
"value_key": "0",
|
174 |
"text": "Move To Pending Moderation"
|
175 |
},
|
176 |
{
|
206 |
{
|
207 |
"key": "comments_default_action_human_spam",
|
208 |
"section": "section_human_spam_filter",
|
209 |
+
"default": "0",
|
210 |
"type": "select",
|
211 |
"value_options": [
|
212 |
{
|
213 |
+
"value_key": "0",
|
214 |
"text": "Move To Pending Moderation"
|
215 |
},
|
216 |
{
|
src/config/feature-email.php
CHANGED
@@ -14,6 +14,9 @@
|
|
14 |
"skip_processor": true,
|
15 |
"tracking_exclude": true
|
16 |
},
|
|
|
|
|
|
|
17 |
"sections": [
|
18 |
{
|
19 |
"slug": "section_email_options",
|
14 |
"skip_processor": true,
|
15 |
"tracking_exclude": true
|
16 |
},
|
17 |
+
"wpcli": {
|
18 |
+
"enabled": false
|
19 |
+
},
|
20 |
"sections": [
|
21 |
{
|
22 |
"slug": "section_email_options",
|
src/config/feature-events.php
CHANGED
@@ -13,6 +13,9 @@
|
|
13 |
"run_if_wpcli": true,
|
14 |
"tracking_exclude": true
|
15 |
},
|
|
|
|
|
|
|
16 |
"sections": [
|
17 |
{
|
18 |
"slug": "section_enable_plugin_feature_events",
|
13 |
"run_if_wpcli": true,
|
14 |
"tracking_exclude": true
|
15 |
},
|
16 |
+
"wpcli": {
|
17 |
+
"enabled": false
|
18 |
+
},
|
19 |
"sections": [
|
20 |
{
|
21 |
"slug": "section_enable_plugin_feature_events",
|
src/config/feature-firewall.php
CHANGED
@@ -306,7 +306,11 @@
|
|
306 |
"/^wordpress_logged_in_[0-9a-f]+$/",
|
307 |
"edd_action",
|
308 |
"edd_redirect",
|
309 |
-
"wpcf7-form"
|
|
|
|
|
|
|
|
|
310 |
]
|
311 |
},
|
312 |
"firewall_patterns": {
|
306 |
"/^wordpress_logged_in_[0-9a-f]+$/",
|
307 |
"edd_action",
|
308 |
"edd_redirect",
|
309 |
+
"wpcf7-form",
|
310 |
+
"yoast_wpseo_metadesc",
|
311 |
+
"icwp_wpsf_new_u2f_response",
|
312 |
+
"icwp_wpsf_u2f_otp",
|
313 |
+
"appId"
|
314 |
]
|
315 |
},
|
316 |
"firewall_patterns": {
|
src/config/feature-hack_protect.php
CHANGED
@@ -16,6 +16,9 @@
|
|
16 |
"run_if_verified_bot": true,
|
17 |
"run_if_wpcli": false
|
18 |
},
|
|
|
|
|
|
|
19 |
"menu_items": [
|
20 |
{
|
21 |
"title": "Scans",
|
@@ -232,7 +235,7 @@
|
|
232 |
"key": "scan_frequency",
|
233 |
"section": "section_scan_options",
|
234 |
"premium": true,
|
235 |
-
"default": 1,
|
236 |
"type": "select",
|
237 |
"value_options": [
|
238 |
{
|
16 |
"run_if_verified_bot": true,
|
17 |
"run_if_wpcli": false
|
18 |
},
|
19 |
+
"wpcli": {
|
20 |
+
"root": "hack_guard"
|
21 |
+
},
|
22 |
"menu_items": [
|
23 |
{
|
24 |
"title": "Scans",
|
235 |
"key": "scan_frequency",
|
236 |
"section": "section_scan_options",
|
237 |
"premium": true,
|
238 |
+
"default": "1",
|
239 |
"type": "select",
|
240 |
"value_options": [
|
241 |
{
|
src/config/feature-insights.php
CHANGED
@@ -18,6 +18,9 @@
|
|
18 |
"skip_processor": true,
|
19 |
"tracking_exclude": true
|
20 |
},
|
|
|
|
|
|
|
21 |
"requirements": {
|
22 |
"php": {
|
23 |
"version": "5.4"
|
18 |
"skip_processor": true,
|
19 |
"tracking_exclude": true
|
20 |
},
|
21 |
+
"wpcli": {
|
22 |
+
"enabled": false
|
23 |
+
},
|
24 |
"requirements": {
|
25 |
"php": {
|
26 |
"version": "5.4"
|
src/config/feature-login_protect.php
CHANGED
@@ -59,9 +59,9 @@
|
|
59 |
]
|
60 |
},
|
61 |
{
|
62 |
-
"slug": "
|
63 |
-
"title": "
|
64 |
-
"title_short": "2FA -
|
65 |
"summary": [
|
66 |
"Purpose - Verifies the identity of users who log in to your site using Yubikey one-time-passwords.",
|
67 |
"Note: You may combine multiple authentication factors for increased security."
|
@@ -364,20 +364,32 @@
|
|
364 |
"summary": "Enter The IDs Of The 3rd Party Login Forms For Use With AntiBot JS",
|
365 |
"description": "For Use With AnitBot JS (above)."
|
366 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
{
|
368 |
"key": "enable_yubikey",
|
369 |
-
"section": "
|
370 |
"default": "N",
|
371 |
"type": "checkbox",
|
372 |
"link_info": "https://shsec.io/4f",
|
373 |
"link_blog": "https://shsec.io/9t",
|
374 |
-
"name": "
|
375 |
-
"summary": "
|
376 |
"description": "Combined with your Yubikey API Key (below) this will form the basis of your Yubikey Authentication."
|
377 |
},
|
378 |
{
|
379 |
"key": "yubikey_app_id",
|
380 |
-
"section": "
|
381 |
"sensitive": true,
|
382 |
"default": "",
|
383 |
"type": "text",
|
@@ -389,7 +401,7 @@
|
|
389 |
},
|
390 |
{
|
391 |
"key": "yubikey_api_key",
|
392 |
-
"section": "
|
393 |
"sensitive": true,
|
394 |
"default": "",
|
395 |
"type": "text",
|
@@ -459,7 +471,7 @@
|
|
459 |
},
|
460 |
"2fa_email_verified": {
|
461 |
},
|
462 |
-
"2fa_email_verify_fail":
|
463 |
"offense": true
|
464 |
},
|
465 |
"2fa_googleauth_verified": {
|
59 |
]
|
60 |
},
|
61 |
{
|
62 |
+
"slug": "section_hardware_authentication",
|
63 |
+
"title": "Hardware 2-Factor Authentication",
|
64 |
+
"title_short": "2FA - Hardware",
|
65 |
"summary": [
|
66 |
"Purpose - Verifies the identity of users who log in to your site using Yubikey one-time-passwords.",
|
67 |
"Note: You may combine multiple authentication factors for increased security."
|
364 |
"summary": "Enter The IDs Of The 3rd Party Login Forms For Use With AntiBot JS",
|
365 |
"description": "For Use With AnitBot JS (above)."
|
366 |
},
|
367 |
+
{
|
368 |
+
"key": "enable_u2f",
|
369 |
+
"section": "section_hardware_authentication",
|
370 |
+
"premium": true,
|
371 |
+
"default": "N",
|
372 |
+
"type": "checkbox",
|
373 |
+
"link_info": "https://shsec.io/dx",
|
374 |
+
"link_blog": "https://shsec.io/dy",
|
375 |
+
"name": "Allow U2F",
|
376 |
+
"summary": "Allow Registration Of U2F Devices",
|
377 |
+
"description": "Allow Registration Of U2F Devices."
|
378 |
+
},
|
379 |
{
|
380 |
"key": "enable_yubikey",
|
381 |
+
"section": "section_hardware_authentication",
|
382 |
"default": "N",
|
383 |
"type": "checkbox",
|
384 |
"link_info": "https://shsec.io/4f",
|
385 |
"link_blog": "https://shsec.io/9t",
|
386 |
+
"name": "Allow Yubikey OTP",
|
387 |
+
"summary": "Allow Yubikey Registration For One Time Passwords",
|
388 |
"description": "Combined with your Yubikey API Key (below) this will form the basis of your Yubikey Authentication."
|
389 |
},
|
390 |
{
|
391 |
"key": "yubikey_app_id",
|
392 |
+
"section": "section_hardware_authentication",
|
393 |
"sensitive": true,
|
394 |
"default": "",
|
395 |
"type": "text",
|
401 |
},
|
402 |
{
|
403 |
"key": "yubikey_api_key",
|
404 |
+
"section": "section_hardware_authentication",
|
405 |
"sensitive": true,
|
406 |
"default": "",
|
407 |
"type": "text",
|
471 |
},
|
472 |
"2fa_email_verified": {
|
473 |
},
|
474 |
+
"2fa_email_verify_fail": {
|
475 |
"offense": true
|
476 |
},
|
477 |
"2fa_googleauth_verified": {
|
src/config/feature-plugin.php
CHANGED
@@ -34,7 +34,7 @@
|
|
34 |
"can_dismiss": false,
|
35 |
"type": "error"
|
36 |
},
|
37 |
-
"php7":
|
38 |
"id": "php7",
|
39 |
"schedule": "conditions",
|
40 |
"valid_admin": true,
|
@@ -228,6 +228,18 @@
|
|
228 |
"summary": "Display Plugin Badge On Your Site",
|
229 |
"description": "Enabling this option helps support the plugin by spreading the word about it on your website. The plugin badge also demonstrates to visitors that you take your website security seriously."
|
230 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
{
|
232 |
"key": "enable_xmlrpc_compatibility",
|
233 |
"section": "section_defaults",
|
34 |
"can_dismiss": false,
|
35 |
"type": "error"
|
36 |
},
|
37 |
+
"php7": {
|
38 |
"id": "php7",
|
39 |
"schedule": "conditions",
|
40 |
"valid_admin": true,
|
228 |
"summary": "Display Plugin Badge On Your Site",
|
229 |
"description": "Enabling this option helps support the plugin by spreading the word about it on your website. The plugin badge also demonstrates to visitors that you take your website security seriously."
|
230 |
},
|
231 |
+
{
|
232 |
+
"key": "enable_wpcli",
|
233 |
+
"section": "section_general_plugin_options",
|
234 |
+
"premium": true,
|
235 |
+
"default": "Y",
|
236 |
+
"type": "checkbox",
|
237 |
+
"link_info": "https://shsec.io/i1",
|
238 |
+
"link_blog": "https://shsec.io/i2",
|
239 |
+
"name": "Allow WP-CLI",
|
240 |
+
"summary": "Allow Access And Control Of This Plugin Via WP-CLI",
|
241 |
+
"description": "Turn off this option to disable this plugin's WP-CLI integration."
|
242 |
+
},
|
243 |
{
|
244 |
"key": "enable_xmlrpc_compatibility",
|
245 |
"section": "section_defaults",
|
src/config/feature-sessions.php
CHANGED
@@ -15,6 +15,9 @@
|
|
15 |
"run_if_wpcli": false,
|
16 |
"tracking_exclude": true
|
17 |
},
|
|
|
|
|
|
|
18 |
"sections": [
|
19 |
{
|
20 |
"slug": "section_enable_plugin_feature_sessions",
|
15 |
"run_if_wpcli": false,
|
16 |
"tracking_exclude": true
|
17 |
},
|
18 |
+
"wpcli": {
|
19 |
+
"enabled": false
|
20 |
+
},
|
21 |
"sections": [
|
22 |
{
|
23 |
"slug": "section_enable_plugin_feature_sessions",
|
src/features/admin_access_restriction.php
CHANGED
@@ -30,6 +30,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
30 |
|
31 |
/**
|
32 |
* @return array
|
|
|
33 |
*/
|
34 |
public function getSecurityAdminUsers() {
|
35 |
$aU = $this->getOpt( 'sec_admin_users', [] );
|
@@ -38,13 +39,15 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
38 |
|
39 |
/**
|
40 |
* @return bool
|
|
|
41 |
*/
|
42 |
public function hasSecAdminUsers() {
|
43 |
return count( $this->getSecurityAdminUsers() ) > 0;
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
* No checking of admin capabilities in-case of infinite loop with
|
|
|
48 |
* @return bool
|
49 |
*/
|
50 |
public function isRegisteredSecAdminUser() {
|
@@ -52,8 +55,6 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
52 |
return !empty( $sUser ) && in_array( $sUser, $this->getSecurityAdminUsers() );
|
53 |
}
|
54 |
|
55 |
-
/**
|
56 |
-
*/
|
57 |
protected function preProcessOptions() {
|
58 |
if ( $this->isValidSecAdminRequest() ) {
|
59 |
$this->setSecurityAdminStatusOnOff( true );
|
@@ -171,7 +172,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
171 |
/** @var SecurityAdmin\Options $oOpts */
|
172 |
$oOpts = $this->getOptions();
|
173 |
return $this->isModOptEnabled() &&
|
174 |
-
( $
|
175 |
( $oOpts->hasAccessKey() && $this->getSecAdminTimeout() > 0 )
|
176 |
);
|
177 |
}
|
@@ -291,6 +292,24 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
291 |
return $sLogoUrl;
|
292 |
}
|
293 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
/**
|
295 |
* @return bool
|
296 |
*/
|
@@ -314,10 +333,10 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
314 |
*/
|
315 |
public function setNewAccessKeyManually( $sKey ) {
|
316 |
if ( empty( $sKey ) ) {
|
317 |
-
throw new \Exception( 'Attempting to set an empty Security
|
318 |
}
|
319 |
if ( !$this->getCon()->isPluginAdmin() ) {
|
320 |
-
throw new \Exception( 'User does not have permission to update the Security
|
321 |
}
|
322 |
|
323 |
$this->setIsMainFeatureEnabled( true )
|
30 |
|
31 |
/**
|
32 |
* @return array
|
33 |
+
* @deprecated 9.1.0
|
34 |
*/
|
35 |
public function getSecurityAdminUsers() {
|
36 |
$aU = $this->getOpt( 'sec_admin_users', [] );
|
39 |
|
40 |
/**
|
41 |
* @return bool
|
42 |
+
* @deprecated 9.1.0
|
43 |
*/
|
44 |
public function hasSecAdminUsers() {
|
45 |
return count( $this->getSecurityAdminUsers() ) > 0;
|
46 |
}
|
47 |
|
48 |
/**
|
49 |
+
* No checking of admin capabilities in-case of infinite loop with
|
50 |
+
* admin access caps check
|
51 |
* @return bool
|
52 |
*/
|
53 |
public function isRegisteredSecAdminUser() {
|
55 |
return !empty( $sUser ) && in_array( $sUser, $this->getSecurityAdminUsers() );
|
56 |
}
|
57 |
|
|
|
|
|
58 |
protected function preProcessOptions() {
|
59 |
if ( $this->isValidSecAdminRequest() ) {
|
60 |
$this->setSecurityAdminStatusOnOff( true );
|
172 |
/** @var SecurityAdmin\Options $oOpts */
|
173 |
$oOpts = $this->getOptions();
|
174 |
return $this->isModOptEnabled() &&
|
175 |
+
( count( $oOpts->getSecurityAdminUsers() ) > 0 ||
|
176 |
( $oOpts->hasAccessKey() && $this->getSecAdminTimeout() > 0 )
|
177 |
);
|
178 |
}
|
292 |
return $sLogoUrl;
|
293 |
}
|
294 |
|
295 |
+
/**
|
296 |
+
* @param string $sSection
|
297 |
+
* @return array
|
298 |
+
*/
|
299 |
+
protected function getSectionWarnings( $sSection ) {
|
300 |
+
$aWarnings = [];
|
301 |
+
|
302 |
+
switch ( $sSection ) {
|
303 |
+
case 'section_whitelabel':
|
304 |
+
if ( !$this->isEnabledSecurityAdmin() ) {
|
305 |
+
$aWarnings[] = __( 'Please also supply a Security Admin PIN, as whitelabel settings are only applied when the Security Admin feature is active.', 'wp-simple-firewall' );
|
306 |
+
}
|
307 |
+
break;
|
308 |
+
}
|
309 |
+
|
310 |
+
return $aWarnings;
|
311 |
+
}
|
312 |
+
|
313 |
/**
|
314 |
* @return bool
|
315 |
*/
|
333 |
*/
|
334 |
public function setNewAccessKeyManually( $sKey ) {
|
335 |
if ( empty( $sKey ) ) {
|
336 |
+
throw new \Exception( 'Attempting to set an empty Security PIN.' );
|
337 |
}
|
338 |
if ( !$this->getCon()->isPluginAdmin() ) {
|
339 |
+
throw new \Exception( 'User does not have permission to update the Security PIN.' );
|
340 |
}
|
341 |
|
342 |
$this->setIsMainFeatureEnabled( true )
|
src/features/base.php
CHANGED
@@ -3,6 +3,9 @@
|
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
|
|
|
|
|
|
6 |
abstract class ICWP_WPSF_FeatureHandler_Base {
|
7 |
|
8 |
use Shield\Modules\PluginControllerConsumer;
|
@@ -52,6 +55,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
52 |
*/
|
53 |
private $oOpts;
|
54 |
|
|
|
|
|
|
|
|
|
|
|
55 |
/**
|
56 |
* @var Shield\Databases\Base\Handler[]
|
57 |
*/
|
@@ -213,11 +221,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
213 |
return is_array( $aCls ) ? $aCls : [];
|
214 |
}
|
215 |
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
}
|
222 |
|
223 |
/**
|
@@ -297,9 +305,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
297 |
}
|
298 |
|
299 |
public function onRunProcessors() {
|
300 |
-
if ( $this->isUpgrading() ) {
|
301 |
-
$this->updateHandler();
|
302 |
-
}
|
303 |
$oOpts = $this->getOptions();
|
304 |
if ( $oOpts->getFeatureProperty( 'auto_load_processor' ) ) {
|
305 |
$this->loadProcessor();
|
@@ -337,6 +342,16 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
337 |
do_action( $this->getCon()->prefix( 'shield_action' ), $sShieldAction );
|
338 |
}
|
339 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
340 |
if ( $this->isModuleRequest() ) {
|
341 |
|
342 |
if ( Services::WpGeneral()->isAjax() ) {
|
@@ -605,7 +620,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
605 |
/**
|
606 |
* @return bool
|
607 |
*/
|
608 |
-
|
609 |
return $this->isOpt( $this->getEnableModOptKey(), 'Y' )
|
610 |
|| $this->isOpt( $this->getEnableModOptKey(), true, true );
|
611 |
}
|
@@ -1223,7 +1238,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
1223 |
public function onPluginDelete() {
|
1224 |
foreach ( $this->getDbHandlers( true ) as $oDbh ) {
|
1225 |
if ( !empty( $oDbh ) ) {
|
1226 |
-
$oDbh->
|
1227 |
}
|
1228 |
}
|
1229 |
$this->getOptions()->deleteStorage();
|
@@ -1462,6 +1477,10 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
1462 |
public function getBaseDisplayData() {
|
1463 |
$oCon = $this->getCon();
|
1464 |
|
|
|
|
|
|
|
|
|
1465 |
return [
|
1466 |
'sPluginName' => $oCon->getHumanName(),
|
1467 |
'sTagline' => $this->getOptions()->getFeatureTagline(),
|
@@ -1507,7 +1526,8 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
1507 |
'show_alt_content' => false,
|
1508 |
'has_wizard' => $this->hasWizard(),
|
1509 |
'is_premium' => $this->isPremium(),
|
1510 |
-
'show_transfer_switch' => $this->isPremium()
|
|
|
1511 |
],
|
1512 |
'hrefs' => [
|
1513 |
'go_pro' => 'https://shsec.io/shieldgoprofeature',
|
@@ -1934,6 +1954,24 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
1934 |
return $this->oOpts;
|
1935 |
}
|
1936 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1937 |
/**
|
1938 |
* The primary DB for the
|
1939 |
* @return null|Shield\Databases\Base\Handler|mixed
|
@@ -2012,6 +2050,22 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
2012 |
return @class_exists( $sC ) ? new $sC() : false;
|
2013 |
}
|
2014 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015 |
/**
|
2016 |
* @return string
|
2017 |
*/
|
@@ -2041,4 +2095,14 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
|
|
2041 |
protected function doExtraSubmitProcessing() {
|
2042 |
$this->preProcessOptions();
|
2043 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2044 |
}
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
6 |
+
/**
|
7 |
+
* Class ICWP_WPSF_FeatureHandler_Base
|
8 |
+
*/
|
9 |
abstract class ICWP_WPSF_FeatureHandler_Base {
|
10 |
|
11 |
use Shield\Modules\PluginControllerConsumer;
|
55 |
*/
|
56 |
private $oOpts;
|
57 |
|
58 |
+
/**
|
59 |
+
* @var Shield\Modules\Base\WpCli
|
60 |
+
*/
|
61 |
+
private $oWpCli;
|
62 |
+
|
63 |
/**
|
64 |
* @var Shield\Databases\Base\Handler[]
|
65 |
*/
|
221 |
return is_array( $aCls ) ? $aCls : [];
|
222 |
}
|
223 |
|
224 |
+
/**
|
225 |
+
* @return false|Shield\Modules\Base\Upgrade|mixed
|
226 |
+
*/
|
227 |
+
public function getUpgradeHandler() {
|
228 |
+
return $this->loadClass( 'Upgrade' );
|
229 |
}
|
230 |
|
231 |
/**
|
305 |
}
|
306 |
|
307 |
public function onRunProcessors() {
|
|
|
|
|
|
|
308 |
$oOpts = $this->getOptions();
|
309 |
if ( $oOpts->getFeatureProperty( 'auto_load_processor' ) ) {
|
310 |
$this->loadProcessor();
|
342 |
do_action( $this->getCon()->prefix( 'shield_action' ), $sShieldAction );
|
343 |
}
|
344 |
|
345 |
+
if ( Services::Data()->getPhpVersionIsAtLeast( '7.0' ) ) {
|
346 |
+
add_action( 'cli_init', function () {
|
347 |
+
try {
|
348 |
+
$this->getWpCli()->execute();
|
349 |
+
}
|
350 |
+
catch ( \Exception $oE ) {
|
351 |
+
}
|
352 |
+
} );
|
353 |
+
}
|
354 |
+
|
355 |
if ( $this->isModuleRequest() ) {
|
356 |
|
357 |
if ( Services::WpGeneral()->isAjax() ) {
|
620 |
/**
|
621 |
* @return bool
|
622 |
*/
|
623 |
+
public function isModOptEnabled() {
|
624 |
return $this->isOpt( $this->getEnableModOptKey(), 'Y' )
|
625 |
|| $this->isOpt( $this->getEnableModOptKey(), true, true );
|
626 |
}
|
1238 |
public function onPluginDelete() {
|
1239 |
foreach ( $this->getDbHandlers( true ) as $oDbh ) {
|
1240 |
if ( !empty( $oDbh ) ) {
|
1241 |
+
$oDbh->tableDelete();
|
1242 |
}
|
1243 |
}
|
1244 |
$this->getOptions()->deleteStorage();
|
1477 |
public function getBaseDisplayData() {
|
1478 |
$oCon = $this->getCon();
|
1479 |
|
1480 |
+
/** @var Shield\Modules\Plugin\Options $oPluginOptions */
|
1481 |
+
$oPluginOptions = $oCon->getModule_Plugin()
|
1482 |
+
->getOptions();
|
1483 |
+
|
1484 |
return [
|
1485 |
'sPluginName' => $oCon->getHumanName(),
|
1486 |
'sTagline' => $this->getOptions()->getFeatureTagline(),
|
1526 |
'show_alt_content' => false,
|
1527 |
'has_wizard' => $this->hasWizard(),
|
1528 |
'is_premium' => $this->isPremium(),
|
1529 |
+
'show_transfer_switch' => $this->isPremium(),
|
1530 |
+
'is_wpcli' => $oPluginOptions->isEnabledWpcli()
|
1531 |
],
|
1532 |
'hrefs' => [
|
1533 |
'go_pro' => 'https://shsec.io/shieldgoprofeature',
|
1954 |
return $this->oOpts;
|
1955 |
}
|
1956 |
|
1957 |
+
/**
|
1958 |
+
* @return Shield\Modules\Base\WpCli
|
1959 |
+
* @throws \Exception
|
1960 |
+
*/
|
1961 |
+
public function getWpCli() {
|
1962 |
+
if ( !isset( $this->oWpCli ) ) {
|
1963 |
+
$this->oWpCli = $this->loadClass( 'WpCli' );
|
1964 |
+
if ( !$this->oWpCli instanceof Shield\Modules\Base\WpCli ) {
|
1965 |
+
$this->oWpCli = $this->loadClassFromBase( 'WpCli' );
|
1966 |
+
if ( !$this->oWpCli instanceof Shield\Modules\Base\WpCli ) {
|
1967 |
+
throw new Exception( 'WP-CLI not supported' );
|
1968 |
+
}
|
1969 |
+
}
|
1970 |
+
$this->oWpCli->setMod( $this );
|
1971 |
+
}
|
1972 |
+
return $this->oWpCli;
|
1973 |
+
}
|
1974 |
+
|
1975 |
/**
|
1976 |
* The primary DB for the
|
1977 |
* @return null|Shield\Databases\Base\Handler|mixed
|
2050 |
return @class_exists( $sC ) ? new $sC() : false;
|
2051 |
}
|
2052 |
|
2053 |
+
/**
|
2054 |
+
* @param $sClass
|
2055 |
+
* @return \stdClass|mixed|false
|
2056 |
+
*/
|
2057 |
+
private function loadClassFromBase( $sClass ) {
|
2058 |
+
$sC = $this->getBaseNamespace().$sClass;
|
2059 |
+
return @class_exists( $sC ) ? new $sC() : false;
|
2060 |
+
}
|
2061 |
+
|
2062 |
+
/**
|
2063 |
+
* @return string
|
2064 |
+
*/
|
2065 |
+
private function getBaseNamespace() {
|
2066 |
+
return '\FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\\';
|
2067 |
+
}
|
2068 |
+
|
2069 |
/**
|
2070 |
* @return string
|
2071 |
*/
|
2095 |
protected function doExtraSubmitProcessing() {
|
2096 |
$this->preProcessOptions();
|
2097 |
}
|
2098 |
+
|
2099 |
+
/**
|
2100 |
+
* @deprecated 9.0.5
|
2101 |
+
*/
|
2102 |
+
protected function updateHandler() {
|
2103 |
+
$oH = $this->getUpgradeHandler();
|
2104 |
+
if ( $oH instanceof Shield\Modules\Base\Upgrade ) {
|
2105 |
+
$oH->setMod( $this )->execute();
|
2106 |
+
}
|
2107 |
+
}
|
2108 |
}
|
src/features/base_wpsf.php
CHANGED
@@ -165,11 +165,11 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
165 |
parent::getBaseDisplayData(),
|
166 |
[
|
167 |
'head' => [
|
168 |
-
'html'
|
169 |
'lang' => Services::WpGeneral()->getLocale( '-' ),
|
170 |
'dir' => is_rtl() ? 'rtl' : 'ltr',
|
171 |
],
|
172 |
-
'meta'
|
173 |
[
|
174 |
'type' => 'http-equiv',
|
175 |
'type_type' => 'Cache-Control',
|
@@ -180,7 +180,8 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
180 |
'type_type' => 'Expires',
|
181 |
'content' => '0',
|
182 |
],
|
183 |
-
]
|
|
|
184 |
],
|
185 |
'ajax' => [
|
186 |
'sec_admin_login' => $this->getSecAdminLoginAjaxData(),
|
@@ -221,7 +222,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
221 |
'restricted_access' => $this->getAjaxActionData( 'restricted_access' ),
|
222 |
],
|
223 |
'strings' => [
|
224 |
-
'force_remove_email' => __( "If you've forgotten your
|
225 |
'click_email' => __( "Click here to send the verification email.", 'wp-simple-firewall' ),
|
226 |
'send_to_email' => sprintf( __( "Email will be sent to %s", 'wp-simple-firewall' ),
|
227 |
Utilities\Obfuscate::Email( $this->getPluginReportEmail() ) ),
|
@@ -341,36 +342,4 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
341 |
'href' => $this->getUrl_DirectLinkToOption( $this->getEnableModOptKey() ),
|
342 |
];
|
343 |
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
* @return string
|
347 |
-
* @deprecated 9.0
|
348 |
-
*/
|
349 |
-
public function getPluginDefaultRecipientAddress() {
|
350 |
-
return $this->getPluginReportEmail();
|
351 |
-
}
|
352 |
-
|
353 |
-
/**
|
354 |
-
* @return string
|
355 |
-
* @deprecated 9.0
|
356 |
-
*/
|
357 |
-
public function getGoogleRecaptchaSecretKey() {
|
358 |
-
return $this->getCaptchaCfg()->secret;
|
359 |
-
}
|
360 |
-
|
361 |
-
/**
|
362 |
-
* @return string
|
363 |
-
* @deprecated 9.0
|
364 |
-
*/
|
365 |
-
public function getGoogleRecaptchaSiteKey() {
|
366 |
-
return $this->getCaptchaCfg()->key;
|
367 |
-
}
|
368 |
-
|
369 |
-
/**
|
370 |
-
* @return string
|
371 |
-
* @deprecated 9.0
|
372 |
-
*/
|
373 |
-
public function getCaptchaStyle() {
|
374 |
-
return $this->getCaptchaCfg()->theme;
|
375 |
-
}
|
376 |
}
|
165 |
parent::getBaseDisplayData(),
|
166 |
[
|
167 |
'head' => [
|
168 |
+
'html' => [
|
169 |
'lang' => Services::WpGeneral()->getLocale( '-' ),
|
170 |
'dir' => is_rtl() ? 'rtl' : 'ltr',
|
171 |
],
|
172 |
+
'meta' => [
|
173 |
[
|
174 |
'type' => 'http-equiv',
|
175 |
'type_type' => 'Cache-Control',
|
180 |
'type_type' => 'Expires',
|
181 |
'content' => '0',
|
182 |
],
|
183 |
+
],
|
184 |
+
'scripts' => []
|
185 |
],
|
186 |
'ajax' => [
|
187 |
'sec_admin_login' => $this->getSecAdminLoginAjaxData(),
|
222 |
'restricted_access' => $this->getAjaxActionData( 'restricted_access' ),
|
223 |
],
|
224 |
'strings' => [
|
225 |
+
'force_remove_email' => __( "If you've forgotten your PIN, a link can be sent to the plugin administrator email address to remove this restriction.", 'wp-simple-firewall' ),
|
226 |
'click_email' => __( "Click here to send the verification email.", 'wp-simple-firewall' ),
|
227 |
'send_to_email' => sprintf( __( "Email will be sent to %s", 'wp-simple-firewall' ),
|
228 |
Utilities\Obfuscate::Email( $this->getPluginReportEmail() ) ),
|
342 |
'href' => $this->getUrl_DirectLinkToOption( $this->getEnableModOptKey() ),
|
343 |
];
|
344 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
}
|
src/features/firewall.php
CHANGED
@@ -110,30 +110,4 @@ class ICWP_WPSF_FeatureHandler_Firewall extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
110 |
protected function getNamespaceBase() {
|
111 |
return 'Firewall';
|
112 |
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* @return array
|
116 |
-
* @deprecated 9.0
|
117 |
-
*/
|
118 |
-
public function getDefaultWhitelist() {
|
119 |
-
$aW = $this->getDef( 'default_whitelist' );
|
120 |
-
return is_array( $aW ) ? $aW : [];
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* @return array
|
125 |
-
* @deprecated 9.0
|
126 |
-
*/
|
127 |
-
public function getCustomWhitelist() {
|
128 |
-
$aW = $this->getOpt( 'page_params_whitelist', [] );
|
129 |
-
return is_array( $aW ) ? $aW : [];
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* @return bool
|
134 |
-
* @deprecated 9.0
|
135 |
-
*/
|
136 |
-
public function isIgnoreAdmin() {
|
137 |
-
return $this->isOpt( 'whitelist_admins', 'Y' );
|
138 |
-
}
|
139 |
}
|
110 |
protected function getNamespaceBase() {
|
111 |
return 'Firewall';
|
112 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
}
|
src/features/hack_protect.php
CHANGED
@@ -669,65 +669,4 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
669 |
protected function getNamespaceBase() {
|
670 |
return 'HackGuard';
|
671 |
}
|
672 |
-
|
673 |
-
/**
|
674 |
-
* @return string
|
675 |
-
* @deprecated 9.0
|
676 |
-
*/
|
677 |
-
public function getWpvulnPluginsHighlightOption() {
|
678 |
-
return 'disabled';
|
679 |
-
}
|
680 |
-
|
681 |
-
/**
|
682 |
-
* @return bool
|
683 |
-
* @deprecated 9.0
|
684 |
-
*/
|
685 |
-
public function isIncludeFileLists() {
|
686 |
-
return false;
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* @return int
|
691 |
-
* @deprecated 9.0
|
692 |
-
*/
|
693 |
-
public function getScanNotificationInterval() {
|
694 |
-
return 0;
|
695 |
-
}
|
696 |
-
|
697 |
-
/**
|
698 |
-
* @return HackGuard\Scan\Queue\Controller
|
699 |
-
* @deprecated 9.0
|
700 |
-
*/
|
701 |
-
public function getScanController() {
|
702 |
-
return $this->getScanQueueController();
|
703 |
-
}
|
704 |
-
|
705 |
-
/**
|
706 |
-
* @return bool
|
707 |
-
* @deprecated 9.0
|
708 |
-
*/
|
709 |
-
public function canPtgWriteToDisk() {
|
710 |
-
$nNow = Services::Request()->ts();
|
711 |
-
$bLastCheckExpired = ( $nNow - $this->getOpt( 'ptg_candiskwrite_at', 0 ) ) > DAY_IN_SECONDS;
|
712 |
-
|
713 |
-
$bCanWrite = $this->getOpt( 'ptg_candiskwrite' ) && !$bLastCheckExpired;
|
714 |
-
if ( !$bCanWrite ) {
|
715 |
-
$oFS = Services::WpFs();
|
716 |
-
$sDir = $this->getPtgSnapsBaseDir();
|
717 |
-
|
718 |
-
if ( $sDir && $oFS->mkdir( $sDir ) ) {
|
719 |
-
$sTestFile = path_join( $sDir, 'test.txt' );
|
720 |
-
$oFS->putFileContent( $sTestFile, 'test-'.$nNow );
|
721 |
-
$sContents = $oFS->exists( $sTestFile ) ? $oFS->getFileContent( $sTestFile ) : '';
|
722 |
-
if ( $sContents === 'test-'.$nNow ) {
|
723 |
-
$oFS->deleteFile( $sTestFile );
|
724 |
-
$bCanWrite = !$oFS->exists( $sTestFile );
|
725 |
-
$this->setOpt( 'ptg_candiskwrite', $bCanWrite );
|
726 |
-
}
|
727 |
-
$this->setOpt( 'ptg_candiskwrite_at', $nNow );
|
728 |
-
}
|
729 |
-
}
|
730 |
-
|
731 |
-
return $bCanWrite;
|
732 |
-
}
|
733 |
}
|
669 |
protected function getNamespaceBase() {
|
670 |
return 'HackGuard';
|
671 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
672 |
}
|
src/features/insights.php
CHANGED
@@ -202,7 +202,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
202 |
'is_enabled' => $oTrafficOpts->isTrafficLoggerEnabled(),
|
203 |
],
|
204 |
'hrefs' => [
|
205 |
-
'please_enable' => $oTrafficMod->getUrl_DirectLinkToOption( '
|
206 |
],
|
207 |
'strings' => [
|
208 |
'title_filter_form' => __( 'Traffic Table Filters', 'wp-simple-firewall' ),
|
202 |
'is_enabled' => $oTrafficOpts->isTrafficLoggerEnabled(),
|
203 |
],
|
204 |
'hrefs' => [
|
205 |
+
'please_enable' => $oTrafficMod->getUrl_DirectLinkToOption( 'enable_logger' ),
|
206 |
],
|
207 |
'strings' => [
|
208 |
'title_filter_form' => __( 'Traffic Table Filters', 'wp-simple-firewall' ),
|
src/features/login_protect.php
CHANGED
@@ -227,15 +227,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
227 |
return $oCfg;
|
228 |
}
|
229 |
|
230 |
-
/**
|
231 |
-
* @return array
|
232 |
-
* @deprecated 9.0
|
233 |
-
*/
|
234 |
-
public function getBotProtectionLocations() {
|
235 |
-
$aLocs = $this->getOpt( 'bot_protection_locations' );
|
236 |
-
return is_array( $aLocs ) ? $aLocs : (array)$this->getOptions()->getOptDefault( 'bot_protection_locations' );
|
237 |
-
}
|
238 |
-
|
239 |
/**
|
240 |
* @return LoginGuard\Lib\TwoFactor\MfaController
|
241 |
*/
|
@@ -308,14 +299,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
308 |
return $sText;
|
309 |
}
|
310 |
|
311 |
-
/**
|
312 |
-
* @return bool
|
313 |
-
* @deprecated 9.0
|
314 |
-
*/
|
315 |
-
public function isEnabledGaspCheck() {
|
316 |
-
return $this->isModOptEnabled() && $this->isOpt( 'enable_login_gasp_check', 'Y' );
|
317 |
-
}
|
318 |
-
|
319 |
/**
|
320 |
* @param bool $bEnabled
|
321 |
* @return $this
|
@@ -368,25 +351,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
368 |
return $sIntegration;
|
369 |
}
|
370 |
|
371 |
-
/**
|
372 |
-
* @return bool
|
373 |
-
* @deprecated 9.0
|
374 |
-
*/
|
375 |
-
public function isEnabledBotJs() {
|
376 |
-
/** @var LoginGuard\Options $oOpts */
|
377 |
-
$oOpts = $this->getOptions();
|
378 |
-
return $oOpts->isEnabledGaspCheck() || $this->isEnabledCaptcha();
|
379 |
-
}
|
380 |
-
|
381 |
-
/**
|
382 |
-
* @return array
|
383 |
-
* @deprecated 9.0
|
384 |
-
*/
|
385 |
-
public function getAntiBotFormSelectors() {
|
386 |
-
$aIds = $this->getOpt( 'antibot_form_ids', [] );
|
387 |
-
return is_array( $aIds ) ? $aIds : [];
|
388 |
-
}
|
389 |
-
|
390 |
public function insertCustomJsVars_Admin() {
|
391 |
parent::insertCustomJsVars_Admin();
|
392 |
|
@@ -478,36 +442,4 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
478 |
protected function getNamespaceBase() {
|
479 |
return 'LoginGuard';
|
480 |
}
|
481 |
-
|
482 |
-
/**
|
483 |
-
* @return bool
|
484 |
-
* @deprecated 9.0
|
485 |
-
*/
|
486 |
-
public function isProtectLogin() {
|
487 |
-
return false;
|
488 |
-
}
|
489 |
-
|
490 |
-
/**
|
491 |
-
* @return bool
|
492 |
-
* @deprecated 9.0
|
493 |
-
*/
|
494 |
-
public function isProtectLostPassword() {
|
495 |
-
return false;
|
496 |
-
}
|
497 |
-
|
498 |
-
/**
|
499 |
-
* @return bool
|
500 |
-
* @deprecated 9.0
|
501 |
-
*/
|
502 |
-
public function isProtectRegister() {
|
503 |
-
return false;
|
504 |
-
}
|
505 |
-
|
506 |
-
/**
|
507 |
-
* @return bool
|
508 |
-
* @deprecated 9.0
|
509 |
-
*/
|
510 |
-
public function isProtect() {
|
511 |
-
return false;
|
512 |
-
}
|
513 |
}
|
227 |
return $oCfg;
|
228 |
}
|
229 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
/**
|
231 |
* @return LoginGuard\Lib\TwoFactor\MfaController
|
232 |
*/
|
299 |
return $sText;
|
300 |
}
|
301 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
302 |
/**
|
303 |
* @param bool $bEnabled
|
304 |
* @return $this
|
351 |
return $sIntegration;
|
352 |
}
|
353 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
public function insertCustomJsVars_Admin() {
|
355 |
parent::insertCustomJsVars_Admin();
|
356 |
|
442 |
protected function getNamespaceBase() {
|
443 |
return 'LoginGuard';
|
444 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
445 |
}
|
src/features/plugin.php
CHANGED
@@ -163,7 +163,7 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
163 |
try {
|
164 |
( new Plugin\Lib\ImportExport\Import() )
|
165 |
->setMod( $this )
|
166 |
-
->
|
167 |
$bSuccess = true;
|
168 |
$sMessage = __( 'Options imported successfully', 'wp-simple-firewall' );
|
169 |
}
|
@@ -730,28 +730,4 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
730 |
public function getSurveyEmail() {
|
731 |
return base64_decode( $this->getDef( 'survey_email' ) );
|
732 |
}
|
733 |
-
|
734 |
-
/**
|
735 |
-
* @return bool
|
736 |
-
* @deprecated 9.0
|
737 |
-
*/
|
738 |
-
public function isDisplayPluginBadge() {
|
739 |
-
return false;
|
740 |
-
}
|
741 |
-
|
742 |
-
/**
|
743 |
-
* @return string
|
744 |
-
* @deprecated 9.0
|
745 |
-
*/
|
746 |
-
public function getCookieIdBadgeState() {
|
747 |
-
return $this->prefix( 'badgeState' );
|
748 |
-
}
|
749 |
-
|
750 |
-
/**
|
751 |
-
* @return string
|
752 |
-
* @deprecated 9.0
|
753 |
-
*/
|
754 |
-
public function supplyPluginReportEmail() {
|
755 |
-
return $this->getPluginReportEmail();
|
756 |
-
}
|
757 |
}
|
163 |
try {
|
164 |
( new Plugin\Lib\ImportExport\Import() )
|
165 |
->setMod( $this )
|
166 |
+
->fromFileUpload();
|
167 |
$bSuccess = true;
|
168 |
$sMessage = __( 'Options imported successfully', 'wp-simple-firewall' );
|
169 |
}
|
730 |
public function getSurveyEmail() {
|
731 |
return base64_decode( $this->getDef( 'survey_email' ) );
|
732 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
733 |
}
|
src/features/traffic.php
CHANGED
@@ -76,28 +76,4 @@ class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
76 |
protected function getNamespaceBase() {
|
77 |
return 'Traffic';
|
78 |
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* @return int
|
82 |
-
* @deprecated 9.0
|
83 |
-
*/
|
84 |
-
public function getAutoDisableAt() {
|
85 |
-
return 0;
|
86 |
-
}
|
87 |
-
|
88 |
-
/**
|
89 |
-
* @return string
|
90 |
-
* @deprecated 9.0
|
91 |
-
*/
|
92 |
-
public function getAutoDisableTimestamp() {
|
93 |
-
return '';
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* @return bool
|
98 |
-
* @deprecated 9.0
|
99 |
-
*/
|
100 |
-
public function isAutoDisable() {
|
101 |
-
return false;
|
102 |
-
}
|
103 |
}
|
76 |
protected function getNamespaceBase() {
|
77 |
return 'Traffic';
|
78 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
src/features/user_management.php
CHANGED
@@ -258,13 +258,4 @@ class ICWP_WPSF_FeatureHandler_UserManagement extends \ICWP_WPSF_FeatureHandler_
|
|
258 |
protected function getNamespaceBase() {
|
259 |
return 'UserManagement';
|
260 |
}
|
261 |
-
|
262 |
-
/**
|
263 |
-
* @return array
|
264 |
-
* @deprecated 9.0
|
265 |
-
*/
|
266 |
-
public function getSuspendHardUserIds() {
|
267 |
-
$aIds = $this->getOpt( 'hard_suspended_userids', [] );
|
268 |
-
return is_array( $aIds ) ? array_filter( $aIds, 'is_int' ) : [];
|
269 |
-
}
|
270 |
}
|
258 |
protected function getNamespaceBase() {
|
259 |
return 'UserManagement';
|
260 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
}
|
src/lib/custom/U2F/Yubico/U2F.php
ADDED
@@ -0,0 +1,572 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/* Copyright (c) 2014 Yubico AB
|
3 |
+
* All rights reserved.
|
4 |
+
*
|
5 |
+
* Redistribution and use in source and binary forms, with or without
|
6 |
+
* modification, are permitted provided that the following conditions are
|
7 |
+
* met:
|
8 |
+
*
|
9 |
+
* * Redistributions of source code must retain the above copyright
|
10 |
+
* notice, this list of conditions and the following disclaimer.
|
11 |
+
*
|
12 |
+
* * Redistributions in binary form must reproduce the above
|
13 |
+
* copyright notice, this list of conditions and the following
|
14 |
+
* disclaimer in the documentation and/or other materials provided
|
15 |
+
* with the distribution.
|
16 |
+
*
|
17 |
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18 |
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19 |
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20 |
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21 |
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22 |
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23 |
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24 |
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25 |
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26 |
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27 |
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28 |
+
*/
|
29 |
+
|
30 |
+
namespace u2flib_server;
|
31 |
+
|
32 |
+
/** Constant for the version of the u2f protocol */
|
33 |
+
const U2F_VERSION = "U2F_V2";
|
34 |
+
|
35 |
+
/** Constant for the type value in registration clientData */
|
36 |
+
const REQUEST_TYPE_REGISTER = "navigator.id.finishEnrollment";
|
37 |
+
|
38 |
+
/** Constant for the type value in authentication clientData */
|
39 |
+
const REQUEST_TYPE_AUTHENTICATE = "navigator.id.getAssertion";
|
40 |
+
|
41 |
+
/** Error for the authentication message not matching any outstanding
|
42 |
+
* authentication request */
|
43 |
+
const ERR_NO_MATCHING_REQUEST = 1;
|
44 |
+
|
45 |
+
/** Error for the authentication message not matching any registration */
|
46 |
+
const ERR_NO_MATCHING_REGISTRATION = 2;
|
47 |
+
|
48 |
+
/** Error for the signature on the authentication message not verifying with
|
49 |
+
* the correct key */
|
50 |
+
const ERR_AUTHENTICATION_FAILURE = 3;
|
51 |
+
|
52 |
+
/** Error for the challenge in the registration message not matching the
|
53 |
+
* registration challenge */
|
54 |
+
const ERR_UNMATCHED_CHALLENGE = 4;
|
55 |
+
|
56 |
+
/** Error for the attestation signature on the registration message not
|
57 |
+
* verifying */
|
58 |
+
const ERR_ATTESTATION_SIGNATURE = 5;
|
59 |
+
|
60 |
+
/** Error for the attestation verification not verifying */
|
61 |
+
const ERR_ATTESTATION_VERIFICATION = 6;
|
62 |
+
|
63 |
+
/** Error for not getting good random from the system */
|
64 |
+
const ERR_BAD_RANDOM = 7;
|
65 |
+
|
66 |
+
/** Error when the counter is lower than expected */
|
67 |
+
const ERR_COUNTER_TOO_LOW = 8;
|
68 |
+
|
69 |
+
/** Error decoding public key */
|
70 |
+
const ERR_PUBKEY_DECODE = 9;
|
71 |
+
|
72 |
+
/** Error user-agent returned error */
|
73 |
+
const ERR_BAD_UA_RETURNING = 10;
|
74 |
+
|
75 |
+
/** Error old OpenSSL version */
|
76 |
+
const ERR_OLD_OPENSSL = 11;
|
77 |
+
|
78 |
+
/** Error for the origin not matching the appId */
|
79 |
+
const ERR_NO_MATCHING_ORIGIN = 12;
|
80 |
+
|
81 |
+
/** Error for the type in clientData being invalid */
|
82 |
+
const ERR_BAD_TYPE = 13;
|
83 |
+
|
84 |
+
/** Error for bad user presence byte value */
|
85 |
+
const ERR_BAD_USER_PRESENCE = 14;
|
86 |
+
|
87 |
+
/** @internal */
|
88 |
+
const PUBKEY_LEN = 65;
|
89 |
+
|
90 |
+
class U2F
|
91 |
+
{
|
92 |
+
/** @var string */
|
93 |
+
private $appId;
|
94 |
+
|
95 |
+
/** @var null|string */
|
96 |
+
private $attestDir;
|
97 |
+
|
98 |
+
/** @var array */
|
99 |
+
private $facetIds;
|
100 |
+
|
101 |
+
/** @internal */
|
102 |
+
private $FIXCERTS = array(
|
103 |
+
'349bca1031f8c82c4ceca38b9cebf1a69df9fb3b94eed99eb3fb9aa3822d26e8',
|
104 |
+
'dd574527df608e47ae45fbba75a2afdd5c20fd94a02419381813cd55a2a3398f',
|
105 |
+
'1d8764f0f7cd1352df6150045c8f638e517270e8b5dda1c63ade9c2280240cae',
|
106 |
+
'd0edc9a91a1677435a953390865d208c55b3183c6759c9b5a7ff494c322558eb',
|
107 |
+
'6073c436dcd064a48127ddbf6032ac1a66fd59a0c24434f070d4e564c124c897',
|
108 |
+
'ca993121846c464d666096d35f13bf44c1b05af205f9b4a1e00cf6cc10c5e511'
|
109 |
+
);
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @param string $appId Application id for the running application
|
113 |
+
* @param string|null $attestDir Directory where trusted attestation roots may be found
|
114 |
+
* @param array|null $facetIds List of trusted Facet IDs
|
115 |
+
* @throws Error If OpenSSL older than 1.0.0 is used
|
116 |
+
*/
|
117 |
+
public function __construct($appId, $attestDir = null, $facetIds = null)
|
118 |
+
{
|
119 |
+
if(OPENSSL_VERSION_NUMBER < 0x10000000) {
|
120 |
+
throw new Error('OpenSSL has to be at least version 1.0.0, this is ' . OPENSSL_VERSION_TEXT, ERR_OLD_OPENSSL);
|
121 |
+
}
|
122 |
+
$this->appId = $appId;
|
123 |
+
$this->attestDir = $attestDir;
|
124 |
+
|
125 |
+
if(!is_array($facetIds)) {
|
126 |
+
$facetIds = [$appId];
|
127 |
+
}
|
128 |
+
$this->facetIds = $facetIds;
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Called to get a registration request to send to a user.
|
133 |
+
* Returns an array of one registration request and a array of sign requests.
|
134 |
+
*
|
135 |
+
* @param array $registrations List of current registrations for this
|
136 |
+
* user, to prevent the user from registering the same authenticator several
|
137 |
+
* times.
|
138 |
+
* @return array An array of two elements, the first containing a
|
139 |
+
* RegisterRequest the second being an array of SignRequest
|
140 |
+
* @throws Error
|
141 |
+
*/
|
142 |
+
public function getRegisterData(array $registrations = array())
|
143 |
+
{
|
144 |
+
$challenge = $this->createChallenge();
|
145 |
+
$request = new RegisterRequest($challenge, $this->appId);
|
146 |
+
$signs = $this->getAuthenticateData($registrations);
|
147 |
+
return array($request, $signs);
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Called to verify and unpack a registration message.
|
152 |
+
*
|
153 |
+
* @param RegisterRequest $request this is a reply to
|
154 |
+
* @param object $response response from a user
|
155 |
+
* @param bool $includeCert set to true if the attestation certificate should be
|
156 |
+
* included in the returned Registration object
|
157 |
+
* @return Registration
|
158 |
+
* @throws Error
|
159 |
+
*/
|
160 |
+
public function doRegister($request, $response, $includeCert = true)
|
161 |
+
{
|
162 |
+
if( !is_object( $request ) ) {
|
163 |
+
throw new \InvalidArgumentException('$request of doRegister() method only accepts object.');
|
164 |
+
}
|
165 |
+
|
166 |
+
if( !is_object( $response ) ) {
|
167 |
+
throw new \InvalidArgumentException('$response of doRegister() method only accepts object.');
|
168 |
+
}
|
169 |
+
|
170 |
+
if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
|
171 |
+
throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
|
172 |
+
}
|
173 |
+
|
174 |
+
if( !is_bool( $includeCert ) ) {
|
175 |
+
throw new \InvalidArgumentException('$include_cert of doRegister() method only accepts boolean.');
|
176 |
+
}
|
177 |
+
|
178 |
+
$rawReg = $this->base64u_decode($response->registrationData);
|
179 |
+
$regData = array_values(unpack('C*', $rawReg));
|
180 |
+
$clientData = $this->base64u_decode($response->clientData);
|
181 |
+
$cli = json_decode($clientData);
|
182 |
+
|
183 |
+
if($cli->challenge !== $request->challenge) {
|
184 |
+
throw new Error('Registration challenge does not match', ERR_UNMATCHED_CHALLENGE );
|
185 |
+
}
|
186 |
+
|
187 |
+
if(isset($cli->typ) && $cli->typ !== REQUEST_TYPE_REGISTER) {
|
188 |
+
throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
|
189 |
+
}
|
190 |
+
|
191 |
+
if(isset($cli->origin) && !in_array($cli->origin, $this->facetIds, true)) {
|
192 |
+
throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
|
193 |
+
}
|
194 |
+
|
195 |
+
$registration = new Registration();
|
196 |
+
$offs = 1;
|
197 |
+
$pubKey = substr($rawReg, $offs, PUBKEY_LEN);
|
198 |
+
$offs += PUBKEY_LEN;
|
199 |
+
// decode the pubKey to make sure it's good
|
200 |
+
$tmpKey = $this->pubkey_to_pem($pubKey);
|
201 |
+
if($tmpKey === null) {
|
202 |
+
throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
|
203 |
+
}
|
204 |
+
$registration->publicKey = base64_encode($pubKey);
|
205 |
+
$khLen = $regData[$offs++];
|
206 |
+
$kh = substr($rawReg, $offs, $khLen);
|
207 |
+
$offs += $khLen;
|
208 |
+
$registration->keyHandle = $this->base64u_encode($kh);
|
209 |
+
|
210 |
+
// length of certificate is stored in byte 3 and 4 (excluding the first 4 bytes)
|
211 |
+
$certLen = 4;
|
212 |
+
$certLen += ($regData[$offs + 2] << 8);
|
213 |
+
$certLen += $regData[$offs + 3];
|
214 |
+
|
215 |
+
$rawCert = $this->fixSignatureUnusedBits(substr($rawReg, $offs, $certLen));
|
216 |
+
$offs += $certLen;
|
217 |
+
$pemCert = "-----BEGIN CERTIFICATE-----\r\n";
|
218 |
+
$pemCert .= chunk_split(base64_encode($rawCert), 64);
|
219 |
+
$pemCert .= "-----END CERTIFICATE-----";
|
220 |
+
if($includeCert) {
|
221 |
+
$registration->certificate = base64_encode($rawCert);
|
222 |
+
}
|
223 |
+
if($this->attestDir) {
|
224 |
+
if(openssl_x509_checkpurpose($pemCert, -1, $this->get_certs()) !== true) {
|
225 |
+
throw new Error('Attestation certificate can not be validated', ERR_ATTESTATION_VERIFICATION );
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
if(!openssl_pkey_get_public($pemCert)) {
|
230 |
+
throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
|
231 |
+
}
|
232 |
+
$signature = substr($rawReg, $offs);
|
233 |
+
|
234 |
+
$dataToVerify = pack('C', 0);
|
235 |
+
$dataToVerify .= hash('sha256', $request->appId, true);
|
236 |
+
$dataToVerify .= hash('sha256', $clientData, true);
|
237 |
+
$dataToVerify .= $kh;
|
238 |
+
$dataToVerify .= $pubKey;
|
239 |
+
|
240 |
+
if(openssl_verify($dataToVerify, $signature, $pemCert, 'sha256') === 1) {
|
241 |
+
return $registration;
|
242 |
+
} else {
|
243 |
+
throw new Error('Attestation signature does not match', ERR_ATTESTATION_SIGNATURE );
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
+
/**
|
248 |
+
* Called to get an authentication request.
|
249 |
+
*
|
250 |
+
* @param array $registrations An array of the registrations to create authentication requests for.
|
251 |
+
* @return array An array of SignRequest
|
252 |
+
* @throws Error
|
253 |
+
*/
|
254 |
+
public function getAuthenticateData(array $registrations)
|
255 |
+
{
|
256 |
+
$sigs = array();
|
257 |
+
$challenge = $this->createChallenge();
|
258 |
+
foreach ($registrations as $reg) {
|
259 |
+
if( !is_object( $reg ) ) {
|
260 |
+
throw new \InvalidArgumentException('$registrations of getAuthenticateData() method only accepts array of object.');
|
261 |
+
}
|
262 |
+
/** @var Registration $reg */
|
263 |
+
|
264 |
+
$sig = new SignRequest();
|
265 |
+
$sig->appId = $this->appId;
|
266 |
+
$sig->keyHandle = $reg->keyHandle;
|
267 |
+
$sig->challenge = $challenge;
|
268 |
+
$sigs[] = $sig;
|
269 |
+
}
|
270 |
+
return $sigs;
|
271 |
+
}
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Called to verify an authentication response
|
275 |
+
*
|
276 |
+
* @param array $requests An array of outstanding authentication requests
|
277 |
+
* @param array $registrations An array of current registrations
|
278 |
+
* @param object $response A response from the authenticator
|
279 |
+
* @return Registration
|
280 |
+
* @throws Error
|
281 |
+
*
|
282 |
+
* The Registration object returned on success contains an updated counter
|
283 |
+
* that should be saved for future authentications.
|
284 |
+
* If the Error returned is ERR_COUNTER_TOO_LOW this is an indication of
|
285 |
+
* token cloning or similar and appropriate action should be taken.
|
286 |
+
*/
|
287 |
+
public function doAuthenticate(array $requests, array $registrations, $response)
|
288 |
+
{
|
289 |
+
if( !is_object( $response ) ) {
|
290 |
+
throw new \InvalidArgumentException('$response of doAuthenticate() method only accepts object.');
|
291 |
+
}
|
292 |
+
|
293 |
+
if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
|
294 |
+
throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
|
295 |
+
}
|
296 |
+
|
297 |
+
/** @var object|null $req */
|
298 |
+
$req = null;
|
299 |
+
|
300 |
+
/** @var object|null $reg */
|
301 |
+
$reg = null;
|
302 |
+
|
303 |
+
$clientData = $this->base64u_decode($response->clientData);
|
304 |
+
$decodedClient = json_decode($clientData);
|
305 |
+
|
306 |
+
if(isset($decodedClient->typ) && $decodedClient->typ !== REQUEST_TYPE_AUTHENTICATE) {
|
307 |
+
throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
|
308 |
+
}
|
309 |
+
|
310 |
+
foreach ($requests as $req) {
|
311 |
+
if( !is_object( $req ) ) {
|
312 |
+
throw new \InvalidArgumentException('$requests of doAuthenticate() method only accepts array of object.');
|
313 |
+
}
|
314 |
+
|
315 |
+
if($req->keyHandle === $response->keyHandle && $req->challenge === $decodedClient->challenge) {
|
316 |
+
break;
|
317 |
+
}
|
318 |
+
|
319 |
+
$req = null;
|
320 |
+
}
|
321 |
+
if($req === null) {
|
322 |
+
throw new Error('No matching request found', ERR_NO_MATCHING_REQUEST );
|
323 |
+
}
|
324 |
+
if(isset($decodedClient->origin) && !in_array($decodedClient->origin, $this->facetIds, true)) {
|
325 |
+
throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
|
326 |
+
}
|
327 |
+
foreach ($registrations as $reg) {
|
328 |
+
if( !is_object( $reg ) ) {
|
329 |
+
throw new \InvalidArgumentException('$registrations of doAuthenticate() method only accepts array of object.');
|
330 |
+
}
|
331 |
+
|
332 |
+
if($reg->keyHandle === $response->keyHandle) {
|
333 |
+
break;
|
334 |
+
}
|
335 |
+
$reg = null;
|
336 |
+
}
|
337 |
+
if($reg === null) {
|
338 |
+
throw new Error('No matching registration found', ERR_NO_MATCHING_REGISTRATION );
|
339 |
+
}
|
340 |
+
$pemKey = $this->pubkey_to_pem($this->base64u_decode($reg->publicKey));
|
341 |
+
if($pemKey === null) {
|
342 |
+
throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
|
343 |
+
}
|
344 |
+
|
345 |
+
$signData = $this->base64u_decode($response->signatureData);
|
346 |
+
$dataToVerify = hash('sha256', $req->appId, true);
|
347 |
+
$dataToVerify .= substr($signData, 0, 5);
|
348 |
+
$dataToVerify .= hash('sha256', $clientData, true);
|
349 |
+
$signature = substr($signData, 5);
|
350 |
+
|
351 |
+
if(openssl_verify($dataToVerify, $signature, $pemKey, 'sha256') === 1) {
|
352 |
+
$upb = unpack("Cupb", substr($signData, 0, 1));
|
353 |
+
if($upb['upb'] !== 1) {
|
354 |
+
throw new Error('User presence byte value is invalid', ERR_BAD_USER_PRESENCE );
|
355 |
+
}
|
356 |
+
$ctr = unpack("Nctr", substr($signData, 1, 4));
|
357 |
+
$counter = $ctr['ctr'];
|
358 |
+
/* TODO: wrap-around should be handled somehow.. */
|
359 |
+
if($counter > $reg->counter) {
|
360 |
+
$reg->counter = $counter;
|
361 |
+
return self::castObjectToRegistration($reg);
|
362 |
+
} else {
|
363 |
+
throw new Error('Counter too low.', ERR_COUNTER_TOO_LOW );
|
364 |
+
}
|
365 |
+
} else {
|
366 |
+
throw new Error('Authentication failed', ERR_AUTHENTICATION_FAILURE );
|
367 |
+
}
|
368 |
+
}
|
369 |
+
|
370 |
+
/**
|
371 |
+
* @param object $object
|
372 |
+
* @return Registration
|
373 |
+
*/
|
374 |
+
protected static function castObjectToRegistration($object)
|
375 |
+
{
|
376 |
+
$reg = new Registration();
|
377 |
+
if (isset($object->publicKey)) {
|
378 |
+
$reg->publicKey = $object->publicKey;
|
379 |
+
}
|
380 |
+
if (isset($object->certificate)) {
|
381 |
+
$reg->certificate = $object->certificate;
|
382 |
+
}
|
383 |
+
if (isset($object->counter)) {
|
384 |
+
$reg->counter = $object->counter;
|
385 |
+
}
|
386 |
+
if (isset($object->keyHandle)) {
|
387 |
+
$reg->keyHandle = $object->keyHandle;
|
388 |
+
}
|
389 |
+
return $reg;
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* @return array
|
394 |
+
*/
|
395 |
+
private function get_certs()
|
396 |
+
{
|
397 |
+
$files = array();
|
398 |
+
$dir = $this->attestDir;
|
399 |
+
if($dir !== null && is_dir($dir) && $handle = opendir($dir)) {
|
400 |
+
while(false !== ($entry = readdir($handle))) {
|
401 |
+
if(is_file("$dir/$entry")) {
|
402 |
+
$files[] = "$dir/$entry";
|
403 |
+
}
|
404 |
+
}
|
405 |
+
closedir($handle);
|
406 |
+
} elseif (is_file("$dir")) {
|
407 |
+
$files[] = "$dir";
|
408 |
+
}
|
409 |
+
return $files;
|
410 |
+
}
|
411 |
+
|
412 |
+
/**
|
413 |
+
* @param string $data
|
414 |
+
* @return string
|
415 |
+
*/
|
416 |
+
private function base64u_encode($data)
|
417 |
+
{
|
418 |
+
return trim(strtr(base64_encode($data), '+/', '-_'), '=');
|
419 |
+
}
|
420 |
+
|
421 |
+
/**
|
422 |
+
* @param string $data
|
423 |
+
* @return string
|
424 |
+
*/
|
425 |
+
private function base64u_decode($data)
|
426 |
+
{
|
427 |
+
return base64_decode(strtr($data, '-_', '+/'));
|
428 |
+
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* @param string $key
|
432 |
+
* @return null|string
|
433 |
+
*/
|
434 |
+
private function pubkey_to_pem($key)
|
435 |
+
{
|
436 |
+
if(strlen($key) !== PUBKEY_LEN || $key[0] !== "\x04") {
|
437 |
+
return null;
|
438 |
+
}
|
439 |
+
|
440 |
+
/*
|
441 |
+
* Convert the public key to binary DER format first
|
442 |
+
* Using the ECC SubjectPublicKeyInfo OIDs from RFC 5480
|
443 |
+
*
|
444 |
+
* SEQUENCE(2 elem) 30 59
|
445 |
+
* SEQUENCE(2 elem) 30 13
|
446 |
+
* OID1.2.840.10045.2.1 (id-ecPublicKey) 06 07 2a 86 48 ce 3d 02 01
|
447 |
+
* OID1.2.840.10045.3.1.7 (secp256r1) 06 08 2a 86 48 ce 3d 03 01 07
|
448 |
+
* BIT STRING(520 bit) 03 42 ..key..
|
449 |
+
*/
|
450 |
+
$der = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01";
|
451 |
+
$der .= "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42";
|
452 |
+
$der .= "\0".$key;
|
453 |
+
|
454 |
+
$pem = "-----BEGIN PUBLIC KEY-----\r\n";
|
455 |
+
$pem .= chunk_split(base64_encode($der), 64);
|
456 |
+
$pem .= "-----END PUBLIC KEY-----";
|
457 |
+
|
458 |
+
return $pem;
|
459 |
+
}
|
460 |
+
|
461 |
+
/**
|
462 |
+
* @return string
|
463 |
+
* @throws Error
|
464 |
+
*/
|
465 |
+
private function createChallenge()
|
466 |
+
{
|
467 |
+
$challenge = random_bytes(32);
|
468 |
+
$challenge = $this->base64u_encode( $challenge );
|
469 |
+
|
470 |
+
return $challenge;
|
471 |
+
}
|
472 |
+
|
473 |
+
/**
|
474 |
+
* Fixes a certificate where the signature contains unused bits.
|
475 |
+
*
|
476 |
+
* @param string $cert
|
477 |
+
* @return mixed
|
478 |
+
*/
|
479 |
+
private function fixSignatureUnusedBits($cert)
|
480 |
+
{
|
481 |
+
if(in_array(hash('sha256', $cert), $this->FIXCERTS, true)) {
|
482 |
+
$cert[strlen($cert) - 257] = "\0";
|
483 |
+
}
|
484 |
+
return $cert;
|
485 |
+
}
|
486 |
+
}
|
487 |
+
|
488 |
+
/**
|
489 |
+
* Class for building a registration request
|
490 |
+
*
|
491 |
+
* @package u2flib_server
|
492 |
+
*/
|
493 |
+
class RegisterRequest
|
494 |
+
{
|
495 |
+
/** @var string Protocol version */
|
496 |
+
public $version = U2F_VERSION;
|
497 |
+
|
498 |
+
/** @var string Registration challenge */
|
499 |
+
public $challenge;
|
500 |
+
|
501 |
+
/** @var string Application id */
|
502 |
+
public $appId;
|
503 |
+
|
504 |
+
/**
|
505 |
+
* @param string $challenge
|
506 |
+
* @param string $appId
|
507 |
+
* @internal
|
508 |
+
*/
|
509 |
+
public function __construct($challenge, $appId)
|
510 |
+
{
|
511 |
+
$this->challenge = $challenge;
|
512 |
+
$this->appId = $appId;
|
513 |
+
}
|
514 |
+
}
|
515 |
+
|
516 |
+
/**
|
517 |
+
* Class for building up an authentication request
|
518 |
+
*
|
519 |
+
* @package u2flib_server
|
520 |
+
*/
|
521 |
+
class SignRequest
|
522 |
+
{
|
523 |
+
/** @var string Protocol version */
|
524 |
+
public $version = U2F_VERSION;
|
525 |
+
|
526 |
+
/** @var string Authentication challenge */
|
527 |
+
public $challenge = '';
|
528 |
+
|
529 |
+
/** @var string Key handle of a registered authenticator */
|
530 |
+
public $keyHandle = '';
|
531 |
+
|
532 |
+
/** @var string Application id */
|
533 |
+
public $appId = '';
|
534 |
+
}
|
535 |
+
|
536 |
+
/**
|
537 |
+
* Class returned for successful registrations
|
538 |
+
*
|
539 |
+
* @package u2flib_server
|
540 |
+
*/
|
541 |
+
class Registration
|
542 |
+
{
|
543 |
+
/** @var string The key handle of the registered authenticator */
|
544 |
+
public $keyHandle = '';
|
545 |
+
|
546 |
+
/** @var string The public key of the registered authenticator */
|
547 |
+
public $publicKey = '';
|
548 |
+
|
549 |
+
/** @var string The attestation certificate of the registered authenticator */
|
550 |
+
public $certificate = '';
|
551 |
+
|
552 |
+
/** @var int The counter associated with this registration */
|
553 |
+
public $counter = -1;
|
554 |
+
}
|
555 |
+
|
556 |
+
/**
|
557 |
+
* Error class, returned on errors
|
558 |
+
*
|
559 |
+
* @package u2flib_server
|
560 |
+
*/
|
561 |
+
class Error extends \Exception
|
562 |
+
{
|
563 |
+
/**
|
564 |
+
* Override constructor and make message and code mandatory
|
565 |
+
* @param string $message
|
566 |
+
* @param int $code
|
567 |
+
* @param \Exception|null $previous
|
568 |
+
*/
|
569 |
+
public function __construct($message, $code, \Exception $previous = null) {
|
570 |
+
parent::__construct($message, $code, $previous);
|
571 |
+
}
|
572 |
+
}
|
src/lib/src/Controller/Controller.php
CHANGED
@@ -1160,7 +1160,7 @@ class Controller {
|
|
1160 |
* @param string $sKey
|
1161 |
* @return mixed|null
|
1162 |
*/
|
1163 |
-
|
1164 |
$aData = $this->getPluginSpec()[ 'paths' ];
|
1165 |
return isset( $aData[ $sKey ] ) ? $aData[ $sKey ] : null;
|
1166 |
}
|
@@ -1606,6 +1606,18 @@ class Controller {
|
|
1606 |
return $this->getPluginSpec_Property( 'version' );
|
1607 |
}
|
1608 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1609 |
/**
|
1610 |
* @return int
|
1611 |
*/
|
@@ -1623,9 +1635,9 @@ class Controller {
|
|
1623 |
}
|
1624 |
|
1625 |
/**
|
1626 |
-
* @return
|
1627 |
*/
|
1628 |
-
|
1629 |
if ( !isset( self::$oControllerOptions ) ) {
|
1630 |
|
1631 |
self::$oControllerOptions = Services::WpGeneral()->getOption( $this->getPluginControllerOptionsKey() );
|
@@ -1691,14 +1703,15 @@ class Controller {
|
|
1691 |
}
|
1692 |
|
1693 |
protected function saveCurrentPluginControllerOptions() {
|
|
|
1694 |
add_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
|
1695 |
if ( $this->plugin_deleting ) {
|
1696 |
-
|
1697 |
}
|
1698 |
else {
|
1699 |
$oOptions = $this->getPluginControllerOptions();
|
1700 |
if ( $this->sConfigOptionsHashWhenLoaded != md5( serialize( $oOptions ) ) ) {
|
1701 |
-
|
1702 |
}
|
1703 |
}
|
1704 |
remove_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
|
@@ -1872,6 +1885,12 @@ class Controller {
|
|
1872 |
}
|
1873 |
|
1874 |
$this->modules_loaded = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
1875 |
do_action( $this->prefix( 'modules_loaded' ) );
|
1876 |
do_action( $this->prefix( 'run_processors' ) );
|
1877 |
return $bSuccess;
|
@@ -2062,7 +2081,13 @@ class Controller {
|
|
2062 |
* @return \FernleafSystems\Wordpress\Services\Utilities\Render
|
2063 |
*/
|
2064 |
public function getRenderer() {
|
2065 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2066 |
}
|
2067 |
|
2068 |
/**
|
@@ -2221,12 +2246,4 @@ class Controller {
|
|
2221 |
->run();
|
2222 |
}
|
2223 |
}
|
2224 |
-
|
2225 |
-
/**
|
2226 |
-
* @return bool
|
2227 |
-
* @deprecated 9.0
|
2228 |
-
*/
|
2229 |
-
public function isPluginDeleting() {
|
2230 |
-
return (bool)$this->plugin_deleting;
|
2231 |
-
}
|
2232 |
}
|
1160 |
* @param string $sKey
|
1161 |
* @return mixed|null
|
1162 |
*/
|
1163 |
+
public function getPluginSpec_Path( $sKey ) {
|
1164 |
$aData = $this->getPluginSpec()[ 'paths' ];
|
1165 |
return isset( $aData[ $sKey ] ) ? $aData[ $sKey ] : null;
|
1166 |
}
|
1606 |
return $this->getPluginSpec_Property( 'version' );
|
1607 |
}
|
1608 |
|
1609 |
+
/**
|
1610 |
+
* @return string
|
1611 |
+
*/
|
1612 |
+
public function getPreviousVersion() {
|
1613 |
+
$oOpts = $this->getPluginControllerOptions();
|
1614 |
+
if ( empty( $oOpts->previous_version ) ) {
|
1615 |
+
$oOpts->previous_version = '9.0.4'; //@deprecated 9.0.4
|
1616 |
+
// $oOpts->previous_version = $this->getVersion();
|
1617 |
+
}
|
1618 |
+
return $oOpts->previous_version;
|
1619 |
+
}
|
1620 |
+
|
1621 |
/**
|
1622 |
* @return int
|
1623 |
*/
|
1635 |
}
|
1636 |
|
1637 |
/**
|
1638 |
+
* @return \stdClass
|
1639 |
*/
|
1640 |
+
public function getPluginControllerOptions() {
|
1641 |
if ( !isset( self::$oControllerOptions ) ) {
|
1642 |
|
1643 |
self::$oControllerOptions = Services::WpGeneral()->getOption( $this->getPluginControllerOptionsKey() );
|
1703 |
}
|
1704 |
|
1705 |
protected function saveCurrentPluginControllerOptions() {
|
1706 |
+
$oWP = Services::WpGeneral();
|
1707 |
add_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
|
1708 |
if ( $this->plugin_deleting ) {
|
1709 |
+
$oWP->deleteOption( $this->getPluginControllerOptionsKey() );
|
1710 |
}
|
1711 |
else {
|
1712 |
$oOptions = $this->getPluginControllerOptions();
|
1713 |
if ( $this->sConfigOptionsHashWhenLoaded != md5( serialize( $oOptions ) ) ) {
|
1714 |
+
$oWP->updateOption( $this->getPluginControllerOptionsKey(), $oOptions );
|
1715 |
}
|
1716 |
}
|
1717 |
remove_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
|
1885 |
}
|
1886 |
|
1887 |
$this->modules_loaded = true;
|
1888 |
+
|
1889 |
+
// Upgrade modules
|
1890 |
+
( new Shield\Controller\Utilities\Upgrade() )
|
1891 |
+
->setCon( $this )
|
1892 |
+
->execute();
|
1893 |
+
|
1894 |
do_action( $this->prefix( 'modules_loaded' ) );
|
1895 |
do_action( $this->prefix( 'run_processors' ) );
|
1896 |
return $bSuccess;
|
2081 |
* @return \FernleafSystems\Wordpress\Services\Utilities\Render
|
2082 |
*/
|
2083 |
public function getRenderer() {
|
2084 |
+
$oRndr = Services::Render();
|
2085 |
+
$oLocator = ( new Shield\Render\LocateTemplateDirs() )->setCon( $this );
|
2086 |
+
foreach ( $oLocator->run() as $sDir ) {
|
2087 |
+
$oRndr->setTwigTemplateRoot( $sDir );
|
2088 |
+
}
|
2089 |
+
$oRndr->setTemplateRoot( $this->getPath_Templates() );
|
2090 |
+
return $oRndr;
|
2091 |
}
|
2092 |
|
2093 |
/**
|
2246 |
->run();
|
2247 |
}
|
2248 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2249 |
}
|
src/lib/src/Controller/Utilities/Upgrade.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Controller\Utilities;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
+
|
7 |
+
class Upgrade {
|
8 |
+
|
9 |
+
use Shield\Modules\PluginControllerConsumer;
|
10 |
+
use \FernleafSystems\Utilities\Logic\OneTimeExecute;
|
11 |
+
|
12 |
+
protected function run() {
|
13 |
+
$oCon = $this->getCon();
|
14 |
+
|
15 |
+
if ( $oCon->getPreviousVersion() !== $oCon->getVersion() ) {
|
16 |
+
foreach ( $oCon->modules as $oMod ) {
|
17 |
+
$oH = $oMod->getUpgradeHandler();
|
18 |
+
if ( $oH instanceof Shield\Modules\Base\Upgrade ) {
|
19 |
+
$oH->setMod( $oMod )->execute();
|
20 |
+
}
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
$oCon->getPluginControllerOptions()->previous_version = $oCon->getVersion();
|
25 |
+
}
|
26 |
+
}
|
src/lib/src/Databases/Base/Handler.php
CHANGED
@@ -294,7 +294,33 @@ class Handler {
|
|
294 |
* @return string
|
295 |
*/
|
296 |
protected function getDefaultCreateTableSql() {
|
297 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
}
|
299 |
|
300 |
/**
|
@@ -362,4 +388,30 @@ class Handler {
|
|
362 |
$this->reset();
|
363 |
return $mResult !== false;
|
364 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
}
|
294 |
* @return string
|
295 |
*/
|
296 |
protected function getDefaultCreateTableSql() {
|
297 |
+
$aCols = [];
|
298 |
+
foreach ( $this->enumerateColumns() as $col => $def ) {
|
299 |
+
$aCols[] = sprintf( '%s %s', $col, $def );
|
300 |
+
}
|
301 |
+
$aCols[] = $this->getPrimaryKeySpec();
|
302 |
+
|
303 |
+
return "CREATE TABLE %s (
|
304 |
+
".implode( ", ", $aCols )."
|
305 |
+
) %s;";
|
306 |
+
}
|
307 |
+
|
308 |
+
/**
|
309 |
+
* @return string[]
|
310 |
+
*/
|
311 |
+
protected function getColumnsAsArray() {
|
312 |
+
return [];
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* @return string[]
|
317 |
+
*/
|
318 |
+
public function enumerateColumns() {
|
319 |
+
return array_merge(
|
320 |
+
$this->getColumn_ID(),
|
321 |
+
$this->getColumnsAsArray(),
|
322 |
+
$this->getColumns_Ats()
|
323 |
+
);
|
324 |
}
|
325 |
|
326 |
/**
|
388 |
$this->reset();
|
389 |
return $mResult !== false;
|
390 |
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* @return string[]
|
394 |
+
*/
|
395 |
+
protected function getColumn_ID() {
|
396 |
+
return [
|
397 |
+
'id' => 'int(11) UNSIGNED NOT NULL AUTO_INCREMENT',
|
398 |
+
];
|
399 |
+
}
|
400 |
+
|
401 |
+
/**
|
402 |
+
* @return string[]
|
403 |
+
*/
|
404 |
+
protected function getColumns_Ats() {
|
405 |
+
return [
|
406 |
+
'created_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
|
407 |
+
'deleted_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
|
408 |
+
];
|
409 |
+
}
|
410 |
+
|
411 |
+
/**
|
412 |
+
* @return strinG
|
413 |
+
*/
|
414 |
+
protected function getPrimaryKeySpec() {
|
415 |
+
return 'PRIMARY KEY (id)';
|
416 |
+
}
|
417 |
}
|
src/lib/src/Databases/IPs/Handler.php
CHANGED
@@ -50,22 +50,18 @@ class Handler extends Base\Handler {
|
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
-
* @return string
|
54 |
*/
|
55 |
-
protected function
|
56 |
-
return
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
created_at int(15) UNSIGNED NOT NULL DEFAULT 0,
|
67 |
-
deleted_at int(15) UNSIGNED NOT NULL DEFAULT 0,
|
68 |
-
PRIMARY KEY (id)
|
69 |
-
) %s;";
|
70 |
}
|
71 |
}
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
+
* @return string[]
|
54 |
*/
|
55 |
+
protected function getColumnsAsArray() {
|
56 |
+
return [
|
57 |
+
'ip' => "varchar(60) NOT NULL DEFAULT '' COMMENT 'Human readable IP address or range'",
|
58 |
+
'label' => "varchar(255) NOT NULL DEFAULT ''",
|
59 |
+
'transgressions' => "smallint(1) UNSIGNED NOT NULL DEFAULT 0",
|
60 |
+
'list' => "varchar(4) NOT NULL DEFAULT ''",
|
61 |
+
'ip6' => "tinyint(1) UNSIGNED NOT NULL DEFAULT 0",
|
62 |
+
'is_range' => "tinyint(1) UNSIGNED NOT NULL DEFAULT 0",
|
63 |
+
'last_access_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
|
64 |
+
'blocked_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
|
65 |
+
];
|
|
|
|
|
|
|
|
|
66 |
}
|
67 |
}
|
src/lib/src/License/EddLicenseVO.php
CHANGED
@@ -5,7 +5,8 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\License;
|
|
5 |
/**
|
6 |
* Class EddLicenseVO
|
7 |
* @package FernleafSystems\Wordpress\Plugin\Shield\License
|
8 |
-
* @property bool
|
|
|
9 |
*/
|
10 |
class EddLicenseVO extends \FernleafSystems\Wordpress\Services\Utilities\Licenses\EddLicenseVO {
|
11 |
|
5 |
/**
|
6 |
* Class EddLicenseVO
|
7 |
* @package FernleafSystems\Wordpress\Plugin\Shield\License
|
8 |
+
* @property bool $is_central
|
9 |
+
* @property string $aff_ref
|
10 |
*/
|
11 |
class EddLicenseVO extends \FernleafSystems\Wordpress\Services\Utilities\Licenses\EddLicenseVO {
|
12 |
|
src/lib/src/Modules/AuditTrail/AjaxHandler.php
CHANGED
@@ -85,7 +85,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
85 |
|
86 |
return [
|
87 |
'success' => true,
|
88 |
-
'html' => $oTableBuilder->
|
89 |
];
|
90 |
}
|
91 |
}
|
85 |
|
86 |
return [
|
87 |
'success' => true,
|
88 |
+
'html' => $oTableBuilder->render()
|
89 |
];
|
90 |
}
|
91 |
}
|
src/lib/src/Modules/AuditTrail/Options.php
CHANGED
@@ -159,12 +159,4 @@ class Options extends Base\ShieldOptions {
|
|
159 |
public function updateCTLastSnapshotAt() {
|
160 |
return $this->setOptAt( 'ct_last_snapshot_at' );
|
161 |
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* @return int
|
165 |
-
* @deprecated 9.0
|
166 |
-
*/
|
167 |
-
public function getDefaultMaxEntries() {
|
168 |
-
return $this->getDef( 'audit_trail_free_max_entries' );
|
169 |
-
}
|
170 |
}
|
159 |
public function updateCTLastSnapshotAt() {
|
160 |
return $this->setOptAt( 'ct_last_snapshot_at' );
|
161 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
}
|
src/lib/src/Modules/AuditTrail/WpCli.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
|
7 |
+
|
8 |
+
class WpCli extends Base\WpCli {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @inheritDoc
|
12 |
+
*/
|
13 |
+
protected function getCmdHandlers() {
|
14 |
+
return [
|
15 |
+
new AuditTrail\WpCli\Display()
|
16 |
+
];
|
17 |
+
}
|
18 |
+
}
|
src/lib/src/Modules/AuditTrail/WpCli/Display.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Tables;
|
7 |
+
use WP_CLI;
|
8 |
+
|
9 |
+
class Display extends Base\WpCli\BaseWpCliCmd {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @throws \Exception
|
13 |
+
*/
|
14 |
+
protected function addCmds() {
|
15 |
+
WP_CLI::add_command(
|
16 |
+
$this->buildCmd( [ 'display' ] ),
|
17 |
+
[ $this, 'cmdDisplay' ], $this->mergeCommonCmdArgs( [
|
18 |
+
'shortdesc' => 'Import configuration from another WP site running Shield',
|
19 |
+
'synopsis' => [
|
20 |
+
// [
|
21 |
+
// 'type' => 'assoc',
|
22 |
+
// 'name' => 'source',
|
23 |
+
// 'optional' => false,
|
24 |
+
// 'description' => 'The URL of the source site or absolute path to import file.',
|
25 |
+
// ],
|
26 |
+
// [
|
27 |
+
// 'type' => 'assoc',
|
28 |
+
// 'name' => 'site-secret',
|
29 |
+
// 'optional' => true,
|
30 |
+
// 'default' => null,
|
31 |
+
// 'description' => 'The secret key on the source site. Not required if this site is already registered on the source site.',
|
32 |
+
// ],
|
33 |
+
// [
|
34 |
+
// 'type' => 'assoc',
|
35 |
+
// 'name' => 'slave',
|
36 |
+
// 'optional' => true,
|
37 |
+
// 'default' => null,
|
38 |
+
// 'options' => [
|
39 |
+
// 'add',
|
40 |
+
// 'remove',
|
41 |
+
// ],
|
42 |
+
// 'description' => 'Add or remove this site as a registered slave (in the whitelist) on the source site. Secret is required to `add`.',
|
43 |
+
// ],
|
44 |
+
// [
|
45 |
+
// 'type' => 'flag',
|
46 |
+
// 'name' => 'force',
|
47 |
+
// 'optional' => true,
|
48 |
+
// 'description' => 'By-pass confirmation prompt.',
|
49 |
+
// ],
|
50 |
+
// [
|
51 |
+
// 'type' => 'flag',
|
52 |
+
// 'name' => 'delete-file',
|
53 |
+
// 'optional' => true,
|
54 |
+
// 'description' => 'Delete file after configurations have been imported.',
|
55 |
+
// ],
|
56 |
+
],
|
57 |
+
] ) );
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @param array $null
|
62 |
+
* @param array $aA
|
63 |
+
* @throws WP_CLI\ExitException
|
64 |
+
*/
|
65 |
+
public function cmdDisplay( array $null, array $aA ) {
|
66 |
+
/** @var \ICWP_WPSF_FeatureHandler_AuditTrail $oMod */
|
67 |
+
$oMod = $this->getMod();
|
68 |
+
$oTableBuilder = ( new Tables\Build\AuditTrail() )
|
69 |
+
->setMod( $oMod )
|
70 |
+
->setDbHandler( $oMod->getDbHandler_AuditTrail() );
|
71 |
+
( new Tables\Render\WpCliTable\AuditTrail() )
|
72 |
+
->setDataBuilder( $oTableBuilder )
|
73 |
+
->render();
|
74 |
+
}
|
75 |
+
}
|
src/lib/src/Modules/Autoupdates/Options.php
CHANGED
@@ -98,29 +98,4 @@ class Options extends Base\ShieldOptions {
|
|
98 |
public function setDelayTracking( $aTrackingInfo ) {
|
99 |
return $this->setOpt( 'delay_tracking', $aTrackingInfo );
|
100 |
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* @return bool
|
104 |
-
* @deprecated 9.0
|
105 |
-
*/
|
106 |
-
public function isAutoupdateIndividualPlugins() {
|
107 |
-
return false;
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* @param string $sPluginFile
|
112 |
-
* @return bool
|
113 |
-
* @deprecated 9.0
|
114 |
-
*/
|
115 |
-
public function isPluginSetToAutoupdate( $sPluginFile ) {
|
116 |
-
return false;
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* @return string[]
|
121 |
-
* @deprecated 9.0
|
122 |
-
*/
|
123 |
-
public function getAutoupdatePlugins() {
|
124 |
-
return [];
|
125 |
-
}
|
126 |
}
|
98 |
public function setDelayTracking( $aTrackingInfo ) {
|
99 |
return $this->setOpt( 'delay_tracking', $aTrackingInfo );
|
100 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
}
|
src/lib/src/Modules/Base/Options.php
CHANGED
@@ -2,6 +2,7 @@
|
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
4 |
|
|
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
@@ -138,6 +139,19 @@ class Options {
|
|
138 |
return array_diff_key( $aOptions, array_flip( $this->getVirtualCommonOptions() ) );
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
/**
|
142 |
* Returns an array of all the options with the values for "sensitive" options masked out.
|
143 |
* @return array
|
@@ -171,6 +185,20 @@ class Options {
|
|
171 |
return ( isset( $aRawConfig[ 'properties' ] ) && isset( $aRawConfig[ 'properties' ][ $sProperty ] ) ) ? $aRawConfig[ 'properties' ][ $sProperty ] : null;
|
172 |
}
|
173 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
/**
|
175 |
* @param string
|
176 |
* @return mixed|null
|
@@ -778,35 +806,45 @@ class Options {
|
|
778 |
*/
|
779 |
public function setOpt( $sOptKey, $mNewValue ) {
|
780 |
|
781 |
-
// NOTE: can't use getOpt() for current
|
782 |
-
$
|
783 |
-
$mCurrent = isset( $
|
784 |
-
|
785 |
-
$mNewValue = $this->ensureOptValueState( $sOptKey, $mNewValue );
|
786 |
-
|
787 |
-
// Here we try to ensure that values that are repeatedly changed properly reflect their changed
|
788 |
-
// states, as they may be reverted back to their original state and we "think" it's been changed.
|
789 |
-
$bValueIsDifferent = serialize( $mCurrent ) !== serialize( $mNewValue );
|
790 |
-
// basically if we're actually resetting back to the original value
|
791 |
-
$bIsResetting = $bValueIsDifferent && $this->isOptChanged( $sOptKey )
|
792 |
-
&& ( serialize( $this->getOldValue( $sOptKey ) ) === serialize( $mNewValue ) );
|
793 |
|
794 |
-
|
795 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
802 |
}
|
|
|
|
|
803 |
}
|
804 |
-
$this->setOldOptValue( $sOptKey, $mCurrent )
|
805 |
-
->setOptValue( $sOptKey, $mNewValue );
|
806 |
-
}
|
807 |
|
808 |
-
|
809 |
-
|
|
|
810 |
}
|
811 |
|
812 |
return $this;
|
@@ -828,7 +866,7 @@ class Options {
|
|
828 |
* @param mixed $mValue
|
829 |
* @return $this
|
830 |
*/
|
831 |
-
|
832 |
$aValues = $this->getAllOptionsValues();
|
833 |
$aValues[ $sOptKey ] = $mValue;
|
834 |
$this->aOptionsValues = $aValues;
|
@@ -836,35 +874,13 @@ class Options {
|
|
836 |
}
|
837 |
|
838 |
/**
|
839 |
-
*
|
840 |
-
* @param
|
841 |
-
* @
|
842 |
-
* @
|
|
|
843 |
*/
|
844 |
private function ensureOptValueState( $sOptKey, $mValue ) {
|
845 |
-
$sType = $this->getOptionType( $sOptKey );
|
846 |
-
if ( !empty( $sType ) ) {
|
847 |
-
switch ( $sType ) {
|
848 |
-
case 'integer':
|
849 |
-
$mValue = (int)$mValue;
|
850 |
-
break;
|
851 |
-
|
852 |
-
case 'text':
|
853 |
-
case 'email':
|
854 |
-
$mValue = (string)$mValue;
|
855 |
-
break;
|
856 |
-
|
857 |
-
case 'array':
|
858 |
-
case 'multiple_select':
|
859 |
-
if ( !is_array( $mValue ) ) {
|
860 |
-
$mValue = $this->getOptDefault( $sOptKey );
|
861 |
-
}
|
862 |
-
break;
|
863 |
-
|
864 |
-
default:
|
865 |
-
break;
|
866 |
-
}
|
867 |
-
}
|
868 |
return $mValue;
|
869 |
}
|
870 |
|
@@ -928,7 +944,6 @@ class Options {
|
|
928 |
* @return mixed
|
929 |
*/
|
930 |
public function unsetOpt( $sOptionKey ) {
|
931 |
-
|
932 |
unset( $this->aOptionsValues[ $sOptionKey ] );
|
933 |
$this->setNeedSave( true );
|
934 |
return true;
|
@@ -1084,4 +1099,14 @@ class Options {
|
|
1084 |
$this->sPathToConfig = $sPathToConfig;
|
1085 |
return $this;
|
1086 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1087 |
}
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
4 |
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Options\OptValueSanitize;
|
6 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
|
139 |
return array_diff_key( $aOptions, array_flip( $this->getVirtualCommonOptions() ) );
|
140 |
}
|
141 |
|
142 |
+
/**
|
143 |
+
* @return string[]
|
144 |
+
*/
|
145 |
+
public function getOptionsForWpCli() {
|
146 |
+
return array_filter(
|
147 |
+
$this->getOptionsKeys(),
|
148 |
+
function ( $sKey ) {
|
149 |
+
return $this->getRawData_SingleOption( $sKey )[ 'section' ]
|
150 |
+
!== 'section_non_ui';
|
151 |
+
}
|
152 |
+
);
|
153 |
+
}
|
154 |
+
|
155 |
/**
|
156 |
* Returns an array of all the options with the values for "sensitive" options masked out.
|
157 |
* @return array
|
185 |
return ( isset( $aRawConfig[ 'properties' ] ) && isset( $aRawConfig[ 'properties' ][ $sProperty ] ) ) ? $aRawConfig[ 'properties' ][ $sProperty ] : null;
|
186 |
}
|
187 |
|
188 |
+
/**
|
189 |
+
* @return array
|
190 |
+
*/
|
191 |
+
public function getWpCliCfg() {
|
192 |
+
$aCfg = $this->getRawData_FullFeatureConfig();
|
193 |
+
return array_merge(
|
194 |
+
[
|
195 |
+
'enabled' => true,
|
196 |
+
'root' => $this->getSlug(),
|
197 |
+
],
|
198 |
+
empty( $aCfg[ 'wpcli' ] ) ? [] : $aCfg[ 'wpcli' ]
|
199 |
+
);
|
200 |
+
}
|
201 |
+
|
202 |
/**
|
203 |
* @param string
|
204 |
* @return mixed|null
|
806 |
*/
|
807 |
public function setOpt( $sOptKey, $mNewValue ) {
|
808 |
|
809 |
+
// NOTE: can't use getOpt() for current as it'll create infinite loop
|
810 |
+
$aOptVals = $this->getAllOptionsValues();
|
811 |
+
$mCurrent = isset( $aOptVals[ $sOptKey ] ) ? $aOptVals[ $sOptKey ] : null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
812 |
|
813 |
+
try {
|
814 |
+
$mNewValue = ( new OptValueSanitize() )
|
815 |
+
->setMod( $this->getMod() )
|
816 |
+
->run( $sOptKey, $mNewValue );
|
817 |
+
$bVerified = true;
|
818 |
+
}
|
819 |
+
catch ( \Exception $oE ) {
|
820 |
+
$bVerified = false;
|
821 |
+
}
|
822 |
|
823 |
+
if ( $bVerified ) {
|
824 |
+
// Here we try to ensure that values that are repeatedly changed properly reflect their changed
|
825 |
+
// states, as they may be reverted back to their original state and we "think" it's been changed.
|
826 |
+
$bValueIsDifferent = serialize( $mCurrent ) !== serialize( $mNewValue );
|
827 |
+
// basically if we're actually resetting back to the original value
|
828 |
+
$bIsResetting = $bValueIsDifferent && $this->isOptChanged( $sOptKey )
|
829 |
+
&& ( serialize( $this->getOldValue( $sOptKey ) ) === serialize( $mNewValue ) );
|
830 |
+
|
831 |
+
if ( $bValueIsDifferent && $this->verifyCanSet( $sOptKey, $mNewValue ) ) {
|
832 |
+
$this->setNeedSave( true );
|
833 |
+
|
834 |
+
//Load the config and do some pre-set verification where possible. This will slowly grow.
|
835 |
+
$aOption = $this->getRawData_SingleOption( $sOptKey );
|
836 |
+
if ( !empty( $aOption[ 'type' ] ) ) {
|
837 |
+
if ( $aOption[ 'type' ] == 'boolean' && !is_bool( $mNewValue ) ) {
|
838 |
+
return $this->resetOptToDefault( $sOptKey );
|
839 |
+
}
|
840 |
}
|
841 |
+
$this->setOldOptValue( $sOptKey, $mCurrent )
|
842 |
+
->setOptValue( $sOptKey, $mNewValue );
|
843 |
}
|
|
|
|
|
|
|
844 |
|
845 |
+
if ( $bIsResetting ) {
|
846 |
+
unset( $this->aOld[ $sOptKey ] );
|
847 |
+
}
|
848 |
}
|
849 |
|
850 |
return $this;
|
866 |
* @param mixed $mValue
|
867 |
* @return $this
|
868 |
*/
|
869 |
+
public function setOptValue( $sOptKey, $mValue ) {
|
870 |
$aValues = $this->getAllOptionsValues();
|
871 |
$aValues[ $sOptKey ] = $mValue;
|
872 |
$this->aOptionsValues = $aValues;
|
874 |
}
|
875 |
|
876 |
/**
|
877 |
+
* @param $sOptKey
|
878 |
+
* @param $mValue
|
879 |
+
* @return array|int|mixed|string
|
880 |
+
* @throws \Exception
|
881 |
+
* @deprecated 9.1.0
|
882 |
*/
|
883 |
private function ensureOptValueState( $sOptKey, $mValue ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
884 |
return $mValue;
|
885 |
}
|
886 |
|
944 |
* @return mixed
|
945 |
*/
|
946 |
public function unsetOpt( $sOptionKey ) {
|
|
|
947 |
unset( $this->aOptionsValues[ $sOptionKey ] );
|
948 |
$this->setNeedSave( true );
|
949 |
return true;
|
1099 |
$this->sPathToConfig = $sPathToConfig;
|
1100 |
return $this;
|
1101 |
}
|
1102 |
+
|
1103 |
+
/**
|
1104 |
+
* @param $aValues
|
1105 |
+
* @return $this
|
1106 |
+
*/
|
1107 |
+
public function setOptionsValues( array $aValues = [] ) {
|
1108 |
+
$this->aOptionsValues = $aValues;
|
1109 |
+
$this->setNeedSave( true );
|
1110 |
+
return $this;
|
1111 |
+
}
|
1112 |
}
|
src/lib/src/Modules/Base/Options/OptValueSanitize.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Options;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
|
8 |
+
class OptValueSanitize {
|
9 |
+
|
10 |
+
use ModConsumer;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @param string $sKey
|
14 |
+
* @param mixed $mVal
|
15 |
+
* @return mixed
|
16 |
+
* @throws \Exception
|
17 |
+
*/
|
18 |
+
public function run( $sKey, $mVal ) {
|
19 |
+
$oOpts = $this->getOptions();
|
20 |
+
$aRawOption = $oOpts->getRawData_SingleOption( $sKey );
|
21 |
+
|
22 |
+
if ( !in_array( $sKey, $oOpts->getOptionsKeys() ) ) {
|
23 |
+
throw new \Exception( sprintf( 'Not a valid option key for module: %s', $sKey ) );
|
24 |
+
}
|
25 |
+
|
26 |
+
$validValue = false;
|
27 |
+
switch ( $oOpts->getOptionType( $sKey ) ) {
|
28 |
+
|
29 |
+
case 'boolean':
|
30 |
+
$validValue = is_bool( $mVal );
|
31 |
+
break;
|
32 |
+
|
33 |
+
case 'integer':
|
34 |
+
$validValue = is_numeric( $mVal );
|
35 |
+
if ( $validValue ) {
|
36 |
+
$mVal = (int)$mVal;
|
37 |
+
}
|
38 |
+
break;
|
39 |
+
|
40 |
+
case 'email':
|
41 |
+
$mVal = trim( (string)$mVal );
|
42 |
+
$validValue = empty($mVal) || Services::Data()->validEmail( $mVal );
|
43 |
+
break;
|
44 |
+
|
45 |
+
case 'array':
|
46 |
+
$validValue = is_array( $mVal );
|
47 |
+
break;
|
48 |
+
|
49 |
+
case 'text':
|
50 |
+
if ( is_scalar( $mVal ) ) {
|
51 |
+
$validValue = is_null( $mVal ) || is_scalar( $mVal );
|
52 |
+
$mVal = (string)$mVal;
|
53 |
+
}
|
54 |
+
break;
|
55 |
+
|
56 |
+
case 'select':
|
57 |
+
$validValue = is_string( $mVal ) && strlen( $mVal ) > 0;
|
58 |
+
break;
|
59 |
+
|
60 |
+
case 'multiple_select':
|
61 |
+
if ( is_array( $mVal ) ) {
|
62 |
+
$validValue = count( array_diff(
|
63 |
+
$mVal,
|
64 |
+
array_map(
|
65 |
+
function ( $aValueOption ) {
|
66 |
+
return $aValueOption[ 'value_key' ];
|
67 |
+
},
|
68 |
+
$aRawOption[ 'value_options' ]
|
69 |
+
)
|
70 |
+
) ) === 0;
|
71 |
+
}
|
72 |
+
break;
|
73 |
+
|
74 |
+
case 'checkbox':
|
75 |
+
if ( is_string( $mVal ) ) {
|
76 |
+
$mVal = strtoupper( $mVal );
|
77 |
+
$validValue = in_array( $mVal, [ 'Y', 'N' ] );
|
78 |
+
}
|
79 |
+
break;
|
80 |
+
|
81 |
+
default:
|
82 |
+
$validValue = true;
|
83 |
+
break;
|
84 |
+
}
|
85 |
+
|
86 |
+
if ( !$validValue ) {
|
87 |
+
throw new \Exception( 'Not a valid value type for option.' );
|
88 |
+
}
|
89 |
+
|
90 |
+
return $mVal;
|
91 |
+
}
|
92 |
+
}
|
src/lib/src/Modules/Base/Strings.php
CHANGED
@@ -74,12 +74,12 @@ class Strings {
|
|
74 |
'description' => __( 'Description', 'wp-simple-firewall' ),
|
75 |
'loading' => __( 'Loading', 'wp-simple-firewall' ),
|
76 |
'aar_title' => __( 'Plugin Access Restricted', 'wp-simple-firewall' ),
|
77 |
-
'aar_what_should_you_enter' => __( 'This security plugin is restricted to administrators with the Security
|
78 |
-
'aar_must_supply_key_first' => __( 'Please provide the Security
|
79 |
-
'aar_to_manage_must_enter_key' => __( 'To manage this plugin you must enter the
|
80 |
-
'aar_enter_access_key' => __( '
|
81 |
-
'aar_submit_access_key' => __( 'Submit Security Admin
|
82 |
-
'aar_forget_key' => __( "Forgotten
|
83 |
'supply_password' => __( 'Supply Password', 'wp-simple-firewall' ),
|
84 |
'confirm_password' => __( 'Confirm Password', 'wp-simple-firewall' ),
|
85 |
'show_help_video_section' => __( 'Show help video for this section', 'wp-simple-firewall' ),
|
@@ -102,6 +102,10 @@ class Strings {
|
|
102 |
|
103 |
'wphashes_token' => 'WPHashes.com API Token',
|
104 |
'is_opt_importexport' => __( 'Is this option included with import/export?', 'wp-simple-firewall' ),
|
|
|
|
|
|
|
|
|
105 |
],
|
106 |
$this->getAdditionalDisplayStrings()
|
107 |
);
|
74 |
'description' => __( 'Description', 'wp-simple-firewall' ),
|
75 |
'loading' => __( 'Loading', 'wp-simple-firewall' ),
|
76 |
'aar_title' => __( 'Plugin Access Restricted', 'wp-simple-firewall' ),
|
77 |
+
'aar_what_should_you_enter' => __( 'This security plugin is restricted to administrators with the Security Admin PIN.', 'wp-simple-firewall' ),
|
78 |
+
'aar_must_supply_key_first' => __( 'Please provide the Security Admin PIN to manage this plugin.', 'wp-simple-firewall' ),
|
79 |
+
'aar_to_manage_must_enter_key' => __( 'To manage this plugin you must enter the Security Admin PIN.', 'wp-simple-firewall' ),
|
80 |
+
'aar_enter_access_key' => __( 'Security Admin PIN', 'wp-simple-firewall' ),
|
81 |
+
'aar_submit_access_key' => __( 'Submit Security Admin PIN', 'wp-simple-firewall' ),
|
82 |
+
'aar_forget_key' => __( "Forgotten PIN", 'wp-simple-firewall' ),
|
83 |
'supply_password' => __( 'Supply Password', 'wp-simple-firewall' ),
|
84 |
'confirm_password' => __( 'Confirm Password', 'wp-simple-firewall' ),
|
85 |
'show_help_video_section' => __( 'Show help video for this section', 'wp-simple-firewall' ),
|
102 |
|
103 |
'wphashes_token' => 'WPHashes.com API Token',
|
104 |
'is_opt_importexport' => __( 'Is this option included with import/export?', 'wp-simple-firewall' ),
|
105 |
+
|
106 |
+
'search_select' => [
|
107 |
+
'title' => ucwords( __( 'Search for a plugin option', 'wp-simple-firewall' ) ),
|
108 |
+
]
|
109 |
],
|
110 |
$this->getAdditionalDisplayStrings()
|
111 |
);
|
src/lib/src/Modules/Base/Upgrade.php
CHANGED
@@ -10,40 +10,28 @@ class Upgrade {
|
|
10 |
use \FernleafSystems\Utilities\Logic\OneTimeExecute;
|
11 |
|
12 |
protected function run() {
|
13 |
-
$
|
14 |
-
if ( empty( $version ) ) {
|
15 |
-
$version = '9.0.2'; // TODO: delete after next release is propagated
|
16 |
-
}
|
17 |
-
$this->upgradeModule( $version );
|
18 |
$this->runEveryUpgrade();
|
19 |
$this->upgradeCommon();
|
20 |
}
|
21 |
|
22 |
-
/**
|
23 |
-
* @return string[]
|
24 |
-
*/
|
25 |
-
protected function getUpgrades() {
|
26 |
-
return [
|
27 |
-
'9.0.0',
|
28 |
-
'9.0.3',
|
29 |
-
];
|
30 |
-
}
|
31 |
-
|
32 |
protected function runEveryUpgrade() {
|
33 |
}
|
34 |
|
35 |
protected function upgradeCommon() {
|
36 |
-
$this->getOptions()->setOpt( 'cfg_version', $this->getCon()->getVersion() );
|
37 |
$this->getMod()->saveModOptions( true );
|
38 |
}
|
39 |
|
40 |
/**
|
41 |
-
*
|
|
|
42 |
*/
|
43 |
-
protected function upgradeModule(
|
44 |
-
|
|
|
|
|
45 |
$sMethod = 'upgrade_'.str_replace( '.', '', $sVersion );
|
46 |
-
if ( version_compare( $
|
47 |
&& method_exists( $this, $sMethod ) ) {
|
48 |
$this->{$sMethod}();
|
49 |
}
|
10 |
use \FernleafSystems\Utilities\Logic\OneTimeExecute;
|
11 |
|
12 |
protected function run() {
|
13 |
+
$this->upgradeModule();
|
|
|
|
|
|
|
|
|
14 |
$this->runEveryUpgrade();
|
15 |
$this->upgradeCommon();
|
16 |
}
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
protected function runEveryUpgrade() {
|
19 |
}
|
20 |
|
21 |
protected function upgradeCommon() {
|
|
|
22 |
$this->getMod()->saveModOptions( true );
|
23 |
}
|
24 |
|
25 |
/**
|
26 |
+
* Runs through each version with upgrade code available and if the current config
|
27 |
+
* version is less than the upgrade version, run the upgrade code.
|
28 |
*/
|
29 |
+
protected function upgradeModule() {
|
30 |
+
$oCon = $this->getCon();
|
31 |
+
$sPreviousVersion = $oCon->getPreviousVersion();
|
32 |
+
foreach ( $oCon->getPluginSpec()[ 'version_upgrades' ] as $sVersion ) {
|
33 |
$sMethod = 'upgrade_'.str_replace( '.', '', $sVersion );
|
34 |
+
if ( version_compare( $sPreviousVersion, $sVersion, '<' )
|
35 |
&& method_exists( $this, $sMethod ) ) {
|
36 |
$this->{$sMethod}();
|
37 |
}
|
src/lib/src/Modules/Base/WpCli.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\ModuleStandard;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
7 |
+
|
8 |
+
class WpCli {
|
9 |
+
|
10 |
+
use ModConsumer;
|
11 |
+
use \FernleafSystems\Utilities\Logic\OneTimeExecute;
|
12 |
+
|
13 |
+
protected function run() {
|
14 |
+
try {
|
15 |
+
foreach ( $this->getAllCmdHandlers() as $oHandler ) {
|
16 |
+
$oHandler->setMod( $this->getMod() )->execute();
|
17 |
+
}
|
18 |
+
}
|
19 |
+
catch ( \Exception $oE ) {
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @return WpCli[]
|
25 |
+
*/
|
26 |
+
protected function getAllCmdHandlers() {
|
27 |
+
return array_merge(
|
28 |
+
[ new ModuleStandard() ],
|
29 |
+
$this->getCmdHandlers()
|
30 |
+
);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @return WpCli[]
|
35 |
+
*/
|
36 |
+
protected function getCmdHandlers() {
|
37 |
+
return [];
|
38 |
+
}
|
39 |
+
}
|
src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Options;
|
7 |
+
use FernleafSystems\Wordpress\Services\Services;
|
8 |
+
|
9 |
+
abstract class BaseWpCliCmd {
|
10 |
+
|
11 |
+
use ModConsumer;
|
12 |
+
use \FernleafSystems\Utilities\Logic\OneTimeExecute;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @throws \Exception
|
16 |
+
*/
|
17 |
+
protected function addCmds() {
|
18 |
+
}
|
19 |
+
|
20 |
+
protected function run() {
|
21 |
+
try {
|
22 |
+
$this->addCmds();
|
23 |
+
}
|
24 |
+
catch ( \Exception $oE ) {
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @param array $aParts
|
30 |
+
* @return string
|
31 |
+
*/
|
32 |
+
protected function buildCmd( array $aParts ) {
|
33 |
+
return implode( ' ',
|
34 |
+
array_filter( array_merge( $this->getBaseCmdParts(), $aParts ) )
|
35 |
+
);
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @return bool
|
40 |
+
*/
|
41 |
+
protected function canRun() {
|
42 |
+
/** @var Options $oOpts */
|
43 |
+
$oOpts = $this->getCon()
|
44 |
+
->getModule_Plugin()
|
45 |
+
->getOptions();
|
46 |
+
return $this->getOptions()->getWpCliCfg()[ 'enabled' ]
|
47 |
+
&& $oOpts->isEnabledWpcli();
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @return string[]
|
52 |
+
*/
|
53 |
+
protected function getBaseCmdParts() {
|
54 |
+
return [ 'shield', $this->getBaseCmdKey() ];
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @return string
|
59 |
+
*/
|
60 |
+
protected function getBaseCmdKey() {
|
61 |
+
$sRoot = $this->getOptions()->getWpCliCfg()[ 'root' ];
|
62 |
+
return empty( $sRoot ) ? $this->getMod()->getModSlug( false ) : $sRoot;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @param array $aArgs
|
67 |
+
* @return array
|
68 |
+
*/
|
69 |
+
protected function mergeCommonCmdArgs( array $aArgs ) {
|
70 |
+
return array_merge(
|
71 |
+
$this->getCommonCmdArgs(),
|
72 |
+
$aArgs
|
73 |
+
);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
protected function getCommonCmdArgs() {
|
80 |
+
return [
|
81 |
+
'before_invoke' => function () {
|
82 |
+
$this->beforeInvokeCmd();
|
83 |
+
},
|
84 |
+
'after_invoke' => function () {
|
85 |
+
$this->afterInvokeCmd();
|
86 |
+
},
|
87 |
+
'when' => 'before_wp_load',
|
88 |
+
];
|
89 |
+
}
|
90 |
+
|
91 |
+
protected function afterInvokeCmd() {
|
92 |
+
}
|
93 |
+
|
94 |
+
protected function beforeInvokeCmd() {
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* @param array $aA
|
99 |
+
* @return \WP_User
|
100 |
+
* @throws \WP_CLI\ExitException
|
101 |
+
*/
|
102 |
+
protected function loadUserFromArgs( array $aA ) {
|
103 |
+
$oWpUsers = Services::WpUsers();
|
104 |
+
|
105 |
+
$oU = null;
|
106 |
+
if ( isset( $aA[ 'uid' ] ) ) {
|
107 |
+
$oU = $oWpUsers->getUserById( $aA[ 'uid' ] );
|
108 |
+
}
|
109 |
+
elseif ( isset( $aA[ 'email' ] ) ) {
|
110 |
+
$oU = $oWpUsers->getUserByEmail( $aA[ 'email' ] );
|
111 |
+
}
|
112 |
+
elseif ( isset( $aA[ 'username' ] ) ) {
|
113 |
+
$oU = $oWpUsers->getUserByUsername( $aA[ 'username' ] );
|
114 |
+
}
|
115 |
+
|
116 |
+
if ( !$oU instanceof \WP_User || $oU->ID < 1 ) {
|
117 |
+
\WP_CLI::error( "Couldn't find that user." );
|
118 |
+
}
|
119 |
+
|
120 |
+
return $oU;
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* @param array $aA
|
125 |
+
* @return bool
|
126 |
+
*/
|
127 |
+
protected function isForceFlag( array $aA ) {
|
128 |
+
return (bool)\WP_CLI\Utils\get_flag_value( $aA, 'force', false );
|
129 |
+
}
|
130 |
+
}
|
src/lib/src/Modules/Base/WpCli/ModuleStandard.php
ADDED
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
|
4 |
+
|
5 |
+
class ModuleStandard extends BaseWpCliCmd {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* @throws \Exception
|
9 |
+
*/
|
10 |
+
protected function addCmds() {
|
11 |
+
\WP_CLI::add_command(
|
12 |
+
$this->buildCmd( [ 'opt-list' ] ),
|
13 |
+
[ $this, 'cmdOptList' ], $this->mergeCommonCmdArgs( [
|
14 |
+
'shortdesc' => 'List the option keys and their names.',
|
15 |
+
'synopsis' => [
|
16 |
+
[
|
17 |
+
'type' => 'assoc',
|
18 |
+
'name' => 'format',
|
19 |
+
'optional' => true,
|
20 |
+
'options' => [
|
21 |
+
'table',
|
22 |
+
'json',
|
23 |
+
'yaml',
|
24 |
+
'csv',
|
25 |
+
],
|
26 |
+
'default' => 'table',
|
27 |
+
'description' => 'Display all the option details.',
|
28 |
+
],
|
29 |
+
[
|
30 |
+
'type' => 'flag',
|
31 |
+
'name' => 'full',
|
32 |
+
'optional' => true,
|
33 |
+
'description' => 'Display all the option details.',
|
34 |
+
],
|
35 |
+
],
|
36 |
+
] ) );
|
37 |
+
|
38 |
+
\WP_CLI::add_command(
|
39 |
+
$this->buildCmd( [ 'opt-get' ] ),
|
40 |
+
[ $this, 'cmdOptGet' ], $this->mergeCommonCmdArgs( [
|
41 |
+
'shortdesc' => 'Enable, disable, or query the status of a module.',
|
42 |
+
'synopsis' => [
|
43 |
+
[
|
44 |
+
'type' => 'assoc',
|
45 |
+
'name' => 'key',
|
46 |
+
'optional' => false,
|
47 |
+
'options' => $this->getOptions()->getOptionsForWpCli(),
|
48 |
+
'description' => 'The option key to get.',
|
49 |
+
],
|
50 |
+
],
|
51 |
+
] ) );
|
52 |
+
|
53 |
+
\WP_CLI::add_command(
|
54 |
+
$this->buildCmd( [ 'opt-set' ] ),
|
55 |
+
[ $this, 'cmdOptSet' ], $this->mergeCommonCmdArgs( [
|
56 |
+
'shortdesc' => 'Enable, disable, or query the status of a module.',
|
57 |
+
'synopsis' => [
|
58 |
+
[
|
59 |
+
'type' => 'assoc',
|
60 |
+
'name' => 'key',
|
61 |
+
'optional' => false,
|
62 |
+
'options' => $this->getOptions()->getOptionsForWpCli(),
|
63 |
+
'description' => 'The option key to updateModuleStandard.php
|
64 |
+
.',
|
65 |
+
],
|
66 |
+
[
|
67 |
+
'type' => 'assoc',
|
68 |
+
'name' => 'value',
|
69 |
+
'optional' => false,
|
70 |
+
'description' => "The option's new value.",
|
71 |
+
],
|
72 |
+
],
|
73 |
+
] ) );
|
74 |
+
|
75 |
+
\WP_CLI::add_command(
|
76 |
+
$this->buildCmd( [ 'module' ] ),
|
77 |
+
[ $this, 'cmdModAction' ], $this->mergeCommonCmdArgs( [
|
78 |
+
'shortdesc' => 'Enable, disable, or query the status of a module.',
|
79 |
+
'synopsis' => [
|
80 |
+
[
|
81 |
+
'type' => 'assoc',
|
82 |
+
'name' => 'action',
|
83 |
+
'optional' => false,
|
84 |
+
'options' => [
|
85 |
+
'status',
|
86 |
+
'enable',
|
87 |
+
'disable',
|
88 |
+
],
|
89 |
+
'description' => 'The action to perform on the module.',
|
90 |
+
],
|
91 |
+
],
|
92 |
+
] ) );
|
93 |
+
}
|
94 |
+
|
95 |
+
public function cmdModAction( $null, $aA ) {
|
96 |
+
$oMod = $this->getMod();
|
97 |
+
|
98 |
+
switch ( $aA[ 'action' ] ) {
|
99 |
+
|
100 |
+
case 'status':
|
101 |
+
$oMod->isModOptEnabled() ?
|
102 |
+
\WP_CLI::log( 'Module is currently enabled.' )
|
103 |
+
: \WP_CLI::log( 'Module is currently disabled.' );
|
104 |
+
break;
|
105 |
+
|
106 |
+
case 'enable':
|
107 |
+
$this->getMod()
|
108 |
+
->setIsMainFeatureEnabled( true )
|
109 |
+
->saveModOptions();
|
110 |
+
\WP_CLI::success( 'Module enabled.' );
|
111 |
+
break;
|
112 |
+
|
113 |
+
case 'disable':
|
114 |
+
$this->getMod()
|
115 |
+
->setIsMainFeatureEnabled( false )
|
116 |
+
->saveModOptions();
|
117 |
+
\WP_CLI::success( 'Module disabled.' );
|
118 |
+
break;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* @param array $null
|
124 |
+
* @param array $aA
|
125 |
+
*/
|
126 |
+
public function cmdOptGet( array $null, array $aA ) {
|
127 |
+
$oOpts = $this->getOptions();
|
128 |
+
|
129 |
+
$mVal = $oOpts->getOpt( $aA[ 'key' ], $null );
|
130 |
+
$aOpt = $oOpts->getRawData_SingleOption( $aA[ 'key' ] );
|
131 |
+
if ( !is_numeric( $mVal ) && empty( $mVal ) ) {
|
132 |
+
\WP_CLI::log( __( 'No value set.', 'wp-simple-firewall' ) );
|
133 |
+
}
|
134 |
+
else {
|
135 |
+
$sExplain = '';
|
136 |
+
|
137 |
+
if ( is_array( $mVal ) ) {
|
138 |
+
$mVal = sprintf( '[ %s ]', implode( ', ', $mVal ) );
|
139 |
+
}
|
140 |
+
|
141 |
+
if ( $aOpt[ 'type' ] === 'checkbox' ) {
|
142 |
+
$sExplain = sprintf( 'Note: %s', __( '"Y" = Turned On; "N" = Turned Off' ) );
|
143 |
+
}
|
144 |
+
|
145 |
+
\WP_CLI::log( sprintf( __( 'Current value: %s', 'wp-simple-firewall' ), $mVal ) );
|
146 |
+
if ( !empty( $sExplain ) ) {
|
147 |
+
\WP_CLI::log( $sExplain );
|
148 |
+
}
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* @param array $null
|
154 |
+
* @param array $aA
|
155 |
+
*/
|
156 |
+
public function cmdOptSet( array $null, array $aA ) {
|
157 |
+
$this->getOptions()->setOpt( $aA[ 'key' ], $aA[ 'value' ] );
|
158 |
+
\WP_CLI::success( 'Option updated.' );
|
159 |
+
}
|
160 |
+
|
161 |
+
public function cmdOptList( array $null, array $aA ) {
|
162 |
+
$oOpts = $this->getOptions();
|
163 |
+
$oStrings = $this->getMod()->getStrings();
|
164 |
+
$aOpts = [];
|
165 |
+
foreach ( $oOpts->getOptionsForWpCli() as $sKey ) {
|
166 |
+
try {
|
167 |
+
$aOpts[] = [
|
168 |
+
'key' => $sKey,
|
169 |
+
'name' => $oStrings->getOptionStrings( $sKey )[ 'name' ],
|
170 |
+
'type' => $oOpts->getOptionType( $sKey ),
|
171 |
+
'current' => $oOpts->getOpt( $sKey ),
|
172 |
+
'default' => $oOpts->getOptDefault( $sKey ),
|
173 |
+
];
|
174 |
+
}
|
175 |
+
catch ( \Exception $e ) {
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
if ( empty( $aOpts ) ) {
|
180 |
+
\WP_CLI::log( "This module doesn't have any configurable options." );
|
181 |
+
}
|
182 |
+
else {
|
183 |
+
if ( !\WP_CLI\Utils\get_flag_value( $aA, 'full', false ) ) {
|
184 |
+
$aKeys = [
|
185 |
+
'key',
|
186 |
+
'name',
|
187 |
+
'current'
|
188 |
+
];
|
189 |
+
}
|
190 |
+
else {
|
191 |
+
$aKeys = array_keys( $aOpts[ 0 ] );
|
192 |
+
}
|
193 |
+
|
194 |
+
\WP_CLI\Utils\format_items(
|
195 |
+
$aA[ 'format' ],
|
196 |
+
$aOpts,
|
197 |
+
$aKeys
|
198 |
+
);
|
199 |
+
}
|
200 |
+
}
|
201 |
+
}
|
src/lib/src/Modules/BaseShield/ShieldProcessor.php
CHANGED
@@ -60,50 +60,4 @@ class ShieldProcessor extends Base\BaseProcessor {
|
|
60 |
}
|
61 |
return $aData;
|
62 |
}
|
63 |
-
|
64 |
-
/**
|
65 |
-
* @throws \Exception
|
66 |
-
* @deprecated 9.0
|
67 |
-
*/
|
68 |
-
public function maybeDequeueRecaptcha() {
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* @deprecated 9.0
|
73 |
-
*/
|
74 |
-
public function registerGoogleRecaptchaJs() {
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* @deprecated 9.0
|
79 |
-
*/
|
80 |
-
public function isRecaptchaEnqueue() {
|
81 |
-
return false;
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Note we don't provide a 'false' option here as if it's set to be needed somewhere,
|
86 |
-
* it shouldn't be unset anywhere else.
|
87 |
-
*
|
88 |
-
* @return $this
|
89 |
-
*/
|
90 |
-
public function setRecaptchaToEnqueue() {
|
91 |
-
return $this;
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* @return bool
|
96 |
-
* @deprecated 9.0
|
97 |
-
*/
|
98 |
-
protected function getRecaptchaTheme() {
|
99 |
-
return 'light';
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* @return bool
|
104 |
-
* @deprecated 9.0
|
105 |
-
*/
|
106 |
-
protected function isRecaptchaInvisible() {
|
107 |
-
return false;
|
108 |
-
}
|
109 |
}
|
60 |
}
|
61 |
return $aData;
|
62 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
}
|
src/lib/src/Modules/CommentsFilter/Scan/Human.php
CHANGED
@@ -80,8 +80,6 @@ class Human {
|
|
80 |
return $aList;
|
81 |
}
|
82 |
|
83 |
-
/**
|
84 |
-
*/
|
85 |
private function importBlacklist() {
|
86 |
/** @var \ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
|
87 |
$oMod = $this->getMod();
|
80 |
return $aList;
|
81 |
}
|
82 |
|
|
|
|
|
83 |
private function importBlacklist() {
|
84 |
/** @var \ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
|
85 |
$oMod = $this->getMod();
|
src/lib/src/Modules/CommentsFilter/Upgrade.php
CHANGED
@@ -6,6 +6,19 @@ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
|
6 |
|
7 |
class Upgrade extends Base\Upgrade {
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
protected function upgrade_900() {
|
10 |
$oOpts = $this->getOptions();
|
11 |
|
6 |
|
7 |
class Upgrade extends Base\Upgrade {
|
8 |
|
9 |
+
protected function upgrade_905() {
|
10 |
+
/** @var Options $oOpts */
|
11 |
+
$oOpts = $this->getOptions();
|
12 |
+
$oOpts->setOpt(
|
13 |
+
'comments_default_action_human_spam',
|
14 |
+
(string)$oOpts->getOpt( 'comments_default_action_human_spam' )
|
15 |
+
);
|
16 |
+
$oOpts->setOpt(
|
17 |
+
'comments_default_action_spam_bot',
|
18 |
+
(string)$oOpts->getOpt( 'comments_default_action_spam_bot' )
|
19 |
+
);
|
20 |
+
}
|
21 |
+
|
22 |
protected function upgrade_900() {
|
23 |
$oOpts = $this->getOptions();
|
24 |
|
src/lib/src/Modules/Events/Strings.php
CHANGED
@@ -31,8 +31,8 @@ class Strings extends Base\Strings {
|
|
31 |
'master_url_set' => __( 'Master Site URL Set', 'wp-simple-firewall' ),
|
32 |
'recaptcha_success' => __( 'CAPTCHA Test Success', 'wp-simple-firewall' ),
|
33 |
'recaptcha_fail' => __( 'CAPTCHA Test Fail', 'wp-simple-firewall' ),
|
34 |
-
'key_success' => __( 'Security
|
35 |
-
'key_fail' => __( 'Security
|
36 |
'custom_offense' => __( 'Custom Offense', 'wp-simple-firewall' ),
|
37 |
'conn_kill' => __( 'Connection Killed', 'wp-simple-firewall' ),
|
38 |
'ip_offense' => __( 'Offense Triggered', 'wp-simple-firewall' ),
|
31 |
'master_url_set' => __( 'Master Site URL Set', 'wp-simple-firewall' ),
|
32 |
'recaptcha_success' => __( 'CAPTCHA Test Success', 'wp-simple-firewall' ),
|
33 |
'recaptcha_fail' => __( 'CAPTCHA Test Fail', 'wp-simple-firewall' ),
|
34 |
+
'key_success' => __( 'Security PIN Authentication Success', 'wp-simple-firewall' ),
|
35 |
+
'key_fail' => __( 'Security PIN Authentication Failed', 'wp-simple-firewall' ),
|
36 |
'custom_offense' => __( 'Custom Offense', 'wp-simple-firewall' ),
|
37 |
'conn_kill' => __( 'Connection Killed', 'wp-simple-firewall' ),
|
38 |
'ip_offense' => __( 'Offense Triggered', 'wp-simple-firewall' ),
|
src/lib/src/Modules/HackGuard/AjaxHandler.php
CHANGED
@@ -115,7 +115,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
115 |
$sHtml = $oTableBuilder
|
116 |
->setMod( $oMod )
|
117 |
->setDbHandler( $oMod->getDbHandler_ScanResults() )
|
118 |
-
->
|
119 |
}
|
120 |
|
121 |
return [
|
@@ -156,9 +156,10 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
156 |
'locked_file' => __( 'Locked File' ),
|
157 |
'modified_file' => __( 'Modified File' ),
|
158 |
'locked' => __( 'Locked' ),
|
|
|
159 |
'modified' => __( 'Modified' ),
|
160 |
'download' => __( 'Download' ),
|
161 |
-
'
|
162 |
'file_content_original' => __( 'Original File Content' ),
|
163 |
'file_content_current' => __( 'Current File Content' ),
|
164 |
'download_original' => __( 'Download Original' ),
|
@@ -173,15 +174,21 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
173 |
]
|
174 |
];
|
175 |
try {
|
176 |
-
|
177 |
-
$aData[ 'html' ][ 'diff' ] = ( new FileLocker\Ops\PerformAction() )
|
178 |
-
->setMod( $this->getMod() )
|
179 |
-
->run( $nRID, 'diff' );
|
180 |
$oLock = $oFLCon->getFileLock( $nRID );
|
|
|
181 |
$aData[ 'ajax' ] = $oFLCon->createFileDownloadLinks( $oLock );
|
182 |
-
$aData[ 'flags' ][ 'has_diff' ] =
|
183 |
-
$aData[ '
|
184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
$aData[ 'vars' ][ 'file_size_locked' ] = $this->formatBytes( strlen(
|
186 |
( new FileLocker\Ops\ReadOriginalFileContent() )
|
187 |
->setMod( $oMod )
|
115 |
$sHtml = $oTableBuilder
|
116 |
->setMod( $oMod )
|
117 |
->setDbHandler( $oMod->getDbHandler_ScanResults() )
|
118 |
+
->render();
|
119 |
}
|
120 |
|
121 |
return [
|
156 |
'locked_file' => __( 'Locked File' ),
|
157 |
'modified_file' => __( 'Modified File' ),
|
158 |
'locked' => __( 'Locked' ),
|
159 |
+
'modified_timestamp' => __( 'File Modified Timestamp' ),
|
160 |
'modified' => __( 'Modified' ),
|
161 |
'download' => __( 'Download' ),
|
162 |
+
'change_detected_at' => __( 'Change Detected' ),
|
163 |
'file_content_original' => __( 'Original File Content' ),
|
164 |
'file_content_current' => __( 'Current File Content' ),
|
165 |
'download_original' => __( 'Download Original' ),
|
174 |
]
|
175 |
];
|
176 |
try {
|
177 |
+
|
|
|
|
|
|
|
178 |
$oLock = $oFLCon->getFileLock( $nRID );
|
179 |
+
$bDiff = $oLock->detected_at > 0;
|
180 |
$aData[ 'ajax' ] = $oFLCon->createFileDownloadLinks( $oLock );
|
181 |
+
$aData[ 'flags' ][ 'has_diff' ] = $bDiff;
|
182 |
+
$aData[ 'html' ][ 'diff' ] = $bDiff ?
|
183 |
+
( new FileLocker\Ops\PerformAction() )
|
184 |
+
->setMod( $this->getMod() )
|
185 |
+
->run( $nRID, 'diff' ) : '';
|
186 |
+
|
187 |
+
$oCarb = Services::Request()->carbon( true );
|
188 |
+
$aData[ 'vars' ][ 'locked_at' ] = $oCarb->setTimestamp( $oLock->created_at )->diffForHumans();
|
189 |
+
$aData[ 'vars' ][ 'file_modified_at' ] =
|
190 |
+
Services::WpGeneral()->getTimeStampForDisplay( $oFS->getModifiedTime( $oLock->file ) );
|
191 |
+
$aData[ 'vars' ][ 'change_detected_at' ] = $oCarb->setTimestamp( $oLock->detected_at )->diffForHumans();
|
192 |
$aData[ 'vars' ][ 'file_size_locked' ] = $this->formatBytes( strlen(
|
193 |
( new FileLocker\Ops\ReadOriginalFileContent() )
|
194 |
->setMod( $oMod )
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/File.php
CHANGED
@@ -51,7 +51,7 @@ class File {
|
|
51 |
break;
|
52 |
}
|
53 |
$aPossible[] = path_join( $sDir, $this->file );
|
54 |
-
$sDir =
|
55 |
$nLimiter++;
|
56 |
} while ( $nLimiter <= $this->getMaxDirLevels() );
|
57 |
|
51 |
break;
|
52 |
}
|
53 |
$aPossible[] = path_join( $sDir, $this->file );
|
54 |
+
$sDir = dirname( $sDir );
|
55 |
$nLimiter++;
|
56 |
} while ( $nLimiter <= $this->getMaxDirLevels() );
|
57 |
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php
CHANGED
@@ -16,16 +16,23 @@ class FileLockerController {
|
|
16 |
/**
|
17 |
* @return bool
|
18 |
*/
|
19 |
-
|
20 |
/** @var HackGuard\Options $oOpts */
|
21 |
$oOpts = $this->getOptions();
|
22 |
-
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
23 |
-
$oMod = $this->getMod();
|
24 |
return ( count( $oOpts->getFilesToLock() ) > 0 )
|
25 |
&& $this->getCon()
|
26 |
->getModule_Plugin()
|
27 |
->getShieldNetApiController()
|
28 |
-
->canHandshake()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
&& $oMod->getDbHandler_FileLocker()->isReady();
|
30 |
}
|
31 |
|
@@ -118,13 +125,13 @@ class FileLockerController {
|
|
118 |
public function deleteAllLocks() {
|
119 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
120 |
$oMod = $this->getMod();
|
121 |
-
$oMod->getDbHandler_FileLocker()->
|
122 |
}
|
123 |
|
124 |
public function purge() {
|
125 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
126 |
$oMod = $this->getMod();
|
127 |
-
$oMod->getDbHandler_FileLocker()->
|
128 |
}
|
129 |
|
130 |
/**
|
16 |
/**
|
17 |
* @return bool
|
18 |
*/
|
19 |
+
public function isEnabled() {
|
20 |
/** @var HackGuard\Options $oOpts */
|
21 |
$oOpts = $this->getOptions();
|
|
|
|
|
22 |
return ( count( $oOpts->getFilesToLock() ) > 0 )
|
23 |
&& $this->getCon()
|
24 |
->getModule_Plugin()
|
25 |
->getShieldNetApiController()
|
26 |
+
->canHandshake();
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @return bool
|
31 |
+
*/
|
32 |
+
protected function canRun() {
|
33 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
34 |
+
$oMod = $this->getMod();
|
35 |
+
return $this->isEnabled()
|
36 |
&& $oMod->getDbHandler_FileLocker()->isReady();
|
37 |
}
|
38 |
|
125 |
public function deleteAllLocks() {
|
126 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
127 |
$oMod = $this->getMod();
|
128 |
+
$oMod->getDbHandler_FileLocker()->tableDelete( true );
|
129 |
}
|
130 |
|
131 |
public function purge() {
|
132 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
133 |
$oMod = $this->getMod();
|
134 |
+
$oMod->getDbHandler_FileLocker()->tableDelete();
|
135 |
}
|
136 |
|
137 |
/**
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Accept.php
CHANGED
@@ -33,6 +33,7 @@ class Accept extends BaseOps {
|
|
33 |
'public_key_id' => key( $aPublicKey ),
|
34 |
'detected_at' => 0,
|
35 |
'updated_at' => Services::Request()->ts(),
|
|
|
36 |
] );
|
37 |
|
38 |
$this->clearFileLocksCache();
|
33 |
'public_key_id' => key( $aPublicKey ),
|
34 |
'detected_at' => 0,
|
35 |
'updated_at' => Services::Request()->ts(),
|
36 |
+
'created_at' => Services::Request()->ts(), // update "locked at"
|
37 |
] );
|
38 |
|
39 |
$this->clearFileLocksCache();
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/CreateFileLocks.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
|
6 |
-
use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\FileLocker\GetPublicKey;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
|
9 |
/**
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
|
|
|
6 |
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
/**
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class Diff
|
11 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops
|
12 |
+
*/
|
13 |
+
class Diff extends BaseOps {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @param FileLocker\EntryVO $oLock
|
17 |
+
* @return bool
|
18 |
+
* @throws \Exception
|
19 |
+
*/
|
20 |
+
public function run( $oLock ) {
|
21 |
+
|
22 |
+
$oFS = Services::WpFs();
|
23 |
+
|
24 |
+
if ( !$oFS->isFile( $oLock->file ) ) {
|
25 |
+
throw new \Exception( __( 'File is missing or could not be read.', 'wp-simple-firewall' ) );
|
26 |
+
}
|
27 |
+
|
28 |
+
$sContent = Services::WpFs()->getFileContent( $oLock->file );
|
29 |
+
if ( empty( $sContent ) ) {
|
30 |
+
throw new \Exception( __( 'File is empty or could not be read.', 'wp-simple-firewall' ) );
|
31 |
+
}
|
32 |
+
|
33 |
+
$sOriginal = ( new ReadOriginalFileContent() )
|
34 |
+
->setMod( $this->getMod() )
|
35 |
+
->run( $oLock );
|
36 |
+
|
37 |
+
$sDiff = $this->useWpDiff( $sOriginal, $sContent );
|
38 |
+
// The WP Diff is empty if the only difference is white space
|
39 |
+
if ( empty( $sDiff ) ) {
|
40 |
+
$sDiff = $this->useWpHashes( $sOriginal, $sContent );
|
41 |
+
}
|
42 |
+
|
43 |
+
return $sDiff;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @param string $sOriginal
|
48 |
+
* @param string $sCurrent
|
49 |
+
* @return string
|
50 |
+
* @throws \Exception
|
51 |
+
*/
|
52 |
+
private function useWpHashes( $sOriginal, $sCurrent ) {
|
53 |
+
$aRes = ( new WpHashes\Util\Diff() )->getDiff( $sOriginal, $sCurrent );
|
54 |
+
if ( !is_array( $aRes ) || empty( $aRes[ 'html' ] ) ) {
|
55 |
+
throw new \Exception( 'Could not get a valid diff for this file.' );
|
56 |
+
}
|
57 |
+
return sprintf( '<style>%s</style>%s',
|
58 |
+
'table.diff.diff-wrapper tbody tr td:nth-child(2){ width:auto;}'.
|
59 |
+
'table.diff.diff-wrapper { table-layout: auto;}'.
|
60 |
+
base64_decode( $aRes[ 'html' ][ 'css_default' ] ),
|
61 |
+
base64_decode( $aRes[ 'html' ][ 'content' ] )
|
62 |
+
);
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @param string $sOriginal
|
67 |
+
* @param string $sCurrent
|
68 |
+
* @return string
|
69 |
+
*/
|
70 |
+
private function useWpDiff( $sOriginal, $sCurrent ) {
|
71 |
+
return wp_text_diff(
|
72 |
+
$sOriginal,
|
73 |
+
$sCurrent
|
74 |
+
);
|
75 |
+
}
|
76 |
+
}
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/LoadFileLocks.php
CHANGED
@@ -25,12 +25,14 @@ class LoadFileLocks {
|
|
25 |
if ( is_null( self::$aFileLockRecords ) ) {
|
26 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
27 |
$oMod = $this->getMod();
|
28 |
-
$aAll = $oMod->getDbHandler_FileLocker()->getQuerySelector()->all();
|
29 |
|
30 |
self::$aFileLockRecords = [];
|
31 |
-
if (
|
32 |
-
|
33 |
-
|
|
|
|
|
|
|
34 |
}
|
35 |
}
|
36 |
}
|
@@ -69,7 +71,6 @@ class LoadFileLocks {
|
|
69 |
return array_filter(
|
70 |
$this->loadLocks(),
|
71 |
function ( $oLock ) {
|
72 |
-
/** @var FileLocker\EntryVO $oLock */
|
73 |
return $oLock->detected_at == 0;
|
74 |
}
|
75 |
);
|
25 |
if ( is_null( self::$aFileLockRecords ) ) {
|
26 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
27 |
$oMod = $this->getMod();
|
|
|
28 |
|
29 |
self::$aFileLockRecords = [];
|
30 |
+
if ( $oMod->getFileLocker()->isEnabled() ) {
|
31 |
+
$aAll = $oMod->getDbHandler_FileLocker()->getQuerySelector()->all();
|
32 |
+
if ( is_array( $aAll ) ) {
|
33 |
+
foreach ( $aAll as $oLock ) {
|
34 |
+
self::$aFileLockRecords[ $oLock->id ] = $oLock;
|
35 |
+
}
|
36 |
}
|
37 |
}
|
38 |
}
|
71 |
return array_filter(
|
72 |
$this->loadLocks(),
|
73 |
function ( $oLock ) {
|
|
|
74 |
return $oLock->detected_at == 0;
|
75 |
}
|
76 |
);
|
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/PerformAction.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases;
|
6 |
-
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
/**
|
9 |
* Class PerformAction
|
@@ -41,7 +40,9 @@ class PerformAction extends BaseOps {
|
|
41 |
->run( $oLock );
|
42 |
break;
|
43 |
case 'diff':
|
44 |
-
$mResult =
|
|
|
|
|
45 |
break;
|
46 |
case 'restore':
|
47 |
$mResult = ( new Restore() )
|
@@ -54,29 +55,4 @@ class PerformAction extends BaseOps {
|
|
54 |
}
|
55 |
return $mResult;
|
56 |
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* @param Databases\FileLocker\EntryVO $oLock
|
60 |
-
* @return string
|
61 |
-
* @throws \Exception
|
62 |
-
*/
|
63 |
-
protected function diff( Databases\FileLocker\EntryVO $oLock ) {
|
64 |
-
$oFS = Services::WpFs();
|
65 |
-
|
66 |
-
if ( !$oFS->isFile( $oLock->file ) ) {
|
67 |
-
throw new \Exception( __( 'File is missing or could not be read.', 'wp-simple-firewall' ) );
|
68 |
-
}
|
69 |
-
|
70 |
-
$sContent = Services::WpFs()->getFileContent( $oLock->file );
|
71 |
-
if ( empty( $sContent ) ) {
|
72 |
-
throw new \Exception( __( 'File is empty or could not be read.', 'wp-simple-firewall' ) );
|
73 |
-
}
|
74 |
-
|
75 |
-
return wp_text_diff(
|
76 |
-
( new ReadOriginalFileContent() )
|
77 |
-
->setMod( $this->getMod() )
|
78 |
-
->run( $oLock ),
|
79 |
-
$sContent
|
80 |
-
);
|
81 |
-
}
|
82 |
}
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases;
|
|
|
6 |
|
7 |
/**
|
8 |
* Class PerformAction
|
40 |
->run( $oLock );
|
41 |
break;
|
42 |
case 'diff':
|
43 |
+
$mResult = ( new Diff() )
|
44 |
+
->setMod( $this->getMod() )
|
45 |
+
->run( $oLock );
|
46 |
break;
|
47 |
case 'restore':
|
48 |
$mResult = ( new Restore() )
|
55 |
}
|
56 |
return $mResult;
|
57 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
}
|
src/lib/src/Modules/HackGuard/Options.php
CHANGED
@@ -379,88 +379,4 @@ class Options extends Base\ShieldOptions {
|
|
379 |
}
|
380 |
) );
|
381 |
}
|
382 |
-
|
383 |
-
/**
|
384 |
-
* @return bool
|
385 |
-
* @deprecated 9.0
|
386 |
-
*/
|
387 |
-
public function isMalAutoRepairCore() {
|
388 |
-
return $this->isRepairFileWP();
|
389 |
-
}
|
390 |
-
|
391 |
-
/**
|
392 |
-
* @return bool
|
393 |
-
* @deprecated 9.0
|
394 |
-
*/
|
395 |
-
public function isWcfScanAutoRepair() {
|
396 |
-
return $this->isRepairFileWP();
|
397 |
-
}
|
398 |
-
|
399 |
-
/**
|
400 |
-
* @return bool
|
401 |
-
* @deprecated 9.0
|
402 |
-
*/
|
403 |
-
public function isWpvulnEnabled() {
|
404 |
-
return $this->isPremium() && $this->isOpt( 'enable_wpvuln_scan', 'Y' );
|
405 |
-
}
|
406 |
-
|
407 |
-
/**
|
408 |
-
* @return bool
|
409 |
-
* @deprecated 9.0
|
410 |
-
*/
|
411 |
-
public function isPtgEnabled() {
|
412 |
-
return $this->isOpt( 'ptg_enable', 'enabled' ) && $this->isOptReqsMet( 'ptg_enable' );
|
413 |
-
}
|
414 |
-
|
415 |
-
/**
|
416 |
-
* @return bool
|
417 |
-
* @deprecated 9.0
|
418 |
-
*/
|
419 |
-
public function isUfcEnabled() {
|
420 |
-
return ( $this->getUnrecognisedFileScannerOption() != 'disabled' );
|
421 |
-
}
|
422 |
-
|
423 |
-
/**
|
424 |
-
* @return array
|
425 |
-
* @deprecated 9.0
|
426 |
-
*/
|
427 |
-
public function getUfcFileExclusions() {
|
428 |
-
$aExclusions = $this->getOpt( 'ufc_exclusions', [] );
|
429 |
-
if ( !is_array( $aExclusions ) ) {
|
430 |
-
$aExclusions = [];
|
431 |
-
}
|
432 |
-
return $aExclusions;
|
433 |
-
}
|
434 |
-
|
435 |
-
/**
|
436 |
-
* @return bool
|
437 |
-
* @deprecated 9.0
|
438 |
-
*/
|
439 |
-
public function isUfcScanUploads() {
|
440 |
-
return $this->isOpt( 'ufc_scan_uploads', 'Y' );
|
441 |
-
}
|
442 |
-
|
443 |
-
/**
|
444 |
-
* @return bool
|
445 |
-
* @deprecated 9.0
|
446 |
-
*/
|
447 |
-
public function isWcfScanEnabled() {
|
448 |
-
return $this->isOpt( 'enable_core_file_integrity_scan', 'Y' );
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* @return bool
|
453 |
-
* @deprecated 9.0
|
454 |
-
*/
|
455 |
-
public function isApcEnabled() {
|
456 |
-
return $this->isOpt( 'enabled_scan_apc', 'Y' );
|
457 |
-
}
|
458 |
-
|
459 |
-
/**
|
460 |
-
* @return bool
|
461 |
-
* @deprecated 9.0
|
462 |
-
*/
|
463 |
-
public function isMalScanEnabled() {
|
464 |
-
return $this->isOpt( 'mal_scan_enable', 'Y' );
|
465 |
-
}
|
466 |
}
|
379 |
}
|
380 |
) );
|
381 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
382 |
}
|
src/lib/src/Modules/HackGuard/Strings.php
CHANGED
@@ -247,7 +247,7 @@ class Strings extends Base\Strings {
|
|
247 |
sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Doesn't currently detect missing files.", 'wp-simple-firewall' ) ),
|
248 |
sprintf( '%s - %s', __( 'Recommendation', 'wp-simple-firewall' ), __( 'Keep this feature turned on, at all times.', 'wp-simple-firewall' ) )
|
249 |
];
|
250 |
-
if ( !$oMod->canCacheDirWrite()) {
|
251 |
$sDescription[] = sprintf( __( 'Sorry, this feature is not available because we cannot write to disk at this location: %s', 'wp-simple-firewall' ),
|
252 |
'<code>'.$oMod->getPtgSnapsBaseDir().'</code>' );
|
253 |
}
|
@@ -271,6 +271,7 @@ class Strings extends Base\Strings {
|
|
271 |
$sDescription = [
|
272 |
__( 'Detects changes to the files, then lets you examine contents and revert as required.', 'wp-simple-firewall' ),
|
273 |
];
|
|
|
274 |
$aLocks = ( new LoadFileLocks() )
|
275 |
->setMod( $this->getMod() )
|
276 |
->loadLocks();
|
247 |
sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Doesn't currently detect missing files.", 'wp-simple-firewall' ) ),
|
248 |
sprintf( '%s - %s', __( 'Recommendation', 'wp-simple-firewall' ), __( 'Keep this feature turned on, at all times.', 'wp-simple-firewall' ) )
|
249 |
];
|
250 |
+
if ( !$oMod->canCacheDirWrite() ) {
|
251 |
$sDescription[] = sprintf( __( 'Sorry, this feature is not available because we cannot write to disk at this location: %s', 'wp-simple-firewall' ),
|
252 |
'<code>'.$oMod->getPtgSnapsBaseDir().'</code>' );
|
253 |
}
|
271 |
$sDescription = [
|
272 |
__( 'Detects changes to the files, then lets you examine contents and revert as required.', 'wp-simple-firewall' ),
|
273 |
];
|
274 |
+
|
275 |
$aLocks = ( new LoadFileLocks() )
|
276 |
->setMod( $this->getMod() )
|
277 |
->loadLocks();
|
src/lib/src/Modules/IPs/AjaxHandler.php
CHANGED
@@ -158,7 +158,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
158 |
|
159 |
return [
|
160 |
'success' => true,
|
161 |
-
'html' => $oTableBuilder->
|
162 |
];
|
163 |
}
|
164 |
}
|
158 |
|
159 |
return [
|
160 |
'success' => true,
|
161 |
+
'html' => $oTableBuilder->render()
|
162 |
];
|
163 |
}
|
164 |
}
|
src/lib/src/Modules/IPs/Lib/Ops/AddIp.php
CHANGED
@@ -26,7 +26,7 @@ class AddIp {
|
|
26 |
|
27 |
$sIP = $this->getIP();
|
28 |
if ( !Services::IP()->isValidIp( $sIP ) ) {
|
29 |
-
throw new \Exception(
|
30 |
}
|
31 |
if ( in_array( $sIP, Services::IP()->getServerPublicIPs() ) ) {
|
32 |
throw new \Exception( 'Will not black mark our own server IP' );
|
@@ -70,7 +70,7 @@ class AddIp {
|
|
70 |
|
71 |
$sIP = $this->getIP();
|
72 |
if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
|
73 |
-
throw new \Exception(
|
74 |
}
|
75 |
|
76 |
$oIP = null;
|
@@ -127,7 +127,7 @@ class AddIp {
|
|
127 |
|
128 |
$sIP = $this->getIP();
|
129 |
if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
|
130 |
-
throw new \Exception(
|
131 |
}
|
132 |
|
133 |
if ( $oIpServ->isValidIpRange( $sIP ) ) {
|
@@ -173,6 +173,7 @@ class AddIp {
|
|
173 |
* @param string $sLabel
|
174 |
* @param int|null $nLastAccessAt
|
175 |
* @return Databases\IPs\EntryVO|null
|
|
|
176 |
*/
|
177 |
private function add( $sList, $sLabel = '', $nLastAccessAt = null ) {
|
178 |
$oIP = null;
|
@@ -199,6 +200,10 @@ class AddIp {
|
|
199 |
->first();
|
200 |
}
|
201 |
|
|
|
|
|
|
|
|
|
202 |
return $oIP;
|
203 |
}
|
204 |
}
|
26 |
|
27 |
$sIP = $this->getIP();
|
28 |
if ( !Services::IP()->isValidIp( $sIP ) ) {
|
29 |
+
throw new \Exception( "IP address isn't valid." );
|
30 |
}
|
31 |
if ( in_array( $sIP, Services::IP()->getServerPublicIPs() ) ) {
|
32 |
throw new \Exception( 'Will not black mark our own server IP' );
|
70 |
|
71 |
$sIP = $this->getIP();
|
72 |
if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
|
73 |
+
throw new \Exception( "IP address isn't valid." );
|
74 |
}
|
75 |
|
76 |
$oIP = null;
|
127 |
|
128 |
$sIP = $this->getIP();
|
129 |
if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
|
130 |
+
throw new \Exception( "IP address isn't valid." );
|
131 |
}
|
132 |
|
133 |
if ( $oIpServ->isValidIpRange( $sIP ) ) {
|
173 |
* @param string $sLabel
|
174 |
* @param int|null $nLastAccessAt
|
175 |
* @return Databases\IPs\EntryVO|null
|
176 |
+
* @throws \Exception
|
177 |
*/
|
178 |
private function add( $sList, $sLabel = '', $nLastAccessAt = null ) {
|
179 |
$oIP = null;
|
200 |
->first();
|
201 |
}
|
202 |
|
203 |
+
if ( !$oIP instanceof Databases\IPs\EntryVO ) {
|
204 |
+
throw new \Exception( "IP couldn't be added to the database." );
|
205 |
+
}
|
206 |
+
|
207 |
return $oIP;
|
208 |
}
|
209 |
}
|
src/lib/src/Modules/IPs/Upgrade.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
|
8 |
+
class Upgrade extends Base\Upgrade {
|
9 |
+
|
10 |
+
protected function upgrade_905() {
|
11 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
12 |
+
$oMod = $this->getMod();
|
13 |
+
$oDBH = $oMod->getDbHandler_IPs();
|
14 |
+
Services::WpDb()->doSql(
|
15 |
+
sprintf( "ALTER TABLE `%s` MODIFY `%s` %s;",
|
16 |
+
$oDBH->getTable(), 'ip', $oDBH->enumerateColumns()[ 'ip' ] )
|
17 |
+
);
|
18 |
+
}
|
19 |
+
}
|
src/lib/src/Modules/IPs/WpCli.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
|
7 |
+
|
8 |
+
class WpCli extends Base\WpCli {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @inheritDoc
|
12 |
+
*/
|
13 |
+
protected function getCmdHandlers() {
|
14 |
+
return [
|
15 |
+
new IPs\WpCli\Add(),
|
16 |
+
new IPs\WpCli\Remove(),
|
17 |
+
new IPs\WpCli\Enumerate(),
|
18 |
+
];
|
19 |
+
}
|
20 |
+
}
|
src/lib/src/Modules/IPs/WpCli/Add.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
|
6 |
+
use WP_CLI;
|
7 |
+
|
8 |
+
class Add extends BaseAddRemove {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @throws \Exception
|
12 |
+
*/
|
13 |
+
protected function addCmds() {
|
14 |
+
WP_CLI::add_command(
|
15 |
+
$this->buildCmd( [ 'ip-add' ] ),
|
16 |
+
[ $this, 'cmdIpAdd' ], $this->mergeCommonCmdArgs( [
|
17 |
+
'shortdesc' => 'Add an IP address to one of your lists, white or black.',
|
18 |
+
'synopsis' => array_merge(
|
19 |
+
$this->getCommonIpCmdArgs(),
|
20 |
+
[
|
21 |
+
'type' => 'assoc',
|
22 |
+
'name' => 'label',
|
23 |
+
'optional' => true,
|
24 |
+
'description' => 'The label to assign to this IP entry.',
|
25 |
+
]
|
26 |
+
),
|
27 |
+
] ) );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param array $null
|
32 |
+
* @param array $aA
|
33 |
+
* @throws WP_CLI\ExitException
|
34 |
+
*/
|
35 |
+
public function cmdIpAdd( array $null, array $aA ) {
|
36 |
+
|
37 |
+
$sLabel = isset( $aA[ 'label' ] ) ? $aA[ 'label' ] : 'none';
|
38 |
+
|
39 |
+
$oAdder = ( new Ops\AddIp() )
|
40 |
+
->setMod( $this->getMod() )
|
41 |
+
->setIP( $aA[ 'ip' ] );
|
42 |
+
try {
|
43 |
+
if ( $aA[ 'list' ] === 'white' ) {
|
44 |
+
$oAdder->toManualWhitelist( $sLabel );
|
45 |
+
}
|
46 |
+
else {
|
47 |
+
$oAdder->toManualBlacklist( $sLabel );
|
48 |
+
}
|
49 |
+
}
|
50 |
+
catch ( \Exception $oE ) {
|
51 |
+
WP_CLI::error( $oE->getMessage() );
|
52 |
+
}
|
53 |
+
WP_CLI::success( __( 'IP address added successfully.', 'wp-simple-firewall' ) );
|
54 |
+
}
|
55 |
+
}
|
src/lib/src/Modules/IPs/WpCli/BaseAddRemove.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\BaseWpCliCmd;
|
6 |
+
|
7 |
+
class BaseAddRemove extends BaseWpCliCmd {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @return array[]
|
11 |
+
*/
|
12 |
+
protected function getCommonIpCmdArgs() {
|
13 |
+
return [
|
14 |
+
[
|
15 |
+
'type' => 'assoc',
|
16 |
+
'name' => 'ip',
|
17 |
+
'optional' => false,
|
18 |
+
'description' => 'The IP address.',
|
19 |
+
],
|
20 |
+
[
|
21 |
+
'type' => 'assoc',
|
22 |
+
'name' => 'list',
|
23 |
+
'optional' => false,
|
24 |
+
'options' => [
|
25 |
+
'white',
|
26 |
+
'black',
|
27 |
+
],
|
28 |
+
'description' => 'The IP list to update.',
|
29 |
+
],
|
30 |
+
];
|
31 |
+
}
|
32 |
+
}
|
src/lib/src/Modules/IPs/WpCli/Enumerate.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\BaseWpCliCmd;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
|
7 |
+
use WP_CLI;
|
8 |
+
|
9 |
+
class Enumerate extends BaseWpCliCmd {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @throws \Exception
|
13 |
+
*/
|
14 |
+
protected function addCmds() {
|
15 |
+
WP_CLI::add_command(
|
16 |
+
$this->buildCmd( [ 'print' ] ),
|
17 |
+
[ $this, 'cmdPrint' ], $this->mergeCommonCmdArgs( [
|
18 |
+
'shortdesc' => 'Enumerate all IPs currently present on your lists.',
|
19 |
+
'synopsis' => [
|
20 |
+
[
|
21 |
+
'type' => 'assoc',
|
22 |
+
'name' => 'list',
|
23 |
+
'optional' => false,
|
24 |
+
'options' => [
|
25 |
+
'white',
|
26 |
+
'black',
|
27 |
+
],
|
28 |
+
'description' => 'The IP list to enumerate.',
|
29 |
+
],
|
30 |
+
],
|
31 |
+
] ) );
|
32 |
+
}
|
33 |
+
|
34 |
+
public function cmdPrint( $null, $aA ) {
|
35 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
36 |
+
$oMod = $this->getMod();
|
37 |
+
|
38 |
+
$oRtr = ( new Ops\RetrieveIpsForLists() )
|
39 |
+
->setDbHandler( $oMod->getDbHandler_IPs() );
|
40 |
+
$aIPs = $aA[ 'list' ] === 'white' ? $oRtr->white() : $oRtr->black();
|
41 |
+
$aIPs = array_map(
|
42 |
+
function ( $sIP ) {
|
43 |
+
return [ 'IP' => $sIP, ];
|
44 |
+
},
|
45 |
+
$aIPs
|
46 |
+
);
|
47 |
+
|
48 |
+
WP_CLI\Utils\format_items(
|
49 |
+
'table',
|
50 |
+
$aIPs,
|
51 |
+
[ 'IP' ]
|
52 |
+
);
|
53 |
+
}
|
54 |
+
}
|
src/lib/src/Modules/IPs/WpCli/Remove.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
|
6 |
+
use WP_CLI;
|
7 |
+
|
8 |
+
class Remove extends BaseAddRemove {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @throws \Exception
|
12 |
+
*/
|
13 |
+
protected function addCmds() {
|
14 |
+
WP_CLI::add_command(
|
15 |
+
$this->buildCmd( [ 'ip-remove' ] ),
|
16 |
+
[ $this, 'cmdIpRemove' ], $this->mergeCommonCmdArgs( [
|
17 |
+
'shortdesc' => 'Remove an IP address from one of your lists, white or black.',
|
18 |
+
'synopsis' => $this->getCommonIpCmdArgs(),
|
19 |
+
] ) );
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @param array $null
|
24 |
+
* @param array $aA
|
25 |
+
* @throws WP_CLI\ExitException
|
26 |
+
*/
|
27 |
+
public function cmdIpRemove( array $null, array $aA ) {
|
28 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
29 |
+
$oMod = $this->getMod();
|
30 |
+
|
31 |
+
$oDel = ( new Ops\DeleteIp() )
|
32 |
+
->setDbHandler( $oMod->getDbHandler_IPs() )
|
33 |
+
->setIP( $aA[ 'ip' ] );
|
34 |
+
if ( $aA[ 'list' ] === 'white' ) {
|
35 |
+
$bSuccess = $oDel->fromWhiteList();
|
36 |
+
}
|
37 |
+
else {
|
38 |
+
$bSuccess = $oDel->fromBlacklist();
|
39 |
+
}
|
40 |
+
|
41 |
+
$bSuccess ?
|
42 |
+
WP_CLI::success( __( 'IP address removed successfully.', 'wp-simple-firewall' ) )
|
43 |
+
: WP_CLI::error( __( "IP address couldn't be removed. (It may not be on this list)", 'wp-simple-firewall' ) );
|
44 |
+
}
|
45 |
+
}
|
src/lib/src/Modules/License/WpCli.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
|
7 |
+
|
8 |
+
class WpCli extends Base\WpCli {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @inheritDoc
|
12 |
+
*/
|
13 |
+
protected function getCmdHandlers() {
|
14 |
+
return [
|
15 |
+
new License\WpCli\License()
|
16 |
+
];
|
17 |
+
}
|
18 |
+
}
|
src/lib/src/Modules/License/WpCli/License.php
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use WP_CLI;
|
7 |
+
|
8 |
+
class License extends Base\WpCli\BaseWpCliCmd {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @throws \Exception
|
12 |
+
*/
|
13 |
+
protected function addCmds() {
|
14 |
+
WP_CLI::add_command(
|
15 |
+
$this->buildCmd( [ 'pro' ] ),
|
16 |
+
[ $this, 'cmdAction' ], $this->mergeCommonCmdArgs( [
|
17 |
+
'shortdesc' => 'Manage the ShieldPRO license.',
|
18 |
+
'synopsis' => [
|
19 |
+
[
|
20 |
+
'type' => 'assoc',
|
21 |
+
'name' => 'action',
|
22 |
+
'options' => [
|
23 |
+
'status',
|
24 |
+
'verify',
|
25 |
+
'remove',
|
26 |
+
],
|
27 |
+
'optional' => false,
|
28 |
+
'description' => 'Action to perform on the ShieldPRO license.',
|
29 |
+
],
|
30 |
+
[
|
31 |
+
'type' => 'flag',
|
32 |
+
'name' => 'force',
|
33 |
+
'optional' => true,
|
34 |
+
'description' => 'By-pass confirmation prompt.',
|
35 |
+
],
|
36 |
+
],
|
37 |
+
]
|
38 |
+
) );
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param array $null
|
43 |
+
* @param array $aA
|
44 |
+
* @throws WP_CLI\ExitException
|
45 |
+
*/
|
46 |
+
public function cmdAction( array $null, array $aA ) {
|
47 |
+
|
48 |
+
switch ( $aA[ 'action' ] ) {
|
49 |
+
case 'status':
|
50 |
+
$this->runStatus();
|
51 |
+
break;
|
52 |
+
|
53 |
+
case 'verify':
|
54 |
+
$this->runVerify();
|
55 |
+
break;
|
56 |
+
|
57 |
+
case 'remove':
|
58 |
+
$this->runRemove( $this->isForceFlag( $aA ) );
|
59 |
+
break;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
private function runRemove( $bConfirm ) {
|
64 |
+
if ( !$this->getCon()->isPremiumActive() ) {
|
65 |
+
WP_CLI::success( __( 'No license to remove.', 'wp-simple-firewall' ) );
|
66 |
+
}
|
67 |
+
else {
|
68 |
+
if ( !$bConfirm ) {
|
69 |
+
WP_CLI::confirm( __( 'Are you sure you want to remove the ShieldPRO license?', 'wp-simple-firewall' ) );
|
70 |
+
}
|
71 |
+
/** @var \ICWP_WPSF_FeatureHandler_License $oMod */
|
72 |
+
$oMod = $this->getMod();
|
73 |
+
$oMod->getLicenseHandler()->clearLicense();
|
74 |
+
WP_CLI::success( __( 'License removed successfully.', 'wp-simple-firewall' ) );
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @throws WP_CLI\ExitException
|
80 |
+
*/
|
81 |
+
private function runStatus() {
|
82 |
+
/** @var \ICWP_WPSF_FeatureHandler_License $oMod */
|
83 |
+
$oMod = $this->getMod();
|
84 |
+
$oMod->getLicenseHandler()->isActive() ?
|
85 |
+
WP_CLI::success( __( 'Active license found.', 'wp-simple-firewall' ) )
|
86 |
+
: WP_CLI::error( __( 'No active license present.', 'wp-simple-firewall' ) );
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @throws WP_CLI\ExitException
|
91 |
+
*/
|
92 |
+
private function runVerify() {
|
93 |
+
/** @var \ICWP_WPSF_FeatureHandler_License $oMod */
|
94 |
+
$oMod = $this->getMod();
|
95 |
+
|
96 |
+
try {
|
97 |
+
if ( $this->getCon()->isPremiumActive() ) {
|
98 |
+
WP_CLI::log( 'Premium license is already active. Re-checking...' );
|
99 |
+
}
|
100 |
+
$bSuccess = $oMod
|
101 |
+
->getLicenseHandler()
|
102 |
+
->verify()
|
103 |
+
->hasValidWorkingLicense();
|
104 |
+
$sMessage = $bSuccess ? __( 'Valid license found and installed.', 'wp-simple-firewall' ) : __( "Valid license couldn't be found.", 'wp-simple-firewall' );
|
105 |
+
}
|
106 |
+
catch ( \Exception $oE ) {
|
107 |
+
$bSuccess = false;
|
108 |
+
$sMessage = $oE->getMessage();
|
109 |
+
}
|
110 |
+
|
111 |
+
$bSuccess ? WP_CLI::success( $sMessage ) : WP_CLI::error( $sMessage );
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* License checking WP-CLI cmds may be run if you're not premium,
|
116 |
+
* or you're premium and you haven't switched it off (parent).
|
117 |
+
* @inheritDoc
|
118 |
+
*/
|
119 |
+
protected function canRun() {
|
120 |
+
return !$this->getCon()->isPremiumActive()
|
121 |
+
|| parent::canRun();
|
122 |
+
}
|
123 |
+
}
|
src/lib/src/Modules/LoginGuard/AjaxHandler.php
CHANGED
@@ -31,6 +31,14 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
31 |
$aResponse = $this->ajaxExec_ResendEmailVerification();
|
32 |
break;
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
default:
|
35 |
$aResponse = parent::processAjaxAction( $sAction );
|
36 |
}
|
@@ -89,6 +97,42 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
89 |
];
|
90 |
}
|
91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
/**
|
93 |
* @return array
|
94 |
*/
|
31 |
$aResponse = $this->ajaxExec_ResendEmailVerification();
|
32 |
break;
|
33 |
|
34 |
+
case 'u2f_remove':
|
35 |
+
$aResponse = $this->ajaxExec_ProfileU2fRemove();
|
36 |
+
break;
|
37 |
+
|
38 |
+
case 'yubikey_remove':
|
39 |
+
$aResponse = $this->ajaxExec_ProfileYubikeyRemove();
|
40 |
+
break;
|
41 |
+
|
42 |
default:
|
43 |
$aResponse = parent::processAjaxAction( $sAction );
|
44 |
}
|
97 |
];
|
98 |
}
|
99 |
|
100 |
+
/**
|
101 |
+
* @return array
|
102 |
+
*/
|
103 |
+
private function ajaxExec_ProfileU2fRemove() {
|
104 |
+
/** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
|
105 |
+
$oMod = $this->getMod();
|
106 |
+
|
107 |
+
$sKey = Services::Request()->post( 'u2fid' );
|
108 |
+
( new TwoFactor\Provider\U2F() )
|
109 |
+
->setMod( $oMod )
|
110 |
+
->removeRegisteredU2fId( Services::WpUsers()->getCurrentWpUser(), $sKey );
|
111 |
+
return [
|
112 |
+
'success' => true,
|
113 |
+
'message' => __( 'Registered U2F device removed from profile.', 'wp-simple-firewall' ),
|
114 |
+
'page_reload' => true
|
115 |
+
];
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* @return array
|
120 |
+
*/
|
121 |
+
private function ajaxExec_ProfileYubikeyRemove() {
|
122 |
+
/** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
|
123 |
+
$oMod = $this->getMod();
|
124 |
+
|
125 |
+
$sKey = Services::Request()->post( 'yubikeyid' );
|
126 |
+
( new TwoFactor\Provider\Yubikey() )
|
127 |
+
->setMod( $oMod )
|
128 |
+
->addRemoveRegisteredYubiId( Services::WpUsers()->getCurrentWpUser(), $sKey, false );
|
129 |
+
return [
|
130 |
+
'success' => true,
|
131 |
+
'message' => __( 'Yubikey removed from profile.', 'wp-simple-firewall' ),
|
132 |
+
'page_reload' => true
|
133 |
+
];
|
134 |
+
}
|
135 |
+
|
136 |
/**
|
137 |
* @return array
|
138 |
*/
|
src/lib/src/Modules/LoginGuard/Lib/AntiBot/IncludeJs.php
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\AntiBot;
|
4 |
-
|
5 |
-
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
6 |
-
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
7 |
-
use FernleafSystems\Wordpress\Services\Services;
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Class IncludeJs
|
11 |
-
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\AntiBot
|
12 |
-
* @deprecated 9.0
|
13 |
-
*/
|
14 |
-
class IncludeJs {
|
15 |
-
|
16 |
-
use ModConsumer;
|
17 |
-
|
18 |
-
private static $bAntiBotJsEnqueued = false;
|
19 |
-
|
20 |
-
public function run() {
|
21 |
-
}
|
22 |
-
|
23 |
-
public function onWpEnqueueJs() {
|
24 |
-
}
|
25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php
CHANGED
@@ -4,7 +4,6 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFact
|
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
7 |
-
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
|
8 |
use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
|
9 |
use FernleafSystems\Wordpress\Services\Services;
|
10 |
|
@@ -31,14 +30,6 @@ class LoginIntentPage {
|
|
31 |
$oReq = Services::Request();
|
32 |
$oWP = Services::WpGeneral();
|
33 |
|
34 |
-
$aLoginIntentFields = array_map(
|
35 |
-
function ( $oProvider ) {
|
36 |
-
/** @var TwoFactor\Provider\BaseProvider $oProvider */
|
37 |
-
return $oProvider->getFormField();
|
38 |
-
},
|
39 |
-
$oIC->getProvidersForUser( Services::WpUsers()->getCurrentWpUser(), true )
|
40 |
-
);
|
41 |
-
|
42 |
$oNotice = $oCon->getAdminNotices()->getFlashNotice();
|
43 |
if ( $oNotice instanceof NoticeVO ) {
|
44 |
$sMessage = $oNotice->render_data[ 'message' ];
|
@@ -90,7 +81,12 @@ class LoginIntentPage {
|
|
90 |
)
|
91 |
],
|
92 |
'data' => [
|
93 |
-
'login_fields' =>
|
|
|
|
|
|
|
|
|
|
|
94 |
'time_remaining' => $nTimeRemaining,
|
95 |
'message_type' => 'info',
|
96 |
'login_intent_flag' => $oMod->getLoginIntentRequestFlag(),
|
@@ -143,12 +139,28 @@ class LoginIntentPage {
|
|
143 |
],
|
144 |
'flags' => [
|
145 |
'show_branded_links' => !$oMod->isWlEnabled(), // white label mitigation
|
|
|
|
|
146 |
],
|
147 |
'content' => [
|
148 |
'form' => $this->renderForm(),
|
149 |
]
|
150 |
];
|
151 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
return $oMod->renderTemplate( '/pages/login_intent/index.twig',
|
153 |
Services::DataManipulation()->mergeArraysRecursive( $oMod->getBaseDisplayData(), $aDisplayData ), true );
|
154 |
}
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
|
|
7 |
use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
|
8 |
use FernleafSystems\Wordpress\Services\Services;
|
9 |
|
30 |
$oReq = Services::Request();
|
31 |
$oWP = Services::WpGeneral();
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
$oNotice = $oCon->getAdminNotices()->getFlashNotice();
|
34 |
if ( $oNotice instanceof NoticeVO ) {
|
35 |
$sMessage = $oNotice->render_data[ 'message' ];
|
81 |
)
|
82 |
],
|
83 |
'data' => [
|
84 |
+
'login_fields' => array_filter( array_map(
|
85 |
+
function ( $oProvider ) {
|
86 |
+
return $oProvider->getFormField();
|
87 |
+
},
|
88 |
+
$oIC->getProvidersForUser( Services::WpUsers()->getCurrentWpUser(), true )
|
89 |
+
) ),
|
90 |
'time_remaining' => $nTimeRemaining,
|
91 |
'message_type' => 'info',
|
92 |
'login_intent_flag' => $oMod->getLoginIntentRequestFlag(),
|
139 |
],
|
140 |
'flags' => [
|
141 |
'show_branded_links' => !$oMod->isWlEnabled(), // white label mitigation
|
142 |
+
'has_u2f' => isset( $oIC->getProvidersForUser(
|
143 |
+
Services::WpUsers()->getCurrentWpUser(), true )[ LoginGuard\Lib\TwoFactor\Provider\U2F::SLUG ] )
|
144 |
],
|
145 |
'content' => [
|
146 |
'form' => $this->renderForm(),
|
147 |
]
|
148 |
];
|
149 |
|
150 |
+
// Provide the U2F scripts if required.
|
151 |
+
if ( $aDisplayData[ 'flags' ][ 'has_u2f' ] ) {
|
152 |
+
$aDisplayData[ 'head' ] = [
|
153 |
+
'scripts' => [
|
154 |
+
[
|
155 |
+
'src' => $oCon->getPluginUrl_Js( 'u2f-bundle.js' ),
|
156 |
+
],
|
157 |
+
[
|
158 |
+
'src' => $oCon->getPluginUrl_Js( 'u2f-frontend.js' ),
|
159 |
+
]
|
160 |
+
]
|
161 |
+
];
|
162 |
+
}
|
163 |
+
|
164 |
return $oMod->renderTemplate( '/pages/login_intent/index.twig',
|
165 |
Services::DataManipulation()->mergeArraysRecursive( $oMod->getBaseDisplayData(), $aDisplayData ), true );
|
166 |
}
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php
CHANGED
@@ -142,6 +142,7 @@ class MfaController {
|
|
142 |
Provider\GoogleAuth::SLUG => ( new Provider\GoogleAuth() )->setMod( $this->getMod() ),
|
143 |
Provider\Yubikey::SLUG => ( new Provider\Yubikey() )->setMod( $this->getMod() ),
|
144 |
Provider\Backup::SLUG => ( new Provider\Backup() )->setMod( $this->getMod() ),
|
|
|
145 |
];
|
146 |
}
|
147 |
return $this->aProviders;
|
@@ -154,18 +155,23 @@ class MfaController {
|
|
154 |
* @return Provider\BaseProvider[]
|
155 |
*/
|
156 |
public function getProvidersForUser( $oUser, $bOnlyActiveProfiles = false ) {
|
157 |
-
$
|
158 |
function ( $oProvider ) use ( $oUser, $bOnlyActiveProfiles ) {
|
159 |
/** @var Provider\BaseProvider $oProvider */
|
160 |
return $oProvider->isProviderAvailableToUser( $oUser )
|
161 |
&& ( !$bOnlyActiveProfiles || $oProvider->isProfileActive( $oUser ) );
|
162 |
}
|
163 |
);
|
164 |
-
|
165 |
-
|
166 |
-
|
|
|
|
|
|
|
|
|
|
|
167 |
}
|
168 |
-
return $
|
169 |
}
|
170 |
|
171 |
/**
|
@@ -177,22 +183,24 @@ class MfaController {
|
|
177 |
$oCon = $this->getCon();
|
178 |
$oReq = Services::Request();
|
179 |
$oWpResp = Services::Response();
|
180 |
-
$
|
181 |
|
182 |
// Is 2FA/login-intent submit
|
183 |
if ( $oReq->request( $this->getLoginIntentRequestFlag() ) == 1 ) {
|
184 |
|
185 |
if ( $oReq->post( 'cancel' ) == 1 ) {
|
186 |
-
|
187 |
$sRedirectHref = $oReq->post( 'cancel_href' );
|
188 |
empty( $sRedirectHref ) ? $oWpResp->redirectToLogin() : $oWpResp->redirect( $sRedirectHref );
|
189 |
}
|
190 |
elseif ( $this->validateLoginIntentRequest() ) {
|
191 |
|
192 |
-
if ( $oReq->post( 'skip_mfa' ) === 'Y' ) {
|
193 |
-
|
194 |
-
|
|
|
195 |
}
|
|
|
196 |
$oCon->fireEvent( '2fa_success' );
|
197 |
|
198 |
$sFlash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
|
@@ -243,35 +251,17 @@ class MfaController {
|
|
243 |
* @return bool
|
244 |
*/
|
245 |
private function canUserMfaSkip( $oUser ) {
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
|
250 |
-
|
251 |
-
if ( $oOpts->isMfaSkip() ) {
|
252 |
-
$aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
|
253 |
-
$sAgentHash = md5( $oReq->getUserAgent() );
|
254 |
-
$bCanSkip = isset( $aHashes[ $sAgentHash ] )
|
255 |
-
&& ( (int)$aHashes[ $sAgentHash ] + $oOpts->getMfaSkip() ) > $oReq->ts();
|
256 |
-
}
|
257 |
-
elseif ( $this->getCon()->isPremiumActive() && @class_exists( 'WC_Social_Login' ) ) {
|
258 |
// custom support for WooCommerce Social login
|
259 |
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
260 |
$bCanSkip = isset( $oMeta->wc_social_login_valid ) ? $oMeta->wc_social_login_valid : false;
|
261 |
}
|
262 |
-
|
263 |
-
|
264 |
-
* TODO: remove the HTTP_REFERER bit once iCWP plugin is updated.
|
265 |
-
* We want logins from iCWP to skip 2FA. To achieve this, iCWP plugin needs
|
266 |
-
* to add a TRUE filter on 'odp-shield-2fa_skip' at the point of login.
|
267 |
-
* Until then, we'll use the HTTP referrer as an indicator
|
268 |
-
*/
|
269 |
-
$bCanSkip = apply_filters(
|
270 |
-
'odp-shield-2fa_skip',
|
271 |
-
strpos( $oReq->server( 'HTTP_REFERER' ), 'https://app.icontrolwp.com/' ) === 0
|
272 |
-
);
|
273 |
-
}
|
274 |
-
return $bCanSkip;
|
275 |
}
|
276 |
|
277 |
/**
|
142 |
Provider\GoogleAuth::SLUG => ( new Provider\GoogleAuth() )->setMod( $this->getMod() ),
|
143 |
Provider\Yubikey::SLUG => ( new Provider\Yubikey() )->setMod( $this->getMod() ),
|
144 |
Provider\Backup::SLUG => ( new Provider\Backup() )->setMod( $this->getMod() ),
|
145 |
+
Provider\U2F::SLUG => ( new Provider\U2F() )->setMod( $this->getMod() ),
|
146 |
];
|
147 |
}
|
148 |
return $this->aProviders;
|
155 |
* @return Provider\BaseProvider[]
|
156 |
*/
|
157 |
public function getProvidersForUser( $oUser, $bOnlyActiveProfiles = false ) {
|
158 |
+
$aPs = array_filter( $this->getProviders(),
|
159 |
function ( $oProvider ) use ( $oUser, $bOnlyActiveProfiles ) {
|
160 |
/** @var Provider\BaseProvider $oProvider */
|
161 |
return $oProvider->isProviderAvailableToUser( $oUser )
|
162 |
&& ( !$bOnlyActiveProfiles || $oProvider->isProfileActive( $oUser ) );
|
163 |
}
|
164 |
);
|
165 |
+
|
166 |
+
// Neither BackupCode NOR U2F should EVER be the only 1 provider available.
|
167 |
+
if ( count( $aPs ) === 1 ) {
|
168 |
+
/** @var Provider\BaseProvider $oFirst */
|
169 |
+
$oFirst = reset( $aPs );
|
170 |
+
if ( !$oFirst::STANDALONE ) {
|
171 |
+
$aPs = [];
|
172 |
+
}
|
173 |
}
|
174 |
+
return $aPs;
|
175 |
}
|
176 |
|
177 |
/**
|
183 |
$oCon = $this->getCon();
|
184 |
$oReq = Services::Request();
|
185 |
$oWpResp = Services::Response();
|
186 |
+
$oWpUsers = Services::WpUsers();
|
187 |
|
188 |
// Is 2FA/login-intent submit
|
189 |
if ( $oReq->request( $this->getLoginIntentRequestFlag() ) == 1 ) {
|
190 |
|
191 |
if ( $oReq->post( 'cancel' ) == 1 ) {
|
192 |
+
$oWpUsers->logoutUser(); // clears the login and login intent
|
193 |
$sRedirectHref = $oReq->post( 'cancel_href' );
|
194 |
empty( $sRedirectHref ) ? $oWpResp->redirectToLogin() : $oWpResp->redirect( $sRedirectHref );
|
195 |
}
|
196 |
elseif ( $this->validateLoginIntentRequest() ) {
|
197 |
|
198 |
+
if ( $oReq->post( 'skip_mfa' ) === 'Y' ) {
|
199 |
+
( new MfaSkip() )
|
200 |
+
->setMod( $this->getMod() )
|
201 |
+
->addMfaSkip( $oWpUsers->getCurrentWpUser() );
|
202 |
}
|
203 |
+
|
204 |
$oCon->fireEvent( '2fa_success' );
|
205 |
|
206 |
$sFlash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
|
251 |
* @return bool
|
252 |
*/
|
253 |
private function canUserMfaSkip( $oUser ) {
|
254 |
+
$bCanSkip = ( new MfaSkip() )
|
255 |
+
->setMod( $this->getMod() )
|
256 |
+
->canMfaSkip( $oUser );
|
257 |
|
258 |
+
if ( !$bCanSkip && $this->getCon()->isPremiumActive() && @class_exists( 'WC_Social_Login' ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
// custom support for WooCommerce Social login
|
260 |
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
261 |
$bCanSkip = isset( $oMeta->wc_social_login_valid ) ? $oMeta->wc_social_login_valid : false;
|
262 |
}
|
263 |
+
|
264 |
+
return apply_filters( 'odp-shield-2fa_skip', $bCanSkip );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
}
|
266 |
|
267 |
/**
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaSkip.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
7 |
+
use FernleafSystems\Wordpress\Services\Services;
|
8 |
+
|
9 |
+
class MfaSkip {
|
10 |
+
|
11 |
+
use Shield\Modules\ModConsumer;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @param \WP_User $oUser
|
15 |
+
*/
|
16 |
+
public function addMfaSkip( \WP_User $oUser ) {
|
17 |
+
/** @var LoginGuard\Options $oOpts */
|
18 |
+
$oOpts = $this->getOptions();
|
19 |
+
|
20 |
+
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
21 |
+
$aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
|
22 |
+
$aHashes[ $this->getAgentHash() ] = Services::Request()->ts();
|
23 |
+
|
24 |
+
$nMaxExpires = $oOpts->getMfaSkip();
|
25 |
+
if ( $nMaxExpires > 0 ) {
|
26 |
+
$aHashes = array_filter( $aHashes,
|
27 |
+
function ( $nTS ) use ( $nMaxExpires ) {
|
28 |
+
return Services::Request()->ts() - $nTS < $nMaxExpires;
|
29 |
+
}
|
30 |
+
);
|
31 |
+
}
|
32 |
+
|
33 |
+
$oMeta->hash_loginmfa = $aHashes;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @param \WP_User $oUser
|
38 |
+
* @return bool
|
39 |
+
*/
|
40 |
+
public function canMfaSkip( \WP_User $oUser ) {
|
41 |
+
/** @var LoginGuard\Options $oOpts */
|
42 |
+
$oOpts = $this->getOptions();
|
43 |
+
$oReq = Services::Request();
|
44 |
+
|
45 |
+
$bCanSkip = false;
|
46 |
+
|
47 |
+
if ( $oOpts->isMfaSkip() ) {
|
48 |
+
$sAgentHash = $this->getAgentHash();
|
49 |
+
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
50 |
+
$aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
|
51 |
+
$bCanSkip = isset( $aHashes[ $sAgentHash ] )
|
52 |
+
&& ( (int)$aHashes[ $sAgentHash ] + $oOpts->getMfaSkip() ) > $oReq->ts();
|
53 |
+
}
|
54 |
+
|
55 |
+
return $bCanSkip;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
private function getAgentHash() {
|
62 |
+
return md5( serialize( [
|
63 |
+
Services::IP()->getRequestIp(),
|
64 |
+
Services::Request()->getUserAgent()
|
65 |
+
] ) );
|
66 |
+
}
|
67 |
+
}
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Backup.php
CHANGED
@@ -8,6 +8,7 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
8 |
class Backup extends BaseProvider {
|
9 |
|
10 |
const SLUG = 'backupcode';
|
|
|
11 |
|
12 |
/**
|
13 |
* @inheritDoc
|
8 |
class Backup extends BaseProvider {
|
9 |
|
10 |
const SLUG = 'backupcode';
|
11 |
+
const STANDALONE = false;
|
12 |
|
13 |
/**
|
14 |
* @inheritDoc
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php
CHANGED
@@ -8,7 +8,23 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
8 |
abstract class BaseProvider {
|
9 |
|
10 |
use Modules\ModConsumer;
|
|
|
11 |
const SLUG = '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
/**
|
14 |
* Assumes this is only called on active profiles
|
@@ -31,7 +47,7 @@ abstract class BaseProvider {
|
|
31 |
*/
|
32 |
protected function getSecret( \WP_User $oUser ) {
|
33 |
$sSecret = $this->getCon()->getUserMeta( $oUser )->{static::SLUG.'_secret'};
|
34 |
-
return empty( $sSecret ) ?
|
35 |
}
|
36 |
|
37 |
/**
|
@@ -131,7 +147,7 @@ abstract class BaseProvider {
|
|
131 |
|
132 |
/**
|
133 |
* @param \WP_User $oUser
|
134 |
-
* @return string
|
135 |
*/
|
136 |
protected function genNewSecret( \WP_User $oUser ) {
|
137 |
return '';
|
@@ -201,7 +217,9 @@ abstract class BaseProvider {
|
|
201 |
/**
|
202 |
* @return array
|
203 |
*/
|
204 |
-
|
|
|
|
|
205 |
|
206 |
/**
|
207 |
* @param \WP_User $oUser
|
@@ -230,7 +248,7 @@ abstract class BaseProvider {
|
|
230 |
* @return string
|
231 |
*/
|
232 |
protected function fetchCodeFromRequest() {
|
233 |
-
return
|
234 |
}
|
235 |
|
236 |
/**
|
8 |
abstract class BaseProvider {
|
9 |
|
10 |
use Modules\ModConsumer;
|
11 |
+
|
12 |
const SLUG = '';
|
13 |
+
/**
|
14 |
+
* Set to true if this provider can be used in isolation. False if there
|
15 |
+
* must be at least 1 other 2FA provider active.
|
16 |
+
*/
|
17 |
+
const STANDALONE = true;
|
18 |
+
/**
|
19 |
+
* Always a screen, but maybe an json-encoded string, e.g. '[]', like U2F
|
20 |
+
*/
|
21 |
+
const DEFAULT_SECRET = '';
|
22 |
+
|
23 |
+
public function __construct() {
|
24 |
+
}
|
25 |
+
|
26 |
+
public function setupProfile() {
|
27 |
+
}
|
28 |
|
29 |
/**
|
30 |
* Assumes this is only called on active profiles
|
47 |
*/
|
48 |
protected function getSecret( \WP_User $oUser ) {
|
49 |
$sSecret = $this->getCon()->getUserMeta( $oUser )->{static::SLUG.'_secret'};
|
50 |
+
return empty( $sSecret ) ? static::DEFAULT_SECRET : $sSecret;
|
51 |
}
|
52 |
|
53 |
/**
|
147 |
|
148 |
/**
|
149 |
* @param \WP_User $oUser
|
150 |
+
* @return string|mixed
|
151 |
*/
|
152 |
protected function genNewSecret( \WP_User $oUser ) {
|
153 |
return '';
|
217 |
/**
|
218 |
* @return array
|
219 |
*/
|
220 |
+
public function getFormField() {
|
221 |
+
return [];
|
222 |
+
}
|
223 |
|
224 |
/**
|
225 |
* @param \WP_User $oUser
|
248 |
* @return string
|
249 |
*/
|
250 |
protected function fetchCodeFromRequest() {
|
251 |
+
return trim( Services::Request()->request( $this->getLoginFormParameter(), false, '' ) );
|
252 |
}
|
253 |
|
254 |
/**
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php
CHANGED
@@ -154,31 +154,44 @@ class Email extends BaseProvider {
|
|
154 |
* @return $this
|
155 |
*/
|
156 |
private function sendEmailTwoFactorVerify( \WP_User $oUser ) {
|
157 |
-
|
158 |
-
|
159 |
-
__( '
|
160 |
-
'',
|
161 |
-
|
162 |
-
'',
|
163 |
-
|
164 |
-
sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ), Services::WpGeneral()
|
165 |
-
|
166 |
-
sprintf( '%s: %s', __( '
|
167 |
-
'',
|
|
|
168 |
];
|
169 |
|
170 |
-
|
171 |
-
$
|
172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
}
|
174 |
-
|
175 |
-
$bResult = $this->getMod()
|
176 |
-
->getEmailProcessor()
|
177 |
-
->sendEmailWithWrap(
|
178 |
-
$oUser->user_email,
|
179 |
-
__( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
|
180 |
-
$aMessage
|
181 |
-
);
|
182 |
|
183 |
$this->getCon()->fireEvent(
|
184 |
$bResult ? '2fa_email_send_success' : '2fa_email_send_fail',
|
154 |
* @return $this
|
155 |
*/
|
156 |
private function sendEmailTwoFactorVerify( \WP_User $oUser ) {
|
157 |
+
|
158 |
+
$aLines = [
|
159 |
+
'someone' => __( 'Someone attempted to login into this WordPress site using your account.', 'wp-simple-firewall' ),
|
160 |
+
'requires' => __( 'Login requires verification with the following code.', 'wp-simple-firewall' ),
|
161 |
+
'verification' => __( 'Verification Code', 'wp-simple-firewall' ),
|
162 |
+
'login_link' => __( 'Why no login link?', 'wp-simple-firewall' ),
|
163 |
+
'details_heading' => __( 'Login Details', 'wp-simple-firewall' ),
|
164 |
+
'details_url' => sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ), Services::WpGeneral()
|
165 |
+
->getHomeUrl() ),
|
166 |
+
'details_username' => sprintf( '%s: %s', __( 'Username', 'wp-simple-firewall' ), $oUser->user_login ),
|
167 |
+
'details_ip' => sprintf( '%s: %s', __( 'IP Address', 'wp-simple-firewall' ), Services::IP()
|
168 |
+
->getRequestIp() ),
|
169 |
];
|
170 |
|
171 |
+
try {
|
172 |
+
$bResult = $this->getMod()
|
173 |
+
->getEmailProcessor()
|
174 |
+
->sendEmailWithTemplate(
|
175 |
+
'/email/lp_2fa_email_code',
|
176 |
+
$oUser->user_email,
|
177 |
+
__( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
|
178 |
+
[
|
179 |
+
'flags' => [
|
180 |
+
'show_login_link' => !$this->getCon()->isRelabelled()
|
181 |
+
],
|
182 |
+
'vars' => [
|
183 |
+
'code' => $this->getSecret( $oUser )
|
184 |
+
],
|
185 |
+
'hrefs' => [
|
186 |
+
'login_link' => 'https://shsec.io/96'
|
187 |
+
],
|
188 |
+
'strings' => $aLines
|
189 |
+
]
|
190 |
+
);
|
191 |
+
}
|
192 |
+
catch ( \Exception $e ) {
|
193 |
+
$bResult = false;
|
194 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
|
196 |
$this->getCon()->fireEvent(
|
197 |
$bResult ? '2fa_email_send_success' : '2fa_email_send_fail',
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php
CHANGED
@@ -20,7 +20,7 @@ class GoogleAuth extends BaseProvider {
|
|
20 |
* @return bool
|
21 |
*/
|
22 |
public function isProfileActive( \WP_User $oUser ) {
|
23 |
-
return
|
24 |
}
|
25 |
|
26 |
/**
|
@@ -219,7 +219,6 @@ class GoogleAuth extends BaseProvider {
|
|
219 |
/**
|
220 |
* @param \WP_User $oUser
|
221 |
* @return GoogleAuthenticator\Secret
|
222 |
-
* @throws \InvalidArgumentException
|
223 |
*/
|
224 |
private function getGaSecret( $oUser ) {
|
225 |
if ( !isset( $this->oWorkingSecret ) ) {
|
20 |
* @return bool
|
21 |
*/
|
22 |
public function isProfileActive( \WP_User $oUser ) {
|
23 |
+
return parent::isProfileActive( $oUser ) && $this->hasValidatedProfile( $oUser );
|
24 |
}
|
25 |
|
26 |
/**
|
219 |
/**
|
220 |
* @param \WP_User $oUser
|
221 |
* @return GoogleAuthenticator\Secret
|
|
|
222 |
*/
|
223 |
private function getGaSecret( $oUser ) {
|
224 |
if ( !isset( $this->oWorkingSecret ) ) {
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php
ADDED
@@ -0,0 +1,377 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
use u2flib_server\RegisterRequest;
|
8 |
+
use u2flib_server\SignRequest;
|
9 |
+
|
10 |
+
class U2F extends BaseProvider {
|
11 |
+
|
12 |
+
const SLUG = 'u2f';
|
13 |
+
const STANDALONE = false;
|
14 |
+
const DEFAULT_SECRET = '[]';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @param \WP_User $oUser
|
18 |
+
* @return bool
|
19 |
+
*/
|
20 |
+
public function isProfileActive( \WP_User $oUser ) {
|
21 |
+
return parent::isProfileActive( $oUser ) && $this->hasValidatedProfile( $oUser );
|
22 |
+
}
|
23 |
+
|
24 |
+
public function setupProfile() {
|
25 |
+
add_action( 'admin_enqueue_scripts', function ( $sHook ) {
|
26 |
+
if ( in_array( $sHook, [ 'profile.php', ] ) ) {
|
27 |
+
$this->enqueueAdminU2f();
|
28 |
+
}
|
29 |
+
} );
|
30 |
+
}
|
31 |
+
|
32 |
+
private function enqueueAdminU2f() {
|
33 |
+
$aDeps = [];
|
34 |
+
foreach ( [ 'u2f-bundle', 'shield-u2f-admin' ] as $sScript ) {
|
35 |
+
wp_enqueue_script(
|
36 |
+
$this->getCon()->prefix( $sScript ),
|
37 |
+
$this->getCon()->getPluginUrl_Js( $sScript ),
|
38 |
+
$aDeps
|
39 |
+
);
|
40 |
+
$aDeps[] = $this->getCon()->prefix( $sScript );
|
41 |
+
}
|
42 |
+
|
43 |
+
$oUser = Services::WpUsers()->getCurrentWpUser();
|
44 |
+
try {
|
45 |
+
list( $oReg, $aSigns ) = $this->createNewU2fRegistrationRequest( $oUser );
|
46 |
+
wp_localize_script(
|
47 |
+
$this->getCon()->prefix( 'shield-u2f-admin' ),
|
48 |
+
'icwp_wpsf_vars_u2f',
|
49 |
+
[
|
50 |
+
'reg_request' => $oReg,
|
51 |
+
'signs' => $aSigns,
|
52 |
+
'ajax' => [
|
53 |
+
'u2f_remove' => $this->getMod()->getAjaxActionData( 'u2f_remove' )
|
54 |
+
],
|
55 |
+
'flags' => [
|
56 |
+
'has_validated' => $this->hasValidatedProfile( $oUser )
|
57 |
+
],
|
58 |
+
'strings' => [
|
59 |
+
'not_supported' => __( 'U2F Security Key registration is not supported in this browser', 'wp-simple-firewall' ),
|
60 |
+
'failed' => __( 'Key registration failed.', 'wp-simple-firewall' )
|
61 |
+
.' '.__( "Perhaps the device isn't supported, or you've already registered it.", 'wp-simple-firewall' )
|
62 |
+
.' '.__( 'Please retry or refresh the page.', 'wp-simple-firewall' ),
|
63 |
+
'do_save' => __( 'Key registration was successful.', 'wp-simple-firewall' )
|
64 |
+
.' '.__( 'Please now save your profile settings.', 'wp-simple-firewall' ),
|
65 |
+
'prompt_dialog' => __( 'Please provide a label to identify the new U2F device.', 'wp-simple-firewall' ),
|
66 |
+
'err_no_label' => __( 'Device registration may not proceed without a unique label.', 'wp-simple-firewall' ),
|
67 |
+
'err_invalid_label' => __( 'Device label must contain letters, numbers, underscore, or hypen, and be no more than 16 characters.', 'wp-simple-firewall' ),
|
68 |
+
]
|
69 |
+
]
|
70 |
+
);
|
71 |
+
}
|
72 |
+
catch ( \Exception $oE ) {
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
public function getFormField() {
|
80 |
+
$oUser = Services::WpUsers()->getCurrentWpUser();
|
81 |
+
|
82 |
+
$aFieldData = [];
|
83 |
+
try {
|
84 |
+
/** @var SignRequest[] $aSignReqs */
|
85 |
+
$aSignReqs = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
|
86 |
+
->getAuthenticateData( $this->getRegistrations( $oUser ) );
|
87 |
+
|
88 |
+
if ( empty( $aSignReqs ) ) {
|
89 |
+
throw new \Exception( 'No signature requests could be created' );
|
90 |
+
}
|
91 |
+
|
92 |
+
$aFieldData = [
|
93 |
+
'name' => 'btn_u2f_start',
|
94 |
+
'type' => 'button',
|
95 |
+
'value' => 'Click To Begin U2F Authentication',
|
96 |
+
'placeholder' => '',
|
97 |
+
'text' => 'U2F Authentication',
|
98 |
+
'classes' => [ 'btn', 'btn-light' ],
|
99 |
+
'help_link' => '',
|
100 |
+
'datas' => [
|
101 |
+
'signs' => base64_encode( json_encode( $aSignReqs ) ),
|
102 |
+
'input_otp' => $this->getLoginFormParameter(),
|
103 |
+
]
|
104 |
+
];
|
105 |
+
}
|
106 |
+
catch ( \Exception $oE ) {
|
107 |
+
}
|
108 |
+
|
109 |
+
return $aFieldData;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* @param \WP_User $oUser
|
114 |
+
* @return object[]
|
115 |
+
* @throws \u2flib_server\Error
|
116 |
+
*/
|
117 |
+
private function createNewU2fRegistrationRequest( \WP_User $oUser ) {
|
118 |
+
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
119 |
+
list( $oRegRequest, $aSignRequests ) = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
|
120 |
+
->getRegisterData( $this->getRegistrations( $oUser ) );
|
121 |
+
$oMeta->u2f_regrequest = json_encode( $oRegRequest );
|
122 |
+
return [ $oRegRequest, $aSignRequests ];
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* @param \WP_User $oUser
|
127 |
+
* @return \stdClass[]
|
128 |
+
*/
|
129 |
+
private function getRegistrations( \WP_User $oUser ) {
|
130 |
+
$aRegs = json_decode( $this->getSecret( $oUser ), true );
|
131 |
+
return array_map(
|
132 |
+
function ( $aReg ) {
|
133 |
+
return (object)$aReg;
|
134 |
+
},
|
135 |
+
is_array( $aRegs ) ? $aRegs : []
|
136 |
+
);
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* TODO: Does this port stuff make a difference whatsoever?
|
141 |
+
* @return string
|
142 |
+
*/
|
143 |
+
private function getU2fAppID() {
|
144 |
+
$aPs = wp_parse_url( Services::WpGeneral()->getHomeUrl() );
|
145 |
+
$sPort = ( empty( $aPs[ 'port' ] ) || in_array( $aPs[ 'port' ], [ 80, 443 ] ) ) ? '' : $aPs[ 'port' ];
|
146 |
+
return sprintf( 'https://%s%s', $aPs[ 'host' ], $sPort );
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* @inheritDoc
|
151 |
+
*/
|
152 |
+
public function renderUserProfileOptions( \WP_User $oUser ) {
|
153 |
+
|
154 |
+
$bValidated = $this->hasValidatedProfile( $oUser );
|
155 |
+
|
156 |
+
$aData = [
|
157 |
+
'strings' => [
|
158 |
+
'title' => __( 'U2F', 'wp-simple-firewall' ),
|
159 |
+
'button_reg_key' => __( 'Register A New U2F Security Key', 'wp-simple-firewall' ),
|
160 |
+
'prompt' => __( 'Click To Register A U2F Device.', 'wp-simple-firewall' ),
|
161 |
+
],
|
162 |
+
'flags' => [
|
163 |
+
'is_validated' => $bValidated
|
164 |
+
],
|
165 |
+
'vars' => [
|
166 |
+
'registrations' => array_map(
|
167 |
+
function ( $oReg ) {
|
168 |
+
$oReg->used_at = sprintf( '(%s: %s)',
|
169 |
+
__( 'Used', 'wp-simple-firewall' ),
|
170 |
+
empty( $oReg->used_at ) ?
|
171 |
+
__( 'Never', 'wp-simple-firewall' )
|
172 |
+
: Services::Request()
|
173 |
+
->carbon()
|
174 |
+
->setTimestamp( $oReg->used_at )
|
175 |
+
->diffForHumans()
|
176 |
+
);
|
177 |
+
return $oReg;
|
178 |
+
},
|
179 |
+
$this->getRegistrations( $oUser )
|
180 |
+
)
|
181 |
+
],
|
182 |
+
];
|
183 |
+
|
184 |
+
return $this->getMod()
|
185 |
+
->renderTemplate(
|
186 |
+
'/snippets/user/profile/mfa/mfa_u2f.twig',
|
187 |
+
Services::DataManipulation()->mergeArraysRecursive( $this->getCommonData( $oUser ), $aData ),
|
188 |
+
true
|
189 |
+
);
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* @inheritDoc
|
194 |
+
*/
|
195 |
+
public function renderUserEditProfileOptions( \WP_User $oUser ) {
|
196 |
+
// Allow no actions to be taken on other user profiles
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* @inheritDoc
|
201 |
+
*/
|
202 |
+
public function handleUserProfileSubmit( \WP_User $oUser ) {
|
203 |
+
$bError = false;
|
204 |
+
$sMsg = null;
|
205 |
+
|
206 |
+
$sU2fResponse = Services::Request()->post( 'icwp_wpsf_new_u2f_response' );
|
207 |
+
if ( !empty( $sU2fResponse ) ) {
|
208 |
+
$oMeta = $this->getCon()->getUserMeta( $oUser );
|
209 |
+
|
210 |
+
try {
|
211 |
+
$oDecodedResponse = json_decode( $sU2fResponse );
|
212 |
+
$sLabel = preg_replace( '#[^a-z0-9_-]#i', '', $oDecodedResponse->label );
|
213 |
+
if ( strlen( $sLabel ) > 16 ) {
|
214 |
+
throw new \Exception( 'U2F Device label is larger than 16 characters.' );
|
215 |
+
}
|
216 |
+
if ( array_key_exists( $sLabel, $this->getRegistrations( $oUser ) ) ) {
|
217 |
+
throw new \Exception( 'U2F Device with this label already exists.' );
|
218 |
+
}
|
219 |
+
|
220 |
+
$oRegRequest = json_decode( $oMeta->u2f_regrequest );
|
221 |
+
$oRegistration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )->doRegister(
|
222 |
+
new RegisterRequest( $oRegRequest->challenge, $oRegRequest->appId ),
|
223 |
+
$oDecodedResponse
|
224 |
+
);
|
225 |
+
|
226 |
+
// attach the device label
|
227 |
+
$aConfirmedReg = get_object_vars( $oRegistration );
|
228 |
+
$aConfirmedReg[ 'label' ] = $sLabel;
|
229 |
+
$this->addRegistration( $oUser, $aConfirmedReg )
|
230 |
+
->setProfileValidated( $oUser );
|
231 |
+
|
232 |
+
$sMsg = __( 'U2F Device was successfully registered on your profile.', 'wp-simple-firewall' );
|
233 |
+
}
|
234 |
+
catch ( \Exception $oE ) {
|
235 |
+
$bError = true;
|
236 |
+
$sMsg = sprintf( __( 'U2F Device registration failed with the following error: %s', 'wp-simple-firewall' ),
|
237 |
+
$oE->getMessage() );
|
238 |
+
}
|
239 |
+
}
|
240 |
+
elseif ( Services::Request()->post( 'wpsf_u2f_key_delete' ) === 'Y' ) {
|
241 |
+
$this->processRemovalFromAccount( $oUser );
|
242 |
+
$sMsg = __( 'U2F Device was removed from your profile.', 'wp-simple-firewall' );
|
243 |
+
}
|
244 |
+
|
245 |
+
if ( !empty( $sMsg ) ) {
|
246 |
+
$this->getMod()->setFlashAdminNotice( $sMsg, $bError );
|
247 |
+
}
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* @param \WP_User $oUser
|
252 |
+
* @param string $sOtpCode
|
253 |
+
* @return bool
|
254 |
+
*/
|
255 |
+
protected function processOtp( $oUser, $sOtpCode ) {
|
256 |
+
return $this->validateU2F( $oUser, $sOtpCode );
|
257 |
+
}
|
258 |
+
|
259 |
+
/**
|
260 |
+
* @param \WP_User $oUser
|
261 |
+
* @return $this
|
262 |
+
*/
|
263 |
+
protected function processRemovalFromAccount( $oUser ) {
|
264 |
+
return $this->setProfileValidated( $oUser, false )
|
265 |
+
->deleteSecret( $oUser );
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* @param \WP_User $oUser
|
270 |
+
* @param array $aReg
|
271 |
+
* @return $this
|
272 |
+
*/
|
273 |
+
private function addRegistration( \WP_User $oUser, array $aReg ) {
|
274 |
+
$aRegs = $this->getRegistrations( $oUser );
|
275 |
+
|
276 |
+
// We've been passed a Registration without a label. (for example counter increment)
|
277 |
+
// So we try to locate the pre-existing registration and update it.
|
278 |
+
if ( empty( $aReg[ 'label' ] ) ) {
|
279 |
+
$aComparisonKeys = [ 'keyHandle', 'publicKey', 'certificate', ];
|
280 |
+
foreach ( $aRegs as $sLabel => $oMaybeReg ) {
|
281 |
+
$bIsReg = true;
|
282 |
+
foreach ( $aComparisonKeys as $sKeyCompare ) {
|
283 |
+
$bIsReg = $bIsReg && ( $oMaybeReg->{$sKeyCompare} === $aReg[ $sKeyCompare ] );
|
284 |
+
}
|
285 |
+
if ( $bIsReg ) {
|
286 |
+
$aReg = array_merge( get_object_vars( $oMaybeReg ), $aReg );
|
287 |
+
break;
|
288 |
+
}
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
// Only add if there's a label, and set defaults
|
293 |
+
if ( !empty( $aReg[ 'label' ] ) ) {
|
294 |
+
$aRegs[ $aReg[ 'label' ] ] = array_merge(
|
295 |
+
[
|
296 |
+
'used_at' => 0
|
297 |
+
],
|
298 |
+
$aReg
|
299 |
+
);
|
300 |
+
}
|
301 |
+
|
302 |
+
return $this->storeRegistrations( $oUser, $aRegs );
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* @param \WP_User $oUser
|
307 |
+
* @param array $aRegs
|
308 |
+
* @return $this
|
309 |
+
*/
|
310 |
+
private function storeRegistrations( \WP_User $oUser, array $aRegs ) {
|
311 |
+
return $this->setProfileValidated( $oUser, !empty( $aRegs ) )
|
312 |
+
->setSecret( $oUser, json_encode( $aRegs ) );
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* @param \WP_User $oUser
|
317 |
+
* @param string $sU2fID
|
318 |
+
* @return $this
|
319 |
+
*/
|
320 |
+
public function removeRegisteredU2fId( \WP_User $oUser, $sU2fID ) {
|
321 |
+
$aRegs = $this->getRegistrations( $oUser );
|
322 |
+
if ( isset( $aRegs[ $sU2fID ] ) ) {
|
323 |
+
unset( $aRegs[ $sU2fID ] );
|
324 |
+
$this->storeRegistrations( $oUser, $aRegs );
|
325 |
+
}
|
326 |
+
return $this;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* @param \WP_User $oUser
|
331 |
+
* @param string $sOtpCode
|
332 |
+
* @return bool
|
333 |
+
*/
|
334 |
+
private function validateU2F( $oUser, $sOtpCode ) {
|
335 |
+
try {
|
336 |
+
$oRegistration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
|
337 |
+
->doAuthenticate(
|
338 |
+
json_decode( base64_decode( Services::Request()->post( 'u2f_signs' ) ) ),
|
339 |
+
$this->getRegistrations( $oUser ),
|
340 |
+
json_decode( $sOtpCode )
|
341 |
+
);
|
342 |
+
$aReg = get_object_vars( $oRegistration );
|
343 |
+
$aReg[ 'used_at' ] = Services::Request()->ts();
|
344 |
+
$this->addRegistration( $oUser, $aReg );
|
345 |
+
}
|
346 |
+
catch ( \Exception $oE ) {
|
347 |
+
error_log( $oE->getMessage() );
|
348 |
+
}
|
349 |
+
|
350 |
+
return !empty( $oRegistration );
|
351 |
+
}
|
352 |
+
|
353 |
+
/**
|
354 |
+
* @param \WP_User $oUser
|
355 |
+
* @param bool $bIsSuccess
|
356 |
+
*/
|
357 |
+
protected function auditLogin( $oUser, $bIsSuccess ) {
|
358 |
+
$this->getCon()->fireEvent(
|
359 |
+
$bIsSuccess ? '2fa_u2f_verified' : '2fa_u2f_fail',
|
360 |
+
[
|
361 |
+
'audit' => [
|
362 |
+
'user_login' => $oUser->user_login,
|
363 |
+
'method' => 'U2F',
|
364 |
+
]
|
365 |
+
]
|
366 |
+
);
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* @return bool
|
371 |
+
*/
|
372 |
+
public function isProviderEnabled() {
|
373 |
+
/** @var LoginGuard\Options $oOpts */
|
374 |
+
$oOpts = $this->getOptions();
|
375 |
+
return $oOpts->isEnabledU2F();
|
376 |
+
}
|
377 |
+
}
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php
CHANGED
@@ -11,12 +11,30 @@ class Yubikey extends BaseProvider {
|
|
11 |
const OTP_LENGTH = 12;
|
12 |
const URL_YUBIKEY_VERIFY = 'https://api.yubico.com/wsapi/2.0/verify';
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
/**
|
15 |
-
*
|
16 |
-
* @return bool
|
17 |
*/
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
|
22 |
/**
|
@@ -30,7 +48,7 @@ class Yubikey extends BaseProvider {
|
|
30 |
'yubi_ids' => $this->getYubiIds( $oUser ),
|
31 |
],
|
32 |
'strings' => [
|
33 |
-
'
|
34 |
'no_active_yubi_ids' => __( 'There are no registered Yubikey devices on this profile.', 'wp-simple-firewall' ),
|
35 |
'enter_otp' => __( 'To register a new Yubikey device, enter a One Time Password from the Yubikey.', 'wp-simple-firewall' ),
|
36 |
'to_remove_device' => __( 'To remove a Yubikey device, enter the registered device ID and save.', 'wp-simple-firewall' ),
|
@@ -187,7 +205,7 @@ class Yubikey extends BaseProvider {
|
|
187 |
* @param bool $bAdd - true to add; false to remove
|
188 |
* @return $this
|
189 |
*/
|
190 |
-
|
191 |
$aIDs = $this->getYubiIds( $oUser );
|
192 |
if ( $bAdd ) {
|
193 |
$aIDs[] = $sKey;
|
11 |
const OTP_LENGTH = 12;
|
12 |
const URL_YUBIKEY_VERIFY = 'https://api.yubico.com/wsapi/2.0/verify';
|
13 |
|
14 |
+
public function setupProfile() {
|
15 |
+
add_action( 'admin_enqueue_scripts', function ( $sHook ) {
|
16 |
+
if ( in_array( $sHook, [ 'profile.php', ] ) ) {
|
17 |
+
$this->enqueueYubikeyJS();
|
18 |
+
}
|
19 |
+
} );
|
20 |
+
}
|
21 |
+
|
22 |
/**
|
23 |
+
* Enqueue the Javascript for removing Yubikey
|
|
|
24 |
*/
|
25 |
+
private function enqueueYubikeyJS() {
|
26 |
+
$oCon = $this->getCon();
|
27 |
+
$sScript = 'shield-userprofile';
|
28 |
+
wp_enqueue_script(
|
29 |
+
$oCon->prefix( $sScript ),
|
30 |
+
$oCon->getPluginUrl_Js( $sScript ),
|
31 |
+
[ 'jquery', $oCon->prefix( 'global-plugin' ) ]
|
32 |
+
);
|
33 |
+
wp_localize_script(
|
34 |
+
$oCon->prefix( $sScript ),
|
35 |
+
'icwp_wpsf_vars_profileyubikey',
|
36 |
+
[ 'yubikey_remove' => $this->getMod()->getAjaxActionData( 'yubikey_remove' ) ]
|
37 |
+
);
|
38 |
}
|
39 |
|
40 |
/**
|
48 |
'yubi_ids' => $this->getYubiIds( $oUser ),
|
49 |
],
|
50 |
'strings' => [
|
51 |
+
'registered_yubi_ids' => __( 'Registered Yubikey devices', 'wp-simple-firewall' ),
|
52 |
'no_active_yubi_ids' => __( 'There are no registered Yubikey devices on this profile.', 'wp-simple-firewall' ),
|
53 |
'enter_otp' => __( 'To register a new Yubikey device, enter a One Time Password from the Yubikey.', 'wp-simple-firewall' ),
|
54 |
'to_remove_device' => __( 'To remove a Yubikey device, enter the registered device ID and save.', 'wp-simple-firewall' ),
|
205 |
* @param bool $bAdd - true to add; false to remove
|
206 |
* @return $this
|
207 |
*/
|
208 |
+
public function addRemoveRegisteredYubiId( \WP_User $oUser, $sKey, $bAdd = true ) {
|
209 |
$aIDs = $this->getYubiIds( $oUser );
|
210 |
if ( $bAdd ) {
|
211 |
$aIDs[] = $sKey;
|
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php
CHANGED
@@ -17,6 +17,14 @@ class UserProfile {
|
|
17 |
add_action( 'edit_user_profile', [ $this, 'addOptionsToUserEditProfile' ] );
|
18 |
add_action( 'edit_user_profile_update', [ $this, 'handleEditOtherUserProfileSubmit' ] );
|
19 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
}
|
22 |
|
@@ -44,7 +52,7 @@ class UserProfile {
|
|
44 |
'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $oMC->getCon()
|
45 |
->getHumanName() )
|
46 |
],
|
47 |
-
'mfa_rows' => $aRows
|
48 |
];
|
49 |
|
50 |
echo $oMC->getMod()
|
17 |
add_action( 'edit_user_profile', [ $this, 'addOptionsToUserEditProfile' ] );
|
18 |
add_action( 'edit_user_profile_update', [ $this, 'handleEditOtherUserProfileSubmit' ] );
|
19 |
}
|
20 |
+
|
21 |
+
$oWpUsers = Services::WpUsers();
|
22 |
+
if ( $oWpUsers->isUserLoggedIn() ) {
|
23 |
+
$oMC = $this->getMfaCon();
|
24 |
+
foreach ( $oMC->getProvidersForUser( $oWpUsers->getCurrentWpUser(), false ) as $oP ) {
|
25 |
+
$oP->setupProfile();
|
26 |
+
}
|
27 |
+
}
|
28 |
}
|
29 |
}
|
30 |
|
52 |
'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $oMC->getCon()
|
53 |
->getHumanName() )
|
54 |
],
|
55 |
+
'mfa_rows' => $aRows,
|
56 |
];
|
57 |
|
58 |
echo $oMC->getMod()
|
src/lib/src/Modules/LoginGuard/Options.php
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
|
|
6 |
|
7 |
/**
|
8 |
* Class Options
|
@@ -127,6 +128,14 @@ class Options extends Base\ShieldOptions {
|
|
127 |
return $this->isOpt( 'enable_google_authenticator', 'Y' );
|
128 |
}
|
129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
/**
|
131 |
* @return bool
|
132 |
*/
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
/**
|
9 |
* Class Options
|
128 |
return $this->isOpt( 'enable_google_authenticator', 'Y' );
|
129 |
}
|
130 |
|
131 |
+
/**
|
132 |
+
* @return bool
|
133 |
+
*/
|
134 |
+
public function isEnabledU2F() {
|
135 |
+
return Services::Data()->getPhpVersionIsAtLeast( '7.0' )
|
136 |
+
&& $this->isPremium() && $this->isOpt( 'enable_u2f', 'Y' );
|
137 |
+
}
|
138 |
+
|
139 |
/**
|
140 |
* @return bool
|
141 |
*/
|
src/lib/src/Modules/LoginGuard/Strings.php
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
|
|
6 |
|
7 |
class Strings extends Base\Strings {
|
8 |
|
@@ -118,9 +119,9 @@ class Strings extends Base\Strings {
|
|
118 |
];
|
119 |
break;
|
120 |
|
121 |
-
case '
|
122 |
-
$sTitle = __( '
|
123 |
-
$sTitleShort = __( '
|
124 |
$aSummary = [
|
125 |
sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Yubikey one-time-passwords.', 'wp-simple-firewall' ) ),
|
126 |
sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
|
@@ -258,17 +259,32 @@ class Strings extends Base\Strings {
|
|
258 |
$sDescription = __( 'When enabled, settings in this section will also apply to new user registration and users trying to reset passwords.', 'wp-simple-firewall' );
|
259 |
break;
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
case 'enable_yubikey' :
|
262 |
-
$sName = __( '
|
263 |
-
$sSummary = __( '
|
264 |
$sDescription = __( 'Combined with your Yubikey API details this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' );
|
265 |
break;
|
266 |
|
267 |
case 'yubikey_app_id' :
|
268 |
$sName = __( 'Yubikey App ID', 'wp-simple-firewall' );
|
269 |
$sSummary = __( 'Your Unique Yubikey App ID', 'wp-simple-firewall' );
|
270 |
-
$sDescription =
|
271 |
-
|
|
|
|
|
272 |
break;
|
273 |
|
274 |
case 'yubikey_api_key' :
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
class Strings extends Base\Strings {
|
9 |
|
119 |
];
|
120 |
break;
|
121 |
|
122 |
+
case 'section_hardware_authentication' :
|
123 |
+
$sTitle = __( 'Hardware 2-Factor Authentication', 'wp-simple-firewall' );
|
124 |
+
$sTitleShort = __( 'Hardware 2FA', 'wp-simple-firewall' );
|
125 |
$aSummary = [
|
126 |
sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Yubikey one-time-passwords.', 'wp-simple-firewall' ) ),
|
127 |
sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
|
259 |
$sDescription = __( 'When enabled, settings in this section will also apply to new user registration and users trying to reset passwords.', 'wp-simple-firewall' );
|
260 |
break;
|
261 |
|
262 |
+
case 'enable_u2f' :
|
263 |
+
$sName = __( 'Allow U2F', 'wp-simple-firewall' );
|
264 |
+
$sSummary = __( 'Allow Registration Of U2F Devices', 'wp-simple-firewall' );
|
265 |
+
$sDescription = [
|
266 |
+
__( 'Allow users to register U2F devices to complete their login.', 'wp-simple-firewall' ),
|
267 |
+
__( "Currently only U2F keys are supported. Built-in fingerprint scanners aren't supported (yet).", 'wp-simple-firewall' ),
|
268 |
+
__( "Beta! This may only be used when at least 1 other 2FA option is enabled on a user account.", 'wp-simple-firewall' ),
|
269 |
+
];
|
270 |
+
if ( !Services::Data()->getPhpVersionIsAtLeast( '7.0' ) ) {
|
271 |
+
$sDescription[] = sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Requires PHP 7.0 or later.", 'wp-simple-firewall' ) );
|
272 |
+
}
|
273 |
+
break;
|
274 |
+
|
275 |
case 'enable_yubikey' :
|
276 |
+
$sName = __( 'Allow Yubikey OTP', 'wp-simple-firewall' );
|
277 |
+
$sSummary = __( 'Allow Yubikey Registration For One Time Passwords', 'wp-simple-firewall' );
|
278 |
$sDescription = __( 'Combined with your Yubikey API details this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' );
|
279 |
break;
|
280 |
|
281 |
case 'yubikey_app_id' :
|
282 |
$sName = __( 'Yubikey App ID', 'wp-simple-firewall' );
|
283 |
$sSummary = __( 'Your Unique Yubikey App ID', 'wp-simple-firewall' );
|
284 |
+
$sDescription = [
|
285 |
+
__( 'Combined with your Yubikey API Key this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' ),
|
286 |
+
__( 'Please review the info link on how to obtain your own Yubikey App ID and API Key.', 'wp-simple-firewall' )
|
287 |
+
];
|
288 |
break;
|
289 |
|
290 |
case 'yubikey_api_key' :
|
src/lib/src/Modules/Plugin/AjaxHandler.php
CHANGED
@@ -177,7 +177,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
177 |
'html' => ( new Shield\Tables\Build\AdminNotes() )
|
178 |
->setMod( $oMod )
|
179 |
->setDbHandler( $oMod->getDbHandler_Notes() )
|
180 |
-
->
|
181 |
];
|
182 |
}
|
183 |
|
@@ -240,12 +240,18 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
240 |
$bNetwork = $bEnabledNetwork ? true : ( $bDisableNetwork ? false : null );
|
241 |
|
242 |
/** @var Shield\Databases\AdminNotes\Insert $oInserter */
|
243 |
-
|
244 |
-
|
245 |
-
|
|
|
|
|
|
|
|
|
|
|
246 |
$bSuccess = $nCode == 0;
|
247 |
$sMessage = $bSuccess ? __( 'Options imported successfully', 'wp-simple-firewall' ) : __( 'Options failed to import', 'wp-simple-firewall' );
|
248 |
}
|
|
|
249 |
return [
|
250 |
'success' => $bSuccess,
|
251 |
'message' => $sMessage
|
177 |
'html' => ( new Shield\Tables\Build\AdminNotes() )
|
178 |
->setMod( $oMod )
|
179 |
->setDbHandler( $oMod->getDbHandler_Notes() )
|
180 |
+
->render()
|
181 |
];
|
182 |
}
|
183 |
|
240 |
$bNetwork = $bEnabledNetwork ? true : ( $bDisableNetwork ? false : null );
|
241 |
|
242 |
/** @var Shield\Databases\AdminNotes\Insert $oInserter */
|
243 |
+
try {
|
244 |
+
$nCode = ( new Plugin\Lib\ImportExport\Import() )
|
245 |
+
->setMod( $this->getMod() )
|
246 |
+
->fromSite( $sMasterSiteUrl, $sSecretKey, $bNetwork );
|
247 |
+
}
|
248 |
+
catch ( \Exception $oE ) {
|
249 |
+
$nCode = $oE->getCode();
|
250 |
+
}
|
251 |
$bSuccess = $nCode == 0;
|
252 |
$sMessage = $bSuccess ? __( 'Options imported successfully', 'wp-simple-firewall' ) : __( 'Options failed to import', 'wp-simple-firewall' );
|
253 |
}
|
254 |
+
|
255 |
return [
|
256 |
'success' => $bSuccess,
|
257 |
'message' => $sMessage
|
src/lib/src/Modules/Plugin/Components/PluginBadge.php
CHANGED
@@ -67,6 +67,15 @@ class PluginBadge {
|
|
67 |
public function render( $bFloating = false ) {
|
68 |
$oCon = $this->getCon();
|
69 |
$sName = $oCon->getHumanName();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
$aData = [
|
71 |
'ajax' => [
|
72 |
'plugin_badge_close' => $this->getMod()->getAjaxActionData( 'plugin_badge_close', true ),
|
@@ -76,7 +85,7 @@ class PluginBadge {
|
|
76 |
'is_floating' => $bFloating
|
77 |
],
|
78 |
'hrefs' => [
|
79 |
-
'badge' =>
|
80 |
'logo' => $oCon->getPluginUrl_Image( 'shield/shield-security-logo-colour-32px.png' ),
|
81 |
],
|
82 |
'strings' => [
|
@@ -103,11 +112,11 @@ class PluginBadge {
|
|
103 |
*/
|
104 |
public function setBadgeStateClosed() {
|
105 |
return Services::Response()
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
}
|
112 |
|
113 |
/**
|
67 |
public function render( $bFloating = false ) {
|
68 |
$oCon = $this->getCon();
|
69 |
$sName = $oCon->getHumanName();
|
70 |
+
|
71 |
+
$sBadgeUrl = 'https://shsec.io/wpsecurityfirewall';
|
72 |
+
$oLicense = $oCon->getModule_License()
|
73 |
+
->getLicenseHandler()
|
74 |
+
->getLicense();
|
75 |
+
if ( !empty( $oLicense->aff_ref ) ) {
|
76 |
+
$sBadgeUrl = add_query_arg( [ 'ref' => $oLicense->aff_ref ], $sBadgeUrl );
|
77 |
+
}
|
78 |
+
|
79 |
$aData = [
|
80 |
'ajax' => [
|
81 |
'plugin_badge_close' => $this->getMod()->getAjaxActionData( 'plugin_badge_close', true ),
|
85 |
'is_floating' => $bFloating
|
86 |
],
|
87 |
'hrefs' => [
|
88 |
+
'badge' => $sBadgeUrl,
|
89 |
'logo' => $oCon->getPluginUrl_Image( 'shield/shield-security-logo-colour-32px.png' ),
|
90 |
],
|
91 |
'strings' => [
|
112 |
*/
|
113 |
public function setBadgeStateClosed() {
|
114 |
return Services::Response()
|
115 |
+
->cookieSet(
|
116 |
+
$this->getCookieIdBadgeState(),
|
117 |
+
'closed',
|
118 |
+
DAY_IN_SECONDS
|
119 |
+
);
|
120 |
}
|
121 |
|
122 |
/**
|
src/lib/src/Modules/Plugin/Lib/ImportExport/Export.php
CHANGED
@@ -92,19 +92,26 @@ class Export {
|
|
92 |
die();
|
93 |
}
|
94 |
|
95 |
-
|
|
|
|
|
|
|
96 |
$sExport = json_encode( $this->getExportData() );
|
97 |
-
|
98 |
'# Site URL: '.Services::WpGeneral()->getHomeUrl(),
|
99 |
'# Export Date: '.Services::WpGeneral()->getTimeStringForDisplay(),
|
100 |
'# Hash: '.sha1( $sExport ),
|
101 |
$sExport
|
102 |
];
|
|
|
|
|
|
|
|
|
103 |
Services::Response()->downloadStringAsFile(
|
104 |
implode( "\n", $aData ),
|
105 |
sprintf( 'shieldexport-%s-%s.json',
|
106 |
Services::Data()->urlStripSchema( Services::WpGeneral()->getHomeUrl() ),
|
107 |
-
|
108 |
)
|
109 |
);
|
110 |
}
|
92 |
die();
|
93 |
}
|
94 |
|
95 |
+
/**
|
96 |
+
* @return string[]
|
97 |
+
*/
|
98 |
+
public function toStandardArray() {
|
99 |
$sExport = json_encode( $this->getExportData() );
|
100 |
+
return [
|
101 |
'# Site URL: '.Services::WpGeneral()->getHomeUrl(),
|
102 |
'# Export Date: '.Services::WpGeneral()->getTimeStringForDisplay(),
|
103 |
'# Hash: '.sha1( $sExport ),
|
104 |
$sExport
|
105 |
];
|
106 |
+
}
|
107 |
+
|
108 |
+
public function toFile() {
|
109 |
+
$aData = $this->toStandardArray();
|
110 |
Services::Response()->downloadStringAsFile(
|
111 |
implode( "\n", $aData ),
|
112 |
sprintf( 'shieldexport-%s-%s.json',
|
113 |
Services::Data()->urlStripSchema( Services::WpGeneral()->getHomeUrl() ),
|
114 |
+
date( 'Ymd_His' )
|
115 |
)
|
116 |
);
|
117 |
}
|
src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php
CHANGED
@@ -17,7 +17,7 @@ class Import {
|
|
17 |
try {
|
18 |
switch ( $sMethod ) {
|
19 |
case 'file':
|
20 |
-
$this->
|
21 |
break;
|
22 |
case 'site':
|
23 |
default:
|
@@ -31,31 +31,15 @@ class Import {
|
|
31 |
}
|
32 |
|
33 |
/**
|
|
|
34 |
* @throws \Exception
|
35 |
*/
|
36 |
-
public function fromFile() {
|
37 |
if ( !$this->getCon()->isPluginAdmin() ) {
|
38 |
throw new \Exception( __( 'Not currently logged-in as security admin', 'wp-simple-firewall' ) );
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
throw new \Exception( __( 'Please check the box to confirm your intent to overwrite settings', 'wp-simple-firewall' ) );
|
43 |
-
}
|
44 |
-
|
45 |
-
$oFs = Services::WpFs();
|
46 |
-
if ( empty( $_FILES ) || !isset( $_FILES[ 'import_file' ] )
|
47 |
-
|| empty( $_FILES[ 'import_file' ][ 'tmp_name' ] ) ) {
|
48 |
-
throw new \Exception( __( 'Please select a file to upload', 'wp-simple-firewall' ) );
|
49 |
-
}
|
50 |
-
if ( $_FILES[ 'import_file' ][ 'size' ] == 0
|
51 |
-
|| isset( $_FILES[ 'error' ] ) && $_FILES[ 'error' ] != UPLOAD_ERR_OK
|
52 |
-
|| !$oFs->isFile( $_FILES[ 'import_file' ][ 'tmp_name' ] )
|
53 |
-
|| filesize( $_FILES[ 'import_file' ][ 'tmp_name' ] ) === 0
|
54 |
-
) {
|
55 |
-
throw new \Exception( __( 'Uploading of file failed', 'wp-simple-firewall' ) );
|
56 |
-
}
|
57 |
-
|
58 |
-
$sContent = Services::WpFs()->getFileContent( $_FILES[ 'import_file' ][ 'tmp_name' ] );
|
59 |
if ( empty( $sContent ) ) {
|
60 |
throw new \Exception( __( 'Uploaded file was empty', 'wp-simple-firewall' ) );
|
61 |
}
|
@@ -74,11 +58,36 @@ class Import {
|
|
74 |
{//parse the options json
|
75 |
$aData = @json_decode( array_shift( $aParts ), true );
|
76 |
if ( empty( $aData ) || !is_array( $aData ) ) {
|
77 |
-
throw new \Exception( __(
|
78 |
}
|
79 |
}
|
80 |
|
81 |
$this->processDataImport( $aData, __( 'uploaded file', 'wp-simple-firewall' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
$oFs->deleteFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
|
83 |
}
|
84 |
|
@@ -86,10 +95,10 @@ class Import {
|
|
86 |
* @param string $sMasterSiteUrl
|
87 |
* @param string $sSecretKey
|
88 |
* @param bool|null $bEnableNetwork
|
89 |
-
* @param string $sSiteResponse
|
90 |
* @return int
|
|
|
91 |
*/
|
92 |
-
public function fromSite( $sMasterSiteUrl = '', $sSecretKey = '', $bEnableNetwork = null
|
93 |
/** @var Plugin\Options $oOpts */
|
94 |
$oOpts = $this->getOptions();
|
95 |
/** @var \ICWP_WPSF_FeatureHandler_Plugin $oMod */
|
@@ -100,98 +109,99 @@ class Import {
|
|
100 |
$sMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
|
101 |
}
|
102 |
|
103 |
-
$aParts = parse_url( $sMasterSiteUrl );
|
104 |
-
|
105 |
$sOriginalMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
|
106 |
$bHadMasterSiteUrl = $oOpts->hasImportExportMasterImportUrl();
|
107 |
$bCheckKeyFormat = !$bHadMasterSiteUrl;
|
108 |
$sSecretKey = sanitize_key( $sSecretKey );
|
109 |
|
110 |
-
if ( $bCheckKeyFormat
|
111 |
-
$
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
-
|
114 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
}
|
116 |
-
|
117 |
-
|
|
|
118 |
}
|
119 |
-
|
120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
}
|
122 |
-
|
123 |
-
|
124 |
-
$
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
127 |
}
|
|
|
128 |
|
129 |
-
|
130 |
|
131 |
-
if (
|
132 |
-
|
133 |
}
|
134 |
else {
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
$aData = [
|
139 |
-
'shield_action' => 'importexport_export',
|
140 |
-
'secret' => $sSecretKey,
|
141 |
-
'url' => Services::WpGeneral()->getHomeUrl()
|
142 |
-
];
|
143 |
-
// Don't send the network setup request if it's the cron.
|
144 |
-
if ( !is_null( $bEnableNetwork ) && !Services::WpGeneral()->isCron() ) {
|
145 |
-
$aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
|
146 |
-
}
|
147 |
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
}
|
160 |
-
else {
|
161 |
-
$nErrorCode = 7;
|
162 |
-
$sSiteResponse = $aParts[ 'message' ]; // This is crap because we can't use Response objects
|
163 |
-
}
|
164 |
-
}
|
165 |
-
elseif ( empty( $aParts[ 'data' ] ) || !is_array( $aParts[ 'data' ] ) ) {
|
166 |
-
$nErrorCode = 8;
|
167 |
-
}
|
168 |
-
else {
|
169 |
-
$this->processDataImport( $aParts[ 'data' ], $sMasterSiteUrl );
|
170 |
-
|
171 |
-
// Fix for the overwriting of the Master Site URL with an empty string.
|
172 |
-
// Only do so if we're not turning it off. i.e on or no-change
|
173 |
-
if ( is_null( $bEnableNetwork ) ) {
|
174 |
-
if ( $bHadMasterSiteUrl && !$oOpts->hasImportExportMasterImportUrl() ) {
|
175 |
-
$oMod->setImportExportMasterImportUrl( $sOriginalMasterSiteUrl );
|
176 |
-
}
|
177 |
-
}
|
178 |
-
elseif ( $bEnableNetwork === true ) {
|
179 |
-
$oMod->setImportExportMasterImportUrl( $sMasterSiteUrl );
|
180 |
-
$this->getCon()->fireEvent(
|
181 |
-
'master_url_set',
|
182 |
-
[ 'audit' => [ 'site' => $sMasterSiteUrl ] ]
|
183 |
-
);
|
184 |
-
}
|
185 |
-
elseif ( $bEnableNetwork === false ) {
|
186 |
-
$oMod->setImportExportMasterImportUrl( '' );
|
187 |
-
}
|
188 |
-
|
189 |
-
$nErrorCode = 0;
|
190 |
-
}
|
191 |
}
|
192 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
-
return
|
195 |
}
|
196 |
|
197 |
/**
|
17 |
try {
|
18 |
switch ( $sMethod ) {
|
19 |
case 'file':
|
20 |
+
$this->fromFileUpload();
|
21 |
break;
|
22 |
case 'site':
|
23 |
default:
|
31 |
}
|
32 |
|
33 |
/**
|
34 |
+
* @param string $sPath
|
35 |
* @throws \Exception
|
36 |
*/
|
37 |
+
public function fromFile( $sPath ) {
|
38 |
if ( !$this->getCon()->isPluginAdmin() ) {
|
39 |
throw new \Exception( __( 'Not currently logged-in as security admin', 'wp-simple-firewall' ) );
|
40 |
}
|
41 |
|
42 |
+
$sContent = Services::WpFs()->getFileContent( $sPath );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
if ( empty( $sContent ) ) {
|
44 |
throw new \Exception( __( 'Uploaded file was empty', 'wp-simple-firewall' ) );
|
45 |
}
|
58 |
{//parse the options json
|
59 |
$aData = @json_decode( array_shift( $aParts ), true );
|
60 |
if ( empty( $aData ) || !is_array( $aData ) ) {
|
61 |
+
throw new \Exception( __( "Options data in the file wasn't of the correct format.", 'wp-simple-firewall' ) );
|
62 |
}
|
63 |
}
|
64 |
|
65 |
$this->processDataImport( $aData, __( 'uploaded file', 'wp-simple-firewall' ) );
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @throws \Exception
|
70 |
+
*/
|
71 |
+
public function fromFileUpload() {
|
72 |
+
if ( Services::Request()->post( 'confirm' ) != 'Y' ) {
|
73 |
+
throw new \Exception( __( 'Please check the box to confirm your intent to overwrite settings', 'wp-simple-firewall' ) );
|
74 |
+
}
|
75 |
+
|
76 |
+
$oFs = Services::WpFs();
|
77 |
+
if ( empty( $_FILES ) || !isset( $_FILES[ 'import_file' ] )
|
78 |
+
|| empty( $_FILES[ 'import_file' ][ 'tmp_name' ] ) ) {
|
79 |
+
throw new \Exception( __( 'Please select a file to upload', 'wp-simple-firewall' ) );
|
80 |
+
}
|
81 |
+
if ( $_FILES[ 'import_file' ][ 'size' ] == 0
|
82 |
+
|| isset( $_FILES[ 'error' ] ) && $_FILES[ 'error' ] != UPLOAD_ERR_OK
|
83 |
+
|| !$oFs->isFile( $_FILES[ 'import_file' ][ 'tmp_name' ] )
|
84 |
+
|| filesize( $_FILES[ 'import_file' ][ 'tmp_name' ] ) === 0
|
85 |
+
) {
|
86 |
+
throw new \Exception( __( 'Uploading of file failed', 'wp-simple-firewall' ) );
|
87 |
+
}
|
88 |
+
|
89 |
+
$this->fromFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
|
90 |
+
|
91 |
$oFs->deleteFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
|
92 |
}
|
93 |
|
95 |
* @param string $sMasterSiteUrl
|
96 |
* @param string $sSecretKey
|
97 |
* @param bool|null $bEnableNetwork
|
|
|
98 |
* @return int
|
99 |
+
* @throws \Exception
|
100 |
*/
|
101 |
+
public function fromSite( $sMasterSiteUrl = '', $sSecretKey = '', $bEnableNetwork = null ) {
|
102 |
/** @var Plugin\Options $oOpts */
|
103 |
$oOpts = $this->getOptions();
|
104 |
/** @var \ICWP_WPSF_FeatureHandler_Plugin $oMod */
|
109 |
$sMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
|
110 |
}
|
111 |
|
|
|
|
|
112 |
$sOriginalMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
|
113 |
$bHadMasterSiteUrl = $oOpts->hasImportExportMasterImportUrl();
|
114 |
$bCheckKeyFormat = !$bHadMasterSiteUrl;
|
115 |
$sSecretKey = sanitize_key( $sSecretKey );
|
116 |
|
117 |
+
if ( $bCheckKeyFormat ) {
|
118 |
+
if ( empty( $sSecretKey ) ) {
|
119 |
+
throw new \Exception( 'Empty secret key', 1 );
|
120 |
+
}
|
121 |
+
if ( strlen( $sSecretKey ) != 40 ) {
|
122 |
+
throw new \Exception( "Secret key isn't of the correct format", 2 );
|
123 |
+
}
|
124 |
}
|
125 |
+
|
126 |
+
// Ensure we have entries for 'scheme' and 'host'
|
127 |
+
$aUrlParts = wp_parse_url( $sMasterSiteUrl );
|
128 |
+
$bHasParts = !empty( $aUrlParts )
|
129 |
+
&& count(
|
130 |
+
array_filter( array_intersect_key(
|
131 |
+
$aUrlParts,
|
132 |
+
array_flip( [ 'scheme', 'host' ] )
|
133 |
+
) )
|
134 |
+
) === 2;
|
135 |
+
if ( !$bHasParts ) {
|
136 |
+
throw new \Exception( "Couldn't parse the URL into its parts", 4 );
|
137 |
}
|
138 |
+
$sMasterSiteUrl = $oDP->validateSimpleHttpUrl( $sMasterSiteUrl ); // final clean
|
139 |
+
if ( empty( $sMasterSiteUrl ) ) {
|
140 |
+
throw new \Exception( "Couldn't validate the URL.", 4 );
|
141 |
}
|
142 |
+
|
143 |
+
// Begin the handshake process.
|
144 |
+
$oOpts->setOpt(
|
145 |
+
'importexport_handshake_expires_at',
|
146 |
+
Services::Request()->ts() + 30
|
147 |
+
);
|
148 |
+
$this->getMod()->saveModOptions();
|
149 |
+
|
150 |
+
$aData = [
|
151 |
+
'shield_action' => 'importexport_export',
|
152 |
+
'secret' => $sSecretKey,
|
153 |
+
'url' => Services::WpGeneral()->getHomeUrl()
|
154 |
+
];
|
155 |
+
// Don't send the network setup request if it's the cron.
|
156 |
+
if ( !is_null( $bEnableNetwork ) && !Services::WpGeneral()->isCron() ) {
|
157 |
+
$aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
|
158 |
}
|
159 |
+
|
160 |
+
{ // Make the request
|
161 |
+
$sFinalUrl = add_query_arg( $aData, $sMasterSiteUrl );
|
162 |
+
$sResponse = Services::HttpRequest()->getContent( $sFinalUrl );
|
163 |
+
$aResponse = @json_decode( $sResponse, true );
|
164 |
+
|
165 |
+
if ( empty( $aResponse ) ) {
|
166 |
+
throw new \Exception( "Request failed as we couldn't parse the response.", 5 );
|
167 |
}
|
168 |
+
}
|
169 |
|
170 |
+
if ( empty( $aResponse[ 'success' ] ) ) {
|
171 |
|
172 |
+
if ( empty ( $aResponse[ 'message' ] ) ) {
|
173 |
+
throw new \Exception( "Request failed with no error message from the source site.", 6 );
|
174 |
}
|
175 |
else {
|
176 |
+
throw new \Exception( "Request failed with error message from the source site: ".$aResponse[ 'message' ], 7 );
|
177 |
+
}
|
178 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
|
180 |
+
if ( empty( $aResponse[ 'data' ] ) || !is_array( $aResponse[ 'data' ] ) ) {
|
181 |
+
throw new \Exception( "Response data was empty", 8 );
|
182 |
+
}
|
183 |
|
184 |
+
$this->processDataImport( $aResponse[ 'data' ], $sMasterSiteUrl );
|
185 |
+
|
186 |
+
// Fix for the overwriting of the Master Site URL with an empty string.
|
187 |
+
// Only do so if we're not turning it off. i.e on or no-change
|
188 |
+
if ( is_null( $bEnableNetwork ) ) {
|
189 |
+
if ( $bHadMasterSiteUrl && !$oOpts->hasImportExportMasterImportUrl() ) {
|
190 |
+
$oMod->setImportExportMasterImportUrl( $sOriginalMasterSiteUrl );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
}
|
192 |
}
|
193 |
+
elseif ( $bEnableNetwork === true ) {
|
194 |
+
$oMod->setImportExportMasterImportUrl( $sMasterSiteUrl );
|
195 |
+
$this->getCon()->fireEvent(
|
196 |
+
'master_url_set',
|
197 |
+
[ 'audit' => [ 'site' => $sMasterSiteUrl ] ]
|
198 |
+
);
|
199 |
+
}
|
200 |
+
elseif ( $bEnableNetwork === false ) {
|
201 |
+
$oMod->setImportExportMasterImportUrl( '' );
|
202 |
+
}
|
203 |
|
204 |
+
return 0;
|
205 |
}
|
206 |
|
207 |
/**
|
src/lib/src/Modules/Plugin/Lib/Ops/ResetPlugin.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib\Ops;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class ResetPlugin
|
9 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib\Ops
|
10 |
+
*/
|
11 |
+
class ResetPlugin {
|
12 |
+
|
13 |
+
use PluginControllerConsumer;
|
14 |
+
|
15 |
+
public function run() {
|
16 |
+
foreach ( $this->getCon()->modules as $oMod ) {
|
17 |
+
$oMod->getOptions()
|
18 |
+
->setOptionsValues( [] )
|
19 |
+
->deleteStorage();
|
20 |
+
$oMod->saveModOptions();
|
21 |
+
}
|
22 |
+
}
|
23 |
+
}
|
src/lib/src/Modules/Plugin/Options.php
CHANGED
@@ -66,7 +66,7 @@ class Options extends Base\ShieldOptions {
|
|
66 |
*/
|
67 |
public function getShieldNetApiData() {
|
68 |
$aD = $this->getOpt( 'snapi_data', [] );
|
69 |
-
return is_array( $aD ) ? $aD:[];
|
70 |
}
|
71 |
|
72 |
/**
|
@@ -105,6 +105,13 @@ class Options extends Base\ShieldOptions {
|
|
105 |
return $this->isOpt( 'enable_tracking', 'Y' );
|
106 |
}
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
/**
|
109 |
* @return bool
|
110 |
*/
|
66 |
*/
|
67 |
public function getShieldNetApiData() {
|
68 |
$aD = $this->getOpt( 'snapi_data', [] );
|
69 |
+
return is_array( $aD ) ? $aD : [];
|
70 |
}
|
71 |
|
72 |
/**
|
105 |
return $this->isOpt( 'enable_tracking', 'Y' );
|
106 |
}
|
107 |
|
108 |
+
/**
|
109 |
+
* @return bool
|
110 |
+
*/
|
111 |
+
public function isEnabledWpcli() {
|
112 |
+
return $this->isPremium() && $this->isOpt( 'enable_wpcli', 'Y' );
|
113 |
+
}
|
114 |
+
|
115 |
/**
|
116 |
* @return bool
|
117 |
*/
|
src/lib/src/Modules/Plugin/Strings.php
CHANGED
@@ -179,7 +179,14 @@ class Strings extends Base\Strings {
|
|
179 |
case 'block_send_email_address' :
|
180 |
$sName = __( 'Report Email', 'wp-simple-firewall' );
|
181 |
$sSummary = __( 'Where to send email reports', 'wp-simple-firewall' );
|
182 |
-
$sDescription =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
break;
|
184 |
|
185 |
case 'enable_upgrade_admin_notice' :
|
@@ -191,9 +198,18 @@ class Strings extends Base\Strings {
|
|
191 |
case 'display_plugin_badge' :
|
192 |
$sName = __( 'Show Plugin Badge', 'wp-simple-firewall' );
|
193 |
$sSummary = __( 'Display Plugin Badge On Your Site', 'wp-simple-firewall' );
|
194 |
-
$sDescription =
|
195 |
-
|
196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
break;
|
198 |
|
199 |
case 'delete_on_deactivate' :
|
179 |
case 'block_send_email_address' :
|
180 |
$sName = __( 'Report Email', 'wp-simple-firewall' );
|
181 |
$sSummary = __( 'Where to send email reports', 'wp-simple-firewall' );
|
182 |
+
$sDescription = [
|
183 |
+
__( "This lets you customise the default email address for all emails sent by the plugin.", 'wp-simple-firewall' ),
|
184 |
+
sprintf( __( "The plugin defaults to the site administration email address, which is: %s", 'wp-simple-firewall' ),
|
185 |
+
sprintf( '<a href="%s" target="_blank" title="%s"><code>'.get_bloginfo( 'admin_email' ).'</code></a>',
|
186 |
+
Services::WpGeneral()->getAdminUrl( 'options-general.php' ),
|
187 |
+
__( 'Review site settings', 'wp-simple-firewall' ) )
|
188 |
+
)
|
189 |
+
];
|
190 |
break;
|
191 |
|
192 |
case 'enable_upgrade_admin_notice' :
|
198 |
case 'display_plugin_badge' :
|
199 |
$sName = __( 'Show Plugin Badge', 'wp-simple-firewall' );
|
200 |
$sSummary = __( 'Display Plugin Badge On Your Site', 'wp-simple-firewall' );
|
201 |
+
$sDescription = [
|
202 |
+
__( 'Enabling this option helps support the plugin by spreading the word about it on your website.', 'wp-simple-firewall' )
|
203 |
+
.' '.__( 'The plugin badge also lets visitors know your are taking your website security seriously.', 'wp-simple-firewall' ),
|
204 |
+
sprintf( '<strong><a href="%s" target="_blank">%s</a></strong>', 'https://shsec.io/wpsf20', __( 'Read this carefully before enabling this option.', 'wp-simple-firewall' ) ),
|
205 |
+
__( "This also acts as an affiliate link if you're running ShieldPRO so you can earn rewards for each referral.", 'wp-simple-firewall' ),
|
206 |
+
];
|
207 |
+
break;
|
208 |
+
|
209 |
+
case 'enable_wpcli' :
|
210 |
+
$sName = __( 'Allow WP-CLI', 'wp-simple-firewall' );
|
211 |
+
$sSummary = __( 'Allow Access And Control Of This Plugin Via WP-CLI', 'wp-simple-firewall' );
|
212 |
+
$sDescription = __( "Turn off this option to disable this plugin's WP-CLI integration.", 'wp-simple-firewall' );
|
213 |
break;
|
214 |
|
215 |
case 'delete_on_deactivate' :
|
src/lib/src/Modules/Plugin/WpCli.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
|
7 |
+
|
8 |
+
class WpCli extends Base\WpCli {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @inheritDoc
|
12 |
+
*/
|
13 |
+
protected function getCmdHandlers() {
|
14 |
+
return [
|
15 |
+
new Plugin\WpCli\ForceOff(),
|
16 |
+
new Plugin\WpCli\Reset(),
|
17 |
+
new Plugin\WpCli\Export(),
|
18 |
+
new Plugin\WpCli\Import(),
|
19 |
+
];
|
20 |
+
}
|
21 |
+
}
|
src/lib/src/Modules/Plugin/WpCli/Export.php
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\WpCli;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib;
|
7 |
+
use FernleafSystems\Wordpress\Services\Services;
|
8 |
+
use WP_CLI;
|
9 |
+
|
10 |
+
class Export extends Base\WpCli\BaseWpCliCmd {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @throws \Exception
|
14 |
+
*/
|
15 |
+
protected function addCmds() {
|
16 |
+
WP_CLI::add_command(
|
17 |
+
$this->buildCmd( [ 'export' ] ),
|
18 |
+
[ $this, 'cmdExport' ], $this->mergeCommonCmdArgs( [
|
19 |
+
'shortdesc' => 'Export configuration to file.',
|
20 |
+
'synopsis' => [
|
21 |
+
[
|
22 |
+
'type' => 'assoc',
|
23 |
+
'name' => 'file',
|
24 |
+
'optional' => false,
|
25 |
+
'description' => 'The absolute or relative (to ABSPA
|