Shield Security for WordPress - Version 7.1.0

Version Description

  • Current Release = Released: 21st February, 2018 - Release Notes
Download this release

Release Info

Developer paultgoodchild
Plugin Icon 128x128 Shield Security for WordPress
Version 7.1.0
Comparing to
See all releases

Code changes from version 7.0.4 to 7.1.0

Files changed (121) hide show
  1. icwp-plugin-controller.php +25 -4
  2. icwp-wpsf.php +1 -1
  3. plugin-spec.php +5 -4
  4. readme.txt +17 -7
  5. resources/css/bootstrap4.css +378 -227
  6. resources/css/bootstrap4.min.css +4 -4
  7. resources/css/plugin.css +25 -1
  8. resources/js/bootstrap4.bundle.js +302 -107
  9. resources/js/bootstrap4.bundle.min.js +3 -3
  10. resources/js/bootstrap4.js +287 -101
  11. resources/js/bootstrap4.min.js +3 -3
  12. resources/js/shield-import.js +48 -0
  13. src/common/icwp-data.php +1 -2
  14. src/common/icwp-optionsvo.php +21 -4
  15. src/common/icwp-serviceproviders.php +46 -7
  16. src/common/wp-admin-notices.php +5 -2
  17. src/config/feature-admin_access_restriction.php +3 -3
  18. src/config/feature-autoupdates.php +6 -4
  19. src/config/feature-comments_filter.php +2 -1
  20. src/config/feature-firewall.php +4 -4
  21. src/config/feature-hack_protect.php +80 -18
  22. src/config/feature-ips.php +39 -6
  23. src/config/feature-license.php +36 -24
  24. src/config/feature-lockdown.php +4 -2
  25. src/config/feature-login_protect.php +48 -41
  26. src/config/feature-plugin.php +33 -37
  27. src/config/feature-sessions.php +3 -1
  28. src/config/feature-traffic.php +3 -1
  29. src/config/feature-user_management.php +7 -3
  30. src/features/admin_access_restriction.php +1 -1
  31. src/features/audit_trail.php +22 -5
  32. src/features/base.php +3 -3
  33. src/features/base_wpsf.php +8 -4
  34. src/features/hack_protect.php +47 -11
  35. src/features/insights.php +89 -65
  36. src/features/ips.php +61 -4
  37. src/features/lockdown.php +3 -3
  38. src/features/plugin.php +107 -2
  39. src/lib/src/Crons/StandardCron.php +29 -11
  40. src/lib/src/Scans/Apc/ConvertResultsToVos.php +23 -0
  41. src/lib/src/Scans/Apc/ConvertVosToResults.php +32 -0
  42. src/lib/src/Scans/Apc/ResultItem.php +16 -0
  43. src/lib/src/Scans/Apc/ResultsSet.php +122 -0
  44. src/lib/src/Scans/Apc/Scanner.php +134 -0
  45. src/lib/src/Scans/Wcf/Scanner.php +2 -2
  46. src/lib/src/Tables/Build/Ip.php +0 -1
  47. src/lib/src/Tables/Build/ScanApc.php +47 -0
  48. src/lib/src/Tables/Render/ScanApc.php +40 -0
  49. src/lib/src/Tables/Render/ScanBase.php +2 -2
  50. src/lib/src/Tests/VerifyConfig.php +56 -0
  51. src/lib/vendor/composer/autoload_classmap.php +11 -20
  52. src/lib/vendor/composer/autoload_static.php +11 -20
  53. src/lib/vendor/composer/installed.json +4 -4
  54. src/lib/vendor/fernleafsystems/wordpress-services/src/Core/Comments.php +16 -5
  55. src/lib/vendor/fernleafsystems/wordpress-services/src/Core/General.php +7 -0
  56. src/lib/vendor/fernleafsystems/wordpress-services/src/Services.php +1 -1
  57. src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php +34 -12
  58. src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Email.php +10 -8
  59. src/processors/audit_trail.php +10 -192
  60. src/processors/audit_trail_auditor.php +175 -0
  61. src/processors/basedb.php +0 -32
  62. src/processors/commentsfilter_antibotspam.php +0 -21
  63. src/processors/hack_protect.php +32 -0
  64. src/processors/hackprotect_scan_apc.php +181 -0
  65. src/processors/hackprotect_scan_base.php +16 -5
  66. src/processors/hackprotect_scan_ptg.php +9 -9
  67. src/processors/hackprotect_scan_ufc.php +9 -9
  68. src/processors/hackprotect_scan_wcf.php +9 -9
  69. src/processors/hackprotect_scan_wpv.php +9 -9
  70. src/processors/hackprotect_scanner.php +11 -32
  71. src/processors/ips.php +84 -37
  72. src/processors/loginprotect_intentprovider_base.php +7 -7
  73. src/processors/loginprotect_intentprovider_ga.php +1 -0
  74. src/processors/plugin.php +12 -19
  75. src/processors/plugin_crondaily.php +30 -0
  76. src/processors/plugin_importexport.php +275 -75
  77. src/processors/plugin_notes.php +0 -24
  78. src/processors/plugin_tracking.php +34 -54
  79. src/processors/sessions.php +0 -29
  80. src/processors/statistics_tally.php +0 -24
  81. src/processors/traffic_logger.php +1 -16
  82. src/processors/user_management.php +8 -5
  83. src/query/VOs/ICWP_WPSF_BaseEntryVO.php +0 -89
  84. src/query/VOs/ICWP_WPSF_IpsEntryVO.php +0 -65
  85. src/query/audittrail/delete.php +0 -13
  86. src/query/audittrail/insert.php +0 -6
  87. src/query/audittrail/select.php +0 -29
  88. src/query/base/base.php +0 -263
  89. src/query/base/delete.php +0 -53
  90. src/query/base/insert.php +0 -43
  91. src/query/base/query.php +0 -355
  92. src/query/base/select.php +0 -204
  93. src/query/base/update.php +0 -60
  94. src/query/ips/select.php +0 -49
  95. src/query/sessions/delete.php +0 -37
  96. src/query/sessions/insert.php +0 -15
  97. src/query/sessions/select.php +0 -62
  98. src/query/sessions/update.php +0 -75
  99. src/query/traffic/common.php +0 -71
  100. src/query/traffic/delete.php +0 -15
  101. src/query/traffic/insert.php +0 -6
  102. src/query/traffic/select.php +0 -15
  103. src/wizards/plugin.php +5 -2
  104. templates/twig/snippets/blacklist_die.twig +22 -1
  105. templates/twig/wpadmin_pages/base.twig +1 -1
  106. templates/twig/wpadmin_pages/insights_new/base.twig +12 -3
  107. templates/twig/wpadmin_pages/insights_new/{traffic/traffic_unavailable.twig → common/feature_unavailable.twig} +2 -2
  108. templates/twig/wpadmin_pages/insights_new/importexport/from_file.twig +69 -0
  109. templates/twig/wpadmin_pages/insights_new/importexport/from_site.twig +95 -0
  110. templates/twig/wpadmin_pages/insights_new/importexport/index.twig +18 -0
  111. templates/twig/wpadmin_pages/insights_new/notes/admin_notes.twig +2 -2
  112. templates/twig/wpadmin_pages/insights_new/notes/index.twig +8 -2
  113. templates/twig/wpadmin_pages/insights_new/scans/results/apc.twig +72 -0
  114. templates/twig/wpadmin_pages/insights_new/scans/results/ptg.twig +1 -1
  115. templates/twig/wpadmin_pages/insights_new/scans/results/ufc.twig +1 -1
  116. templates/twig/wpadmin_pages/insights_new/scans/results/wcf.twig +1 -1
  117. templates/twig/wpadmin_pages/insights_new/scans/results/wpv.twig +1 -1
  118. templates/twig/wpadmin_pages/insights_new/scans/results/wpv_unavailable.twig +0 -11
  119. templates/twig/wpadmin_pages/insights_new/scans/scan_areas.twig +12 -6
  120. templates/twig/wpadmin_pages/insights_new/scans/scan_results.twig +55 -19
  121. templates/twig/wpadmin_pages/insights_new/traffic/index.twig +1 -1
icwp-plugin-controller.php CHANGED
@@ -358,6 +358,8 @@ class ICWP_WPSF_Plugin_Controller extends ICWP_WPSF_Foundation {
358
  }
359
  add_action( 'admin_enqueue_scripts', array( $this, 'onWpEnqueueAdminCss' ), 100 );
360
  add_action( 'admin_enqueue_scripts', array( $this, 'onWpEnqueueAdminJs' ), 5 );
 
 
361
  }
362
 
363
  /**
@@ -1818,18 +1820,26 @@ class ICWP_WPSF_Plugin_Controller extends ICWP_WPSF_Foundation {
1818
  }
1819
 
1820
  /**
1821
- * @return ICWP_UserMeta
1822
  */
1823
  public function getCurrentUserMeta() {
1824
- return $this->loadWpUsers()->metaVoForUser( $this->prefix() );
1825
  }
1826
 
1827
  /**
1828
  * @param $oUser WP_User
1829
- * @return ICWP_UserMeta
1830
  */
1831
  public function getUserMeta( $oUser ) {
1832
- return $this->loadWpUsers()->metaVoForUser( $this->prefix(), $oUser->ID );
 
 
 
 
 
 
 
 
1833
  }
1834
 
1835
  /**
@@ -1922,4 +1932,15 @@ class ICWP_WPSF_Plugin_Controller extends ICWP_WPSF_Foundation {
1922
  }
1923
  return ( $this->isPluginAdmin() && apply_filters( $this->prefix( 'is_plugin_admin' ), true ) );
1924
  }
 
 
 
 
 
 
 
 
 
 
 
1925
  }
358
  }
359
  add_action( 'admin_enqueue_scripts', array( $this, 'onWpEnqueueAdminCss' ), 100 );
360
  add_action( 'admin_enqueue_scripts', array( $this, 'onWpEnqueueAdminJs' ), 5 );
361
+
362
+ $this->runTests();
363
  }
364
 
365
  /**
1820
  }
1821
 
1822
  /**
1823
+ * @return \FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta
1824
  */
1825
  public function getCurrentUserMeta() {
1826
+ return $this->getUserMeta( Services::WpUsers()->getCurrentWpUser() );
1827
  }
1828
 
1829
  /**
1830
  * @param $oUser WP_User
1831
+ * @return \FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta|mixed
1832
  */
1833
  public function getUserMeta( $oUser ) {
1834
+ $oMeta = null;
1835
+ try {
1836
+ if ( $oUser instanceof \WP_User ) {
1837
+ $oMeta = \FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta::Load( $this->prefix(), $oUser->ID );
1838
+ }
1839
+ }
1840
+ catch ( \Exception $oE ) {
1841
+ }
1842
+ return $oMeta;
1843
  }
1844
 
1845
  /**
1932
  }
1933
  return ( $this->isPluginAdmin() && apply_filters( $this->prefix( 'is_plugin_admin' ), true ) );
1934
  }
1935
+
1936
+ private function runTests() {
1937
+ if ( $this->isPluginAdmin() && $this->isModulePage() && Services::Request()->query( 'runtests' ) ) {
1938
+ foreach ( $this->getModules() as $oModule ) {
1939
+ ( new \FernleafSystems\Wordpress\Plugin\Shield\Tests\VerifyConfig() )
1940
+ ->setOpts( $oModule->getOptionsVo() )
1941
+ ->run();
1942
+ }
1943
+ die();
1944
+ }
1945
+ }
1946
  }
icwp-wpsf.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://icwp.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
- * Version: 7.0.4
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages/
9
  * Author: One Dollar Plugin
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://icwp.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
+ * Version: 7.1.0
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages/
9
  * Author: One Dollar Plugin
plugin-spec.php CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "properties": {
3
- "version": "7.0.4",
4
- "release_timestamp": 1549527670,
5
  "slug_parent": "icwp",
6
  "slug_plugin": "wpsf",
7
  "human_name": "Shield",
@@ -78,8 +78,9 @@
78
  "icon_url_32x32": "pluginlogo_32x32.png",
79
  "icon_url_128x128": "pluginlogo_128x128.png"
80
  },
81
- "urls": {
82
- "repo_home": "https://icwp.io/eh"
 
83
  },
84
  "plugin_meta": [
85
  {
1
  {
2
  "properties": {
3
+ "version": "7.1.0",
4
+ "release_timestamp": 1550737690,
5
  "slug_parent": "icwp",
6
  "slug_plugin": "wpsf",
7
  "human_name": "Shield",
78
  "icon_url_32x32": "pluginlogo_32x32.png",
79
  "icon_url_128x128": "pluginlogo_128x128.png"
80
  },
81
+ "meta": {
82
+ "url_repo_home": "https://icwp.io/eh",
83
+ "headway_changelog_id": "xaoEZJ"
84
  },
85
  "plugin_meta": [
86
  {
readme.txt CHANGED
@@ -8,7 +8,7 @@ Requires at least: 3.5.0
8
  Requires PHP: 5.4.0
9
  Recommended PHP: 7.0
10
  Tested up to: 5.1
11
- Stable tag: 7.0.4
12
 
13
  Complete All-In-One Protection for your WordPress sites, that makes Security Easy for Everyone - it doesn't have to be hard anymore.
14
 
@@ -352,8 +352,22 @@ You will always be able to use Shield Security and its free features in-full.
352
 
353
  [Go Pro for just $1/month](https://icwp.io/aa).
354
 
355
- = 7.0.4 - Current Release =
356
- *Released: 12th February, 2018* - [Release Notes](https://icwp.io/ef)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
 
358
  * **(v.4)** IMPROVED: Refactored IP address blocking with improved audit trail messages.
359
  * **(v.4)** CHANGED: Expanded anonymous REST API whitelist to include 'wpstatistics' namespace.
@@ -363,10 +377,6 @@ You will always be able to use Shield Security and its free features in-full.
363
  * **(v.4)** IMPROVED: Options form submission is adjusted to work around poorly restrictive webhosts.
364
  * **(v.4)** FIX: Various tweaks and fixes across the plugin.
365
  * **(v.4)** FIX: Error with ClassicPress.
366
-
367
- = 7.0 - Series =
368
- *Released: 28th January, 2018* - [Release Notes](https://icwp.io/ef)
369
-
370
  * **(v.3)** NEW: Automatically whitelist anonymous REST API Access for 3 plugins: Contact Form 7, WooCommerce, JetPack.
371
  * **(v.3)** IMPROVED: Security admin login failure messages are clearer.
372
  * **(v.3)** IMPROVED: Admin notification for email sending 2FA verification easily lets you resend email.
8
  Requires PHP: 5.4.0
9
  Recommended PHP: 7.0
10
  Tested up to: 5.1
11
+ Stable tag: 7.1.0
12
 
13
  Complete All-In-One Protection for your WordPress sites, that makes Security Easy for Everyone - it doesn't have to be hard anymore.
14
 
352
 
353
  [Go Pro for just $1/month](https://icwp.io/aa).
354
 
355
+ = 7.1.0 - Current Release =
356
+ *Released: 21st February, 2018* - [Release Notes](https://icwp.io/ek)
357
+
358
+ = 7.1 - Series =
359
+ *Released: 21st February, 2018* - [Release Notes](https://icwp.io/ek)
360
+
361
+ * **(v.0)** NEW: Moved Import/Export UI from Wizard to main Shield Dashboard.
362
+ * **(v.0)** NEW: [**PRO**] Option to import/export settings using file downloads/uploads
363
+ * **(v.0)** NEW: [**PRO**] Option to allow visitors to automatically unblock themselves (once in 24hrs)
364
+ * **(v.0)** NEW: Integrated changelog directly into plugin admin for easy updates (between releases)
365
+ * **(v.0)** FIXED: WP Core files scanner now correctly ignores certain files as it used to do, pre-v7. e.g. wp-config-sample.php
366
+ * **(v.0)** FIXED: Shield was indicating plugin/theme file editing was possible, when it in-fact was disabled.
367
+ * **(v.0)** IMPROVED: Consolidate crons into fewer crons. e.g. all scans run under the same cron.
368
+
369
+ = 7.0 - Series =
370
+ *Released: 28th January, 2018* - [Release Notes](https://icwp.io/ef)
371
 
372
  * **(v.4)** IMPROVED: Refactored IP address blocking with improved audit trail messages.
373
  * **(v.4)** CHANGED: Expanded anonymous REST API whitelist to include 'wpstatistics' namespace.
377
  * **(v.4)** IMPROVED: Options form submission is adjusted to work around poorly restrictive webhosts.
378
  * **(v.4)** FIX: Various tweaks and fixes across the plugin.
379
  * **(v.4)** FIX: Error with ClassicPress.
 
 
 
 
380
  * **(v.3)** NEW: Automatically whitelist anonymous REST API Access for 3 plugins: Contact Form 7, WooCommerce, JetPack.
381
  * **(v.3)** IMPROVED: Security admin login failure messages are clearer.
382
  * **(v.3)** IMPROVED: Admin notification for email sending 2FA verification easily lets you resend email.
resources/css/bootstrap4.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 The Bootstrap Authors
4
- * Copyright 2011-2018 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
  */
7
  :root {
@@ -90,6 +90,7 @@ abbr[data-original-title] {
90
  text-decoration: underline dotted;
91
  cursor: help;
92
  border-bottom: 0;
 
93
  text-decoration-skip-ink: none;
94
  }
95
 
@@ -255,6 +256,10 @@ select {
255
  text-transform: none;
256
  }
257
 
 
 
 
 
258
  button,
259
  [type="button"],
260
  [type="reset"],
@@ -262,6 +267,13 @@ button,
262
  -webkit-appearance: button;
263
  }
264
 
 
 
 
 
 
 
 
265
  button::-moz-focus-inner,
266
  [type="button"]::-moz-focus-inner,
267
  [type="reset"]::-moz-focus-inner,
@@ -350,10 +362,8 @@ template {
350
  h1, h2, h3, h4, h5, h6,
351
  .h1, .h2, .h3, .h4, .h5, .h6 {
352
  margin-bottom: 0.5rem;
353
- font-family: inherit;
354
  font-weight: 500;
355
  line-height: 1.2;
356
- color: inherit;
357
  }
358
 
359
  h1, .h1 {
@@ -1504,7 +1514,7 @@ pre code {
1504
  .table {
1505
  width: 100%;
1506
  margin-bottom: 1rem;
1507
- background-color: transparent;
1508
  }
1509
 
1510
  .table th,
@@ -1523,10 +1533,6 @@ pre code {
1523
  border-top: 2px solid #dee2e6;
1524
  }
1525
 
1526
- .table .table {
1527
- background-color: #fff;
1528
- }
1529
-
1530
  .table-sm th,
1531
  .table-sm td {
1532
  padding: 0.3rem;
@@ -1558,6 +1564,7 @@ pre code {
1558
  }
1559
 
1560
  .table-hover tbody tr:hover {
 
1561
  background-color: rgba(0, 0, 0, 0.075);
1562
  }
1563
 
@@ -1754,8 +1761,8 @@ pre code {
1754
 
1755
  .table .thead-dark th {
1756
  color: #fff;
1757
- background-color: #212529;
1758
- border-color: #32383e;
1759
  }
1760
 
1761
  .table .thead-light th {
@@ -1766,13 +1773,13 @@ pre code {
1766
 
1767
  .table-dark {
1768
  color: #fff;
1769
- background-color: #212529;
1770
  }
1771
 
1772
  .table-dark th,
1773
  .table-dark td,
1774
  .table-dark thead th {
1775
- border-color: #32383e;
1776
  }
1777
 
1778
  .table-dark.table-bordered {
@@ -1784,6 +1791,7 @@ pre code {
1784
  }
1785
 
1786
  .table-dark.table-hover tbody tr:hover {
 
1787
  background-color: rgba(255, 255, 255, 0.075);
1788
  }
1789
 
@@ -1793,7 +1801,6 @@ pre code {
1793
  width: 100%;
1794
  overflow-x: auto;
1795
  -webkit-overflow-scrolling: touch;
1796
- -ms-overflow-style: -ms-autohiding-scrollbar;
1797
  }
1798
  .table-responsive-sm > .table-bordered {
1799
  border: 0;
@@ -1806,7 +1813,6 @@ pre code {
1806
  width: 100%;
1807
  overflow-x: auto;
1808
  -webkit-overflow-scrolling: touch;
1809
- -ms-overflow-style: -ms-autohiding-scrollbar;
1810
  }
1811
  .table-responsive-md > .table-bordered {
1812
  border: 0;
@@ -1819,7 +1825,6 @@ pre code {
1819
  width: 100%;
1820
  overflow-x: auto;
1821
  -webkit-overflow-scrolling: touch;
1822
- -ms-overflow-style: -ms-autohiding-scrollbar;
1823
  }
1824
  .table-responsive-lg > .table-bordered {
1825
  border: 0;
@@ -1832,7 +1837,6 @@ pre code {
1832
  width: 100%;
1833
  overflow-x: auto;
1834
  -webkit-overflow-scrolling: touch;
1835
- -ms-overflow-style: -ms-autohiding-scrollbar;
1836
  }
1837
  .table-responsive-xl > .table-bordered {
1838
  border: 0;
@@ -1844,7 +1848,6 @@ pre code {
1844
  width: 100%;
1845
  overflow-x: auto;
1846
  -webkit-overflow-scrolling: touch;
1847
- -ms-overflow-style: -ms-autohiding-scrollbar;
1848
  }
1849
 
1850
  .table-responsive > .table-bordered {
@@ -1854,7 +1857,7 @@ pre code {
1854
  .form-control {
1855
  display: block;
1856
  width: 100%;
1857
- height: calc(2.25rem + 2px);
1858
  padding: 0.375rem 0.75rem;
1859
  font-size: 1rem;
1860
  font-weight: 400;
@@ -1867,7 +1870,7 @@ pre code {
1867
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1868
  }
1869
 
1870
- @media screen and (prefers-reduced-motion: reduce) {
1871
  .form-control {
1872
  transition: none;
1873
  }
@@ -1968,7 +1971,7 @@ select.form-control:focus::-ms-value {
1968
  }
1969
 
1970
  .form-control-sm {
1971
- height: calc(1.8125rem + 2px);
1972
  padding: 0.25rem 0.5rem;
1973
  font-size: 0.875rem;
1974
  line-height: 1.5;
@@ -1976,7 +1979,7 @@ select.form-control:focus::-ms-value {
1976
  }
1977
 
1978
  .form-control-lg {
1979
- height: calc(2.875rem + 2px);
1980
  padding: 0.5rem 1rem;
1981
  font-size: 1.25rem;
1982
  line-height: 1.5;
@@ -2076,11 +2079,11 @@ textarea.form-control {
2076
 
2077
  .was-validated .form-control:valid, .form-control.is-valid {
2078
  border-color: #28a745;
2079
- padding-right: 2.25rem;
2080
- background-repeat: no-repeat;
2081
- background-position: center right calc(2.25rem / 4);
2082
- background-size: calc(2.25rem / 2) calc(2.25rem / 2);
2083
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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");
 
 
 
2084
  }
2085
 
2086
  .was-validated .form-control:valid:focus, .form-control.is-valid:focus {
@@ -2095,14 +2098,14 @@ textarea.form-control {
2095
  }
2096
 
2097
  .was-validated textarea.form-control:valid, textarea.form-control.is-valid {
2098
- padding-right: 2.25rem;
2099
- background-position: top calc(2.25rem / 4) right calc(2.25rem / 4);
2100
  }
2101
 
2102
  .was-validated .custom-select:valid, .custom-select.is-valid {
2103
  border-color: #28a745;
2104
- padding-right: 3.4375rem;
2105
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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") no-repeat center right 1.75rem/1.125rem 1.125rem;
2106
  }
2107
 
2108
  .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
@@ -2199,11 +2202,11 @@ textarea.form-control {
2199
 
2200
  .was-validated .form-control:invalid, .form-control.is-invalid {
2201
  border-color: #dc3545;
2202
- padding-right: 2.25rem;
 
2203
  background-repeat: no-repeat;
2204
- background-position: center right calc(2.25rem / 4);
2205
- background-size: calc(2.25rem / 2) calc(2.25rem / 2);
2206
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
2207
  }
2208
 
2209
  .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
@@ -2218,14 +2221,14 @@ textarea.form-control {
2218
  }
2219
 
2220
  .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
2221
- padding-right: 2.25rem;
2222
- background-position: top calc(2.25rem / 4) right calc(2.25rem / 4);
2223
  }
2224
 
2225
  .was-validated .custom-select:invalid, .custom-select.is-invalid {
2226
  border-color: #dc3545;
2227
- padding-right: 3.4375rem;
2228
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.125rem 1.125rem;
2229
  }
2230
 
2231
  .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
@@ -2355,6 +2358,8 @@ textarea.form-control {
2355
  }
2356
  .form-inline .form-check-input {
2357
  position: relative;
 
 
2358
  margin-top: 0;
2359
  margin-right: 0.25rem;
2360
  margin-left: 0;
@@ -2389,7 +2394,7 @@ textarea.form-control {
2389
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
2390
  }
2391
 
2392
- @media screen and (prefers-reduced-motion: reduce) {
2393
  .btn {
2394
  transition: none;
2395
  }
@@ -2409,10 +2414,6 @@ textarea.form-control {
2409
  opacity: 0.65;
2410
  }
2411
 
2412
- .btn:not(:disabled):not(.disabled) {
2413
- cursor: pointer;
2414
- }
2415
-
2416
  a.btn.disabled,
2417
  fieldset:disabled a.btn {
2418
  pointer-events: none;
@@ -2949,6 +2950,7 @@ fieldset:disabled a.btn {
2949
  .btn-link {
2950
  font-weight: 400;
2951
  color: #007bff;
 
2952
  }
2953
 
2954
  .btn-link:hover {
@@ -2999,7 +3001,7 @@ input[type="button"].btn-block {
2999
  transition: opacity 0.15s linear;
3000
  }
3001
 
3002
- @media screen and (prefers-reduced-motion: reduce) {
3003
  .fade {
3004
  transition: none;
3005
  }
@@ -3020,7 +3022,7 @@ input[type="button"].btn-block {
3020
  transition: height 0.35s ease;
3021
  }
3022
 
3023
- @media screen and (prefers-reduced-motion: reduce) {
3024
  .collapsing {
3025
  transition: none;
3026
  }
@@ -3033,6 +3035,10 @@ input[type="button"].btn-block {
3033
  position: relative;
3034
  }
3035
 
 
 
 
 
3036
  .dropdown-toggle::after {
3037
  display: inline-block;
3038
  margin-left: 0.255em;
@@ -3068,49 +3074,25 @@ input[type="button"].btn-block {
3068
  border-radius: 0.25rem;
3069
  }
3070
 
3071
- .dropdown-menu-right {
3072
- right: 0;
3073
- left: auto;
3074
- }
3075
-
3076
- @media (min-width: 576px) {
3077
- .dropdown-menu-sm-right {
3078
- right: 0;
3079
- left: auto;
3080
- }
3081
- }
3082
-
3083
- @media (min-width: 768px) {
3084
- .dropdown-menu-md-right {
3085
- right: 0;
3086
- left: auto;
3087
- }
3088
- }
3089
-
3090
- @media (min-width: 992px) {
3091
- .dropdown-menu-lg-right {
3092
- right: 0;
3093
- left: auto;
3094
- }
3095
- }
3096
-
3097
- @media (min-width: 1200px) {
3098
- .dropdown-menu-xl-right {
3099
- right: 0;
3100
- left: auto;
3101
- }
3102
- }
3103
-
3104
  .dropdown-menu-left {
3105
  right: auto;
3106
  left: 0;
3107
  }
3108
 
 
 
 
 
 
3109
  @media (min-width: 576px) {
3110
  .dropdown-menu-sm-left {
3111
  right: auto;
3112
  left: 0;
3113
  }
 
 
 
 
3114
  }
3115
 
3116
  @media (min-width: 768px) {
@@ -3118,6 +3100,10 @@ input[type="button"].btn-block {
3118
  right: auto;
3119
  left: 0;
3120
  }
 
 
 
 
3121
  }
3122
 
3123
  @media (min-width: 992px) {
@@ -3125,6 +3111,10 @@ input[type="button"].btn-block {
3125
  right: auto;
3126
  left: 0;
3127
  }
 
 
 
 
3128
  }
3129
 
3130
  @media (min-width: 1200px) {
@@ -3132,6 +3122,10 @@ input[type="button"].btn-block {
3132
  right: auto;
3133
  left: 0;
3134
  }
 
 
 
 
3135
  }
3136
 
3137
  .dropup .dropdown-menu {
@@ -3245,16 +3239,6 @@ input[type="button"].btn-block {
3245
  border: 0;
3246
  }
3247
 
3248
- .dropdown-item:first-child {
3249
- border-top-left-radius: calc(0.25rem - 1px);
3250
- border-top-right-radius: calc(0.25rem - 1px);
3251
- }
3252
-
3253
- .dropdown-item:last-child {
3254
- border-bottom-right-radius: calc(0.25rem - 1px);
3255
- border-bottom-left-radius: calc(0.25rem - 1px);
3256
- }
3257
-
3258
  .dropdown-item:hover, .dropdown-item:focus {
3259
  color: #16181b;
3260
  text-decoration: none;
@@ -3557,7 +3541,7 @@ input[type="button"].btn-block {
3557
 
3558
  .input-group-lg > .form-control:not(textarea),
3559
  .input-group-lg > .custom-select {
3560
- height: calc(2.875rem + 2px);
3561
  }
3562
 
3563
  .input-group-lg > .form-control,
@@ -3574,7 +3558,7 @@ input[type="button"].btn-block {
3574
 
3575
  .input-group-sm > .form-control:not(textarea),
3576
  .input-group-sm > .custom-select {
3577
- height: calc(1.8125rem + 2px);
3578
  }
3579
 
3580
  .input-group-sm > .form-control,
@@ -3688,9 +3672,7 @@ input[type="button"].btn-block {
3688
  width: 1rem;
3689
  height: 1rem;
3690
  content: "";
3691
- background-repeat: no-repeat;
3692
- background-position: center center;
3693
- background-size: 50% 50%;
3694
  }
3695
 
3696
  .custom-checkbox .custom-control-label::before {
@@ -3753,7 +3735,7 @@ input[type="button"].btn-block {
3753
  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;
3754
  }
3755
 
3756
- @media screen and (prefers-reduced-motion: reduce) {
3757
  .custom-switch .custom-control-label::after {
3758
  transition: none;
3759
  }
@@ -3772,8 +3754,9 @@ input[type="button"].btn-block {
3772
  .custom-select {
3773
  display: inline-block;
3774
  width: 100%;
3775
- height: calc(2.25rem + 2px);
3776
  padding: 0.375rem 1.75rem 0.375rem 0.75rem;
 
3777
  font-weight: 400;
3778
  line-height: 1.5;
3779
  color: #495057;
@@ -3790,7 +3773,7 @@ input[type="button"].btn-block {
3790
  .custom-select:focus {
3791
  border-color: #80bdff;
3792
  outline: 0;
3793
- box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5);
3794
  }
3795
 
3796
  .custom-select:focus::-ms-value {
@@ -3810,11 +3793,11 @@ input[type="button"].btn-block {
3810
  }
3811
 
3812
  .custom-select::-ms-expand {
3813
- opacity: 0;
3814
  }
3815
 
3816
  .custom-select-sm {
3817
- height: calc(1.8125rem + 2px);
3818
  padding-top: 0.25rem;
3819
  padding-bottom: 0.25rem;
3820
  padding-left: 0.5rem;
@@ -3822,7 +3805,7 @@ input[type="button"].btn-block {
3822
  }
3823
 
3824
  .custom-select-lg {
3825
- height: calc(2.875rem + 2px);
3826
  padding-top: 0.5rem;
3827
  padding-bottom: 0.5rem;
3828
  padding-left: 1rem;
@@ -3833,7 +3816,7 @@ input[type="button"].btn-block {
3833
  position: relative;
3834
  display: inline-block;
3835
  width: 100%;
3836
- height: calc(2.25rem + 2px);
3837
  margin-bottom: 0;
3838
  }
3839
 
@@ -3841,7 +3824,7 @@ input[type="button"].btn-block {
3841
  position: relative;
3842
  z-index: 2;
3843
  width: 100%;
3844
- height: calc(2.25rem + 2px);
3845
  margin: 0;
3846
  opacity: 0;
3847
  }
@@ -3869,7 +3852,7 @@ input[type="button"].btn-block {
3869
  right: 0;
3870
  left: 0;
3871
  z-index: 1;
3872
- height: calc(2.25rem + 2px);
3873
  padding: 0.375rem 0.75rem;
3874
  font-weight: 400;
3875
  line-height: 1.5;
@@ -3886,7 +3869,7 @@ input[type="button"].btn-block {
3886
  bottom: 0;
3887
  z-index: 3;
3888
  display: block;
3889
- height: 2.25rem;
3890
  padding: 0.375rem 0.75rem;
3891
  line-height: 1.5;
3892
  color: #495057;
@@ -3938,7 +3921,7 @@ input[type="button"].btn-block {
3938
  appearance: none;
3939
  }
3940
 
3941
- @media screen and (prefers-reduced-motion: reduce) {
3942
  .custom-range::-webkit-slider-thumb {
3943
  transition: none;
3944
  }
@@ -3969,7 +3952,7 @@ input[type="button"].btn-block {
3969
  appearance: none;
3970
  }
3971
 
3972
- @media screen and (prefers-reduced-motion: reduce) {
3973
  .custom-range::-moz-range-thumb {
3974
  transition: none;
3975
  }
@@ -4002,7 +3985,7 @@ input[type="button"].btn-block {
4002
  appearance: none;
4003
  }
4004
 
4005
- @media screen and (prefers-reduced-motion: reduce) {
4006
  .custom-range::-ms-thumb {
4007
  transition: none;
4008
  }
@@ -4059,7 +4042,7 @@ input[type="button"].btn-block {
4059
  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
4060
  }
4061
 
4062
- @media screen and (prefers-reduced-motion: reduce) {
4063
  .custom-control-label::before,
4064
  .custom-file-label,
4065
  .custom-select {
@@ -4248,10 +4231,6 @@ input[type="button"].btn-block {
4248
  text-decoration: none;
4249
  }
4250
 
4251
- .navbar-toggler:not(:disabled):not(.disabled) {
4252
- cursor: pointer;
4253
- }
4254
-
4255
  .navbar-toggler-icon {
4256
  display: inline-block;
4257
  width: 1.5em;
@@ -4629,7 +4608,6 @@ input[type="button"].btn-block {
4629
  .card-header {
4630
  padding: 0.75rem 1.25rem;
4631
  margin-bottom: 0;
4632
- color: inherit;
4633
  background-color: rgba(0, 0, 0, 0.03);
4634
  border-bottom: 1px solid rgba(0, 0, 0, 0.125);
4635
  }
@@ -4746,52 +4724,30 @@ input[type="button"].btn-block {
4746
  margin-left: 0;
4747
  border-left: 0;
4748
  }
4749
- .card-group > .card:first-child {
4750
  border-top-right-radius: 0;
4751
  border-bottom-right-radius: 0;
4752
  }
4753
- .card-group > .card:first-child .card-img-top,
4754
- .card-group > .card:first-child .card-header {
4755
  border-top-right-radius: 0;
4756
  }
4757
- .card-group > .card:first-child .card-img-bottom,
4758
- .card-group > .card:first-child .card-footer {
4759
  border-bottom-right-radius: 0;
4760
  }
4761
- .card-group > .card:last-child {
4762
  border-top-left-radius: 0;
4763
  border-bottom-left-radius: 0;
4764
  }
4765
- .card-group > .card:last-child .card-img-top,
4766
- .card-group > .card:last-child .card-header {
4767
  border-top-left-radius: 0;
4768
  }
4769
- .card-group > .card:last-child .card-img-bottom,
4770
- .card-group > .card:last-child .card-footer {
4771
  border-bottom-left-radius: 0;
4772
  }
4773
- .card-group > .card:only-child {
4774
- border-radius: 0.25rem;
4775
- }
4776
- .card-group > .card:only-child .card-img-top,
4777
- .card-group > .card:only-child .card-header {
4778
- border-top-left-radius: 0.25rem;
4779
- border-top-right-radius: 0.25rem;
4780
- }
4781
- .card-group > .card:only-child .card-img-bottom,
4782
- .card-group > .card:only-child .card-footer {
4783
- border-bottom-right-radius: 0.25rem;
4784
- border-bottom-left-radius: 0.25rem;
4785
- }
4786
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {
4787
- border-radius: 0;
4788
- }
4789
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,
4790
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,
4791
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,
4792
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {
4793
- border-radius: 0;
4794
- }
4795
  }
4796
 
4797
  .card-columns .card {
@@ -4815,31 +4771,31 @@ input[type="button"].btn-block {
4815
  }
4816
  }
4817
 
4818
- .accordion .card {
4819
  overflow: hidden;
4820
  }
4821
 
4822
- .accordion .card:not(:first-of-type) .card-header:first-child {
4823
  border-radius: 0;
4824
  }
4825
 
4826
- .accordion .card:not(:first-of-type):not(:last-of-type) {
4827
  border-bottom: 0;
4828
  border-radius: 0;
4829
  }
4830
 
4831
- .accordion .card:first-of-type {
4832
  border-bottom: 0;
4833
  border-bottom-right-radius: 0;
4834
  border-bottom-left-radius: 0;
4835
  }
4836
 
4837
- .accordion .card:last-of-type {
4838
  border-top-left-radius: 0;
4839
  border-top-right-radius: 0;
4840
  }
4841
 
4842
- .accordion .card .card-header {
4843
  margin-bottom: -1px;
4844
  }
4845
 
@@ -4911,10 +4867,6 @@ input[type="button"].btn-block {
4911
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
4912
  }
4913
 
4914
- .page-link:not(:disabled):not(.disabled) {
4915
- cursor: pointer;
4916
- }
4917
-
4918
  .page-item:first-child .page-link {
4919
  margin-left: 0;
4920
  border-top-left-radius: 0.25rem;
@@ -4983,6 +4935,13 @@ input[type="button"].btn-block {
4983
  white-space: nowrap;
4984
  vertical-align: baseline;
4985
  border-radius: 0.25rem;
 
 
 
 
 
 
 
4986
  }
4987
 
4988
  a.badge:hover, a.badge:focus {
@@ -5014,6 +4973,11 @@ a.badge-primary:hover, a.badge-primary:focus {
5014
  background-color: #0062cc;
5015
  }
5016
 
 
 
 
 
 
5017
  .badge-secondary {
5018
  color: #fff;
5019
  background-color: #6c757d;
@@ -5024,6 +4988,11 @@ a.badge-secondary:hover, a.badge-secondary:focus {
5024
  background-color: #545b62;
5025
  }
5026
 
 
 
 
 
 
5027
  .badge-success {
5028
  color: #fff;
5029
  background-color: #28a745;
@@ -5034,6 +5003,11 @@ a.badge-success:hover, a.badge-success:focus {
5034
  background-color: #1e7e34;
5035
  }
5036
 
 
 
 
 
 
5037
  .badge-info {
5038
  color: #fff;
5039
  background-color: #17a2b8;
@@ -5044,6 +5018,11 @@ a.badge-info:hover, a.badge-info:focus {
5044
  background-color: #117a8b;
5045
  }
5046
 
 
 
 
 
 
5047
  .badge-warning {
5048
  color: #212529;
5049
  background-color: #ffc107;
@@ -5054,6 +5033,11 @@ a.badge-warning:hover, a.badge-warning:focus {
5054
  background-color: #d39e00;
5055
  }
5056
 
 
 
 
 
 
5057
  .badge-danger {
5058
  color: #fff;
5059
  background-color: #dc3545;
@@ -5064,6 +5048,11 @@ a.badge-danger:hover, a.badge-danger:focus {
5064
  background-color: #bd2130;
5065
  }
5066
 
 
 
 
 
 
5067
  .badge-light {
5068
  color: #212529;
5069
  background-color: #f8f9fa;
@@ -5074,6 +5063,11 @@ a.badge-light:hover, a.badge-light:focus {
5074
  background-color: #dae0e5;
5075
  }
5076
 
 
 
 
 
 
5077
  .badge-dark {
5078
  color: #fff;
5079
  background-color: #343a40;
@@ -5084,6 +5078,11 @@ a.badge-dark:hover, a.badge-dark:focus {
5084
  background-color: #1d2124;
5085
  }
5086
 
 
 
 
 
 
5087
  .jumbotron {
5088
  padding: 2rem 1rem;
5089
  margin-bottom: 2rem;
@@ -5285,7 +5284,7 @@ a.badge-dark:hover, a.badge-dark:focus {
5285
  transition: width 0.6s ease;
5286
  }
5287
 
5288
- @media screen and (prefers-reduced-motion: reduce) {
5289
  .progress-bar {
5290
  transition: none;
5291
  }
@@ -5301,6 +5300,13 @@ a.badge-dark:hover, a.badge-dark:focus {
5301
  animation: progress-bar-stripes 1s linear infinite;
5302
  }
5303
 
 
 
 
 
 
 
 
5304
  .media {
5305
  display: -ms-flexbox;
5306
  display: flex;
@@ -5329,6 +5335,7 @@ a.badge-dark:hover, a.badge-dark:focus {
5329
  }
5330
 
5331
  .list-group-item-action:hover, .list-group-item-action:focus {
 
5332
  color: #495057;
5333
  text-decoration: none;
5334
  background-color: #f8f9fa;
@@ -5359,11 +5366,6 @@ a.badge-dark:hover, a.badge-dark:focus {
5359
  border-bottom-left-radius: 0.25rem;
5360
  }
5361
 
5362
- .list-group-item:hover, .list-group-item:focus {
5363
- z-index: 1;
5364
- text-decoration: none;
5365
- }
5366
-
5367
  .list-group-item.disabled, .list-group-item:disabled {
5368
  color: #6c757d;
5369
  pointer-events: none;
@@ -5377,6 +5379,117 @@ a.badge-dark:hover, a.badge-dark:focus {
5377
  border-color: #007bff;
5378
  }
5379
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5380
  .list-group-flush .list-group-item {
5381
  border-right: 0;
5382
  border-left: 0;
@@ -5539,10 +5652,6 @@ a.badge-dark:hover, a.badge-dark:focus {
5539
  text-decoration: none;
5540
  }
5541
 
5542
- .close:not(:disabled):not(.disabled) {
5543
- cursor: pointer;
5544
- }
5545
-
5546
  .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {
5547
  opacity: .75;
5548
  }
@@ -5567,11 +5676,11 @@ a.close.disabled {
5567
  background-color: rgba(255, 255, 255, 0.85);
5568
  background-clip: padding-box;
5569
  border: 1px solid rgba(0, 0, 0, 0.1);
5570
- border-radius: 0.25rem;
5571
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
5572
  -webkit-backdrop-filter: blur(10px);
5573
  backdrop-filter: blur(10px);
5574
  opacity: 0;
 
5575
  }
5576
 
5577
  .toast:not(:last-child) {
@@ -5643,7 +5752,7 @@ a.close.disabled {
5643
  transform: translate(0, -50px);
5644
  }
5645
 
5646
- @media screen and (prefers-reduced-motion: reduce) {
5647
  .modal.fade .modal-dialog {
5648
  transition: none;
5649
  }
@@ -5654,20 +5763,57 @@ a.close.disabled {
5654
  transform: none;
5655
  }
5656
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5657
  .modal-dialog-centered {
5658
  display: -ms-flexbox;
5659
  display: flex;
5660
  -ms-flex-align: center;
5661
  align-items: center;
5662
- min-height: calc(100% - (0.5rem * 2));
5663
  }
5664
 
5665
  .modal-dialog-centered::before {
5666
  display: block;
5667
- height: calc(100vh - (0.5rem * 2));
5668
  content: "";
5669
  }
5670
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5671
  .modal-content {
5672
  position: relative;
5673
  display: -ms-flexbox;
@@ -5709,7 +5855,7 @@ a.close.disabled {
5709
  -ms-flex-pack: justify;
5710
  justify-content: space-between;
5711
  padding: 1rem 1rem;
5712
- border-bottom: 1px solid #e9ecef;
5713
  border-top-left-radius: 0.3rem;
5714
  border-top-right-radius: 0.3rem;
5715
  }
@@ -5739,7 +5885,7 @@ a.close.disabled {
5739
  -ms-flex-pack: end;
5740
  justify-content: flex-end;
5741
  padding: 1rem;
5742
- border-top: 1px solid #e9ecef;
5743
  border-bottom-right-radius: 0.3rem;
5744
  border-bottom-left-radius: 0.3rem;
5745
  }
@@ -5765,11 +5911,17 @@ a.close.disabled {
5765
  max-width: 500px;
5766
  margin: 1.75rem auto;
5767
  }
 
 
 
 
 
 
5768
  .modal-dialog-centered {
5769
- min-height: calc(100% - (1.75rem * 2));
5770
  }
5771
  .modal-dialog-centered::before {
5772
- height: calc(100vh - (1.75rem * 2));
5773
  }
5774
  .modal-sm {
5775
  max-width: 300px;
@@ -5949,25 +6101,19 @@ a.close.disabled {
5949
  margin-bottom: 0.5rem;
5950
  }
5951
 
5952
- .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow {
5953
  bottom: calc((0.5rem + 1px) * -1);
5954
  }
5955
 
5956
- .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before,
5957
- .bs-popover-top .arrow::after,
5958
- .bs-popover-auto[x-placement^="top"] .arrow::after {
5959
- border-width: 0.5rem 0.5rem 0;
5960
- }
5961
-
5962
- .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before {
5963
  bottom: 0;
 
5964
  border-top-color: rgba(0, 0, 0, 0.25);
5965
  }
5966
 
5967
-
5968
- .bs-popover-top .arrow::after,
5969
- .bs-popover-auto[x-placement^="top"] .arrow::after {
5970
  bottom: 1px;
 
5971
  border-top-color: #fff;
5972
  }
5973
 
@@ -5975,28 +6121,22 @@ a.close.disabled {
5975
  margin-left: 0.5rem;
5976
  }
5977
 
5978
- .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow {
5979
  left: calc((0.5rem + 1px) * -1);
5980
  width: 0.5rem;
5981
  height: 1rem;
5982
  margin: 0.3rem 0;
5983
  }
5984
 
5985
- .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before,
5986
- .bs-popover-right .arrow::after,
5987
- .bs-popover-auto[x-placement^="right"] .arrow::after {
5988
- border-width: 0.5rem 0.5rem 0.5rem 0;
5989
- }
5990
-
5991
- .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before {
5992
  left: 0;
 
5993
  border-right-color: rgba(0, 0, 0, 0.25);
5994
  }
5995
 
5996
-
5997
- .bs-popover-right .arrow::after,
5998
- .bs-popover-auto[x-placement^="right"] .arrow::after {
5999
  left: 1px;
 
6000
  border-right-color: #fff;
6001
  }
6002
 
@@ -6004,25 +6144,19 @@ a.close.disabled {
6004
  margin-top: 0.5rem;
6005
  }
6006
 
6007
- .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow {
6008
  top: calc((0.5rem + 1px) * -1);
6009
  }
6010
 
6011
- .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before,
6012
- .bs-popover-bottom .arrow::after,
6013
- .bs-popover-auto[x-placement^="bottom"] .arrow::after {
6014
- border-width: 0 0.5rem 0.5rem 0.5rem;
6015
- }
6016
-
6017
- .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before {
6018
  top: 0;
 
6019
  border-bottom-color: rgba(0, 0, 0, 0.25);
6020
  }
6021
 
6022
-
6023
- .bs-popover-bottom .arrow::after,
6024
- .bs-popover-auto[x-placement^="bottom"] .arrow::after {
6025
  top: 1px;
 
6026
  border-bottom-color: #fff;
6027
  }
6028
 
@@ -6041,28 +6175,22 @@ a.close.disabled {
6041
  margin-right: 0.5rem;
6042
  }
6043
 
6044
- .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow {
6045
  right: calc((0.5rem + 1px) * -1);
6046
  width: 0.5rem;
6047
  height: 1rem;
6048
  margin: 0.3rem 0;
6049
  }
6050
 
6051
- .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before,
6052
- .bs-popover-left .arrow::after,
6053
- .bs-popover-auto[x-placement^="left"] .arrow::after {
6054
- border-width: 0.5rem 0 0.5rem 0.5rem;
6055
- }
6056
-
6057
- .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before {
6058
  right: 0;
 
6059
  border-left-color: rgba(0, 0, 0, 0.25);
6060
  }
6061
 
6062
-
6063
- .bs-popover-left .arrow::after,
6064
- .bs-popover-auto[x-placement^="left"] .arrow::after {
6065
  right: 1px;
 
6066
  border-left-color: #fff;
6067
  }
6068
 
@@ -6070,7 +6198,6 @@ a.close.disabled {
6070
  padding: 0.5rem 0.75rem;
6071
  margin-bottom: 0;
6072
  font-size: 1rem;
6073
- color: inherit;
6074
  background-color: #f7f7f7;
6075
  border-bottom: 1px solid #ebebeb;
6076
  border-top-left-radius: calc(0.3rem - 1px);
@@ -6120,7 +6247,7 @@ a.close.disabled {
6120
  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
6121
  }
6122
 
6123
- @media screen and (prefers-reduced-motion: reduce) {
6124
  .carousel-item {
6125
  transition: none;
6126
  }
@@ -6165,7 +6292,7 @@ a.close.disabled {
6165
  transition: 0s 0.6s opacity;
6166
  }
6167
 
6168
- @media screen and (prefers-reduced-motion: reduce) {
6169
  .carousel-fade .active.carousel-item-left,
6170
  .carousel-fade .active.carousel-item-right {
6171
  transition: none;
@@ -6191,7 +6318,7 @@ a.close.disabled {
6191
  transition: opacity 0.15s ease;
6192
  }
6193
 
6194
- @media screen and (prefers-reduced-motion: reduce) {
6195
  .carousel-control-prev,
6196
  .carousel-control-next {
6197
  transition: none;
@@ -6220,8 +6347,7 @@ a.close.disabled {
6220
  display: inline-block;
6221
  width: 20px;
6222
  height: 20px;
6223
- background: transparent no-repeat center center;
6224
- background-size: 100% 100%;
6225
  }
6226
 
6227
  .carousel-control-prev-icon {
@@ -6266,7 +6392,7 @@ a.close.disabled {
6266
  transition: opacity 0.6s ease;
6267
  }
6268
 
6269
- @media screen and (prefers-reduced-motion: reduce) {
6270
  .carousel-indicators li {
6271
  transition: none;
6272
  }
@@ -6545,6 +6671,10 @@ button.bg-dark:focus {
6545
  border-color: #fff !important;
6546
  }
6547
 
 
 
 
 
6548
  .rounded {
6549
  border-radius: 0.25rem !important;
6550
  }
@@ -6569,6 +6699,10 @@ button.bg-dark:focus {
6569
  border-bottom-left-radius: 0.25rem !important;
6570
  }
6571
 
 
 
 
 
6572
  .rounded-circle {
6573
  border-radius: 50% !important;
6574
  }
@@ -6820,8 +6954,8 @@ button.bg-dark:focus {
6820
  padding-top: 56.25%;
6821
  }
6822
 
6823
- .embed-responsive-3by4::before {
6824
- padding-top: 133.333333%;
6825
  }
6826
 
6827
  .embed-responsive-1by1::before {
@@ -7768,6 +7902,18 @@ button.bg-dark:focus {
7768
  height: 100vh !important;
7769
  }
7770
 
 
 
 
 
 
 
 
 
 
 
 
 
7771
  .m-0 {
7772
  margin: 0 !important;
7773
  }
@@ -9581,7 +9727,7 @@ button.bg-dark:focus {
9581
  }
9582
 
9583
  .text-monospace {
9584
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
9585
  }
9586
 
9587
  .text-justify {
@@ -9794,6 +9940,11 @@ a.text-dark:hover, a.text-dark:focus {
9794
  text-decoration: none !important;
9795
  }
9796
 
 
 
 
 
 
9797
  .text-reset {
9798
  color: inherit !important;
9799
  }
1
  /*!
2
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 The Bootstrap Authors
4
+ * Copyright 2011-2019 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
  */
7
  :root {
90
  text-decoration: underline dotted;
91
  cursor: help;
92
  border-bottom: 0;
93
+ -webkit-text-decoration-skip-ink: none;
94
  text-decoration-skip-ink: none;
95
  }
96
 
256
  text-transform: none;
257
  }
258
 
259
+ select {
260
+ word-wrap: normal;
261
+ }
262
+
263
  button,
264
  [type="button"],
265
  [type="reset"],
267
  -webkit-appearance: button;
268
  }
269
 
270
+ button:not(:disabled),
271
+ [type="button"]:not(:disabled),
272
+ [type="reset"]:not(:disabled),
273
+ [type="submit"]:not(:disabled) {
274
+ cursor: pointer;
275
+ }
276
+
277
  button::-moz-focus-inner,
278
  [type="button"]::-moz-focus-inner,
279
  [type="reset"]::-moz-focus-inner,
362
  h1, h2, h3, h4, h5, h6,
363
  .h1, .h2, .h3, .h4, .h5, .h6 {
364
  margin-bottom: 0.5rem;
 
365
  font-weight: 500;
366
  line-height: 1.2;
 
367
  }
368
 
369
  h1, .h1 {
1514
  .table {
1515
  width: 100%;
1516
  margin-bottom: 1rem;
1517
+ color: #212529;
1518
  }
1519
 
1520
  .table th,
1533
  border-top: 2px solid #dee2e6;
1534
  }
1535
 
 
 
 
 
1536
  .table-sm th,
1537
  .table-sm td {
1538
  padding: 0.3rem;
1564
  }
1565
 
1566
  .table-hover tbody tr:hover {
1567
+ color: #212529;
1568
  background-color: rgba(0, 0, 0, 0.075);
1569
  }
1570
 
1761
 
1762
  .table .thead-dark th {
1763
  color: #fff;
1764
+ background-color: #343a40;
1765
+ border-color: #454d55;
1766
  }
1767
 
1768
  .table .thead-light th {
1773
 
1774
  .table-dark {
1775
  color: #fff;
1776
+ background-color: #343a40;
1777
  }
1778
 
1779
  .table-dark th,
1780
  .table-dark td,
1781
  .table-dark thead th {
1782
+ border-color: #454d55;
1783
  }
1784
 
1785
  .table-dark.table-bordered {
1791
  }
1792
 
1793
  .table-dark.table-hover tbody tr:hover {
1794
+ color: #fff;
1795
  background-color: rgba(255, 255, 255, 0.075);
1796
  }
1797
 
1801
  width: 100%;
1802
  overflow-x: auto;
1803
  -webkit-overflow-scrolling: touch;
 
1804
  }
1805
  .table-responsive-sm > .table-bordered {
1806
  border: 0;
1813
  width: 100%;
1814
  overflow-x: auto;
1815
  -webkit-overflow-scrolling: touch;
 
1816
  }
1817
  .table-responsive-md > .table-bordered {
1818
  border: 0;
1825
  width: 100%;
1826
  overflow-x: auto;
1827
  -webkit-overflow-scrolling: touch;
 
1828
  }
1829
  .table-responsive-lg > .table-bordered {
1830
  border: 0;
1837
  width: 100%;
1838
  overflow-x: auto;
1839
  -webkit-overflow-scrolling: touch;
 
1840
  }
1841
  .table-responsive-xl > .table-bordered {
1842
  border: 0;
1848
  width: 100%;
1849
  overflow-x: auto;
1850
  -webkit-overflow-scrolling: touch;
 
1851
  }
1852
 
1853
  .table-responsive > .table-bordered {
1857
  .form-control {
1858
  display: block;
1859
  width: 100%;
1860
+ height: calc(1.5em + 0.75rem + 2px);
1861
  padding: 0.375rem 0.75rem;
1862
  font-size: 1rem;
1863
  font-weight: 400;
1870
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1871
  }
1872
 
1873
+ @media (prefers-reduced-motion: reduce) {
1874
  .form-control {
1875
  transition: none;
1876
  }
1971
  }
1972
 
1973
  .form-control-sm {
1974
+ height: calc(1.5em + 0.5rem + 2px);
1975
  padding: 0.25rem 0.5rem;
1976
  font-size: 0.875rem;
1977
  line-height: 1.5;
1979
  }
1980
 
1981
  .form-control-lg {
1982
+ height: calc(1.5em + 1rem + 2px);
1983
  padding: 0.5rem 1rem;
1984
  font-size: 1.25rem;
1985
  line-height: 1.5;
2079
 
2080
  .was-validated .form-control:valid, .form-control.is-valid {
2081
  border-color: #28a745;
2082
+ padding-right: calc(1.5em + 0.75rem);
 
 
 
2083
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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");
2084
+ background-repeat: no-repeat;
2085
+ background-position: center right calc(0.375em + 0.1875rem);
2086
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
2087
  }
2088
 
2089
  .was-validated .form-control:valid:focus, .form-control.is-valid:focus {
2098
  }
2099
 
2100
  .was-validated textarea.form-control:valid, textarea.form-control.is-valid {
2101
+ padding-right: calc(1.5em + 0.75rem);
2102
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
2103
  }
2104
 
2105
  .was-validated .custom-select:valid, .custom-select.is-valid {
2106
  border-color: #28a745;
2107
+ padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
2108
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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(0.75em + 0.375rem) calc(0.75em + 0.375rem);
2109
  }
2110
 
2111
  .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
2202
 
2203
  .was-validated .form-control:invalid, .form-control.is-invalid {
2204
  border-color: #dc3545;
2205
+ padding-right: calc(1.5em + 0.75rem);
2206
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
2207
  background-repeat: no-repeat;
2208
+ background-position: center right calc(0.375em + 0.1875rem);
2209
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
 
2210
  }
2211
 
2212
  .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
2221
  }
2222
 
2223
  .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
2224
+ padding-right: calc(1.5em + 0.75rem);
2225
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
2226
  }
2227
 
2228
  .was-validated .custom-select:invalid, .custom-select.is-invalid {
2229
  border-color: #dc3545;
2230
+ padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
2231
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
2232
  }
2233
 
2234
  .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
2358
  }
2359
  .form-inline .form-check-input {
2360
  position: relative;
2361
+ -ms-flex-negative: 0;
2362
+ flex-shrink: 0;
2363
  margin-top: 0;
2364
  margin-right: 0.25rem;
2365
  margin-left: 0;
2394
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
2395
  }
2396
 
2397
+ @media (prefers-reduced-motion: reduce) {
2398
  .btn {
2399
  transition: none;
2400
  }
2414
  opacity: 0.65;
2415
  }
2416
 
 
 
 
 
2417
  a.btn.disabled,
2418
  fieldset:disabled a.btn {
2419
  pointer-events: none;
2950
  .btn-link {
2951
  font-weight: 400;
2952
  color: #007bff;
2953
+ text-decoration: none;
2954
  }
2955
 
2956
  .btn-link:hover {
3001
  transition: opacity 0.15s linear;
3002
  }
3003
 
3004
+ @media (prefers-reduced-motion: reduce) {
3005
  .fade {
3006
  transition: none;
3007
  }
3022
  transition: height 0.35s ease;
3023
  }
3024
 
3025
+ @media (prefers-reduced-motion: reduce) {
3026
  .collapsing {
3027
  transition: none;
3028
  }
3035
  position: relative;
3036
  }
3037
 
3038
+ .dropdown-toggle {
3039
+ white-space: nowrap;
3040
+ }
3041
+
3042
  .dropdown-toggle::after {
3043
  display: inline-block;
3044
  margin-left: 0.255em;
3074
  border-radius: 0.25rem;
3075
  }
3076
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3077
  .dropdown-menu-left {
3078
  right: auto;
3079
  left: 0;
3080
  }
3081
 
3082
+ .dropdown-menu-right {
3083
+ right: 0;
3084
+ left: auto;
3085
+ }
3086
+
3087
  @media (min-width: 576px) {
3088
  .dropdown-menu-sm-left {
3089
  right: auto;
3090
  left: 0;
3091
  }
3092
+ .dropdown-menu-sm-right {
3093
+ right: 0;
3094
+ left: auto;
3095
+ }
3096
  }
3097
 
3098
  @media (min-width: 768px) {
3100
  right: auto;
3101
  left: 0;
3102
  }
3103
+ .dropdown-menu-md-right {
3104
+ right: 0;
3105
+ left: auto;
3106
+ }
3107
  }
3108
 
3109
  @media (min-width: 992px) {
3111
  right: auto;
3112
  left: 0;
3113
  }
3114
+ .dropdown-menu-lg-right {
3115
+ right: 0;
3116
+ left: auto;
3117
+ }
3118
  }
3119
 
3120
  @media (min-width: 1200px) {
3122
  right: auto;
3123
  left: 0;
3124
  }
3125
+ .dropdown-menu-xl-right {
3126
+ right: 0;
3127
+ left: auto;
3128
+ }
3129
  }
3130
 
3131
  .dropup .dropdown-menu {
3239
  border: 0;
3240
  }
3241
 
 
 
 
 
 
 
 
 
 
 
3242
  .dropdown-item:hover, .dropdown-item:focus {
3243
  color: #16181b;
3244
  text-decoration: none;
3541
 
3542
  .input-group-lg > .form-control:not(textarea),
3543
  .input-group-lg > .custom-select {
3544
+ height: calc(1.5em + 1rem + 2px);
3545
  }
3546
 
3547
  .input-group-lg > .form-control,
3558
 
3559
  .input-group-sm > .form-control:not(textarea),
3560
  .input-group-sm > .custom-select {
3561
+ height: calc(1.5em + 0.5rem + 2px);
3562
  }
3563
 
3564
  .input-group-sm > .form-control,
3672
  width: 1rem;
3673
  height: 1rem;
3674
  content: "";
3675
+ background: no-repeat 50% / 50% 50%;
 
 
3676
  }
3677
 
3678
  .custom-checkbox .custom-control-label::before {
3735
  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;
3736
  }
3737
 
3738
+ @media (prefers-reduced-motion: reduce) {
3739
  .custom-switch .custom-control-label::after {
3740
  transition: none;
3741
  }
3754
  .custom-select {
3755
  display: inline-block;
3756
  width: 100%;
3757
+ height: calc(1.5em + 0.75rem + 2px);
3758
  padding: 0.375rem 1.75rem 0.375rem 0.75rem;
3759
+ font-size: 1rem;
3760
  font-weight: 400;
3761
  line-height: 1.5;
3762
  color: #495057;
3773
  .custom-select:focus {
3774
  border-color: #80bdff;
3775
  outline: 0;
3776
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
3777
  }
3778
 
3779
  .custom-select:focus::-ms-value {
3793
  }
3794
 
3795
  .custom-select::-ms-expand {
3796
+ display: none;
3797
  }
3798
 
3799
  .custom-select-sm {
3800
+ height: calc(1.5em + 0.5rem + 2px);
3801
  padding-top: 0.25rem;
3802
  padding-bottom: 0.25rem;
3803
  padding-left: 0.5rem;
3805
  }
3806
 
3807
  .custom-select-lg {
3808
+ height: calc(1.5em + 1rem + 2px);
3809
  padding-top: 0.5rem;
3810
  padding-bottom: 0.5rem;
3811
  padding-left: 1rem;
3816
  position: relative;
3817
  display: inline-block;
3818
  width: 100%;
3819
+ height: calc(1.5em + 0.75rem + 2px);
3820
  margin-bottom: 0;
3821
  }
3822
 
3824
  position: relative;
3825
  z-index: 2;
3826
  width: 100%;
3827
+ height: calc(1.5em + 0.75rem + 2px);
3828
  margin: 0;
3829
  opacity: 0;
3830
  }
3852
  right: 0;
3853
  left: 0;
3854
  z-index: 1;
3855
+ height: calc(1.5em + 0.75rem + 2px);
3856
  padding: 0.375rem 0.75rem;
3857
  font-weight: 400;
3858
  line-height: 1.5;
3869
  bottom: 0;
3870
  z-index: 3;
3871
  display: block;
3872
+ height: calc(1.5em + 0.75rem);
3873
  padding: 0.375rem 0.75rem;
3874
  line-height: 1.5;
3875
  color: #495057;
3921
  appearance: none;
3922
  }
3923
 
3924
+ @media (prefers-reduced-motion: reduce) {
3925
  .custom-range::-webkit-slider-thumb {
3926
  transition: none;
3927
  }
3952
  appearance: none;
3953
  }
3954
 
3955
+ @media (prefers-reduced-motion: reduce) {
3956
  .custom-range::-moz-range-thumb {
3957
  transition: none;
3958
  }
3985
  appearance: none;
3986
  }
3987
 
3988
+ @media (prefers-reduced-motion: reduce) {
3989
  .custom-range::-ms-thumb {
3990
  transition: none;
3991
  }
4042
  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
4043
  }
4044
 
4045
+ @media (prefers-reduced-motion: reduce) {
4046
  .custom-control-label::before,
4047
  .custom-file-label,
4048
  .custom-select {
4231
  text-decoration: none;
4232
  }
4233
 
 
 
 
 
4234
  .navbar-toggler-icon {
4235
  display: inline-block;
4236
  width: 1.5em;
4608
  .card-header {
4609
  padding: 0.75rem 1.25rem;
4610
  margin-bottom: 0;
 
4611
  background-color: rgba(0, 0, 0, 0.03);
4612
  border-bottom: 1px solid rgba(0, 0, 0, 0.125);
4613
  }
4724
  margin-left: 0;
4725
  border-left: 0;
4726
  }
4727
+ .card-group > .card:not(:last-child) {
4728
  border-top-right-radius: 0;
4729
  border-bottom-right-radius: 0;
4730
  }
4731
+ .card-group > .card:not(:last-child) .card-img-top,
4732
+ .card-group > .card:not(:last-child) .card-header {
4733
  border-top-right-radius: 0;
4734
  }
4735
+ .card-group > .card:not(:last-child) .card-img-bottom,
4736
+ .card-group > .card:not(:last-child) .card-footer {
4737
  border-bottom-right-radius: 0;
4738
  }
4739
+ .card-group > .card:not(:first-child) {
4740
  border-top-left-radius: 0;
4741
  border-bottom-left-radius: 0;
4742
  }
4743
+ .card-group > .card:not(:first-child) .card-img-top,
4744
+ .card-group > .card:not(:first-child) .card-header {
4745
  border-top-left-radius: 0;
4746
  }
4747
+ .card-group > .card:not(:first-child) .card-img-bottom,
4748
+ .card-group > .card:not(:first-child) .card-footer {
4749
  border-bottom-left-radius: 0;
4750
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4751
  }
4752
 
4753
  .card-columns .card {
4771
  }
4772
  }
4773
 
4774
+ .accordion > .card {
4775
  overflow: hidden;
4776
  }
4777
 
4778
+ .accordion > .card:not(:first-of-type) .card-header:first-child {
4779
  border-radius: 0;
4780
  }
4781
 
4782
+ .accordion > .card:not(:first-of-type):not(:last-of-type) {
4783
  border-bottom: 0;
4784
  border-radius: 0;
4785
  }
4786
 
4787
+ .accordion > .card:first-of-type {
4788
  border-bottom: 0;
4789
  border-bottom-right-radius: 0;
4790
  border-bottom-left-radius: 0;
4791
  }
4792
 
4793
+ .accordion > .card:last-of-type {
4794
  border-top-left-radius: 0;
4795
  border-top-right-radius: 0;
4796
  }
4797
 
4798
+ .accordion > .card .card-header {
4799
  margin-bottom: -1px;
4800
  }
4801
 
4867
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
4868
  }
4869
 
 
 
 
 
4870
  .page-item:first-child .page-link {
4871
  margin-left: 0;
4872
  border-top-left-radius: 0.25rem;
4935
  white-space: nowrap;
4936
  vertical-align: baseline;
4937
  border-radius: 0.25rem;
4938
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
4939
+ }
4940
+
4941
+ @media (prefers-reduced-motion: reduce) {
4942
+ .badge {
4943
+ transition: none;
4944
+ }
4945
  }
4946
 
4947
  a.badge:hover, a.badge:focus {
4973
  background-color: #0062cc;
4974
  }
4975
 
4976
+ a.badge-primary:focus, a.badge-primary.focus {
4977
+ outline: 0;
4978
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
4979
+ }
4980
+
4981
  .badge-secondary {
4982
  color: #fff;
4983
  background-color: #6c757d;
4988
  background-color: #545b62;
4989
  }
4990
 
4991
+ a.badge-secondary:focus, a.badge-secondary.focus {
4992
+ outline: 0;
4993
+ box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
4994
+ }
4995
+
4996
  .badge-success {
4997
  color: #fff;
4998
  background-color: #28a745;
5003
  background-color: #1e7e34;
5004
  }
5005
 
5006
+ a.badge-success:focus, a.badge-success.focus {
5007
+ outline: 0;
5008
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
5009
+ }
5010
+
5011
  .badge-info {
5012
  color: #fff;
5013
  background-color: #17a2b8;
5018
  background-color: #117a8b;
5019
  }
5020
 
5021
+ a.badge-info:focus, a.badge-info.focus {
5022
+ outline: 0;
5023
+ box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
5024
+ }
5025
+
5026
  .badge-warning {
5027
  color: #212529;
5028
  background-color: #ffc107;
5033
  background-color: #d39e00;
5034
  }
5035
 
5036
+ a.badge-warning:focus, a.badge-warning.focus {
5037
+ outline: 0;
5038
+ box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
5039
+ }
5040
+
5041
  .badge-danger {
5042
  color: #fff;
5043
  background-color: #dc3545;
5048
  background-color: #bd2130;
5049
  }
5050
 
5051
+ a.badge-danger:focus, a.badge-danger.focus {
5052
+ outline: 0;
5053
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
5054
+ }
5055
+
5056
  .badge-light {
5057
  color: #212529;
5058
  background-color: #f8f9fa;
5063
  background-color: #dae0e5;
5064
  }
5065
 
5066
+ a.badge-light:focus, a.badge-light.focus {
5067
+ outline: 0;
5068
+ box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
5069
+ }
5070
+
5071
  .badge-dark {
5072
  color: #fff;
5073
  background-color: #343a40;
5078
  background-color: #1d2124;
5079
  }
5080
 
5081
+ a.badge-dark:focus, a.badge-dark.focus {
5082
+ outline: 0;
5083
+ box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
5084
+ }
5085
+
5086
  .jumbotron {
5087
  padding: 2rem 1rem;
5088
  margin-bottom: 2rem;
5284
  transition: width 0.6s ease;
5285
  }
5286
 
5287
+ @media (prefers-reduced-motion: reduce) {
5288
  .progress-bar {
5289
  transition: none;
5290
  }
5300
  animation: progress-bar-stripes 1s linear infinite;
5301
  }
5302
 
5303
+ @media (prefers-reduced-motion: reduce) {
5304
+ .progress-bar-animated {
5305
+ -webkit-animation: none;
5306
+ animation: none;
5307
+ }
5308
+ }
5309
+
5310
  .media {
5311
  display: -ms-flexbox;
5312
  display: flex;
5335
  }
5336
 
5337
  .list-group-item-action:hover, .list-group-item-action:focus {
5338
+ z-index: 1;
5339
  color: #495057;
5340
  text-decoration: none;
5341
  background-color: #f8f9fa;
5366
  border-bottom-left-radius: 0.25rem;
5367
  }
5368
 
 
 
 
 
 
5369
  .list-group-item.disabled, .list-group-item:disabled {
5370
  color: #6c757d;
5371
  pointer-events: none;
5379
  border-color: #007bff;
5380
  }
5381
 
5382
+ .list-group-horizontal {
5383
+ -ms-flex-direction: row;
5384
+ flex-direction: row;
5385
+ }
5386
+
5387
+ .list-group-horizontal .list-group-item {
5388
+ margin-right: -1px;
5389
+ margin-bottom: 0;
5390
+ }
5391
+
5392
+ .list-group-horizontal .list-group-item:first-child {
5393
+ border-top-left-radius: 0.25rem;
5394
+ border-bottom-left-radius: 0.25rem;
5395
+ border-top-right-radius: 0;
5396
+ }
5397
+
5398
+ .list-group-horizontal .list-group-item:last-child {
5399
+ margin-right: 0;
5400
+ border-top-right-radius: 0.25rem;
5401
+ border-bottom-right-radius: 0.25rem;
5402
+ border-bottom-left-radius: 0;
5403
+ }
5404
+
5405
+ @media (min-width: 576px) {
5406
+ .list-group-horizontal-sm {
5407
+ -ms-flex-direction: row;
5408
+ flex-direction: row;
5409
+ }
5410
+ .list-group-horizontal-sm .list-group-item {
5411
+ margin-right: -1px;
5412
+ margin-bottom: 0;
5413
+ }
5414
+ .list-group-horizontal-sm .list-group-item:first-child {
5415
+ border-top-left-radius: 0.25rem;
5416
+ border-bottom-left-radius: 0.25rem;
5417
+ border-top-right-radius: 0;
5418
+ }
5419
+ .list-group-horizontal-sm .list-group-item:last-child {
5420
+ margin-right: 0;
5421
+ border-top-right-radius: 0.25rem;
5422
+ border-bottom-right-radius: 0.25rem;
5423
+ border-bottom-left-radius: 0;
5424
+ }
5425
+ }
5426
+
5427
+ @media (min-width: 768px) {
5428
+ .list-group-horizontal-md {
5429
+ -ms-flex-direction: row;
5430
+ flex-direction: row;
5431
+ }
5432
+ .list-group-horizontal-md .list-group-item {
5433
+ margin-right: -1px;
5434
+ margin-bottom: 0;
5435
+ }
5436
+ .list-group-horizontal-md .list-group-item:first-child {
5437
+ border-top-left-radius: 0.25rem;
5438
+ border-bottom-left-radius: 0.25rem;
5439
+ border-top-right-radius: 0;
5440
+ }
5441
+ .list-group-horizontal-md .list-group-item:last-child {
5442
+ margin-right: 0;
5443
+ border-top-right-radius: 0.25rem;
5444
+ border-bottom-right-radius: 0.25rem;
5445
+ border-bottom-left-radius: 0;
5446
+ }
5447
+ }
5448
+
5449
+ @media (min-width: 992px) {
5450
+ .list-group-horizontal-lg {
5451
+ -ms-flex-direction: row;
5452
+ flex-direction: row;
5453
+ }
5454
+ .list-group-horizontal-lg .list-group-item {
5455
+ margin-right: -1px;
5456
+ margin-bottom: 0;
5457
+ }
5458
+ .list-group-horizontal-lg .list-group-item:first-child {
5459
+ border-top-left-radius: 0.25rem;
5460
+ border-bottom-left-radius: 0.25rem;
5461
+ border-top-right-radius: 0;
5462
+ }
5463
+ .list-group-horizontal-lg .list-group-item:last-child {
5464
+ margin-right: 0;
5465
+ border-top-right-radius: 0.25rem;
5466
+ border-bottom-right-radius: 0.25rem;
5467
+ border-bottom-left-radius: 0;
5468
+ }
5469
+ }
5470
+
5471
+ @media (min-width: 1200px) {
5472
+ .list-group-horizontal-xl {
5473
+ -ms-flex-direction: row;
5474
+ flex-direction: row;
5475
+ }
5476
+ .list-group-horizontal-xl .list-group-item {
5477
+ margin-right: -1px;
5478
+ margin-bottom: 0;
5479
+ }
5480
+ .list-group-horizontal-xl .list-group-item:first-child {
5481
+ border-top-left-radius: 0.25rem;
5482
+ border-bottom-left-radius: 0.25rem;
5483
+ border-top-right-radius: 0;
5484
+ }
5485
+ .list-group-horizontal-xl .list-group-item:last-child {
5486
+ margin-right: 0;
5487
+ border-top-right-radius: 0.25rem;
5488
+ border-bottom-right-radius: 0.25rem;
5489
+ border-bottom-left-radius: 0;
5490
+ }
5491
+ }
5492
+
5493
  .list-group-flush .list-group-item {
5494
  border-right: 0;
5495
  border-left: 0;
5652
  text-decoration: none;
5653
  }
5654
 
 
 
 
 
5655
  .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {
5656
  opacity: .75;
5657
  }
5676
  background-color: rgba(255, 255, 255, 0.85);
5677
  background-clip: padding-box;
5678
  border: 1px solid rgba(0, 0, 0, 0.1);
 
5679
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
5680
  -webkit-backdrop-filter: blur(10px);
5681
  backdrop-filter: blur(10px);
5682
  opacity: 0;
5683
+ border-radius: 0.25rem;
5684
  }
5685
 
5686
  .toast:not(:last-child) {
5752
  transform: translate(0, -50px);
5753
  }
5754
 
5755
+ @media (prefers-reduced-motion: reduce) {
5756
  .modal.fade .modal-dialog {
5757
  transition: none;
5758
  }
5763
  transform: none;
5764
  }
5765
 
5766
+ .modal-dialog-scrollable {
5767
+ display: -ms-flexbox;
5768
+ display: flex;
5769
+ max-height: calc(100% - 1rem);
5770
+ }
5771
+
5772
+ .modal-dialog-scrollable .modal-content {
5773
+ max-height: calc(100vh - 1rem);
5774
+ overflow: hidden;
5775
+ }
5776
+
5777
+ .modal-dialog-scrollable .modal-header,
5778
+ .modal-dialog-scrollable .modal-footer {
5779
+ -ms-flex-negative: 0;
5780
+ flex-shrink: 0;
5781
+ }
5782
+
5783
+ .modal-dialog-scrollable .modal-body {
5784
+ overflow-y: auto;
5785
+ }
5786
+
5787
  .modal-dialog-centered {
5788
  display: -ms-flexbox;
5789
  display: flex;
5790
  -ms-flex-align: center;
5791
  align-items: center;
5792
+ min-height: calc(100% - 1rem);
5793
  }
5794
 
5795
  .modal-dialog-centered::before {
5796
  display: block;
5797
+ height: calc(100vh - 1rem);
5798
  content: "";
5799
  }
5800
 
5801
+ .modal-dialog-centered.modal-dialog-scrollable {
5802
+ -ms-flex-direction: column;
5803
+ flex-direction: column;
5804
+ -ms-flex-pack: center;
5805
+ justify-content: center;
5806
+ height: 100%;
5807
+ }
5808
+
5809
+ .modal-dialog-centered.modal-dialog-scrollable .modal-content {
5810
+ max-height: none;
5811
+ }
5812
+
5813
+ .modal-dialog-centered.modal-dialog-scrollable::before {
5814
+ content: none;
5815
+ }
5816
+
5817
  .modal-content {
5818
  position: relative;
5819
  display: -ms-flexbox;
5855
  -ms-flex-pack: justify;
5856
  justify-content: space-between;
5857
  padding: 1rem 1rem;
5858
+ border-bottom: 1px solid #dee2e6;
5859
  border-top-left-radius: 0.3rem;
5860
  border-top-right-radius: 0.3rem;
5861
  }
5885
  -ms-flex-pack: end;
5886
  justify-content: flex-end;
5887
  padding: 1rem;
5888
+ border-top: 1px solid #dee2e6;
5889
  border-bottom-right-radius: 0.3rem;
5890
  border-bottom-left-radius: 0.3rem;
5891
  }
5911
  max-width: 500px;
5912
  margin: 1.75rem auto;
5913
  }
5914
+ .modal-dialog-scrollable {
5915
+ max-height: calc(100% - 3.5rem);
5916
+ }
5917
+ .modal-dialog-scrollable .modal-content {
5918
+ max-height: calc(100vh - 3.5rem);
5919
+ }
5920
  .modal-dialog-centered {
5921
+ min-height: calc(100% - 3.5rem);
5922
  }
5923
  .modal-dialog-centered::before {
5924
+ height: calc(100vh - 3.5rem);
5925
  }
5926
  .modal-sm {
5927
  max-width: 300px;
6101
  margin-bottom: 0.5rem;
6102
  }
6103
 
6104
+ .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow {
6105
  bottom: calc((0.5rem + 1px) * -1);
6106
  }
6107
 
6108
+ .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before {
 
 
 
 
 
 
6109
  bottom: 0;
6110
+ border-width: 0.5rem 0.5rem 0;
6111
  border-top-color: rgba(0, 0, 0, 0.25);
6112
  }
6113
 
6114
+ .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after {
 
 
6115
  bottom: 1px;
6116
+ border-width: 0.5rem 0.5rem 0;
6117
  border-top-color: #fff;
6118
  }
6119
 
6121
  margin-left: 0.5rem;
6122
  }
6123
 
6124
+ .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow {
6125
  left: calc((0.5rem + 1px) * -1);
6126
  width: 0.5rem;
6127
  height: 1rem;
6128
  margin: 0.3rem 0;
6129
  }
6130
 
6131
+ .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before {
 
 
 
 
 
 
6132
  left: 0;
6133
+ border-width: 0.5rem 0.5rem 0.5rem 0;
6134
  border-right-color: rgba(0, 0, 0, 0.25);
6135
  }
6136
 
6137
+ .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after {
 
 
6138
  left: 1px;
6139
+ border-width: 0.5rem 0.5rem 0.5rem 0;
6140
  border-right-color: #fff;
6141
  }
6142
 
6144
  margin-top: 0.5rem;
6145
  }
6146
 
6147
+ .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow {
6148
  top: calc((0.5rem + 1px) * -1);
6149
  }
6150
 
6151
+ .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before {
 
 
 
 
 
 
6152
  top: 0;
6153
+ border-width: 0 0.5rem 0.5rem 0.5rem;
6154
  border-bottom-color: rgba(0, 0, 0, 0.25);
6155
  }
6156
 
6157
+ .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after {
 
 
6158
  top: 1px;
6159
+ border-width: 0 0.5rem 0.5rem 0.5rem;
6160
  border-bottom-color: #fff;
6161
  }
6162
 
6175
  margin-right: 0.5rem;
6176
  }
6177
 
6178
+ .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow {
6179
  right: calc((0.5rem + 1px) * -1);
6180
  width: 0.5rem;
6181
  height: 1rem;
6182
  margin: 0.3rem 0;
6183
  }
6184
 
6185
+ .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before {
 
 
 
 
 
 
6186
  right: 0;
6187
+ border-width: 0.5rem 0 0.5rem 0.5rem;
6188
  border-left-color: rgba(0, 0, 0, 0.25);
6189
  }
6190
 
6191
+ .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after {
 
 
6192
  right: 1px;
6193
+ border-width: 0.5rem 0 0.5rem 0.5rem;
6194
  border-left-color: #fff;
6195
  }
6196
 
6198
  padding: 0.5rem 0.75rem;
6199
  margin-bottom: 0;
6200
  font-size: 1rem;
 
6201
  background-color: #f7f7f7;
6202
  border-bottom: 1px solid #ebebeb;
6203
  border-top-left-radius: calc(0.3rem - 1px);
6247
  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
6248
  }
6249
 
6250
+ @media (prefers-reduced-motion: reduce) {
6251
  .carousel-item {
6252
  transition: none;
6253
  }
6292
  transition: 0s 0.6s opacity;
6293
  }
6294
 
6295
+ @media (prefers-reduced-motion: reduce) {
6296
  .carousel-fade .active.carousel-item-left,
6297
  .carousel-fade .active.carousel-item-right {
6298
  transition: none;
6318
  transition: opacity 0.15s ease;
6319
  }
6320
 
6321
+ @media (prefers-reduced-motion: reduce) {
6322
  .carousel-control-prev,
6323
  .carousel-control-next {
6324
  transition: none;
6347
  display: inline-block;
6348
  width: 20px;
6349
  height: 20px;
6350
+ background: no-repeat 50% / 100% 100%;
 
6351
  }
6352
 
6353
  .carousel-control-prev-icon {
6392
  transition: opacity 0.6s ease;
6393
  }
6394
 
6395
+ @media (prefers-reduced-motion: reduce) {
6396
  .carousel-indicators li {
6397
  transition: none;
6398
  }
6671
  border-color: #fff !important;
6672
  }
6673
 
6674
+ .rounded-sm {
6675
+ border-radius: 0.2rem !important;
6676
+ }
6677
+
6678
  .rounded {
6679
  border-radius: 0.25rem !important;
6680
  }
6699
  border-bottom-left-radius: 0.25rem !important;
6700
  }
6701
 
6702
+ .rounded-lg {
6703
+ border-radius: 0.3rem !important;
6704
+ }
6705
+
6706
  .rounded-circle {
6707
  border-radius: 50% !important;
6708
  }
6954
  padding-top: 56.25%;
6955
  }
6956
 
6957
+ .embed-responsive-4by3::before {
6958
+ padding-top: 75%;
6959
  }
6960
 
6961
  .embed-responsive-1by1::before {
7902
  height: 100vh !important;
7903
  }
7904
 
7905
+ .stretched-link::after {
7906
+ position: absolute;
7907
+ top: 0;
7908
+ right: 0;
7909
+ bottom: 0;
7910
+ left: 0;
7911
+ z-index: 1;
7912
+ pointer-events: auto;
7913
+ content: "";
7914
+ background-color: rgba(0, 0, 0, 0);
7915
+ }
7916
+
7917
  .m-0 {
7918
  margin: 0 !important;
7919
  }
9727
  }
9728
 
9729
  .text-monospace {
9730
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
9731
  }
9732
 
9733
  .text-justify {
9940
  text-decoration: none !important;
9941
  }
9942
 
9943
+ .text-break {
9944
+ word-break: break-word !important;
9945
+ overflow-wrap: break-word !important;
9946
+ }
9947
+
9948
  .text-reset {
9949
  color: inherit !important;
9950
  }
resources/css/bootstrap4.min.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 The Bootstrap Authors
4
- * Copyright 2011-2018 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{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;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]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[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-family:inherit;font-weight:500;line-height:1.2;color:inherit}.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-break: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{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.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%}.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%}.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%}.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%}.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%}.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;background-color:transparent}.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 .table{background-color:#fff}.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{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:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.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{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;-ms-overflow-style:-ms-autohiding-scrollbar}.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;-ms-overflow-style:-ms-autohiding-scrollbar}.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;-ms-overflow-style:-ms-autohiding-scrollbar}.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;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 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 screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.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-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 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{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}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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")}.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)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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' 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") no-repeat center right 1.75rem/1.125rem 1.125rem}.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)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.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~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.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~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.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}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E")}.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)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.125rem 1.125rem}.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)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.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~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.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~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.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;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 screen and (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{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{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{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{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{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{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{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{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}.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 screen and (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 screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.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-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-right{right:0;left:auto}}.dropdown-menu-left{right:auto;left:0}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}}.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:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.dropdown-item:last-child{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.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%;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(2.875rem + 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.8125rem + 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;z-index:-1;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{color:#6c757d}.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-repeat:no-repeat;background-position:center center;background-size: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' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 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' 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' 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 screen and (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(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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;background-color:#fff;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(128,189,255,.5)}.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{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(2.875rem + 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(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 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{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(2.25rem + 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:2.25rem;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:calc(1rem + .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;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 screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{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;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 screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{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;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{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 screen and (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{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:not(:disabled):not(.disabled){cursor:pointer}.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{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{-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{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{-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{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{-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{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{-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{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{-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 viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' 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 viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' 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;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;color:inherit;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{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-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:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-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(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion .card .card-header{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:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.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:1;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}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}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}.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;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (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{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{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;margin-bottom:-1px;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{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.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-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom: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){cursor:pointer}.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);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0}.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 screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.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 #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.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-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.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-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.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) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom: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-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) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left: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-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) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;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) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;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 screen and (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:0s .6s opacity}@media screen and (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 screen and (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:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%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' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-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 screen and (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{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-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-3by4::before{padding-top:133.333333%}.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;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}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.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-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.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 The Bootstrap Authors
4
+ * Copyright 2011-2019 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{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]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}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-break: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{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.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%}.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%}.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%}.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%}.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%}.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: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-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{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{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}.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' 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:center right calc(.375em + .1875rem);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)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.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((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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' 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)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.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~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.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~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.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}.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' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);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)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.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((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%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)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.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~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.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~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.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}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{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{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{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{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{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{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{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{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 auto;flex:1 1 auto;width:1%;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;z-index:-1;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{color:#6c757d}.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' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 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' 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' 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:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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;background-color:#fff;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-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{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:calc(1rem + .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;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{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;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{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;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{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{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{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{-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{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{-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{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{-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{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{-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{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{-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 viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' 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 viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' 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;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{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-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(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{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:2;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:1;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;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;margin-bottom:-1px;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{margin-bottom:0;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-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom: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-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:.3rem;border-top-right-radius:.3rem}.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-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.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) * -1)}.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) * -1);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) * -1)}.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) * -1);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:0s .6s opacity}@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' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%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' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-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;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 */
resources/css/plugin.css CHANGED
@@ -948,7 +948,7 @@ th.column-request_info {
948
  background-color: rgba(0, 0, 0, 0.04);
949
  color: green;
950
  }
951
- #NavItem-license {
952
  color: #09b740;
953
  text-shadow: 0 0 0 rgba(0, 0, 0, 0.2);
954
  font-weight: bolder;
@@ -1098,6 +1098,24 @@ table.scan-table.wp-list-table button.toggle-row {
1098
  display: none;
1099
  }
1100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1101
  /**
1102
  PTG SCAN TABLES
1103
  */
@@ -1174,4 +1192,10 @@ table.odp-table.scan-table td.column-path code {
1174
  padding-left: 5px;
1175
  letter-spacing: 0;
1176
  }
 
 
 
 
 
 
1177
  }
948
  background-color: rgba(0, 0, 0, 0.04);
949
  color: green;
950
  }
951
+ .is-not-pro #NavItem-license {
952
  color: #09b740;
953
  text-shadow: 0 0 0 rgba(0, 0, 0, 0.2);
954
  font-weight: bolder;
1098
  display: none;
1099
  }
1100
 
1101
+ #ScanResultsPills {
1102
+ margin-top: 25px;
1103
+ }
1104
+ #ScanResultsPills nav > a.nav-link {
1105
+ color: #0c7905;
1106
+ height: 72px;
1107
+ }
1108
+ #ScanResultsPills nav > a.nav-link.active {
1109
+ color: #ffffff;
1110
+ background-color: #0c7905;
1111
+ }
1112
+ #ScanResultsPills .card.card-scan_results {
1113
+ margin-top: 0;
1114
+ }
1115
+ #ScanResultsPills nav > a.nav-link .badge {
1116
+ font-size: 12px;
1117
+ }
1118
+
1119
  /**
1120
  PTG SCAN TABLES
1121
  */
1192
  padding-left: 5px;
1193
  letter-spacing: 0;
1194
  }
1195
+ }
1196
+ .form-check input[type=radio] {
1197
+ margin-top: 4px;
1198
+ }
1199
+ .form-check-label {
1200
+ margin-left: 26px;
1201
  }
resources/js/bootstrap4.bundle.js CHANGED
@@ -1,13 +1,13 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 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) {
7
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
8
  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
9
- (factory((global.bootstrap = {}),global.jQuery));
10
- }(this, (function (exports,$) { 'use strict';
11
 
12
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
 
@@ -69,7 +69,7 @@
69
 
70
  /**
71
  * --------------------------------------------------------------------------
72
- * Bootstrap (v4.2.1): util.js
73
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
74
  * --------------------------------------------------------------------------
75
  */
@@ -145,7 +145,11 @@
145
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
146
  }
147
 
148
- return selector && document.querySelector(selector) ? selector : null;
 
 
 
 
149
  },
150
  getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
151
  if (!element) {
@@ -225,7 +229,7 @@
225
  */
226
 
227
  var NAME = 'alert';
228
- var VERSION = '4.2.1';
229
  var DATA_KEY = 'bs.alert';
230
  var EVENT_KEY = "." + DATA_KEY;
231
  var DATA_API_KEY = '.data-api';
@@ -280,8 +284,8 @@
280
  _proto.dispose = function dispose() {
281
  $.removeData(this._element, DATA_KEY);
282
  this._element = null;
283
- }; // Private
284
-
285
 
286
  _proto._getRootElement = function _getRootElement(element) {
287
  var selector = Util.getSelectorFromElement(element);
@@ -323,8 +327,8 @@
323
 
324
  _proto._destroyElement = function _destroyElement(element) {
325
  $(element).detach().trigger(Event.CLOSED).remove();
326
- }; // Static
327
-
328
 
329
  Alert._jQueryInterface = function _jQueryInterface(config) {
330
  return this.each(function () {
@@ -390,7 +394,7 @@
390
  */
391
 
392
  var NAME$1 = 'button';
393
- var VERSION$1 = '4.2.1';
394
  var DATA_KEY$1 = 'bs.button';
395
  var EVENT_KEY$1 = "." + DATA_KEY$1;
396
  var DATA_API_KEY$1 = '.data-api';
@@ -476,8 +480,8 @@
476
  _proto.dispose = function dispose() {
477
  $.removeData(this._element, DATA_KEY$1);
478
  this._element = null;
479
- }; // Static
480
-
481
 
482
  Button._jQueryInterface = function _jQueryInterface(config) {
483
  return this.each(function () {
@@ -544,7 +548,7 @@
544
  */
545
 
546
  var NAME$2 = 'carousel';
547
- var VERSION$2 = '4.2.1';
548
  var DATA_KEY$2 = 'bs.carousel';
549
  var EVENT_KEY$2 = "." + DATA_KEY$2;
550
  var DATA_API_KEY$2 = '.data-api';
@@ -739,8 +743,8 @@
739
  this._isSliding = null;
740
  this._activeElement = null;
741
  this._indicatorsElement = null;
742
- }; // Private
743
-
744
 
745
  _proto._getConfig = function _getConfig(config) {
746
  config = _objectSpread({}, Default, config);
@@ -784,7 +788,9 @@
784
  });
785
  }
786
 
787
- this._addTouchEventListeners();
 
 
788
  };
789
 
790
  _proto._addTouchEventListeners = function _addTouchEventListeners() {
@@ -1025,8 +1031,8 @@
1025
  if (isCycling) {
1026
  this.cycle();
1027
  }
1028
- }; // Static
1029
-
1030
 
1031
  Carousel._jQueryInterface = function _jQueryInterface(config) {
1032
  return this.each(function () {
@@ -1053,7 +1059,7 @@
1053
  }
1054
 
1055
  data[action]();
1056
- } else if (_config.interval) {
1057
  data.pause();
1058
  data.cycle();
1059
  }
@@ -1142,7 +1148,7 @@
1142
  */
1143
 
1144
  var NAME$3 = 'collapse';
1145
- var VERSION$3 = '4.2.1';
1146
  var DATA_KEY$3 = 'bs.collapse';
1147
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1148
  var DATA_API_KEY$3 = '.data-api';
@@ -1364,8 +1370,8 @@
1364
  this._element = null;
1365
  this._triggerArray = null;
1366
  this._isTransitioning = null;
1367
- }; // Private
1368
-
1369
 
1370
  _proto._getConfig = function _getConfig(config) {
1371
  config = _objectSpread({}, Default$1, config);
@@ -1409,8 +1415,8 @@
1409
  if (triggerArray.length) {
1410
  $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1411
  }
1412
- }; // Static
1413
-
1414
 
1415
  Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1416
  var selector = Util.getSelectorFromElement(element);
@@ -1497,7 +1503,7 @@
1497
 
1498
  /**!
1499
  * @fileOverview Kickass library to create and place poppers near their reference elements.
1500
- * @version 1.14.6
1501
  * @license
1502
  * Copyright (c) 2016 Federico Zivolo and contributors
1503
  *
@@ -2065,7 +2071,11 @@
2065
  if (getStyleComputedProperty(element, 'position') === 'fixed') {
2066
  return true;
2067
  }
2068
- return isFixed(getParentNode(element));
 
 
 
 
2069
  }
2070
 
2071
  /**
@@ -2721,18 +2731,23 @@
2721
  var _data$offsets = data.offsets,
2722
  popper = _data$offsets.popper,
2723
  reference = _data$offsets.reference;
 
 
2724
 
2725
-
2726
- var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
2727
- var isVariation = data.placement.indexOf('-') !== -1;
2728
- var sameWidthOddness = reference.width % 2 === popper.width % 2;
2729
- var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1;
2730
  var noRound = function noRound(v) {
2731
  return v;
2732
  };
2733
 
2734
- var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor;
2735
- var verticalToInteger = !shouldRound ? noRound : Math.round;
 
 
 
 
 
 
 
 
2736
 
2737
  return {
2738
  left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
@@ -4072,7 +4087,7 @@
4072
  */
4073
 
4074
  var NAME$4 = 'dropdown';
4075
- var VERSION$4 = '4.2.1';
4076
  var DATA_KEY$4 = 'bs.dropdown';
4077
  var EVENT_KEY$4 = "." + DATA_KEY$4;
4078
  var DATA_API_KEY$4 = '.data-api';
@@ -4301,8 +4316,8 @@
4301
  if (this._popper !== null) {
4302
  this._popper.scheduleUpdate();
4303
  }
4304
- }; // Private
4305
-
4306
 
4307
  _proto._addEventListeners = function _addEventListeners() {
4308
  var _this = this;
@@ -4358,24 +4373,28 @@
4358
  return $(this._element).closest('.navbar').length > 0;
4359
  };
4360
 
4361
- _proto._getPopperConfig = function _getPopperConfig() {
4362
  var _this2 = this;
4363
 
4364
- var offsetConf = {};
4365
 
4366
  if (typeof this._config.offset === 'function') {
4367
- offsetConf.fn = function (data) {
4368
- data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
4369
  return data;
4370
  };
4371
  } else {
4372
- offsetConf.offset = this._config.offset;
4373
  }
4374
 
 
 
 
 
4375
  var popperConfig = {
4376
  placement: this._getPlacement(),
4377
  modifiers: {
4378
- offset: offsetConf,
4379
  flip: {
4380
  enabled: this._config.flip
4381
  },
@@ -4393,8 +4412,8 @@
4393
  }
4394
 
4395
  return popperConfig;
4396
- }; // Static
4397
-
4398
 
4399
  Dropdown._jQueryInterface = function _jQueryInterface(config) {
4400
  return this.each(function () {
@@ -4478,8 +4497,8 @@
4478
  }
4479
 
4480
  return parent || element.parentNode;
4481
- }; // eslint-disable-next-line complexity
4482
-
4483
 
4484
  Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
4485
  // If not input/textarea:
@@ -4594,7 +4613,7 @@
4594
  */
4595
 
4596
  var NAME$5 = 'modal';
4597
- var VERSION$5 = '4.2.1';
4598
  var DATA_KEY$5 = 'bs.modal';
4599
  var EVENT_KEY$5 = "." + DATA_KEY$5;
4600
  var DATA_API_KEY$5 = '.data-api';
@@ -4627,6 +4646,7 @@
4627
  CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
4628
  };
4629
  var ClassName$5 = {
 
4630
  SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
4631
  BACKDROP: 'modal-backdrop',
4632
  OPEN: 'modal-open',
@@ -4635,6 +4655,7 @@
4635
  };
4636
  var Selector$5 = {
4637
  DIALOG: '.modal-dialog',
 
4638
  DATA_TOGGLE: '[data-toggle="modal"]',
4639
  DATA_DISMISS: '[data-dismiss="modal"]',
4640
  FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -4787,8 +4808,8 @@
4787
 
4788
  _proto.handleUpdate = function handleUpdate() {
4789
  this._adjustDialog();
4790
- }; // Private
4791
-
4792
 
4793
  _proto._getConfig = function _getConfig(config) {
4794
  config = _objectSpread({}, Default$3, config);
@@ -4812,7 +4833,11 @@
4812
 
4813
  this._element.setAttribute('aria-modal', true);
4814
 
4815
- this._element.scrollTop = 0;
 
 
 
 
4816
 
4817
  if (transition) {
4818
  Util.reflow(this._element);
@@ -4982,11 +5007,11 @@
4982
  } else if (callback) {
4983
  callback();
4984
  }
4985
- }; // ----------------------------------------------------------------------
4986
  // the following methods are used to handle overflowing modals
4987
  // todo (fat): these should probably be refactored out of modal.js
4988
  // ----------------------------------------------------------------------
4989
-
4990
 
4991
  _proto._adjustDialog = function _adjustDialog() {
4992
  var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@@ -5071,8 +5096,8 @@
5071
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5072
  document.body.removeChild(scrollDiv);
5073
  return scrollbarWidth;
5074
- }; // Static
5075
-
5076
 
5077
  Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
5078
  return this.each(function () {
@@ -5163,6 +5188,127 @@
5163
  return Modal._jQueryInterface;
5164
  };
5165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5166
  /**
5167
  * ------------------------------------------------------------------------
5168
  * Constants
@@ -5170,12 +5316,13 @@
5170
  */
5171
 
5172
  var NAME$6 = 'tooltip';
5173
- var VERSION$6 = '4.2.1';
5174
  var DATA_KEY$6 = 'bs.tooltip';
5175
  var EVENT_KEY$6 = "." + DATA_KEY$6;
5176
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
5177
  var CLASS_PREFIX = 'bs-tooltip';
5178
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
 
5179
  var DefaultType$4 = {
5180
  animation: 'boolean',
5181
  template: 'string',
@@ -5185,10 +5332,13 @@
5185
  html: 'boolean',
5186
  selector: '(string|boolean)',
5187
  placement: '(string|function)',
5188
- offset: '(number|string)',
5189
  container: '(string|element|boolean)',
5190
  fallbackPlacement: '(string|array)',
5191
- boundary: '(string|element)'
 
 
 
5192
  };
5193
  var AttachmentMap$1 = {
5194
  AUTO: 'auto',
@@ -5209,7 +5359,10 @@
5209
  offset: 0,
5210
  container: false,
5211
  fallbackPlacement: 'flip',
5212
- boundary: 'scrollParent'
 
 
 
5213
  };
5214
  var HoverState = {
5215
  SHOW: 'show',
@@ -5394,9 +5547,7 @@
5394
  this._popper = new Popper(this.element, tip, {
5395
  placement: attachment,
5396
  modifiers: {
5397
- offset: {
5398
- offset: this.config.offset
5399
- },
5400
  flip: {
5401
  behavior: this.config.fallbackPlacement
5402
  },
@@ -5505,8 +5656,8 @@
5505
  if (this._popper !== null) {
5506
  this._popper.scheduleUpdate();
5507
  }
5508
- }; // Protected
5509
-
5510
 
5511
  _proto.isWithContent = function isWithContent() {
5512
  return Boolean(this.getTitle());
@@ -5528,19 +5679,27 @@
5528
  };
5529
 
5530
  _proto.setElementContent = function setElementContent($element, content) {
5531
- var html = this.config.html;
5532
-
5533
  if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5534
  // Content is a DOM node or a jQuery
5535
- if (html) {
5536
  if (!$(content).parent().is($element)) {
5537
  $element.empty().append(content);
5538
  }
5539
  } else {
5540
  $element.text($(content).text());
5541
  }
 
 
 
 
 
 
 
 
 
 
5542
  } else {
5543
- $element[html ? 'html' : 'text'](content);
5544
  }
5545
  };
5546
 
@@ -5552,8 +5711,25 @@
5552
  }
5553
 
5554
  return title;
5555
- }; // Private
 
 
 
 
5556
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5557
 
5558
  _proto._getContainer = function _getContainer() {
5559
  if (this.config.container === false) {
@@ -5572,27 +5748,27 @@
5572
  };
5573
 
5574
  _proto._setListeners = function _setListeners() {
5575
- var _this3 = this;
5576
 
5577
  var triggers = this.config.trigger.split(' ');
5578
  triggers.forEach(function (trigger) {
5579
  if (trigger === 'click') {
5580
- $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
5581
- return _this3.toggle(event);
5582
  });
5583
  } else if (trigger !== Trigger.MANUAL) {
5584
- var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
5585
- var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
5586
- $(_this3.element).on(eventIn, _this3.config.selector, function (event) {
5587
- return _this3._enter(event);
5588
- }).on(eventOut, _this3.config.selector, function (event) {
5589
- return _this3._leave(event);
5590
  });
5591
  }
5592
  });
5593
  $(this.element).closest('.modal').on('hide.bs.modal', function () {
5594
- if (_this3.element) {
5595
- _this3.hide();
5596
  }
5597
  });
5598
 
@@ -5691,7 +5867,13 @@
5691
  };
5692
 
5693
  _proto._getConfig = function _getConfig(config) {
5694
- config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});
 
 
 
 
 
 
5695
 
5696
  if (typeof config.delay === 'number') {
5697
  config.delay = {
@@ -5709,6 +5891,11 @@
5709
  }
5710
 
5711
  Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
 
 
 
 
 
5712
  return config;
5713
  };
5714
 
@@ -5757,8 +5944,8 @@
5757
  this.hide();
5758
  this.show();
5759
  this.config.animation = initConfigAnimation;
5760
- }; // Static
5761
-
5762
 
5763
  Tooltip._jQueryInterface = function _jQueryInterface(config) {
5764
  return this.each(function () {
@@ -5846,7 +6033,7 @@
5846
  */
5847
 
5848
  var NAME$7 = 'popover';
5849
- var VERSION$7 = '4.2.1';
5850
  var DATA_KEY$7 = 'bs.popover';
5851
  var EVENT_KEY$7 = "." + DATA_KEY$7;
5852
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@@ -5929,8 +6116,8 @@
5929
 
5930
  this.setElementContent($tip.find(Selector$7.CONTENT), content);
5931
  $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
5932
- }; // Private
5933
-
5934
 
5935
  _proto._getContent = function _getContent() {
5936
  return this.element.getAttribute('data-content') || this.config.content;
@@ -5943,8 +6130,8 @@
5943
  if (tabClass !== null && tabClass.length > 0) {
5944
  $tip.removeClass(tabClass.join(''));
5945
  }
5946
- }; // Static
5947
-
5948
 
5949
  Popover._jQueryInterface = function _jQueryInterface(config) {
5950
  return this.each(function () {
@@ -6033,7 +6220,7 @@
6033
  */
6034
 
6035
  var NAME$8 = 'scrollspy';
6036
- var VERSION$8 = '4.2.1';
6037
  var DATA_KEY$8 = 'bs.scrollspy';
6038
  var EVENT_KEY$8 = "." + DATA_KEY$8;
6039
  var DATA_API_KEY$6 = '.data-api';
@@ -6156,8 +6343,8 @@
6156
  this._targets = null;
6157
  this._activeTarget = null;
6158
  this._scrollHeight = null;
6159
- }; // Private
6160
-
6161
 
6162
  _proto._getConfig = function _getConfig(config) {
6163
  config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@@ -6264,8 +6451,8 @@
6264
  }).forEach(function (node) {
6265
  return node.classList.remove(ClassName$8.ACTIVE);
6266
  });
6267
- }; // Static
6268
-
6269
 
6270
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
6271
  return this.each(function () {
@@ -6340,7 +6527,7 @@
6340
  */
6341
 
6342
  var NAME$9 = 'tab';
6343
- var VERSION$9 = '4.2.1';
6344
  var DATA_KEY$9 = 'bs.tab';
6345
  var EVENT_KEY$9 = "." + DATA_KEY$9;
6346
  var DATA_API_KEY$7 = '.data-api';
@@ -6448,8 +6635,8 @@
6448
  _proto.dispose = function dispose() {
6449
  $.removeData(this._element, DATA_KEY$9);
6450
  this._element = null;
6451
- }; // Private
6452
-
6453
 
6454
  _proto._activate = function _activate(element, container, callback) {
6455
  var _this2 = this;
@@ -6491,7 +6678,10 @@
6491
  }
6492
 
6493
  Util.reflow(element);
6494
- $(element).addClass(ClassName$9.SHOW);
 
 
 
6495
 
6496
  if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
6497
  var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@@ -6507,8 +6697,8 @@
6507
  if (callback) {
6508
  callback();
6509
  }
6510
- }; // Static
6511
-
6512
 
6513
  Tab._jQueryInterface = function _jQueryInterface(config) {
6514
  return this.each(function () {
@@ -6572,7 +6762,7 @@
6572
  */
6573
 
6574
  var NAME$a = 'toast';
6575
- var VERSION$a = '4.2.1';
6576
  var DATA_KEY$a = 'bs.toast';
6577
  var EVENT_KEY$a = "." + DATA_KEY$a;
6578
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@@ -6687,8 +6877,8 @@
6687
  $.removeData(this._element, DATA_KEY$a);
6688
  this._element = null;
6689
  this._config = null;
6690
- }; // Private
6691
-
6692
 
6693
  _proto._getConfig = function _getConfig(config) {
6694
  config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@@ -6721,8 +6911,8 @@
6721
  } else {
6722
  complete();
6723
  }
6724
- }; // Static
6725
-
6726
 
6727
  Toast._jQueryInterface = function _jQueryInterface(config) {
6728
  return this.each(function () {
@@ -6756,6 +6946,11 @@
6756
  get: function get() {
6757
  return DefaultType$7;
6758
  }
 
 
 
 
 
6759
  }]);
6760
 
6761
  return Toast;
@@ -6777,7 +6972,7 @@
6777
 
6778
  /**
6779
  * --------------------------------------------------------------------------
6780
- * Bootstrap (v4.2.1): index.js
6781
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6782
  * --------------------------------------------------------------------------
6783
  */
@@ -6814,5 +7009,5 @@
6814
 
6815
  Object.defineProperty(exports, '__esModule', { value: true });
6816
 
6817
- })));
6818
  //# sourceMappingURL=bootstrap.bundle.js.map
1
  /*!
2
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 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) {
7
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
8
  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
9
+ (global = global || self, factory(global.bootstrap = {}, global.jQuery));
10
+ }(this, function (exports, $) { 'use strict';
11
 
12
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
 
69
 
70
  /**
71
  * --------------------------------------------------------------------------
72
+ * Bootstrap (v4.3.1): util.js
73
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
74
  * --------------------------------------------------------------------------
75
  */
145
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
146
  }
147
 
148
+ try {
149
+ return document.querySelector(selector) ? selector : null;
150
+ } catch (err) {
151
+ return null;
152
+ }
153
  },
154
  getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
155
  if (!element) {
229
  */
230
 
231
  var NAME = 'alert';
232
+ var VERSION = '4.3.1';
233
  var DATA_KEY = 'bs.alert';
234
  var EVENT_KEY = "." + DATA_KEY;
235
  var DATA_API_KEY = '.data-api';
284
  _proto.dispose = function dispose() {
285
  $.removeData(this._element, DATA_KEY);
286
  this._element = null;
287
+ } // Private
288
+ ;
289
 
290
  _proto._getRootElement = function _getRootElement(element) {
291
  var selector = Util.getSelectorFromElement(element);
327
 
328
  _proto._destroyElement = function _destroyElement(element) {
329
  $(element).detach().trigger(Event.CLOSED).remove();
330
+ } // Static
331
+ ;
332
 
333
  Alert._jQueryInterface = function _jQueryInterface(config) {
334
  return this.each(function () {
394
  */
395
 
396
  var NAME$1 = 'button';
397
+ var VERSION$1 = '4.3.1';
398
  var DATA_KEY$1 = 'bs.button';
399
  var EVENT_KEY$1 = "." + DATA_KEY$1;
400
  var DATA_API_KEY$1 = '.data-api';
480
  _proto.dispose = function dispose() {
481
  $.removeData(this._element, DATA_KEY$1);
482
  this._element = null;
483
+ } // Static
484
+ ;
485
 
486
  Button._jQueryInterface = function _jQueryInterface(config) {
487
  return this.each(function () {
548
  */
549
 
550
  var NAME$2 = 'carousel';
551
+ var VERSION$2 = '4.3.1';
552
  var DATA_KEY$2 = 'bs.carousel';
553
  var EVENT_KEY$2 = "." + DATA_KEY$2;
554
  var DATA_API_KEY$2 = '.data-api';
743
  this._isSliding = null;
744
  this._activeElement = null;
745
  this._indicatorsElement = null;
746
+ } // Private
747
+ ;
748
 
749
  _proto._getConfig = function _getConfig(config) {
750
  config = _objectSpread({}, Default, config);
788
  });
789
  }
790
 
791
+ if (this._config.touch) {
792
+ this._addTouchEventListeners();
793
+ }
794
  };
795
 
796
  _proto._addTouchEventListeners = function _addTouchEventListeners() {
1031
  if (isCycling) {
1032
  this.cycle();
1033
  }
1034
+ } // Static
1035
+ ;
1036
 
1037
  Carousel._jQueryInterface = function _jQueryInterface(config) {
1038
  return this.each(function () {
1059
  }
1060
 
1061
  data[action]();
1062
+ } else if (_config.interval && _config.ride) {
1063
  data.pause();
1064
  data.cycle();
1065
  }
1148
  */
1149
 
1150
  var NAME$3 = 'collapse';
1151
+ var VERSION$3 = '4.3.1';
1152
  var DATA_KEY$3 = 'bs.collapse';
1153
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1154
  var DATA_API_KEY$3 = '.data-api';
1370
  this._element = null;
1371
  this._triggerArray = null;
1372
  this._isTransitioning = null;
1373
+ } // Private
1374
+ ;
1375
 
1376
  _proto._getConfig = function _getConfig(config) {
1377
  config = _objectSpread({}, Default$1, config);
1415
  if (triggerArray.length) {
1416
  $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1417
  }
1418
+ } // Static
1419
+ ;
1420
 
1421
  Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1422
  var selector = Util.getSelectorFromElement(element);
1503
 
1504
  /**!
1505
  * @fileOverview Kickass library to create and place poppers near their reference elements.
1506
+ * @version 1.14.7
1507
  * @license
1508
  * Copyright (c) 2016 Federico Zivolo and contributors
1509
  *
2071
  if (getStyleComputedProperty(element, 'position') === 'fixed') {
2072
  return true;
2073
  }
2074
+ var parentNode = getParentNode(element);
2075
+ if (!parentNode) {
2076
+ return false;
2077
+ }
2078
+ return isFixed(parentNode);
2079
  }
2080
 
2081
  /**
2731
  var _data$offsets = data.offsets,
2732
  popper = _data$offsets.popper,
2733
  reference = _data$offsets.reference;
2734
+ var round = Math.round,
2735
+ floor = Math.floor;
2736
 
 
 
 
 
 
2737
  var noRound = function noRound(v) {
2738
  return v;
2739
  };
2740
 
2741
+ var referenceWidth = round(reference.width);
2742
+ var popperWidth = round(popper.width);
2743
+
2744
+ var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
2745
+ var isVariation = data.placement.indexOf('-') !== -1;
2746
+ var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
2747
+ var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
2748
+
2749
+ var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
2750
+ var verticalToInteger = !shouldRound ? noRound : round;
2751
 
2752
  return {
2753
  left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
4087
  */
4088
 
4089
  var NAME$4 = 'dropdown';
4090
+ var VERSION$4 = '4.3.1';
4091
  var DATA_KEY$4 = 'bs.dropdown';
4092
  var EVENT_KEY$4 = "." + DATA_KEY$4;
4093
  var DATA_API_KEY$4 = '.data-api';
4316
  if (this._popper !== null) {
4317
  this._popper.scheduleUpdate();
4318
  }
4319
+ } // Private
4320
+ ;
4321
 
4322
  _proto._addEventListeners = function _addEventListeners() {
4323
  var _this = this;
4373
  return $(this._element).closest('.navbar').length > 0;
4374
  };
4375
 
4376
+ _proto._getOffset = function _getOffset() {
4377
  var _this2 = this;
4378
 
4379
+ var offset = {};
4380
 
4381
  if (typeof this._config.offset === 'function') {
4382
+ offset.fn = function (data) {
4383
+ data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
4384
  return data;
4385
  };
4386
  } else {
4387
+ offset.offset = this._config.offset;
4388
  }
4389
 
4390
+ return offset;
4391
+ };
4392
+
4393
+ _proto._getPopperConfig = function _getPopperConfig() {
4394
  var popperConfig = {
4395
  placement: this._getPlacement(),
4396
  modifiers: {
4397
+ offset: this._getOffset(),
4398
  flip: {
4399
  enabled: this._config.flip
4400
  },
4412
  }
4413
 
4414
  return popperConfig;
4415
+ } // Static
4416
+ ;
4417
 
4418
  Dropdown._jQueryInterface = function _jQueryInterface(config) {
4419
  return this.each(function () {
4497
  }
4498
 
4499
  return parent || element.parentNode;
4500
+ } // eslint-disable-next-line complexity
4501
+ ;
4502
 
4503
  Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
4504
  // If not input/textarea:
4613
  */
4614
 
4615
  var NAME$5 = 'modal';
4616
+ var VERSION$5 = '4.3.1';
4617
  var DATA_KEY$5 = 'bs.modal';
4618
  var EVENT_KEY$5 = "." + DATA_KEY$5;
4619
  var DATA_API_KEY$5 = '.data-api';
4646
  CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
4647
  };
4648
  var ClassName$5 = {
4649
+ SCROLLABLE: 'modal-dialog-scrollable',
4650
  SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
4651
  BACKDROP: 'modal-backdrop',
4652
  OPEN: 'modal-open',
4655
  };
4656
  var Selector$5 = {
4657
  DIALOG: '.modal-dialog',
4658
+ MODAL_BODY: '.modal-body',
4659
  DATA_TOGGLE: '[data-toggle="modal"]',
4660
  DATA_DISMISS: '[data-dismiss="modal"]',
4661
  FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
4808
 
4809
  _proto.handleUpdate = function handleUpdate() {
4810
  this._adjustDialog();
4811
+ } // Private
4812
+ ;
4813
 
4814
  _proto._getConfig = function _getConfig(config) {
4815
  config = _objectSpread({}, Default$3, config);
4833
 
4834
  this._element.setAttribute('aria-modal', true);
4835
 
4836
+ if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
4837
+ this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
4838
+ } else {
4839
+ this._element.scrollTop = 0;
4840
+ }
4841
 
4842
  if (transition) {
4843
  Util.reflow(this._element);
5007
  } else if (callback) {
5008
  callback();
5009
  }
5010
+ } // ----------------------------------------------------------------------
5011
  // the following methods are used to handle overflowing modals
5012
  // todo (fat): these should probably be refactored out of modal.js
5013
  // ----------------------------------------------------------------------
5014
+ ;
5015
 
5016
  _proto._adjustDialog = function _adjustDialog() {
5017
  var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5096
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5097
  document.body.removeChild(scrollDiv);
5098
  return scrollbarWidth;
5099
+ } // Static
5100
+ ;
5101
 
5102
  Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
5103
  return this.each(function () {
5188
  return Modal._jQueryInterface;
5189
  };
5190
 
5191
+ /**
5192
+ * --------------------------------------------------------------------------
5193
+ * Bootstrap (v4.3.1): tools/sanitizer.js
5194
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5195
+ * --------------------------------------------------------------------------
5196
+ */
5197
+ var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
5198
+ var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5199
+ var DefaultWhitelist = {
5200
+ // Global attributes allowed on any supplied element below.
5201
+ '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5202
+ a: ['target', 'href', 'title', 'rel'],
5203
+ area: [],
5204
+ b: [],
5205
+ br: [],
5206
+ col: [],
5207
+ code: [],
5208
+ div: [],
5209
+ em: [],
5210
+ hr: [],
5211
+ h1: [],
5212
+ h2: [],
5213
+ h3: [],
5214
+ h4: [],
5215
+ h5: [],
5216
+ h6: [],
5217
+ i: [],
5218
+ img: ['src', 'alt', 'title', 'width', 'height'],
5219
+ li: [],
5220
+ ol: [],
5221
+ p: [],
5222
+ pre: [],
5223
+ s: [],
5224
+ small: [],
5225
+ span: [],
5226
+ sub: [],
5227
+ sup: [],
5228
+ strong: [],
5229
+ u: [],
5230
+ ul: []
5231
+ /**
5232
+ * A pattern that recognizes a commonly useful subset of URLs that are safe.
5233
+ *
5234
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5235
+ */
5236
+
5237
+ };
5238
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
5239
+ /**
5240
+ * A pattern that matches safe data URLs. Only matches image, video and audio types.
5241
+ *
5242
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5243
+ */
5244
+
5245
+ 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-z0-9+/]+=*$/i;
5246
+
5247
+ function allowedAttribute(attr, allowedAttributeList) {
5248
+ var attrName = attr.nodeName.toLowerCase();
5249
+
5250
+ if (allowedAttributeList.indexOf(attrName) !== -1) {
5251
+ if (uriAttrs.indexOf(attrName) !== -1) {
5252
+ return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
5253
+ }
5254
+
5255
+ return true;
5256
+ }
5257
+
5258
+ var regExp = allowedAttributeList.filter(function (attrRegex) {
5259
+ return attrRegex instanceof RegExp;
5260
+ }); // Check if a regular expression validates the attribute.
5261
+
5262
+ for (var i = 0, l = regExp.length; i < l; i++) {
5263
+ if (attrName.match(regExp[i])) {
5264
+ return true;
5265
+ }
5266
+ }
5267
+
5268
+ return false;
5269
+ }
5270
+
5271
+ function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
5272
+ if (unsafeHtml.length === 0) {
5273
+ return unsafeHtml;
5274
+ }
5275
+
5276
+ if (sanitizeFn && typeof sanitizeFn === 'function') {
5277
+ return sanitizeFn(unsafeHtml);
5278
+ }
5279
+
5280
+ var domParser = new window.DOMParser();
5281
+ var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
5282
+ var whitelistKeys = Object.keys(whiteList);
5283
+ var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
5284
+
5285
+ var _loop = function _loop(i, len) {
5286
+ var el = elements[i];
5287
+ var elName = el.nodeName.toLowerCase();
5288
+
5289
+ if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
5290
+ el.parentNode.removeChild(el);
5291
+ return "continue";
5292
+ }
5293
+
5294
+ var attributeList = [].slice.call(el.attributes);
5295
+ var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
5296
+ attributeList.forEach(function (attr) {
5297
+ if (!allowedAttribute(attr, whitelistedAttributes)) {
5298
+ el.removeAttribute(attr.nodeName);
5299
+ }
5300
+ });
5301
+ };
5302
+
5303
+ for (var i = 0, len = elements.length; i < len; i++) {
5304
+ var _ret = _loop(i, len);
5305
+
5306
+ if (_ret === "continue") continue;
5307
+ }
5308
+
5309
+ return createdDocument.body.innerHTML;
5310
+ }
5311
+
5312
  /**
5313
  * ------------------------------------------------------------------------
5314
  * Constants
5316
  */
5317
 
5318
  var NAME$6 = 'tooltip';
5319
+ var VERSION$6 = '4.3.1';
5320
  var DATA_KEY$6 = 'bs.tooltip';
5321
  var EVENT_KEY$6 = "." + DATA_KEY$6;
5322
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
5323
  var CLASS_PREFIX = 'bs-tooltip';
5324
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
5325
+ var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
5326
  var DefaultType$4 = {
5327
  animation: 'boolean',
5328
  template: 'string',
5332
  html: 'boolean',
5333
  selector: '(string|boolean)',
5334
  placement: '(string|function)',
5335
+ offset: '(number|string|function)',
5336
  container: '(string|element|boolean)',
5337
  fallbackPlacement: '(string|array)',
5338
+ boundary: '(string|element)',
5339
+ sanitize: 'boolean',
5340
+ sanitizeFn: '(null|function)',
5341
+ whiteList: 'object'
5342
  };
5343
  var AttachmentMap$1 = {
5344
  AUTO: 'auto',
5359
  offset: 0,
5360
  container: false,
5361
  fallbackPlacement: 'flip',
5362
+ boundary: 'scrollParent',
5363
+ sanitize: true,
5364
+ sanitizeFn: null,
5365
+ whiteList: DefaultWhitelist
5366
  };
5367
  var HoverState = {
5368
  SHOW: 'show',
5547
  this._popper = new Popper(this.element, tip, {
5548
  placement: attachment,
5549
  modifiers: {
5550
+ offset: this._getOffset(),
 
 
5551
  flip: {
5552
  behavior: this.config.fallbackPlacement
5553
  },
5656
  if (this._popper !== null) {
5657
  this._popper.scheduleUpdate();
5658
  }
5659
+ } // Protected
5660
+ ;
5661
 
5662
  _proto.isWithContent = function isWithContent() {
5663
  return Boolean(this.getTitle());
5679
  };
5680
 
5681
  _proto.setElementContent = function setElementContent($element, content) {
 
 
5682
  if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5683
  // Content is a DOM node or a jQuery
5684
+ if (this.config.html) {
5685
  if (!$(content).parent().is($element)) {
5686
  $element.empty().append(content);
5687
  }
5688
  } else {
5689
  $element.text($(content).text());
5690
  }
5691
+
5692
+ return;
5693
+ }
5694
+
5695
+ if (this.config.html) {
5696
+ if (this.config.sanitize) {
5697
+ content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
5698
+ }
5699
+
5700
+ $element.html(content);
5701
  } else {
5702
+ $element.text(content);
5703
  }
5704
  };
5705
 
5711
  }
5712
 
5713
  return title;
5714
+ } // Private
5715
+ ;
5716
+
5717
+ _proto._getOffset = function _getOffset() {
5718
+ var _this3 = this;
5719
 
5720
+ var offset = {};
5721
+
5722
+ if (typeof this.config.offset === 'function') {
5723
+ offset.fn = function (data) {
5724
+ data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
5725
+ return data;
5726
+ };
5727
+ } else {
5728
+ offset.offset = this.config.offset;
5729
+ }
5730
+
5731
+ return offset;
5732
+ };
5733
 
5734
  _proto._getContainer = function _getContainer() {
5735
  if (this.config.container === false) {
5748
  };
5749
 
5750
  _proto._setListeners = function _setListeners() {
5751
+ var _this4 = this;
5752
 
5753
  var triggers = this.config.trigger.split(' ');
5754
  triggers.forEach(function (trigger) {
5755
  if (trigger === 'click') {
5756
+ $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
5757
+ return _this4.toggle(event);
5758
  });
5759
  } else if (trigger !== Trigger.MANUAL) {
5760
+ var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
5761
+ var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
5762
+ $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
5763
+ return _this4._enter(event);
5764
+ }).on(eventOut, _this4.config.selector, function (event) {
5765
+ return _this4._leave(event);
5766
  });
5767
  }
5768
  });
5769
  $(this.element).closest('.modal').on('hide.bs.modal', function () {
5770
+ if (_this4.element) {
5771
+ _this4.hide();
5772
  }
5773
  });
5774
 
5867
  };
5868
 
5869
  _proto._getConfig = function _getConfig(config) {
5870
+ var dataAttributes = $(this.element).data();
5871
+ Object.keys(dataAttributes).forEach(function (dataAttr) {
5872
+ if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
5873
+ delete dataAttributes[dataAttr];
5874
+ }
5875
+ });
5876
+ config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
5877
 
5878
  if (typeof config.delay === 'number') {
5879
  config.delay = {
5891
  }
5892
 
5893
  Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
5894
+
5895
+ if (config.sanitize) {
5896
+ config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
5897
+ }
5898
+
5899
  return config;
5900
  };
5901
 
5944
  this.hide();
5945
  this.show();
5946
  this.config.animation = initConfigAnimation;
5947
+ } // Static
5948
+ ;
5949
 
5950
  Tooltip._jQueryInterface = function _jQueryInterface(config) {
5951
  return this.each(function () {
6033
  */
6034
 
6035
  var NAME$7 = 'popover';
6036
+ var VERSION$7 = '4.3.1';
6037
  var DATA_KEY$7 = 'bs.popover';
6038
  var EVENT_KEY$7 = "." + DATA_KEY$7;
6039
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
6116
 
6117
  this.setElementContent($tip.find(Selector$7.CONTENT), content);
6118
  $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
6119
+ } // Private
6120
+ ;
6121
 
6122
  _proto._getContent = function _getContent() {
6123
  return this.element.getAttribute('data-content') || this.config.content;
6130
  if (tabClass !== null && tabClass.length > 0) {
6131
  $tip.removeClass(tabClass.join(''));
6132
  }
6133
+ } // Static
6134
+ ;
6135
 
6136
  Popover._jQueryInterface = function _jQueryInterface(config) {
6137
  return this.each(function () {
6220
  */
6221
 
6222
  var NAME$8 = 'scrollspy';
6223
+ var VERSION$8 = '4.3.1';
6224
  var DATA_KEY$8 = 'bs.scrollspy';
6225
  var EVENT_KEY$8 = "." + DATA_KEY$8;
6226
  var DATA_API_KEY$6 = '.data-api';
6343
  this._targets = null;
6344
  this._activeTarget = null;
6345
  this._scrollHeight = null;
6346
+ } // Private
6347
+ ;
6348
 
6349
  _proto._getConfig = function _getConfig(config) {
6350
  config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
6451
  }).forEach(function (node) {
6452
  return node.classList.remove(ClassName$8.ACTIVE);
6453
  });
6454
+ } // Static
6455
+ ;
6456
 
6457
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
6458
  return this.each(function () {
6527
  */
6528
 
6529
  var NAME$9 = 'tab';
6530
+ var VERSION$9 = '4.3.1';
6531
  var DATA_KEY$9 = 'bs.tab';
6532
  var EVENT_KEY$9 = "." + DATA_KEY$9;
6533
  var DATA_API_KEY$7 = '.data-api';
6635
  _proto.dispose = function dispose() {
6636
  $.removeData(this._element, DATA_KEY$9);
6637
  this._element = null;
6638
+ } // Private
6639
+ ;
6640
 
6641
  _proto._activate = function _activate(element, container, callback) {
6642
  var _this2 = this;
6678
  }
6679
 
6680
  Util.reflow(element);
6681
+
6682
+ if (element.classList.contains(ClassName$9.FADE)) {
6683
+ element.classList.add(ClassName$9.SHOW);
6684
+ }
6685
 
6686
  if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
6687
  var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
6697
  if (callback) {
6698
  callback();
6699
  }
6700
+ } // Static
6701
+ ;
6702
 
6703
  Tab._jQueryInterface = function _jQueryInterface(config) {
6704
  return this.each(function () {
6762
  */
6763
 
6764
  var NAME$a = 'toast';
6765
+ var VERSION$a = '4.3.1';
6766
  var DATA_KEY$a = 'bs.toast';
6767
  var EVENT_KEY$a = "." + DATA_KEY$a;
6768
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
6877
  $.removeData(this._element, DATA_KEY$a);
6878
  this._element = null;
6879
  this._config = null;
6880
+ } // Private
6881
+ ;
6882
 
6883
  _proto._getConfig = function _getConfig(config) {
6884
  config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
6911
  } else {
6912
  complete();
6913
  }
6914
+ } // Static
6915
+ ;
6916
 
6917
  Toast._jQueryInterface = function _jQueryInterface(config) {
6918
  return this.each(function () {
6946
  get: function get() {
6947
  return DefaultType$7;
6948
  }
6949
+ }, {
6950
+ key: "Default",
6951
+ get: function get() {
6952
+ return Default$7;
6953
+ }
6954
  }]);
6955
 
6956
  return Toast;
6972
 
6973
  /**
6974
  * --------------------------------------------------------------------------
6975
+ * Bootstrap (v4.3.1): index.js
6976
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6977
  * --------------------------------------------------------------------------
6978
  */
7009
 
7010
  Object.defineProperty(exports, '__esModule', { value: true });
7011
 
7012
+ }));
7013
  //# sourceMappingURL=bootstrap.bundle.js.map
resources/js/bootstrap4.bundle.min.js CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 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.bootstrap={},t.jQuery)}(this,function(t,p){"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 l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.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})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var e="transitionend";function n(t){var e=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(e)},t),this}var m={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():""}return e&&document.querySelector(e)?e:null},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=p(t).css("transition-duration"),n=p(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){p(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},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&&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(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?m.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};p.fn.emulateTransitionEnd=n,p.event.special[m.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(p(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=p.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},u="alert",f="fade",d="show",g=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(){p.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=m.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=p(t).closest("."+u)[0]),n},t._triggerCloseEvent=function(t){var e=p.Event(h.CLOSE);return p(t).trigger(e),e},t._removeElement=function(e){var n=this;if(p(e).removeClass(d),p(e).hasClass(f)){var t=m.getTransitionDurationFromElement(e);p(e).one(m.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){p(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(r);e||(e=new i(this),t.data(r,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.2.1"}}]),i}();p(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),p.fn[o]=g._jQueryInterface,p.fn[o].Constructor=g,p.fn[o].noConflict=function(){return p.fn[o]=c,g._jQueryInterface};var _="button",v="bs.button",y="."+v,E=".data-api",b=p.fn[_],w="active",T="btn",C="focus",S='[data-toggle^="button"]',D='[data-toggle="buttons"]',I='input:not([type="hidden"])',A=".active",O=".btn",N={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:"focus"+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=p(this._element).closest(D)[0];if(n){var i=this._element.querySelector(I);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(w))t=!1;else{var o=n.querySelector(A);o&&p(o).removeClass(w)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(w),p(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(w)),t&&p(this._element).toggleClass(w)},t.dispose=function(){p.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(v);t||(t=new n(this),p(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.2.1"}}]),n}();p(document).on(N.CLICK_DATA_API,S,function(t){t.preventDefault();var e=t.target;p(e).hasClass(T)||(e=p(e).closest(O)),k._jQueryInterface.call(p(e),"toggle")}).on(N.FOCUS_BLUR_DATA_API,S,function(t){var e=p(t.target).closest(O)[0];p(e).toggleClass(C,/^focus(in)?$/.test(t.type))}),p.fn[_]=k._jQueryInterface,p.fn[_].Constructor=k,p.fn[_].noConflict=function(){return p.fn[_]=b,k._jQueryInterface};var L="carousel",P="bs.carousel",x="."+P,H=".data-api",j=p.fn[L],R={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},M="next",W="prev",U="left",B="right",q={SLIDE:"slide"+x,SLID:"slid"+x,KEYDOWN:"keydown"+x,MOUSEENTER:"mouseenter"+x,MOUSELEAVE:"mouseleave"+x,TOUCHSTART:"touchstart"+x,TOUCHMOVE:"touchmove"+x,TOUCHEND:"touchend"+x,POINTERDOWN:"pointerdown"+x,POINTERUP:"pointerup"+x,DRAG_START:"dragstart"+x,LOAD_DATA_API:"load"+x+H,CLICK_DATA_API:"click"+x+H},K="carousel",Q="active",Y="slide",V="carousel-item-right",X="carousel-item-left",z="carousel-item-next",G="carousel-item-prev",J="pointer-event",Z=".active",$=".active.carousel-item",tt=".carousel-item",et=".carousel-item img",nt=".carousel-item-next, .carousel-item-prev",it=".carousel-indicators",ot="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',st={TOUCH:"touch",PEN:"pen"},at=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(it),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(M)},t.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(W)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(nt)&&(m.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($);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)p(this._element).one(q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?M:W;this._slide(i,this._items[t])}},t.dispose=function(){p(this._element).off(x),p.removeData(this._element,P),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({},R,t),m.typeCheckConfig(L,t,F),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&p(this._element).on(q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&p(this._element).on(q.MOUSEENTER,function(t){return e.pause(t)}).on(q.MOUSELEAVE,function(t){return e.cycle(t)}),this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};p(this._element.querySelectorAll(et)).on(q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(p(this._element).on(q.POINTERDOWN,function(t){return e(t)}),p(this._element).on(q.POINTERUP,function(t){return i(t)}),this._element.classList.add(J)):(p(this._element).on(q.TOUCHSTART,function(t){return e(t)}),p(this._element).on(q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),p(this._element).on(q.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(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===M,i=t===W,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===W?-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($)),o=p.Event(q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return p(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(Z));p(e).removeClass(Q);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&p(n).addClass(Q)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector($),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===M?(n=X,i=z,U):(n=V,i=G,B),l&&p(l).hasClass(Q))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(q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(Y)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(Q),p(s).removeClass(Q+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(Q),p(l).addClass(Q),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=p(this).data(P),e=l({},R,p(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),p(this).data(P,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&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=m.getSelectorFromElement(this);if(e){var n=p(e)[0];if(n&&p(n).hasClass(K)){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(P).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return R}}]),r}();p(document).on(q.CLICK_DATA_API,ot,at._dataApiClickHandler),p(window).on(q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=p(t[e]);at._jQueryInterface.call(i,i.data())}}),p.fn[L]=at._jQueryInterface,p.fn[L].Constructor=at,p.fn[L].noConflict=function(){return p.fn[L]=j,at._jQueryInterface};var lt="collapse",ct="bs.collapse",ht="."+ct,ut=p.fn[lt],ft={toggle:!0,parent:""},dt={toggle:"boolean",parent:"(string|element)"},pt={SHOW:"show"+ht,SHOWN:"shown"+ht,HIDE:"hide"+ht,HIDDEN:"hidden"+ht,CLICK_DATA_API:"click"+ht+".data-api"},mt="show",gt="collapse",_t="collapsing",vt="collapsed",yt="width",Et="height",bt=".show, .collapsing",wt='[data-toggle="collapse"]',Tt=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(wt)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.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(){p(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(bt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(gt)})).length&&(t=null),!(t&&(e=p(t).not(this._selector).data(ct))&&e._isTransitioning))){var i=p.Event(pt.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(p(t).not(this._selector),"hide"),e||p(t).data(ct,null));var o=this._getDimension();p(this._element).removeClass(gt).addClass(_t),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(vt).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(_t).addClass(gt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(pt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&p(this._element).hasClass(mt)){var e=p.Event(pt.HIDE);if(p(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(_t).removeClass(gt).removeClass(mt);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(mt)||p(r).addClass(vt).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(){t.setTransitioning(!1),p(t._element).removeClass(_t).addClass(gt).trigger(pt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){p.removeData(this._element,ct),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ft,t)).toggle=Boolean(t.toggle),m.typeCheckConfig(lt,t,dt),t},t._getDimension=function(){return p(this._element).hasClass(yt)?yt:Et},t._getParent=function(){var t,n=this;m.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 p(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=p(t).hasClass(mt);e.length&&p(e).toggleClass(vt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=m.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=p(this),e=t.data(ct),n=l({},ft,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(ct,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.2.1"}},{key:"Default",get:function(){return ft}}]),a}();p(document).on(pt.CLICK_DATA_API,wt,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=p(this),e=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));p(i).each(function(){var t=p(this),e=t.data(ct)?"toggle":n.data();Tt._jQueryInterface.call(t,e)})}),p.fn[lt]=Tt._jQueryInterface,p.fn[lt].Constructor=Tt,p.fn[lt].noConflict=function(){return p.fn[lt]=ut,Tt._jQueryInterface};for(var Ct="undefined"!=typeof window&&"undefined"!=typeof document,St=["Edge","Trident","Firefox"],Dt=0,It=0;It<St.length;It+=1)if(Ct&&0<=navigator.userAgent.indexOf(St[It])){Dt=1;break}var At=Ct&&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()},Dt))}};function Ot(t){return t&&"[object Function]"==={}.toString.call(t)}function Nt(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function kt(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function Lt(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=Nt(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:Lt(kt(t))}var Pt=Ct&&!(!window.MSInputMethodContext||!document.documentMode),xt=Ct&&/MSIE 10/.test(navigator.userAgent);function Ht(t){return 11===t?Pt:10===t?xt:Pt||xt}function jt(t){if(!t)return document.documentElement;for(var e=Ht(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"===Nt(n,"position")?jt(n):n:t?t.ownerDocument.documentElement:document.documentElement}function Rt(t){return null!==t.parentNode?Rt(t.parentNode):t}function Ft(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&&jt(s.firstElementChild)!==s?jt(l):l;var c=Rt(t);return c.host?Ft(c.host,e):Ft(t,Rt(e).host)}function Mt(t){var e="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=t.nodeName;if("BODY"!==n&&"HTML"!==n)return t[e];var i=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||i)[e]}function Wt(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 Ut(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],Ht(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function Bt(t){var e=t.body,n=t.documentElement,i=Ht(10)&&getComputedStyle(n);return{height:Ut("Height",e,n,i),width:Ut("Width",e,n,i)}}var qt=function(){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)}}return function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}}(),Kt=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},Qt=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 Yt(t){return Qt({},t,{right:t.left+t.width,bottom:t.top+t.height})}function Vt(t){var e={};try{if(Ht(10)){e=t.getBoundingClientRect();var n=Mt(t,"top"),i=Mt(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?Bt(t.ownerDocument):{},s=r.width||t.clientWidth||o.right-o.left,a=r.height||t.clientHeight||o.bottom-o.top,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var h=Nt(t);l-=Wt(h,"x"),c-=Wt(h,"y"),o.width-=l,o.height-=c}return Yt(o)}function Xt(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Ht(10),o="HTML"===e.nodeName,r=Vt(t),s=Vt(e),a=Lt(t),l=Nt(e),c=parseFloat(l.borderTopWidth,10),h=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var u=Yt({top:r.top-s.top-c,left:r.left-s.left-h,width:r.width,height:r.height});if(u.marginTop=0,u.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);u.top-=c-f,u.bottom-=c-f,u.left-=h-d,u.right-=h-d,u.marginTop=f,u.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(u=function(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Mt(e,"top"),o=Mt(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}(u,e)),u}function zt(t){if(!t||!t.parentElement||Ht())return document.documentElement;for(var e=t.parentElement;e&&"none"===Nt(e,"transform");)e=e.parentElement;return e||document.documentElement}function Gt(t,e,n,i){var o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?zt(t):Ft(t,e);if("viewport"===i)r=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=Xt(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:Mt(n),a=e?0:Mt(n,"left");return Yt({top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r})}(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=Lt(kt(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=Xt(a,s,o);if("HTML"!==a.nodeName||function t(e){var n=e.nodeName;return"BODY"!==n&&"HTML"!==n&&("fixed"===Nt(e,"position")||t(kt(e)))}(s))r=l;else{var c=Bt(t.ownerDocument),h=c.height,u=c.width;r.top+=l.top-l.marginTop,r.bottom=h+l.top,r.left+=l.left-l.marginLeft,r.right=u+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 Jt(t,e,i,n,o){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=Gt(i,n,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 Qt({key:t},a[t],{area:(e=a[t],e.width*e.height)});var e}).sort(function(t,e){return e.area-t.area}),c=l.filter(function(t){var e=t.width,n=t.height;return e>=i.clientWidth&&n>=i.clientHeight}),h=0<c.length?c[0].key:l[0].key,u=t.split("-")[1];return h+(u?"-"+u:"")}function Zt(t,e,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return Xt(n,i?zt(e):Ft(e,n),i)}function $t(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 te(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 ee(t,e,n){n=n.split("-")[0];var i=$t(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[te(a)],o}function ne(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ie(t,n,e){return(void 0===e?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex(function(t){return t[e]===n});var i=ne(t,function(t){return t[e]===n});return t.indexOf(i)}(t,"name",e))).forEach(function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var e=t.function||t.fn;t.enabled&&Ot(e)&&(n.offsets.popper=Yt(n.offsets.popper),n.offsets.reference=Yt(n.offsets.reference),n=e(n,t))}),n}function oe(t,n){return t.some(function(t){var e=t.name;return t.enabled&&e===n})}function re(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 se(t){var e=t.ownerDocument;return e?e.defaultView:window}function ae(t,e,n,i){n.updateBound=i,se(t).addEventListener("resize",n.updateBound,{passive:!0});var o=Lt(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(Lt(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function le(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,se(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 ce(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function he(n,i){Object.keys(i).forEach(function(t){var e="";-1!==["width","height","top","right","bottom","left"].indexOf(t)&&ce(i[t])&&(e="px"),n.style[t]=i[t]+e})}var ue=Ct&&/Firefox/i.test(navigator.userAgent);function fe(t,e,n){var i=ne(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 de=["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"],pe=de.slice(3);function me(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=pe.indexOf(t),i=pe.slice(n+1).concat(pe.slice(0,n));return e?i.reverse():i}var ge="flip",_e="clockwise",ve="counterclockwise";function ye(t,o,r,e){var s=[0,0],a=-1!==["right","left"].indexOf(e),n=t.split(/(\+|\-)/).map(function(t){return t.trim()}),i=n.indexOf(ne(n,function(t){return-1!==t.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(t,e){var n=(1===e?!a:a)?"height":"width",i=!1;return t.reduce(function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,i=!0,t):i?(t[t.length-1]+=e,i=!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("%"))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 Yt(a)[e]/100*r}(t,n,o,r)})})).forEach(function(n,i){n.forEach(function(t,e){ce(t)&&(s[i]+=t*("-"===n[e-1]?-1:1))})}),s}var Ee={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",h={start:Kt({},l,r[l]),end:Kt({},l,r[l]+r[c]-s[c])};t.offsets.popper=Qt({},s,h[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=ce(+n)?[+n,0]:ye(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,i){var e=i.boundariesElement||jt(t.instance.popper);t.instance.reference===e&&(e=jt(e));var n=re("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Gt(t.instance.popper,t.instance.reference,i.padding,e,t.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=t.offsets.popper,u={primary:function(t){var e=h[t];return h[t]<l[t]&&!i.escapeWithReference&&(e=Math.max(h[t],l[t])),Kt({},t,e)},secondary:function(t){var e="right"===t?"left":"top",n=h[e];return h[t]>l[t]&&!i.escapeWithReference&&(n=Math.min(h[e],l[t]-("right"===t?h.width:h.height))),Kt({},e,n)}};return c.forEach(function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";h=Qt({},h,u[e](t))}),t.offsets.popper=h,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(!fe(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",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=$t(i)[c];a[d]-p<s[u]&&(t.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(t.offsets.popper[u]+=a[u]+p-s[d]),t.offsets.popper=Yt(t.offsets.popper);var m=a[u]+a[c]/2-p/2,g=Nt(t.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-t.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),t.arrowElement=i,t.offsets.arrow=(Kt(n={},u,Math.round(y)),Kt(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(oe(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=Gt(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=te(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case ge:E=[_,v];break;case _e:E=me(_);break;case ve:E=me(_,!0);break;default:E=m.behavior}return E.forEach(function(t,e){if(_!==t||E.length===e+1)return p;_=p.placement.split("-")[0],v=te(_);var n,i=p.offsets.popper,o=p.offsets.reference,r=Math.floor,s="left"===_&&r(i.right)>r(o.left)||"right"===_&&r(i.left)<r(o.right)||"top"===_&&r(i.bottom)>r(o.top)||"bottom"===_&&r(i.top)<r(o.bottom),a=r(i.left)<r(g.left),l=r(i.right)>r(g.right),c=r(i.top)<r(g.top),h=r(i.bottom)>r(g.bottom),u="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&h,f=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(f&&"start"===y&&a||f&&"end"===y&&l||!f&&"start"===y&&c||!f&&"end"===y&&h);(s||u||d)&&(p.flipped=!0,(s||u)&&(_=E[e+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=Qt({},p.offsets.popper,ee(p.instance.popper,p.offsets.reference,p.placement)),p=ie(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},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=te(e),t.offsets.popper=Yt(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!fe(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=ne(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=ne(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,a,l,c,h,u,f,d,p,m,g,_,v=void 0!==r?r:e.gpuAcceleration,y=jt(t.instance.popper),E=Vt(y),b={position:o.position},w=(s=t,a=window.devicePixelRatio<2||!ue,l=s.offsets,c=l.popper,h=l.reference,u=-1!==["left","right"].indexOf(s.placement),f=-1!==s.placement.indexOf("-"),d=h.width%2==c.width%2,p=h.width%2==1&&c.width%2==1,m=function(t){return t},g=a?u||f||d?Math.round:Math.floor:m,_=a?Math.round:m,{left:g(p&&!f&&a?c.left-1:c.left),top:_(c.top),bottom:_(c.bottom),right:g(c.right)}),T="bottom"===n?"top":"bottom",C="right"===i?"left":"right",S=re("transform"),D=void 0,I=void 0;if(I="bottom"===T?"HTML"===y.nodeName?-y.clientHeight+w.bottom:-E.height+w.bottom:w.top,D="right"===C?"HTML"===y.nodeName?-y.clientWidth+w.right:-E.width+w.right:w.left,v&&S)b[S]="translate3d("+D+"px, "+I+"px, 0)",b[T]=0,b[C]=0,b.willChange="transform";else{var A="bottom"===T?-1:1,O="right"===C?-1:1;b[T]=I*A,b[C]=D*O,b.willChange=T+", "+C}var N={"x-placement":t.placement};return t.attributes=Qt({},N,t.attributes),t.styles=Qt({},b,t.styles),t.arrowStyles=Qt({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return he(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&&he(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=Zt(o,e,t,n.positionFixed),s=Jt(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),he(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},be=function(){function r(t,e){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=At(this.update.bind(this)),this.options=Qt({},r.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=e&&e.jquery?e[0]:e,this.options.modifiers={},Object.keys(Qt({},r.Defaults.modifiers,i.modifiers)).forEach(function(t){n.options.modifiers[t]=Qt({},r.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(t){return Qt({name:t},n.options.modifiers[t])}).sort(function(t,e){return t.order-e.order}),this.modifiers.forEach(function(t){t.enabled&&Ot(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return qt(r,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=Zt(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=Jt(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=ee(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ie(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,oe(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[re("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=ae(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return le.call(this)}}]),r}();be.Utils=("undefined"!=typeof window?window:global).PopperUtils,be.placements=de,be.Defaults=Ee;var we="dropdown",Te="bs.dropdown",Ce="."+Te,Se=".data-api",De=p.fn[we],Ie=new RegExp("38|40|27"),Ae={HIDE:"hide"+Ce,HIDDEN:"hidden"+Ce,SHOW:"show"+Ce,SHOWN:"shown"+Ce,CLICK:"click"+Ce,CLICK_DATA_API:"click"+Ce+Se,KEYDOWN_DATA_API:"keydown"+Ce+Se,KEYUP_DATA_API:"keyup"+Ce+Se},Oe="disabled",Ne="show",ke="dropup",Le="dropright",Pe="dropleft",xe="dropdown-menu-right",He="position-static",je='[data-toggle="dropdown"]',Re=".dropdown form",Fe=".dropdown-menu",Me=".navbar-nav",We=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ue="top-start",Be="top-end",qe="bottom-start",Ke="bottom-end",Qe="right-start",Ye="left-start",Ve={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Xe={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},ze=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&&!p(this._element).hasClass(Oe)){var t=c._getParentFromElement(this._element),e=p(this._menu).hasClass(Ne);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=p.Event(Ae.SHOW,n);if(p(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof be)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t: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(t).addClass(He),this._popper=new be(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(t).closest(Me).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(Ne),p(t).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||p(this._element).hasClass(Oe)||p(this._menu).hasClass(Ne))){var t={relatedTarget:this._element},e=p.Event(Ae.SHOW,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)&&p(this._menu).hasClass(Ne)){var t={relatedTarget:this._element},e=p.Event(Ae.HIDE,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.HIDDEN,t)))}},t.dispose=function(){p.removeData(this._element,Te),p(this._element).off(Ce),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;p(this._element).on(Ae.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,p(this._element).data(),t),m.typeCheckConfig(we,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Fe))}return this._menu},t._getPlacement=function(){var t=p(this._element.parentNode),e=qe;return t.hasClass(ke)?(e=Ue,p(this._menu).hasClass(xe)&&(e=Be)):t.hasClass(Le)?e=Qe:t.hasClass(Pe)?e=Ye:p(this._menu).hasClass(xe)&&(e=Ke),e},t._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(Te);if(t||(t=new c(this,"object"==typeof e?e:null),p(this).data(Te,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(je)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=p(e[n]).data(Te),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(p(o).hasClass(Ne)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&p.contains(o,t.target))){var l=p.Event(Ae.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),e[n].setAttribute("aria-expanded","false"),p(a).removeClass(Ne),p(o).removeClass(Ne).trigger(p.Event(Ae.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=m.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||p(t.target).closest(Fe).length)):Ie.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!p(this).hasClass(Oe))){var e=c._getParentFromElement(this),n=p(e).hasClass(Ne);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(We));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(je);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return Ve}},{key:"DefaultType",get:function(){return Xe}}]),c}();p(document).on(Ae.KEYDOWN_DATA_API,je,ze._dataApiKeydownHandler).on(Ae.KEYDOWN_DATA_API,Fe,ze._dataApiKeydownHandler).on(Ae.CLICK_DATA_API+" "+Ae.KEYUP_DATA_API,ze._clearMenus).on(Ae.CLICK_DATA_API,je,function(t){t.preventDefault(),t.stopPropagation(),ze._jQueryInterface.call(p(this),"toggle")}).on(Ae.CLICK_DATA_API,Re,function(t){t.stopPropagation()}),p.fn[we]=ze._jQueryInterface,p.fn[we].Constructor=ze,p.fn[we].noConflict=function(){return p.fn[we]=De,ze._jQueryInterface};var Ge="modal",Je="bs.modal",Ze="."+Je,$e=p.fn[Ge],tn={backdrop:!0,keyboard:!0,focus:!0,show:!0},en={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},nn={HIDE:"hide"+Ze,HIDDEN:"hidden"+Ze,SHOW:"show"+Ze,SHOWN:"shown"+Ze,FOCUSIN:"focusin"+Ze,RESIZE:"resize"+Ze,CLICK_DISMISS:"click.dismiss"+Ze,KEYDOWN_DISMISS:"keydown.dismiss"+Ze,MOUSEUP_DISMISS:"mouseup.dismiss"+Ze,MOUSEDOWN_DISMISS:"mousedown.dismiss"+Ze,CLICK_DATA_API:"click"+Ze+".data-api"},on="modal-scrollbar-measure",rn="modal-backdrop",sn="modal-open",an="fade",ln="show",cn=".modal-dialog",hn='[data-toggle="modal"]',un='[data-dismiss="modal"]',fn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",dn=".sticky-top",pn=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(cn),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){p(this._element).hasClass(an)&&(this._isTransitioning=!0);var n=p.Event(nn.SHOW,{relatedTarget:t});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(nn.CLICK_DISMISS,un,function(t){return e.hide(t)}),p(this._dialog).on(nn.MOUSEDOWN_DISMISS,function(){p(e._element).one(nn.MOUSEUP_DISMISS,function(t){p(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=p.Event(nn.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(an);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(nn.FOCUSIN),p(this._element).removeClass(ln),p(this._element).off(nn.CLICK_DISMISS),p(this._dialog).off(nn.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.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 p(t).off(Ze)}),p(document).off(nn.FOCUSIN),p.removeData(this._element,Je),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({},tn,t),m.typeCheckConfig(Ge,t,en),t},t._showElement=function(t){var e=this,n=p(this._element).hasClass(an);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),this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(ln),this._config.focus&&this._enforceFocus();var i=p.Event(nn.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,p(e._element).trigger(i)};if(n){var r=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;p(document).off(nn.FOCUSIN).on(nn.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===p(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?p(this._element).on(nn.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||p(this._element).off(nn.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?p(window).on(nn.RESIZE,function(t){return e.handleUpdate(t)}):p(window).off(nn.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(){p(document.body).removeClass(sn),t._resetAdjustments(),t._resetScrollbar(),p(t._element).trigger(nn.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=p(this._element).hasClass(an)?an:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=rn,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(nn.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(ln),!t)return;if(!n)return void t();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(ln);var o=function(){e._removeBackdrop(),t&&t()};if(p(this._element).hasClass(an)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.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(fn)),e=[].slice.call(document.querySelectorAll(dn));p(t).each(function(t,e){var n=e.style.paddingRight,i=p(e).css("padding-right");p(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(e).each(function(t,e){var n=e.style.marginRight,i=p(e).css("margin-right");p(e).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(sn)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(fn));p(t).each(function(t,e){var n=p(e).data("padding-right");p(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+dn));p(e).each(function(t,e){var n=p(e).data("margin-right");"undefined"!=typeof n&&p(e).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||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=on,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=p(this).data(Je),e=l({},tn,p(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),p(this).data(Je,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.2.1"}},{key:"Default",get:function(){return tn}}]),o}();p(document).on(nn.CLICK_DATA_API,hn,function(t){var e,n=this,i=m.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=p(e).data(Je)?"toggle":l({},p(e).data(),p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=p(e).one(nn.SHOW,function(t){t.isDefaultPrevented()||r.one(nn.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});pn._jQueryInterface.call(p(e),o,this)}),p.fn[Ge]=pn._jQueryInterface,p.fn[Ge].Constructor=pn,p.fn[Ge].noConflict=function(){return p.fn[Ge]=$e,pn._jQueryInterface};var mn="tooltip",gn="bs.tooltip",_n="."+gn,vn=p.fn[mn],yn="bs-tooltip",En=new RegExp("(^|\\s)"+yn+"\\S+","g"),bn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"},wn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Tn={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"},Cn="show",Sn="out",Dn={HIDE:"hide"+_n,HIDDEN:"hidden"+_n,SHOW:"show"+_n,SHOWN:"shown"+_n,INSERTED:"inserted"+_n,CLICK:"click"+_n,FOCUSIN:"focusin"+_n,FOCUSOUT:"focusout"+_n,MOUSEENTER:"mouseenter"+_n,MOUSELEAVE:"mouseleave"+_n},In="fade",An="show",On=".tooltip-inner",Nn=".arrow",kn="hover",Ln="focus",Pn="click",xn="manual",Hn=function(){function i(t,e){if("undefined"==typeof be)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=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(An))return void this._leave(null,this);this._enter(null,this)}},t.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.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},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.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(In);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 be(this.element,o,{placement:a,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Nn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(An),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===Sn&&e._leave(null,e)};if(p(this.tip).hasClass(In)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Cn&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(An),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Pn]=!1,this._activeTrigger[Ln]=!1,this._activeTrigger[kn]=!1,p(this.tip).hasClass(In)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(yn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(On)),this.getTitle()),p(t).removeClass(In+" "+An)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text()):t[n?"html":"text"](e)},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},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return wn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xn){var e=t===kn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===kn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),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||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ln:kn]=!0),p(e.getTipElement()).hasClass(An)||e._hoverState===Cn?e._hoverState=Cn:(clearTimeout(e._timeout),e._hoverState=Cn,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Cn&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ln:kn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Sn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Sn&&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){return"number"==typeof(t=l({},this.constructor.Default,p(this.element).data(),"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()),m.typeCheckConfig(mn,t,this.constructor.DefaultType),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=p(this.getTipElement()),e=t.attr("class").match(En);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")&&(p(t).removeClass(In),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(gn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(gn,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.2.1"}},{key:"Default",get:function(){return Tn}},{key:"NAME",get:function(){return mn}},{key:"DATA_KEY",get:function(){return gn}},{key:"Event",get:function(){return Dn}},{key:"EVENT_KEY",get:function(){return _n}},{key:"DefaultType",get:function(){return bn}}]),i}();p.fn[mn]=Hn._jQueryInterface,p.fn[mn].Constructor=Hn,p.fn[mn].noConflict=function(){return p.fn[mn]=vn,Hn._jQueryInterface};var jn="popover",Rn="bs.popover",Fn="."+Rn,Mn=p.fn[jn],Wn="bs-popover",Un=new RegExp("(^|\\s)"+Wn+"\\S+","g"),Bn=l({},Hn.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>'}),qn=l({},Hn.DefaultType,{content:"(string|element|function)"}),Kn="fade",Qn="show",Yn=".popover-header",Vn=".popover-body",Xn={HIDE:"hide"+Fn,HIDDEN:"hidden"+Fn,SHOW:"show"+Fn,SHOWN:"shown"+Fn,INSERTED:"inserted"+Fn,CLICK:"click"+Fn,FOCUSIN:"focusin"+Fn,FOCUSOUT:"focusout"+Fn,MOUSEENTER:"mouseenter"+Fn,MOUSELEAVE:"mouseleave"+Fn},zn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Wn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(Yn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Vn),e),t.removeClass(Kn+" "+Qn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Un);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Rn),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Rn,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.2.1"}},{key:"Default",get:function(){return Bn}},{key:"NAME",get:function(){return jn}},{key:"DATA_KEY",get:function(){return Rn}},{key:"Event",get:function(){return Xn}},{key:"EVENT_KEY",get:function(){return Fn}},{key:"DefaultType",get:function(){return qn}}]),i}(Hn);p.fn[jn]=zn._jQueryInterface,p.fn[jn].Constructor=zn,p.fn[jn].noConflict=function(){return p.fn[jn]=Mn,zn._jQueryInterface};var Gn="scrollspy",Jn="bs.scrollspy",Zn="."+Jn,$n=p.fn[Gn],ti={offset:10,method:"auto",target:""},ei={offset:"number",method:"string",target:"(string|element)"},ni={ACTIVATE:"activate"+Zn,SCROLL:"scroll"+Zn,LOAD_DATA_API:"load"+Zn+".data-api"},ii="dropdown-item",oi="active",ri='[data-spy="scroll"]',si=".nav, .list-group",ai=".nav-link",li=".nav-item",ci=".list-group-item",hi=".dropdown",ui=".dropdown-item",fi=".dropdown-toggle",di="offset",pi="position",mi=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+" "+ai+","+this._config.target+" "+ci+","+this._config.target+" "+ui,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(ni.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?di:pi,o="auto"===this._config.method?t:this._config.method,r=o===pi?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=m.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[p(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(){p.removeData(this._element,Jn),p(this._scrollElement).off(Zn),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({},ti,"object"==typeof t&&t?t:{})).target){var e=p(t.target).attr("id");e||(e=m.getUID(Gn),p(t.target).attr("id",e)),t.target="#"+e}return m.typeCheckConfig(Gn,t,ei),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=p([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(ii)?(n.closest(hi).find(fi).addClass(oi),n.addClass(oi)):(n.addClass(oi),n.parents(si).prev(ai+", "+ci).addClass(oi),n.parents(si).prev(li).children(ai).addClass(oi)),p(this._scrollElement).trigger(ni.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(oi)}).forEach(function(t){return t.classList.remove(oi)})},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(Jn);if(t||(t=new n(this,"object"==typeof e&&e),p(this).data(Jn,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.2.1"}},{key:"Default",get:function(){return ti}}]),n}();p(window).on(ni.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ri)),e=t.length;e--;){var n=p(t[e]);mi._jQueryInterface.call(n,n.data())}}),p.fn[Gn]=mi._jQueryInterface,p.fn[Gn].Constructor=mi,p.fn[Gn].noConflict=function(){return p.fn[Gn]=$n,mi._jQueryInterface};var gi="bs.tab",_i="."+gi,vi=p.fn.tab,yi={HIDE:"hide"+_i,HIDDEN:"hidden"+_i,SHOW:"show"+_i,SHOWN:"shown"+_i,CLICK_DATA_API:"click"+_i+".data-api"},Ei="dropdown-menu",bi="active",wi="disabled",Ti="fade",Ci="show",Si=".dropdown",Di=".nav, .list-group",Ii=".active",Ai="> li > .active",Oi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ni=".dropdown-toggle",ki="> .dropdown-menu .active",Li=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&&p(this._element).hasClass(bi)||p(this._element).hasClass(wi))){var t,i,e=p(this._element).closest(Di)[0],o=m.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Ai:Ii;i=(i=p.makeArray(p(e).find(r)))[i.length-1]}var s=p.Event(yi.HIDE,{relatedTarget:this._element}),a=p.Event(yi.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=p.Event(yi.HIDDEN,{relatedTarget:n._element}),e=p.Event(yi.SHOWN,{relatedTarget:i});p(i).trigger(t),p(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){p.removeData(this._element,gi),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?p(e).children(Ii):p(e).find(Ai))[0],r=n&&o&&p(o).hasClass(Ti),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=m.getTransitionDurationFromElement(o);p(o).removeClass(Ci).one(m.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){p(e).removeClass(bi);var i=p(e.parentNode).find(ki)[0];i&&p(i).removeClass(bi),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(p(t).addClass(bi),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),m.reflow(t),p(t).addClass(Ci),t.parentNode&&p(t.parentNode).hasClass(Ei)){var o=p(t).closest(Si)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ni));p(r).addClass(bi)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(gi);if(e||(e=new i(this),t.data(gi,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.2.1"}}]),i}();p(document).on(yi.CLICK_DATA_API,Oi,function(t){t.preventDefault(),Li._jQueryInterface.call(p(this),"show")}),p.fn.tab=Li._jQueryInterface,p.fn.tab.Constructor=Li,p.fn.tab.noConflict=function(){return p.fn.tab=vi,Li._jQueryInterface};var Pi="toast",xi="bs.toast",Hi="."+xi,ji=p.fn[Pi],Ri={CLICK_DISMISS:"click.dismiss"+Hi,HIDE:"hide"+Hi,HIDDEN:"hidden"+Hi,SHOW:"show"+Hi,SHOWN:"shown"+Hi},Fi="fade",Mi="hide",Wi="show",Ui="showing",Bi={animation:"boolean",autohide:"boolean",delay:"number"},qi={animation:!0,autohide:!0,delay:500},Ki='[data-dismiss="toast"]',Qi=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;p(this._element).trigger(Ri.SHOW),this._config.animation&&this._element.classList.add(Fi);var e=function(){t._element.classList.remove(Ui),t._element.classList.add(Wi),p(t._element).trigger(Ri.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Mi),this._element.classList.add(Ui),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(Wi)&&(p(this._element).trigger(Ri.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Wi)&&this._element.classList.remove(Wi),p(this._element).off(Ri.CLICK_DISMISS),p.removeData(this._element,xi),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},qi,p(this._element).data(),"object"==typeof t&&t?t:{}),m.typeCheckConfig(Pi,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;p(this._element).on(Ri.CLICK_DISMISS,Ki,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Mi),p(t._element).trigger(Ri.HIDDEN)};if(this._element.classList.remove(Wi),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 t=p(this),e=t.data(xi);if(e||(e=new i(this,"object"==typeof n&&n),t.data(xi,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.2.1"}},{key:"DefaultType",get:function(){return Bi}}]),i}();p.fn[Pi]=Qi._jQueryInterface,p.fn[Pi].Constructor=Qi,p.fn[Pi].noConflict=function(){return p.fn[Pi]=ji,Qi._jQueryInterface},function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=p.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")}(),t.Util=m,t.Alert=g,t.Button=k,t.Carousel=at,t.Collapse=Tt,t.Dropdown=ze,t.Modal=pn,t.Popover=zn,t.Scrollspy=mi,t.Tab=Li,t.Toast=Qi,t.Tooltip=Hn,Object.defineProperty(t,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.bundle.min.js.map
1
  /*!
2
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 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,p){"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 l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.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})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var e="transitionend";function n(t){var e=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(e)},t),this}var m={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=p(t).css("transition-duration"),n=p(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){p(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},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&&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(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?m.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};p.fn.emulateTransitionEnd=n,p.event.special[m.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(p(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=p.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},u="alert",f="fade",d="show",g=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(){p.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=m.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=p(t).closest("."+u)[0]),n},t._triggerCloseEvent=function(t){var e=p.Event(h.CLOSE);return p(t).trigger(e),e},t._removeElement=function(e){var n=this;if(p(e).removeClass(d),p(e).hasClass(f)){var t=m.getTransitionDurationFromElement(e);p(e).one(m.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){p(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(r);e||(e=new i(this),t.data(r,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.3.1"}}]),i}();p(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),p.fn[o]=g._jQueryInterface,p.fn[o].Constructor=g,p.fn[o].noConflict=function(){return p.fn[o]=c,g._jQueryInterface};var _="button",v="bs.button",y="."+v,E=".data-api",b=p.fn[_],w="active",C="btn",T="focus",S='[data-toggle^="button"]',D='[data-toggle="buttons"]',I='input:not([type="hidden"])',A=".active",O=".btn",N={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:"focus"+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=p(this._element).closest(D)[0];if(n){var i=this._element.querySelector(I);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(w))t=!1;else{var o=n.querySelector(A);o&&p(o).removeClass(w)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(w),p(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(w)),t&&p(this._element).toggleClass(w)},t.dispose=function(){p.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(v);t||(t=new n(this),p(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),n}();p(document).on(N.CLICK_DATA_API,S,function(t){t.preventDefault();var e=t.target;p(e).hasClass(C)||(e=p(e).closest(O)),k._jQueryInterface.call(p(e),"toggle")}).on(N.FOCUS_BLUR_DATA_API,S,function(t){var e=p(t.target).closest(O)[0];p(e).toggleClass(T,/^focus(in)?$/.test(t.type))}),p.fn[_]=k._jQueryInterface,p.fn[_].Constructor=k,p.fn[_].noConflict=function(){return p.fn[_]=b,k._jQueryInterface};var L="carousel",x="bs.carousel",P="."+x,H=".data-api",j=p.fn[L],R={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},M="next",W="prev",U="left",B="right",q={SLIDE:"slide"+P,SLID:"slid"+P,KEYDOWN:"keydown"+P,MOUSEENTER:"mouseenter"+P,MOUSELEAVE:"mouseleave"+P,TOUCHSTART:"touchstart"+P,TOUCHMOVE:"touchmove"+P,TOUCHEND:"touchend"+P,POINTERDOWN:"pointerdown"+P,POINTERUP:"pointerup"+P,DRAG_START:"dragstart"+P,LOAD_DATA_API:"load"+P+H,CLICK_DATA_API:"click"+P+H},K="carousel",Q="active",V="slide",Y="carousel-item-right",z="carousel-item-left",X="carousel-item-next",G="carousel-item-prev",$="pointer-event",J=".active",Z=".active.carousel-item",tt=".carousel-item",et=".carousel-item img",nt=".carousel-item-next, .carousel-item-prev",it=".carousel-indicators",ot="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',st={TOUCH:"touch",PEN:"pen"},at=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(it),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(M)},t.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(W)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(nt)&&(m.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(Z);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)p(this._element).one(q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?M:W;this._slide(i,this._items[t])}},t.dispose=function(){p(this._element).off(P),p.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({},R,t),m.typeCheckConfig(L,t,F),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&p(this._element).on(q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&p(this._element).on(q.MOUSEENTER,function(t){return e.pause(t)}).on(q.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};p(this._element.querySelectorAll(et)).on(q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(p(this._element).on(q.POINTERDOWN,function(t){return e(t)}),p(this._element).on(q.POINTERUP,function(t){return i(t)}),this._element.classList.add($)):(p(this._element).on(q.TOUCHSTART,function(t){return e(t)}),p(this._element).on(q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),p(this._element).on(q.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(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===M,i=t===W,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===W?-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(Z)),o=p.Event(q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return p(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(J));p(e).removeClass(Q);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&p(n).addClass(Q)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(Z),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===M?(n=z,i=X,U):(n=Y,i=G,B),l&&p(l).hasClass(Q))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(q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(V)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(Q),p(s).removeClass(Q+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(Q),p(l).addClass(Q),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=p(this).data(x),e=l({},R,p(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),p(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=m.getSelectorFromElement(this);if(e){var n=p(e)[0];if(n&&p(n).hasClass(K)){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(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return R}}]),r}();p(document).on(q.CLICK_DATA_API,ot,at._dataApiClickHandler),p(window).on(q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=p(t[e]);at._jQueryInterface.call(i,i.data())}}),p.fn[L]=at._jQueryInterface,p.fn[L].Constructor=at,p.fn[L].noConflict=function(){return p.fn[L]=j,at._jQueryInterface};var lt="collapse",ct="bs.collapse",ht="."+ct,ut=p.fn[lt],ft={toggle:!0,parent:""},dt={toggle:"boolean",parent:"(string|element)"},pt={SHOW:"show"+ht,SHOWN:"shown"+ht,HIDE:"hide"+ht,HIDDEN:"hidden"+ht,CLICK_DATA_API:"click"+ht+".data-api"},mt="show",gt="collapse",_t="collapsing",vt="collapsed",yt="width",Et="height",bt=".show, .collapsing",wt='[data-toggle="collapse"]',Ct=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(wt)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.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(){p(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(bt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(gt)})).length&&(t=null),!(t&&(e=p(t).not(this._selector).data(ct))&&e._isTransitioning))){var i=p.Event(pt.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(p(t).not(this._selector),"hide"),e||p(t).data(ct,null));var o=this._getDimension();p(this._element).removeClass(gt).addClass(_t),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(vt).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(_t).addClass(gt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(pt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&p(this._element).hasClass(mt)){var e=p.Event(pt.HIDE);if(p(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(_t).removeClass(gt).removeClass(mt);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(mt)||p(r).addClass(vt).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(){t.setTransitioning(!1),p(t._element).removeClass(_t).addClass(gt).trigger(pt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){p.removeData(this._element,ct),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ft,t)).toggle=Boolean(t.toggle),m.typeCheckConfig(lt,t,dt),t},t._getDimension=function(){return p(this._element).hasClass(yt)?yt:Et},t._getParent=function(){var t,n=this;m.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 p(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=p(t).hasClass(mt);e.length&&p(e).toggleClass(vt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=m.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=p(this),e=t.data(ct),n=l({},ft,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(ct,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.3.1"}},{key:"Default",get:function(){return ft}}]),a}();p(document).on(pt.CLICK_DATA_API,wt,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=p(this),e=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));p(i).each(function(){var t=p(this),e=t.data(ct)?"toggle":n.data();Ct._jQueryInterface.call(t,e)})}),p.fn[lt]=Ct._jQueryInterface,p.fn[lt].Constructor=Ct,p.fn[lt].noConflict=function(){return p.fn[lt]=ut,Ct._jQueryInterface};for(var Tt="undefined"!=typeof window&&"undefined"!=typeof document,St=["Edge","Trident","Firefox"],Dt=0,It=0;It<St.length;It+=1)if(Tt&&0<=navigator.userAgent.indexOf(St[It])){Dt=1;break}var At=Tt&&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()},Dt))}};function Ot(t){return t&&"[object Function]"==={}.toString.call(t)}function Nt(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function kt(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function Lt(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=Nt(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:Lt(kt(t))}var xt=Tt&&!(!window.MSInputMethodContext||!document.documentMode),Pt=Tt&&/MSIE 10/.test(navigator.userAgent);function Ht(t){return 11===t?xt:10===t?Pt:xt||Pt}function jt(t){if(!t)return document.documentElement;for(var e=Ht(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"===Nt(n,"position")?jt(n):n:t?t.ownerDocument.documentElement:document.documentElement}function Rt(t){return null!==t.parentNode?Rt(t.parentNode):t}function Ft(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&&jt(s.firstElementChild)!==s?jt(l):l;var c=Rt(t);return c.host?Ft(c.host,e):Ft(t,Rt(e).host)}function Mt(t){var e="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=t.nodeName;if("BODY"!==n&&"HTML"!==n)return t[e];var i=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||i)[e]}function Wt(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 Ut(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],Ht(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function Bt(t){var e=t.body,n=t.documentElement,i=Ht(10)&&getComputedStyle(n);return{height:Ut("Height",e,n,i),width:Ut("Width",e,n,i)}}var qt=function(){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)}}return function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}}(),Kt=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},Qt=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 Vt(t){return Qt({},t,{right:t.left+t.width,bottom:t.top+t.height})}function Yt(t){var e={};try{if(Ht(10)){e=t.getBoundingClientRect();var n=Mt(t,"top"),i=Mt(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?Bt(t.ownerDocument):{},s=r.width||t.clientWidth||o.right-o.left,a=r.height||t.clientHeight||o.bottom-o.top,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var h=Nt(t);l-=Wt(h,"x"),c-=Wt(h,"y"),o.width-=l,o.height-=c}return Vt(o)}function zt(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Ht(10),o="HTML"===e.nodeName,r=Yt(t),s=Yt(e),a=Lt(t),l=Nt(e),c=parseFloat(l.borderTopWidth,10),h=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var u=Vt({top:r.top-s.top-c,left:r.left-s.left-h,width:r.width,height:r.height});if(u.marginTop=0,u.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);u.top-=c-f,u.bottom-=c-f,u.left-=h-d,u.right-=h-d,u.marginTop=f,u.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(u=function(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Mt(e,"top"),o=Mt(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}(u,e)),u}function Xt(t){if(!t||!t.parentElement||Ht())return document.documentElement;for(var e=t.parentElement;e&&"none"===Nt(e,"transform");)e=e.parentElement;return e||document.documentElement}function Gt(t,e,n,i){var o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?Xt(t):Ft(t,e);if("viewport"===i)r=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=zt(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:Mt(n),a=e?0:Mt(n,"left");return Vt({top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r})}(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=Lt(kt(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=zt(a,s,o);if("HTML"!==a.nodeName||function t(e){var n=e.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===Nt(e,"position"))return!0;var i=kt(e);return!!i&&t(i)}(s))r=l;else{var c=Bt(t.ownerDocument),h=c.height,u=c.width;r.top+=l.top-l.marginTop,r.bottom=h+l.top,r.left+=l.left-l.marginLeft,r.right=u+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 $t(t,e,i,n,o){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=Gt(i,n,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 Qt({key:t},a[t],{area:(e=a[t],e.width*e.height)});var e}).sort(function(t,e){return e.area-t.area}),c=l.filter(function(t){var e=t.width,n=t.height;return e>=i.clientWidth&&n>=i.clientHeight}),h=0<c.length?c[0].key:l[0].key,u=t.split("-")[1];return h+(u?"-"+u:"")}function Jt(t,e,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return zt(n,i?Xt(e):Ft(e,n),i)}function Zt(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 te(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 ee(t,e,n){n=n.split("-")[0];var i=Zt(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[te(a)],o}function ne(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ie(t,n,e){return(void 0===e?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex(function(t){return t[e]===n});var i=ne(t,function(t){return t[e]===n});return t.indexOf(i)}(t,"name",e))).forEach(function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var e=t.function||t.fn;t.enabled&&Ot(e)&&(n.offsets.popper=Vt(n.offsets.popper),n.offsets.reference=Vt(n.offsets.reference),n=e(n,t))}),n}function oe(t,n){return t.some(function(t){var e=t.name;return t.enabled&&e===n})}function re(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 se(t){var e=t.ownerDocument;return e?e.defaultView:window}function ae(t,e,n,i){n.updateBound=i,se(t).addEventListener("resize",n.updateBound,{passive:!0});var o=Lt(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(Lt(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function le(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,se(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 ce(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function he(n,i){Object.keys(i).forEach(function(t){var e="";-1!==["width","height","top","right","bottom","left"].indexOf(t)&&ce(i[t])&&(e="px"),n.style[t]=i[t]+e})}var ue=Tt&&/Firefox/i.test(navigator.userAgent);function fe(t,e,n){var i=ne(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 de=["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"],pe=de.slice(3);function me(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=pe.indexOf(t),i=pe.slice(n+1).concat(pe.slice(0,n));return e?i.reverse():i}var ge="flip",_e="clockwise",ve="counterclockwise";function ye(t,o,r,e){var s=[0,0],a=-1!==["right","left"].indexOf(e),n=t.split(/(\+|\-)/).map(function(t){return t.trim()}),i=n.indexOf(ne(n,function(t){return-1!==t.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(t,e){var n=(1===e?!a:a)?"height":"width",i=!1;return t.reduce(function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,i=!0,t):i?(t[t.length-1]+=e,i=!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("%"))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 Vt(a)[e]/100*r}(t,n,o,r)})})).forEach(function(n,i){n.forEach(function(t,e){ce(t)&&(s[i]+=t*("-"===n[e-1]?-1:1))})}),s}var Ee={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",h={start:Kt({},l,r[l]),end:Kt({},l,r[l]+r[c]-s[c])};t.offsets.popper=Qt({},s,h[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=ce(+n)?[+n,0]:ye(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,i){var e=i.boundariesElement||jt(t.instance.popper);t.instance.reference===e&&(e=jt(e));var n=re("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Gt(t.instance.popper,t.instance.reference,i.padding,e,t.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=t.offsets.popper,u={primary:function(t){var e=h[t];return h[t]<l[t]&&!i.escapeWithReference&&(e=Math.max(h[t],l[t])),Kt({},t,e)},secondary:function(t){var e="right"===t?"left":"top",n=h[e];return h[t]>l[t]&&!i.escapeWithReference&&(n=Math.min(h[e],l[t]-("right"===t?h.width:h.height))),Kt({},e,n)}};return c.forEach(function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";h=Qt({},h,u[e](t))}),t.offsets.popper=h,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(!fe(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",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=Zt(i)[c];a[d]-p<s[u]&&(t.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(t.offsets.popper[u]+=a[u]+p-s[d]),t.offsets.popper=Vt(t.offsets.popper);var m=a[u]+a[c]/2-p/2,g=Nt(t.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-t.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),t.arrowElement=i,t.offsets.arrow=(Kt(n={},u,Math.round(y)),Kt(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(oe(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=Gt(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=te(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case ge:E=[_,v];break;case _e:E=me(_);break;case ve:E=me(_,!0);break;default:E=m.behavior}return E.forEach(function(t,e){if(_!==t||E.length===e+1)return p;_=p.placement.split("-")[0],v=te(_);var n,i=p.offsets.popper,o=p.offsets.reference,r=Math.floor,s="left"===_&&r(i.right)>r(o.left)||"right"===_&&r(i.left)<r(o.right)||"top"===_&&r(i.bottom)>r(o.top)||"bottom"===_&&r(i.top)<r(o.bottom),a=r(i.left)<r(g.left),l=r(i.right)>r(g.right),c=r(i.top)<r(g.top),h=r(i.bottom)>r(g.bottom),u="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&h,f=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(f&&"start"===y&&a||f&&"end"===y&&l||!f&&"start"===y&&c||!f&&"end"===y&&h);(s||u||d)&&(p.flipped=!0,(s||u)&&(_=E[e+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=Qt({},p.offsets.popper,ee(p.instance.popper,p.offsets.reference,p.placement)),p=ie(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},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=te(e),t.offsets.popper=Vt(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!fe(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=ne(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=ne(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,a,l,c,h,u,f,d,p,m,g,_,v,y,E=void 0!==r?r:e.gpuAcceleration,b=jt(t.instance.popper),w=Yt(b),C={position:o.position},T=(s=t,a=window.devicePixelRatio<2||!ue,l=s.offsets,c=l.popper,h=l.reference,u=Math.round,f=Math.floor,d=function(t){return t},p=u(h.width),m=u(c.width),g=-1!==["left","right"].indexOf(s.placement),_=-1!==s.placement.indexOf("-"),y=a?u:d,{left:(v=a?g||_||p%2==m%2?u:f:d)(p%2==1&&m%2==1&&!_&&a?c.left-1:c.left),top:y(c.top),bottom:y(c.bottom),right:v(c.right)}),S="bottom"===n?"top":"bottom",D="right"===i?"left":"right",I=re("transform"),A=void 0,O=void 0;if(O="bottom"===S?"HTML"===b.nodeName?-b.clientHeight+T.bottom:-w.height+T.bottom:T.top,A="right"===D?"HTML"===b.nodeName?-b.clientWidth+T.right:-w.width+T.right:T.left,E&&I)C[I]="translate3d("+A+"px, "+O+"px, 0)",C[S]=0,C[D]=0,C.willChange="transform";else{var N="bottom"===S?-1:1,k="right"===D?-1:1;C[S]=O*N,C[D]=A*k,C.willChange=S+", "+D}var L={"x-placement":t.placement};return t.attributes=Qt({},L,t.attributes),t.styles=Qt({},C,t.styles),t.arrowStyles=Qt({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return he(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&&he(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=Jt(o,e,t,n.positionFixed),s=$t(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),he(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},be=function(){function r(t,e){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=At(this.update.bind(this)),this.options=Qt({},r.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=e&&e.jquery?e[0]:e,this.options.modifiers={},Object.keys(Qt({},r.Defaults.modifiers,i.modifiers)).forEach(function(t){n.options.modifiers[t]=Qt({},r.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(t){return Qt({name:t},n.options.modifiers[t])}).sort(function(t,e){return t.order-e.order}),this.modifiers.forEach(function(t){t.enabled&&Ot(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return qt(r,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=Jt(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=$t(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=ee(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ie(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,oe(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[re("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=ae(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return le.call(this)}}]),r}();be.Utils=("undefined"!=typeof window?window:global).PopperUtils,be.placements=de,be.Defaults=Ee;var we="dropdown",Ce="bs.dropdown",Te="."+Ce,Se=".data-api",De=p.fn[we],Ie=new RegExp("38|40|27"),Ae={HIDE:"hide"+Te,HIDDEN:"hidden"+Te,SHOW:"show"+Te,SHOWN:"shown"+Te,CLICK:"click"+Te,CLICK_DATA_API:"click"+Te+Se,KEYDOWN_DATA_API:"keydown"+Te+Se,KEYUP_DATA_API:"keyup"+Te+Se},Oe="disabled",Ne="show",ke="dropup",Le="dropright",xe="dropleft",Pe="dropdown-menu-right",He="position-static",je='[data-toggle="dropdown"]',Re=".dropdown form",Fe=".dropdown-menu",Me=".navbar-nav",We=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ue="top-start",Be="top-end",qe="bottom-start",Ke="bottom-end",Qe="right-start",Ve="left-start",Ye={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},ze={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Xe=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&&!p(this._element).hasClass(Oe)){var t=c._getParentFromElement(this._element),e=p(this._menu).hasClass(Ne);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=p.Event(Ae.SHOW,n);if(p(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof be)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t: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(t).addClass(He),this._popper=new be(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(t).closest(Me).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(Ne),p(t).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||p(this._element).hasClass(Oe)||p(this._menu).hasClass(Ne))){var t={relatedTarget:this._element},e=p.Event(Ae.SHOW,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)&&p(this._menu).hasClass(Ne)){var t={relatedTarget:this._element},e=p.Event(Ae.HIDE,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.HIDDEN,t)))}},t.dispose=function(){p.removeData(this._element,Ce),p(this._element).off(Te),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;p(this._element).on(Ae.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,p(this._element).data(),t),m.typeCheckConfig(we,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Fe))}return this._menu},t._getPlacement=function(){var t=p(this._element.parentNode),e=qe;return t.hasClass(ke)?(e=Ue,p(this._menu).hasClass(Pe)&&(e=Be)):t.hasClass(Le)?e=Qe:t.hasClass(xe)?e=Ve:p(this._menu).hasClass(Pe)&&(e=Ke),e},t._detectNavbar=function(){return 0<p(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}),t},c._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(Ce);if(t||(t=new c(this,"object"==typeof e?e:null),p(this).data(Ce,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(je)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=p(e[n]).data(Ce),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(p(o).hasClass(Ne)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&p.contains(o,t.target))){var l=p.Event(Ae.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),e[n].setAttribute("aria-expanded","false"),p(a).removeClass(Ne),p(o).removeClass(Ne).trigger(p.Event(Ae.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=m.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||p(t.target).closest(Fe).length)):Ie.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!p(this).hasClass(Oe))){var e=c._getParentFromElement(this),n=p(e).hasClass(Ne);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(We));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(je);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Ye}},{key:"DefaultType",get:function(){return ze}}]),c}();p(document).on(Ae.KEYDOWN_DATA_API,je,Xe._dataApiKeydownHandler).on(Ae.KEYDOWN_DATA_API,Fe,Xe._dataApiKeydownHandler).on(Ae.CLICK_DATA_API+" "+Ae.KEYUP_DATA_API,Xe._clearMenus).on(Ae.CLICK_DATA_API,je,function(t){t.preventDefault(),t.stopPropagation(),Xe._jQueryInterface.call(p(this),"toggle")}).on(Ae.CLICK_DATA_API,Re,function(t){t.stopPropagation()}),p.fn[we]=Xe._jQueryInterface,p.fn[we].Constructor=Xe,p.fn[we].noConflict=function(){return p.fn[we]=De,Xe._jQueryInterface};var Ge="modal",$e="bs.modal",Je="."+$e,Ze=p.fn[Ge],tn={backdrop:!0,keyboard:!0,focus:!0,show:!0},en={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},nn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,FOCUSIN:"focusin"+Je,RESIZE:"resize"+Je,CLICK_DISMISS:"click.dismiss"+Je,KEYDOWN_DISMISS:"keydown.dismiss"+Je,MOUSEUP_DISMISS:"mouseup.dismiss"+Je,MOUSEDOWN_DISMISS:"mousedown.dismiss"+Je,CLICK_DATA_API:"click"+Je+".data-api"},on="modal-dialog-scrollable",rn="modal-scrollbar-measure",sn="modal-backdrop",an="modal-open",ln="fade",cn="show",hn=".modal-dialog",un=".modal-body",fn='[data-toggle="modal"]',dn='[data-dismiss="modal"]',pn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",mn=".sticky-top",gn=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(hn),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){p(this._element).hasClass(ln)&&(this._isTransitioning=!0);var n=p.Event(nn.SHOW,{relatedTarget:t});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(nn.CLICK_DISMISS,dn,function(t){return e.hide(t)}),p(this._dialog).on(nn.MOUSEDOWN_DISMISS,function(){p(e._element).one(nn.MOUSEUP_DISMISS,function(t){p(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=p.Event(nn.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(ln);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(nn.FOCUSIN),p(this._element).removeClass(cn),p(this._element).off(nn.CLICK_DISMISS),p(this._dialog).off(nn.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.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 p(t).off(Je)}),p(document).off(nn.FOCUSIN),p.removeData(this._element,$e),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({},tn,t),m.typeCheckConfig(Ge,t,en),t},t._showElement=function(t){var e=this,n=p(this._element).hasClass(ln);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(on)?this._dialog.querySelector(un).scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(cn),this._config.focus&&this._enforceFocus();var i=p.Event(nn.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,p(e._element).trigger(i)};if(n){var r=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;p(document).off(nn.FOCUSIN).on(nn.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===p(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?p(this._element).on(nn.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||p(this._element).off(nn.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?p(window).on(nn.RESIZE,function(t){return e.handleUpdate(t)}):p(window).off(nn.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(){p(document.body).removeClass(an),t._resetAdjustments(),t._resetScrollbar(),p(t._element).trigger(nn.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=p(this._element).hasClass(ln)?ln:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=sn,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(nn.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(cn),!t)return;if(!n)return void t();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(cn);var o=function(){e._removeBackdrop(),t&&t()};if(p(this._element).hasClass(ln)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.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(pn)),e=[].slice.call(document.querySelectorAll(mn));p(t).each(function(t,e){var n=e.style.paddingRight,i=p(e).css("padding-right");p(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(e).each(function(t,e){var n=e.style.marginRight,i=p(e).css("margin-right");p(e).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(an)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(pn));p(t).each(function(t,e){var n=p(e).data("padding-right");p(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+mn));p(e).each(function(t,e){var n=p(e).data("margin-right");"undefined"!=typeof n&&p(e).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||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=rn,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=p(this).data($e),e=l({},tn,p(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),p(this).data($e,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.3.1"}},{key:"Default",get:function(){return tn}}]),o}();p(document).on(nn.CLICK_DATA_API,fn,function(t){var e,n=this,i=m.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=p(e).data($e)?"toggle":l({},p(e).data(),p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=p(e).one(nn.SHOW,function(t){t.isDefaultPrevented()||r.one(nn.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});gn._jQueryInterface.call(p(e),o,this)}),p.fn[Ge]=gn._jQueryInterface,p.fn[Ge].Constructor=gn,p.fn[Ge].noConflict=function(){return p.fn[Ge]=Ze,gn._jQueryInterface};var _n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],vn={"*":["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:[]},yn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,En=/^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 bn(t,s,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"),a=Object.keys(s),l=[].slice.call(n.body.querySelectorAll("*")),i=function(t,e){var n=l[t],i=n.nodeName.toLowerCase();if(-1===a.indexOf(n.nodeName.toLowerCase()))return n.parentNode.removeChild(n),"continue";var o=[].slice.call(n.attributes),r=[].concat(s["*"]||[],s[i]||[]);o.forEach(function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===_n.indexOf(n)||Boolean(t.nodeValue.match(yn)||t.nodeValue.match(En));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,r)||n.removeAttribute(t.nodeName)})},o=0,r=l.length;o<r;o++)i(o);return n.body.innerHTML}var wn="tooltip",Cn="bs.tooltip",Tn="."+Cn,Sn=p.fn[wn],Dn="bs-tooltip",In=new RegExp("(^|\\s)"+Dn+"\\S+","g"),An=["sanitize","whiteList","sanitizeFn"],On={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"},Nn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},kn={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:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)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=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.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.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},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.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(Hn);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 be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(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},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:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),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||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&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=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.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()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(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=p(this.getTipElement()),e=t.attr("class").match(In);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")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,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.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.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>'}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Qn),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Qn,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.3.1"}},{key:"Default",get:function(){return Gn}},{key:"NAME",get:function(){return Kn}},{key:"DATA_KEY",get:function(){return Qn}},{key:"Event",get:function(){return ni}},{key:"EVENT_KEY",get:function(){return Vn}},{key:"DefaultType",get:function(){return $n}}]),i}(qn);p.fn[Kn]=ii._jQueryInterface,p.fn[Kn].Constructor=ii,p.fn[Kn].noConflict=function(){return p.fn[Kn]=Yn,ii._jQueryInterface};var oi="scrollspy",ri="bs.scrollspy",si="."+ri,ai=p.fn[oi],li={offset:10,method:"auto",target:""},ci={offset:"number",method:"string",target:"(string|element)"},hi={ACTIVATE:"activate"+si,SCROLL:"scroll"+si,LOAD_DATA_API:"load"+si+".data-api"},ui="dropdown-item",fi="active",di='[data-spy="scroll"]',pi=".nav, .list-group",mi=".nav-link",gi=".nav-item",_i=".list-group-item",vi=".dropdown",yi=".dropdown-item",Ei=".dropdown-toggle",bi="offset",wi="position",Ci=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+" "+mi+","+this._config.target+" "+_i+","+this._config.target+" "+yi,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(hi.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?bi:wi,o="auto"===this._config.method?t:this._config.method,r=o===wi?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=m.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[p(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(){p.removeData(this._element,ri),p(this._scrollElement).off(si),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({},li,"object"==typeof t&&t?t:{})).target){var e=p(t.target).attr("id");e||(e=m.getUID(oi),p(t.target).attr("id",e)),t.target="#"+e}return m.typeCheckConfig(oi,t,ci),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=p([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(ui)?(n.closest(vi).find(Ei).addClass(fi),n.addClass(fi)):(n.addClass(fi),n.parents(pi).prev(mi+", "+_i).addClass(fi),n.parents(pi).prev(gi).children(mi).addClass(fi)),p(this._scrollElement).trigger(hi.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(fi)}).forEach(function(t){return t.classList.remove(fi)})},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(ri);if(t||(t=new n(this,"object"==typeof e&&e),p(this).data(ri,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.3.1"}},{key:"Default",get:function(){return li}}]),n}();p(window).on(hi.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(di)),e=t.length;e--;){var n=p(t[e]);Ci._jQueryInterface.call(n,n.data())}}),p.fn[oi]=Ci._jQueryInterface,p.fn[oi].Constructor=Ci,p.fn[oi].noConflict=function(){return p.fn[oi]=ai,Ci._jQueryInterface};var Ti="bs.tab",Si="."+Ti,Di=p.fn.tab,Ii={HIDE:"hide"+Si,HIDDEN:"hidden"+Si,SHOW:"show"+Si,SHOWN:"shown"+Si,CLICK_DATA_API:"click"+Si+".data-api"},Ai="dropdown-menu",Oi="active",Ni="disabled",ki="fade",Li="show",xi=".dropdown",Pi=".nav, .list-group",Hi=".active",ji="> li > .active",Ri='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Fi=".dropdown-toggle",Mi="> .dropdown-menu .active",Wi=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&&p(this._element).hasClass(Oi)||p(this._element).hasClass(Ni))){var t,i,e=p(this._element).closest(Pi)[0],o=m.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?ji:Hi;i=(i=p.makeArray(p(e).find(r)))[i.length-1]}var s=p.Event(Ii.HIDE,{relatedTarget:this._element}),a=p.Event(Ii.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=p.Event(Ii.HIDDEN,{relatedTarget:n._element}),e=p.Event(Ii.SHOWN,{relatedTarget:i});p(i).trigger(t),p(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){p.removeData(this._element,Ti),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?p(e).children(Hi):p(e).find(ji))[0],r=n&&o&&p(o).hasClass(ki),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=m.getTransitionDurationFromElement(o);p(o).removeClass(Li).one(m.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){p(e).removeClass(Oi);var i=p(e.parentNode).find(Mi)[0];i&&p(i).removeClass(Oi),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(p(t).addClass(Oi),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),m.reflow(t),t.classList.contains(ki)&&t.classList.add(Li),t.parentNode&&p(t.parentNode).hasClass(Ai)){var o=p(t).closest(xi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Fi));p(r).addClass(Oi)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(Ti);if(e||(e=new i(this),t.data(Ti,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.3.1"}}]),i}();p(document).on(Ii.CLICK_DATA_API,Ri,function(t){t.preventDefault(),Wi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Wi._jQueryInterface,p.fn.tab.Constructor=Wi,p.fn.tab.noConflict=function(){return p.fn.tab=Di,Wi._jQueryInterface};var Ui="toast",Bi="bs.toast",qi="."+Bi,Ki=p.fn[Ui],Qi={CLICK_DISMISS:"click.dismiss"+qi,HIDE:"hide"+qi,HIDDEN:"hidden"+qi,SHOW:"show"+qi,SHOWN:"shown"+qi},Vi="fade",Yi="hide",zi="show",Xi="showing",Gi={animation:"boolean",autohide:"boolean",delay:"number"},$i={animation:!0,autohide:!0,delay:500},Ji='[data-dismiss="toast"]',Zi=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;p(this._element).trigger(Qi.SHOW),this._config.animation&&this._element.classList.add(Vi);var e=function(){t._element.classList.remove(Xi),t._element.classList.add(zi),p(t._element).trigger(Qi.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Yi),this._element.classList.add(Xi),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(zi)&&(p(this._element).trigger(Qi.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(zi)&&this._element.classList.remove(zi),p(this._element).off(Qi.CLICK_DISMISS),p.removeData(this._element,Bi),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},$i,p(this._element).data(),"object"==typeof t&&t?t:{}),m.typeCheckConfig(Ui,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;p(this._element).on(Qi.CLICK_DISMISS,Ji,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Yi),p(t._element).trigger(Qi.HIDDEN)};if(this._element.classList.remove(zi),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 t=p(this),e=t.data(Bi);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Bi,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.3.1"}},{key:"DefaultType",get:function(){return Gi}},{key:"Default",get:function(){return $i}}]),i}();p.fn[Ui]=Zi._jQueryInterface,p.fn[Ui].Constructor=Zi,p.fn[Ui].noConflict=function(){return p.fn[Ui]=Ki,Zi._jQueryInterface},function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=p.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")}(),t.Util=m,t.Alert=g,t.Button=k,t.Carousel=at,t.Collapse=Ct,t.Dropdown=Xe,t.Modal=gn,t.Popover=ii,t.Scrollspy=Ci,t.Tab=Wi,t.Toast=Zi,t.Tooltip=qn,Object.defineProperty(t,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.bundle.min.js.map
resources/js/bootstrap4.js CHANGED
@@ -1,16 +1,16 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 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) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('popper.js'), require('jquery')) :
8
- typeof define === 'function' && define.amd ? define(['exports', 'popper.js', 'jquery'], factory) :
9
- (factory((global.bootstrap = {}),global.Popper,global.jQuery));
10
- }(this, (function (exports,Popper,$) { 'use strict';
11
 
12
- Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
13
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
 
14
 
15
  function _defineProperties(target, props) {
16
  for (var i = 0; i < props.length; i++) {
@@ -70,7 +70,7 @@
70
 
71
  /**
72
  * --------------------------------------------------------------------------
73
- * Bootstrap (v4.2.1): util.js
74
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
75
  * --------------------------------------------------------------------------
76
  */
@@ -146,7 +146,11 @@
146
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
147
  }
148
 
149
- return selector && document.querySelector(selector) ? selector : null;
 
 
 
 
150
  },
151
  getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
152
  if (!element) {
@@ -226,7 +230,7 @@
226
  */
227
 
228
  var NAME = 'alert';
229
- var VERSION = '4.2.1';
230
  var DATA_KEY = 'bs.alert';
231
  var EVENT_KEY = "." + DATA_KEY;
232
  var DATA_API_KEY = '.data-api';
@@ -281,8 +285,8 @@
281
  _proto.dispose = function dispose() {
282
  $.removeData(this._element, DATA_KEY);
283
  this._element = null;
284
- }; // Private
285
-
286
 
287
  _proto._getRootElement = function _getRootElement(element) {
288
  var selector = Util.getSelectorFromElement(element);
@@ -324,8 +328,8 @@
324
 
325
  _proto._destroyElement = function _destroyElement(element) {
326
  $(element).detach().trigger(Event.CLOSED).remove();
327
- }; // Static
328
-
329
 
330
  Alert._jQueryInterface = function _jQueryInterface(config) {
331
  return this.each(function () {
@@ -391,7 +395,7 @@
391
  */
392
 
393
  var NAME$1 = 'button';
394
- var VERSION$1 = '4.2.1';
395
  var DATA_KEY$1 = 'bs.button';
396
  var EVENT_KEY$1 = "." + DATA_KEY$1;
397
  var DATA_API_KEY$1 = '.data-api';
@@ -477,8 +481,8 @@
477
  _proto.dispose = function dispose() {
478
  $.removeData(this._element, DATA_KEY$1);
479
  this._element = null;
480
- }; // Static
481
-
482
 
483
  Button._jQueryInterface = function _jQueryInterface(config) {
484
  return this.each(function () {
@@ -545,7 +549,7 @@
545
  */
546
 
547
  var NAME$2 = 'carousel';
548
- var VERSION$2 = '4.2.1';
549
  var DATA_KEY$2 = 'bs.carousel';
550
  var EVENT_KEY$2 = "." + DATA_KEY$2;
551
  var DATA_API_KEY$2 = '.data-api';
@@ -740,8 +744,8 @@
740
  this._isSliding = null;
741
  this._activeElement = null;
742
  this._indicatorsElement = null;
743
- }; // Private
744
-
745
 
746
  _proto._getConfig = function _getConfig(config) {
747
  config = _objectSpread({}, Default, config);
@@ -785,7 +789,9 @@
785
  });
786
  }
787
 
788
- this._addTouchEventListeners();
 
 
789
  };
790
 
791
  _proto._addTouchEventListeners = function _addTouchEventListeners() {
@@ -1026,8 +1032,8 @@
1026
  if (isCycling) {
1027
  this.cycle();
1028
  }
1029
- }; // Static
1030
-
1031
 
1032
  Carousel._jQueryInterface = function _jQueryInterface(config) {
1033
  return this.each(function () {
@@ -1054,7 +1060,7 @@
1054
  }
1055
 
1056
  data[action]();
1057
- } else if (_config.interval) {
1058
  data.pause();
1059
  data.cycle();
1060
  }
@@ -1143,7 +1149,7 @@
1143
  */
1144
 
1145
  var NAME$3 = 'collapse';
1146
- var VERSION$3 = '4.2.1';
1147
  var DATA_KEY$3 = 'bs.collapse';
1148
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1149
  var DATA_API_KEY$3 = '.data-api';
@@ -1365,8 +1371,8 @@
1365
  this._element = null;
1366
  this._triggerArray = null;
1367
  this._isTransitioning = null;
1368
- }; // Private
1369
-
1370
 
1371
  _proto._getConfig = function _getConfig(config) {
1372
  config = _objectSpread({}, Default$1, config);
@@ -1410,8 +1416,8 @@
1410
  if (triggerArray.length) {
1411
  $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1412
  }
1413
- }; // Static
1414
-
1415
 
1416
  Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1417
  var selector = Util.getSelectorFromElement(element);
@@ -1503,7 +1509,7 @@
1503
  */
1504
 
1505
  var NAME$4 = 'dropdown';
1506
- var VERSION$4 = '4.2.1';
1507
  var DATA_KEY$4 = 'bs.dropdown';
1508
  var EVENT_KEY$4 = "." + DATA_KEY$4;
1509
  var DATA_API_KEY$4 = '.data-api';
@@ -1732,8 +1738,8 @@
1732
  if (this._popper !== null) {
1733
  this._popper.scheduleUpdate();
1734
  }
1735
- }; // Private
1736
-
1737
 
1738
  _proto._addEventListeners = function _addEventListeners() {
1739
  var _this = this;
@@ -1789,24 +1795,28 @@
1789
  return $(this._element).closest('.navbar').length > 0;
1790
  };
1791
 
1792
- _proto._getPopperConfig = function _getPopperConfig() {
1793
  var _this2 = this;
1794
 
1795
- var offsetConf = {};
1796
 
1797
  if (typeof this._config.offset === 'function') {
1798
- offsetConf.fn = function (data) {
1799
- data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
1800
  return data;
1801
  };
1802
  } else {
1803
- offsetConf.offset = this._config.offset;
1804
  }
1805
 
 
 
 
 
1806
  var popperConfig = {
1807
  placement: this._getPlacement(),
1808
  modifiers: {
1809
- offset: offsetConf,
1810
  flip: {
1811
  enabled: this._config.flip
1812
  },
@@ -1824,8 +1834,8 @@
1824
  }
1825
 
1826
  return popperConfig;
1827
- }; // Static
1828
-
1829
 
1830
  Dropdown._jQueryInterface = function _jQueryInterface(config) {
1831
  return this.each(function () {
@@ -1909,8 +1919,8 @@
1909
  }
1910
 
1911
  return parent || element.parentNode;
1912
- }; // eslint-disable-next-line complexity
1913
-
1914
 
1915
  Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
1916
  // If not input/textarea:
@@ -2025,7 +2035,7 @@
2025
  */
2026
 
2027
  var NAME$5 = 'modal';
2028
- var VERSION$5 = '4.2.1';
2029
  var DATA_KEY$5 = 'bs.modal';
2030
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2031
  var DATA_API_KEY$5 = '.data-api';
@@ -2058,6 +2068,7 @@
2058
  CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
2059
  };
2060
  var ClassName$5 = {
 
2061
  SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
2062
  BACKDROP: 'modal-backdrop',
2063
  OPEN: 'modal-open',
@@ -2066,6 +2077,7 @@
2066
  };
2067
  var Selector$5 = {
2068
  DIALOG: '.modal-dialog',
 
2069
  DATA_TOGGLE: '[data-toggle="modal"]',
2070
  DATA_DISMISS: '[data-dismiss="modal"]',
2071
  FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -2218,8 +2230,8 @@
2218
 
2219
  _proto.handleUpdate = function handleUpdate() {
2220
  this._adjustDialog();
2221
- }; // Private
2222
-
2223
 
2224
  _proto._getConfig = function _getConfig(config) {
2225
  config = _objectSpread({}, Default$3, config);
@@ -2243,7 +2255,11 @@
2243
 
2244
  this._element.setAttribute('aria-modal', true);
2245
 
2246
- this._element.scrollTop = 0;
 
 
 
 
2247
 
2248
  if (transition) {
2249
  Util.reflow(this._element);
@@ -2413,11 +2429,11 @@
2413
  } else if (callback) {
2414
  callback();
2415
  }
2416
- }; // ----------------------------------------------------------------------
2417
  // the following methods are used to handle overflowing modals
2418
  // todo (fat): these should probably be refactored out of modal.js
2419
  // ----------------------------------------------------------------------
2420
-
2421
 
2422
  _proto._adjustDialog = function _adjustDialog() {
2423
  var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@@ -2502,8 +2518,8 @@
2502
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2503
  document.body.removeChild(scrollDiv);
2504
  return scrollbarWidth;
2505
- }; // Static
2506
-
2507
 
2508
  Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
2509
  return this.each(function () {
@@ -2594,6 +2610,127 @@
2594
  return Modal._jQueryInterface;
2595
  };
2596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2597
  /**
2598
  * ------------------------------------------------------------------------
2599
  * Constants
@@ -2601,12 +2738,13 @@
2601
  */
2602
 
2603
  var NAME$6 = 'tooltip';
2604
- var VERSION$6 = '4.2.1';
2605
  var DATA_KEY$6 = 'bs.tooltip';
2606
  var EVENT_KEY$6 = "." + DATA_KEY$6;
2607
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
2608
  var CLASS_PREFIX = 'bs-tooltip';
2609
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
 
2610
  var DefaultType$4 = {
2611
  animation: 'boolean',
2612
  template: 'string',
@@ -2616,10 +2754,13 @@
2616
  html: 'boolean',
2617
  selector: '(string|boolean)',
2618
  placement: '(string|function)',
2619
- offset: '(number|string)',
2620
  container: '(string|element|boolean)',
2621
  fallbackPlacement: '(string|array)',
2622
- boundary: '(string|element)'
 
 
 
2623
  };
2624
  var AttachmentMap$1 = {
2625
  AUTO: 'auto',
@@ -2640,7 +2781,10 @@
2640
  offset: 0,
2641
  container: false,
2642
  fallbackPlacement: 'flip',
2643
- boundary: 'scrollParent'
 
 
 
2644
  };
2645
  var HoverState = {
2646
  SHOW: 'show',
@@ -2825,9 +2969,7 @@
2825
  this._popper = new Popper(this.element, tip, {
2826
  placement: attachment,
2827
  modifiers: {
2828
- offset: {
2829
- offset: this.config.offset
2830
- },
2831
  flip: {
2832
  behavior: this.config.fallbackPlacement
2833
  },
@@ -2936,8 +3078,8 @@
2936
  if (this._popper !== null) {
2937
  this._popper.scheduleUpdate();
2938
  }
2939
- }; // Protected
2940
-
2941
 
2942
  _proto.isWithContent = function isWithContent() {
2943
  return Boolean(this.getTitle());
@@ -2959,19 +3101,27 @@
2959
  };
2960
 
2961
  _proto.setElementContent = function setElementContent($element, content) {
2962
- var html = this.config.html;
2963
-
2964
  if (typeof content === 'object' && (content.nodeType || content.jquery)) {
2965
  // Content is a DOM node or a jQuery
2966
- if (html) {
2967
  if (!$(content).parent().is($element)) {
2968
  $element.empty().append(content);
2969
  }
2970
  } else {
2971
  $element.text($(content).text());
2972
  }
 
 
 
 
 
 
 
 
 
 
2973
  } else {
2974
- $element[html ? 'html' : 'text'](content);
2975
  }
2976
  };
2977
 
@@ -2983,8 +3133,25 @@
2983
  }
2984
 
2985
  return title;
2986
- }; // Private
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2987
 
 
 
2988
 
2989
  _proto._getContainer = function _getContainer() {
2990
  if (this.config.container === false) {
@@ -3003,27 +3170,27 @@
3003
  };
3004
 
3005
  _proto._setListeners = function _setListeners() {
3006
- var _this3 = this;
3007
 
3008
  var triggers = this.config.trigger.split(' ');
3009
  triggers.forEach(function (trigger) {
3010
  if (trigger === 'click') {
3011
- $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
3012
- return _this3.toggle(event);
3013
  });
3014
  } else if (trigger !== Trigger.MANUAL) {
3015
- var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
3016
- var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
3017
- $(_this3.element).on(eventIn, _this3.config.selector, function (event) {
3018
- return _this3._enter(event);
3019
- }).on(eventOut, _this3.config.selector, function (event) {
3020
- return _this3._leave(event);
3021
  });
3022
  }
3023
  });
3024
  $(this.element).closest('.modal').on('hide.bs.modal', function () {
3025
- if (_this3.element) {
3026
- _this3.hide();
3027
  }
3028
  });
3029
 
@@ -3122,7 +3289,13 @@
3122
  };
3123
 
3124
  _proto._getConfig = function _getConfig(config) {
3125
- config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});
 
 
 
 
 
 
3126
 
3127
  if (typeof config.delay === 'number') {
3128
  config.delay = {
@@ -3140,6 +3313,11 @@
3140
  }
3141
 
3142
  Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
 
 
 
 
 
3143
  return config;
3144
  };
3145
 
@@ -3188,8 +3366,8 @@
3188
  this.hide();
3189
  this.show();
3190
  this.config.animation = initConfigAnimation;
3191
- }; // Static
3192
-
3193
 
3194
  Tooltip._jQueryInterface = function _jQueryInterface(config) {
3195
  return this.each(function () {
@@ -3277,7 +3455,7 @@
3277
  */
3278
 
3279
  var NAME$7 = 'popover';
3280
- var VERSION$7 = '4.2.1';
3281
  var DATA_KEY$7 = 'bs.popover';
3282
  var EVENT_KEY$7 = "." + DATA_KEY$7;
3283
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@@ -3360,8 +3538,8 @@
3360
 
3361
  this.setElementContent($tip.find(Selector$7.CONTENT), content);
3362
  $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
3363
- }; // Private
3364
-
3365
 
3366
  _proto._getContent = function _getContent() {
3367
  return this.element.getAttribute('data-content') || this.config.content;
@@ -3374,8 +3552,8 @@
3374
  if (tabClass !== null && tabClass.length > 0) {
3375
  $tip.removeClass(tabClass.join(''));
3376
  }
3377
- }; // Static
3378
-
3379
 
3380
  Popover._jQueryInterface = function _jQueryInterface(config) {
3381
  return this.each(function () {
@@ -3464,7 +3642,7 @@
3464
  */
3465
 
3466
  var NAME$8 = 'scrollspy';
3467
- var VERSION$8 = '4.2.1';
3468
  var DATA_KEY$8 = 'bs.scrollspy';
3469
  var EVENT_KEY$8 = "." + DATA_KEY$8;
3470
  var DATA_API_KEY$6 = '.data-api';
@@ -3587,8 +3765,8 @@
3587
  this._targets = null;
3588
  this._activeTarget = null;
3589
  this._scrollHeight = null;
3590
- }; // Private
3591
-
3592
 
3593
  _proto._getConfig = function _getConfig(config) {
3594
  config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@@ -3695,8 +3873,8 @@
3695
  }).forEach(function (node) {
3696
  return node.classList.remove(ClassName$8.ACTIVE);
3697
  });
3698
- }; // Static
3699
-
3700
 
3701
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
3702
  return this.each(function () {
@@ -3771,7 +3949,7 @@
3771
  */
3772
 
3773
  var NAME$9 = 'tab';
3774
- var VERSION$9 = '4.2.1';
3775
  var DATA_KEY$9 = 'bs.tab';
3776
  var EVENT_KEY$9 = "." + DATA_KEY$9;
3777
  var DATA_API_KEY$7 = '.data-api';
@@ -3879,8 +4057,8 @@
3879
  _proto.dispose = function dispose() {
3880
  $.removeData(this._element, DATA_KEY$9);
3881
  this._element = null;
3882
- }; // Private
3883
-
3884
 
3885
  _proto._activate = function _activate(element, container, callback) {
3886
  var _this2 = this;
@@ -3922,7 +4100,10 @@
3922
  }
3923
 
3924
  Util.reflow(element);
3925
- $(element).addClass(ClassName$9.SHOW);
 
 
 
3926
 
3927
  if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
3928
  var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@@ -3938,8 +4119,8 @@
3938
  if (callback) {
3939
  callback();
3940
  }
3941
- }; // Static
3942
-
3943
 
3944
  Tab._jQueryInterface = function _jQueryInterface(config) {
3945
  return this.each(function () {
@@ -4003,7 +4184,7 @@
4003
  */
4004
 
4005
  var NAME$a = 'toast';
4006
- var VERSION$a = '4.2.1';
4007
  var DATA_KEY$a = 'bs.toast';
4008
  var EVENT_KEY$a = "." + DATA_KEY$a;
4009
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@@ -4118,8 +4299,8 @@
4118
  $.removeData(this._element, DATA_KEY$a);
4119
  this._element = null;
4120
  this._config = null;
4121
- }; // Private
4122
-
4123
 
4124
  _proto._getConfig = function _getConfig(config) {
4125
  config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@@ -4152,8 +4333,8 @@
4152
  } else {
4153
  complete();
4154
  }
4155
- }; // Static
4156
-
4157
 
4158
  Toast._jQueryInterface = function _jQueryInterface(config) {
4159
  return this.each(function () {
@@ -4187,6 +4368,11 @@
4187
  get: function get() {
4188
  return DefaultType$7;
4189
  }
 
 
 
 
 
4190
  }]);
4191
 
4192
  return Toast;
@@ -4208,7 +4394,7 @@
4208
 
4209
  /**
4210
  * --------------------------------------------------------------------------
4211
- * Bootstrap (v4.2.1): index.js
4212
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4213
  * --------------------------------------------------------------------------
4214
  */
@@ -4245,5 +4431,5 @@
4245
 
4246
  Object.defineProperty(exports, '__esModule', { value: true });
4247
 
4248
- })));
4249
  //# sourceMappingURL=bootstrap.js.map
1
  /*!
2
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 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) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
8
+ typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
9
+ (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
10
+ }(this, function (exports, $, Popper) { 'use strict';
11
 
 
12
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
+ Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
 
15
  function _defineProperties(target, props) {
16
  for (var i = 0; i < props.length; i++) {
70
 
71
  /**
72
  * --------------------------------------------------------------------------
73
+ * Bootstrap (v4.3.1): util.js
74
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
75
  * --------------------------------------------------------------------------
76
  */
146
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
147
  }
148
 
149
+ try {
150
+ return document.querySelector(selector) ? selector : null;
151
+ } catch (err) {
152
+ return null;
153
+ }
154
  },
155
  getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
156
  if (!element) {
230
  */
231
 
232
  var NAME = 'alert';
233
+ var VERSION = '4.3.1';
234
  var DATA_KEY = 'bs.alert';
235
  var EVENT_KEY = "." + DATA_KEY;
236
  var DATA_API_KEY = '.data-api';
285
  _proto.dispose = function dispose() {
286
  $.removeData(this._element, DATA_KEY);
287
  this._element = null;
288
+ } // Private
289
+ ;
290
 
291
  _proto._getRootElement = function _getRootElement(element) {
292
  var selector = Util.getSelectorFromElement(element);
328
 
329
  _proto._destroyElement = function _destroyElement(element) {
330
  $(element).detach().trigger(Event.CLOSED).remove();
331
+ } // Static
332
+ ;
333
 
334
  Alert._jQueryInterface = function _jQueryInterface(config) {
335
  return this.each(function () {
395
  */
396
 
397
  var NAME$1 = 'button';
398
+ var VERSION$1 = '4.3.1';
399
  var DATA_KEY$1 = 'bs.button';
400
  var EVENT_KEY$1 = "." + DATA_KEY$1;
401
  var DATA_API_KEY$1 = '.data-api';
481
  _proto.dispose = function dispose() {
482
  $.removeData(this._element, DATA_KEY$1);
483
  this._element = null;
484
+ } // Static
485
+ ;
486
 
487
  Button._jQueryInterface = function _jQueryInterface(config) {
488
  return this.each(function () {
549
  */
550
 
551
  var NAME$2 = 'carousel';
552
+ var VERSION$2 = '4.3.1';
553
  var DATA_KEY$2 = 'bs.carousel';
554
  var EVENT_KEY$2 = "." + DATA_KEY$2;
555
  var DATA_API_KEY$2 = '.data-api';
744
  this._isSliding = null;
745
  this._activeElement = null;
746
  this._indicatorsElement = null;
747
+ } // Private
748
+ ;
749
 
750
  _proto._getConfig = function _getConfig(config) {
751
  config = _objectSpread({}, Default, config);
789
  });
790
  }
791
 
792
+ if (this._config.touch) {
793
+ this._addTouchEventListeners();
794
+ }
795
  };
796
 
797
  _proto._addTouchEventListeners = function _addTouchEventListeners() {
1032
  if (isCycling) {
1033
  this.cycle();
1034
  }
1035
+ } // Static
1036
+ ;
1037
 
1038
  Carousel._jQueryInterface = function _jQueryInterface(config) {
1039
  return this.each(function () {
1060
  }
1061
 
1062
  data[action]();
1063
+ } else if (_config.interval && _config.ride) {
1064
  data.pause();
1065
  data.cycle();
1066
  }
1149
  */
1150
 
1151
  var NAME$3 = 'collapse';
1152
+ var VERSION$3 = '4.3.1';
1153
  var DATA_KEY$3 = 'bs.collapse';
1154
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1155
  var DATA_API_KEY$3 = '.data-api';
1371
  this._element = null;
1372
  this._triggerArray = null;
1373
  this._isTransitioning = null;
1374
+ } // Private
1375
+ ;
1376
 
1377
  _proto._getConfig = function _getConfig(config) {
1378
  config = _objectSpread({}, Default$1, config);
1416
  if (triggerArray.length) {
1417
  $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1418
  }
1419
+ } // Static
1420
+ ;
1421
 
1422
  Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1423
  var selector = Util.getSelectorFromElement(element);
1509
  */
1510
 
1511
  var NAME$4 = 'dropdown';
1512
+ var VERSION$4 = '4.3.1';
1513
  var DATA_KEY$4 = 'bs.dropdown';
1514
  var EVENT_KEY$4 = "." + DATA_KEY$4;
1515
  var DATA_API_KEY$4 = '.data-api';
1738
  if (this._popper !== null) {
1739
  this._popper.scheduleUpdate();
1740
  }
1741
+ } // Private
1742
+ ;
1743
 
1744
  _proto._addEventListeners = function _addEventListeners() {
1745
  var _this = this;
1795
  return $(this._element).closest('.navbar').length > 0;
1796
  };
1797
 
1798
+ _proto._getOffset = function _getOffset() {
1799
  var _this2 = this;
1800
 
1801
+ var offset = {};
1802
 
1803
  if (typeof this._config.offset === 'function') {
1804
+ offset.fn = function (data) {
1805
+ data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
1806
  return data;
1807
  };
1808
  } else {
1809
+ offset.offset = this._config.offset;
1810
  }
1811
 
1812
+ return offset;
1813
+ };
1814
+
1815
+ _proto._getPopperConfig = function _getPopperConfig() {
1816
  var popperConfig = {
1817
  placement: this._getPlacement(),
1818
  modifiers: {
1819
+ offset: this._getOffset(),
1820
  flip: {
1821
  enabled: this._config.flip
1822
  },
1834
  }
1835
 
1836
  return popperConfig;
1837
+ } // Static
1838
+ ;
1839
 
1840
  Dropdown._jQueryInterface = function _jQueryInterface(config) {
1841
  return this.each(function () {
1919
  }
1920
 
1921
  return parent || element.parentNode;
1922
+ } // eslint-disable-next-line complexity
1923
+ ;
1924
 
1925
  Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
1926
  // If not input/textarea:
2035
  */
2036
 
2037
  var NAME$5 = 'modal';
2038
+ var VERSION$5 = '4.3.1';
2039
  var DATA_KEY$5 = 'bs.modal';
2040
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2041
  var DATA_API_KEY$5 = '.data-api';
2068
  CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
2069
  };
2070
  var ClassName$5 = {
2071
+ SCROLLABLE: 'modal-dialog-scrollable',
2072
  SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
2073
  BACKDROP: 'modal-backdrop',
2074
  OPEN: 'modal-open',
2077
  };
2078
  var Selector$5 = {
2079
  DIALOG: '.modal-dialog',
2080
+ MODAL_BODY: '.modal-body',
2081
  DATA_TOGGLE: '[data-toggle="modal"]',
2082
  DATA_DISMISS: '[data-dismiss="modal"]',
2083
  FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
2230
 
2231
  _proto.handleUpdate = function handleUpdate() {
2232
  this._adjustDialog();
2233
+ } // Private
2234
+ ;
2235
 
2236
  _proto._getConfig = function _getConfig(config) {
2237
  config = _objectSpread({}, Default$3, config);
2255
 
2256
  this._element.setAttribute('aria-modal', true);
2257
 
2258
+ if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
2259
+ this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
2260
+ } else {
2261
+ this._element.scrollTop = 0;
2262
+ }
2263
 
2264
  if (transition) {
2265
  Util.reflow(this._element);
2429
  } else if (callback) {
2430
  callback();
2431
  }
2432
+ } // ----------------------------------------------------------------------
2433
  // the following methods are used to handle overflowing modals
2434
  // todo (fat): these should probably be refactored out of modal.js
2435
  // ----------------------------------------------------------------------
2436
+ ;
2437
 
2438
  _proto._adjustDialog = function _adjustDialog() {
2439
  var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2518
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2519
  document.body.removeChild(scrollDiv);
2520
  return scrollbarWidth;
2521
+ } // Static
2522
+ ;
2523
 
2524
  Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
2525
  return this.each(function () {
2610
  return Modal._jQueryInterface;
2611
  };
2612
 
2613
+ /**
2614
+ * --------------------------------------------------------------------------
2615
+ * Bootstrap (v4.3.1): tools/sanitizer.js
2616
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2617
+ * --------------------------------------------------------------------------
2618
+ */
2619
+ var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
2620
+ var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
2621
+ var DefaultWhitelist = {
2622
+ // Global attributes allowed on any supplied element below.
2623
+ '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
2624
+ a: ['target', 'href', 'title', 'rel'],
2625
+ area: [],
2626
+ b: [],
2627
+ br: [],
2628
+ col: [],
2629
+ code: [],
2630
+ div: [],
2631
+ em: [],
2632
+ hr: [],
2633
+ h1: [],
2634
+ h2: [],
2635
+ h3: [],
2636
+ h4: [],
2637
+ h5: [],
2638
+ h6: [],
2639
+ i: [],
2640
+ img: ['src', 'alt', 'title', 'width', 'height'],
2641
+ li: [],
2642
+ ol: [],
2643
+ p: [],
2644
+ pre: [],
2645
+ s: [],
2646
+ small: [],
2647
+ span: [],
2648
+ sub: [],
2649
+ sup: [],
2650
+ strong: [],
2651
+ u: [],
2652
+ ul: []
2653
+ /**
2654
+ * A pattern that recognizes a commonly useful subset of URLs that are safe.
2655
+ *
2656
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2657
+ */
2658
+
2659
+ };
2660
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
2661
+ /**
2662
+ * A pattern that matches safe data URLs. Only matches image, video and audio types.
2663
+ *
2664
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2665
+ */
2666
+
2667
+ 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-z0-9+/]+=*$/i;
2668
+
2669
+ function allowedAttribute(attr, allowedAttributeList) {
2670
+ var attrName = attr.nodeName.toLowerCase();
2671
+
2672
+ if (allowedAttributeList.indexOf(attrName) !== -1) {
2673
+ if (uriAttrs.indexOf(attrName) !== -1) {
2674
+ return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
2675
+ }
2676
+
2677
+ return true;
2678
+ }
2679
+
2680
+ var regExp = allowedAttributeList.filter(function (attrRegex) {
2681
+ return attrRegex instanceof RegExp;
2682
+ }); // Check if a regular expression validates the attribute.
2683
+
2684
+ for (var i = 0, l = regExp.length; i < l; i++) {
2685
+ if (attrName.match(regExp[i])) {
2686
+ return true;
2687
+ }
2688
+ }
2689
+
2690
+ return false;
2691
+ }
2692
+
2693
+ function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
2694
+ if (unsafeHtml.length === 0) {
2695
+ return unsafeHtml;
2696
+ }
2697
+
2698
+ if (sanitizeFn && typeof sanitizeFn === 'function') {
2699
+ return sanitizeFn(unsafeHtml);
2700
+ }
2701
+
2702
+ var domParser = new window.DOMParser();
2703
+ var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
2704
+ var whitelistKeys = Object.keys(whiteList);
2705
+ var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
2706
+
2707
+ var _loop = function _loop(i, len) {
2708
+ var el = elements[i];
2709
+ var elName = el.nodeName.toLowerCase();
2710
+
2711
+ if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
2712
+ el.parentNode.removeChild(el);
2713
+ return "continue";
2714
+ }
2715
+
2716
+ var attributeList = [].slice.call(el.attributes);
2717
+ var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
2718
+ attributeList.forEach(function (attr) {
2719
+ if (!allowedAttribute(attr, whitelistedAttributes)) {
2720
+ el.removeAttribute(attr.nodeName);
2721
+ }
2722
+ });
2723
+ };
2724
+
2725
+ for (var i = 0, len = elements.length; i < len; i++) {
2726
+ var _ret = _loop(i, len);
2727
+
2728
+ if (_ret === "continue") continue;
2729
+ }
2730
+
2731
+ return createdDocument.body.innerHTML;
2732
+ }
2733
+
2734
  /**
2735
  * ------------------------------------------------------------------------
2736
  * Constants
2738
  */
2739
 
2740
  var NAME$6 = 'tooltip';
2741
+ var VERSION$6 = '4.3.1';
2742
  var DATA_KEY$6 = 'bs.tooltip';
2743
  var EVENT_KEY$6 = "." + DATA_KEY$6;
2744
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
2745
  var CLASS_PREFIX = 'bs-tooltip';
2746
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
2747
+ var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
2748
  var DefaultType$4 = {
2749
  animation: 'boolean',
2750
  template: 'string',
2754
  html: 'boolean',
2755
  selector: '(string|boolean)',
2756
  placement: '(string|function)',
2757
+ offset: '(number|string|function)',
2758
  container: '(string|element|boolean)',
2759
  fallbackPlacement: '(string|array)',
2760
+ boundary: '(string|element)',
2761
+ sanitize: 'boolean',
2762
+ sanitizeFn: '(null|function)',
2763
+ whiteList: 'object'
2764
  };
2765
  var AttachmentMap$1 = {
2766
  AUTO: 'auto',
2781
  offset: 0,
2782
  container: false,
2783
  fallbackPlacement: 'flip',
2784
+ boundary: 'scrollParent',
2785
+ sanitize: true,
2786
+ sanitizeFn: null,
2787
+ whiteList: DefaultWhitelist
2788
  };
2789
  var HoverState = {
2790
  SHOW: 'show',
2969
  this._popper = new Popper(this.element, tip, {
2970
  placement: attachment,
2971
  modifiers: {
2972
+ offset: this._getOffset(),
 
 
2973
  flip: {
2974
  behavior: this.config.fallbackPlacement
2975
  },
3078
  if (this._popper !== null) {
3079
  this._popper.scheduleUpdate();
3080
  }
3081
+ } // Protected
3082
+ ;
3083
 
3084
  _proto.isWithContent = function isWithContent() {
3085
  return Boolean(this.getTitle());
3101
  };
3102
 
3103
  _proto.setElementContent = function setElementContent($element, content) {
 
 
3104
  if (typeof content === 'object' && (content.nodeType || content.jquery)) {
3105
  // Content is a DOM node or a jQuery
3106
+ if (this.config.html) {
3107
  if (!$(content).parent().is($element)) {
3108
  $element.empty().append(content);
3109
  }
3110
  } else {
3111
  $element.text($(content).text());
3112
  }
3113
+
3114
+ return;
3115
+ }
3116
+
3117
+ if (this.config.html) {
3118
+ if (this.config.sanitize) {
3119
+ content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
3120
+ }
3121
+
3122
+ $element.html(content);
3123
  } else {
3124
+ $element.text(content);
3125
  }
3126
  };
3127
 
3133
  }
3134
 
3135
  return title;
3136
+ } // Private
3137
+ ;
3138
+
3139
+ _proto._getOffset = function _getOffset() {
3140
+ var _this3 = this;
3141
+
3142
+ var offset = {};
3143
+
3144
+ if (typeof this.config.offset === 'function') {
3145
+ offset.fn = function (data) {
3146
+ data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
3147
+ return data;
3148
+ };
3149
+ } else {
3150
+ offset.offset = this.config.offset;
3151
+ }
3152
 
3153
+ return offset;
3154
+ };
3155
 
3156
  _proto._getContainer = function _getContainer() {
3157
  if (this.config.container === false) {
3170
  };
3171
 
3172
  _proto._setListeners = function _setListeners() {
3173
+ var _this4 = this;
3174
 
3175
  var triggers = this.config.trigger.split(' ');
3176
  triggers.forEach(function (trigger) {
3177
  if (trigger === 'click') {
3178
+ $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
3179
+ return _this4.toggle(event);
3180
  });
3181
  } else if (trigger !== Trigger.MANUAL) {
3182
+ var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
3183
+ var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
3184
+ $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
3185
+ return _this4._enter(event);
3186
+ }).on(eventOut, _this4.config.selector, function (event) {
3187
+ return _this4._leave(event);
3188
  });
3189
  }
3190
  });
3191
  $(this.element).closest('.modal').on('hide.bs.modal', function () {
3192
+ if (_this4.element) {
3193
+ _this4.hide();
3194
  }
3195
  });
3196
 
3289
  };
3290
 
3291
  _proto._getConfig = function _getConfig(config) {
3292
+ var dataAttributes = $(this.element).data();
3293
+ Object.keys(dataAttributes).forEach(function (dataAttr) {
3294
+ if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
3295
+ delete dataAttributes[dataAttr];
3296
+ }
3297
+ });
3298
+ config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
3299
 
3300
  if (typeof config.delay === 'number') {
3301
  config.delay = {
3313
  }
3314
 
3315
  Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
3316
+
3317
+ if (config.sanitize) {
3318
+ config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
3319
+ }
3320
+
3321
  return config;
3322
  };
3323
 
3366
  this.hide();
3367
  this.show();
3368
  this.config.animation = initConfigAnimation;
3369
+ } // Static
3370
+ ;
3371
 
3372
  Tooltip._jQueryInterface = function _jQueryInterface(config) {
3373
  return this.each(function () {
3455
  */
3456
 
3457
  var NAME$7 = 'popover';
3458
+ var VERSION$7 = '4.3.1';
3459
  var DATA_KEY$7 = 'bs.popover';
3460
  var EVENT_KEY$7 = "." + DATA_KEY$7;
3461
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
3538
 
3539
  this.setElementContent($tip.find(Selector$7.CONTENT), content);
3540
  $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
3541
+ } // Private
3542
+ ;
3543
 
3544
  _proto._getContent = function _getContent() {
3545
  return this.element.getAttribute('data-content') || this.config.content;
3552
  if (tabClass !== null && tabClass.length > 0) {
3553
  $tip.removeClass(tabClass.join(''));
3554
  }
3555
+ } // Static
3556
+ ;
3557
 
3558
  Popover._jQueryInterface = function _jQueryInterface(config) {
3559
  return this.each(function () {
3642
  */
3643
 
3644
  var NAME$8 = 'scrollspy';
3645
+ var VERSION$8 = '4.3.1';
3646
  var DATA_KEY$8 = 'bs.scrollspy';
3647
  var EVENT_KEY$8 = "." + DATA_KEY$8;
3648
  var DATA_API_KEY$6 = '.data-api';
3765
  this._targets = null;
3766
  this._activeTarget = null;
3767
  this._scrollHeight = null;
3768
+ } // Private
3769
+ ;
3770
 
3771
  _proto._getConfig = function _getConfig(config) {
3772
  config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
3873
  }).forEach(function (node) {
3874
  return node.classList.remove(ClassName$8.ACTIVE);
3875
  });
3876
+ } // Static
3877
+ ;
3878
 
3879
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
3880
  return this.each(function () {
3949
  */
3950
 
3951
  var NAME$9 = 'tab';
3952
+ var VERSION$9 = '4.3.1';
3953
  var DATA_KEY$9 = 'bs.tab';
3954
  var EVENT_KEY$9 = "." + DATA_KEY$9;
3955
  var DATA_API_KEY$7 = '.data-api';
4057
  _proto.dispose = function dispose() {
4058
  $.removeData(this._element, DATA_KEY$9);
4059
  this._element = null;
4060
+ } // Private
4061
+ ;
4062
 
4063
  _proto._activate = function _activate(element, container, callback) {
4064
  var _this2 = this;
4100
  }
4101
 
4102
  Util.reflow(element);
4103
+
4104
+ if (element.classList.contains(ClassName$9.FADE)) {
4105
+ element.classList.add(ClassName$9.SHOW);
4106
+ }
4107
 
4108
  if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
4109
  var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
4119
  if (callback) {
4120
  callback();
4121
  }
4122
+ } // Static
4123
+ ;
4124
 
4125
  Tab._jQueryInterface = function _jQueryInterface(config) {
4126
  return this.each(function () {
4184
  */
4185
 
4186
  var NAME$a = 'toast';
4187
+ var VERSION$a = '4.3.1';
4188
  var DATA_KEY$a = 'bs.toast';
4189
  var EVENT_KEY$a = "." + DATA_KEY$a;
4190
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
4299
  $.removeData(this._element, DATA_KEY$a);
4300
  this._element = null;
4301
  this._config = null;
4302
+ } // Private
4303
+ ;
4304
 
4305
  _proto._getConfig = function _getConfig(config) {
4306
  config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
4333
  } else {
4334
  complete();
4335
  }
4336
+ } // Static
4337
+ ;
4338
 
4339
  Toast._jQueryInterface = function _jQueryInterface(config) {
4340
  return this.each(function () {
4368
  get: function get() {
4369
  return DefaultType$7;
4370
  }
4371
+ }, {
4372
+ key: "Default",
4373
+ get: function get() {
4374
+ return Default$7;
4375
+ }
4376
  }]);
4377
 
4378
  return Toast;
4394
 
4395
  /**
4396
  * --------------------------------------------------------------------------
4397
+ * Bootstrap (v4.3.1): index.js
4398
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4399
  * --------------------------------------------------------------------------
4400
  */
4431
 
4432
  Object.defineProperty(exports, '__esModule', { value: true });
4433
 
4434
+ }));
4435
  //# sourceMappingURL=bootstrap.js.map
resources/js/bootstrap4.min.js CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2018 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("popper.js"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","popper.js","jquery"],e):e(t.bootstrap={},t.Popper,t.jQuery)}(this,function(t,u,g){"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 l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.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})}return o}u=u&&u.hasOwnProperty("default")?u.default:u,g=g&&g.hasOwnProperty("default")?g.default:g;var e="transitionend";function n(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():""}return e&&document.querySelector(e)?e: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(e)},supportsTransitionEnd:function(){return Boolean(e)},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}};g.fn.emulateTransitionEnd=n,g.event.special[_.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=g.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",m="show",p=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,r),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=g(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=g.Event(h.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(m),g(e).hasClass(d)){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(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(r);e||(e=new i(this),t.data(r,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.2.1"}}]),i}();g(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),g.fn[o]=p._jQueryInterface,g.fn[o].Constructor=p,g.fn[o].noConflict=function(){return g.fn[o]=c,p._jQueryInterface};var v="button",E="bs.button",y="."+E,C=".data-api",T=g.fn[v],S="active",b="btn",I="focus",D='[data-toggle^="button"]',w='[data-toggle="buttons"]',A='input:not([type="hidden"])',N=".active",O=".btn",k={CLICK_DATA_API:"click"+y+C,FOCUS_BLUR_DATA_API:"focus"+y+C+" blur"+y+C},P=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(w)[0];if(n){var i=this._element.querySelector(A);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(N);o&&g(o).removeClass(S)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(S),g(i).trigger("change")}i.focus(),e=!1}}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.2.1"}}]),n}();g(document).on(k.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;g(e).hasClass(b)||(e=g(e).closest(O)),P._jQueryInterface.call(g(e),"toggle")}).on(k.FOCUS_BLUR_DATA_API,D,function(t){var e=g(t.target).closest(O)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g.fn[v]=P._jQueryInterface,g.fn[v].Constructor=P,g.fn[v].noConflict=function(){return g.fn[v]=T,P._jQueryInterface};var L="carousel",j="bs.carousel",H="."+j,R=".data-api",U=g.fn[L],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},x={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},F="next",q="prev",M="left",K="right",Q={SLIDE:"slide"+H,SLID:"slid"+H,KEYDOWN:"keydown"+H,MOUSEENTER:"mouseenter"+H,MOUSELEAVE:"mouseleave"+H,TOUCHSTART:"touchstart"+H,TOUCHMOVE:"touchmove"+H,TOUCHEND:"touchend"+H,POINTERDOWN:"pointerdown"+H,POINTERUP:"pointerup"+H,DRAG_START:"dragstart"+H,LOAD_DATA_API:"load"+H+R,CLICK_DATA_API:"click"+H+R},B="carousel",V="active",Y="slide",X="carousel-item-right",z="carousel-item-left",G="carousel-item-next",J="carousel-item-prev",Z="pointer-event",$=".active",tt=".active.carousel-item",et=".carousel-item",nt=".carousel-item img",it=".carousel-item-next, .carousel-item-prev",ot=".carousel-indicators",rt="[data-slide], [data-slide-to]",st='[data-ride="carousel"]',at={TOUCH:"touch",PEN:"pen"},lt=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(ot),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(F)},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(it)&&(_.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(tt);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?F:q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(H),g.removeData(this._element,j),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({},W,t),_.typeCheckConfig(L,t,x),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};g(this._element.querySelectorAll(nt)).on(Q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Q.POINTERDOWN,function(t){return e(t)}),g(this._element).on(Q.POINTERUP,function(t){return i(t)}),this._element.classList.add(Z)):(g(this._element).on(Q.TOUCHSTART,function(t){return e(t)}),g(this._element).on(Q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),g(this._element).on(Q.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(et)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===F,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(tt)),o=g.Event(Q.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($));g(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(V)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(tt),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===F?(n=z,i=G,M):(n=X,i=J,K),l&&g(l).hasClass(V))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(Q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass(Y)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(V),g(s).removeClass(V+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(V),g(l).addClass(V),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(j),e=l({},W,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(j,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&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(B)){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(j).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return W}}]),r}();g(document).on(Q.CLICK_DATA_API,rt,lt._dataApiClickHandler),g(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(st)),e=0,n=t.length;e<n;e++){var i=g(t[e]);lt._jQueryInterface.call(i,i.data())}}),g.fn[L]=lt._jQueryInterface,g.fn[L].Constructor=lt,g.fn[L].noConflict=function(){return g.fn[L]=U,lt._jQueryInterface};var ct="collapse",ht="bs.collapse",ut="."+ht,ft=g.fn[ct],dt={toggle:!0,parent:""},gt={toggle:"boolean",parent:"(string|element)"},_t={SHOW:"show"+ut,SHOWN:"shown"+ut,HIDE:"hide"+ut,HIDDEN:"hidden"+ut,CLICK_DATA_API:"click"+ut+".data-api"},mt="show",pt="collapse",vt="collapsing",Et="collapsed",yt="width",Ct="height",Tt=".show, .collapsing",St='[data-toggle="collapse"]',bt=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(St)),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(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Tt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(pt)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(ht))&&e._isTransitioning))){var i=g.Event(_t.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(ht,null));var o=this._getDimension();g(this._element).removeClass(pt).addClass(vt),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(Et).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(vt).addClass(pt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(_t.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(mt)){var e=g.Event(_t.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(vt).removeClass(pt).removeClass(mt);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(mt)||g(r).addClass(Et).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(vt).addClass(pt).trigger(_t.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,ht),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},dt,t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ct,t,gt),t},t._getDimension=function(){return g(this._element).hasClass(yt)?yt:Ct},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(mt);e.length&&g(e).toggleClass(Et,!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(ht),n=l({},dt,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(ht,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.2.1"}},{key:"Default",get:function(){return dt}}]),a}();g(document).on(_t.CLICK_DATA_API,St,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(ht)?"toggle":n.data();bt._jQueryInterface.call(t,e)})}),g.fn[ct]=bt._jQueryInterface,g.fn[ct].Constructor=bt,g.fn[ct].noConflict=function(){return g.fn[ct]=ft,bt._jQueryInterface};var It="dropdown",Dt="bs.dropdown",wt="."+Dt,At=".data-api",Nt=g.fn[It],Ot=new RegExp("38|40|27"),kt={HIDE:"hide"+wt,HIDDEN:"hidden"+wt,SHOW:"show"+wt,SHOWN:"shown"+wt,CLICK:"click"+wt,CLICK_DATA_API:"click"+wt+At,KEYDOWN_DATA_API:"keydown"+wt+At,KEYUP_DATA_API:"keyup"+wt+At},Pt="disabled",Lt="show",jt="dropup",Ht="dropright",Rt="dropleft",Ut="dropdown-menu-right",Wt="position-static",xt='[data-toggle="dropdown"]',Ft=".dropdown form",qt=".dropdown-menu",Mt=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Qt="top-start",Bt="top-end",Vt="bottom-start",Yt="bottom-end",Xt="right-start",zt="left-start",Gt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Jt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Zt=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(Pt)){var t=c._getParentFromElement(this._element),e=g(this._menu).hasClass(Lt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=g.Event(kt.SHOW,n);if(g(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){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=t:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(t).addClass(Wt),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(t).closest(Mt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Lt),g(t).toggleClass(Lt).trigger(g.Event(kt.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||g(this._element).hasClass(Pt)||g(this._menu).hasClass(Lt))){var t={relatedTarget:this._element},e=g.Event(kt.SHOW,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)&&g(this._menu).hasClass(Lt)){var t={relatedTarget:this._element},e=g.Event(kt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Dt),g(this._element).off(wt),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(kt.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(It,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=Vt;return t.hasClass(jt)?(e=Qt,g(this._menu).hasClass(Ut)&&(e=Bt)):t.hasClass(Ht)?e=Xt:t.hasClass(Rt)?e=zt:g(this._menu).hasClass(Ut)&&(e=Yt),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Dt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Dt,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(xt)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Dt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Lt)&&!(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(kt.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"),g(a).removeClass(Lt),g(o).removeClass(Lt).trigger(g.Event(kt.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)):Ot.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Pt))){var e=c._getParentFromElement(this),n=g(e).hasClass(Lt);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));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(xt);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return Gt}},{key:"DefaultType",get:function(){return Jt}}]),c}();g(document).on(kt.KEYDOWN_DATA_API,xt,Zt._dataApiKeydownHandler).on(kt.KEYDOWN_DATA_API,qt,Zt._dataApiKeydownHandler).on(kt.CLICK_DATA_API+" "+kt.KEYUP_DATA_API,Zt._clearMenus).on(kt.CLICK_DATA_API,xt,function(t){t.preventDefault(),t.stopPropagation(),Zt._jQueryInterface.call(g(this),"toggle")}).on(kt.CLICK_DATA_API,Ft,function(t){t.stopPropagation()}),g.fn[It]=Zt._jQueryInterface,g.fn[It].Constructor=Zt,g.fn[It].noConflict=function(){return g.fn[It]=Nt,Zt._jQueryInterface};var $t="modal",te="bs.modal",ee="."+te,ne=g.fn[$t],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},oe={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},re={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-scrollbar-measure",ae="modal-backdrop",le="modal-open",ce="fade",he="show",ue=".modal-dialog",fe='[data-toggle="modal"]',de='[data-dismiss="modal"]',ge=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",_e=".sticky-top",me=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(ue),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(ce)&&(this._isTransitioning=!0);var n=g.Event(re.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(re.CLICK_DISMISS,de,function(t){return e.hide(t)}),g(this._dialog).on(re.MOUSEDOWN_DISMISS,function(){g(e._element).one(re.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(re.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(ce);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(re.FOCUSIN),g(this._element).removeClass(he),g(this._element).off(re.CLICK_DISMISS),g(this._dialog).off(re.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(ee)}),g(document).off(re.FOCUSIN),g.removeData(this._element,te),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({},ie,t),_.typeCheckConfig($t,t,oe),t},t._showElement=function(t){var e=this,n=g(this._element).hasClass(ce);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),this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(he),this._config.focus&&this._enforceFocus();var i=g.Event(re.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(i)};if(n){var r=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;g(document).off(re.FOCUSIN).on(re.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(re.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||g(this._element).off(re.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(re.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(re.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(le),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(re.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(ce)?ce:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ae,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(re.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(he),!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(he);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(ce)){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(ge)),e=[].slice.call(document.querySelectorAll(_e));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(le)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(ge));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(""+_e));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=se,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(te),e=l({},ie,g(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(te,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.2.1"}},{key:"Default",get:function(){return ie}}]),o}();g(document).on(re.CLICK_DATA_API,fe,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(te)?"toggle":l({},g(e).data(),g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(re.SHOW,function(t){t.isDefaultPrevented()||r.one(re.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});me._jQueryInterface.call(g(e),o,this)}),g.fn[$t]=me._jQueryInterface,g.fn[$t].Constructor=me,g.fn[$t].noConflict=function(){return g.fn[$t]=ne,me._jQueryInterface};var pe="tooltip",ve="bs.tooltip",Ee="."+ve,ye=g.fn[pe],Ce="bs-tooltip",Te=new RegExp("(^|\\s)"+Ce+"\\S+","g"),Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"},be={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Ie={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"},De="show",we="out",Ae={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:"show"+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Ne="fade",Oe="show",ke=".tooltip-inner",Pe=".arrow",Le="hover",je="focus",He="click",Re="manual",Ue=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(Oe))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.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(Ne);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,{placement:a,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Pe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Oe),"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===we&&e._leave(null,e)};if(g(this.tip).hasClass(Ne)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Oe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[He]=!1,this._activeTrigger[je]=!1,this._activeTrigger[Le]=!1,g(this.tip).hasClass(Ne)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();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(Ce+"-"+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(Ne+" "+Oe)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text()):t[n?"html":"text"](e)},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},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 be[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!==Re){var e=t===Le?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Le?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)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),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?je:Le]=!0),g(e.getTipElement()).hasClass(Oe)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&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?je:Le]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&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){return"number"==typeof(t=l({},this.constructor.Default,g(this.element).data(),"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(pe,t,this.constructor.DefaultType),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(Te);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(Ne),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(ve),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(ve,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.2.1"}},{key:"Default",get:function(){return Ie}},{key:"NAME",get:function(){return pe}},{key:"DATA_KEY",get:function(){return ve}},{key:"Event",get:function(){return Ae}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}();g.fn[pe]=Ue._jQueryInterface,g.fn[pe].Constructor=Ue,g.fn[pe].noConflict=function(){return g.fn[pe]=ye,Ue._jQueryInterface};var We="popover",xe="bs.popover",Fe="."+xe,qe=g.fn[We],Me="bs-popover",Ke=new RegExp("(^|\\s)"+Me+"\\S+","g"),Qe=l({},Ue.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>'}),Be=l({},Ue.DefaultType,{content:"(string|element|function)"}),Ve="fade",Ye="show",Xe=".popover-header",ze=".popover-body",Ge={HIDE:"hide"+Fe,HIDDEN:"hidden"+Fe,SHOW:"show"+Fe,SHOWN:"shown"+Fe,INSERTED:"inserted"+Fe,CLICK:"click"+Fe,FOCUSIN:"focusin"+Fe,FOCUSOUT:"focusout"+Fe,MOUSEENTER:"mouseenter"+Fe,MOUSELEAVE:"mouseleave"+Fe},Je=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Me+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(Xe),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ze),e),t.removeClass(Ve+" "+Ye)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ke);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(xe),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(xe,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.2.1"}},{key:"Default",get:function(){return Qe}},{key:"NAME",get:function(){return We}},{key:"DATA_KEY",get:function(){return xe}},{key:"Event",get:function(){return Ge}},{key:"EVENT_KEY",get:function(){return Fe}},{key:"DefaultType",get:function(){return Be}}]),i}(Ue);g.fn[We]=Je._jQueryInterface,g.fn[We].Constructor=Je,g.fn[We].noConflict=function(){return g.fn[We]=qe,Je._jQueryInterface};var Ze="scrollspy",$e="bs.scrollspy",tn="."+$e,en=g.fn[Ze],nn={offset:10,method:"auto",target:""},on={offset:"number",method:"string",target:"(string|element)"},rn={ACTIVATE:"activate"+tn,SCROLL:"scroll"+tn,LOAD_DATA_API:"load"+tn+".data-api"},sn="dropdown-item",an="active",ln='[data-spy="scroll"]',cn=".nav, .list-group",hn=".nav-link",un=".nav-item",fn=".list-group-item",dn=".dropdown",gn=".dropdown-item",_n=".dropdown-toggle",mn="offset",pn="position",vn=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+" "+hn+","+this._config.target+" "+fn+","+this._config.target+" "+gn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(rn.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?mn:pn,o="auto"===this._config.method?t:this._config.method,r=o===pn?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,$e),g(this._scrollElement).off(tn),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({},nn,"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(Ze),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(Ze,t,on),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(sn)?(n.closest(dn).find(_n).addClass(an),n.addClass(an)):(n.addClass(an),n.parents(cn).prev(hn+", "+fn).addClass(an),n.parents(cn).prev(un).children(hn).addClass(an)),g(this._scrollElement).trigger(rn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(an)}).forEach(function(t){return t.classList.remove(an)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data($e);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data($e,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.2.1"}},{key:"Default",get:function(){return nn}}]),n}();g(window).on(rn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ln)),e=t.length;e--;){var n=g(t[e]);vn._jQueryInterface.call(n,n.data())}}),g.fn[Ze]=vn._jQueryInterface,g.fn[Ze].Constructor=vn,g.fn[Ze].noConflict=function(){return g.fn[Ze]=en,vn._jQueryInterface};var En="bs.tab",yn="."+En,Cn=g.fn.tab,Tn={HIDE:"hide"+yn,HIDDEN:"hidden"+yn,SHOW:"show"+yn,SHOWN:"shown"+yn,CLICK_DATA_API:"click"+yn+".data-api"},Sn="dropdown-menu",bn="active",In="disabled",Dn="fade",wn="show",An=".dropdown",Nn=".nav, .list-group",On=".active",kn="> li > .active",Pn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ln=".dropdown-toggle",jn="> .dropdown-menu .active",Hn=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(bn)||g(this._element).hasClass(In))){var t,i,e=g(this._element).closest(Nn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?kn:On;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(Tn.HIDE,{relatedTarget:this._element}),a=g.Event(Tn.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(Tn.HIDDEN,{relatedTarget:n._element}),e=g.Event(Tn.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,En),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(On):g(e).find(kn))[0],r=n&&o&&g(o).hasClass(Dn),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=_.getTransitionDurationFromElement(o);g(o).removeClass(wn).one(_.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(bn);var i=g(e.parentNode).find(jn)[0];i&&g(i).removeClass(bn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(bn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),g(t).addClass(wn),t.parentNode&&g(t.parentNode).hasClass(Sn)){var o=g(t).closest(An)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ln));g(r).addClass(bn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(En);if(e||(e=new i(this),t.data(En,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.2.1"}}]),i}();g(document).on(Tn.CLICK_DATA_API,Pn,function(t){t.preventDefault(),Hn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Hn._jQueryInterface,g.fn.tab.Constructor=Hn,g.fn.tab.noConflict=function(){return g.fn.tab=Cn,Hn._jQueryInterface};var Rn="toast",Un="bs.toast",Wn="."+Un,xn=g.fn[Rn],Fn={CLICK_DISMISS:"click.dismiss"+Wn,HIDE:"hide"+Wn,HIDDEN:"hidden"+Wn,SHOW:"show"+Wn,SHOWN:"shown"+Wn},qn="fade",Mn="hide",Kn="show",Qn="showing",Bn={animation:"boolean",autohide:"boolean",delay:"number"},Vn={animation:!0,autohide:!0,delay:500},Yn='[data-dismiss="toast"]',Xn=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;g(this._element).trigger(Fn.SHOW),this._config.animation&&this._element.classList.add(qn);var e=function(){t._element.classList.remove(Qn),t._element.classList.add(Kn),g(t._element).trigger(Fn.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Mn),this._element.classList.add(Qn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(Kn)&&(g(this._element).trigger(Fn.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Kn)&&this._element.classList.remove(Kn),g(this._element).off(Fn.CLICK_DISMISS),g.removeData(this._element,Un),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},Vn,g(this._element).data(),"object"==typeof t&&t?t:{}),_.typeCheckConfig(Rn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(Fn.CLICK_DISMISS,Yn,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Mn),g(t._element).trigger(Fn.HIDDEN)};if(this._element.classList.remove(Kn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Un);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Un,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.2.1"}},{key:"DefaultType",get:function(){return Bn}}]),i}();g.fn[Rn]=Xn._jQueryInterface,g.fn[Rn].Constructor=Xn,g.fn[Rn].noConflict=function(){return g.fn[Rn]=xn,Xn._jQueryInterface},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")}(),t.Util=_,t.Alert=p,t.Button=P,t.Carousel=lt,t.Collapse=bt,t.Dropdown=Zt,t.Modal=me,t.Popover=Je,t.Scrollspy=vn,t.Tab=Hn,t.Toast=Xn,t.Tooltip=Ue,Object.defineProperty(t,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.min.js.map
1
  /*!
2
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 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,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 l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.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})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var e="transitionend";function n(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(e)},supportsTransitionEnd:function(){return Boolean(e)},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}};g.fn.emulateTransitionEnd=n,g.event.special[_.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=g.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",m="show",p=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,r),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=g(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=g.Event(h.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(m),g(e).hasClass(d)){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(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(r);e||(e=new i(this),t.data(r,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.3.1"}}]),i}();g(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),g.fn[o]=p._jQueryInterface,g.fn[o].Constructor=p,g.fn[o].noConflict=function(){return g.fn[o]=c,p._jQueryInterface};var v="button",y="bs.button",E="."+y,C=".data-api",T=g.fn[v],S="active",b="btn",I="focus",D='[data-toggle^="button"]',w='[data-toggle="buttons"]',A='input:not([type="hidden"])',N=".active",O=".btn",k={CLICK_DATA_API:"click"+E+C,FOCUS_BLUR_DATA_API:"focus"+E+C+" blur"+E+C},P=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(w)[0];if(n){var i=this._element.querySelector(A);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(N);o&&g(o).removeClass(S)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(S),g(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S)},t.dispose=function(){g.removeData(this._element,y),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(y);t||(t=new n(this),g(this).data(y,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),n}();g(document).on(k.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;g(e).hasClass(b)||(e=g(e).closest(O)),P._jQueryInterface.call(g(e),"toggle")}).on(k.FOCUS_BLUR_DATA_API,D,function(t){var e=g(t.target).closest(O)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g.fn[v]=P._jQueryInterface,g.fn[v].Constructor=P,g.fn[v].noConflict=function(){return g.fn[v]=T,P._jQueryInterface};var L="carousel",j="bs.carousel",H="."+j,R=".data-api",x=g.fn[L],F={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"},W="next",q="prev",M="left",K="right",Q={SLIDE:"slide"+H,SLID:"slid"+H,KEYDOWN:"keydown"+H,MOUSEENTER:"mouseenter"+H,MOUSELEAVE:"mouseleave"+H,TOUCHSTART:"touchstart"+H,TOUCHMOVE:"touchmove"+H,TOUCHEND:"touchend"+H,POINTERDOWN:"pointerdown"+H,POINTERUP:"pointerup"+H,DRAG_START:"dragstart"+H,LOAD_DATA_API:"load"+H+R,CLICK_DATA_API:"click"+H+R},B="carousel",V="active",Y="slide",z="carousel-item-right",X="carousel-item-left",$="carousel-item-next",G="carousel-item-prev",J="pointer-event",Z=".active",tt=".active.carousel-item",et=".carousel-item",nt=".carousel-item img",it=".carousel-item-next, .carousel-item-prev",ot=".carousel-indicators",rt="[data-slide], [data-slide-to]",st='[data-ride="carousel"]',at={TOUCH:"touch",PEN:"pen"},lt=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(ot),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(W)},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(it)&&(_.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(tt);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?W:q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(H),g.removeData(this._element,j),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({},F,t),_.typeCheckConfig(L,t,U),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};g(this._element.querySelectorAll(nt)).on(Q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Q.POINTERDOWN,function(t){return e(t)}),g(this._element).on(Q.POINTERUP,function(t){return i(t)}),this._element.classList.add(J)):(g(this._element).on(Q.TOUCHSTART,function(t){return e(t)}),g(this._element).on(Q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),g(this._element).on(Q.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(et)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===W,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(tt)),o=g.Event(Q.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(Z));g(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(V)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(tt),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===W?(n=X,i=$,M):(n=z,i=G,K),l&&g(l).hasClass(V))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(Q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass(Y)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(V),g(s).removeClass(V+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(V),g(l).addClass(V),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(j),e=l({},F,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(j,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(B)){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(j).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return F}}]),r}();g(document).on(Q.CLICK_DATA_API,rt,lt._dataApiClickHandler),g(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(st)),e=0,n=t.length;e<n;e++){var i=g(t[e]);lt._jQueryInterface.call(i,i.data())}}),g.fn[L]=lt._jQueryInterface,g.fn[L].Constructor=lt,g.fn[L].noConflict=function(){return g.fn[L]=x,lt._jQueryInterface};var ct="collapse",ht="bs.collapse",ut="."+ht,ft=g.fn[ct],dt={toggle:!0,parent:""},gt={toggle:"boolean",parent:"(string|element)"},_t={SHOW:"show"+ut,SHOWN:"shown"+ut,HIDE:"hide"+ut,HIDDEN:"hidden"+ut,CLICK_DATA_API:"click"+ut+".data-api"},mt="show",pt="collapse",vt="collapsing",yt="collapsed",Et="width",Ct="height",Tt=".show, .collapsing",St='[data-toggle="collapse"]',bt=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(St)),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(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Tt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(pt)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(ht))&&e._isTransitioning))){var i=g.Event(_t.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(ht,null));var o=this._getDimension();g(this._element).removeClass(pt).addClass(vt),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(yt).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(vt).addClass(pt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(_t.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(mt)){var e=g.Event(_t.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(vt).removeClass(pt).removeClass(mt);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(mt)||g(r).addClass(yt).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(vt).addClass(pt).trigger(_t.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,ht),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},dt,t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ct,t,gt),t},t._getDimension=function(){return g(this._element).hasClass(Et)?Et:Ct},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(mt);e.length&&g(e).toggleClass(yt,!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(ht),n=l({},dt,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(ht,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.3.1"}},{key:"Default",get:function(){return dt}}]),a}();g(document).on(_t.CLICK_DATA_API,St,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(ht)?"toggle":n.data();bt._jQueryInterface.call(t,e)})}),g.fn[ct]=bt._jQueryInterface,g.fn[ct].Constructor=bt,g.fn[ct].noConflict=function(){return g.fn[ct]=ft,bt._jQueryInterface};var It="dropdown",Dt="bs.dropdown",wt="."+Dt,At=".data-api",Nt=g.fn[It],Ot=new RegExp("38|40|27"),kt={HIDE:"hide"+wt,HIDDEN:"hidden"+wt,SHOW:"show"+wt,SHOWN:"shown"+wt,CLICK:"click"+wt,CLICK_DATA_API:"click"+wt+At,KEYDOWN_DATA_API:"keydown"+wt+At,KEYUP_DATA_API:"keyup"+wt+At},Pt="disabled",Lt="show",jt="dropup",Ht="dropright",Rt="dropleft",xt="dropdown-menu-right",Ft="position-static",Ut='[data-toggle="dropdown"]',Wt=".dropdown form",qt=".dropdown-menu",Mt=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Qt="top-start",Bt="top-end",Vt="bottom-start",Yt="bottom-end",zt="right-start",Xt="left-start",$t={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Gt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Jt=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(Pt)){var t=c._getParentFromElement(this._element),e=g(this._menu).hasClass(Lt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=g.Event(kt.SHOW,n);if(g(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){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=t:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(t).addClass(Ft),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(t).closest(Mt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Lt),g(t).toggleClass(Lt).trigger(g.Event(kt.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||g(this._element).hasClass(Pt)||g(this._menu).hasClass(Lt))){var t={relatedTarget:this._element},e=g.Event(kt.SHOW,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)&&g(this._menu).hasClass(Lt)){var t={relatedTarget:this._element},e=g.Event(kt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Dt),g(this._element).off(wt),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(kt.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(It,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=Vt;return t.hasClass(jt)?(e=Qt,g(this._menu).hasClass(xt)&&(e=Bt)):t.hasClass(Ht)?e=zt:t.hasClass(Rt)?e=Xt:g(this._menu).hasClass(xt)&&(e=Yt),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}),t},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Dt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Dt,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(Ut)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Dt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Lt)&&!(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(kt.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"),g(a).removeClass(Lt),g(o).removeClass(Lt).trigger(g.Event(kt.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)):Ot.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Pt))){var e=c._getParentFromElement(this),n=g(e).hasClass(Lt);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));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(Ut);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return $t}},{key:"DefaultType",get:function(){return Gt}}]),c}();g(document).on(kt.KEYDOWN_DATA_API,Ut,Jt._dataApiKeydownHandler).on(kt.KEYDOWN_DATA_API,qt,Jt._dataApiKeydownHandler).on(kt.CLICK_DATA_API+" "+kt.KEYUP_DATA_API,Jt._clearMenus).on(kt.CLICK_DATA_API,Ut,function(t){t.preventDefault(),t.stopPropagation(),Jt._jQueryInterface.call(g(this),"toggle")}).on(kt.CLICK_DATA_API,Wt,function(t){t.stopPropagation()}),g.fn[It]=Jt._jQueryInterface,g.fn[It].Constructor=Jt,g.fn[It].noConflict=function(){return g.fn[It]=Nt,Jt._jQueryInterface};var Zt="modal",te="bs.modal",ee="."+te,ne=g.fn[Zt],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},oe={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},re={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-dialog-scrollable",ae="modal-scrollbar-measure",le="modal-backdrop",ce="modal-open",he="fade",ue="show",fe=".modal-dialog",de=".modal-body",ge='[data-toggle="modal"]',_e='[data-dismiss="modal"]',me=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",pe=".sticky-top",ve=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(fe),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(he)&&(this._isTransitioning=!0);var n=g.Event(re.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(re.CLICK_DISMISS,_e,function(t){return e.hide(t)}),g(this._dialog).on(re.MOUSEDOWN_DISMISS,function(){g(e._element).one(re.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(re.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(he);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(re.FOCUSIN),g(this._element).removeClass(ue),g(this._element).off(re.CLICK_DISMISS),g(this._dialog).off(re.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(ee)}),g(document).off(re.FOCUSIN),g.removeData(this._element,te),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({},ie,t),_.typeCheckConfig(Zt,t,oe),t},t._showElement=function(t){var e=this,n=g(this._element).hasClass(he);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(se)?this._dialog.querySelector(de).scrollTop=0:this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(ue),this._config.focus&&this._enforceFocus();var i=g.Event(re.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(i)};if(n){var r=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;g(document).off(re.FOCUSIN).on(re.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(re.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||g(this._element).off(re.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(re.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(re.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(ce),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(re.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(he)?he:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=le,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(re.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(ue),!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(ue);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(he)){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(me)),e=[].slice.call(document.querySelectorAll(pe));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(ce)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(me));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(""+pe));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=ae,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(te),e=l({},ie,g(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(te,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.3.1"}},{key:"Default",get:function(){return ie}}]),o}();g(document).on(re.CLICK_DATA_API,ge,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(te)?"toggle":l({},g(e).data(),g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(re.SHOW,function(t){t.isDefaultPrevented()||r.one(re.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});ve._jQueryInterface.call(g(e),o,this)}),g.fn[Zt]=ve._jQueryInterface,g.fn[Zt].Constructor=ve,g.fn[Zt].noConflict=function(){return g.fn[Zt]=ne,ve._jQueryInterface};var ye=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Ee={"*":["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:[]},Ce=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Te=/^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 Se(t,s,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"),a=Object.keys(s),l=[].slice.call(n.body.querySelectorAll("*")),i=function(t,e){var n=l[t],i=n.nodeName.toLowerCase();if(-1===a.indexOf(n.nodeName.toLowerCase()))return n.parentNode.removeChild(n),"continue";var o=[].slice.call(n.attributes),r=[].concat(s["*"]||[],s[i]||[]);o.forEach(function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===ye.indexOf(n)||Boolean(t.nodeValue.match(Ce)||t.nodeValue.match(Te));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,r)||n.removeAttribute(t.nodeName)})},o=0,r=l.length;o<r;o++)i(o);return n.body.innerHTML}var be="tooltip",Ie="bs.tooltip",De="."+Ie,we=g.fn[be],Ae="bs-tooltip",Ne=new RegExp("(^|\\s)"+Ae+"\\S+","g"),Oe=["sanitize","whiteList","sanitizeFn"],ke={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"},Pe={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Le={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:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=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(Fe))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.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(xe);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,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"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===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();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(Ae+"-"+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(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(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},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 Pe[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!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?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)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),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?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&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?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&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!==Oe.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(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(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(Ne);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(xe),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(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,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.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.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>'}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ye),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ye,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.3.1"}},{key:"Default",get:function(){return Je}},{key:"NAME",get:function(){return Ve}},{key:"DATA_KEY",get:function(){return Ye}},{key:"Event",get:function(){return rn}},{key:"EVENT_KEY",get:function(){return ze}},{key:"DefaultType",get:function(){return Ze}}]),i}(Be);g.fn[Ve]=sn._jQueryInterface,g.fn[Ve].Constructor=sn,g.fn[Ve].noConflict=function(){return g.fn[Ve]=Xe,sn._jQueryInterface};var an="scrollspy",ln="bs.scrollspy",cn="."+ln,hn=g.fn[an],un={offset:10,method:"auto",target:""},fn={offset:"number",method:"string",target:"(string|element)"},dn={ACTIVATE:"activate"+cn,SCROLL:"scroll"+cn,LOAD_DATA_API:"load"+cn+".data-api"},gn="dropdown-item",_n="active",mn='[data-spy="scroll"]',pn=".nav, .list-group",vn=".nav-link",yn=".nav-item",En=".list-group-item",Cn=".dropdown",Tn=".dropdown-item",Sn=".dropdown-toggle",bn="offset",In="position",Dn=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+" "+vn+","+this._config.target+" "+En+","+this._config.target+" "+Tn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(dn.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?bn:In,o="auto"===this._config.method?t:this._config.method,r=o===In?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,ln),g(this._scrollElement).off(cn),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({},un,"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(an),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(an,t,fn),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(gn)?(n.closest(Cn).find(Sn).addClass(_n),n.addClass(_n)):(n.addClass(_n),n.parents(pn).prev(vn+", "+En).addClass(_n),n.parents(pn).prev(yn).children(vn).addClass(_n)),g(this._scrollElement).trigger(dn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(_n)}).forEach(function(t){return t.classList.remove(_n)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(ln);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data(ln,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.3.1"}},{key:"Default",get:function(){return un}}]),n}();g(window).on(dn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(mn)),e=t.length;e--;){var n=g(t[e]);Dn._jQueryInterface.call(n,n.data())}}),g.fn[an]=Dn._jQueryInterface,g.fn[an].Constructor=Dn,g.fn[an].noConflict=function(){return g.fn[an]=hn,Dn._jQueryInterface};var wn="bs.tab",An="."+wn,Nn=g.fn.tab,On={HIDE:"hide"+An,HIDDEN:"hidden"+An,SHOW:"show"+An,SHOWN:"shown"+An,CLICK_DATA_API:"click"+An+".data-api"},kn="dropdown-menu",Pn="active",Ln="disabled",jn="fade",Hn="show",Rn=".dropdown",xn=".nav, .list-group",Fn=".active",Un="> li > .active",Wn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',qn=".dropdown-toggle",Mn="> .dropdown-menu .active",Kn=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(Pn)||g(this._element).hasClass(Ln))){var t,i,e=g(this._element).closest(xn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Un:Fn;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(On.HIDE,{relatedTarget:this._element}),a=g.Event(On.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(On.HIDDEN,{relatedTarget:n._element}),e=g.Event(On.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,wn),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(Fn):g(e).find(Un))[0],r=n&&o&&g(o).hasClass(jn),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=_.getTransitionDurationFromElement(o);g(o).removeClass(Hn).one(_.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(Pn);var i=g(e.parentNode).find(Mn)[0];i&&g(i).removeClass(Pn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(Pn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),t.classList.contains(jn)&&t.classList.add(Hn),t.parentNode&&g(t.parentNode).hasClass(kn)){var o=g(t).closest(Rn)[0];if(o){var r=[].slice.call(o.querySelectorAll(qn));g(r).addClass(Pn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(wn);if(e||(e=new i(this),t.data(wn,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.3.1"}}]),i}();g(document).on(On.CLICK_DATA_API,Wn,function(t){t.preventDefault(),Kn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Kn._jQueryInterface,g.fn.tab.Constructor=Kn,g.fn.tab.noConflict=function(){return g.fn.tab=Nn,Kn._jQueryInterface};var Qn="toast",Bn="bs.toast",Vn="."+Bn,Yn=g.fn[Qn],zn={CLICK_DISMISS:"click.dismiss"+Vn,HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn},Xn="fade",$n="hide",Gn="show",Jn="showing",Zn={animation:"boolean",autohide:"boolean",delay:"number"},ti={animation:!0,autohide:!0,delay:500},ei='[data-dismiss="toast"]',ni=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;g(this._element).trigger(zn.SHOW),this._config.animation&&this._element.classList.add(Xn);var e=function(){t._element.classList.remove(Jn),t._element.classList.add(Gn),g(t._element).trigger(zn.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove($n),this._element.classList.add(Jn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(Gn)&&(g(this._element).trigger(zn.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Gn)&&this._element.classList.remove(Gn),g(this._element).off(zn.CLICK_DISMISS),g.removeData(this._element,Bn),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},ti,g(this._element).data(),"object"==typeof t&&t?t:{}),_.typeCheckConfig(Qn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(zn.CLICK_DISMISS,ei,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add($n),g(t._element).trigger(zn.HIDDEN)};if(this._element.classList.remove(Gn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Bn);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Bn,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.3.1"}},{key:"DefaultType",get:function(){return Zn}},{key:"Default",get:function(){return ti}}]),i}();g.fn[Qn]=ni._jQueryInterface,g.fn[Qn].Constructor=ni,g.fn[Qn].noConflict=function(){return g.fn[Qn]=Yn,ni._jQueryInterface},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")}(),t.Util=_,t.Alert=p,t.Button=P,t.Carousel=lt,t.Collapse=bt,t.Dropdown=Jt,t.Modal=ve,t.Popover=sn,t.Scrollspy=Dn,t.Tab=Kn,t.Toast=ni,t.Tooltip=Be,Object.defineProperty(t,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.min.js.map
resources/js/shield-import.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ */
3
+ jQuery.fn.icwpWpsfImportExport = function ( aOptions ) {
4
+
5
+ var startScans = function ( evt ) {
6
+ evt.preventDefault();
7
+ sendReq( { 'form_params': $oThis.serialize() } );
8
+ return false;
9
+ };
10
+
11
+ var sendReq = function ( aParams ) {
12
+ iCWP_WPSF_BodyOverlay.show();
13
+
14
+ var aReqData = aOpts[ 'ajax_import_from_site' ];
15
+ jQuery.post( ajaxurl, jQuery.extend( aReqData, aParams ),
16
+ function ( oResponse ) {
17
+
18
+ if ( oResponse.success ) {
19
+ iCWP_WPSF_Toaster.showMessage( oResponse.data.message, oResponse.success );
20
+ location.reload( true );
21
+ }
22
+ else {
23
+ var sMessage = 'Communications error with site.';
24
+ if ( oResponse.data.message !== undefined ) {
25
+ sMessage = oResponse.data.message;
26
+ }
27
+ alert( sMessage );
28
+ iCWP_WPSF_BodyOverlay.hide();
29
+ }
30
+
31
+ }
32
+ ).always( function () {
33
+ }
34
+ );
35
+ };
36
+
37
+ var initialise = function () {
38
+ jQuery( document ).ready( function () {
39
+ $oThis.on( 'submit', startScans );
40
+ } );
41
+ };
42
+
43
+ var $oThis = this;
44
+ var aOpts = jQuery.extend( {}, aOptions );
45
+ initialise();
46
+
47
+ return this;
48
+ };
src/common/icwp-data.php CHANGED
@@ -147,8 +147,7 @@ class ICWP_WPSF_DataProcessor extends ICWP_WPSF_Foundation {
147
 
148
  $sUrl = trim( $this->urlStripQueryPart( $sUrl ) );
149
  if ( filter_var( $sUrl, FILTER_VALIDATE_URL ) ) { // we have a scheme+host
150
- $aParts = parse_url( $sUrl );
151
- if ( in_array( $aParts[ 'scheme' ], array( 'http', 'https' ) ) ) {
152
  $sValidatedUrl = rtrim( $sUrl, '/' );
153
  }
154
  }
147
 
148
  $sUrl = trim( $this->urlStripQueryPart( $sUrl ) );
149
  if ( filter_var( $sUrl, FILTER_VALIDATE_URL ) ) { // we have a scheme+host
150
+ if ( in_array( parse_url( $sUrl, PHP_URL_SCHEME ), array( 'http', 'https' ) ) ) {
 
151
  $sValidatedUrl = rtrim( $sUrl, '/' );
152
  }
153
  }
src/common/icwp-optionsvo.php CHANGED
@@ -420,11 +420,13 @@ class ICWP_WPSF_OptionsVO extends ICWP_WPSF_Foundation {
420
  public function getOptDefault( $sOptionKey, $mDefault = null ) {
421
  foreach ( $this->getRawData_AllOptions() as $aOption ) {
422
  if ( $aOption[ 'key' ] == $sOptionKey ) {
423
- if ( isset( $aOption[ 'value' ] ) ) {
424
- return $aOption[ 'value' ];
 
425
  }
426
- else if ( isset( $aOption[ 'default' ] ) ) {
427
- return $aOption[ 'default' ];
 
428
  }
429
  }
430
  }
@@ -600,6 +602,21 @@ class ICWP_WPSF_OptionsVO extends ICWP_WPSF_Foundation {
600
  return $this->bRebuildFromFile;
601
  }
602
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  /**
604
  * @return bool
605
  */
420
  public function getOptDefault( $sOptionKey, $mDefault = null ) {
421
  foreach ( $this->getRawData_AllOptions() as $aOption ) {
422
  if ( $aOption[ 'key' ] == $sOptionKey ) {
423
+ if ( isset( $aOption[ 'default' ] ) ) {
424
+ $mDefault = $aOption[ 'default' ];
425
+ break;
426
  }
427
+ if ( isset( $aOption[ 'value' ] ) ) {
428
+ $mDefault = $aOption[ 'value' ];
429
+ break;
430
  }
431
  }
432
  }
602
  return $this->bRebuildFromFile;
603
  }
604
 
605
+ /**
606
+ * @param string $sKey
607
+ * @return string
608
+ */
609
+ public function getSelectOptionValueText( $sKey ) {
610
+ $sText = '';
611
+ foreach ( $this->getOptDefinition( $sKey )[ 'value_options' ] as $aOpt ) {
612
+ if ( $aOpt[ 'value_key' ] == $this->getOpt( $sKey ) ) {
613
+ $sText = $aOpt[ 'text' ];
614
+ break;
615
+ }
616
+ }
617
+ return $sText;
618
+ }
619
+
620
  /**
621
  * @return bool
622
  */
src/common/icwp-serviceproviders.php CHANGED
@@ -8,6 +8,7 @@ use FernleafSystems\Wordpress\Services\Services;
8
  class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
9
 
10
  const URL_STATUS_CAKE_IPS = 'https://app.statuscake.com/Workfloor/Locations.php?format=json';
 
11
 
12
  /**
13
  * @var string
@@ -70,6 +71,23 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
70
  return array( '107.20.237.51', '23.21.226.191', '107.21.1.8', '54.208.102.37' );
71
  }
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  /**
74
  * @return array[]
75
  */
@@ -209,7 +227,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
209
  public function isIp_Cloudflare( $sIp ) {
210
  $bIs = false;
211
  try {
212
- $oIp = \FernleafSystems\Wordpress\Services\Services::IP();
213
  if ( $oIp->getIpVersion( $sIp ) == 4 ) {
214
  $bIs = $oIp->checkIp( $sIp, $this->getIps_CloudFlareV4() );
215
  }
@@ -237,6 +255,19 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
237
  return $bIsBot;
238
  }
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  /**
241
  * https://support.google.com/webmasters/answer/80553?hl=en
242
  * @param string $sIp
@@ -283,7 +314,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
283
  $bIsIp = false;
284
  if ( stripos( $sAgent, 'pingdom.com' ) !== false ) {
285
  $aIps = $this->getIps_Pingdom();
286
- $bIsIp = in_array( $sIp, $aIps[ \FernleafSystems\Wordpress\Services\Services::IP()->getIpVersion( $sIp ) ] );
287
  }
288
  return $bIsIp;
289
  }
@@ -297,7 +328,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
297
  $bIsIp = false;
298
  if ( stripos( $sAgent, 'UptimeRobot' ) !== false ) {
299
  $aIps = $this->getIps_UptimeRobot();
300
- $bIsIp = in_array( $sIp, $aIps[ \FernleafSystems\Wordpress\Services\Services::IP()->getIpVersion( $sIp ) ] );
301
  }
302
  return $bIsIp;
303
  }
@@ -357,7 +388,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
357
  * @return bool
358
  */
359
  private function verifyIp_AppleBot( $sIp, $sUserAgent = '' ) {
360
- return ( \FernleafSystems\Wordpress\Services\Services::IP()->getIpVersion( $sIp ) != 4 || strpos( $sIp, '17.' ) === 0 )
361
  && $this->isIpOfBot( [ 'Applebot/' ], '#.*\.applebot.apple.com\.?$#i', $sIp, $sUserAgent );
362
  }
363
 
@@ -456,6 +487,14 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
456
  return $this->downloadServiceIps_Standard( 'https://managewp.com/wp-content/uploads/2016/11/managewp-ips.txt' );
457
  }
458
 
 
 
 
 
 
 
 
 
459
  /**
460
  * @param int $sIpVersion
461
  * @return string[]
@@ -469,7 +508,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
469
  */
470
  private function downloadServiceIps_StatusCake() {
471
  $aIps = array();
472
- $aData = @json_decode( \FernleafSystems\Wordpress\Services\Services::HttpRequest()->getContent( self::URL_STATUS_CAKE_IPS ), true );
473
  if ( is_array( $aData ) ) {
474
  foreach ( $aData as $aItem ) {
475
  if ( !empty( $aItem[ 'ip' ] ) ) {
@@ -498,9 +537,9 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
498
  if ( !in_array( (int)$sIpVersion, array( 4, 6 ) ) ) {
499
  $sIpVersion = 4;
500
  }
501
- $sSourceUrl = \FernleafSystems\Wordpress\Services\Services::HttpRequest()->getContent( sprintf( $sSourceUrl, $sIpVersion ) );
502
  }
503
- $sRaw = \FernleafSystems\Wordpress\Services\Services::HttpRequest()->getContent( $sSourceUrl );
504
  $aIps = empty( $sRaw ) ? array() : explode( "\n", $sRaw );
505
  return array_filter( array_map( 'trim', $aIps ) );
506
  }
8
  class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
9
 
10
  const URL_STATUS_CAKE_IPS = 'https://app.statuscake.com/Workfloor/Locations.php?format=json';
11
+ const URL_ICONTROLWP_IPS = 'https://www.icontrolwp.com/?icwp_ips';
12
 
13
  /**
14
  * @var string
71
  return array( '107.20.237.51', '23.21.226.191', '107.21.1.8', '54.208.102.37' );
72
  }
73
 
74
+ /**
75
+ * @param bool $bFlat
76
+ * @return array[]|string[]
77
+ */
78
+ public function getIps_iControlWP( $bFlat = false ) {
79
+ $oWp = $this->loadWp();
80
+
81
+ $sStoreKey = $this->prefix( 'serviceips_icontrolwp' );
82
+ $aIps = $oWp->getTransient( $sStoreKey );
83
+ if ( empty( $aIps ) ) {
84
+ $aIps = $this->downloadServiceIps_iControlWP();
85
+ $oWp->setTransient( $sStoreKey, $aIps, WEEK_IN_SECONDS*2 );
86
+ }
87
+
88
+ return $bFlat ? array_merge( $aIps[ 4 ], $aIps[ 6 ] ) : $aIps;
89
+ }
90
+
91
  /**
92
  * @return array[]
93
  */
227
  public function isIp_Cloudflare( $sIp ) {
228
  $bIs = false;
229
  try {
230
+ $oIp = Services::IP();
231
  if ( $oIp->getIpVersion( $sIp ) == 4 ) {
232
  $bIs = $oIp->checkIp( $sIp, $this->getIps_CloudFlareV4() );
233
  }
255
  return $bIsBot;
256
  }
257
 
258
+ /**
259
+ * @param string $sIp
260
+ * @param string $sAgent
261
+ * @return bool
262
+ */
263
+ public function isIp_iControlWP( $sIp, $sAgent = null ) { //TODO: Agent
264
+ $bIsBot = false;
265
+ if ( is_null( $sAgent ) || stripos( $sAgent, 'iControlWPApp' ) !== false ) {
266
+ $bIsBot = in_array( $sIp, $this->getIps_iControlWP( true ) );
267
+ }
268
+ return $bIsBot;
269
+ }
270
+
271
  /**
272
  * https://support.google.com/webmasters/answer/80553?hl=en
273
  * @param string $sIp
314
  $bIsIp = false;
315
  if ( stripos( $sAgent, 'pingdom.com' ) !== false ) {
316
  $aIps = $this->getIps_Pingdom();
317
+ $bIsIp = in_array( $sIp, $aIps[ Services::IP()->getIpVersion( $sIp ) ] );
318
  }
319
  return $bIsIp;
320
  }
328
  $bIsIp = false;
329
  if ( stripos( $sAgent, 'UptimeRobot' ) !== false ) {
330
  $aIps = $this->getIps_UptimeRobot();
331
+ $bIsIp = in_array( $sIp, $aIps[ Services::IP()->getIpVersion( $sIp ) ] );
332
  }
333
  return $bIsIp;
334
  }
388
  * @return bool
389
  */
390
  private function verifyIp_AppleBot( $sIp, $sUserAgent = '' ) {
391
+ return ( Services::IP()->getIpVersion( $sIp ) != 4 || strpos( $sIp, '17.' ) === 0 )
392
  && $this->isIpOfBot( [ 'Applebot/' ], '#.*\.applebot.apple.com\.?$#i', $sIp, $sUserAgent );
393
  }
394
 
487
  return $this->downloadServiceIps_Standard( 'https://managewp.com/wp-content/uploads/2016/11/managewp-ips.txt' );
488
  }
489
 
490
+ /**
491
+ * @return array[]
492
+ */
493
+ private function downloadServiceIps_iControlWP() {
494
+ $aIps = @json_decode( Services::HttpRequest()->getContent( self::URL_ICONTROLWP_IPS ), true );
495
+ return is_array( $aIps ) ? $aIps : [];
496
+ }
497
+
498
  /**
499
  * @param int $sIpVersion
500
  * @return string[]
508
  */
509
  private function downloadServiceIps_StatusCake() {
510
  $aIps = array();
511
+ $aData = @json_decode( Services::HttpRequest()->getContent( self::URL_STATUS_CAKE_IPS ), true );
512
  if ( is_array( $aData ) ) {
513
  foreach ( $aData as $aItem ) {
514
  if ( !empty( $aItem[ 'ip' ] ) ) {
537
  if ( !in_array( (int)$sIpVersion, array( 4, 6 ) ) ) {
538
  $sIpVersion = 4;
539
  }
540
+ $sSourceUrl = Services::HttpRequest()->getContent( sprintf( $sSourceUrl, $sIpVersion ) );
541
  }
542
+ $sRaw = Services::HttpRequest()->getContent( $sSourceUrl );
543
  $aIps = empty( $sRaw ) ? array() : explode( "\n", $sRaw );
544
  return array_filter( array_map( 'trim', $aIps ) );
545
  }
src/common/wp-admin-notices.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  class ICWP_WPSF_WpAdminNotices extends ICWP_WPSF_Foundation {
4
 
5
  /**
@@ -97,10 +99,11 @@ class ICWP_WPSF_WpAdminNotices extends ICWP_WPSF_Foundation {
97
  }
98
 
99
  /**
100
- * @return ICWP_UserMeta
 
101
  */
102
  protected function getCurrentUserMeta() {
103
- return $this->loadWpUsers()->metaVoForUser( rtrim( $this->getPrefix(), '-' ) );
104
  }
105
 
106
  /**
1
  <?php
2
 
3
+ use FernleafSystems\Wordpress\Services\Services;
4
+
5
  class ICWP_WPSF_WpAdminNotices extends ICWP_WPSF_Foundation {
6
 
7
  /**
99
  }
100
 
101
  /**
102
+ * @return \FernleafSystems\Wordpress\Services\Utilities\PluginUserMeta
103
+ * @throws \Exception
104
  */
105
  protected function getCurrentUserMeta() {
106
+ return \FernleafSystems\Wordpress\Services\Services::WpUsers()->metaVoForUser( rtrim( $this->getPrefix(), '-' ) );
107
  }
108
 
109
  /**
src/config/feature-admin_access_restriction.php CHANGED
@@ -147,7 +147,7 @@
147
  "key": "admin_access_restrict_plugins",
148
  "section": "section_admin_access_restriction_areas",
149
  "type": "multiple_select",
150
- "default": null,
151
  "value_options": [
152
  {
153
  "value_key": "activate_plugins",
@@ -175,7 +175,7 @@
175
  "key": "admin_access_restrict_themes",
176
  "section": "section_admin_access_restriction_areas",
177
  "type": "multiple_select",
178
- "default": null,
179
  "value_options": [
180
  {
181
  "value_key": "switch_themes",
@@ -207,7 +207,7 @@
207
  "key": "admin_access_restrict_posts",
208
  "section": "section_admin_access_restriction_areas",
209
  "type": "multiple_select",
210
- "default": null,
211
  "value_options": [
212
  {
213
  "value_key": "edit",
147
  "key": "admin_access_restrict_plugins",
148
  "section": "section_admin_access_restriction_areas",
149
  "type": "multiple_select",
150
+ "default": [],
151
  "value_options": [
152
  {
153
  "value_key": "activate_plugins",
175
  "key": "admin_access_restrict_themes",
176
  "section": "section_admin_access_restriction_areas",
177
  "type": "multiple_select",
178
+ "default": [],
179
  "value_options": [
180
  {
181
  "value_key": "switch_themes",
207
  "key": "admin_access_restrict_posts",
208
  "section": "section_admin_access_restriction_areas",
209
  "type": "multiple_select",
210
+ "default": [],
211
  "value_options": [
212
  {
213
  "value_key": "edit",
src/config/feature-autoupdates.php CHANGED
@@ -211,15 +211,17 @@
211
  },
212
  {
213
  "key": "delay_tracking",
 
214
  "transferable": false,
215
- "default": [],
216
- "section": "section_non_ui"
217
  },
218
  {
219
  "key": "selected_plugins",
 
220
  "transferable": false,
221
- "default": [],
222
- "section": "section_non_ui"
223
  }
224
  ],
225
  "definitions": {
211
  },
212
  {
213
  "key": "delay_tracking",
214
+ "section": "section_non_ui",
215
  "transferable": false,
216
+ "type": "array",
217
+ "default": []
218
  },
219
  {
220
  "key": "selected_plugins",
221
+ "section": "section_non_ui",
222
  "transferable": false,
223
+ "type": "array",
224
+ "default": []
225
  }
226
  ],
227
  "definitions": {
src/config/feature-comments_filter.php CHANGED
@@ -330,8 +330,9 @@
330
  },
331
  {
332
  "key": "insights_last_comment_block_at",
333
- "transferable": false,
334
  "section": "section_non_ui",
 
 
335
  "default": 0
336
  }
337
  ],
330
  },
331
  {
332
  "key": "insights_last_comment_block_at",
 
333
  "section": "section_non_ui",
334
+ "transferable": false,
335
+ "type": "integer",
336
  "default": 0
337
  }
338
  ],
src/config/feature-firewall.php CHANGED
@@ -255,8 +255,9 @@
255
  },
256
  {
257
  "key": "insights_last_firewall_block_at",
258
- "transferable": false,
259
  "section": "section_non_ui",
 
 
260
  "default": 0
261
  }
262
  ],
@@ -271,7 +272,7 @@
271
  "/wp-admin/page-new.php": [],
272
  "/wp-admin/link-add.php": [],
273
  "/wp-admin/media-upload.php": [],
274
- "/wp-admin/admin.php": [
275
  "page"
276
  ],
277
  "/wp-admin/post.php": [
@@ -327,8 +328,7 @@
327
  "regex": [
328
  "^wp_",
329
  "^user_login",
330
- "^user_pass",
331
- "[^0-9]0x[0-9a-f][0-9a-f]"
332
  ]
333
  },
334
  "fieldtruncation": {
255
  },
256
  {
257
  "key": "insights_last_firewall_block_at",
 
258
  "section": "section_non_ui",
259
+ "transferable": false,
260
+ "type": "integer",
261
  "default": 0
262
  }
263
  ],
272
  "/wp-admin/page-new.php": [],
273
  "/wp-admin/link-add.php": [],
274
  "/wp-admin/media-upload.php": [],
275
+ "/wp-admin/admin.php": [
276
  "page"
277
  ],
278
  "/wp-admin/post.php": [
328
  "regex": [
329
  "^wp_",
330
  "^user_login",
331
+ "^user_pass"
 
332
  ]
333
  },
334
  "fieldtruncation": {
src/config/feature-hack_protect.php CHANGED
@@ -68,6 +68,16 @@
68
  "Recommendation - Ensure this is turned on and you will always know if any of your assets have known security vulnerabilities."
69
  ]
70
  },
 
 
 
 
 
 
 
 
 
 
71
  {
72
  "slug": "section_integrity_checking",
73
  "title": "Integrity Checks",
@@ -166,6 +176,43 @@
166
  "summary": "Highlight Vulnerable Plugins",
167
  "description": "Vulnerable plugins will be highlighted on the main plugins page."
168
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  {
170
  "key": "enable_core_file_integrity_scan",
171
  "section": "section_core_file_integrity_scan",
@@ -405,87 +452,101 @@
405
  },
406
  {
407
  "key": "ptg_last_build_at",
408
- "transferable": false,
409
  "section": "section_non_ui",
410
- "value": 0
 
 
411
  },
412
  {
413
  "key": "ptg_candiskwrite",
414
- "transferable": false,
415
  "section": "section_non_ui",
416
- "value": false
 
 
417
  },
418
  {
419
  "key": "ptg_candiskwrite_at",
420
- "transferable": false,
421
  "section": "section_non_ui",
422
- "value": false
 
 
423
  },
424
  {
425
  "key": "snapshot_users",
 
426
  "transferable": false,
427
  "sensitive": true,
428
- "section": "section_non_ui",
429
- "value": []
430
  },
431
  {
432
  "key": "insights_last_scan_ufc_at",
433
- "transferable": false,
434
  "section": "section_non_ui",
 
 
435
  "default": 0
436
  },
437
  {
438
  "key": "insights_last_scan_wcf_at",
439
- "transferable": false,
440
  "section": "section_non_ui",
 
 
441
  "default": 0
442
  },
443
  {
444
  "key": "insights_last_scan_ptg_at",
445
- "transferable": false,
446
  "section": "section_non_ui",
 
 
447
  "default": 0
448
  },
449
  {
450
  "key": "insights_last_scan_wpv_at",
451
- "transferable": false,
452
  "section": "section_non_ui",
 
 
453
  "default": 0
454
  },
455
  {
456
  "key": "next_scan_ufc_at",
457
- "transferable": false,
458
  "section": "section_non_ui",
 
 
459
  "default": 0
460
  },
461
  {
462
  "key": "next_scan_wcf_at",
463
- "transferable": false,
464
  "section": "section_non_ui",
 
 
465
  "default": 0
466
  },
467
  {
468
  "key": "next_scan_ptg_at",
469
- "transferable": false,
470
  "section": "section_non_ui",
 
 
471
  "default": 0
472
  },
473
  {
474
  "key": "next_scan_wpv_at",
475
- "transferable": false,
476
  "section": "section_non_ui",
 
 
477
  "default": 0
478
  },
479
  {
480
  "key": "rebuild_self",
481
- "transferable": false,
482
  "section": "section_non_ui",
 
 
483
  "default": false
484
  },
485
  {
486
  "key": "ptg_update_store_format",
487
- "transferable": false,
488
  "section": "section_non_ui",
 
 
489
  "default": false
490
  }
491
  ],
@@ -504,6 +565,7 @@
504
  "created_at",
505
  "deleted_at"
506
  ],
 
507
  "cron_scan_wpv": "wpvulnscan-notification",
508
  "cron_scan_wcf": "core-checksum-notification",
509
  "cron_scan_ufc": "unrecognised-scan-notification",
68
  "Recommendation - Ensure this is turned on and you will always know if any of your assets have known security vulnerabilities."
69
  ]
70
  },
71
+ {
72
+ "slug": "section_scan_apc",
73
+ "hidden": true,
74
+ "title": "Abandoned Plugin Check",
75
+ "title_short": "Abandoned Plugin Check",
76
+ "summary": [
77
+ "Purpose - Regularly scan your WordPress plugins and themes for plugins that have been abandoned.",
78
+ "Recommendation - Ensure this is turned on and you will always know if any of your assets have known security vulnerabilities."
79
+ ]
80
+ },
81
  {
82
  "slug": "section_integrity_checking",
83
  "title": "Integrity Checks",
176
  "summary": "Highlight Vulnerable Plugins",
177
  "description": "Vulnerable plugins will be highlighted on the main plugins page."
178
  },
179
+ {
180
+ "key": "enabled_scan_apc",
181
+ "section": "section_scan_apc",
182
+ "premium": true,
183
+ "default": "enabled_email",
184
+ "type": "select",
185
+ "value_options": [
186
+ {
187
+ "value_key": "disabled",
188
+ "text": "Scan Disabled"
189
+ },
190
+ {
191
+ "value_key": "enabled_email",
192
+ "text": "Enabled - Send Email Notification"
193
+ },
194
+ {
195
+ "value_key": "enabled_no_email",
196
+ "text": "Enabled - No Email Notification"
197
+ }
198
+ ],
199
+ "link_info": "",
200
+ "link_blog": "",
201
+ "name": "Abandoned Plugin Scanner",
202
+ "summary": "Enable The Abandoned Plugin Scanner",
203
+ "description": "Scan your WordPress.org assets for whether they've been abandoned."
204
+ },
205
+ {
206
+ "key": "display_apc",
207
+ "section": "section_scan_apc",
208
+ "type": "checkbox",
209
+ "default": "Y",
210
+ "link_info": "",
211
+ "link_blog": "",
212
+ "name": "Highlight Plugins",
213
+ "summary": "Highlight Abandoned Plugins",
214
+ "description": "Abandoned plugins will be highlighted on the main plugins page."
215
+ },
216
  {
217
  "key": "enable_core_file_integrity_scan",
218
  "section": "section_core_file_integrity_scan",
452
  },
453
  {
454
  "key": "ptg_last_build_at",
 
455
  "section": "section_non_ui",
456
+ "transferable": false,
457
+ "type": "integer",
458
+ "default": 0
459
  },
460
  {
461
  "key": "ptg_candiskwrite",
 
462
  "section": "section_non_ui",
463
+ "transferable": false,
464
+ "type": "boolean",
465
+ "default": false
466
  },
467
  {
468
  "key": "ptg_candiskwrite_at",
 
469
  "section": "section_non_ui",
470
+ "transferable": false,
471
+ "type": "integer",
472
+ "default": false
473
  },
474
  {
475
  "key": "snapshot_users",
476
+ "section": "section_non_ui",
477
  "transferable": false,
478
  "sensitive": true,
479
+ "type": "array",
480
+ "default": []
481
  },
482
  {
483
  "key": "insights_last_scan_ufc_at",
 
484
  "section": "section_non_ui",
485
+ "transferable": false,
486
+ "type": "integer",
487
  "default": 0
488
  },
489
  {
490
  "key": "insights_last_scan_wcf_at",
 
491
  "section": "section_non_ui",
492
+ "transferable": false,
493
+ "type": "integer",
494
  "default": 0
495
  },
496
  {
497
  "key": "insights_last_scan_ptg_at",
 
498
  "section": "section_non_ui",
499
+ "transferable": false,
500
+ "type": "integer",
501
  "default": 0
502
  },
503
  {
504
  "key": "insights_last_scan_wpv_at",
 
505
  "section": "section_non_ui",
506
+ "transferable": false,
507
+ "type": "integer",
508
  "default": 0
509
  },
510
  {
511
  "key": "next_scan_ufc_at",
 
512
  "section": "section_non_ui",
513
+ "transferable": false,
514
+ "type": "integer",
515
  "default": 0
516
  },
517
  {
518
  "key": "next_scan_wcf_at",
 
519
  "section": "section_non_ui",
520
+ "transferable": false,
521
+ "type": "integer",
522
  "default": 0
523
  },
524
  {
525
  "key": "next_scan_ptg_at",
 
526
  "section": "section_non_ui",
527
+ "transferable": false,
528
+ "type": "integer",
529
  "default": 0
530
  },
531
  {
532
  "key": "next_scan_wpv_at",
 
533
  "section": "section_non_ui",
534
+ "transferable": false,
535
+ "type": "integer",
536
  "default": 0
537
  },
538
  {
539
  "key": "rebuild_self",
 
540
  "section": "section_non_ui",
541
+ "transferable": false,
542
+ "type": "boolean",
543
  "default": false
544
  },
545
  {
546
  "key": "ptg_update_store_format",
 
547
  "section": "section_non_ui",
548
+ "transferable": false,
549
+ "type": "boolean",
550
  "default": false
551
  }
552
  ],
565
  "created_at",
566
  "deleted_at"
567
  ],
568
+ "cron_all_scans": "all-scans",
569
  "cron_scan_wpv": "wpvulnscan-notification",
570
  "cron_scan_wcf": "core-checksum-notification",
571
  "cron_scan_ufc": "unrecognised-scan-notification",
src/config/feature-ips.php CHANGED
@@ -132,6 +132,28 @@
132
  "summary": "After 1 'X' a black listed IP will be removed from the black list",
133
  "description": "Permanent and lengthy IP Black Lists are harmful to performance. You should allow IP addresses on the black list to be eventually removed over time. Shorter IP black lists are more efficient and a more intelligent use of an IP-based blocking system."
134
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  {
136
  "key": "text_loginfailed",
137
  "section": "section_user_messages",
@@ -187,28 +209,39 @@
187
  },
188
  {
189
  "key": "this_server_ip",
 
190
  "transferable": false,
191
  "sensitive": true,
192
- "section": "section_non_ui",
193
- "value": ""
194
  },
195
  {
196
  "key": "this_server_ip_last_check_at",
197
- "transferable": false,
198
  "section": "section_non_ui",
199
- "value": 0
 
 
200
  },
201
  {
202
  "key": "insights_last_transgression_at",
203
- "transferable": false,
204
  "section": "section_non_ui",
 
 
205
  "default": 0
206
  },
207
  {
208
  "key": "insights_last_ip_block_at",
209
- "transferable": false,
210
  "section": "section_non_ui",
 
 
211
  "default": 0
 
 
 
 
 
 
 
212
  }
213
  ],
214
  "definitions": {
132
  "summary": "After 1 'X' a black listed IP will be removed from the black list",
133
  "description": "Permanent and lengthy IP Black Lists are harmful to performance. You should allow IP addresses on the black list to be eventually removed over time. Shorter IP black lists are more efficient and a more intelligent use of an IP-based blocking system."
134
  },
135
+ {
136
+ "key": "user_auto_recover",
137
+ "section": "section_auto_black_list",
138
+ "premium": true,
139
+ "default": "disabled",
140
+ "type": "select",
141
+ "value_options": [
142
+ {
143
+ "value_key": "disabled",
144
+ "text": "Disabled"
145
+ },
146
+ {
147
+ "value_key": "gasp",
148
+ "text": "With Shield Bot Protection"
149
+ }
150
+ ],
151
+ "link_info": "",
152
+ "link_blog": "",
153
+ "name": "User Auto Unblock",
154
+ "summary": "Allow Visitors To Unblock Their IP",
155
+ "description": "Allow visitors blocked by the plugin to automatically unblock themselves."
156
+ },
157
  {
158
  "key": "text_loginfailed",
159
  "section": "section_user_messages",
209
  },
210
  {
211
  "key": "this_server_ip",
212
+ "section": "section_non_ui",
213
  "transferable": false,
214
  "sensitive": true,
215
+ "type": "text",
216
+ "default": ""
217
  },
218
  {
219
  "key": "this_server_ip_last_check_at",
 
220
  "section": "section_non_ui",
221
+ "transferable": false,
222
+ "type": "integer",
223
+ "default": 0
224
  },
225
  {
226
  "key": "insights_last_transgression_at",
 
227
  "section": "section_non_ui",
228
+ "transferable": false,
229
+ "type": "integer",
230
  "default": 0
231
  },
232
  {
233
  "key": "insights_last_ip_block_at",
 
234
  "section": "section_non_ui",
235
+ "transferable": false,
236
+ "type": "integer",
237
  "default": 0
238
+ },
239
+ {
240
+ "key": "autounblock_ips",
241
+ "section": "section_non_ui",
242
+ "transferable": false,
243
+ "type": "array",
244
+ "default": []
245
  }
246
  ],
247
  "definitions": {
src/config/feature-license.php CHANGED
@@ -29,80 +29,92 @@
29
  "options": [
30
  {
31
  "key": "license_key",
 
32
  "sensitive": true,
33
  "transferable": false,
34
- "default": "",
35
- "section": "section_non_ui"
36
  },
37
  {
38
  "key": "license_activated_at",
 
39
  "transferable": false,
40
- "default": 0,
41
- "section": "section_non_ui"
42
  },
43
  {
44
  "key": "license_deactivated_at",
 
45
  "transferable": false,
46
- "default": 0,
47
- "section": "section_non_ui"
48
  },
49
  {
50
  "key": "license_last_checked_at",
 
51
  "transferable": false,
52
- "default": 0,
53
- "section": "section_non_ui"
54
  },
55
  {
56
  "key": "license_deactivated_reason",
 
57
  "transferable": false,
58
- "default": "",
59
- "section": "section_non_ui"
60
  },
61
  {
62
  "key": "last_warning_email_sent_at",
 
63
  "transferable": false,
64
- "default": 0,
65
- "section": "section_non_ui"
66
  },
67
  {
68
  "key": "last_deactivated_email_sent_at",
 
69
  "transferable": false,
70
- "default": 0,
71
- "section": "section_non_ui"
72
  },
73
  {
74
  "key": "last_errors",
 
75
  "transferable": false,
76
- "default": "",
77
- "section": "section_non_ui"
78
  },
79
  {
80
  "key": "last_error_at",
 
81
  "sensitive": true,
82
  "transferable": false,
83
- "default": 0,
84
- "section": "section_non_ui"
85
  },
86
  {
87
  "key": "keyless_request_hash",
 
88
  "sensitive": true,
89
  "transferable": false,
90
- "default": "",
91
- "section": "section_non_ui"
92
  },
93
  {
94
  "key": "keyless_request_at",
 
95
  "sensitive": true,
96
  "transferable": false,
97
- "default": 0,
98
- "section": "section_non_ui"
99
  },
100
  {
101
  "key": "license_data",
 
102
  "sensitive": true,
103
  "transferable": false,
104
- "default": 0,
105
- "section": "section_non_ui"
106
  }
107
  ],
108
  "definitions": {
29
  "options": [
30
  {
31
  "key": "license_key",
32
+ "section": "section_non_ui",
33
  "sensitive": true,
34
  "transferable": false,
35
+ "type": "text",
36
+ "default": ""
37
  },
38
  {
39
  "key": "license_activated_at",
40
+ "section": "section_non_ui",
41
  "transferable": false,
42
+ "type": "integer",
43
+ "default": 0
44
  },
45
  {
46
  "key": "license_deactivated_at",
47
+ "section": "section_non_ui",
48
  "transferable": false,
49
+ "type": "integer",
50
+ "default": 0
51
  },
52
  {
53
  "key": "license_last_checked_at",
54
+ "section": "section_non_ui",
55
  "transferable": false,
56
+ "type": "integer",
57
+ "default": 0
58
  },
59
  {
60
  "key": "license_deactivated_reason",
61
+ "section": "section_non_ui",
62
  "transferable": false,
63
+ "type": "text",
64
+ "default": ""
65
  },
66
  {
67
  "key": "last_warning_email_sent_at",
68
+ "section": "section_non_ui",
69
  "transferable": false,
70
+ "type": "integer",
71
+ "default": 0
72
  },
73
  {
74
  "key": "last_deactivated_email_sent_at",
75
+ "section": "section_non_ui",
76
  "transferable": false,
77
+ "type": "integer",
78
+ "default": 0
79
  },
80
  {
81
  "key": "last_errors",
82
+ "section": "section_non_ui",
83
  "transferable": false,
84
+ "type": "array",
85
+ "default": ""
86
  },
87
  {
88
  "key": "last_error_at",
89
+ "section": "section_non_ui",
90
  "sensitive": true,
91
  "transferable": false,
92
+ "type": "integer",
93
+ "default": 0
94
  },
95
  {
96
  "key": "keyless_request_hash",
97
+ "section": "section_non_ui",
98
  "sensitive": true,
99
  "transferable": false,
100
+ "type": "text",
101
+ "default": ""
102
  },
103
  {
104
  "key": "keyless_request_at",
105
+ "section": "section_non_ui",
106
  "sensitive": true,
107
  "transferable": false,
108
+ "type": "integer",
109
+ "default": 0
110
  },
111
  {
112
  "key": "license_data",
113
+ "section": "section_non_ui",
114
  "sensitive": true,
115
  "transferable": false,
116
+ "type": "array",
117
+ "default": []
118
  }
119
  ],
120
  "definitions": {
src/config/feature-lockdown.php CHANGED
@@ -163,14 +163,16 @@
163
  },
164
  {
165
  "key": "insights_xml_block_at",
166
- "transferable": false,
167
  "section": "section_non_ui",
 
 
168
  "default": 0
169
  },
170
  {
171
  "key": "insights_restapi_block_at",
172
- "transferable": false,
173
  "section": "section_non_ui",
 
 
174
  "default": 0
175
  }
176
  ],
163
  },
164
  {
165
  "key": "insights_xml_block_at",
 
166
  "section": "section_non_ui",
167
+ "transferable": false,
168
+ "type": "integer",
169
  "default": 0
170
  },
171
  {
172
  "key": "insights_restapi_block_at",
 
173
  "section": "section_non_ui",
174
+ "transferable": false,
175
+ "type": "integer",
176
  "default": 0
177
  }
178
  ],
src/config/feature-login_protect.php CHANGED
@@ -1,18 +1,18 @@
1
  {
2
  "slug": "login_protect",
3
  "properties": {
4
- "slug": "login_protect",
5
- "name": "Login Guard",
6
- "show_module_menu_item": false,
7
- "show_module_options": true,
8
- "storage_key": "loginprotect",
9
- "tagline": "Block brute force attacks and secure user identities with Two-Factor Authentication",
10
- "show_central": true,
11
- "access_restricted": true,
12
- "premium": false,
13
- "run_if_whitelisted": false,
14
- "run_if_verified_bot": false,
15
- "order": 40
16
  },
17
  "admin_notices": {
18
  "email-verification-sent": {
@@ -259,7 +259,9 @@
259
  "key": "bot_protection_locations",
260
  "section": "section_brute_force_login_protection",
261
  "type": "multiple_select",
262
- "default": [ "login" ],
 
 
263
  "value_options": [
264
  {
265
  "value_key": "login",
@@ -307,8 +309,8 @@
307
  "description": "Adds a dynamically (Javascript) generated checkbox to the login form that prevents bots using automated login techniques. Recommended: ON."
308
  },
309
  {
310
- "key": "enable_google_recaptcha_login",
311
- "section": "section_brute_force_login_protection",
312
  "default": "disabled",
313
  "type": "select",
314
  "value_options": [
@@ -333,11 +335,11 @@
333
  "text": "Invisible reCAPTCHA"
334
  }
335
  ],
336
- "link_info": "https://icwp.io/9m",
337
- "link_blog": "https://icwp.io/shld5",
338
- "name": "Google reCAPTCHA",
339
- "summary": "Enable Google reCAPTCHA",
340
- "description": "Use Google reCAPTCHA on the login screen."
341
  },
342
  {
343
  "key": "enable_antibot_js",
@@ -356,8 +358,8 @@
356
  "section": "section_brute_force_login_protection",
357
  "type": "array",
358
  "default": [
359
- "form#ihc_login_form",
360
- "form#createuser"
361
  ],
362
  "link_info": "",
363
  "link_blog": "",
@@ -428,69 +430,74 @@
428
  },
429
  {
430
  "key": "email_can_send_verified_at",
431
- "transferable": false,
432
  "section": "section_non_ui",
 
 
433
  "default": -1
434
  },
435
  {
436
  "key": "gasp_key",
 
437
  "transferable": false,
438
  "sensitive": true,
439
- "section": "section_non_ui"
 
440
  },
441
  {
442
  "key": "two_factor_secret_key",
 
443
  "transferable": false,
444
  "sensitive": true,
445
- "section": "section_non_ui"
446
- },
447
- {
448
- "key": "two_factor_auth_table_created",
449
- "transferable": false,
450
- "section": "section_non_ui"
451
  },
452
  {
453
  "key": "use_login_intent_page",
 
454
  "transferable": false,
455
- "value": true,
456
- "section": "section_non_ui"
457
  },
458
  {
459
  "key": "insights_last_2fa_login_at",
460
- "transferable": false,
461
  "section": "section_non_ui",
 
 
462
  "default": 0
463
  },
464
  {
465
  "key": "insights_last_login_block_at",
466
- "transferable": false,
467
  "section": "section_non_ui",
 
 
468
  "default": 0
469
  },
470
  {
471
  "key": "insights_last_register_block_at",
472
- "transferable": false,
473
  "section": "section_non_ui",
 
 
474
  "default": 0
475
  },
476
  {
477
  "key": "insights_last_reset-password_block_at",
478
  "transferable": false,
479
  "section": "section_non_ui",
 
480
  "default": 0
481
  }
482
  ],
483
  "definitions": {
484
- "login_intent_timeout": 5,
485
- "wizards": {
486
  "mfa": {
487
- "title": "Configure Multi-Factor Login Authentication",
488
- "desc": "Easily setup multi-factor login authentication, using Email and Google Authenticator.",
489
  "min_user_permissions": "manage_options",
490
  "steps": {
491
  "start": {
492
  "security_admin": false,
493
- "title": "Start: Multi-Factor Authentication"
494
  },
495
  "authemail": {
496
  "title": "Email Authentication"
@@ -503,7 +510,7 @@
503
  },
504
  "finished": {
505
  "security_admin": false,
506
- "title": "Finished: Multi-Factor Authentication"
507
  }
508
  }
509
  }
1
  {
2
  "slug": "login_protect",
3
  "properties": {
4
+ "slug": "login_protect",
5
+ "name": "Login Guard",
6
+ "show_module_menu_item": false,
7
+ "show_module_options": true,
8
+ "storage_key": "loginprotect",
9
+ "tagline": "Block brute force attacks and secure user identities with Two-Factor Authentication",
10
+ "show_central": true,
11
+ "access_restricted": true,
12
+ "premium": false,
13
+ "run_if_whitelisted": false,
14
+ "run_if_verified_bot": false,
15
+ "order": 40
16
  },
17
  "admin_notices": {
18
  "email-verification-sent": {
259
  "key": "bot_protection_locations",
260
  "section": "section_brute_force_login_protection",
261
  "type": "multiple_select",
262
+ "default": [
263
+ "login"
264
+ ],
265
  "value_options": [
266
  {
267
  "value_key": "login",
309
  "description": "Adds a dynamically (Javascript) generated checkbox to the login form that prevents bots using automated login techniques. Recommended: ON."
310
  },
311
  {
312
+ "key": "enable_google_recaptcha_login",
313
+ "section": "section_brute_force_login_protection",
314
  "default": "disabled",
315
  "type": "select",
316
  "value_options": [
335
  "text": "Invisible reCAPTCHA"
336
  }
337
  ],
338
+ "link_info": "https://icwp.io/9m",
339
+ "link_blog": "https://icwp.io/shld5",
340
+ "name": "Google reCAPTCHA",
341
+ "summary": "Enable Google reCAPTCHA",
342
+ "description": "Use Google reCAPTCHA on the login screen."
343
  },
344
  {
345
  "key": "enable_antibot_js",
358
  "section": "section_brute_force_login_protection",
359
  "type": "array",
360
  "default": [
361
+ "form#ihc_login_form",
362
+ "form#createuser"
363
  ],
364
  "link_info": "",
365
  "link_blog": "",
430
  },
431
  {
432
  "key": "email_can_send_verified_at",
 
433
  "section": "section_non_ui",
434
+ "transferable": false,
435
+ "type": "integer",
436
  "default": -1
437
  },
438
  {
439
  "key": "gasp_key",
440
+ "section": "section_non_ui",
441
  "transferable": false,
442
  "sensitive": true,
443
+ "type": "text",
444
+ "default": ""
445
  },
446
  {
447
  "key": "two_factor_secret_key",
448
+ "section": "section_non_ui",
449
  "transferable": false,
450
  "sensitive": true,
451
+ "type": "text",
452
+ "default": ""
 
 
 
 
453
  },
454
  {
455
  "key": "use_login_intent_page",
456
+ "section": "section_non_ui",
457
  "transferable": false,
458
+ "type": "boolean",
459
+ "value": true
460
  },
461
  {
462
  "key": "insights_last_2fa_login_at",
 
463
  "section": "section_non_ui",
464
+ "transferable": false,
465
+ "type": "integer",
466
  "default": 0
467
  },
468
  {
469
  "key": "insights_last_login_block_at",
 
470
  "section": "section_non_ui",
471
+ "transferable": false,
472
+ "type": "integer",
473
  "default": 0
474
  },
475
  {
476
  "key": "insights_last_register_block_at",
 
477
  "section": "section_non_ui",
478
+ "transferable": false,
479
+ "type": "integer",
480
  "default": 0
481
  },
482
  {
483
  "key": "insights_last_reset-password_block_at",
484
  "transferable": false,
485
  "section": "section_non_ui",
486
+ "type": "integer",
487
  "default": 0
488
  }
489
  ],
490
  "definitions": {
491
+ "login_intent_timeout": 5,
492
+ "wizards": {
493
  "mfa": {
494
+ "title": "Configure Multi-Factor Login Authentication",
495
+ "desc": "Easily setup multi-factor login authentication, using Email and Google Authenticator.",
496
  "min_user_permissions": "manage_options",
497
  "steps": {
498
  "start": {
499
  "security_admin": false,
500
+ "title": "Start: Multi-Factor Authentication"
501
  },
502
  "authemail": {
503
  "title": "Email Authentication"
510
  },
511
  "finished": {
512
  "security_admin": false,
513
+ "title": "Finished: Multi-Factor Authentication"
514
  }
515
  }
516
  }
src/config/feature-plugin.php CHANGED
@@ -18,12 +18,12 @@
18
  },
19
  "admin_notices": {
20
  "override-forceoff": {
21
- "id": "override-forceoff",
22
- "schedule": "conditions",
23
- "valid_admin": true,
24
  "plugin_page_only": false,
25
- "can_dismiss": false,
26
- "type": "error"
27
  },
28
  "plugin-update-available": {
29
  "id": "plugin-update-available",
@@ -340,64 +340,79 @@
340
  },
341
  {
342
  "key": "tracking_last_sent_at",
 
343
  "transferable": false,
344
- "default": 0,
345
- "section": "section_non_ui"
346
  },
347
  {
348
  "key": "unique_installation_id",
349
  "section": "section_non_ui",
350
  "transferable": false,
351
- "default": ""
 
352
  },
353
  {
354
  "key": "tracking_permission_set_at",
355
- "default": 0,
356
- "section": "section_non_ui"
 
357
  },
358
  {
359
  "key": "installation_time",
 
360
  "transferable": false,
361
- "section": "section_non_ui"
 
362
  },
363
  {
364
  "key": "importexport_secretkey_expires_at",
 
365
  "transferable": false,
366
- "section": "section_non_ui"
 
367
  },
368
  {
369
  "key": "importexport_handshake_expires_at",
 
370
  "transferable": false,
371
- "section": "section_non_ui"
 
372
  },
373
  {
374
  "key": "importexport_last_import_hash",
 
375
  "transferable": false,
376
- "section": "section_non_ui"
 
377
  },
378
  {
379
  "key": "this_server_ip",
 
380
  "transferable": false,
381
  "sensitive": true,
382
- "section": "section_non_ui",
383
  "default": ""
384
  },
385
  {
386
  "key": "this_server_ip_last_check_at",
387
- "transferable": false,
388
  "section": "section_non_ui",
 
 
389
  "default": 0
390
  },
391
  {
392
  "key": "insights_test_cron_last_run_at",
393
  "transferable": false,
394
  "section": "section_non_ui",
 
395
  "default": 0
396
  },
397
  {
398
  "key": "last_ip_detect_source",
399
  "transferable": false,
400
  "section": "section_non_ui",
 
401
  "default": ""
402
  }
403
  ],
@@ -501,7 +516,7 @@
501
  }
502
  ],
503
  "wizards": {
504
- "welcome": {
505
  "title": "Getting Started Setup Wizard",
506
  "desc": "An introduction to this security plugin, helping you get setup and started quickly with the core features.",
507
  "min_user_permissions": "manage_options",
@@ -546,7 +561,7 @@
546
  }
547
  }
548
  },
549
- "gdpr": {
550
  "title": "GDPR Data Wizard",
551
  "desc": "Walks you through the searching and removal of personally identifiable data.",
552
  "min_user_permissions": "manage_options",
@@ -567,25 +582,6 @@
567
  "title": "Finished: GDPR Compliance"
568
  }
569
  }
570
- },
571
- "importexport": {
572
- "title": "Options Import/Export Wizard",
573
- "desc": "Walks you through the import and export of options, as well as configuring ongoing automated options-sync.",
574
- "min_user_permissions": "manage_options",
575
- "has_premium": true,
576
- "steps": {
577
- "start": {
578
- "security_admin": false,
579
- "title": "Start: Options Import"
580
- },
581
- "import": {
582
- "title": "Run Options Import"
583
- },
584
- "finished": {
585
- "security_admin": false,
586
- "title": "Finished: Options Import"
587
- }
588
- }
589
  }
590
  }
591
  }
18
  },
19
  "admin_notices": {
20
  "override-forceoff": {
21
+ "id": "override-forceoff",
22
+ "schedule": "conditions",
23
+ "valid_admin": true,
24
  "plugin_page_only": false,
25
+ "can_dismiss": false,
26
+ "type": "error"
27
  },
28
  "plugin-update-available": {
29
  "id": "plugin-update-available",
340
  },
341
  {
342
  "key": "tracking_last_sent_at",
343
+ "section": "section_non_ui",
344
  "transferable": false,
345
+ "type": "integer",
346
+ "default": 0
347
  },
348
  {
349
  "key": "unique_installation_id",
350
  "section": "section_non_ui",
351
  "transferable": false,
352
+ "type": "text",
353
+ "default": 0
354
  },
355
  {
356
  "key": "tracking_permission_set_at",
357
+ "section": "section_non_ui",
358
+ "type": "integer",
359
+ "default": 0
360
  },
361
  {
362
  "key": "installation_time",
363
+ "section": "section_non_ui",
364
  "transferable": false,
365
+ "type": "integer",
366
+ "default": 0
367
  },
368
  {
369
  "key": "importexport_secretkey_expires_at",
370
+ "section": "section_non_ui",
371
  "transferable": false,
372
+ "type": "integer",
373
+ "default": 0
374
  },
375
  {
376
  "key": "importexport_handshake_expires_at",
377
+ "section": "section_non_ui",
378
  "transferable": false,
379
+ "type": "integer",
380
+ "default": 0
381
  },
382
  {
383
  "key": "importexport_last_import_hash",
384
+ "section": "section_non_ui",
385
  "transferable": false,
386
+ "type": "text",
387
+ "default": ""
388
  },
389
  {
390
  "key": "this_server_ip",
391
+ "section": "section_non_ui",
392
  "transferable": false,
393
  "sensitive": true,
394
+ "type": "text",
395
  "default": ""
396
  },
397
  {
398
  "key": "this_server_ip_last_check_at",
 
399
  "section": "section_non_ui",
400
+ "transferable": false,
401
+ "type": "integer",
402
  "default": 0
403
  },
404
  {
405
  "key": "insights_test_cron_last_run_at",
406
  "transferable": false,
407
  "section": "section_non_ui",
408
+ "type": "integer",
409
  "default": 0
410
  },
411
  {
412
  "key": "last_ip_detect_source",
413
  "transferable": false,
414
  "section": "section_non_ui",
415
+ "type": "text",
416
  "default": ""
417
  }
418
  ],
516
  }
517
  ],
518
  "wizards": {
519
+ "welcome": {
520
  "title": "Getting Started Setup Wizard",
521
  "desc": "An introduction to this security plugin, helping you get setup and started quickly with the core features.",
522
  "min_user_permissions": "manage_options",
561
  }
562
  }
563
  },
564
+ "gdpr": {
565
  "title": "GDPR Data Wizard",
566
  "desc": "Walks you through the searching and removal of personally identifiable data.",
567
  "min_user_permissions": "manage_options",
582
  "title": "Finished: GDPR Compliance"
583
  }
584
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
585
  }
586
  }
587
  }
src/config/feature-sessions.php CHANGED
@@ -43,8 +43,10 @@
43
  },
44
  {
45
  "key": "autoadd_sessions_started_at",
 
 
46
  "transferable": false,
47
- "section": "section_non_ui"
48
  }
49
  ],
50
  "definitions": {
43
  },
44
  {
45
  "key": "autoadd_sessions_started_at",
46
+ "section": "section_non_ui",
47
+ "type": "integer",
48
  "transferable": false,
49
+ "default": 0
50
  }
51
  ],
52
  "definitions": {
src/config/feature-traffic.php CHANGED
@@ -150,8 +150,10 @@
150
  },
151
  {
152
  "key": "autodisable_at",
 
 
153
  "transferable": false,
154
- "section": "section_non_ui"
155
  }
156
  ],
157
  "definitions": {
150
  },
151
  {
152
  "key": "autodisable_at",
153
+ "section": "section_non_ui",
154
+ "type": "integer",
155
  "transferable": false,
156
+ "default": 0
157
  }
158
  ],
159
  "definitions": {
src/config/feature-user_management.php CHANGED
@@ -237,19 +237,23 @@
237
  },
238
  {
239
  "key": "autoadd_sessions_started_at",
 
240
  "transferable": false,
241
- "section": "section_non_ui"
 
242
  },
243
  {
244
  "key": "insights_last_idle_logout_at",
245
- "transferable": false,
246
  "section": "section_non_ui",
 
 
247
  "default": 0
248
  },
249
  {
250
  "key": "insights_last_password_block_at",
251
- "transferable": false,
252
  "section": "section_non_ui",
 
 
253
  "default": 0
254
  }
255
  ],
237
  },
238
  {
239
  "key": "autoadd_sessions_started_at",
240
+ "section": "section_non_ui",
241
  "transferable": false,
242
+ "type": "integer",
243
+ "default": 0
244
  },
245
  {
246
  "key": "insights_last_idle_logout_at",
 
247
  "section": "section_non_ui",
248
+ "transferable": false,
249
+ "type": "integer",
250
  "default": 0
251
  },
252
  {
253
  "key": "insights_last_password_block_at",
 
254
  "section": "section_non_ui",
255
+ "transferable": false,
256
+ "type": "integer",
257
  "default": 0
258
  }
259
  ],
src/features/admin_access_restriction.php CHANGED
@@ -499,7 +499,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
499
  public function insertCustomJsVars_Admin() {
500
  parent::insertCustomJsVars_Admin();
501
 
502
- if ( $this->getSecAdminTimeLeft() < 1 ) {
503
  wp_localize_script(
504
  $this->prefix( 'plugin' ),
505
  'icwp_wpsf_vars_secadmin',
499
  public function insertCustomJsVars_Admin() {
500
  parent::insertCustomJsVars_Admin();
501
 
502
+ if ( $this->getSecAdminTimeLeft() > 0 ) {
503
  wp_localize_script(
504
  $this->prefix( 'plugin' ),
505
  'icwp_wpsf_vars_secadmin',
src/features/audit_trail.php CHANGED
@@ -50,7 +50,8 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
50
  /** @var ICWP_WPSF_Processor_AuditTrail $oPro */
51
  $oPro = $this->getProcessor();
52
  /** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
53
- $oEntry = $oPro->getDbHandler()
 
54
  ->getQuerySelector()
55
  ->byId( $nId );
56
 
@@ -89,7 +90,7 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
89
 
90
  $oTableBuilder = ( new Shield\Tables\Build\AuditTrail() )
91
  ->setMod( $this )
92
- ->setDbHandler( $oPro->getDbHandler() );
93
 
94
  return array(
95
  'success' => true,
@@ -111,6 +112,19 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
111
  return $this->isPremium() ? (int)$this->getOpt( 'audit_trail_max_entries' ) : $this->getDefaultMaxEntries();
112
  }
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  /**
115
  * @return bool
116
  */
@@ -223,17 +237,19 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
223
  );
224
 
225
  try {
226
- $oFinder = $oProc->getDbHandler()
 
227
  ->getQuerySelector()
228
  ->addWhereSearch( 'wp_username', $oUser->user_login )
229
  ->setResultsAsVo( true );
230
 
231
  $oWp = $this->loadWp();
 
232
  foreach ( $oFinder->query() as $oEntry ) {
233
  $aExportItem[ 'data' ][] = array(
234
  $sTimeStamp = $oWp->getTimeStringForDisplay( $oEntry->getCreatedAt() ),
235
  'name' => sprintf( '[%s] Audit Trail Entry', $sTimeStamp ),
236
- 'value' => sprintf( '[IP:%s] %s', $oEntry->getIp(), $oEntry->getMessage() )
237
  );
238
  }
239
 
@@ -262,7 +278,8 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
262
 
263
  try {
264
  $oThisUsername = $this->loadWpUsers()->getUserByEmail( $sEmail )->user_login;
265
- $oProc->getDbHandler()
 
266
  ->getQueryDeleter()
267
  ->addWhereSearch( 'wp_username', $oThisUsername )
268
  ->all();
50
  /** @var ICWP_WPSF_Processor_AuditTrail $oPro */
51
  $oPro = $this->getProcessor();
52
  /** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
53
+ $oEntry = $oPro->getSubProAuditor()
54
+ ->getDbHandler()
55
  ->getQuerySelector()
56
  ->byId( $nId );
57
 
90
 
91
  $oTableBuilder = ( new Shield\Tables\Build\AuditTrail() )
92
  ->setMod( $this )
93
+ ->setDbHandler( $oPro->getSubProAuditor()->getDbHandler() );
94
 
95
  return array(
96
  'success' => true,
112
  return $this->isPremium() ? (int)$this->getOpt( 'audit_trail_max_entries' ) : $this->getDefaultMaxEntries();
113
  }
114
 
115
+ /**
116
+ * @return bool
117
+ */
118
+ public function isEnabledAuditing() {
119
+ return $this->isAuditEmails()
120
+ || $this->isAuditPlugins()
121
+ || $this->isAuditThemes()
122
+ || $this->isAuditPosts()
123
+ || $this->isAuditShield()
124
+ || $this->isAuditUsers()
125
+ || $this->isAuditWp();
126
+ }
127
+
128
  /**
129
  * @return bool
130
  */
237
  );
238
 
239
  try {
240
+ $oFinder = $oProc->getSubProAuditor()
241
+ ->getDbHandler()
242
  ->getQuerySelector()
243
  ->addWhereSearch( 'wp_username', $oUser->user_login )
244
  ->setResultsAsVo( true );
245
 
246
  $oWp = $this->loadWp();
247
+ /** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
248
  foreach ( $oFinder->query() as $oEntry ) {
249
  $aExportItem[ 'data' ][] = array(
250
  $sTimeStamp = $oWp->getTimeStringForDisplay( $oEntry->getCreatedAt() ),
251
  'name' => sprintf( '[%s] Audit Trail Entry', $sTimeStamp ),
252
+ 'value' => sprintf( '[IP:%s] %s', $oEntry->ip, $oEntry->message )
253
  );
254
  }
255
 
278
 
279
  try {
280
  $oThisUsername = $this->loadWpUsers()->getUserByEmail( $sEmail )->user_login;
281
+ $oProc->getSubProAuditor()
282
+ ->getDbHandler()
283
  ->getQueryDeleter()
284
  ->addWhereSearch( 'wp_username', $oThisUsername )
285
  ->all();
src/features/base.php CHANGED
@@ -95,8 +95,8 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
95
  add_filter( $this->prefix( 'ajaxAuthAction' ), array( $this, 'handleAuthAjax' ) );
96
  add_filter( $this->prefix( 'ajaxNonAuthAction' ), array( $this, 'handleNonAuthAjax' ) );
97
 
98
- if ( $oReq->query( 'action' ) == $this->prefix()
99
- && check_admin_referer( $oReq->query( 'exec' ), 'exec_nonce' )
100
  ) {
101
  add_action( $this->prefix( 'mod_request' ), array( $this, 'handleModRequest' ) );
102
  }
@@ -373,7 +373,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
373
  /**
374
  * @return ICWP_WPSF_OptionsVO
375
  */
376
- protected function getOptionsVo() {
377
  if ( !isset( $this->oOptions ) ) {
378
  $oCon = $this->getCon();
379
  $this->oOptions = ( new ICWP_WPSF_OptionsVO )
95
  add_filter( $this->prefix( 'ajaxAuthAction' ), array( $this, 'handleAuthAjax' ) );
96
  add_filter( $this->prefix( 'ajaxNonAuthAction' ), array( $this, 'handleNonAuthAjax' ) );
97
 
98
+ if ( $oReq->request( 'action' ) == $this->prefix()
99
+ && check_admin_referer( $oReq->request( 'exec' ), 'exec_nonce' )
100
  ) {
101
  add_action( $this->prefix( 'mod_request' ), array( $this, 'handleModRequest' ) );
102
  }
373
  /**
374
  * @return ICWP_WPSF_OptionsVO
375
  */
376
+ public function getOptionsVo() {
377
  if ( !isset( $this->oOptions ) ) {
378
  $oCon = $this->getCon();
379
  $this->oOptions = ( new ICWP_WPSF_OptionsVO )
src/features/base_wpsf.php CHANGED
@@ -135,7 +135,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
135
  * @return string
136
  */
137
  public function getPluginDefaultRecipientAddress() {
138
- return apply_filters( $this->prefix( 'report_email_address' ), $this->loadWp()->getSiteAdminEmail() );
139
  }
140
 
141
  /**
@@ -180,7 +180,10 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
180
  ),
181
  'hrefs' => array(
182
  'aar_forget_key' => $sHelpUrl
183
- )
 
 
 
184
  )
185
  );
186
  }
@@ -261,8 +264,8 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
261
  if ( !isset( self::$bIsVerifiedBot ) ) {
262
  $oSp = $this->loadServiceProviders();
263
 
264
- $sIp = \FernleafSystems\Wordpress\Services\Services::IP()->getRequestIp();
265
- $sAgent = (string)$this->loadRequest()->server( 'HTTP_USER_AGENT' );
266
  if ( empty( $sAgent ) ) {
267
  $sAgent = 'Unknown';
268
  }
@@ -272,6 +275,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
272
  || $oSp->isIp_YahooBot( $sIp, $sAgent )
273
  || $oSp->isIp_DuckDuckGoBot( $sIp, $sAgent )
274
  || $oSp->isIp_YandexBot( $sIp, $sAgent )
 
275
  || $oSp->isIp_BaiduBot( $sIp, $sAgent );
276
  }
277
  return self::$bIsVerifiedBot;
135
  * @return string
136
  */
137
  public function getPluginDefaultRecipientAddress() {
138
+ return apply_filters( $this->prefix( 'report_email_address' ), Services::WpGeneral()->getSiteAdminEmail() );
139
  }
140
 
141
  /**
180
  ),
181
  'hrefs' => array(
182
  'aar_forget_key' => $sHelpUrl
183
+ ),
184
+ 'classes' => array(
185
+ 'top_container' => $this->isPremium() ? 'is-pro' : 'is-not-pro'
186
+ ),
187
  )
188
  );
189
  }
264
  if ( !isset( self::$bIsVerifiedBot ) ) {
265
  $oSp = $this->loadServiceProviders();
266
 
267
+ $sIp = Services::IP()->getRequestIp();
268
+ $sAgent = (string)Services::Request()->server( 'HTTP_USER_AGENT' );
269
  if ( empty( $sAgent ) ) {
270
  $sAgent = 'Unknown';
271
  }
275
  || $oSp->isIp_YahooBot( $sIp, $sAgent )
276
  || $oSp->isIp_DuckDuckGoBot( $sIp, $sAgent )
277
  || $oSp->isIp_YandexBot( $sIp, $sAgent )
278
+ || $oSp->isIp_iControlWP( $sIp )
279
  || $oSp->isIp_BaiduBot( $sIp, $sAgent );
280
  }
281
  return self::$bIsVerifiedBot;
src/features/hack_protect.php CHANGED
@@ -13,7 +13,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
13
  */
14
  protected function updateHandler() {
15
  $this->clearCrons()
16
- ->setPtgRebuildSelfRequired( true ) // this is permanently required until a better solution is found
17
  ->setPtgUpdateStoreFormat( true );
18
  }
19
 
@@ -37,7 +37,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
37
  * @return array
38
  */
39
  public function handleAuthAjax( $aAjaxResponse ) {
40
- $oReq = $this->loadRequest();
41
 
42
  if ( empty( $aAjaxResponse ) ) {
43
 
@@ -94,7 +94,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
94
  $bReinstall = (bool)$oReq->post( 'reinstall' );
95
  $bActivate = (bool)$oReq->post( 'activate' );
96
  $sFile = sanitize_text_field( wp_unslash( $oReq->post( 'file' ) ) );
97
- $oWpP = $this->loadWpPlugins();
98
 
99
  if ( $bReinstall ) {
100
  /** @var ICWP_WPSF_Processor_HackProtect $oP */
@@ -104,13 +103,12 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
104
  ->reinstall( $sFile )
105
  && $bActivate;
106
  }
 
107
  if ( $bActivate ) {
108
- $oWpP->activate( $sFile );
109
  }
110
 
111
- return array(
112
- 'success' => true
113
- );
114
  }
115
 
116
  /**
@@ -615,6 +613,13 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
615
  return $this->setOpt( 'ptg_enable', $sValue );
616
  }
617
 
 
 
 
 
 
 
 
618
  public function insertCustomJsVars_Admin() {
619
  parent::insertCustomJsVars_Admin();
620
 
@@ -689,6 +694,10 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
689
 
690
  switch ( $this->loadRequest()->post( 'fScan' ) ) {
691
 
 
 
 
 
692
  case 'wcf':
693
  $oTableBuilder = new \FernleafSystems\Wordpress\Plugin\Shield\Tables\Build\ScanWcf();
694
  break;
@@ -727,7 +736,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
727
  );
728
  }
729
 
730
- public function ajaxExec_StartScans() {
731
  $bSuccess = false;
732
  $bPageReload = false;
733
  $sMessage = _wpsf__( 'No scans were selected' );
@@ -760,7 +769,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
760
  break;
761
  }
762
 
763
- if ( !empty( $oTablePro ) ) {
764
  $oTablePro->doScan();
765
 
766
  if ( isset( $aFormParams[ 'opt_clear_ignore' ] ) ) {
@@ -777,11 +786,11 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
777
  }
778
  }
779
 
780
- return array(
781
  'success' => $bSuccess,
782
  'page_reload' => $bPageReload,
783
  'message' => $sMessage,
784
- );
785
  }
786
 
787
  /**
@@ -797,6 +806,12 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
797
  $bSuccess = false;
798
  $bReloadPage = false;
799
  switch ( $oReq->post( 'fScan' ) ) {
 
 
 
 
 
 
800
  case 'ptg':
801
  $bReloadPage = true;
802
  $oTablePro = $oScanPro->getSubProcessorPtg();
@@ -1182,6 +1197,15 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
1182
  );
1183
  break;
1184
 
 
 
 
 
 
 
 
 
 
1185
  case 'section_integrity_checking' :
1186
  $sTitle = _wpsf__( 'Integrity Checks' );
1187
  $sTitleShort = _wpsf__( 'Integrity Checks' );
@@ -1337,6 +1361,18 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
1337
  $sDescription = _wpsf__( "Show links to re-install plugins and offer re-install when activating plugins." );
1338
  break;
1339
 
 
 
 
 
 
 
 
 
 
 
 
 
1340
  default:
1341
  throw new \Exception( sprintf( 'An option has been defined but without strings assigned to it. Option key: "%s".', $sKey ) );
1342
  }
13
  */
14
  protected function updateHandler() {
15
  $this->clearCrons()
16
+ // ->setPtgRebuildSelfRequired( true ) // this is permanently required until a better solution is found
17
  ->setPtgUpdateStoreFormat( true );
18
  }
19
 
37
  * @return array
38
  */
39
  public function handleAuthAjax( $aAjaxResponse ) {
40
+ $oReq = Services::Request();
41
 
42
  if ( empty( $aAjaxResponse ) ) {
43
 
94
  $bReinstall = (bool)$oReq->post( 'reinstall' );
95
  $bActivate = (bool)$oReq->post( 'activate' );
96
  $sFile = sanitize_text_field( wp_unslash( $oReq->post( 'file' ) ) );
 
97
 
98
  if ( $bReinstall ) {
99
  /** @var ICWP_WPSF_Processor_HackProtect $oP */
103
  ->reinstall( $sFile )
104
  && $bActivate;
105
  }
106
+
107
  if ( $bActivate ) {
108
+ Services::WpPlugins()->activate( $sFile );
109
  }
110
 
111
+ return [ 'success' => true ];
 
 
112
  }
113
 
114
  /**
613
  return $this->setOpt( 'ptg_enable', $sValue );
614
  }
615
 
616
+ /**
617
+ * @return bool
618
+ */
619
+ public function isApcEnabled() {
620
+ return !$this->isOpt( 'enabled_scan_apc', 'disabled' );
621
+ }
622
+
623
  public function insertCustomJsVars_Admin() {
624
  parent::insertCustomJsVars_Admin();
625
 
694
 
695
  switch ( $this->loadRequest()->post( 'fScan' ) ) {
696
 
697
+ case 'apc':
698
+ $oTableBuilder = new \FernleafSystems\Wordpress\Plugin\Shield\Tables\Build\ScanApc();
699
+ break;
700
+
701
  case 'wcf':
702
  $oTableBuilder = new \FernleafSystems\Wordpress\Plugin\Shield\Tables\Build\ScanWcf();
703
  break;
736
  );
737
  }
738
 
739
+ private function ajaxExec_StartScans() {
740
  $bSuccess = false;
741
  $bPageReload = false;
742
  $sMessage = _wpsf__( 'No scans were selected' );
769
  break;
770
  }
771
 
772
+ if ( !empty( $oTablePro ) && $oTablePro->isEnabled() ) {
773
  $oTablePro->doScan();
774
 
775
  if ( isset( $aFormParams[ 'opt_clear_ignore' ] ) ) {
786
  }
787
  }
788
 
789
+ return [
790
  'success' => $bSuccess,
791
  'page_reload' => $bPageReload,
792
  'message' => $sMessage,
793
+ ];
794
  }
795
 
796
  /**
806
  $bSuccess = false;
807
  $bReloadPage = false;
808
  switch ( $oReq->post( 'fScan' ) ) {
809
+
810
+ case 'apc':
811
+ $bReloadPage = true;
812
+ $oTablePro = $oScanPro->getSubProcessorApc();
813
+ break;
814
+
815
  case 'ptg':
816
  $bReloadPage = true;
817
  $oTablePro = $oScanPro->getSubProcessorPtg();
1197
  );
1198
  break;
1199
 
1200
+ case 'section_scan_apc' :
1201
+ $sTitle = _wpsf__( 'Enable The Abandoned Plugin Scanner' );
1202
+ $sTitleShort = _wpsf__( 'Abandoned Plugin Scanner' );
1203
+ $aSummary = array(
1204
+ // sprintf( '%s - %s', _wpsf__( 'Purpose' ), _wpsf__( 'Monitor for unrecognised changes to your system.' ) ),
1205
+ // sprintf( '%s - %s', _wpsf__( 'Recommendation' ), _wpsf__( 'Enable these to prevent unauthorized changes to your WordPress site.' ) )
1206
+ );
1207
+ break;
1208
+
1209
  case 'section_integrity_checking' :
1210
  $sTitle = _wpsf__( 'Integrity Checks' );
1211
  $sTitleShort = _wpsf__( 'Integrity Checks' );
1361
  $sDescription = _wpsf__( "Show links to re-install plugins and offer re-install when activating plugins." );
1362
  break;
1363
 
1364
+ case 'enabled_scan_apc' :
1365
+ $sName = _wpsf__( 'Abandoned Plugin Scanner' );
1366
+ $sSummary = _wpsf__( 'Enable The Abandoned Plugin Scanner' );
1367
+ $sDescription = _wpsf__( "Scan your WordPress.org assets for whether they've been abandoned." );
1368
+ break;
1369
+
1370
+ case 'display_apc' :
1371
+ $sName = _wpsf__( 'Highlight Plugins' );
1372
+ $sSummary = _wpsf__( 'Highlight Abandoned Plugins' );
1373
+ $sDescription = _wpsf__( "Abandoned plugins will be highlighted on the main plugins page." );
1374
+ break;
1375
+
1376
  default:
1377
  throw new \Exception( sprintf( 'An option has been defined but without strings assigned to it. Option key: "%s".', $sKey ) );
1378
  }
src/features/insights.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWpsf {
4
 
5
  /**
@@ -31,7 +33,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
31
  /** @var ICWP_WPSF_Processor_AuditTrail $oAuditPro */
32
  $oAuditPro = $oAuditMod->getProcessor();
33
  /** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\AuditTrail\Select $oAuditSelect */
34
- $oAuditSelect = $oAuditPro->getDbHandler()->getQuerySelector();
35
 
36
  /** @var ICWP_WPSF_FeatureHandler_Ips $oIpMod */
37
  $oIpMod = $oCon->getModule( 'ips' );
@@ -49,6 +51,8 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
49
  $oModLicense = $oCon->getModule( 'license' );
50
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oModPlugin */
51
  $oModPlugin = $oCon->getModule( 'plugin' );
 
 
52
 
53
  $bIsPro = $this->isPremium();
54
  $oCarbon = new \Carbon\Carbon();
@@ -113,7 +117,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
113
  'bulk_action' => $oModPlugin->getAjaxActionData( 'bulk_action', true ),
114
  ),
115
  'flags' => array(
116
- 'can_notes' => $bIsPro //not the way to determine
117
  )
118
  );
119
  break;
@@ -124,7 +128,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
124
  'render_table_traffic' => $oTrafficMod->getAjaxActionData( 'render_table_traffic', true )
125
  ),
126
  'flags' => array(
127
- 'can_traffic' => $this->isPremium(),
128
  'is_enabled' => $oTrafficMod->isModOptEnabled(),
129
  ),
130
  'hrefs' => array(
@@ -149,6 +153,10 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
149
  $aData = $oProHp->buildInsightsVars();
150
  break;
151
 
 
 
 
 
152
  case 'users':
153
  $aData = array(
154
  'ajax' => array(
@@ -196,7 +204,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
196
  'show_ads' => false,
197
  'show_standard_options' => false,
198
  'show_alt_content' => true,
199
- 'is_pro' => $this->isPremium(),
200
  'has_notices' => count( $aSecNotices ) > 0,
201
  ),
202
  );
@@ -204,14 +212,15 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
204
  }
205
 
206
  $aTopNav = array(
207
- 'insights' => _wpsf__( 'Overview' ),
208
- 'scans' => _wpsf__( 'Scans' ),
209
- 'ips' => _wpsf__( 'IP Lists' ),
210
- 'audit' => _wpsf__( 'Audit Trail' ),
211
- 'traffic' => _wpsf__( 'Traffic' ),
212
- 'users' => _wpsf__( 'Users' ),
213
- 'notes' => _wpsf__( 'Notes' ),
214
- 'license' => _wpsf__( 'Pro' ),
 
215
  );
216
  array_walk( $aTopNav, function ( &$sName, $sKey ) use ( $sSubNavSection ) {
217
  $sName = array(
@@ -227,25 +236,29 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
227
  'active' => false
228
  );
229
 
230
- $aData = $this->loadDP()
231
- ->mergeArraysRecursive(
232
- array(
233
- 'classes' => array(
234
- 'page_container' => 'page-insights page-'.$sSubNavSection
235
- ),
236
- 'flags' => array(
237
- 'show_promo' => !$bIsPro
238
- ),
239
- 'hrefs' => array(
240
- 'go_pro' => 'https://icwp.io/shieldgoprofeature',
241
- 'nav_home' => $this->getUrl_AdminPage(),
242
- 'top_nav' => $aTopNav,
243
- 'img_banner' => $oCon->getPluginUrl_Image( 'pluginlogo_banner-170x40.png' )
244
- ),
245
- 'strings' => $this->getDisplayStrings(),
246
- ),
247
- $aData
248
- );
 
 
 
 
249
  echo $this->renderTemplate( sprintf( '/wpadmin_pages/insights_new/%s/index.twig', $sSubNavSection ), $aData, true );
250
  }
251
 
@@ -254,47 +267,58 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
254
 
255
  if ( $this->isThisModulePage() ) {
256
 
257
- if ( $this->isThisModulePage() ) {
258
- $oConn = $this->getCon();
259
-
260
- $aStdDeps = array( $this->prefix( 'plugin' ) );
261
- $sSubnav = $this->loadRequest()->query( 'subnav' );
262
- switch ( $sSubnav ) {
263
-
264
- case 'scans':
265
- case 'audit':
266
- case 'ips':
267
- case 'notes':
268
- case 'traffic':
269
- case 'users':
270
-
271
- $sAsset = 'shield-tables';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  $sUnique = $this->prefix( $sAsset );
273
  wp_register_script(
274
  $sUnique,
275
  $oConn->getPluginUrl_Js( $sAsset.'.js' ),
276
- $aStdDeps,
277
  $oConn->getVersion(),
278
  false
279
  );
280
  wp_enqueue_script( $sUnique );
 
281
 
282
- $aStdDeps[] = $sUnique;
283
- if ( $sSubnav == 'scans' ) {
284
- $sAsset = 'shield-scans';
285
- $sUnique = $this->prefix( $sAsset );
286
- wp_register_script(
287
- $sUnique,
288
- $oConn->getPluginUrl_Js( $sAsset.'.js' ),
289
- $aStdDeps,
290
- $oConn->getVersion(),
291
- false
292
- );
293
- wp_enqueue_script( $sUnique );
294
- }
295
-
296
- break;
297
- }
298
  }
299
  }
300
  }
@@ -316,9 +340,9 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
316
  'never' => _wpsf__( 'Never' ),
317
  'go_pro' => 'Go Pro!',
318
  'options' => _wpsf__( 'Options' ),
319
- 'not_available' => _wpsf__( 'Sorry, this feature is not available.' ),
320
  'not_enabled' => _wpsf__( "This feature isn't currently enabled." ),
321
- 'please_upgrade' => _wpsf__( 'Please upgrade to Pro to activate this feature (along with many more).' ),
322
  'please_enable' => _wpsf__( 'Please turn on this feature in the options.' ),
323
  'only_1_dollar' => _wpsf__( 'for just $1/month' ),
324
  )
1
  <?php
2
 
3
+ use FernleafSystems\Wordpress\Services\Services;
4
+
5
  class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWpsf {
6
 
7
  /**
33
  /** @var ICWP_WPSF_Processor_AuditTrail $oAuditPro */
34
  $oAuditPro = $oAuditMod->getProcessor();
35
  /** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\AuditTrail\Select $oAuditSelect */
36
+ $oAuditSelect = $oAuditPro->getSubProAuditor()->getDbHandler()->getQuerySelector();
37
 
38
  /** @var ICWP_WPSF_FeatureHandler_Ips $oIpMod */
39
  $oIpMod = $oCon->getModule( 'ips' );
51
  $oModLicense = $oCon->getModule( 'license' );
52
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oModPlugin */
53
  $oModPlugin = $oCon->getModule( 'plugin' );
54
+ /** @var ICWP_WPSF_Processor_Plugin $oProPlugin */
55
+ $oProPlugin = $oModPlugin->getProcessor();
56
 
57
  $bIsPro = $this->isPremium();
58
  $oCarbon = new \Carbon\Carbon();
117
  'bulk_action' => $oModPlugin->getAjaxActionData( 'bulk_action', true ),
118
  ),
119
  'flags' => array(
120
+ 'can_adminnotes' => $bIsPro,
121
  )
122
  );
123
  break;
128
  'render_table_traffic' => $oTrafficMod->getAjaxActionData( 'render_table_traffic', true )
129
  ),
130
  'flags' => array(
131
+ 'can_traffic' => $bIsPro,
132
  'is_enabled' => $oTrafficMod->isModOptEnabled(),
133
  ),
134
  'hrefs' => array(
153
  $aData = $oProHp->buildInsightsVars();
154
  break;
155
 
156
+ case 'importexport':
157
+ $aData = $oProPlugin->getSubProImportExport()->buildInsightsVars();
158
+ break;
159
+
160
  case 'users':
161
  $aData = array(
162
  'ajax' => array(
204
  'show_ads' => false,
205
  'show_standard_options' => false,
206
  'show_alt_content' => true,
207
+ 'is_pro' => $bIsPro,
208
  'has_notices' => count( $aSecNotices ) > 0,
209
  ),
210
  );
212
  }
213
 
214
  $aTopNav = array(
215
+ 'insights' => _wpsf__( 'Overview' ),
216
+ 'scans' => _wpsf__( 'Scans' ),
217
+ 'ips' => _wpsf__( 'IP Lists' ),
218
+ 'audit' => _wpsf__( 'Audit Trail' ),
219
+ 'users' => _wpsf__( 'Users' ),
220
+ 'license' => _wpsf__( 'Pro' ),
221
+ 'traffic' => _wpsf__( 'Traffic' ),
222
+ 'notes' => _wpsf__( 'Notes' ),
223
+ 'importexport' => sprintf( '%s/%s', _wpsf__( 'Import' ), _wpsf__( 'Export' ) ),
224
  );
225
  array_walk( $aTopNav, function ( &$sName, $sKey ) use ( $sSubNavSection ) {
226
  $sName = array(
236
  'active' => false
237
  );
238
 
239
+ $oDp = \FernleafSystems\Wordpress\Services\Services::DataManipulation();
240
+ $aData = $oDp->mergeArraysRecursive(
241
+ $this->getBaseDisplayData( false ),
242
+ array(
243
+ 'classes' => array(
244
+ 'page_container' => 'page-insights page-'.$sSubNavSection
245
+ ),
246
+ 'flags' => array(
247
+ 'show_promo' => !$bIsPro
248
+ ),
249
+ 'hrefs' => array(
250
+ 'go_pro' => 'https://icwp.io/shieldgoprofeature',
251
+ 'nav_home' => $this->getUrl_AdminPage(),
252
+ 'top_nav' => $aTopNav,
253
+ 'img_banner' => $oCon->getPluginUrl_Image( 'pluginlogo_banner-170x40.png' )
254
+ ),
255
+ 'strings' => $this->getDisplayStrings(),
256
+ 'vars' => [
257
+ 'changelog_id' => $oCon->getPluginSpec()[ 'meta' ][ 'headway_changelog_id' ],
258
+ ],
259
+ ),
260
+ $aData
261
+ );
262
  echo $this->renderTemplate( sprintf( '/wpadmin_pages/insights_new/%s/index.twig', $sSubNavSection ), $aData, true );
263
  }
264
 
267
 
268
  if ( $this->isThisModulePage() ) {
269
 
270
+ $oConn = $this->getCon();
271
+ $aStdDeps = array( $this->prefix( 'plugin' ) );
272
+ $sSubnav = $this->loadRequest()->query( 'subnav' );
273
+ switch ( $sSubnav ) {
274
+
275
+ case 'importexport':
276
+
277
+ $sAsset = 'shield-import';
278
+ $sUnique = $this->prefix( $sAsset );
279
+ wp_register_script(
280
+ $sUnique,
281
+ $oConn->getPluginUrl_Js( $sAsset.'.js' ),
282
+ $aStdDeps,
283
+ $oConn->getVersion(),
284
+ false
285
+ );
286
+ wp_enqueue_script( $sUnique );
287
+ break;
288
+
289
+ case 'scans':
290
+ case 'audit':
291
+ case 'ips':
292
+ case 'notes':
293
+ case 'traffic':
294
+ case 'users':
295
+
296
+ $sAsset = 'shield-tables';
297
+ $sUnique = $this->prefix( $sAsset );
298
+ wp_register_script(
299
+ $sUnique,
300
+ $oConn->getPluginUrl_Js( $sAsset.'.js' ),
301
+ $aStdDeps,
302
+ $oConn->getVersion(),
303
+ false
304
+ );
305
+ wp_enqueue_script( $sUnique );
306
+
307
+ $aStdDeps[] = $sUnique;
308
+ if ( $sSubnav == 'scans' ) {
309
+ $sAsset = 'shield-scans';
310
  $sUnique = $this->prefix( $sAsset );
311
  wp_register_script(
312
  $sUnique,
313
  $oConn->getPluginUrl_Js( $sAsset.'.js' ),
314
+ array_unique( $aStdDeps ),
315
  $oConn->getVersion(),
316
  false
317
  );
318
  wp_enqueue_script( $sUnique );
319
+ }
320
 
321
+ break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  }
323
  }
324
  }
340
  'never' => _wpsf__( 'Never' ),
341
  'go_pro' => 'Go Pro!',
342
  'options' => _wpsf__( 'Options' ),
343
+ 'not_available' => _wpsf__( 'Sorry, this feature would typically be used by professionals and so is a Pro-only feature.' ),
344
  'not_enabled' => _wpsf__( "This feature isn't currently enabled." ),
345
+ 'please_upgrade' => _wpsf__( 'You can activate this feature (along with many others) and support development of this plugin for just $12.' ),
346
  'please_enable' => _wpsf__( 'Please turn on this feature in the options.' ),
347
  'only_1_dollar' => _wpsf__( 'for just $1/month' ),
348
  )
src/features/ips.php CHANGED
@@ -222,6 +222,49 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
222
  ];
223
  }
224
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
  /**
226
  * @param string $sOptKey
227
  * @return string
@@ -330,6 +373,12 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
330
  .'<br />'._wpsf__( 'Shorter IP black lists are more efficient and a more intelligent use of an IP-based blocking system.' );
331
  break;
332
 
 
 
 
 
 
 
333
  case 'track_404' :
334
  $sName = _wpsf__( 'Track 404s' );
335
  $sSummary = _wpsf__( 'Use 404s As An Transgression' );
@@ -371,14 +420,22 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
371
  /**
372
  */
373
  protected function addFilterIpsToWhiteList() {
 
374
  $oSp = $this->loadServiceProviders();
375
 
376
- $aMwp = function_exists( 'mwp_init' ) ? array_flip( $oSp->getIps_ManageWp() ) : array();
377
- foreach ( $aMwp as $sIp => $n ) {
378
- $aMwp[ $sIp ] = 'ManageWP';
 
 
 
 
 
 
 
379
  }
380
 
381
- $aIps = apply_filters( 'icwp_simple_firewall_whitelist_ips', $aMwp );
382
 
383
  if ( !empty( $aIps ) && is_array( $aIps ) ) {
384
  /** @var ICWP_WPSF_Processor_Ips $oPro */
222
  ];
223
  }
224
 
225
+ /**
226
+ * @return array
227
+ */
228
+ public function getAutoUnblockIps() {
229
+ $aIps = $this->getOpt( 'autounblock_ips', [] );
230
+ return is_array( $aIps ) ? $aIps : [];
231
+ }
232
+
233
+ /**
234
+ * @param string $sIp
235
+ * @return bool
236
+ */
237
+ public function getCanIpRequestAutoUnblock( $sIp ) {
238
+ $aExistingIps = $this->getAutoUnblockIps();
239
+ return !array_key_exists( $sIp, $aExistingIps )
240
+ || ( Services::Request()->ts() - $aExistingIps[ $sIp ] > DAY_IN_SECONDS );
241
+ }
242
+
243
+ /**
244
+ * @param string $sIp
245
+ * @return $this
246
+ */
247
+ public function updateIpRequestAutoUnblockTs( $sIp ) {
248
+ $aExistingIps = $this->getAutoUnblockIps();
249
+ $aExistingIps[ $sIp ] = Services::Request()->ts();
250
+ return $this->setAutoUnblockIps( $aExistingIps );
251
+ }
252
+
253
+ /**
254
+ * @param array $aIps
255
+ * @return $this
256
+ */
257
+ public function setAutoUnblockIps( $aIps ) {
258
+ return $this->setOpt( 'autounblock_ips', $aIps );
259
+ }
260
+
261
+ /**
262
+ * @return bool
263
+ */
264
+ public function isEnabledAutoUserRecover() {
265
+ return !$this->isOpt( 'user_auto_recover', 'disabled' );
266
+ }
267
+
268
  /**
269
  * @param string $sOptKey
270
  * @return string
373
  .'<br />'._wpsf__( 'Shorter IP black lists are more efficient and a more intelligent use of an IP-based blocking system.' );
374
  break;
375
 
376
+ case 'user_auto_recover' :
377
+ $sName = _wpsf__( 'User Auto Unblock' );
378
+ $sSummary = _wpsf__( 'Allow Visitors To Unblock Their IP' );
379
+ $sDescription = _wpsf__( 'Allow visitors blocked by the plugin to automatically unblock themselves.' );
380
+ break;
381
+
382
  case 'track_404' :
383
  $sName = _wpsf__( 'Track 404s' );
384
  $sSummary = _wpsf__( 'Use 404s As An Transgression' );
420
  /**
421
  */
422
  protected function addFilterIpsToWhiteList() {
423
+ $aIps = [];
424
  $oSp = $this->loadServiceProviders();
425
 
426
+ if ( function_exists( 'mwp_init' ) ) {
427
+ foreach ( array_flip( $oSp->getIps_ManageWp() ) as $sIp => $n ) {
428
+ $aIps[ $sIp ] = 'ManageWP';
429
+ }
430
+ }
431
+
432
+ if ( class_exists( 'ICWP_Plugin' ) ) {
433
+ foreach ( array_flip( $oSp->getIps_iControlWP( true ) ) as $sIp => $n ) {
434
+ $aIps[ $sIp ] = 'iControlWP';
435
+ }
436
  }
437
 
438
+ $aIps = apply_filters( 'icwp_simple_firewall_whitelist_ips', $aIps );
439
 
440
  if ( !empty( $aIps ) && is_array( $aIps ) ) {
441
  /** @var ICWP_WPSF_Processor_Ips $oPro */
src/features/lockdown.php CHANGED
@@ -106,11 +106,11 @@ class ICWP_WPSF_FeatureHandler_Lockdown extends ICWP_WPSF_FeatureHandler_BaseWps
106
  $aThis[ 'key_opts' ][ 'mod' ] = $this->getModDisabledInsight();
107
  }
108
  else {
109
- $bEditing = current_user_can( 'edit_plugins' );
110
  $aThis[ 'key_opts' ][ 'editing' ] = array(
111
  'name' => _wpsf__( 'WP File Editing' ),
112
- 'enabled' => $bEditing,
113
- 'summary' => $bEditing ?
114
  _wpsf__( 'File editing is disabled' )
115
  : _wpsf__( "File editing is permitted through WP admin" ),
116
  'weight' => 2,
106
  $aThis[ 'key_opts' ][ 'mod' ] = $this->getModDisabledInsight();
107
  }
108
  else {
109
+ $bEditingDisabled = !current_user_can( 'edit_plugins' );
110
  $aThis[ 'key_opts' ][ 'editing' ] = array(
111
  'name' => _wpsf__( 'WP File Editing' ),
112
+ 'enabled' => $bEditingDisabled,
113
+ 'summary' => $bEditingDisabled ?
114
  _wpsf__( 'File editing is disabled' )
115
  : _wpsf__( "File editing is permitted through WP admin" ),
116
  'weight' => 2,
src/features/plugin.php CHANGED
@@ -191,6 +191,10 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
191
  $aAjaxResponse = $this->ajaxExec_AdminNotesInsert();
192
  break;
193
 
 
 
 
 
194
  default:
195
  break;
196
  }
@@ -198,6 +202,54 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
198
  return parent::handleAuthAjax( $aAjaxResponse );
199
  }
200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  /**
202
  * @return array
203
  */
@@ -328,6 +380,40 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
328
  );
329
  }
330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
  /**
332
  * @return array
333
  */
@@ -605,7 +691,7 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
605
  */
606
  public function hasImportExportMasterImportUrl() {
607
  $sMaster = $this->getImportExportMasterImportUrl();
608
- return !empty( $sMaster ) && ( rtrim( $this->loadWp()->getHomeUrl(), '/' ) != $sMaster );
609
  }
610
 
611
  /**
@@ -686,6 +772,24 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
686
  return $this;
687
  }
688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  /**
690
  * @param string $sKey
691
  * @return bool
@@ -906,10 +1010,11 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
906
  $aThis[ 'key_opts' ][ 'mod' ] = $this->getModDisabledInsight();
907
  }
908
  else {
 
909
  $aThis[ 'key_opts' ][ 'editing' ] = array(
910
  'name' => _wpsf__( 'Visitor IP' ),
911
  'enabled' => true,
912
- 'summary' => sprintf( _wpsf__( 'Visitor IP address source is: %s' ), $this->getVisitorAddressSource() ),
913
  'weight' => 0,
914
  'href' => $this->getUrl_DirectLinkToOption( 'visitor_address_source' ),
915
  );
191
  $aAjaxResponse = $this->ajaxExec_AdminNotesInsert();
192
  break;
193
 
194
+ case 'import_from_site':
195
+ $aAjaxResponse = $this->ajaxExec_ImportFromSite();
196
+ break;
197
+
198
  default:
199
  break;
200
  }
202
  return parent::handleAuthAjax( $aAjaxResponse );
203
  }
204
 
205
+ /**
206
+ */
207
+ public function handleModRequest() {
208
+ $oReq = $this->loadRequest();
209
+ switch ( $oReq->request( 'exec' ) ) {
210
+
211
+ case 'export_file_download':
212
+ header( 'Set-Cookie: fileDownload=true; path=/' );
213
+ /** @var ICWP_WPSF_Processor_Plugin $oPro */
214
+ $oPro = $this->getProcessor();
215
+ $oPro->getSubProImportExport()
216
+ ->doExportDownload();
217
+ break;
218
+
219
+ case 'import_file_upload':
220
+ /** @var ICWP_WPSF_Processor_Plugin $oPro */
221
+ $oPro = $this->getProcessor();
222
+ try {
223
+ $oPro->getSubProImportExport()
224
+ ->importFromUploadFile();
225
+ $bSuccess = true;
226
+ $sMessage = _wpsf__( 'Options imported successfully' );
227
+ }
228
+ catch ( \Exception $oE ) {
229
+ $bSuccess = false;
230
+ $sMessage = $oE->getMessage();
231
+ }
232
+ $this->loadWpNotices()
233
+ ->addFlashUserMessage( $sMessage, !$bSuccess );
234
+ $this->loadWp()->doRedirect( $this->getUrlImportExport() );
235
+ break;
236
+
237
+ default:
238
+ break;
239
+ }
240
+ }
241
+
242
+ /**
243
+ * TODO: build better/dynamic direct linking to insights sub-pages
244
+ * see also hackprotect getUrlManualScan()
245
+ */
246
+ private function getUrlImportExport() {
247
+ return add_query_arg(
248
+ [ 'subnav' => 'importexport' ],
249
+ $this->getCon()->getModule( 'insights' )->getUrl_AdminPage()
250
+ );
251
+ }
252
+
253
  /**
254
  * @return array
255
  */
380
  );
381
  }
382
 
383
+ private function ajaxExec_ImportFromSite() {
384
+ $bSuccess = false;
385
+ $aFormParams = array_merge(
386
+ [
387
+ 'confirm' => 'N'
388
+ ],
389
+ $this->getAjaxFormParams()
390
+ );
391
+
392
+ // TODO: align with wizard AND combine with file upload errors
393
+ if ( $aFormParams[ 'confirm' ] !== 'Y' ) {
394
+ $sMessage = _wpsf__( 'Please check the box to confirm your intent to overwrite settings' );
395
+ }
396
+ else {
397
+ $sMasterSiteUrl = $aFormParams[ 'MasterSiteUrl' ];
398
+ $sSecretKey = $aFormParams[ 'MasterSiteSecretKey' ];
399
+ $bEnabledNetwork = $aFormParams[ 'ShieldNetwork' ] === 'Y';
400
+ $bDisableNetwork = $aFormParams[ 'ShieldNetwork' ] === 'N';
401
+ $bNetwork = $bEnabledNetwork ? true : ( $bDisableNetwork ? false : null );
402
+
403
+ /** @var ICWP_WPSF_Processor_Plugin $oP */
404
+ $oP = $this->getProcessor();
405
+ /** @var Shield\Databases\AdminNotes\Insert $oInserter */
406
+ $nCode = $oP->getSubProImportExport()
407
+ ->runImport( $sMasterSiteUrl, $sSecretKey, $bNetwork );
408
+ $bSuccess = $nCode == 0;
409
+ $sMessage = $bSuccess ? _wpsf__( 'Options imported successfully' ) : _wpsf__( 'Options failed to import' );
410
+ }
411
+ return array(
412
+ 'success' => $bSuccess,
413
+ 'message' => $sMessage
414
+ );
415
+ }
416
+
417
  /**
418
  * @return array
419
  */
691
  */
692
  public function hasImportExportMasterImportUrl() {
693
  $sMaster = $this->getImportExportMasterImportUrl();
694
+ return !empty( $sMaster );// && ( rtrim( $this->loadWp()->getHomeUrl(), '/' ) != $sMaster );
695
  }
696
 
697
  /**
772
  return $this;
773
  }
774
 
775
+ /**
776
+ * @param string $sUrl
777
+ * @return $this
778
+ */
779
+ public function removeUrlFromImportExportWhitelistUrls( $sUrl ) {
780
+ $sUrl = $this->loadDP()->validateSimpleHttpUrl( $sUrl );
781
+ if ( $sUrl !== false ) {
782
+ $aWhitelistUrls = $this->getImportExportWhitelist();
783
+ $sKey = array_search( $sUrl, $aWhitelistUrls );
784
+ if ( $sKey !== false ) {
785
+ unset( $aWhitelistUrls[ $sKey ] );
786
+ }
787
+ $this->setOpt( 'importexport_whitelist', $aWhitelistUrls )
788
+ ->savePluginOptions();
789
+ }
790
+ return $this;
791
+ }
792
+
793
  /**
794
  * @param string $sKey
795
  * @return bool
1010
  $aThis[ 'key_opts' ][ 'mod' ] = $this->getModDisabledInsight();
1011
  }
1012
  else {
1013
+ $sSource = $this->getOptionsVo()->getSelectOptionValueText( 'visitor_address_source' );
1014
  $aThis[ 'key_opts' ][ 'editing' ] = array(
1015
  'name' => _wpsf__( 'Visitor IP' ),
1016
  'enabled' => true,
1017
+ 'summary' => sprintf( _wpsf__( 'Visitor IP address source is: %s' ), $sSource ),
1018
  'weight' => 0,
1019
  'href' => $this->getUrl_DirectLinkToOption( 'visitor_address_source' ),
1020
  );
src/lib/src/Crons/StandardCron.php CHANGED
@@ -6,19 +6,16 @@ use FernleafSystems\Wordpress\Services\Services;
6
 
7
  trait StandardCron {
8
 
 
 
 
 
 
9
  protected function setupCron() {
10
  try {
11
- $sRecurrence = $this->getCronRecurrence();
12
- if ( strpos( $sRecurrence, 'per-day' ) > 0 ) {
13
- // It's a custom schedule so we need to set the next run time more specifically
14
- $nNext = Services::Request()->ts() + ( DAY_IN_SECONDS/$this->getCronFrequency() );
15
- }
16
- else {
17
- $nNext = null;
18
- }
19
  Services::WpCron()
20
- ->setRecurrence( $sRecurrence )
21
- ->setNextRun( $nNext )
22
  ->createCronJob( $this->getCronName(), array( $this, 'runCron' ) );
23
  }
24
  catch ( \Exception $oE ) {
@@ -47,6 +44,13 @@ trait StandardCron {
47
  */
48
  abstract protected function getCronName();
49
 
 
 
 
 
 
 
 
50
  /**
51
  * @return int
52
  */
@@ -56,14 +60,28 @@ trait StandardCron {
56
  }
57
 
58
  /**
59
- * @throws \Exception
60
  */
61
  public function deleteCron() {
62
  Services::WpCron()->deleteCronJob( $this->getCronName() );
63
  }
64
 
 
 
 
 
 
65
  /**
66
  */
67
  public function runCron() {
 
 
 
 
 
 
 
 
 
 
68
  }
69
  }
6
 
7
  trait StandardCron {
8
 
9
+ /**
10
+ * @var int
11
+ */
12
+ private $nCronFirstRun;
13
+
14
  protected function setupCron() {
15
  try {
 
 
 
 
 
 
 
 
16
  Services::WpCron()
17
+ ->setRecurrence( $this->getCronRecurrence() )
18
+ ->setNextRun( $this->getFirstRunTimestamp() )
19
  ->createCronJob( $this->getCronName(), array( $this, 'runCron' ) );
20
  }
21
  catch ( \Exception $oE ) {
44
  */
45
  abstract protected function getCronName();
46
 
47
+ /**
48
+ * @return int
49
+ */
50
+ public function getFirstRunTimestamp() {
51
+ return empty( $this->nCronFirstRun ) ? ( Services::Request()->ts() + MINUTE_IN_SECONDS ) : $this->nCronFirstRun;
52
+ }
53
+
54
  /**
55
  * @return int
56
  */
60
  }
61
 
62
  /**
 
63
  */
64
  public function deleteCron() {
65
  Services::WpCron()->deleteCronJob( $this->getCronName() );
66
  }
67
 
68
+ protected function resetCron() {
69
+ $this->deleteCron();
70
+ $this->setupCron();
71
+ }
72
+
73
  /**
74
  */
75
  public function runCron() {
76
+ // Override to run the actual Cron activity
77
+ }
78
+
79
+ /**
80
+ * @param int $nFirstRun
81
+ * @return $this
82
+ */
83
+ public function setFirstRun( $nFirstRun ) {
84
+ $this->nCronFirstRun = $nFirstRun;
85
+ return $this;
86
  }
87
  }
src/lib/src/Scans/Apc/ConvertResultsToVos.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\EntryVO;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans;
7
+
8
+ /**
9
+ * Class ConvertResultsToVos
10
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc
11
+ */
12
+ class ConvertResultsToVos extends Scans\Base\BaseConvertResultsToVos {
13
+
14
+ /**
15
+ * @param ResultItem $oIt
16
+ * @return EntryVO
17
+ */
18
+ public function convertItem( $oIt ) {
19
+ $oVo = parent::convertItem( $oIt );
20
+ $oVo->scan = $oIt::SCAN_RESULT_TYPE;
21
+ return $oVo;
22
+ }
23
+ }
src/lib/src/Scans/Apc/ConvertVosToResults.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+
7
+ /**
8
+ * Class ConvertVosToResults
9
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc
10
+ */
11
+ class ConvertVosToResults extends Shield\Scans\Base\BaseConvertVosToResults {
12
+
13
+ /**
14
+ * @param Shield\Databases\Scanner\EntryVO[] $oVos
15
+ * @return ResultsSet
16
+ */
17
+ public function convert( $oVos ) {
18
+ $oRes = new ResultsSet();
19
+ foreach ( $oVos as $oVo ) {
20
+ $oRes->addItem( $this->convertItem( $oVo ) );
21
+ }
22
+ return $oRes;
23
+ }
24
+
25
+ /**
26
+ * @param Shield\Databases\Scanner\EntryVO $oVo
27
+ * @return ResultItem
28
+ */
29
+ public function convertItem( $oVo ) {
30
+ return ( new ResultItem() )->applyFromArray( $oVo->meta );
31
+ }
32
+ }
src/lib/src/Scans/Apc/ResultItem.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
6
+
7
+ /**
8
+ * Class ResultItem
9
+ * @property string slug
10
+ * @property string context
11
+ * @property int last_updated_at
12
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc
13
+ */
14
+ class ResultItem extends Base\BaseResultItem {
15
+ const SCAN_RESULT_TYPE = 'apc';
16
+ }
src/lib/src/Scans/Apc/ResultsSet.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
6
+
7
+ /**
8
+ * Class ResultsSet
9
+ * @property ResultItem[] $aItems
10
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc
11
+ */
12
+ class ResultsSet extends Base\BaseResultsSet {
13
+
14
+ /**
15
+ * @return int
16
+ */
17
+ public function countUniqueSlugs() {
18
+ return count( $this->getAllResultsSetsForUniqueSlugs() );
19
+ }
20
+
21
+ /**
22
+ * @return int
23
+ */
24
+ public function countUniqueSlugsForPluginsContext() {
25
+ return count( $this->getAllResultsSetsForPluginsContext() );
26
+ }
27
+
28
+ /**
29
+ * @return int
30
+ */
31
+ public function countUniqueSlugsForThemesContext() {
32
+ return count( $this->getAllResultsSetsForThemesContext() );
33
+ }
34
+
35
+ /**
36
+ * Provides a collection of ResultsSets for Plugins.
37
+ * @return ResultsSet[]
38
+ */
39
+ public function getAllResultsSetsForPluginsContext() {
40
+ return $this->getAllResultsSetsForContext( 'plugins' );
41
+ }
42
+
43
+ /**
44
+ * Provides a collection of ResultsSets for Themes.
45
+ * @return ResultsSet[]
46
+ */
47
+ public function getAllResultsSetsForThemesContext() {
48
+ return $this->getAllResultsSetsForContext( 'themes' );
49
+ }
50
+
51
+ /**
52
+ * @param string $sContext
53
+ * @return ResultsSet[]
54
+ */
55
+ public function getAllResultsSetsForContext( $sContext ) {
56
+ $aCollection = array();
57
+ foreach ( $this->getAllResultsSetsForUniqueSlugs() as $sSlug => $oRS ) {
58
+ if ( $oRS->getItems()[ 0 ]->context == $sContext ) {
59
+ $aCollection[ $sSlug ] = $oRS;
60
+ }
61
+ }
62
+ return $aCollection;
63
+ }
64
+
65
+ /**
66
+ * @return ResultsSet[]
67
+ */
68
+ public function getAllResultsSetsForUniqueSlugs() {
69
+ $aCollection = array();
70
+ foreach ( $this->getUniqueSlugs() as $sSlug ) {
71
+ $oRS = $this->getResultsSetForSlug( $sSlug );
72
+ if ( $oRS->hasItems() ) {
73
+ $aCollection[ $sSlug ] = $oRS;
74
+ }
75
+ }
76
+ ksort( $aCollection, SORT_NATURAL );
77
+ return $aCollection;
78
+ }
79
+
80
+ /**
81
+ * @param string $sSlug
82
+ * @return ResultItem[]
83
+ */
84
+ public function getItemsForSlug( $sSlug ) {
85
+ return array_values( array_filter(
86
+ $this->getItems(),
87
+ function ( $oItem ) use ( $sSlug ) {
88
+ /** @var ResultItem $oItem */
89
+ return $oItem->slug == $sSlug;
90
+ }
91
+ ) );
92
+ }
93
+
94
+ /**
95
+ * @param string $sSlug
96
+ * @return ResultsSet
97
+ */
98
+ public function getResultsSetForSlug( $sSlug ) {
99
+ $oRes = new ResultsSet();
100
+ array_map(
101
+ function ( $oItem ) use ( $oRes ) {
102
+ /** @var ResultItem $oItem */
103
+ $oRes->addItem( $oItem );
104
+ },
105
+ $this->getItemsForSlug( $sSlug )
106
+ );
107
+ return $oRes;
108
+ }
109
+
110
+ /**
111
+ * @return string[]
112
+ */
113
+ public function getUniqueSlugs() {
114
+ return array_unique( array_map(
115
+ function ( $oItem ) {
116
+ /** @var ResultItem $oItem */
117
+ return $oItem->slug;
118
+ },
119
+ $this->getItems()
120
+ ) );
121
+ }
122
+ }
src/lib/src/Scans/Apc/Scanner.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Wpv\WpVulnDb\RetrieveForItem;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Wpv\WpVulnDb\WpVulnVO;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ /**
10
+ * Class Scanner
11
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Apc
12
+ */
13
+ class Scanner {
14
+
15
+ /**
16
+ * @var
17
+ */
18
+ private $nAbandonedLimit;
19
+
20
+ /**
21
+ * @return ResultsSet
22
+ */
23
+ public function run() {
24
+ $oResultSet = new ResultsSet();
25
+
26
+ foreach ( $this->getAllAbandonedPlugins() as $sFile => $nLastUpdatedAt ) {
27
+ $oItem = new ResultItem();
28
+ $oItem->slug = $sFile;
29
+ $oItem->context = 'plugins';
30
+ $oItem->last_updated_at = $nLastUpdatedAt;
31
+ $oResultSet->addItem( $oItem );
32
+ }
33
+
34
+ return $oResultSet;
35
+ }
36
+
37
+ /**
38
+ * @return array - keys are plugin base files, values are last_updated timestamp
39
+ */
40
+ private function getAllAbandonedPlugins() {
41
+ $aAbandoned = [];
42
+
43
+ $oWpPlugins = Services::WpPlugins();
44
+ foreach ( $oWpPlugins->getInstalledPluginFiles() as $sFile ) {
45
+ if ( $oWpPlugins->isWpOrg( $sFile ) ) {
46
+ $aAbandoned[ $sFile ] = $this->getAbandonedTime( $sFile );
47
+ }
48
+ }
49
+ return array_filter( $aAbandoned );
50
+ }
51
+
52
+ /**
53
+ * @return array - keys are plugin base files, values are last_updated timestamp
54
+ */
55
+ private function getAllAbandonedThemes() {
56
+ $aAbandoned = [];
57
+
58
+ $oWp = Services::WpThemes();
59
+ foreach ( $oWp->getThemes() as $oTheme ) {
60
+ if ( $oWp->isWpOrg( $oTheme ) ) {
61
+ $aAbandoned[ $oTheme->get_stylesheet() ] = $this->getAbandonedTime( $oTheme );
62
+ }
63
+ }
64
+ return array_filter( $aAbandoned );
65
+ }
66
+
67
+ /**
68
+ * @param string $sFile
69
+ * @return bool
70
+ */
71
+ private function getAbandonedTime( $sFile ) {
72
+ $nTime = 0;
73
+ $oWpPlugins = Services::WpPlugins();
74
+
75
+ $sSlug = $oWpPlugins->getSlug( $sFile );
76
+ if ( empty( $sSlug ) ) {
77
+ $sSlug = dirname( $sFile );
78
+ }
79
+
80
+ if ( !function_exists( 'plugins_api' ) ) {
81
+ require_once ABSPATH.'/wp-admin/includes/plugin-install.php';
82
+ }
83
+ $oApi = plugins_api( 'plugin_information', [
84
+ 'slug' => $sSlug,
85
+ 'fields' => array(
86
+ 'sections' => false,
87
+ ),
88
+ ] );
89
+ if ( isset( $oApi->last_updated ) ) {
90
+ $nLastUpdateAt = strtotime( $oApi->last_updated );
91
+ if ( Services::Request()->ts() - $nLastUpdateAt > $this->getAbandonedLimit() ) {
92
+ $nTime = $nLastUpdateAt;
93
+ var_dump( $nTime );
94
+ }
95
+ }
96
+
97
+ return $nTime;
98
+ }
99
+
100
+ /**
101
+ * @param string $sSlug
102
+ * @return WpVulnVO[]
103
+ */
104
+ private function getThemeVulnerabilities( $sSlug ) {
105
+ $aVulns = array();
106
+ $oWpThemes = Services::WpThemes();
107
+
108
+ try {
109
+ $aVos = ( new RetrieveForItem() )->setContext( 'themes' )
110
+ ->setSlug( $sSlug )
111
+ ->retrieve();
112
+ $oTheme = $oWpThemes->getTheme( $sSlug );
113
+ $aVulns = array_filter(
114
+ $aVos,
115
+ function ( $oVo ) use ( $oTheme ) {
116
+ /** @var WpVulnVO $oVo */
117
+ $sFixed = $oVo->fixed_in;
118
+ return ( empty ( $sFixed ) || version_compare( $oTheme->get( 'Version' ), $sFixed, '<' ) );
119
+ }
120
+ );
121
+ }
122
+ catch ( \Exception $oE ) {
123
+ }
124
+
125
+ return $aVulns;
126
+ }
127
+
128
+ /**
129
+ * @return int
130
+ */
131
+ private function getAbandonedLimit() {
132
+ return isset( $this->nAbandonedLimit ) ? $this->nAbandonedLimit : YEAR_IN_SECONDS*2;
133
+ }
134
+ }
src/lib/src/Scans/Wcf/Scanner.php CHANGED
@@ -54,9 +54,9 @@ class Scanner {
54
  $oRes->is_missing = !Services::WpFs()->exists( $oRes->path_full );
55
  $oRes->is_checksumfail = !$oRes->is_missing && $this->isChecksumFail( $oRes );
56
  $oRes->is_excluded = ( $bHasExclusions && preg_match( $sRegExclusions, $oRes->path_fragment ) )
57
- || ( $bHasMissingExclusions && preg_match( $sRegMissingExcl, $oRes->path_fragment ) );
58
 
59
- if ( $oRes->is_missing || $oRes->is_checksumfail ) {
60
  $oResultSet->addItem( $oRes );
61
  }
62
  }
54
  $oRes->is_missing = !Services::WpFs()->exists( $oRes->path_full );
55
  $oRes->is_checksumfail = !$oRes->is_missing && $this->isChecksumFail( $oRes );
56
  $oRes->is_excluded = ( $bHasExclusions && preg_match( $sRegExclusions, $oRes->path_fragment ) )
57
+ || ( $bHasMissingExclusions && $oRes->is_missing && preg_match( $sRegMissingExcl, $oRes->path_fragment ) );
58
 
59
+ if ( !$oRes->is_excluded && ( $oRes->is_missing || $oRes->is_checksumfail ) ) {
60
  $oResultSet->addItem( $oRes );
61
  }
62
  }
src/lib/src/Tables/Build/Ip.php CHANGED
@@ -12,7 +12,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Tables;
12
  class Ip extends BaseBuild {
13
 
14
  /**
15
- * Override this to apply table-specific query filters.
16
  * @return $this
17
  */
18
  protected function applyCustomQueryFilters() {
12
  class Ip extends BaseBuild {
13
 
14
  /**
 
15
  * @return $this
16
  */
17
  protected function applyCustomQueryFilters() {
src/lib/src/Tables/Build/ScanApc.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Tables\Build;
4
+
5
+ use Carbon\Carbon;
6
+ use FernleafSystems\Wordpress\Plugin\Shield;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ /**
10
+ * Class ScanApc
11
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Tables\Build
12
+ */
13
+ class ScanApc extends ScanBase {
14
+
15
+ /**
16
+ * @return array[]
17
+ */
18
+ protected function getEntriesFormatted() {
19
+ $aEntries = array();
20
+
21
+ $oCarbon = new Carbon();
22
+
23
+ $oWpPlugins = Services::WpPlugins();
24
+ $nTs = Services::Request()->ts();
25
+ foreach ( $this->getEntriesRaw() as $nKey => $oEntry ) {
26
+ /** @var Shield\Databases\Scanner\EntryVO $oEntry */
27
+ $oIt = ( new Shield\Scans\Apc\ConvertVosToResults() )->convertItem( $oEntry );
28
+ $oPlugin = $oWpPlugins->getPluginAsVo( $oIt->slug );
29
+ $aE = $oEntry->getRawDataAsArray();
30
+ $aE[ 'plugin' ] = sprintf( '%s (%s)', $oPlugin->Name, $oPlugin->Version );
31
+ $aE[ 'status' ] = sprintf( '%s: %s',
32
+ _wpsf__( 'Abandoned' ), $oCarbon->setTimestamp( $oIt->last_updated_at )->diffForHumans() );
33
+ $aE[ 'ignored' ] = ( $oEntry->ignored_at > 0 && $nTs > $oEntry->ignored_at ) ? 'Yes' : 'No';
34
+ $aE[ 'created_at' ] = $this->formatTimestampField( $oEntry->created_at );
35
+ $aEntries[ $nKey ] = $aE;
36
+ }
37
+
38
+ return $aEntries;
39
+ }
40
+
41
+ /**
42
+ * @return Shield\Tables\Render\ScanApc
43
+ */
44
+ protected function getTableRenderer() {
45
+ return new Shield\Tables\Render\ScanApc();
46
+ }
47
+ }
src/lib/src/Tables/Render/ScanApc.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Tables\Render;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans;
6
+
7
+ class ScanApc extends ScanBase {
8
+
9
+ /**
10
+ * @param array $aItem
11
+ * @return string
12
+ */
13
+ public function column_plugin( $aItem ) {
14
+ $aButtons = [
15
+ $this->getActionButton_Ignore( $aItem[ 'id' ] ),
16
+ ];
17
+ return $aItem[ 'plugin' ].$this->buildActions( $aButtons );
18
+ }
19
+
20
+ /**
21
+ * @return array
22
+ */
23
+ protected function get_bulk_actions() {
24
+ return array(
25
+ 'ignore' => 'Ignore'
26
+ );
27
+ }
28
+
29
+ /**
30
+ * @return array
31
+ */
32
+ public function get_columns() {
33
+ return [
34
+ 'cb' => '&nbsp;',
35
+ 'plugin' => 'Item',
36
+ 'status' => 'Status',
37
+ 'created_at' => 'Discovered',
38
+ ];
39
+ }
40
+ }
src/lib/src/Tables/Render/ScanBase.php CHANGED
@@ -41,10 +41,10 @@ class ScanBase extends Base {
41
  * @return array
42
  */
43
  public function get_columns() {
44
- return array(
45
  'path' => 'File',
46
  'status' => 'Status',
47
  'created_at' => 'Discovered',
48
- );
49
  }
50
  }
41
  * @return array
42
  */
43
  public function get_columns() {
44
+ return [
45
  'path' => 'File',
46
  'status' => 'Status',
47
  'created_at' => 'Discovered',
48
+ ];
49
  }
50
  }
src/lib/src/Tests/VerifyConfig.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Tests;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\OptsConsumer;
6
+
7
+ class VerifyConfig {
8
+
9
+ use OptsConsumer;
10
+
11
+ public function run() {
12
+ $oOpts = $this->getOpts();
13
+ foreach ( $oOpts->getOptionsKeys() as $sKey ) {
14
+ $sOptType = $oOpts->getOptionType( $sKey );
15
+ if ( empty( $sOptType ) ) {
16
+ var_dump( $sKey.': no type' );
17
+ continue;
18
+ }
19
+
20
+ $mDefault = $oOpts->getOptDefault( $sKey );
21
+ if ( is_null( $mDefault ) ) {
22
+ var_dump( sprintf( '%s: opt has no default.', $sKey ) );
23
+ continue;
24
+ }
25
+
26
+ $mVal = $oOpts->getOpt( $sKey );
27
+ $sValType = gettype( $mVal );
28
+
29
+ $bBroken = false;
30
+ switch ( $sOptType ) {
31
+
32
+ case 'integer':
33
+ if ( $sValType != 'integer' ) {
34
+ $bBroken = true;
35
+ }
36
+ break;
37
+
38
+ case 'text':
39
+ if ( $sValType != 'string' ) {
40
+ $bBroken = true;
41
+ }
42
+ break;
43
+
44
+ default:
45
+ break;
46
+ }
47
+
48
+ if ( $bBroken ) {
49
+ var_dump( sprintf( '%s: opt type is %s, value is %s at "%s". Default is: %s',
50
+ $sKey, $sOptType, $sValType, var_export( $mVal, true ), $oOpts->getOptDefault( $sKey ) ) );
51
+
52
+ // $oOpts->resetOptToDefault( $sKey );
53
+ }
54
+ }
55
+ }
56
+ }
src/lib/vendor/composer/autoload_classmap.php CHANGED
@@ -76,6 +76,11 @@ return array(
76
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => $baseDir . '/src/Modules/ModConsumer.php',
77
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\OptsConsumer' => $baseDir . '/src/Modules/OptsConsumer.php',
78
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\PluginControllerConsumer' => $baseDir . '/src/Modules/PluginControllerConsumer.php',
 
 
 
 
 
79
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertResultsToVos' => $baseDir . '/src/Scans/Base/BaseConvertResultsToVos.php',
80
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertVosToResults' => $baseDir . '/src/Scans/Base/BaseConvertVosToResults.php',
81
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseMergeItems' => $baseDir . '/src/Scans/Base/BaseMergeItems.php',
@@ -128,6 +133,7 @@ return array(
128
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AuditTrail' => $baseDir . '/src/Tables/Build/AuditTrail.php',
129
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\BaseBuild' => $baseDir . '/src/Tables/Build/BaseBuild.php',
130
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\Ip' => $baseDir . '/src/Tables/Build/Ip.php',
 
131
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanBase' => $baseDir . '/src/Tables/Build/ScanBase.php',
132
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanPtg' => $baseDir . '/src/Tables/Build/ScanPtg.php',
133
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanUfc' => $baseDir . '/src/Tables/Build/ScanUfc.php',
@@ -141,6 +147,7 @@ return array(
141
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBase' => $baseDir . '/src/Tables/Render/IpBase.php',
142
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBlack' => $baseDir . '/src/Tables/Render/IpBlack.php',
143
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpWhite' => $baseDir . '/src/Tables/Render/IpWhite.php',
 
144
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanBase' => $baseDir . '/src/Tables/Render/ScanBase.php',
145
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanPtg' => $baseDir . '/src/Tables/Render/ScanPtg.php',
146
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanUfc' => $baseDir . '/src/Tables/Render/ScanUfc.php',
@@ -148,6 +155,7 @@ return array(
148
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanWpv' => $baseDir . '/src/Tables/Render/ScanWpv.php',
149
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Sessions' => $baseDir . '/src/Tables/Render/Sessions.php',
150
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Traffic' => $baseDir . '/src/Tables/Render/Traffic.php',
 
151
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Users\\ShieldUserMeta' => $baseDir . '/src/Users/ShieldUserMeta.php',
152
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Utilities\\VisitorIpDetection' => $baseDir . '/src/Utilities/VisitorIpDetection.php',
153
  'FernleafSystems\\Wordpress\\Services\\Core\\AdminNotices' => $vendorDir . '/fernleafsystems/wordpress-services/src/Core/AdminNotices.php',
@@ -228,7 +236,6 @@ return array(
228
  'ICWP_UserMeta' => $baseDir . '/../common/icwp-usermeta.php',
229
  'ICWP_WPSF_AuditTrail_Auditor_Base' => $baseDir . '/../processors/audit_trail_auditor_base.php',
230
  'ICWP_WPSF_BaseDbProcessor' => $baseDir . '/../processors/basedb.php',
231
- 'ICWP_WPSF_BaseEntryVO' => $baseDir . '/../query/VOs/ICWP_WPSF_BaseEntryVO.php',
232
  'ICWP_WPSF_DataProcessor' => $baseDir . '/../common/icwp-data.php',
233
  'ICWP_WPSF_Edd' => $baseDir . '/../common/icwp-edd.php',
234
  'ICWP_WPSF_FeatureHandler_AdminAccessRestriction' => $baseDir . '/../features/admin_access_restriction.php',
@@ -255,12 +262,12 @@ return array(
255
  'ICWP_WPSF_GoogleAuthenticator' => $baseDir . '/../common/icwp-googleauthenticator.php',
256
  'ICWP_WPSF_GoogleRecaptcha' => $baseDir . '/../common/icwp-googlearecaptcha.php',
257
  'ICWP_WPSF_Ip' => $baseDir . '/../common/icwp-ip.php',
258
- 'ICWP_WPSF_IpsEntryVO' => $baseDir . '/../query/VOs/ICWP_WPSF_IpsEntryVO.php',
259
  'ICWP_WPSF_OptionsVO' => $baseDir . '/../common/icwp-optionsvo.php',
260
  'ICWP_WPSF_Plugin_Controller' => $baseDir . '/../../icwp-plugin-controller.php',
261
  'ICWP_WPSF_Processor_AdminAccessRestriction' => $baseDir . '/../processors/admin_access_restriction.php',
262
  'ICWP_WPSF_Processor_AdminAccess_Whitelabel' => $baseDir . '/../processors/adminaccess_whitelabel.php',
263
  'ICWP_WPSF_Processor_AuditTrail' => $baseDir . '/../processors/audit_trail.php',
 
264
  'ICWP_WPSF_Processor_AuditTrail_Emails' => $baseDir . '/../processors/audit_trail_emails.php',
265
  'ICWP_WPSF_Processor_AuditTrail_Plugins' => $baseDir . '/../processors/audit_trail_plugins.php',
266
  'ICWP_WPSF_Processor_AuditTrail_Posts' => $baseDir . '/../processors/audit_trail_posts.php',
@@ -280,6 +287,7 @@ return array(
280
  'ICWP_WPSF_Processor_Email' => $baseDir . '/../processors/email.php',
281
  'ICWP_WPSF_Processor_Firewall' => $baseDir . '/../processors/firewall.php',
282
  'ICWP_WPSF_Processor_HackProtect' => $baseDir . '/../processors/hack_protect.php',
 
283
  'ICWP_WPSF_Processor_HackProtect_Integrity' => $baseDir . '/../processors/hackprotect_integrity.php',
284
  'ICWP_WPSF_Processor_HackProtect_Ptg' => $baseDir . '/../processors/hackprotect_scan_ptg.php',
285
  'ICWP_WPSF_Processor_HackProtect_ScanAssetsBase' => $baseDir . '/../processors/hackprotect_scan_assets_base.php',
@@ -308,6 +316,7 @@ return array(
308
  'ICWP_WPSF_Processor_Plugin' => $baseDir . '/../processors/plugin.php',
309
  'ICWP_WPSF_Processor_Plugin_Badge' => $baseDir . '/../processors/plugin_badge.php',
310
  'ICWP_WPSF_Processor_Plugin_BadgeWidget' => $baseDir . '/../processors/plugin_badgewidget.php',
 
311
  'ICWP_WPSF_Processor_Plugin_ImportExport' => $baseDir . '/../processors/plugin_importexport.php',
312
  'ICWP_WPSF_Processor_Plugin_Notes' => $baseDir . '/../processors/plugin_notes.php',
313
  'ICWP_WPSF_Processor_Plugin_Tracking' => $baseDir . '/../processors/plugin_tracking.php',
@@ -321,27 +330,9 @@ return array(
321
  'ICWP_WPSF_Processor_UserManagement' => $baseDir . '/../processors/user_management.php',
322
  'ICWP_WPSF_Processor_UserManagement_Passwords' => $baseDir . '/../processors/usermanagement_passwords.php',
323
  'ICWP_WPSF_Processor_UserManagement_Sessions' => $baseDir . '/../processors/usermanagement_sessions.php',
324
- 'ICWP_WPSF_Query_AuditTrail_Delete' => $baseDir . '/../query/audittrail/delete.php',
325
- 'ICWP_WPSF_Query_AuditTrail_Insert' => $baseDir . '/../query/audittrail/insert.php',
326
- 'ICWP_WPSF_Query_AuditTrail_Select' => $baseDir . '/../query/audittrail/select.php',
327
- 'ICWP_WPSF_Query_Base' => $baseDir . '/../query/base/base.php',
328
- 'ICWP_WPSF_Query_BaseDelete' => $baseDir . '/../query/base/delete.php',
329
- 'ICWP_WPSF_Query_BaseInsert' => $baseDir . '/../query/base/insert.php',
330
- 'ICWP_WPSF_Query_BaseQuery' => $baseDir . '/../query/base/query.php',
331
- 'ICWP_WPSF_Query_BaseSelect' => $baseDir . '/../query/base/select.php',
332
- 'ICWP_WPSF_Query_BaseUpdate' => $baseDir . '/../query/base/update.php',
333
- 'ICWP_WPSF_Query_Ips_Select' => $baseDir . '/../query/ips/select.php',
334
- 'ICWP_WPSF_Query_Sessions_Delete' => $baseDir . '/../query/sessions/delete.php',
335
- 'ICWP_WPSF_Query_Sessions_Insert' => $baseDir . '/../query/sessions/insert.php',
336
- 'ICWP_WPSF_Query_Sessions_Select' => $baseDir . '/../query/sessions/select.php',
337
- 'ICWP_WPSF_Query_Sessions_Update' => $baseDir . '/../query/sessions/update.php',
338
  'ICWP_WPSF_Query_Statistics_Base' => $baseDir . '/../query/base/statistics_base.php',
339
  'ICWP_WPSF_Query_Statistics_Consolidation' => $baseDir . '/../query/statistics/consolidation.php',
340
  'ICWP_WPSF_Query_Statistics_Reporting' => $baseDir . '/../query/statistics/reporting.php',
341
- 'ICWP_WPSF_Query_TrafficEntry_Common' => $baseDir . '/../query/traffic/common.php',
342
- 'ICWP_WPSF_Query_TrafficEntry_Delete' => $baseDir . '/../query/traffic/delete.php',
343
- 'ICWP_WPSF_Query_TrafficEntry_Insert' => $baseDir . '/../query/traffic/insert.php',
344
- 'ICWP_WPSF_Query_TrafficEntry_Select' => $baseDir . '/../query/traffic/select.php',
345
  'ICWP_WPSF_Render' => $baseDir . '/../common/icwp-render.php',
346
  'ICWP_WPSF_Request' => $baseDir . '/../common/icwp-request.php',
347
  'ICWP_WPSF_ServiceProviders' => $baseDir . '/../common/icwp-serviceproviders.php',
76
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => $baseDir . '/src/Modules/ModConsumer.php',
77
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\OptsConsumer' => $baseDir . '/src/Modules/OptsConsumer.php',
78
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\PluginControllerConsumer' => $baseDir . '/src/Modules/PluginControllerConsumer.php',
79
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ConvertResultsToVos' => $baseDir . '/src/Scans/Apc/ConvertResultsToVos.php',
80
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ConvertVosToResults' => $baseDir . '/src/Scans/Apc/ConvertVosToResults.php',
81
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ResultItem' => $baseDir . '/src/Scans/Apc/ResultItem.php',
82
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ResultsSet' => $baseDir . '/src/Scans/Apc/ResultsSet.php',
83
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\Scanner' => $baseDir . '/src/Scans/Apc/Scanner.php',
84
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertResultsToVos' => $baseDir . '/src/Scans/Base/BaseConvertResultsToVos.php',
85
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertVosToResults' => $baseDir . '/src/Scans/Base/BaseConvertVosToResults.php',
86
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseMergeItems' => $baseDir . '/src/Scans/Base/BaseMergeItems.php',
133
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AuditTrail' => $baseDir . '/src/Tables/Build/AuditTrail.php',
134
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\BaseBuild' => $baseDir . '/src/Tables/Build/BaseBuild.php',
135
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\Ip' => $baseDir . '/src/Tables/Build/Ip.php',
136
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanApc' => $baseDir . '/src/Tables/Build/ScanApc.php',
137
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanBase' => $baseDir . '/src/Tables/Build/ScanBase.php',
138
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanPtg' => $baseDir . '/src/Tables/Build/ScanPtg.php',
139
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanUfc' => $baseDir . '/src/Tables/Build/ScanUfc.php',
147
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBase' => $baseDir . '/src/Tables/Render/IpBase.php',
148
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBlack' => $baseDir . '/src/Tables/Render/IpBlack.php',
149
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpWhite' => $baseDir . '/src/Tables/Render/IpWhite.php',
150
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanApc' => $baseDir . '/src/Tables/Render/ScanApc.php',
151
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanBase' => $baseDir . '/src/Tables/Render/ScanBase.php',
152
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanPtg' => $baseDir . '/src/Tables/Render/ScanPtg.php',
153
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanUfc' => $baseDir . '/src/Tables/Render/ScanUfc.php',
155
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanWpv' => $baseDir . '/src/Tables/Render/ScanWpv.php',
156
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Sessions' => $baseDir . '/src/Tables/Render/Sessions.php',
157
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Traffic' => $baseDir . '/src/Tables/Render/Traffic.php',
158
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tests\\VerifyConfig' => $baseDir . '/src/Tests/VerifyConfig.php',
159
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Users\\ShieldUserMeta' => $baseDir . '/src/Users/ShieldUserMeta.php',
160
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Utilities\\VisitorIpDetection' => $baseDir . '/src/Utilities/VisitorIpDetection.php',
161
  'FernleafSystems\\Wordpress\\Services\\Core\\AdminNotices' => $vendorDir . '/fernleafsystems/wordpress-services/src/Core/AdminNotices.php',
236
  'ICWP_UserMeta' => $baseDir . '/../common/icwp-usermeta.php',
237
  'ICWP_WPSF_AuditTrail_Auditor_Base' => $baseDir . '/../processors/audit_trail_auditor_base.php',
238
  'ICWP_WPSF_BaseDbProcessor' => $baseDir . '/../processors/basedb.php',
 
239
  'ICWP_WPSF_DataProcessor' => $baseDir . '/../common/icwp-data.php',
240
  'ICWP_WPSF_Edd' => $baseDir . '/../common/icwp-edd.php',
241
  'ICWP_WPSF_FeatureHandler_AdminAccessRestriction' => $baseDir . '/../features/admin_access_restriction.php',
262
  'ICWP_WPSF_GoogleAuthenticator' => $baseDir . '/../common/icwp-googleauthenticator.php',
263
  'ICWP_WPSF_GoogleRecaptcha' => $baseDir . '/../common/icwp-googlearecaptcha.php',
264
  'ICWP_WPSF_Ip' => $baseDir . '/../common/icwp-ip.php',
 
265
  'ICWP_WPSF_OptionsVO' => $baseDir . '/../common/icwp-optionsvo.php',
266
  'ICWP_WPSF_Plugin_Controller' => $baseDir . '/../../icwp-plugin-controller.php',
267
  'ICWP_WPSF_Processor_AdminAccessRestriction' => $baseDir . '/../processors/admin_access_restriction.php',
268
  'ICWP_WPSF_Processor_AdminAccess_Whitelabel' => $baseDir . '/../processors/adminaccess_whitelabel.php',
269
  'ICWP_WPSF_Processor_AuditTrail' => $baseDir . '/../processors/audit_trail.php',
270
+ 'ICWP_WPSF_Processor_AuditTrail_Auditor' => $baseDir . '/../processors/audit_trail_auditor.php',
271
  'ICWP_WPSF_Processor_AuditTrail_Emails' => $baseDir . '/../processors/audit_trail_emails.php',
272
  'ICWP_WPSF_Processor_AuditTrail_Plugins' => $baseDir . '/../processors/audit_trail_plugins.php',
273
  'ICWP_WPSF_Processor_AuditTrail_Posts' => $baseDir . '/../processors/audit_trail_posts.php',
287
  'ICWP_WPSF_Processor_Email' => $baseDir . '/../processors/email.php',
288
  'ICWP_WPSF_Processor_Firewall' => $baseDir . '/../processors/firewall.php',
289
  'ICWP_WPSF_Processor_HackProtect' => $baseDir . '/../processors/hack_protect.php',
290
+ 'ICWP_WPSF_Processor_HackProtect_Apc' => $baseDir . '/../processors/hackprotect_scan_apc.php',
291
  'ICWP_WPSF_Processor_HackProtect_Integrity' => $baseDir . '/../processors/hackprotect_integrity.php',
292
  'ICWP_WPSF_Processor_HackProtect_Ptg' => $baseDir . '/../processors/hackprotect_scan_ptg.php',
293
  'ICWP_WPSF_Processor_HackProtect_ScanAssetsBase' => $baseDir . '/../processors/hackprotect_scan_assets_base.php',
316
  'ICWP_WPSF_Processor_Plugin' => $baseDir . '/../processors/plugin.php',
317
  'ICWP_WPSF_Processor_Plugin_Badge' => $baseDir . '/../processors/plugin_badge.php',
318
  'ICWP_WPSF_Processor_Plugin_BadgeWidget' => $baseDir . '/../processors/plugin_badgewidget.php',
319
+ 'ICWP_WPSF_Processor_Plugin_CronDaily' => $baseDir . '/../processors/plugin_crondaily.php',
320
  'ICWP_WPSF_Processor_Plugin_ImportExport' => $baseDir . '/../processors/plugin_importexport.php',
321
  'ICWP_WPSF_Processor_Plugin_Notes' => $baseDir . '/../processors/plugin_notes.php',
322
  'ICWP_WPSF_Processor_Plugin_Tracking' => $baseDir . '/../processors/plugin_tracking.php',
330
  'ICWP_WPSF_Processor_UserManagement' => $baseDir . '/../processors/user_management.php',
331
  'ICWP_WPSF_Processor_UserManagement_Passwords' => $baseDir . '/../processors/usermanagement_passwords.php',
332
  'ICWP_WPSF_Processor_UserManagement_Sessions' => $baseDir . '/../processors/usermanagement_sessions.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  'ICWP_WPSF_Query_Statistics_Base' => $baseDir . '/../query/base/statistics_base.php',
334
  'ICWP_WPSF_Query_Statistics_Consolidation' => $baseDir . '/../query/statistics/consolidation.php',
335
  'ICWP_WPSF_Query_Statistics_Reporting' => $baseDir . '/../query/statistics/reporting.php',
 
 
 
 
336
  'ICWP_WPSF_Render' => $baseDir . '/../common/icwp-render.php',
337
  'ICWP_WPSF_Request' => $baseDir . '/../common/icwp-request.php',
338
  'ICWP_WPSF_ServiceProviders' => $baseDir . '/../common/icwp-serviceproviders.php',
src/lib/vendor/composer/autoload_static.php CHANGED
@@ -224,6 +224,11 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
224
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => __DIR__ . '/../..' . '/src/Modules/ModConsumer.php',
225
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\OptsConsumer' => __DIR__ . '/../..' . '/src/Modules/OptsConsumer.php',
226
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\PluginControllerConsumer' => __DIR__ . '/../..' . '/src/Modules/PluginControllerConsumer.php',
 
 
 
 
 
227
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertResultsToVos' => __DIR__ . '/../..' . '/src/Scans/Base/BaseConvertResultsToVos.php',
228
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertVosToResults' => __DIR__ . '/../..' . '/src/Scans/Base/BaseConvertVosToResults.php',
229
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseMergeItems' => __DIR__ . '/../..' . '/src/Scans/Base/BaseMergeItems.php',
@@ -276,6 +281,7 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
276
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AuditTrail' => __DIR__ . '/../..' . '/src/Tables/Build/AuditTrail.php',
277
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\BaseBuild' => __DIR__ . '/../..' . '/src/Tables/Build/BaseBuild.php',
278
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\Ip' => __DIR__ . '/../..' . '/src/Tables/Build/Ip.php',
 
279
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanBase' => __DIR__ . '/../..' . '/src/Tables/Build/ScanBase.php',
280
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanPtg' => __DIR__ . '/../..' . '/src/Tables/Build/ScanPtg.php',
281
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanUfc' => __DIR__ . '/../..' . '/src/Tables/Build/ScanUfc.php',
@@ -289,6 +295,7 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
289
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBase' => __DIR__ . '/../..' . '/src/Tables/Render/IpBase.php',
290
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBlack' => __DIR__ . '/../..' . '/src/Tables/Render/IpBlack.php',
291
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpWhite' => __DIR__ . '/../..' . '/src/Tables/Render/IpWhite.php',
 
292
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanBase' => __DIR__ . '/../..' . '/src/Tables/Render/ScanBase.php',
293
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanPtg' => __DIR__ . '/../..' . '/src/Tables/Render/ScanPtg.php',
294
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanUfc' => __DIR__ . '/../..' . '/src/Tables/Render/ScanUfc.php',
@@ -296,6 +303,7 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
296
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanWpv' => __DIR__ . '/../..' . '/src/Tables/Render/ScanWpv.php',
297
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Sessions' => __DIR__ . '/../..' . '/src/Tables/Render/Sessions.php',
298
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Traffic' => __DIR__ . '/../..' . '/src/Tables/Render/Traffic.php',
 
299
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Users\\ShieldUserMeta' => __DIR__ . '/../..' . '/src/Users/ShieldUserMeta.php',
300
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Utilities\\VisitorIpDetection' => __DIR__ . '/../..' . '/src/Utilities/VisitorIpDetection.php',
301
  'FernleafSystems\\Wordpress\\Services\\Core\\AdminNotices' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Core/AdminNotices.php',
@@ -376,7 +384,6 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
376
  'ICWP_UserMeta' => __DIR__ . '/../..' . '/../common/icwp-usermeta.php',
377
  'ICWP_WPSF_AuditTrail_Auditor_Base' => __DIR__ . '/../..' . '/../processors/audit_trail_auditor_base.php',
378
  'ICWP_WPSF_BaseDbProcessor' => __DIR__ . '/../..' . '/../processors/basedb.php',
379
- 'ICWP_WPSF_BaseEntryVO' => __DIR__ . '/../..' . '/../query/VOs/ICWP_WPSF_BaseEntryVO.php',
380
  'ICWP_WPSF_DataProcessor' => __DIR__ . '/../..' . '/../common/icwp-data.php',
381
  'ICWP_WPSF_Edd' => __DIR__ . '/../..' . '/../common/icwp-edd.php',
382
  'ICWP_WPSF_FeatureHandler_AdminAccessRestriction' => __DIR__ . '/../..' . '/../features/admin_access_restriction.php',
@@ -403,12 +410,12 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
403
  'ICWP_WPSF_GoogleAuthenticator' => __DIR__ . '/../..' . '/../common/icwp-googleauthenticator.php',
404
  'ICWP_WPSF_GoogleRecaptcha' => __DIR__ . '/../..' . '/../common/icwp-googlearecaptcha.php',
405
  'ICWP_WPSF_Ip' => __DIR__ . '/../..' . '/../common/icwp-ip.php',
406
- 'ICWP_WPSF_IpsEntryVO' => __DIR__ . '/../..' . '/../query/VOs/ICWP_WPSF_IpsEntryVO.php',
407
  'ICWP_WPSF_OptionsVO' => __DIR__ . '/../..' . '/../common/icwp-optionsvo.php',
408
  'ICWP_WPSF_Plugin_Controller' => __DIR__ . '/../..' . '/../../icwp-plugin-controller.php',
409
  'ICWP_WPSF_Processor_AdminAccessRestriction' => __DIR__ . '/../..' . '/../processors/admin_access_restriction.php',
410
  'ICWP_WPSF_Processor_AdminAccess_Whitelabel' => __DIR__ . '/../..' . '/../processors/adminaccess_whitelabel.php',
411
  'ICWP_WPSF_Processor_AuditTrail' => __DIR__ . '/../..' . '/../processors/audit_trail.php',
 
412
  'ICWP_WPSF_Processor_AuditTrail_Emails' => __DIR__ . '/../..' . '/../processors/audit_trail_emails.php',
413
  'ICWP_WPSF_Processor_AuditTrail_Plugins' => __DIR__ . '/../..' . '/../processors/audit_trail_plugins.php',
414
  'ICWP_WPSF_Processor_AuditTrail_Posts' => __DIR__ . '/../..' . '/../processors/audit_trail_posts.php',
@@ -428,6 +435,7 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
428
  'ICWP_WPSF_Processor_Email' => __DIR__ . '/../..' . '/../processors/email.php',
429
  'ICWP_WPSF_Processor_Firewall' => __DIR__ . '/../..' . '/../processors/firewall.php',
430
  'ICWP_WPSF_Processor_HackProtect' => __DIR__ . '/../..' . '/../processors/hack_protect.php',
 
431
  'ICWP_WPSF_Processor_HackProtect_Integrity' => __DIR__ . '/../..' . '/../processors/hackprotect_integrity.php',
432
  'ICWP_WPSF_Processor_HackProtect_Ptg' => __DIR__ . '/../..' . '/../processors/hackprotect_scan_ptg.php',
433
  'ICWP_WPSF_Processor_HackProtect_ScanAssetsBase' => __DIR__ . '/../..' . '/../processors/hackprotect_scan_assets_base.php',
@@ -456,6 +464,7 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
456
  'ICWP_WPSF_Processor_Plugin' => __DIR__ . '/../..' . '/../processors/plugin.php',
457
  'ICWP_WPSF_Processor_Plugin_Badge' => __DIR__ . '/../..' . '/../processors/plugin_badge.php',
458
  'ICWP_WPSF_Processor_Plugin_BadgeWidget' => __DIR__ . '/../..' . '/../processors/plugin_badgewidget.php',
 
459
  'ICWP_WPSF_Processor_Plugin_ImportExport' => __DIR__ . '/../..' . '/../processors/plugin_importexport.php',
460
  'ICWP_WPSF_Processor_Plugin_Notes' => __DIR__ . '/../..' . '/../processors/plugin_notes.php',
461
  'ICWP_WPSF_Processor_Plugin_Tracking' => __DIR__ . '/../..' . '/../processors/plugin_tracking.php',
@@ -469,27 +478,9 @@ class ComposerStaticInit18a31866e67f0a0bfffdc031786ecae1
469
  'ICWP_WPSF_Processor_UserManagement' => __DIR__ . '/../..' . '/../processors/user_management.php',
470
  'ICWP_WPSF_Processor_UserManagement_Passwords' => __DIR__ . '/../..' . '/../processors/usermanagement_passwords.php',
471
  'ICWP_WPSF_Processor_UserManagement_Sessions' => __DIR__ . '/../..' . '/../processors/usermanagement_sessions.php',
472
- 'ICWP_WPSF_Query_AuditTrail_Delete' => __DIR__ . '/../..' . '/../query/audittrail/delete.php',
473
- 'ICWP_WPSF_Query_AuditTrail_Insert' => __DIR__ . '/../..' . '/../query/audittrail/insert.php',
474
- 'ICWP_WPSF_Query_AuditTrail_Select' => __DIR__ . '/../..' . '/../query/audittrail/select.php',
475
- 'ICWP_WPSF_Query_Base' => __DIR__ . '/../..' . '/../query/base/base.php',
476
- 'ICWP_WPSF_Query_BaseDelete' => __DIR__ . '/../..' . '/../query/base/delete.php',
477
- 'ICWP_WPSF_Query_BaseInsert' => __DIR__ . '/../..' . '/../query/base/insert.php',
478
- 'ICWP_WPSF_Query_BaseQuery' => __DIR__ . '/../..' . '/../query/base/query.php',
479
- 'ICWP_WPSF_Query_BaseSelect' => __DIR__ . '/../..' . '/../query/base/select.php',
480
- 'ICWP_WPSF_Query_BaseUpdate' => __DIR__ . '/../..' . '/../query/base/update.php',
481
- 'ICWP_WPSF_Query_Ips_Select' => __DIR__ . '/../..' . '/../query/ips/select.php',
482
- 'ICWP_WPSF_Query_Sessions_Delete' => __DIR__ . '/../..' . '/../query/sessions/delete.php',
483
- 'ICWP_WPSF_Query_Sessions_Insert' => __DIR__ . '/../..' . '/../query/sessions/insert.php',
484
- 'ICWP_WPSF_Query_Sessions_Select' => __DIR__ . '/../..' . '/../query/sessions/select.php',
485
- 'ICWP_WPSF_Query_Sessions_Update' => __DIR__ . '/../..' . '/../query/sessions/update.php',
486
  'ICWP_WPSF_Query_Statistics_Base' => __DIR__ . '/../..' . '/../query/base/statistics_base.php',
487
  'ICWP_WPSF_Query_Statistics_Consolidation' => __DIR__ . '/../..' . '/../query/statistics/consolidation.php',
488
  'ICWP_WPSF_Query_Statistics_Reporting' => __DIR__ . '/../..' . '/../query/statistics/reporting.php',
489
- 'ICWP_WPSF_Query_TrafficEntry_Common' => __DIR__ . '/../..' . '/../query/traffic/common.php',
490
- 'ICWP_WPSF_Query_TrafficEntry_Delete' => __DIR__ . '/../..' . '/../query/traffic/delete.php',
491
- 'ICWP_WPSF_Query_TrafficEntry_Insert' => __DIR__ . '/../..' . '/../query/traffic/insert.php',
492
- 'ICWP_WPSF_Query_TrafficEntry_Select' => __DIR__ . '/../..' . '/../query/traffic/select.php',
493
  'ICWP_WPSF_Render' => __DIR__ . '/../..' . '/../common/icwp-render.php',
494
  'ICWP_WPSF_Request' => __DIR__ . '/../..' . '/../common/icwp-request.php',
495
  'ICWP_WPSF_ServiceProviders' => __DIR__ . '/../..' . '/../common/icwp-serviceproviders.php',
224
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => __DIR__ . '/../..' . '/src/Modules/ModConsumer.php',
225
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\OptsConsumer' => __DIR__ . '/../..' . '/src/Modules/OptsConsumer.php',
226
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\PluginControllerConsumer' => __DIR__ . '/../..' . '/src/Modules/PluginControllerConsumer.php',
227
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ConvertResultsToVos' => __DIR__ . '/../..' . '/src/Scans/Apc/ConvertResultsToVos.php',
228
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ConvertVosToResults' => __DIR__ . '/../..' . '/src/Scans/Apc/ConvertVosToResults.php',
229
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ResultItem' => __DIR__ . '/../..' . '/src/Scans/Apc/ResultItem.php',
230
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\ResultsSet' => __DIR__ . '/../..' . '/src/Scans/Apc/ResultsSet.php',
231
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Apc\\Scanner' => __DIR__ . '/../..' . '/src/Scans/Apc/Scanner.php',
232
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertResultsToVos' => __DIR__ . '/../..' . '/src/Scans/Base/BaseConvertResultsToVos.php',
233
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseConvertVosToResults' => __DIR__ . '/../..' . '/src/Scans/Base/BaseConvertVosToResults.php',
234
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Base\\BaseMergeItems' => __DIR__ . '/../..' . '/src/Scans/Base/BaseMergeItems.php',
281
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AuditTrail' => __DIR__ . '/../..' . '/src/Tables/Build/AuditTrail.php',
282
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\BaseBuild' => __DIR__ . '/../..' . '/src/Tables/Build/BaseBuild.php',
283
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\Ip' => __DIR__ . '/../..' . '/src/Tables/Build/Ip.php',
284
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanApc' => __DIR__ . '/../..' . '/src/Tables/Build/ScanApc.php',
285
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanBase' => __DIR__ . '/../..' . '/src/Tables/Build/ScanBase.php',
286
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanPtg' => __DIR__ . '/../..' . '/src/Tables/Build/ScanPtg.php',
287
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\ScanUfc' => __DIR__ . '/../..' . '/src/Tables/Build/ScanUfc.php',
295
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBase' => __DIR__ . '/../..' . '/src/Tables/Render/IpBase.php',
296
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpBlack' => __DIR__ . '/../..' . '/src/Tables/Render/IpBlack.php',
297
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\IpWhite' => __DIR__ . '/../..' . '/src/Tables/Render/IpWhite.php',
298
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanApc' => __DIR__ . '/../..' . '/src/Tables/Render/ScanApc.php',
299
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanBase' => __DIR__ . '/../..' . '/src/Tables/Render/ScanBase.php',
300
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanPtg' => __DIR__ . '/../..' . '/src/Tables/Render/ScanPtg.php',
301
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanUfc' => __DIR__ . '/../..' . '/src/Tables/Render/ScanUfc.php',
303
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\ScanWpv' => __DIR__ . '/../..' . '/src/Tables/Render/ScanWpv.php',
304
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Sessions' => __DIR__ . '/../..' . '/src/Tables/Render/Sessions.php',
305
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Render\\Traffic' => __DIR__ . '/../..' . '/src/Tables/Render/Traffic.php',
306
+ 'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tests\\VerifyConfig' => __DIR__ . '/../..' . '/src/Tests/VerifyConfig.php',
307
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Users\\ShieldUserMeta' => __DIR__ . '/../..' . '/src/Users/ShieldUserMeta.php',
308
  'FernleafSystems\\Wordpress\\Plugin\\Shield\\Utilities\\VisitorIpDetection' => __DIR__ . '/../..' . '/src/Utilities/VisitorIpDetection.php',
309
  'FernleafSystems\\Wordpress\\Services\\Core\\AdminNotices' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Core/AdminNotices.php',
384
  'ICWP_UserMeta' => __DIR__ . '/../..' . '/../common/icwp-usermeta.php',
385
  'ICWP_WPSF_AuditTrail_Auditor_Base' => __DIR__ . '/../..' . '/../processors/audit_trail_auditor_base.php',
386
  'ICWP_WPSF_BaseDbProcessor' => __DIR__ . '/../..' . '/../processors/basedb.php',
 
387
  'ICWP_WPSF_DataProcessor' => __DIR__ . '/../..' . '/../common/icwp-data.php',
388
  'ICWP_WPSF_Edd' => __DIR__ . '/../..' . '/../common/icwp-edd.php',
389
  'ICWP_WPSF_FeatureHandler_AdminAccessRestriction' => __DIR__ . '/../..' . '/../features/admin_access_restriction.php',
410
  'ICWP_WPSF_GoogleAuthenticator' => __DIR__ . '/../..' . '/../common/icwp-googleauthenticator.php',
411
  'ICWP_WPSF_GoogleRecaptcha' => __DIR__ . '/../..' . '/../common/icwp-googlearecaptcha.php',
412
  'ICWP_WPSF_Ip' => __DIR__ . '/../..' . '/../common/icwp-ip.php',
 
413
  'ICWP_WPSF_OptionsVO' => __DIR__ . '/../..' . '/../common/icwp-optionsvo.php',
414
  'ICWP_WPSF_Plugin_Controller' => __DIR__ . '/../..' . '/../../icwp-plugin-controller.php',
415
  'ICWP_WPSF_Processor_AdminAccessRestriction' => __DIR__ . '/../..' . '/../processors/admin_access_restriction.php',
416
  'ICWP_WPSF_Processor_AdminAccess_Whitelabel' => __DIR__ . '/../..' . '/../processors/adminaccess_whitelabel.php',
417
  'ICWP_WPSF_Processor_AuditTrail' => __DIR__ . '/../..' . '/../processors/audit_trail.php',
418
+ 'ICWP_WPSF_Processor_AuditTrail_Auditor' => __DIR__ . '/../..' . '/../processors/audit_trail_auditor.php',
419
  'ICWP_WPSF_Processor_AuditTrail_Emails' => __DIR__ . '/../..' . '/../processors/audit_trail_emails.php',
420
  'ICWP_WPSF_Processor_AuditTrail_Plugins' => __DIR__ . '/../..' . '/../processors/audit_trail_plugins.php',
421
  'ICWP_WPSF_Processor_AuditTrail_Posts' => __DIR__ . '/../..' . '/../processors/audit_trail_posts.php',
435
  'ICWP_WPSF_Processor_Email' => __DIR__ . '/../..' . '/../processors/email.php',
436
  'ICWP_WPSF_Processor_Firewall' => __DIR__ . '/../..' . '/../processors/firewall.php',
437
  'ICWP_WPSF_Processor_HackProtect' => __DIR__ . '/../..' . '/../processors/hack_protect.php',
438
+ 'ICWP_WPSF_Processor_HackProtect_Apc' => __DIR__ . '/../..' . '/../processors/hackprotect_scan_apc.php',
439
  'ICWP_WPSF_Processor_HackProtect_Integrity' => __DIR__ . '/../..' . '/../processors/hackprotect_integrity.php',
440
  'ICWP_WPSF_Processor_HackProtect_Ptg' => __DIR__ . '/../..' . '/../processors/hackprotect_scan_ptg.php',
441
  'ICWP_WPSF_Processor_HackProtect_ScanAssetsBase' => __DIR__ . '/../..' . '/../processors/hackprotect_scan_assets_base.php',
464
  'ICWP_WPSF_Processor_Plugin' => __DIR__ . '/../..' . '/../processors/plugin.php',
465
  'ICWP_WPSF_Processor_Plugin_Badge' => __DIR__ . '/../..' . '/../processors/plugin_badge.php',
466
  'ICWP_WPSF_Processor_Plugin_BadgeWidget' => __DIR__ . '/../..' . '/../processors/plugin_badgewidget.php',
467
+ 'ICWP_WPSF_Processor_Plugin_CronDaily' => __DIR__ . '/../..' . '/../processors/plugin_crondaily.php',
468
  'ICWP_WPSF_Processor_Plugin_ImportExport' => __DIR__ . '/../..' . '/../processors/plugin_importexport.php',
469
  'ICWP_WPSF_Processor_Plugin_Notes' => __DIR__ . '/../..' . '/../processors/plugin_notes.php',
470
  'ICWP_WPSF_Processor_Plugin_Tracking' => __DIR__ . '/../..' . '/../processors/plugin_tracking.php',
478
  'ICWP_WPSF_Processor_UserManagement' => __DIR__ . '/../..' . '/../processors/user_management.php',
479
  'ICWP_WPSF_Processor_UserManagement_Passwords' => __DIR__ . '/../..' . '/../processors/usermanagement_passwords.php',
480
  'ICWP_WPSF_Processor_UserManagement_Sessions' => __DIR__ . '/../..' . '/../processors/usermanagement_sessions.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
481
  'ICWP_WPSF_Query_Statistics_Base' => __DIR__ . '/../..' . '/../query/base/statistics_base.php',
482
  'ICWP_WPSF_Query_Statistics_Consolidation' => __DIR__ . '/../..' . '/../query/statistics/consolidation.php',
483
  'ICWP_WPSF_Query_Statistics_Reporting' => __DIR__ . '/../..' . '/../query/statistics/reporting.php',
 
 
 
 
484
  'ICWP_WPSF_Render' => __DIR__ . '/../..' . '/../common/icwp-render.php',
485
  'ICWP_WPSF_Request' => __DIR__ . '/../..' . '/../common/icwp-request.php',
486
  'ICWP_WPSF_ServiceProviders' => __DIR__ . '/../..' . '/../common/icwp-serviceproviders.php',
src/lib/vendor/composer/installed.json CHANGED
@@ -876,12 +876,12 @@
876
  "source": {
877
  "type": "git",
878
  "url": "https://bitbucket.org/FernleafSystems/wordpress-services.git",
879
- "reference": "db0fd10355afe2f9d28bb12b8eae3aa628916c98"
880
  },
881
  "dist": {
882
  "type": "zip",
883
- "url": "https://bitbucket.org/FernleafSystems/wordpress-services/get/db0fd10355afe2f9d28bb12b8eae3aa628916c98.zip",
884
- "reference": "db0fd10355afe2f9d28bb12b8eae3aa628916c98",
885
  "shasum": ""
886
  },
887
  "require": {
@@ -894,7 +894,7 @@
894
  "symfony/yaml": "~2.0||~3.0",
895
  "twig/twig": "^1.0"
896
  },
897
- "time": "2019-02-08T13:06:53+00:00",
898
  "type": "library",
899
  "installation-source": "source",
900
  "autoload": {
876
  "source": {
877
  "type": "git",
878
  "url": "https://bitbucket.org/FernleafSystems/wordpress-services.git",
879
+ "reference": "09108bfbca852d3b1f4ae6834cfbae64f4de2681"
880
  },
881
  "dist": {
882
  "type": "zip",
883
+ "url": "https://bitbucket.org/FernleafSystems/wordpress-services/get/09108bfbca852d3b1f4ae6834cfbae64f4de2681.zip",
884
+ "reference": "09108bfbca852d3b1f4ae6834cfbae64f4de2681",
885
  "shasum": ""
886
  },
887
  "require": {
894
  "symfony/yaml": "~2.0||~3.0",
895
  "twig/twig": "^1.0"
896
  },
897
+ "time": "2019-02-20T15:22:27+00:00",
898
  "type": "library",
899
  "installation-source": "source",
900
  "autoload": {
src/lib/vendor/fernleafsystems/wordpress-services/src/Core/Comments.php CHANGED
@@ -5,6 +5,8 @@ namespace FernleafSystems\Wordpress\Services\Core;
5
  use FernleafSystems\Wordpress\Services\Services;
6
 
7
  /**
 
 
8
  */
9
  class Comments {
10
 
@@ -13,6 +15,14 @@ class Comments {
13
  */
14
  protected $bIsCommentSubmission;
15
 
 
 
 
 
 
 
 
 
16
  /**
17
  * @return bool
18
  */
@@ -25,14 +35,14 @@ class Comments {
25
  * @return bool
26
  */
27
  public function isCommentsOpen( $oPost = null ) {
28
- if ( is_null( $oPost ) || !is_a( $oPost, 'WP_Post' )) {
29
  global $post;
30
  $oPost = $post;
31
  }
32
  $bOpen = is_a( $oPost, '\WP_Post' )
33
- && comments_open( $oPost->ID )
34
- && get_post_status( $oPost ) != 'trash'
35
- && !post_password_required( $oPost->ID );
36
  return $bOpen;
37
  }
38
 
@@ -76,7 +86,8 @@ class Comments {
76
  */
77
  public function isCommentSubmission() {
78
  if ( !isset( $this->bIsCommentSubmission ) ) {
79
- $this->bIsCommentSubmission = Services::Request()->isPost() && Services::WpGeneral()->getIsCurrentPage( 'wp-comments-post.php' );
 
80
  if ( $this->bIsCommentSubmission ) {
81
  $nPostId = Services::Request()->post( 'comment_post_ID' );
82
  $this->bIsCommentSubmission = !empty( $nPostId ) && is_numeric( $nPostId );
5
  use FernleafSystems\Wordpress\Services\Services;
6
 
7
  /**
8
+ * Class Comments
9
+ * @package FernleafSystems\Wordpress\Services\Core
10
  */
11
  class Comments {
12
 
15
  */
16
  protected $bIsCommentSubmission;
17
 
18
+ /**
19
+ * @param int $nId
20
+ * @return \WP_Comment|false
21
+ */
22
+ public function getById( $nId ) {
23
+ return \WP_Comment::get_instance( $nId );
24
+ }
25
+
26
  /**
27
  * @return bool
28
  */
35
  * @return bool
36
  */
37
  public function isCommentsOpen( $oPost = null ) {
38
+ if ( is_null( $oPost ) || !is_a( $oPost, 'WP_Post' ) ) {
39
  global $post;
40
  $oPost = $post;
41
  }
42
  $bOpen = is_a( $oPost, '\WP_Post' )
43
+ && comments_open( $oPost->ID )
44
+ && get_post_status( $oPost ) != 'trash'
45
+ && !post_password_required( $oPost->ID );
46
  return $bOpen;
47
  }
48
 
86
  */
87
  public function isCommentSubmission() {
88
  if ( !isset( $this->bIsCommentSubmission ) ) {
89
+ $this->bIsCommentSubmission = Services::Request()->isPost()
90
+ && Services::WpGeneral()->getIsCurrentPage( 'wp-comments-post.php' );
91
  if ( $this->bIsCommentSubmission ) {
92
  $nPostId = Services::Request()->post( 'comment_post_ID' );
93
  $this->bIsCommentSubmission = !empty( $nPostId ) && is_numeric( $nPostId );
src/lib/vendor/fernleafsystems/wordpress-services/src/Core/General.php CHANGED
@@ -789,6 +789,13 @@ class General {
789
  return $this->oWpAutomaticUpdater;
790
  }
791
 
 
 
 
 
 
 
 
792
  /**
793
  * Flushes the Rewrite rules and forces a re-commit to the .htaccess where applicable
794
  */
789
  return $this->oWpAutomaticUpdater;
790
  }
791
 
792
+ /**
793
+ * @return bool
794
+ */
795
+ public function getIfAutoUpdatesInstalled() {
796
+ return (int)did_action( 'automatic_updates_complete' ) > 0;
797
+ }
798
+
799
  /**
800
  * Flushes the Rewrite rules and forces a re-commit to the .htaccess where applicable
801
  */
src/lib/vendor/fernleafsystems/wordpress-services/src/Services.php CHANGED
@@ -50,7 +50,7 @@ class Services {
50
  return new Core\CoreFileHashes();
51
  };
52
  self::$oDic[ 'service_email' ] = function () {
53
- return new Utilities\Data();
54
  };
55
  self::$oDic[ 'service_datamanipulation' ] = function () {
56
  return new Utilities\DataManipulation();
50
  return new Core\CoreFileHashes();
51
  };
52
  self::$oDic[ 'service_email' ] = function () {
53
+ return new Utilities\Email();
54
  };
55
  self::$oDic[ 'service_datamanipulation' ] = function () {
56
  return new Utilities\DataManipulation();
src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php CHANGED
@@ -13,7 +13,7 @@ class DataManipulation {
13
  * @return string
14
  */
15
  public function convertLineEndingsDosToLinux( $sFullFilePath ) {
16
- return str_replace( ["\r\n","\r"], "\n", file_get_contents( $sFullFilePath ) );
17
  }
18
 
19
  /**
@@ -51,20 +51,42 @@ class DataManipulation {
51
  }
52
 
53
  /**
54
- * @param array $aArray1
55
- * @param array $aArray2
56
  * @return array
57
  */
58
- public function mergeArraysRecursive( $aArray1, $aArray2 ) {
59
- foreach ( $aArray2 as $key => $Value ) {
60
- if ( array_key_exists( $key, $aArray1 ) && is_array( $Value ) ) {
61
- $aArray1[ $key ] = $this->mergeArraysRecursive( $aArray1[ $key ], $aArray2[ $key ] );
62
- }
63
- else {
64
- $aArray1[ $key ] = $Value;
65
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
- return $aArray1;
 
68
  }
69
 
70
  /**
13
  * @return string
14
  */
15
  public function convertLineEndingsDosToLinux( $sFullFilePath ) {
16
+ return str_replace( [ "\r\n", "\r" ], "\n", file_get_contents( $sFullFilePath ) );
17
  }
18
 
19
  /**
51
  }
52
 
53
  /**
54
+ * @param mixed $args,...
 
55
  * @return array
56
  */
57
+ public function mergeArraysRecursive( $args ) {
58
+ $aArgs = array_values( array_filter( func_get_args(), 'is_array' ) );
59
+ switch ( count( $aArgs ) ) {
60
+
61
+ case 0:
62
+ $aResult = [];
63
+ break;
64
+
65
+ case 1:
66
+ $aResult = array_shift( $aArgs );
67
+ break;
68
+
69
+ case 2:
70
+ list( $aResult, $aArray2 ) = $aArgs;
71
+ foreach ( $aArray2 as $key => $Value ) {
72
+ if ( array_key_exists( $key, $aResult ) && is_array( $Value ) ) {
73
+ $aResult[ $key ] = $this->mergeArraysRecursive( $aResult[ $key ], $aArray2[ $key ] );
74
+ }
75
+ else {
76
+ $aResult[ $key ] = $Value;
77
+ }
78
+ }
79
+ break;
80
+
81
+ default:
82
+ $aResult = array_shift( $aArgs );
83
+ foreach ( $aArgs as $aArg ) {
84
+ $aResult = $this->mergeArraysRecursive( $aResult, $aArg );
85
+ }
86
+ break;
87
  }
88
+
89
+ return $aResult;
90
  }
91
 
92
  /**
src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Email.php CHANGED
@@ -46,6 +46,7 @@ class Email {
46
 
47
  /**
48
  * @param $bAdd - true to add, false to remove
 
49
  */
50
  protected function emailFilters( $bAdd ) {
51
  if ( $bAdd ) {
@@ -60,6 +61,7 @@ class Email {
60
  remove_filter( 'wp_mail_from_name', array( $this, 'filterMailFromName' ), 100 );
61
  remove_filter( 'wp_mail_content_type', array( $this, 'filterMailContentType' ), 100 );
62
  }
 
63
  }
64
 
65
  /**
@@ -83,12 +85,12 @@ class Email {
83
  // Add our filters for From.
84
  $this->emailFilters( true );
85
  $this->is_success = wp_mail(
86
- $this->getToAddress(),
87
  $this->getSubject(),
88
  $this->getMessageBody()
89
  );
90
- $this->emailFilters( false );
91
- return $this->resetPhpMailer();
92
  }
93
 
94
  /**
@@ -125,7 +127,7 @@ class Email {
125
  * @return array
126
  */
127
  protected function getContentHeader() {
128
- return array( sprintf( __( 'Hi%s' ), empty( $this->to_name ) ? '' : ' '.$this->to_name ).',' );
129
  }
130
 
131
  /**
@@ -162,7 +164,7 @@ class Email {
162
  /**
163
  * @return string
164
  */
165
- protected function getToAddress() {
166
  return Services::Data()->validEmail( $this->to_email ) ? $this->to_email : Services::WpGeneral()
167
  ->getSiteAdminEmail();
168
  }
@@ -190,11 +192,11 @@ class Email {
190
  }
191
 
192
  /**
193
- * @param array|string $aContent
194
- * @return $this
195
  */
196
  public function setContentBody( $aContent ) {
197
- if ( !is_array( $aContent ) && is_scalar( $aContent ) ) {
198
  $aContent = [ $aContent ];
199
  }
200
  return $this->setParam( 'content', $aContent );
46
 
47
  /**
48
  * @param $bAdd - true to add, false to remove
49
+ * @return $this
50
  */
51
  protected function emailFilters( $bAdd ) {
52
  if ( $bAdd ) {
61
  remove_filter( 'wp_mail_from_name', array( $this, 'filterMailFromName' ), 100 );
62
  remove_filter( 'wp_mail_content_type', array( $this, 'filterMailContentType' ), 100 );
63
  }
64
+ return $this;
65
  }
66
 
67
  /**
85
  // Add our filters for From.
86
  $this->emailFilters( true );
87
  $this->is_success = wp_mail(
88
+ $this->getTo(),
89
  $this->getSubject(),
90
  $this->getMessageBody()
91
  );
92
+ return $this->emailFilters( false )
93
+ ->resetPhpMailer();
94
  }
95
 
96
  /**
127
  * @return array
128
  */
129
  protected function getContentHeader() {
130
+ return [ sprintf( __( 'Hi%s' ), empty( $this->to_name ) ? '' : ' '.$this->to_name ).',' ];
131
  }
132
 
133
  /**
164
  /**
165
  * @return string
166
  */
167
+ protected function getTo() {
168
  return Services::Data()->validEmail( $this->to_email ) ? $this->to_email : Services::WpGeneral()
169
  ->getSiteAdminEmail();
170
  }
192
  }
193
 
194
  /**
195
+ * @param array $aContent
196
+ * @return Email
197
  */
198
  public function setContentBody( $aContent ) {
199
+ if ( is_string( $aContent ) ) {
200
  $aContent = [ $aContent ];
201
  }
202
  return $this->setParam( 'content', $aContent );
src/processors/audit_trail.php CHANGED
@@ -1,212 +1,30 @@
1
  <?php
2
 
3
- use FernleafSystems\Wordpress\Plugin\Shield\Databases\AuditTrail;
4
  use FernleafSystems\Wordpress\Services\Services;
5
 
6
- class ICWP_WPSF_Processor_AuditTrail extends ICWP_WPSF_BaseDbProcessor {
7
 
8
- /**
9
- * @param ICWP_WPSF_FeatureHandler_AuditTrail $oModCon
10
- */
11
- public function __construct( ICWP_WPSF_FeatureHandler_AuditTrail $oModCon ) {
12
- parent::__construct( $oModCon, $oModCon->getDef( 'audit_trail_table_name' ) );
13
- }
14
-
15
- /**
16
- * Resets the object values to be re-used anew
17
- */
18
- public function init() {
19
- parent::init();
20
- add_action( $this->getMod()->prefix( 'add_new_audit_entry' ), array( $this, 'addAuditTrialEntry' ) );
21
- }
22
-
23
- public function cleanupDatabase() {
24
- parent::cleanupDatabase(); // Deletes based on time.
25
- $this->trimTable();
26
- }
27
-
28
- /**
29
- * ABstract this and move it into base DB class
30
- */
31
- protected function trimTable() {
32
- /** @var ICWP_WPSF_FeatureHandler_AuditTrail $oFO */
33
- $oFO = $this->getMod();
34
- try {
35
- $this->getDbHandler()
36
- ->getQueryDeleter()
37
- ->deleteExcess( $oFO->getMaxEntries() );
38
- }
39
- catch ( \Exception $oE ) {
40
- }
41
- }
42
-
43
- /**
44
- */
45
  public function run() {
46
- if ( !$this->isReadyToRun() ) {
47
- return;
48
- }
49
  /** @var ICWP_WPSF_FeatureHandler_AuditTrail $oFO */
50
  $oFO = $this->getMod();
51
-
52
- if ( $oFO->isAuditUsers() ) {
53
- $oUsers = new ICWP_WPSF_Processor_AuditTrail_Users();
54
- $oUsers->run();
55
- }
56
-
57
- if ( $oFO->isAuditPlugins() ) {
58
- $oPlugins = new ICWP_WPSF_Processor_AuditTrail_Plugins();
59
- $oPlugins->run();
60
- }
61
-
62
- if ( $oFO->isAuditThemes() ) {
63
- $oThemes = new ICWP_WPSF_Processor_AuditTrail_Themes();
64
- $oThemes->run();
65
- }
66
-
67
- if ( $oFO->isAuditWp() ) {
68
- $oWp = new ICWP_WPSF_Processor_AuditTrail_Wordpress();
69
- $oWp->run();
70
- }
71
-
72
- if ( $oFO->isAuditPosts() ) {
73
- $oPosts = new ICWP_WPSF_Processor_AuditTrail_Posts();
74
- $oPosts->run();
75
- }
76
-
77
- if ( $oFO->isAuditEmails() ) {
78
- $oEmails = new ICWP_WPSF_Processor_AuditTrail_Emails();
79
- $oEmails->run();
80
- }
81
-
82
- if ( $oFO->isAuditShield() ) {
83
- $oWpsf = new ICWP_WPSF_Processor_AuditTrail_Wpsf();
84
- $oWpsf->run();
85
  }
86
  }
87
 
88
  /**
89
- * @param string $sContext
90
- * @return array|bool
91
  */
92
- public function countAuditEntriesForContext( $sContext = 'all' ) {
93
- /** @var AuditTrail\Select $oCounter */
94
- $oCounter = $this->getDbHandler()->getQuerySelector();
95
- if ( $sContext != 'all' ) {
96
- $oCounter->filterByContext( $sContext );
97
- }
98
- return $oCounter->count();
99
- }
100
-
101
- /**
102
- * @CENTRAL
103
- * @param string $sContext
104
- * @param string $sOrderBy
105
- * @param string $sOrder
106
- * @param int $nPage
107
- * @param int $nLimit
108
- * @return AuditTrail\EntryVO[]
109
- */
110
- public function getAuditEntriesForContext( $sContext = 'all', $sOrderBy = 'created_at', $sOrder = 'DESC', $nPage = 1, $nLimit = 50 ) {
111
- /** @var AuditTrail\Select $oSelect */
112
- $oSelect = $this->getDbHandler()
113
- ->getQuerySelector()
114
- ->setResultsAsVo( true )
115
- ->setOrderBy( $sOrderBy, $sOrder )
116
- ->setLimit( $nLimit )
117
- ->setPage( $nPage );
118
- if ( $sContext != 'all' ) {
119
- $oSelect->filterByContext( $sContext );
120
- }
121
-
122
- return $oSelect->query();
123
- }
124
-
125
- /**
126
- * @param AuditTrail\EntryVO $oEntryVo
127
- */
128
- public function addAuditTrialEntry( $oEntryVo ) {
129
- $oCon = $this->getCon();
130
- if ( !$oCon->isPluginDeleting() && $oEntryVo instanceof AuditTrail\EntryVO ) {
131
- $oEntryVo->rid = $oCon->getShortRequestId();
132
- /** @var AuditTrail\Insert $oInsQ */
133
- $oInsQ = $this->getDbHandler()->getQueryInserter();
134
- $oInsQ->insert( $oEntryVo );
135
- }
136
- }
137
-
138
- /**
139
- * @return string
140
- */
141
- protected function getCreateTableSql() {
142
- return "CREATE TABLE %s (
143
- id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
144
- rid varchar(10) NOT NULL DEFAULT '' COMMENT 'Request ID',
145
- ip varchar(40) NOT NULL DEFAULT 0 COMMENT 'Visitor IP Address',
146
- wp_username varchar(255) NOT NULL DEFAULT 'none' COMMENT 'WP User',
147
- context varchar(32) NOT NULL DEFAULT 'none' COMMENT 'Audit Context',
148
- event varchar(50) NOT NULL DEFAULT 'none' COMMENT 'Specific Audit Event',
149
- category int(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Severity',
150
- message text COMMENT 'Audit Event Description',
151
- meta text COMMENT 'Audit Event Data',
152
- immutable tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'May Be Deleted',
153
- created_at int(15) UNSIGNED NOT NULL DEFAULT 0,
154
- deleted_at int(15) UNSIGNED NOT NULL DEFAULT 0,
155
- PRIMARY KEY (id)
156
- ) %s;";
157
  }
158
 
159
  /**
160
  * @return array
161
  */
162
- protected function getTableColumnsByDefinition() {
163
- $aDef = $this->getMod()->getDef( 'audit_trail_table_columns' );
164
- return ( is_array( $aDef ) ? $aDef : array() );
165
- }
166
-
167
- /**
168
- * override and do not delete
169
- */
170
- public function deleteTable() {
171
- }
172
-
173
- /**
174
- * @return int|null
175
- */
176
- protected function getAutoExpirePeriod() {
177
- /** @var ICWP_WPSF_FeatureHandler_Traffic $oFO */
178
- $oFO = $this->getMod();
179
- return $oFO->getAutoCleanDays()*DAY_IN_SECONDS;
180
- }
181
-
182
- /**
183
- * @return AuditTrail\Handler
184
- */
185
- protected function createDbHandler() {
186
- return new AuditTrail\Handler();
187
- }
188
-
189
- /**
190
- * @deprecated
191
- * @return AuditTrail\Delete
192
- */
193
- public function getQueryDeleter() {
194
- return parent::getQueryDeleter();
195
- }
196
-
197
- /**
198
- * @deprecated
199
- * @return AuditTrail\Insert
200
- */
201
- public function getQueryInserter() {
202
- return parent::getQueryInserter();
203
- }
204
-
205
- /**
206
- * @deprecated
207
- * @return AuditTrail\Select
208
- */
209
- public function getQuerySelector() {
210
- return parent::getQuerySelector();
211
  }
212
  }
1
  <?php
2
 
 
3
  use FernleafSystems\Wordpress\Services\Services;
4
 
5
+ class ICWP_WPSF_Processor_AuditTrail extends ICWP_WPSF_Processor_BaseWpsf {
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  public function run() {
 
 
 
8
  /** @var ICWP_WPSF_FeatureHandler_AuditTrail $oFO */
9
  $oFO = $this->getMod();
10
+ if ( $oFO->isEnabledAuditing() ) {
11
+ $this->getSubProAuditor()->run();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
13
  }
14
 
15
  /**
16
+ * @return ICWP_WPSF_Processor_AuditTrail_Auditor|mixed
 
17
  */
18
+ public function getSubProAuditor() {
19
+ return $this->getSubPro( 'auditor' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
 
22
  /**
23
  * @return array
24
  */
25
+ protected function getSubProMap() {
26
+ return [
27
+ 'auditor' => 'ICWP_WPSF_Processor_AuditTrail_Auditor',
28
+ ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
  }
src/processors/audit_trail_auditor.php ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use FernleafSystems\Wordpress\Plugin\Shield\Databases\AuditTrail;
4
+ use FernleafSystems\Wordpress\Services\Services;
5
+
6
+ class ICWP_WPSF_Processor_AuditTrail_Auditor extends ICWP_WPSF_BaseDbProcessor {
7
+
8
+ /**
9
+ * @param ICWP_WPSF_FeatureHandler_AuditTrail $oModCon
10
+ */
11
+ public function __construct( ICWP_WPSF_FeatureHandler_AuditTrail $oModCon ) {
12
+ parent::__construct( $oModCon, $oModCon->getDef( 'audit_trail_table_name' ) );
13
+ }
14
+
15
+ /**
16
+ * Resets the object values to be re-used anew
17
+ */
18
+ public function init() {
19
+ parent::init();
20
+ add_action( $this->getMod()->prefix( 'add_new_audit_entry' ), array( $this, 'addAuditTrialEntry' ) );
21
+ }
22
+
23
+ public function cleanupDatabase() {
24
+ parent::cleanupDatabase(); // Deletes based on time.
25
+ $this->trimTable();
26
+ }
27
+
28
+ /**
29
+ * ABstract this and move it into base DB class
30
+ */
31
+ protected function trimTable() {
32
+ /** @var ICWP_WPSF_FeatureHandler_AuditTrail $oFO */
33
+ $oFO = $this->getMod();
34
+ try {
35
+ $this->getDbHandler()
36
+ ->getQueryDeleter()
37
+ ->deleteExcess( $oFO->getMaxEntries() );
38
+ }
39
+ catch ( \Exception $oE ) {
40
+ }
41
+ }
42
+
43
+ /**
44
+ */
45
+ public function run() {
46
+ if ( !$this->isReadyToRun() ) {
47
+ return;
48
+ }
49
+ /** @var ICWP_WPSF_FeatureHandler_AuditTrail $oFO */
50
+ $oFO = $this->getMod();
51
+
52
+ if ( $oFO->isAuditUsers() ) {
53
+ ( new ICWP_WPSF_Processor_AuditTrail_Users() )->run();
54
+ }
55
+ if ( $oFO->isAuditPlugins() ) {
56
+ ( new ICWP_WPSF_Processor_AuditTrail_Plugins() )->run();
57
+ }
58
+ if ( $oFO->isAuditThemes() ) {
59
+ ( new ICWP_WPSF_Processor_AuditTrail_Themes() )->run();
60
+ }
61
+ if ( $oFO->isAuditWp() ) {
62
+ ( new ICWP_WPSF_Processor_AuditTrail_Wordpress() )->run();
63
+ }
64
+ if ( $oFO->isAuditPosts() ) {
65
+ ( new ICWP_WPSF_Processor_AuditTrail_Posts() )->run();
66
+ }
67
+ if ( $oFO->isAuditEmails() ) {
68
+ ( new ICWP_WPSF_Processor_AuditTrail_Emails() )->run();
69
+ }
70
+ if ( $oFO->isAuditShield() ) {
71
+ ( new ICWP_WPSF_Processor_AuditTrail_Wpsf() )->run();
72
+ }
73
+ }
74
+
75
+ /**
76
+ * @param string $sContext
77
+ * @return array|bool
78
+ */
79
+ public function countAuditEntriesForContext( $sContext = 'all' ) {
80
+ /** @var AuditTrail\Select $oCounter */
81
+ $oCounter = $this->getDbHandler()->getQuerySelector();
82
+ if ( $sContext != 'all' ) {
83
+ $oCounter->filterByContext( $sContext );
84
+ }
85
+ return $oCounter->count();
86
+ }
87
+
88
+ /**
89
+ * @CENTRAL
90
+ * @param string $sContext
91
+ * @param string $sOrderBy
92
+ * @param string $sOrder
93
+ * @param int $nPage
94
+ * @param int $nLimit
95
+ * @return AuditTrail\EntryVO[]
96
+ */
97
+ public function getAuditEntriesForContext( $sContext = 'all', $sOrderBy = 'created_at', $sOrder = 'DESC', $nPage = 1, $nLimit = 50 ) {
98
+ /** @var AuditTrail\Select $oSelect */
99
+ $oSelect = $this->getDbHandler()
100
+ ->getQuerySelector()
101
+ ->setResultsAsVo( true )
102
+ ->setOrderBy( $sOrderBy, $sOrder )
103
+ ->setLimit( $nLimit )
104
+ ->setPage( $nPage );
105
+ if ( $sContext != 'all' ) {
106
+ $oSelect->filterByContext( $sContext );
107
+ }
108
+
109
+ return $oSelect->query();
110
+ }
111
+
112
+ /**
113
+ * @param AuditTrail\EntryVO $oEntryVo
114
+ */
115
+ public function addAuditTrialEntry( $oEntryVo ) {
116
+ $oCon = $this->getCon();
117
+ if ( !$oCon->isPluginDeleting() && $oEntryVo instanceof AuditTrail\EntryVO ) {
118
+ $oEntryVo->rid = $oCon->getShortRequestId();
119
+ /** @var AuditTrail\Insert $oInsQ */
120
+ $oInsQ = $this->getDbHandler()->getQueryInserter();
121
+ $oInsQ->insert( $oEntryVo );
122
+ }
123
+ }
124
+
125
+ /**
126
+ * @return string
127
+ */
128
+ protected function getCreateTableSql() {
129
+ return "CREATE TABLE %s (
130
+ id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
131
+ rid varchar(10) NOT NULL DEFAULT '' COMMENT 'Request ID',
132
+ ip varchar(40) NOT NULL DEFAULT 0 COMMENT 'Visitor IP Address',
133
+ wp_username varchar(255) NOT NULL DEFAULT 'none' COMMENT 'WP User',
134
+ context varchar(32) NOT NULL DEFAULT 'none' COMMENT 'Audit Context',
135
+ event varchar(50) NOT NULL DEFAULT 'none' COMMENT 'Specific Audit Event',
136
+ category int(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Severity',
137
+ message text COMMENT 'Audit Event Description',
138
+ meta text COMMENT 'Audit Event Data',
139
+ immutable tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'May Be Deleted',
140
+ created_at int(15) UNSIGNED NOT NULL DEFAULT 0,
141
+ deleted_at int(15) UNSIGNED NOT NULL DEFAULT 0,
142
+ PRIMARY KEY (id)
143
+ ) %s;";
144
+ }
145
+
146
+ /**
147
+ * @return array
148
+ */
149
+ protected function getTableColumnsByDefinition() {
150
+ $aDef = $this->getMod()->getDef( 'audit_trail_table_columns' );
151
+ return ( is_array( $aDef ) ? $aDef : array() );
152
+ }
153
+
154
+ /**
155
+ * override and do not delete
156
+ */
157
+ public function deleteTable() {
158
+ }
159
+
160
+ /**
161
+ * @return int|null
162
+ */
163
+ protected function getAutoExpirePeriod() {
164
+ /** @var ICWP_WPSF_FeatureHandler_Traffic $oFO */
165
+ $oFO = $this->getMod();
166
+ return $oFO->getAutoCleanDays()*DAY_IN_SECONDS;
167
+ }
168
+
169
+ /**
170
+ * @return AuditTrail\Handler
171
+ */
172
+ protected function createDbHandler() {
173
+ return new AuditTrail\Handler();
174
+ }
175
+ }
src/processors/basedb.php CHANGED
@@ -118,36 +118,4 @@ abstract class ICWP_WPSF_BaseDbProcessor extends ICWP_WPSF_Processor_BaseWpsf {
118
  protected function getAutoExpirePeriod() {
119
  return null;
120
  }
121
-
122
- /**
123
- * @deprecated
124
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Base\Delete
125
- */
126
- protected function getQueryDeleter() {
127
- return $this->getDbHandler()->getQueryDeleter();
128
- }
129
-
130
- /**
131
- * @deprecated
132
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Base\Insert
133
- */
134
- protected function getQueryInserter() {
135
- return $this->getDbHandler()->getQueryInserter();
136
- }
137
-
138
- /**
139
- * @deprecated
140
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Base\Select
141
- */
142
- protected function getQuerySelector() {
143
- return $this->getDbHandler()->getQuerySelector();
144
- }
145
-
146
- /**
147
- * @deprecated
148
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Base\Update
149
- */
150
- protected function getQueryUpdater() {
151
- return $this->getDbHandler()->getQueryUpdater();
152
- }
153
  }
118
  protected function getAutoExpirePeriod() {
119
  return null;
120
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
src/processors/commentsfilter_antibotspam.php CHANGED
@@ -394,25 +394,4 @@ class ICWP_WPSF_Processor_CommentsFilter_AntiBotSpam extends ICWP_WPSF_BaseDbPro
394
  protected function createDbHandler() {
395
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\Comments\Handler();
396
  }
397
-
398
- /**
399
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Comments\Delete
400
- */
401
- public function getQueryDeleter() {
402
- return parent::getQueryDeleter();
403
- }
404
-
405
- /**
406
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Comments\Insert
407
- */
408
- public function getQueryInserter() {
409
- return parent::getQueryInserter();
410
- }
411
-
412
- /**
413
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\Comments\Select
414
- */
415
- public function getQuerySelector() {
416
- return parent::getQuerySelector();
417
- }
418
  }
394
  protected function createDbHandler() {
395
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\Comments\Handler();
396
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  }
src/processors/hack_protect.php CHANGED
@@ -109,7 +109,32 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
109
  'not_enabled' => _wpsf__( 'This scan is not currently enabled.' ),
110
  'please_enable' => _wpsf__( 'Please turn on this scan in the options.' ),
111
  ),
 
 
112
  'scans' => array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  'wcf' => array(
114
  'flags' => array(
115
  'is_enabled' => true,
@@ -128,6 +153,7 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
128
  ),
129
  'count' => $oSelector->countForScan( 'wcf' ),
130
  'strings' => array(
 
131
  'subtitle' => _wpsf__( "Detects changes to core WordPress files" )
132
  ),
133
  ),
@@ -149,6 +175,7 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
149
  ),
150
  'count' => $oSelector->countForScan( 'ufc' ),
151
  'strings' => array(
 
152
  'subtitle' => _wpsf__( "Detects files that maybe shouldn't be there" )
153
  ),
154
  ),
@@ -170,6 +197,7 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
170
  ),
171
  'count' => $oSelector->countForScan( 'wpv' ),
172
  'strings' => array(
 
173
  'subtitle' => _wpsf__( "Alerts on known security vulnerabilities" )
174
  ),
175
  ),
@@ -180,6 +208,9 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
180
  return $aData;
181
  }
182
 
 
 
 
183
  private function getInsightVarsScan_Ptg() {
184
  /** @var ICWP_WPSF_FeatureHandler_HackProtect $oMod */
185
  $oMod = $this->getMod();
@@ -312,6 +343,7 @@ class ICWP_WPSF_Processor_HackProtect extends ICWP_WPSF_Processor_BaseWpsf {
312
  'count' => $oSelector->countForScan( 'ptg' ),
313
  'assets' => array_merge( $aPlugins, $aThemes ),
314
  'strings' => array(
 
315
  'subtitle' => _wpsf__( "Detects unauthorized changes to plugins/themes" ),
316
  'files_with_problems' => _wpsf__( 'Files with problems' ),
317
  'root_dir' => _wpsf__( 'Root directory' ),
109
  'not_enabled' => _wpsf__( 'This scan is not currently enabled.' ),
110
  'please_enable' => _wpsf__( 'Please turn on this scan in the options.' ),
111
  ),
112
+ 'vars' => [
113
+ ],
114
  'scans' => array(
115
+ /*
116
+ 'apc' => array(
117
+ 'flags' => array(
118
+ 'is_enabled' => true,
119
+ 'is_available' => true,
120
+ 'has_items' => true,
121
+ 'has_last_scan' => $oMod->getLastScanAt( 'apc' ) > 0
122
+ ),
123
+ 'hrefs' => array(
124
+ 'options' => $oMod->getUrl_DirectLinkToSection( 'section_scan_apc' )
125
+ ),
126
+ 'vars' => array(
127
+ 'last_scan_at' => sprintf(
128
+ _wpsf__( 'Last Scan: %s' ),
129
+ $oCarbon->setTimestamp( $oMod->getLastScanAt( 'apc' ) )->diffForHumans()
130
+ ),
131
+ ),
132
+ 'count' => $oSelector->countForScan( 'apc' ),
133
+ 'strings' => array(
134
+ 'title' => _wpsf__( 'Abandoned Plugins Check' ),
135
+ 'subtitle' => _wpsf__( "Discover abandoned plugins" )
136
+ ),
137
+ ), */
138
  'wcf' => array(
139
  'flags' => array(
140
  'is_enabled' => true,
153
  ),
154
  'count' => $oSelector->countForScan( 'wcf' ),
155
  'strings' => array(
156
+ 'title' => _wpsf__( 'WordPress Core File Integrity' ),
157
  'subtitle' => _wpsf__( "Detects changes to core WordPress files" )
158
  ),
159
  ),
175
  ),
176
  'count' => $oSelector->countForScan( 'ufc' ),
177
  'strings' => array(
178
+ 'title' => _wpsf__( 'Unrecognised Core Files' ),
179
  'subtitle' => _wpsf__( "Detects files that maybe shouldn't be there" )
180
  ),
181
  ),
197
  ),
198
  'count' => $oSelector->countForScan( 'wpv' ),
199
  'strings' => array(
200
+ 'title' => _wpsf__( 'Plugin / Theme Vulnerabilities' ),
201
  'subtitle' => _wpsf__( "Alerts on known security vulnerabilities" )
202
  ),
203
  ),
208
  return $aData;
209
  }
210
 
211
+ /**
212
+ * @return array
213
+ */
214
  private function getInsightVarsScan_Ptg() {
215
  /** @var ICWP_WPSF_FeatureHandler_HackProtect $oMod */
216
  $oMod = $this->getMod();
343
  'count' => $oSelector->countForScan( 'ptg' ),
344
  'assets' => array_merge( $aPlugins, $aThemes ),
345
  'strings' => array(
346
+ 'title' => _wpsf__( 'Plugin / Theme Modifications' ),
347
  'subtitle' => _wpsf__( "Detects unauthorized changes to plugins/themes" ),
348
  'files_with_problems' => _wpsf__( 'Files with problems' ),
349
  'root_dir' => _wpsf__( 'Root directory' ),
src/processors/hackprotect_scan_apc.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use \FernleafSystems\Wordpress\Plugin\Shield;
4
+
5
+ class ICWP_WPSF_Processor_HackProtect_Apc extends ICWP_WPSF_Processor_ScanBase {
6
+
7
+ const SCAN_SLUG = 'apc';
8
+
9
+ /**
10
+ */
11
+ public function run() {
12
+ parent::run();
13
+ add_action( 'deleted_plugin', [ $this, 'onDeletedPlugin' ], 10, 0 );
14
+ }
15
+
16
+ /**
17
+ * @return bool
18
+ */
19
+ public function isEnabled() {
20
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
21
+ $oFO = $this->getMod();
22
+ return $oFO->isApcEnabled();
23
+ }
24
+
25
+ public function onDeletedPlugin() {
26
+ $this->doScan();
27
+ }
28
+
29
+ /**
30
+ * @param Shield\Scans\Apc\ResultsSet $oResults
31
+ * @return Shield\Databases\Scanner\EntryVO[]
32
+ */
33
+ protected function convertResultsToVos( $oResults ) {
34
+ return ( new Shield\Scans\Apc\ConvertResultsToVos() )->convert( $oResults );
35
+ }
36
+
37
+ /**
38
+ * @param mixed|Shield\Databases\Scanner\EntryVO[] $aVos
39
+ * @return Shield\Scans\Apc\ResultsSet
40
+ */
41
+ protected function convertVosToResults( $aVos ) {
42
+ return ( new Shield\Scans\Apc\ConvertVosToResults() )->convert( $aVos );
43
+ }
44
+
45
+ /**
46
+ * @param Shield\Databases\Scanner\EntryVO $oVo
47
+ * @return Shield\Scans\Apc\ResultItem
48
+ */
49
+ protected function convertVoToResultItem( $oVo ) {
50
+ return ( new Shield\Scans\Apc\ConvertVosToResults() )->convertItem( $oVo );
51
+ }
52
+
53
+ /**
54
+ * @return null
55
+ */
56
+ protected function getRepairer() {
57
+ return null;
58
+ }
59
+
60
+ /**
61
+ * @return Shield\Scans\Apc\Scanner
62
+ */
63
+ protected function getScanner() {
64
+ return new Shield\Scans\Apc\Scanner();
65
+ }
66
+
67
+ /**
68
+ * @param Shield\Scans\Apc\ResultsSet $oRes
69
+ */
70
+ protected function runCronAutoRepair( $oRes ) {
71
+ // no autorepair
72
+ }
73
+
74
+ /**
75
+ * @param Shield\Scans\Apc\ResultsSet $oRes
76
+ * @return bool - true if user notified
77
+ */
78
+ protected function runCronUserNotify( $oRes ) {
79
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
80
+ $oFO = $this->getMod();
81
+ $bSend = $oFO->isWpvulnSendEmail();
82
+ if ( $bSend ) {
83
+ $this->emailResults( $oRes );
84
+ }
85
+ return $bSend;
86
+ }
87
+
88
+ /**
89
+ * @param Shield\Scans\Apc\ResultsSet $oRes
90
+ * @return bool
91
+ */
92
+ protected function emailResults( $oRes ) {
93
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
94
+ $oFO = $this->getMod();
95
+ $oWpPlugins = $this->loadWpPlugins();
96
+ $oWpThemes = $this->loadWpThemes();
97
+ $oCon = $this->getCon();
98
+
99
+ $aContent = array(
100
+ sprintf( _wpsf__( '%s has detected items with known security vulnerabilities.' ), $oCon->getHumanName() ),
101
+ _wpsf__( 'You should update or remove these items at your earliest convenience.' ),
102
+ _wpsf__( 'Details for the items(s) are below:' ),
103
+ '',
104
+ );
105
+
106
+ /** @var Shield\Scans\Apc\ResultItem $oItem */
107
+ foreach ( $oRes->getItems() as $oItem ) {
108
+
109
+ if ( $oItem->context == 'plugins' ) {
110
+ $aPlugin = $oWpPlugins->getPlugin( $oItem->slug );
111
+ $sName = sprintf( '%s - %s', _wpsf__( 'Plugin' ), empty( $aPlugin ) ? 'Unknown' : $aPlugin[ 'Name' ] );
112
+ }
113
+ else {
114
+ $sName = sprintf( '%s - %s', _wpsf__( 'Theme' ), $oWpThemes->getCurrentThemeName() );
115
+ }
116
+
117
+ $oVuln = $oItem->getWpVulnVo();
118
+ $aContent[] = implode( "<br />", array(
119
+ sprintf( '%s: %s', _wpsf__( 'Item' ), $sName ),
120
+ '- '.sprintf( _wpsf__( 'Vulnerability Title: %s' ), $oVuln->title ),
121
+ '- '.sprintf( _wpsf__( 'Vulnerability Type: %s' ), $oVuln->vuln_type ),
122
+ '- '.sprintf( _wpsf__( 'Fixed Version: %s' ), $oVuln->fixed_in ),
123
+ '- '.sprintf( _wpsf__( 'Further Information: %s' ), $oVuln->getUrl() ),
124
+ '',
125
+ ) );
126
+ }
127
+
128
+ $aContent[] = $this->getScannerButtonForEmail();
129
+ $aContent[] = '';
130
+
131
+ $sSubject = sprintf( '%s - %s', _wpsf__( 'Warning' ), _wpsf__( 'Plugin(s) Discovered With Known Security Vulnerabilities.' ) );
132
+ $sTo = $oFO->getPluginDefaultRecipientAddress();
133
+ $bSendSuccess = $this->getEmailProcessor()
134
+ ->sendEmailWithWrap( $sTo, $sSubject, $aContent );
135
+
136
+ if ( $bSendSuccess ) {
137
+ $this->addToAuditEntry( sprintf( _wpsf__( 'Successfully sent Plugin Vulnerability Notification email alert to: %s' ), $sTo ) );
138
+ }
139
+ else {
140
+ $this->addToAuditEntry( sprintf( _wpsf__( 'Failed to send Plugin Vulnerability Notification email alert to: %s' ), $sTo ) );
141
+ }
142
+ return $bSendSuccess;
143
+ }
144
+
145
+ /**
146
+ * @return string[]
147
+ */
148
+ protected function getAllAbandonedPlugins() {
149
+ return $this->getAllAbandoned()->getUniqueSlugs();
150
+ }
151
+
152
+ /**
153
+ * @return Shield\Scans\Apc\ResultsSet
154
+ */
155
+ protected function getAllAbandoned() {
156
+ /** @var Shield\Databases\Scanner\Select $oSel */
157
+ $oSel = $this->getScannerDb()
158
+ ->getDbHandler()
159
+ ->getQuerySelector();
160
+ $aVos = $oSel->filterByScan( static::SCAN_SLUG )
161
+ ->filterByNotIgnored()
162
+ ->query();
163
+ return $this->convertVosToResults( $aVos );
164
+ }
165
+
166
+ /**
167
+ * @return bool
168
+ */
169
+ protected function countVulnerablePlugins() {
170
+ return $this->getAllAbandoned()->countUniqueSlugsForPluginsContext();
171
+ }
172
+
173
+ /**
174
+ * @return string
175
+ */
176
+ protected function getCronName() {
177
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
178
+ $oFO = $this->getMod();
179
+ return $oFO->getWpvCronName();
180
+ }
181
+ }
src/processors/hackprotect_scan_base.php CHANGED
@@ -29,6 +29,11 @@ abstract class ICWP_WPSF_Processor_ScanBase extends ICWP_WPSF_Processor_BaseWpsf
29
  $this->setupCron();
30
  }
31
 
 
 
 
 
 
32
  /**
33
  * @return Shield\Scans\Base\BaseResultsSet
34
  */
@@ -62,7 +67,7 @@ abstract class ICWP_WPSF_Processor_ScanBase extends ICWP_WPSF_Processor_BaseWpsf
62
  }
63
 
64
  /**
65
- * @return mixed
66
  */
67
  abstract protected function getRepairer();
68
 
@@ -339,13 +344,10 @@ abstract class ICWP_WPSF_Processor_ScanBase extends ICWP_WPSF_Processor_BaseWpsf
339
  * Cron callback
340
  */
341
  public function runCron() {
342
- $this->cronScan();
343
  }
344
 
345
  private function cronScan() {
346
- if ( doing_action( 'wp_maybe_auto_update' ) || did_action( 'wp_maybe_auto_update' ) ) {
347
- return;
348
- }
349
  $this->doScan();
350
  $this->cronProcessScanResults();
351
  }
@@ -425,6 +427,15 @@ abstract class ICWP_WPSF_Processor_ScanBase extends ICWP_WPSF_Processor_BaseWpsf
425
  return $oFO->getScanFrequency();
426
  }
427
 
 
 
 
 
 
 
 
 
 
428
  /**
429
  * @return ICWP_WPSF_Processor_HackProtect_Scanner
430
  */
29
  $this->setupCron();
30
  }
31
 
32
+ /**
33
+ * @return bool
34
+ */
35
+ abstract public function isEnabled();
36
+
37
  /**
38
  * @return Shield\Scans\Base\BaseResultsSet
39
  */
67
  }
68
 
69
  /**
70
+ * @return mixed|null
71
  */
72
  abstract protected function getRepairer();
73
 
344
  * Cron callback
345
  */
346
  public function runCron() {
347
+ Services::WpGeneral()->getIfAutoUpdatesInstalled() ? $this->resetCron() : $this->cronScan();
348
  }
349
 
350
  private function cronScan() {
 
 
 
351
  $this->doScan();
352
  $this->cronProcessScanResults();
353
  }
427
  return $oFO->getScanFrequency();
428
  }
429
 
430
+ /**
431
+ * @return int
432
+ */
433
+ protected function getCronName() {
434
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
435
+ $oFO = $this->getMod();
436
+ return $oFO->prefix( $oFO->getDef( 'cron_all_scans' ) );
437
+ }
438
+
439
  /**
440
  * @return ICWP_WPSF_Processor_HackProtect_Scanner
441
  */
src/processors/hackprotect_scan_ptg.php CHANGED
@@ -50,6 +50,15 @@ class ICWP_WPSF_Processor_HackProtect_Ptg extends ICWP_WPSF_Processor_HackProtec
50
  }
51
  }
52
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  * @return Shield\Scans\Ptg\ResultsSet
55
  */
@@ -647,15 +656,6 @@ class ICWP_WPSF_Processor_HackProtect_Ptg extends ICWP_WPSF_Processor_HackProtec
647
  return $this->getContextScanner( $sContext )->run( $aSnapHashes );
648
  }
649
 
650
- /**
651
- * @return int
652
- */
653
- protected function getCronName() {
654
- /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
655
- $oFO = $this->getMod();
656
- return $oFO->getPtgCronName();
657
- }
658
-
659
  /**
660
  * @param string $sMsg
661
  * @param int $nCategory
50
  }
51
  }
52
 
53
+ /**
54
+ * @return bool
55
+ */
56
+ public function isEnabled() {
57
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
58
+ $oFO = $this->getMod();
59
+ return $oFO->isPtgEnabled();
60
+ }
61
+
62
  /**
63
  * @return Shield\Scans\Ptg\ResultsSet
64
  */
656
  return $this->getContextScanner( $sContext )->run( $aSnapHashes );
657
  }
658
 
 
 
 
 
 
 
 
 
 
659
  /**
660
  * @param string $sMsg
661
  * @param int $nCategory
src/processors/hackprotect_scan_ufc.php CHANGED
@@ -6,6 +6,15 @@ class ICWP_WPSF_Processor_HackProtect_Ufc extends ICWP_WPSF_Processor_ScanBase {
6
 
7
  const SCAN_SLUG = 'ufc';
8
 
 
 
 
 
 
 
 
 
 
9
  /**
10
  * @param Shield\Scans\Ufc\ResultsSet $oResults
11
  * @return Shield\Databases\Scanner\EntryVO[]
@@ -170,13 +179,4 @@ class ICWP_WPSF_Processor_HackProtect_Ufc extends ICWP_WPSF_Processor_ScanBase {
170
 
171
  return $aContent;
172
  }
173
-
174
- /**
175
- * @return string
176
- */
177
- protected function getCronName() {
178
- /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
179
- $oFO = $this->getMod();
180
- return $oFO->getUfcCronName();
181
- }
182
  }
6
 
7
  const SCAN_SLUG = 'ufc';
8
 
9
+ /**
10
+ * @return bool
11
+ */
12
+ public function isEnabled() {
13
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
14
+ $oFO = $this->getMod();
15
+ return $oFO->isUfcEnabled();
16
+ }
17
+
18
  /**
19
  * @param Shield\Scans\Ufc\ResultsSet $oResults
20
  * @return Shield\Databases\Scanner\EntryVO[]
179
 
180
  return $aContent;
181
  }
 
 
 
 
 
 
 
 
 
182
  }
src/processors/hackprotect_scan_wcf.php CHANGED
@@ -6,6 +6,15 @@ class ICWP_WPSF_Processor_HackProtect_Wcf extends ICWP_WPSF_Processor_ScanBase {
6
 
7
  const SCAN_SLUG = 'wcf';
8
 
 
 
 
 
 
 
 
 
 
9
  /**
10
  * @param Shield\Scans\Wcf\ResultsSet $oResults
11
  * @return Shield\Databases\Scanner\EntryVO[]
@@ -201,13 +210,4 @@ class ICWP_WPSF_Processor_HackProtect_Wcf extends ICWP_WPSF_Processor_ScanBase {
201
  return $this->getMod()->getDef( 'url_wordress_core_svn' )
202
  .'tags/'.$this->loadWp()->getVersion().'/'.$sFile;
203
  }
204
-
205
- /**
206
- * @return string
207
- */
208
- protected function getCronName() {
209
- /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
210
- $oFO = $this->getMod();
211
- return $oFO->getWcfCronName();
212
- }
213
  }
6
 
7
  const SCAN_SLUG = 'wcf';
8
 
9
+ /**
10
+ * @return bool
11
+ */
12
+ public function isEnabled() {
13
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
14
+ $oFO = $this->getMod();
15
+ return $oFO->isWcfScanEnabled();
16
+ }
17
+
18
  /**
19
  * @param Shield\Scans\Wcf\ResultsSet $oResults
20
  * @return Shield\Databases\Scanner\EntryVO[]
210
  return $this->getMod()->getDef( 'url_wordress_core_svn' )
211
  .'tags/'.$this->loadWp()->getVersion().'/'.$sFile;
212
  }
 
 
 
 
 
 
 
 
 
213
  }
src/processors/hackprotect_scan_wpv.php CHANGED
@@ -28,6 +28,15 @@ class ICWP_WPSF_Processor_HackProtect_Wpv extends ICWP_WPSF_Processor_HackProtec
28
  }
29
  }
30
 
 
 
 
 
 
 
 
 
 
31
  /**
32
  * @param Shield\Scans\Wpv\ResultsSet $oResults
33
  * @return Shield\Databases\Scanner\EntryVO[]
@@ -313,13 +322,4 @@ class ICWP_WPSF_Processor_HackProtect_Wpv extends ICWP_WPSF_Processor_HackProtec
313
  protected function countVulnerablePlugins() {
314
  return $this->getAllVulnerabilities()->countUniqueSlugsForPluginsContext();
315
  }
316
-
317
- /**
318
- * @return string
319
- */
320
- protected function getCronName() {
321
- /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
322
- $oFO = $this->getMod();
323
- return $oFO->getWpvCronName();
324
- }
325
  }
28
  }
29
  }
30
 
31
+ /**
32
+ * @return bool
33
+ */
34
+ public function isEnabled() {
35
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oFO */
36
+ $oFO = $this->getMod();
37
+ return $oFO->isWpvulnEnabled();
38
+ }
39
+
40
  /**
41
  * @param Shield\Scans\Wpv\ResultsSet $oResults
42
  * @return Shield\Databases\Scanner\EntryVO[]
322
  protected function countVulnerablePlugins() {
323
  return $this->getAllVulnerabilities()->countUniqueSlugsForPluginsContext();
324
  }
 
 
 
 
 
 
 
 
 
325
  }
src/processors/hackprotect_scanner.php CHANGED
@@ -31,11 +31,21 @@ class ICWP_WPSF_Processor_HackProtect_Scanner extends ICWP_WPSF_BaseDbProcessor
31
  if ( $oFO->isWpvulnEnabled() ) {
32
  $this->getSubProcessorWpv()->run();
33
  }
 
 
 
34
  if ( $oFO->isIcEnabled() ) {
35
  // $this->getSubProcessorIntegrity()->run();
36
  }
37
  }
38
 
 
 
 
 
 
 
 
39
  /**
40
  * @return ICWP_WPSF_Processor_HackProtect_Ufc|mixed
41
  */
@@ -76,6 +86,7 @@ class ICWP_WPSF_Processor_HackProtect_Scanner extends ICWP_WPSF_BaseDbProcessor
76
  */
77
  protected function getSubProMap() {
78
  return [
 
79
  'int' => 'ICWP_WPSF_Processor_HackProtect_Integrity',
80
  'ptg' => 'ICWP_WPSF_Processor_HackProtect_Ptg',
81
  'ufc' => 'ICWP_WPSF_Processor_HackProtect_Ufc',
@@ -148,36 +159,4 @@ class ICWP_WPSF_Processor_HackProtect_Scanner extends ICWP_WPSF_BaseDbProcessor
148
  $aDef = $this->getMod()->getDef( 'table_columns_scanner' );
149
  return ( is_array( $aDef ) ? $aDef : array() );
150
  }
151
-
152
- /**
153
- * @deprecated
154
- * @return Scanner\Delete
155
- */
156
- public function getQueryDeleter() {
157
- return parent::getQueryDeleter();
158
- }
159
-
160
- /**
161
- * @deprecated
162
- * @return Scanner\Insert
163
- */
164
- public function getQueryInserter() {
165
- return parent::getQueryInserter();
166
- }
167
-
168
- /**
169
- * @deprecated
170
- * @return Scanner\Select
171
- */
172
- public function getQuerySelector() {
173
- return parent::getQuerySelector();
174
- }
175
-
176
- /**
177
- * @deprecated
178
- * @return Scanner\Update
179
- */
180
- public function getQueryUpdater() {
181
- return parent::getQueryUpdater();
182
- }
183
  }
31
  if ( $oFO->isWpvulnEnabled() ) {
32
  $this->getSubProcessorWpv()->run();
33
  }
34
+ if ( $oFO->isApcEnabled() ) {
35
+ // $this->getSubProcessorApc()->run();
36
+ }
37
  if ( $oFO->isIcEnabled() ) {
38
  // $this->getSubProcessorIntegrity()->run();
39
  }
40
  }
41
 
42
+ /**
43
+ * @return ICWP_WPSF_Processor_HackProtect_Apc|mixed
44
+ */
45
+ public function getSubProcessorApc() {
46
+ return $this->getSubPro( 'apc' );
47
+ }
48
+
49
  /**
50
  * @return ICWP_WPSF_Processor_HackProtect_Ufc|mixed
51
  */
86
  */
87
  protected function getSubProMap() {
88
  return [
89
+ 'apc' => 'ICWP_WPSF_Processor_HackProtect_Apc',
90
  'int' => 'ICWP_WPSF_Processor_HackProtect_Integrity',
91
  'ptg' => 'ICWP_WPSF_Processor_HackProtect_Ptg',
92
  'ufc' => 'ICWP_WPSF_Processor_HackProtect_Ufc',
159
  $aDef = $this->getMod()->getDef( 'table_columns_scanner' );
160
  return ( is_array( $aDef ) ? $aDef : array() );
161
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
src/processors/ips.php CHANGED
@@ -226,34 +226,113 @@ class ICWP_WPSF_Processor_Ips extends ICWP_WPSF_BaseDbProcessor {
226
  /** @var IPs\Update $oUp */
227
  $oUp = $this->getDbHandler()->getQueryUpdater();
228
  $oUp->updateLastAccessAt( $this->getAutoBlackListIp( $sIp ) );
 
 
 
 
 
 
 
 
229
  $this->renderKillPage();
230
  }
231
  }
232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  private function renderKillPage() {
 
234
  /** @var ICWP_WPSF_FeatureHandler_Ips $oFO */
235
  $oFO = $this->getMod();
236
  $oCon = $this->getCon();
 
 
237
 
 
 
 
238
  $nTimeRemaining = max( floor( $oFO->getAutoExpireTime()/60 ), 0 );
239
  $aData = [
240
  'strings' => array(
241
  'title' => sprintf( _wpsf__( "You've been blocked by the %s plugin" ),
242
  sprintf( '<a href="%s" target="_blank">%s</a>',
243
- $oCon->getPluginSpec()[ 'urls' ][ 'repo_home' ],
244
  $oCon->getHumanName()
245
  )
246
  ),
247
- 'lines' => array(
248
  sprintf( _wpsf__( 'Time remaining on black list: %s' ),
249
  sprintf( _n( '%s minute', '%s minutes', $nTimeRemaining, 'wp-simple-firewall' ), $nTimeRemaining )
250
  ),
251
  sprintf( _wpsf__( 'You tripped the security plugin defenses a total of %s times making you a suspect.' ), $oFO->getOptTransgressionLimit() ),
252
  sprintf( _wpsf__( 'If you believe this to be in error, please contact the site owner and quote your IP address below.' ) ),
253
  ),
254
- 'your_ip' => 'Your IP address',
255
- 'ip' => $this->ip(),
256
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  ];
258
  $this->loadWp()
259
  ->wpDie(
@@ -605,14 +684,6 @@ class ICWP_WPSF_Processor_Ips extends ICWP_WPSF_BaseDbProcessor {
605
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Handler();
606
  }
607
 
608
- /**
609
- * @deprecated
610
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Select
611
- */
612
- public function getQuerySelector() {
613
- return $this->getDbHandler()->getQuerySelector();
614
- }
615
-
616
  /**
617
  * @return int
618
  */
@@ -637,30 +708,6 @@ class ICWP_WPSF_Processor_Ips extends ICWP_WPSF_BaseDbProcessor {
637
  return true;
638
  }
639
 
640
- /**
641
- * @deprecated
642
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Delete
643
- */
644
- public function getQueryDeleter() {
645
- return parent::getQueryDeleter();
646
- }
647
-
648
- /**
649
- * @deprecated
650
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Insert
651
- */
652
- public function getQueryInserter() {
653
- return parent::getQueryInserter();
654
- }
655
-
656
- /**
657
- * @deprecated
658
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Update
659
- */
660
- public function getQueryUpdater() {
661
- return parent::getQueryUpdater();
662
- }
663
-
664
  /**
665
  * @deprecated
666
  */
226
  /** @var IPs\Update $oUp */
227
  $oUp = $this->getDbHandler()->getQueryUpdater();
228
  $oUp->updateLastAccessAt( $this->getAutoBlackListIp( $sIp ) );
229
+
230
+ try {
231
+ if ( $this->processAutoUnblockRequest() ) {
232
+ return;
233
+ }
234
+ }
235
+ catch ( \Exception $oE ) {
236
+ }
237
  $this->renderKillPage();
238
  }
239
  }
240
 
241
+ /**
242
+ * @throws \Exception
243
+ */
244
+ private function processAutoUnblockRequest() {
245
+ /** @var ICWP_WPSF_FeatureHandler_Ips $oFO */
246
+ $oFO = $this->getMod();
247
+ $oReq = Services::Request();
248
+
249
+ if ( $oFO->isEnabledAutoUserRecover() && $oReq->isPost()
250
+ && $oReq->request( 'action' ) == $this->prefix() && $oReq->request( 'exec' ) == 'uau' ) {
251
+
252
+ if ( check_admin_referer( $oReq->request( 'exec' ), 'exec_nonce' ) !== 1 ) {
253
+ throw new \Exception( 'Nonce failed' );
254
+ }
255
+ if ( strlen( $oReq->post( 'icwp_wpsf_login_email' ) ) > 0 ) {
256
+ throw new \Exception( 'Email should not be provided in honeypot' );
257
+ }
258
+ $sIp = $this->ip();
259
+ if ( $oReq->post( 'ip' ) != $sIp ) {
260
+ throw new \Exception( 'IP does not match' );
261
+ }
262
+
263
+ /** @var ICWP_WPSF_FeatureHandler_LoginProtect $oLoginFO */
264
+ $oLoginFO = $this->getCon()->getModule( 'login_protect' );
265
+ $sGasp = $oReq->post( $oLoginFO->getGaspKey() );
266
+ if ( empty( $sGasp ) ) {
267
+ throw new \Exception( 'GASP failed' );
268
+ }
269
+
270
+ if ( !$oFO->getCanIpRequestAutoUnblock( $sIp ) ) {
271
+ throw new \Exception( 'IP already processed in the last 24hrs' );
272
+ }
273
+ $oFO->updateIpRequestAutoUnblockTs( $sIp );
274
+
275
+ /** @var IPs\Delete $oDel */
276
+ $oDel = $this->getDbHandler()->getQueryDeleter();
277
+ $oDel->deleteIpFromBlacklists( $sIp );
278
+ Services::WpGeneral()->redirectToHome();
279
+ }
280
+
281
+ return false;
282
+ }
283
+
284
  private function renderKillPage() {
285
+
286
  /** @var ICWP_WPSF_FeatureHandler_Ips $oFO */
287
  $oFO = $this->getMod();
288
  $oCon = $this->getCon();
289
+ /** @var ICWP_WPSF_FeatureHandler_LoginProtect $oLoginFO */
290
+ $oLoginFO = $oCon->getModule( 'login_protect' );
291
 
292
+ $sUniqId = 'uau'.uniqid();
293
+
294
+ $sIp = $this->ip();
295
  $nTimeRemaining = max( floor( $oFO->getAutoExpireTime()/60 ), 0 );
296
  $aData = [
297
  'strings' => array(
298
  'title' => sprintf( _wpsf__( "You've been blocked by the %s plugin" ),
299
  sprintf( '<a href="%s" target="_blank">%s</a>',
300
+ $oCon->getPluginSpec()[ 'meta' ][ 'url_repo_home' ],
301
  $oCon->getHumanName()
302
  )
303
  ),
304
+ 'lines' => array(
305
  sprintf( _wpsf__( 'Time remaining on black list: %s' ),
306
  sprintf( _n( '%s minute', '%s minutes', $nTimeRemaining, 'wp-simple-firewall' ), $nTimeRemaining )
307
  ),
308
  sprintf( _wpsf__( 'You tripped the security plugin defenses a total of %s times making you a suspect.' ), $oFO->getOptTransgressionLimit() ),
309
  sprintf( _wpsf__( 'If you believe this to be in error, please contact the site owner and quote your IP address below.' ) ),
310
  ),
311
+ 'your_ip' => 'Your IP address',
312
+ 'ip' => $sIp,
313
+ 'gasp_element' => $this->getMod()->renderTemplate(
314
+ 'snippets/gasp_js.php',
315
+ array(
316
+ 'sCbName' => $oLoginFO->getGaspKey(),
317
+ 'sLabel' => $oLoginFO->getTextImAHuman(),
318
+ 'sAlert' => $oLoginFO->getTextPleaseCheckBox(),
319
+ 'sMustJs' => _wpsf__( 'You MUST enable Javascript to be able to login' ),
320
+ 'sUniqId' => $sUniqId,
321
+ 'sUniqElem' => 'icwp_wpsf_login_p'.$sUniqId,
322
+ 'strings' => array(
323
+ 'loading' => _wpsf__( 'Loading' )
324
+ )
325
+ )
326
+ ),
327
+ ),
328
+ 'vars' => array(
329
+ 'nonce' => $oFO->getNonceActionData( 'uau' ),
330
+ 'ip' => $sIp,
331
+ ),
332
+ 'flags' => array(
333
+ 'is_autorecover' => $oFO->isEnabledAutoUserRecover(),
334
+ 'is_uau_permitted' => $oFO->getCanIpRequestAutoUnblock( $sIp ),
335
+ ),
336
  ];
337
  $this->loadWp()
338
  ->wpDie(
684
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Handler();
685
  }
686
 
 
 
 
 
 
 
 
 
687
  /**
688
  * @return int
689
  */
708
  return true;
709
  }
710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  /**
712
  * @deprecated
713
  */
src/processors/loginprotect_intentprovider_base.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_WPSF_Processor_BaseWpsf {
4
 
5
  /**
@@ -94,18 +96,16 @@ abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_
94
  $sKey = $this->getStub().'_validated';
95
  return ( $oUser instanceof WP_User )
96
  && $this->hasValidSecret( $oUser )
97
- && $this->loadWpUsers()->metaVoForUser( $this->prefix(), $oUser->ID )->{$sKey} === true;
98
  }
99
 
100
  /**
101
- * @since 6.9.0 removed fallback to old user meta
102
  * @param WP_User $oUser
103
  * @return string
104
  */
105
  protected function getSecret( WP_User $oUser ) {
106
  $sKey = $this->getStub().'_secret';
107
- $oMeta = $this->loadWpUsers()
108
- ->metaVoForUser( $this->prefix(), $oUser->ID );
109
  $sSecret = $oMeta->{$sKey};
110
  return empty( $sSecret ) ? '' : $oMeta->{$sKey};
111
  }
@@ -139,7 +139,7 @@ abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_
139
  * @return $this
140
  */
141
  public function deleteSecret( $oUser ) {
142
- $oMeta = $this->loadWpUsers()->metaVoForUser( $this->prefix(), $oUser->ID );
143
  $sKey = $this->getStub().'_secret';
144
  $oMeta->{$sKey} = null;
145
  return $this;
@@ -162,7 +162,7 @@ abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_
162
  */
163
  public function setProfileValidated( $oUser, $bValidated = true ) {
164
  $sKey = $this->getStub().'_validated';
165
- $oMeta = $this->loadWpUsers()->metaVoForUser( $this->prefix(), $oUser->ID );
166
  $oMeta->{$sKey} = $bValidated;
167
  return $this;
168
  }
@@ -173,7 +173,7 @@ abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_
173
  * @return $this
174
  */
175
  protected function setSecret( $oUser, $sNewSecret ) {
176
- $oMeta = $this->loadWpUsers()->metaVoForUser( $this->prefix(), $oUser->ID );
177
  $sKey = $this->getStub().'_secret';
178
  $oMeta->{$sKey} = $sNewSecret;
179
  return $this;
1
  <?php
2
 
3
+ use FernleafSystems\Wordpress\Services\Services;
4
+
5
  abstract class ICWP_WPSF_Processor_LoginProtect_IntentProviderBase extends ICWP_WPSF_Processor_BaseWpsf {
6
 
7
  /**
96
  $sKey = $this->getStub().'_validated';
97
  return ( $oUser instanceof WP_User )
98
  && $this->hasValidSecret( $oUser )
99
+ && $this->getCon()->getUserMeta( $oUser )->{$sKey} === true;
100
  }
101
 
102
  /**
 
103
  * @param WP_User $oUser
104
  * @return string
105
  */
106
  protected function getSecret( WP_User $oUser ) {
107
  $sKey = $this->getStub().'_secret';
108
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
 
109
  $sSecret = $oMeta->{$sKey};
110
  return empty( $sSecret ) ? '' : $oMeta->{$sKey};
111
  }
139
  * @return $this
140
  */
141
  public function deleteSecret( $oUser ) {
142
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
143
  $sKey = $this->getStub().'_secret';
144
  $oMeta->{$sKey} = null;
145
  return $this;
162
  */
163
  public function setProfileValidated( $oUser, $bValidated = true ) {
164
  $sKey = $this->getStub().'_validated';
165
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
166
  $oMeta->{$sKey} = $bValidated;
167
  return $this;
168
  }
173
  * @return $this
174
  */
175
  protected function setSecret( $oUser, $sNewSecret ) {
176
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
177
  $sKey = $this->getStub().'_secret';
178
  $oMeta->{$sKey} = $sNewSecret;
179
  return $this;
src/processors/loginprotect_intentprovider_ga.php CHANGED
@@ -20,6 +20,7 @@ class ICWP_WPSF_Processor_LoginProtect_GoogleAuthenticator extends ICWP_WPSF_Pro
20
  $oCon = $this->getCon();
21
 
22
  $bValidatedProfile = $this->hasValidatedProfile( $oUser );
 
23
  $aData = array(
24
  'has_validated_profile' => $bValidatedProfile,
25
  'user_google_authenticator_secret' => $this->getSecret( $oUser ),
20
  $oCon = $this->getCon();
21
 
22
  $bValidatedProfile = $this->hasValidatedProfile( $oUser );
23
+
24
  $aData = array(
25
  'has_validated_profile' => $bValidatedProfile,
26
  'user_google_authenticator_secret' => $this->getSecret( $oUser ),
src/processors/plugin.php CHANGED
@@ -4,15 +4,14 @@ use FernleafSystems\Wordpress\Services\Services;
4
 
5
  class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
6
 
7
- use \FernleafSystems\Wordpress\Plugin\Shield\Crons\StandardCron;
8
-
9
  /**
10
  */
11
  public function run() {
12
  parent::run();
13
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
14
  $oFO = $this->getMod();
15
- $this->setupCron();
 
16
 
17
  $this->removePluginConflicts();
18
  $this->getSubProBadge()
@@ -32,10 +31,11 @@ class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
32
  break;
33
 
34
  case 'importexport_export':
 
35
  case 'importexport_handshake':
36
  case 'importexport_updatenotified':
37
  if ( $oFO->isImportExportPermitted() ) {
38
- $this->getSubProImportExport()->runAction();
39
  }
40
  break;
41
  default:
@@ -45,21 +45,6 @@ class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
45
  add_action( 'admin_footer', array( $this, 'printAdminFooterItems' ), 100, 0 );
46
  }
47
 
48
- /**
49
- * @return string
50
- * @throws \Exception
51
- */
52
- protected function getCronName() {
53
- return $this->getMod()->prefix( 'daily' );
54
- }
55
-
56
- /**
57
- * Use the included action to hook into the plugin's daily cron
58
- */
59
- public function runCron() {
60
- do_action( $this->getMod()->prefix( 'daily_cron' ) );
61
- }
62
-
63
  public function onWpLoaded() {
64
  if ( $this->getCon()->isValidAdminArea() ) {
65
  $this->maintainPluginLoadPosition();
@@ -73,6 +58,13 @@ class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
73
  return $this->getSubPro( 'badge' );
74
  }
75
 
 
 
 
 
 
 
 
76
  /**
77
  * @return ICWP_WPSF_Processor_Plugin_Tracking|mixed
78
  */
@@ -103,6 +95,7 @@ class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
103
  'importexport' => 'ICWP_WPSF_Processor_Plugin_ImportExport',
104
  'notes' => 'ICWP_WPSF_Processor_Plugin_Notes',
105
  'tracking' => 'ICWP_WPSF_Processor_Plugin_Tracking',
 
106
  ];
107
  }
108
 
4
 
5
  class ICWP_WPSF_Processor_Plugin extends ICWP_WPSF_Processor_BasePlugin {
6
 
 
 
7
  /**
8
  */
9
  public function run() {
10
  parent::run();
11
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
12
  $oFO = $this->getMod();
13
+ $this->getSubProCronDaily()
14
+ ->run();
15
 
16
  $this->removePluginConflicts();
17
  $this->getSubProBadge()
31
  break;
32
 
33
  case 'importexport_export':
34
+ case 'importexport_import':
35
  case 'importexport_handshake':
36
  case 'importexport_updatenotified':
37
  if ( $oFO->isImportExportPermitted() ) {
38
+ add_action( 'init', [ $this->getSubProImportExport(), 'runAction' ] );
39
  }
40
  break;
41
  default:
45
  add_action( 'admin_footer', array( $this, 'printAdminFooterItems' ), 100, 0 );
46
  }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  public function onWpLoaded() {
49
  if ( $this->getCon()->isValidAdminArea() ) {
50
  $this->maintainPluginLoadPosition();
58
  return $this->getSubPro( 'badge' );
59
  }
60
 
61
+ /**
62
+ * @return ICWP_WPSF_Processor_Plugin_CronDaily|mixed
63
+ */
64
+ protected function getSubProCronDaily() {
65
+ return $this->getSubPro( 'crondaily' );
66
+ }
67
+
68
  /**
69
  * @return ICWP_WPSF_Processor_Plugin_Tracking|mixed
70
  */
95
  'importexport' => 'ICWP_WPSF_Processor_Plugin_ImportExport',
96
  'notes' => 'ICWP_WPSF_Processor_Plugin_Notes',
97
  'tracking' => 'ICWP_WPSF_Processor_Plugin_Tracking',
98
+ 'crondaily' => 'ICWP_WPSF_Processor_Plugin_CronDaily',
99
  ];
100
  }
101
 
src/processors/plugin_crondaily.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ use FernleafSystems\Wordpress\Services\Services;
4
+
5
+ class ICWP_WPSF_Processor_Plugin_CronDaily extends ICWP_WPSF_Processor_BaseWpsf {
6
+
7
+ use \FernleafSystems\Wordpress\Plugin\Shield\Crons\StandardCron;
8
+
9
+ /**
10
+ */
11
+ public function run() {
12
+ parent::run();
13
+ $this->setupCron();
14
+ }
15
+
16
+ /**
17
+ * @return string
18
+ * @throws \Exception
19
+ */
20
+ protected function getCronName() {
21
+ return $this->getMod()->prefix( 'daily' );
22
+ }
23
+
24
+ /**
25
+ * Use the included action to hook into the plugin's daily cron
26
+ */
27
+ public function runCron() {
28
+ do_action( $this->getMod()->prefix( 'daily_cron' ) );
29
+ }
30
+ }
src/processors/plugin_importexport.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
 
3
- use \FernleafSystems\Wordpress\Services\Services;
 
4
 
5
  class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWpsf {
6
 
@@ -11,24 +12,54 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
11
  add_action( $this->prefix( 'importexport_notify' ), array( $this, 'runWhitelistNotify' ) );
12
 
13
  if ( $oFO->hasImportExportMasterImportUrl() ) {
14
- try {
15
- $this->setupCronImport();
16
- }
17
- catch ( \Exception $oE ) {
18
- error_log( $oE->getMessage() );
19
- }
20
  }
21
  }
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  public function runWhitelistNotify() {
24
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
25
  $oFO = $this->getMod();
26
 
27
  if ( $oFO->hasImportExportWhitelistSites() ) {
28
 
29
- $oFs = $this->loadFS();
30
  foreach ( $oFO->getImportExportWhitelist() as $sUrl ) {
31
- $oFs->getUrl(
32
  $sUrl,
33
  array(
34
  'blocking' => false,
@@ -46,22 +77,181 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
46
  }
47
 
48
  public function runAction() {
49
- switch ( $this->loadRequest()->query( 'shield_action' ) ) {
50
 
51
- case 'importexport_export':
52
- add_action( 'init', array( $this, 'runOptionsExport' ) );
53
- break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
- case 'importexport_handshake':
56
- add_action( 'init', array( $this, 'runOptionsExportHandshake' ) );
57
- break;
 
 
 
 
 
 
 
 
 
58
 
59
- case 'importexport_updatenotified':
60
- add_action( 'init', array( $this, 'runOptionsUpdateNotified' ) );
61
- break;
 
62
 
63
- default:
64
- break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
  }
67
 
@@ -122,13 +312,15 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
122
 
123
  /**
124
  */
125
- public function runOptionsExport() {
126
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
127
  $oFO = $this->getMod();
128
  $oReq = $this->loadRequest();
129
 
130
  $sSecretKey = $oReq->query( 'secret', '' );
131
- $bNetwork = $oReq->query( 'network', '' ) === 'Y';
 
 
132
  $sUrl = $this->loadDP()->validateSimpleHttpUrl( $oReq->query( 'url', '' ) );
133
 
134
  if ( !$oFO->isImportExportSecretKey( $sSecretKey ) && !$this->isUrlOnWhitelist( $sUrl ) ) {
@@ -153,20 +345,30 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
153
  else {
154
  $nCode = 0;
155
  $bSuccess = true;
156
- $aData = apply_filters( $oFO->prefix( 'gather_options_for_export' ), array() );
157
  $sMessage = 'Options Exported Successfully';
158
 
159
  $this->addToAuditEntry(
160
  sprintf( _wpsf__( 'Options exported to site %s.' ), $sUrl ), 1, 'options_exported'
161
  );
162
 
163
- if ( $bNetwork ) {
164
- $oFO->addUrlToImportExportWhitelistUrls( $sUrl );
165
- $this->addToAuditEntry(
166
- sprintf( _wpsf__( 'Site added to export white list: %s.' ), $sUrl ),
167
- 1,
168
- 'export_whitelist_site_added'
169
- );
 
 
 
 
 
 
 
 
 
 
170
  }
171
  }
172
 
@@ -207,33 +409,25 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
207
  }
208
 
209
  /**
210
- * @throws \Exception
211
- */
212
- protected function setupCronImport() {
213
- /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
214
- $oFO = $this->getMod();
215
- $this->loadWpCronProcessor()
216
- ->setNextRun( strtotime( 'tomorrow 1am' ) - get_option( 'gmt_offset' )*HOUR_IN_SECONDS + rand( 0, 1800 ) )
217
- ->createCronJob( $this->getCronName(), array( $this, 'cron_autoImport' ) );
218
- // For auto update whitelist notifications:
219
- add_action( $oFO->prefix( 'importexport_updatenotified' ), array( $this, 'cron_autoImport' ) );
220
- add_action( $this->getMod()->prefix( 'deactivate_plugin' ), array( $this, 'deleteCron' ) );
221
- }
222
-
223
- /**
224
- * @param string $sMasterSiteUrl
225
- * @param string $sSecretKey
226
- * @param bool $bEnableNetwork
227
- * @param string $sSiteResponse
228
  * @return int
229
  */
230
- public function runImport( $sMasterSiteUrl, $sSecretKey = '', $bEnableNetwork = false, &$sSiteResponse = '' ) {
231
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
232
  $oFO = $this->getMod();
233
  $oDP = $this->loadDP();
234
 
 
 
 
 
235
  $aParts = parse_url( $sMasterSiteUrl );
236
 
 
 
237
  $bCheckKeyFormat = !$oFO->hasImportExportMasterImportUrl();
238
  $sSecretKey = preg_replace( '#[^0-9a-z]#i', '', $sSecretKey );
239
 
@@ -273,7 +467,7 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
273
  'url' => $this->loadWp()->getHomeUrl()
274
  );
275
  // Don't send the network setup request if it's the cron.
276
- if ( !$this->loadWp()->isCron() ) {
277
  $aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
278
  }
279
 
@@ -298,24 +492,16 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
298
  $nErrorCode = 8;
299
  }
300
  else {
301
- $sHash = md5( serialize( $aParts[ 'data' ] ) );
302
- if ( $sHash != $oFO->getImportExportLastImportHash() ) {
303
- do_action( $oFO->prefix( 'import_options' ), $aParts[ 'data' ] );
304
- $this->addToAuditEntry(
305
- sprintf( _wpsf__( 'Options imported from %s.' ), $sMasterSiteUrl ),
306
- 1,
307
- 'options_imported'
308
- );
309
- $oFO->setImportExportLastImportHash( md5( serialize( $aParts[ 'data' ] ) ) );
310
 
311
- // Fix for the overwriting of the Master Site URL with an empty string.
312
- if ( !$oFO->hasImportExportMasterImportUrl() ) {
313
- $oFO->setImportExportMasterImportUrl( $sMasterSiteUrl );
 
 
314
  }
315
  }
316
-
317
- // if it's network enabled, we save the new master URL.
318
- if ( $bEnableNetwork ) {
319
  $this->addToAuditEntry(
320
  sprintf( _wpsf__( 'Master Site URL set to %s.' ), $sMasterSiteUrl ),
321
  1,
@@ -323,6 +509,9 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
323
  );
324
  $oFO->setImportExportMasterImportUrl( $sMasterSiteUrl );
325
  }
 
 
 
326
 
327
  $nErrorCode = 0;
328
  }
@@ -332,21 +521,32 @@ class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWp
332
  return $nErrorCode;
333
  }
334
 
335
- public function cron_autoImport() {
 
 
 
 
 
336
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
337
  $oFO = $this->getMod();
338
- $this->runImport( $oFO->getImportExportMasterImportUrl() );
339
- }
340
-
341
- public function deleteCron() {
342
- $this->loadWpCronProcessor()->deleteCronJob( $this->getCronName() );
 
 
 
 
 
343
  }
344
 
345
  /**
346
- * @return string
347
  */
348
- protected function getCronName() {
 
349
  $oFO = $this->getMod();
350
- return $oFO->prefixOptionKey( $oFO->getDef( 'importexport_cron_name' ) );
351
  }
352
  }
1
  <?php
2
 
3
+ use FernleafSystems\Wordpress\Plugin\Shield;
4
+ use FernleafSystems\Wordpress\Services\Services;
5
 
6
  class ICWP_WPSF_Processor_Plugin_ImportExport extends ICWP_WPSF_Processor_BaseWpsf {
7
 
12
  add_action( $this->prefix( 'importexport_notify' ), array( $this, 'runWhitelistNotify' ) );
13
 
14
  if ( $oFO->hasImportExportMasterImportUrl() ) {
15
+ // For auto update whitelist notifications:
16
+ add_action( $oFO->prefix( 'importexport_updatenotified' ), array( $this, 'runImport' ) );
 
 
 
 
17
  }
18
  }
19
 
20
+ /**
21
+ * @return array
22
+ */
23
+ public function buildInsightsVars() {
24
+ /** @var ICWP_WPSF_FeatureHandler_HackProtect $oMod */
25
+ $oMod = $this->getMod();
26
+ $aData = [
27
+ 'vars' => array(
28
+ 'form_nonce' => $oMod->getNonceActionData( 'import_file_upload' ),
29
+ 'form_action' => $oMod->getUrl_AdminPage()
30
+ ),
31
+ 'ajax' => array(
32
+ 'import_from_site' => $oMod->getAjaxActionData( 'import_from_site', true ),
33
+ ),
34
+ 'flags' => array(
35
+ 'can_importexport' => $this->getCon()->isPremiumActive(),
36
+ ),
37
+ 'hrefs' => array(
38
+ 'export_file_download' => $this->createExportFileDownloadLink()
39
+ )
40
+ ];
41
+
42
+ return $aData;
43
+ }
44
+
45
+ /**
46
+ * @return string
47
+ */
48
+ private function createExportFileDownloadLink() {
49
+ /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
50
+ $oFO = $this->getMod();
51
+ $aActionNonce = $oFO->getNonceActionData( 'export_file_download' );
52
+ return add_query_arg( $aActionNonce, $oFO->getUrl_AdminPage() );
53
+ }
54
+
55
  public function runWhitelistNotify() {
56
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
57
  $oFO = $this->getMod();
58
 
59
  if ( $oFO->hasImportExportWhitelistSites() ) {
60
 
 
61
  foreach ( $oFO->getImportExportWhitelist() as $sUrl ) {
62
+ $this->loadFS()->getUrl(
63
  $sUrl,
64
  array(
65
  'blocking' => false,
77
  }
78
 
79
  public function runAction() {
 
80
 
81
+ try {
82
+ $oReq = $this->loadRequest();
83
+ switch ( $oReq->query( 'shield_action' ) ) {
84
+
85
+ case 'importexport_export':
86
+ $this->executeExport( $oReq->query( 'method' ) );
87
+ break;
88
+
89
+ case 'importexport_import':
90
+ $this->executeImport( $oReq->query( 'method' ) );
91
+ break;
92
+
93
+ case 'importexport_handshake':
94
+ $this->runOptionsExportHandshake();
95
+ break;
96
+
97
+ case 'importexport_updatenotified':
98
+ $this->runOptionsUpdateNotified();
99
+ break;
100
+
101
+ default:
102
+ break;
103
+ }
104
+ }
105
+ catch ( \Exception $oE ) {
106
+ }
107
+ }
108
+
109
+ /**
110
+ * @param string $sMethod
111
+ */
112
+ private function executeExport( $sMethod = 'json' ) {
113
+
114
+ try {
115
+ $this->preActionVerify();
116
+
117
+ switch ( $sMethod ) {
118
+ case 'file':
119
+ $this->downloadExportToFile();
120
+ break;
121
+
122
+ case 'json':
123
+ default:
124
+ $this->exportToJsonResponse();
125
+ break;
126
+ }
127
+ }
128
+ catch ( \Exception $oE ) {
129
+ }
130
+ die();
131
+ }
132
+
133
+ /**
134
+ * @param string $sMethod
135
+ */
136
+ private function executeImport( $sMethod = 'file' ) {
137
+
138
+ try {
139
+ $this->preActionVerify();
140
+
141
+ switch ( $sMethod ) {
142
+ case 'file':
143
+ default:
144
+ $this->importFromUploadFile();
145
+ break;
146
+ }
147
+ }
148
+ catch ( \Exception $oE ) {
149
+ }
150
+ die();
151
+ }
152
+
153
+ /**
154
+ * @throws \Exception
155
+ */
156
+ private function downloadExportToFile() {
157
+ if ( !$this->getCon()->isPluginAdmin() ) {
158
+ throw new \Exception( 'Not currently logged-in as admin' );
159
+ }
160
+ $this->doExportDownload();
161
+ }
162
+
163
+ public function doExportDownload() {
164
+ $sExport = json_encode( $this->getExportData() );
165
+ $aData = [
166
+ '# Site URL: '.Services::WpGeneral()->getHomeUrl(),
167
+ '# Export Date: '.Services::WpGeneral()->getTimeStringForDisplay(),
168
+ '# Hash: '.sha1( $sExport ),
169
+ $sExport
170
+ ];
171
+ Services::Data()->downloadStringAsFile(
172
+ implode( "\n", $aData ),
173
+ sprintf( 'shieldexport-%s-%s.json',
174
+ Services::WpGeneral()->getHomeUrl( '', true ),
175
+ $sFilename = date( 'Ymd_His' )
176
+ )
177
+ );
178
+ }
179
+
180
+ /**
181
+ * @throws \Exception
182
+ */
183
+ public function importFromUploadFile() {
184
+ if ( !$this->getCon()->isPluginAdmin() ) {
185
+ throw new \Exception( 'Not currently logged-in as admin' );
186
+ }
187
+
188
+ if ( Services::Request()->post( 'confirm' ) != 'Y' ) {
189
+ throw new \Exception( _wpsf__( 'Please check the box to confirm your intent to overwrite settings' ) );
190
+ };
191
 
192
+ $oFs = Services::WpFs();
193
+ if ( empty( $_FILES ) || !isset( $_FILES[ 'import_file' ] )
194
+ || empty( $_FILES[ 'import_file' ][ 'tmp_name' ] ) ) {
195
+ throw new \Exception( 'Please select a file to upload' );
196
+ }
197
+ if ( $_FILES[ 'import_file' ][ 'size' ] == 0
198
+ || isset( $_FILES[ 'error' ] ) && $_FILES[ 'error' ] != UPLOAD_ERR_OK
199
+ || !$oFs->isFile( $_FILES[ 'import_file' ][ 'tmp_name' ] )
200
+ || filesize( $_FILES[ 'import_file' ][ 'tmp_name' ] ) === 0
201
+ ) {
202
+ throw new \Exception( 'Uploading of file failed' );
203
+ }
204
 
205
+ $sContent = Services::WpFs()->getFileContent( $_FILES[ 'import_file' ][ 'tmp_name' ] );
206
+ if ( empty( $sContent ) ) {
207
+ throw new \Exception( 'File uploaded was empty' );
208
+ }
209
 
210
+ {//filter any comment lines
211
+ $aParts = array_filter(
212
+ array_map( 'trim', explode( "\n", $sContent ) ),
213
+ function ( $sLine ) {
214
+ return ( strpos( $sLine, '{' ) === 0 );
215
+ }
216
+ );
217
+ if ( empty( $aParts ) ) {
218
+ throw new \Exception( 'Options JSON could not be found in uploaded content.' );
219
+ }
220
+ }
221
+ {//parse the options json
222
+ $aData = @json_decode( array_shift( $aParts ), true );
223
+ if ( empty( $aData ) || !is_array( $aData ) ) {
224
+ throw new \Exception( 'Uploaded options data was not of the correct format' );
225
+ }
226
+ }
227
+
228
+ $this->processDataImport( $aData, _wpsf__( 'uploaded file' ) );
229
+ $oFs->deleteFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
230
+ }
231
+
232
+ /**
233
+ * @return array
234
+ */
235
+ private function getExportData() {
236
+ $aD = apply_filters( $this->getMod()->prefix( 'gather_options_for_export' ), array() );
237
+ return is_array( $aD ) ? $aD : [];
238
+ }
239
+
240
+ /**
241
+ * @throws \Exception
242
+ */
243
+ private function preActionVerify() {
244
+ /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
245
+ $oFO = $this->getMod();
246
+
247
+ if ( !$oFO->isPremium() ) {
248
+ throw new \Exception(
249
+ sprintf( _wpsf__( 'Not currently running %s Pro.' ), $this->getCon()->getHumanName() ),
250
+ 1
251
+ );
252
+ }
253
+ if ( !$oFO->isImportExportPermitted() ) {
254
+ throw new \Exception( _wpsf__( 'Export of options is currently disabled.' ), 2 );
255
  }
256
  }
257
 
312
 
313
  /**
314
  */
315
+ private function exportToJsonResponse() {
316
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
317
  $oFO = $this->getMod();
318
  $oReq = $this->loadRequest();
319
 
320
  $sSecretKey = $oReq->query( 'secret', '' );
321
+
322
+ $sNetworkOpt = $oReq->query( 'network', '' );
323
+ $bDoNetwork = !empty( $sNetworkOpt );
324
  $sUrl = $this->loadDP()->validateSimpleHttpUrl( $oReq->query( 'url', '' ) );
325
 
326
  if ( !$oFO->isImportExportSecretKey( $sSecretKey ) && !$this->isUrlOnWhitelist( $sUrl ) ) {
345
  else {
346
  $nCode = 0;
347
  $bSuccess = true;
348
+ $aData = $this->getExportData();
349
  $sMessage = 'Options Exported Successfully';
350
 
351
  $this->addToAuditEntry(
352
  sprintf( _wpsf__( 'Options exported to site %s.' ), $sUrl ), 1, 'options_exported'
353
  );
354
 
355
+ if ( $bDoNetwork ) {
356
+ if ( $sNetworkOpt === 'Y' ) {
357
+ $oFO->addUrlToImportExportWhitelistUrls( $sUrl );
358
+ $this->addToAuditEntry(
359
+ sprintf( _wpsf__( 'Site added to export white list: %s.' ), $sUrl ),
360
+ 1,
361
+ 'export_whitelist_site_added'
362
+ );
363
+ }
364
+ else {
365
+ $oFO->removeUrlFromImportExportWhitelistUrls( $sUrl );
366
+ $this->addToAuditEntry(
367
+ sprintf( _wpsf__( 'Site removed from export white list: %s.' ), $sUrl ),
368
+ 1,
369
+ 'export_whitelist_site_removed'
370
+ );
371
+ }
372
  }
373
  }
374
 
409
  }
410
 
411
  /**
412
+ * @param string $sMasterSiteUrl
413
+ * @param string $sSecretKey
414
+ * @param bool|null $bEnableNetwork
415
+ * @param string $sSiteResponse
 
 
 
 
 
 
 
 
 
 
 
 
 
 
416
  * @return int
417
  */
418
+ public function runImport( $sMasterSiteUrl = '', $sSecretKey = '', $bEnableNetwork = null, &$sSiteResponse = '' ) {
419
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
420
  $oFO = $this->getMod();
421
  $oDP = $this->loadDP();
422
 
423
+ if ( empty( $sMasterSiteUrl ) ) {
424
+ $sMasterSiteUrl = $oFO->getImportExportMasterImportUrl();
425
+ }
426
+
427
  $aParts = parse_url( $sMasterSiteUrl );
428
 
429
+ $sOriginalMasterSiteUrl = $oFO->getImportExportMasterImportUrl();
430
+ $bHadMasterSiteUrl = $oFO->hasImportExportMasterImportUrl();
431
  $bCheckKeyFormat = !$oFO->hasImportExportMasterImportUrl();
432
  $sSecretKey = preg_replace( '#[^0-9a-z]#i', '', $sSecretKey );
433
 
467
  'url' => $this->loadWp()->getHomeUrl()
468
  );
469
  // Don't send the network setup request if it's the cron.
470
+ if ( !is_null( $bEnableNetwork ) && !$this->loadWp()->isCron() ) {
471
  $aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
472
  }
473
 
492
  $nErrorCode = 8;
493
  }
494
  else {
495
+ $this->processDataImport( $aParts[ 'data' ] );
 
 
 
 
 
 
 
 
496
 
497
+ // Fix for the overwriting of the Master Site URL with an empty string.
498
+ // Only do so if we're not turning it off. i.e on or no-change
499
+ if ( is_null( $bEnableNetwork ) ) {
500
+ if ( $bHadMasterSiteUrl && !$oFO->hasImportExportMasterImportUrl() ) {
501
+ $oFO->setImportExportMasterImportUrl( $sOriginalMasterSiteUrl );
502
  }
503
  }
504
+ else if ( $bEnableNetwork === true ) {
 
 
505
  $this->addToAuditEntry(
506
  sprintf( _wpsf__( 'Master Site URL set to %s.' ), $sMasterSiteUrl ),
507
  1,
509
  );
510
  $oFO->setImportExportMasterImportUrl( $sMasterSiteUrl );
511
  }
512
+ else if ( $bEnableNetwork === false ) {
513
+ $oFO->setImportExportMasterImportUrl( '' );
514
+ }
515
 
516
  $nErrorCode = 0;
517
  }
521
  return $nErrorCode;
522
  }
523
 
524
+ /**
525
+ * @param array $aImportData
526
+ * @param string $sImportSource
527
+ * @return bool
528
+ */
529
+ private function processDataImport( $aImportData, $sImportSource = 'unspecified' ) {
530
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
531
  $oFO = $this->getMod();
532
+ $bImported = false;
533
+ if ( md5( serialize( $aImportData ) ) != $oFO->getImportExportLastImportHash() ) {
534
+ do_action( $oFO->prefix( 'import_options' ), $aImportData );
535
+ $this->addToAuditEntry(
536
+ sprintf( _wpsf__( 'Options imported from %s.' ), $sImportSource ),
537
+ 1, 'options_imported'
538
+ );
539
+ $oFO->setImportExportLastImportHash( md5( serialize( $aImportData ) ) );
540
+ }
541
+ return $bImported;
542
  }
543
 
544
  /**
545
+ * Cron callback
546
  */
547
+ public function runDailyCron() {
548
+ /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
549
  $oFO = $this->getMod();
550
+ $this->runImport( $oFO->getImportExportMasterImportUrl() );
551
  }
552
  }
src/processors/plugin_notes.php CHANGED
@@ -40,28 +40,4 @@ class ICWP_WPSF_Processor_Plugin_Notes extends ICWP_WPSF_BaseDbProcessor {
40
  protected function createDbHandler() {
41
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\AdminNotes\Handler();
42
  }
43
-
44
- /**
45
- * @deprecated
46
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\AdminNotes\Insert
47
- */
48
- public function getQueryInserter() {
49
- return parent::getQueryInserter();
50
- }
51
-
52
- /**
53
- * @deprecated
54
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\AdminNotes\Delete
55
- */
56
- public function getQueryDeleter() {
57
- return parent::getQueryDeleter();
58
- }
59
-
60
- /**
61
- * @deprecated
62
- * @return \FernleafSystems\Wordpress\Plugin\Shield\Databases\AdminNotes\Select
63
- */
64
- public function getQuerySelector() {
65
- return parent::getQuerySelector();
66
- }
67
  }
40
  protected function createDbHandler() {
41
  return new \FernleafSystems\Wordpress\Plugin\Shield\Databases\AdminNotes\Handler();
42
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
src/processors/plugin_tracking.php CHANGED
@@ -1,16 +1,9 @@
1
  <?php
2
 
3
- class ICWP_WPSF_Processor_Plugin_Tracking extends ICWP_WPSF_Processor_BasePlugin {
 
4
 
5
- public function run() {
6
- /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
7
- $oFO = $this->getMod();
8
-
9
- if ( $oFO->isTrackingEnabled() ) {
10
- $this->createTrackingCollectionCron();
11
- }
12
- add_action( $oFO->prefix( 'deactivate_plugin' ), array( $this, 'deleteCron' ) );
13
- }
14
 
15
  /**
16
  * @see autoAddToAdminNotices()
@@ -49,34 +42,33 @@ class ICWP_WPSF_Processor_Plugin_Tracking extends ICWP_WPSF_Processor_BasePlugin
49
  }
50
 
51
  /**
 
52
  */
53
- public function sendTrackingData() {
 
54
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
55
  $oFO = $this->getMod();
56
- if ( !$oFO->isTrackingEnabled() || !$oFO->readyToSendTrackingData() ) {
57
- return false;
58
- }
59
 
60
- $aData = $this->collectTrackingData();
61
- if ( empty( $aData ) || !is_array( $aData ) ) {
62
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
 
65
- $mResult = $this->loadFS()->requestUrl(
66
- $oFO->getDef( 'tracking_post_url' ),
67
- array(
68
- 'method' => 'POST',
69
- 'timeout' => 20,
70
- 'redirection' => 5,
71
- 'httpversion' => '1.1',
72
- 'blocking' => true,
73
- 'body' => array( 'tracking_data' => $aData ),
74
- 'user-agent' => 'SHIELD/'.$this->getCon()->getVersion().';'
75
- ),
76
- true
77
- );
78
- $oFO->setTrackingLastSentAt();
79
- return $mResult;
80
  }
81
 
82
  /**
@@ -94,17 +86,17 @@ class ICWP_WPSF_Processor_Plugin_Tracking extends ICWP_WPSF_Processor_BasePlugin
94
  * @return array
95
  */
96
  protected function getBaseTrackingData() {
97
- $oDP = $this->loadDP();
98
- $oWP = $this->loadWp();
99
- $oWpPlugins = $this->loadWpPlugins();
100
  return array(
101
  'env' => array(
102
  'options' => array(
103
- 'php' => $oDP->getPhpVersionCleaned(),
104
  'wordpress' => $oWP->getVersion(),
105
  'slug' => $this->getCon()->getPluginSlug(),
106
  'version' => $this->getCon()->getVersion(),
107
  'is_wpms' => $oWP->isMultisite() ? 1 : 0,
 
108
  'ssl' => is_ssl() ? 1 : 0,
109
  'locale' => get_locale(),
110
  'plugins_total' => count( $oWpPlugins->getPlugins() ),
@@ -116,25 +108,13 @@ class ICWP_WPSF_Processor_Plugin_Tracking extends ICWP_WPSF_Processor_BasePlugin
116
  }
117
 
118
  /**
119
- * @throws \Exception
120
- */
121
- protected function createTrackingCollectionCron() {
122
- $sFullHookName = $this->getCronName();
123
- $this->loadWpCronProcessor()
124
- ->setNextRun( strtotime( 'tomorrow 3am' ) - get_option( 'gmt_offset' )*HOUR_IN_SECONDS + rand( 0, 1800 ) )
125
- ->setRecurrence( 'daily' )
126
- ->createCronJob( $sFullHookName, array( $this, 'sendTrackingData' ) );
127
- }
128
-
129
- public function deleteCron() {
130
- $this->loadWpCronProcessor()->deleteCronJob( $this->getCronName() );
131
- }
132
-
133
- /**
134
- * @return string
135
  */
136
- public function getCronName() {
 
137
  $oFO = $this->getMod();
138
- return $oFO->prefix( $oFO->getDef( 'tracking_cron_handle' ) );
 
 
139
  }
140
  }
1
  <?php
2
 
3
+ use FernleafSystems\Wordpress\Plugin\Shield;
4
+ use FernleafSystems\Wordpress\Services\Services;
5
 
6
+ class ICWP_WPSF_Processor_Plugin_Tracking extends ICWP_WPSF_Processor_BasePlugin {
 
 
 
 
 
 
 
 
7
 
8
  /**
9
  * @see autoAddToAdminNotices()
42
  }
43
 
44
  /**
45
+ * @return bool
46
  */
47
+ private function sendTrackingData() {
48
+ $bSuccess = false;
49
  /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
50
  $oFO = $this->getMod();
 
 
 
51
 
52
+ if ( $oFO->isTrackingEnabled() && $oFO->readyToSendTrackingData() ) {
53
+
54
+ $aData = $this->collectTrackingData();
55
+ if ( !empty( $aData ) && is_array( $aData ) ) {
56
+ $oFO->setTrackingLastSentAt();
57
+ $bSuccess = Services::HttpRequest()->post(
58
+ $oFO->getDef( 'tracking_post_url' ),
59
+ [
60
+ 'timeout' => 20,
61
+ 'redirection' => 5,
62
+ 'httpversion' => '1.1',
63
+ 'blocking' => true,
64
+ 'body' => [ 'tracking_data' => $aData ],
65
+ 'user-agent' => 'SHIELD/'.$this->getCon()->getVersion().';'
66
+ ]
67
+ );
68
+ }
69
  }
70
 
71
+ return $bSuccess;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
 
74
  /**
86
  * @return array
87
  */
88
  protected function getBaseTrackingData() {
89
+ $oWP = Services::WpGeneral();
90
+ $oWpPlugins = Services::WpPlugins();
 
91
  return array(
92
  'env' => array(
93
  'options' => array(
94
+ 'php' => Services::Data()->getPhpVersionCleaned(),
95
  'wordpress' => $oWP->getVersion(),
96
  'slug' => $this->getCon()->getPluginSlug(),
97
  'version' => $this->getCon()->getVersion(),
98
  'is_wpms' => $oWP->isMultisite() ? 1 : 0,
99
+ 'is_cp' => $oWP->isClassicPress() ? 1 : 0,
100
  'ssl' => is_ssl() ? 1 : 0,
101
  'locale' => get_locale(),
102
  'plugins_total' => count( $oWpPlugins->getPlugins() ),
108
  }
109
 
110
  /**
111
+ * Cron callback
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  */
113
+ public function runDailyCron() {
114
+ /** @var ICWP_WPSF_FeatureHandler_Plugin $oFO */
115
  $oFO = $this->getMod();
116
+ if ( $oFO->isTrackingEnabled() ) {
117
+ $this->sendTrackingData();
118
+ }
119
  }
120
  }
src/processors/sessions.php CHANGED
@@ -277,33 +277,4 @@ class ICWP_WPSF_Processor_Sessions extends ICWP_WPSF_BaseDbProcessor {
277
  protected function getAutoExpirePeriod() {
278
  return DAY_IN_SECONDS*self::DAYS_TO_KEEP;
279
  }
280
-
281
- /**
282
- * @return Session\Insert
283
- */
284
- public function getQueryInserter() {
285
- return parent::getQueryInserter();
286
- }
287
-
288
- /**
289
- * @return Session\Delete
290
- */
291
- public function getQueryDeleter() {
292
- return parent::getQueryDeleter();
293
- }
294
-
295
- /**
296
- * @return Session\Select
297
- */
298
- public function getQuerySelector() {
299
- return parent::getQuerySelector();
300
- }
301
-
302
- /**
303
- * @deprecated
304
- * @return Session\Update
305
- */
306
- public function getQueryUpdater() {
307
- return parent::getQueryUpdater();
308
- }
309
  }
277
  protected function getAutoExpirePeriod() {
278
  return DAY_IN_SECONDS*self::DAYS_TO_KEEP;
279
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  }
src/processors/statistics_tally.php CHANGED
@@ -144,28 +144,4 @@ class ICWP_WPSF_Processor_Statistics_Tally extends ICWP_WPSF_BaseDbProcessor {
144
  */
145
  public function deleteTable() {
146
  }
147
-
148
- /**
149
- * @deprecated
150
- * @return Tally\Update
151
- */
152
- public function getUpdater() {
153
- return parent::getQueryUpdater();
154
- }
155
-
156
- /**
157
- * @deprecated
158
- * @return Tally\Insert
159
- */
160
- public function getQueryInserter() {
161
- return parent::getQueryInserter();
162
- }
163
-
164
- /**
165
- * @deprecated
166
- * @return Tally\Select
167
- */
168
- public function getQuerySelector() {
169
- return parent::getQuerySelector();
170
- }
171
  }
144
  */
145
  public function deleteTable() {
146
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  }
src/processors/traffic_logger.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
 
3
  use FernleafSystems\Wordpress\Plugin\Shield\Databases\Traffic;
 
4
 
5
  class ICWP_WPSF_Processor_TrafficLogger extends ICWP_WPSF_BaseDbProcessor {
6
 
@@ -184,20 +185,4 @@ class ICWP_WPSF_Processor_TrafficLogger extends ICWP_WPSF_BaseDbProcessor {
184
  $aDef = $this->getMod()->getDef( 'traffic_table_columns' );
185
  return is_array( $aDef ) ? $aDef : array();
186
  }
187
-
188
- /**
189
- * @deprecated
190
- * @return Traffic\Insert
191
- */
192
- public function getQueryInserter() {
193
- return parent::getQueryInserter();
194
- }
195
-
196
- /**
197
- * @deprecated
198
- * @return Traffic\Select
199
- */
200
- public function getQuerySelector() {
201
- return parent::getQuerySelector();
202
- }
203
  }
1
  <?php
2
 
3
  use FernleafSystems\Wordpress\Plugin\Shield\Databases\Traffic;
4
+ use FernleafSystems\Wordpress\Services\Services;
5
 
6
  class ICWP_WPSF_Processor_TrafficLogger extends ICWP_WPSF_BaseDbProcessor {
7
 
185
  $aDef = $this->getMod()->getDef( 'traffic_table_columns' );
186
  return is_array( $aDef ) ? $aDef : array();
187
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  }
src/processors/user_management.php CHANGED
@@ -138,13 +138,16 @@ class ICWP_WPSF_Processor_UserManagement extends ICWP_WPSF_Processor_BaseWpsf {
138
  return $sContent;
139
  }
140
 
141
- $oWp = $this->loadWp();
142
- $nLastLoginTime = $this->loadWpUsers()->metaVoForUser( $this->prefix(), $nUserId )->last_login_at;
143
-
144
  $sLastLoginText = _wpsf__( 'Not Recorded' );
145
- if ( is_numeric( $nLastLoginTime ) && $nLastLoginTime > 0 ) {
146
- $sLastLoginText = $oWp->getTimeStringForDisplay( $nLastLoginTime );
 
 
 
 
 
147
  }
 
148
  return $sLastLoginText;
149
  }
150
 
138
  return $sContent;
139
  }
140
 
 
 
 
141
  $sLastLoginText = _wpsf__( 'Not Recorded' );
142
+
143
+ $oUser = Services::WpUsers()->getUserById( $nUserId );
144
+ if ( !empty( $oUser ) ) {
145
+ $nLastLoginTime = $this->getCon()->getUserMeta( $oUser )->last_login_at;
146
+ if ( $nLastLoginTime > 0 ) {
147
+ $sLastLoginText = Services::WpGeneral()->getTimeStringForDisplay( $nLastLoginTime );
148
+ }
149
  }
150
+
151
  return $sLastLoginText;
152
  }
153
 
src/query/VOs/ICWP_WPSF_BaseEntryVO.php DELETED
@@ -1,89 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- /**
6
- * @deprecated v7.0.0
7
- * Class ICWP_WPSF_BaseEntryVO
8
- * @property int created_at
9
- * @property int deleted_at
10
- * @property int id
11
- */
12
- class ICWP_WPSF_BaseEntryVO {
13
-
14
- /**
15
- * @var stdClass
16
- */
17
- protected $oRowData;
18
-
19
- /**
20
- * @param stdClass $oRowData
21
- */
22
- public function __construct( $oRowData = null ) {
23
- $this->oRowData = ( $oRowData instanceof stdClass ) ? $oRowData : new stdClass();
24
- }
25
-
26
- /**
27
- * @return int
28
- */
29
- public function getCreatedAt() {
30
- return (int)$this->created_at;
31
- }
32
-
33
- /**
34
- * @return int
35
- */
36
- public function getId() {
37
- return (int)$this->id;
38
- }
39
-
40
- /**
41
- * @return bool
42
- */
43
- public function isDeleted() {
44
- return $this->deleted_at > 0;
45
- }
46
-
47
- /**
48
- * @return stdClass
49
- */
50
- public function getRawData() {
51
- return $this->oRowData;
52
- }
53
-
54
- /**
55
- * @param stdClass $oRowData
56
- * @return $this
57
- */
58
- public function setRawData( $oRowData ) {
59
- $this->oRowData = $oRowData;
60
- return $this;
61
- }
62
-
63
- /**
64
- * @param string $sKey
65
- * @return mixed
66
- */
67
- public function __get( $sKey ) {
68
- $oD = $this->getRawData();
69
- return isset( $oD->{$sKey} ) ? $oD->{$sKey} : null;
70
- }
71
-
72
- /**
73
- * @param string $sKey
74
- * @return bool
75
- */
76
- public function __isset( $sKey ) {
77
- return isset( $this->getRawData()->{$sKey} );
78
- }
79
-
80
- /**
81
- * @param string $sKey
82
- * @param mixed $mValue
83
- * @return $this
84
- */
85
- public function __set( $sKey, $mValue ) {
86
- $this->getRawData()->{$sKey} = $mValue;
87
- return $this;
88
- }
89
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/VOs/ICWP_WPSF_IpsEntryVO.php DELETED
@@ -1,65 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- /**
6
- * @deprecated v7.0.0
7
- * Class ICWP_WPSF_IpsEntryVO
8
- * @property string ip
9
- * @property bool is_range
10
- * @property string label
11
- * @property string list
12
- * @property int last_access_at
13
- * @property int transgressions
14
- */
15
- class ICWP_WPSF_IpsEntryVO extends ICWP_WPSF_BaseEntryVO {
16
-
17
- /**
18
- * @return string
19
- */
20
- public function getIp() {
21
- return (string)$this->ip;
22
- }
23
-
24
- /**
25
- * @return string
26
- */
27
- public function getLabel() {
28
- return (string)$this->label;
29
- }
30
-
31
- /**
32
- * @return int
33
- */
34
- public function getLastAccessAt() {
35
- return (int)$this->last_access_at;
36
- }
37
-
38
- /**
39
- * @return string
40
- */
41
- public function getList() {
42
- return (string)$this->list;
43
- }
44
-
45
- /**
46
- * @return int
47
- */
48
- public function getTransgressions() {
49
- return (int)$this->transgressions;
50
- }
51
-
52
- /**
53
- * @return bool
54
- */
55
- public function hasTransgressions() {
56
- return $this->getTransgressions() > 0;
57
- }
58
-
59
- /**
60
- * @return bool
61
- */
62
- public function isIpRange() {
63
- return (bool)$this->is_range;
64
- }
65
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/audittrail/delete.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_AuditTrail_Delete extends ICWP_WPSF_Query_BaseDelete {
6
-
7
- /**
8
- * @return ICWP_WPSF_Query_AuditTrail_Select
9
- */
10
- protected function getSelector() {
11
- return ( new ICWP_WPSF_Query_AuditTrail_Select() )->setTable( $this->getTable() );
12
- }
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/audittrail/insert.php DELETED
@@ -1,6 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_AuditTrail_Insert extends ICWP_WPSF_Query_BaseInsert {
6
- }
 
 
 
 
 
 
src/query/audittrail/select.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_AuditTrail_Select extends ICWP_WPSF_Query_BaseSelect {
6
-
7
- /**
8
- * @param string $sContext
9
- * @return $this
10
- */
11
- public function filterByContext( $sContext ) {
12
- return $this;
13
- }
14
-
15
- /**
16
- * @param $sContext
17
- * @return int|stdClass[]
18
- */
19
- public function forContext( $sContext ) {
20
- return $this->query();
21
- }
22
-
23
- /**
24
- * @return string
25
- */
26
- protected function getVoName() {
27
- return 'ICWP_WPSF_AuditTrailEntryVO';
28
- }
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/base.php DELETED
@@ -1,263 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_Base extends ICWP_WPSF_Foundation {
6
-
7
- /**
8
- * @var bool
9
- */
10
- protected $bResultsAsVo;
11
-
12
- /**
13
- * @var array
14
- */
15
- protected $aWheres;
16
-
17
- /**
18
- * @var bool
19
- */
20
- protected $bExcludeDeleted;
21
-
22
- /**
23
- * @var int
24
- */
25
- protected $nLimit = 0;
26
-
27
- /**
28
- * @var int
29
- */
30
- protected $nPage;
31
-
32
- /**
33
- * @var string
34
- */
35
- protected $sOrderBy;
36
-
37
- /**
38
- * @var string
39
- */
40
- protected $sTable;
41
-
42
- /**
43
- * @param string $sColumn
44
- * @param string $mValue
45
- * @param string $sOperator
46
- * @return $this
47
- */
48
- public function addWhere( $sColumn, $mValue, $sOperator = '=' ) {
49
- $aWhere = $this->getWheres();
50
- $aWhere[] = sprintf( '`%s`%s"%s"', esc_sql( $sColumn ), esc_sql( $mValue ), $sOperator );
51
- return $this->setWheres( $aWhere );
52
- }
53
-
54
- /**
55
- * @param string $sColumn
56
- * @param mixed $mValue
57
- * @return $this
58
- */
59
- public function addWhereEquals( $sColumn, $mValue ) {
60
- return $this->addWhere( $sColumn, $mValue, '=' );
61
- }
62
-
63
- /**
64
- * @return string
65
- */
66
- public function buildExtras() {
67
- $aExtras = array_filter(
68
- array(
69
- $this->getOrderBy(),
70
- $this->buildLimitPhrase(),
71
- $this->buildOffsetPhrase(),
72
- )
73
- );
74
- return implode( "\n", $aExtras );
75
- }
76
-
77
- /**
78
- * @return string
79
- */
80
- public function buildLimitPhrase() {
81
- return $this->hasLimit() ? sprintf( 'LIMIT %s', $this->getLimit() ) : '';
82
- }
83
-
84
- /**
85
- * @return string
86
- */
87
- public function buildOffsetPhrase() {
88
- return $this->hasLimit() ? sprintf( 'OFFSET %s', $this->getLimit()*$this->getPage() ) : '';
89
- }
90
-
91
- /**
92
- * @return string
93
- */
94
- public function buildWhere() {
95
-
96
- $aParts = $this->getWheres();
97
- if ( $this->isExcludeDeleted() ) {
98
- $aParts[] = '`deleted_at`=0';
99
- }
100
-
101
- return implode( ' AND ', $aParts );
102
- }
103
-
104
- /**
105
- * @return string
106
- */
107
- protected function buildQuery() {
108
- $sQuery = sprintf( $this->getBaseQuery(),
109
- $this->getTable(),
110
- $this->buildWhere(),
111
- $this->buildExtras()
112
- );
113
- return sprintf( $sQuery,
114
- $this->getTable(),
115
- $this->buildWhere(),
116
- $this->buildExtras()
117
- );
118
- }
119
-
120
- /**
121
- * @return string
122
- */
123
- protected function getBaseQuery() {
124
- return "
125
- SELECT * FROM `%s`
126
- WHERE %s
127
- %s
128
- ";
129
- }
130
-
131
- /**
132
- * @return int
133
- */
134
- public function getLimit() {
135
- return max( (int)$this->nLimit, 0 );
136
- }
137
-
138
- /**
139
- * @return string
140
- */
141
- public function getTable() {
142
- return $this->sTable;
143
- }
144
-
145
- /**
146
- * @return array
147
- */
148
- public function getWheres() {
149
- if ( !is_array( $this->aWheres ) ) {
150
- $this->aWheres = array();
151
- }
152
- return $this->aWheres;
153
- }
154
-
155
- /**
156
- * @return string
157
- */
158
- public function getOrderBy() {
159
- return isset( $this->sOrderBy ) ? $this->sOrderBy : 'ORDER BY `created_at` DESC';
160
- }
161
-
162
- /**
163
- * @return int
164
- */
165
- public function getPage() {
166
- return max( (int)$this->nPage, 1 );
167
- }
168
-
169
- /**
170
- * @return bool
171
- */
172
- public function hasLimit() {
173
- return $this->getLimit() > 0;
174
- }
175
-
176
- /**
177
- * @return bool
178
- */
179
- public function isResultsAsVo() {
180
- return $this->bResultsAsVo;
181
- }
182
-
183
- /**
184
- * @return bool
185
- */
186
- public function isExcludeDeleted() {
187
- return isset( $this->bExcludeDeleted ) ? (bool)$this->bExcludeDeleted : true;
188
- }
189
-
190
- /**
191
- * @return $this
192
- */
193
- public function reset() {
194
- return $this->setLimit( 0 )
195
- ->setWheres( array() )
196
- ->setPage( 1 )
197
- ->setOrderBy( '' );
198
- }
199
-
200
- /**
201
- * @param array $aWheres
202
- * @return $this
203
- */
204
- public function setWheres( $aWheres ) {
205
- $this->aWheres = $aWheres;
206
- return $this;
207
- }
208
-
209
- /**
210
- * @param mixed $bExcludeDeleted
211
- * @return $this
212
- */
213
- public function setIsExcludeDeleted( $bExcludeDeleted ) {
214
- $this->bExcludeDeleted = $bExcludeDeleted;
215
- return $this;
216
- }
217
-
218
- /**
219
- * @param int $nLimit
220
- * @return $this
221
- */
222
- public function setLimit( $nLimit ) {
223
- $this->nLimit = $nLimit;
224
- return $this;
225
- }
226
-
227
- /**
228
- * @param string $sOrderByColumn
229
- * @param string $sOrder
230
- * @return $this
231
- */
232
- public function setOrderBy( $sOrderByColumn, $sOrder = 'DESC' ) {
233
- $this->sOrderBy = sprintf( 'ORDER BY `%s` %s', $sOrderByColumn, $sOrder );
234
- return $this;
235
- }
236
-
237
- /**
238
- * @param int $nPage
239
- * @return $this
240
- */
241
- public function setPage( $nPage ) {
242
- $this->nPage = $nPage;
243
- return $this;
244
- }
245
-
246
- /**
247
- * @param bool $bResultsAsVo
248
- * @return $this
249
- */
250
- public function setResultsAsVo( $bResultsAsVo ) {
251
- $this->bResultsAsVo = $bResultsAsVo;
252
- return $this;
253
- }
254
-
255
- /**
256
- * @param string $sTable
257
- * @return $this
258
- */
259
- public function setTable( $sTable ) {
260
- $this->sTable = $sTable;
261
- return $this;
262
- }
263
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/delete.php DELETED
@@ -1,53 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- abstract class ICWP_WPSF_Query_BaseDelete extends ICWP_WPSF_Query_BaseQuery {
6
-
7
- /**
8
- * @return ICWP_WPSF_Query_BaseSelect
9
- */
10
- abstract protected function getSelector();
11
-
12
- /**
13
- * @return bool
14
- */
15
- public function all() {
16
- return $this->query();
17
- }
18
-
19
- /**
20
- * @param int $nId
21
- * @return bool|int
22
- */
23
- public function deleteById( $nId ) {
24
- return $this->query();
25
- }
26
-
27
- /**
28
- * NOTE: Does not reset() before query, so may be customized with where.
29
- * @param int $nMaxEntries
30
- * @param string $sSortColumn
31
- * @param bool $bOldestFirst
32
- * @return int
33
- * @throws Exception
34
- */
35
- public function deleteExcess( $nMaxEntries, $sSortColumn = 'created_at', $bOldestFirst = true ) {
36
- return 0;
37
- }
38
-
39
- /**
40
- * @return string
41
- */
42
- protected function getBaseQuery() {
43
- return "DELETE FROM `%s` WHERE %s %s";
44
- }
45
-
46
- /**
47
- * Offset never applies to DELETE
48
- * @return string
49
- */
50
- protected function buildOffsetPhrase() {
51
- return '';
52
- }
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/insert.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_BaseInsert extends ICWP_WPSF_Query_BaseQuery {
6
-
7
- /**
8
- * @var array
9
- */
10
- protected $aInsertData;
11
-
12
- /**
13
- * @return array
14
- */
15
- public function getInsertData() {
16
- return is_array( $this->aInsertData ) ? $this->aInsertData : array();
17
- }
18
-
19
- /**
20
- * @param ICWP_WPSF_BaseEntryVO $oEntry
21
- * @return bool
22
- */
23
- public function insert( $oEntry ) {
24
- return false;
25
- }
26
-
27
- /**
28
- * @param array $aInsertData
29
- * @return $this
30
- */
31
- public function setInsertData( $aInsertData ) {
32
- $this->aInsertData = $aInsertData;
33
- return $this;
34
- }
35
-
36
- /**
37
- * Offset never applies
38
- * @return string
39
- */
40
- protected function buildOffsetPhrase() {
41
- return '';
42
- }
43
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/query.php DELETED
@@ -1,355 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- /**
6
- * @deprecated v7.0.0
7
- * Class ICWP_WPSF_Query_BaseQuery
8
- */
9
- abstract class ICWP_WPSF_Query_BaseQuery extends ICWP_WPSF_Foundation {
10
-
11
- /**
12
- * @var bool
13
- */
14
- protected $bResultsAsVo;
15
-
16
- /**
17
- * @var array
18
- */
19
- protected $aWheres;
20
-
21
- /**
22
- * @var bool
23
- */
24
- protected $bExcludeDeleted;
25
-
26
- /**
27
- * @var int
28
- */
29
- protected $nLimit = 0;
30
-
31
- /**
32
- * @var int
33
- */
34
- protected $nPage;
35
-
36
- /**
37
- * @var string
38
- */
39
- protected $sOrderBy;
40
-
41
- /**
42
- * @var string
43
- */
44
- protected $sTable;
45
-
46
- public function __construct() {
47
- $this->customInit();
48
- }
49
-
50
- /**
51
- * override to add custom init actions
52
- */
53
- protected function customInit() {
54
- }
55
-
56
- /**
57
- * @param string $sColumn
58
- * @param string $mValue
59
- * @param string $sOperator
60
- * @return $this
61
- */
62
- public function addWhere( $sColumn, $mValue, $sOperator = '=' ) {
63
- if ( !$this->isValidComparisonOperator( $sOperator ) ) {
64
- return $this; // Exception?
65
- }
66
-
67
- $mValue = esc_sql( $mValue );
68
-
69
- if ( strcasecmp( $sOperator, 'LIKE' ) === 0 ) {
70
- $mValue = sprintf( '%%%s%%', $mValue );
71
- }
72
-
73
- if ( is_string( $mValue ) ) {
74
- $mValue = sprintf( "'%s'", $mValue );
75
- }
76
-
77
- $aWhere = $this->getWheres();
78
- $aWhere[] = sprintf( '`%s` %s %s', esc_sql( $sColumn ), $sOperator, $mValue );
79
- return $this->setWheres( $aWhere );
80
- }
81
-
82
- /**
83
- * @param string $sColumn
84
- * @param mixed $mValue
85
- * @return $this
86
- */
87
- public function addWhereEquals( $sColumn, $mValue ) {
88
- return $this->addWhere( $sColumn, $mValue, '=' );
89
- }
90
-
91
- /**
92
- * @param int $nNewerThanTimeStamp
93
- * @param string $sColumn
94
- * @return $this
95
- */
96
- public function addWhereNewerThan( $nNewerThanTimeStamp, $sColumn = 'created_at' ) {
97
- return $this->addWhere( $sColumn, $nNewerThanTimeStamp, '>' );
98
- }
99
-
100
- /**
101
- * @param int $nOlderThanTimeStamp
102
- * @param string $sColumn
103
- * @return $this
104
- */
105
- public function addWhereOlderThan( $nOlderThanTimeStamp, $sColumn = 'created_at' ) {
106
- return $this->addWhere( $sColumn, $nOlderThanTimeStamp, '<' );
107
- }
108
-
109
- /**
110
- * @param string $sColumn
111
- * @param mixed $mValue
112
- * @return $this
113
- */
114
- public function addWhereSearch( $sColumn, $mValue ) {
115
- return $this->addWhere( $sColumn, $mValue, 'LIKE' );
116
- }
117
-
118
- /**
119
- * @return string
120
- */
121
- public function buildExtras() {
122
- $aExtras = array_filter(
123
- array(
124
- $this->getOrderBy(),
125
- $this->buildLimitPhrase(),
126
- $this->buildOffsetPhrase(),
127
- )
128
- );
129
- return implode( "\n", $aExtras );
130
- }
131
-
132
- /**
133
- * @return string
134
- */
135
- public function buildLimitPhrase() {
136
- return $this->hasLimit() ? sprintf( 'LIMIT %s', $this->getLimit() ) : '';
137
- }
138
-
139
- /**
140
- * @return string
141
- */
142
- protected function buildOffsetPhrase() {
143
- return $this->hasLimit() ? sprintf( 'OFFSET %s', $this->getOffset() ) : '';
144
- }
145
-
146
- /**
147
- * @return int
148
- */
149
- protected function getOffset() {
150
- return (int)$this->getLimit()*( $this->getPage() - 1 );
151
- }
152
-
153
- /**
154
- * @return string
155
- */
156
- public function buildWhere() {
157
-
158
- $aParts = $this->getWheres();
159
- if ( $this->isExcludeDeleted() ) {
160
- $aParts[] = '`deleted_at`=0';
161
- }
162
-
163
- return implode( ' AND ', $aParts );
164
- }
165
-
166
- /**
167
- * @return string
168
- */
169
- public function buildQuery() {
170
- return sprintf( $this->getBaseQuery(),
171
- $this->getTable(),
172
- $this->buildWhere(),
173
- $this->buildExtras()
174
- );
175
- }
176
-
177
- /**
178
- * @return string
179
- */
180
- protected function getBaseQuery() {
181
- return "SELECT * FROM `%s` WHERE %s %s";
182
- }
183
-
184
- /**
185
- * @return bool
186
- */
187
- public function query() {
188
- return false;
189
- }
190
-
191
- /**
192
- * @return int
193
- */
194
- public function getLimit() {
195
- return max( (int)$this->nLimit, 0 );
196
- }
197
-
198
- /**
199
- * @return string
200
- */
201
- public function getTable() {
202
- return $this->sTable;
203
- }
204
-
205
- /**
206
- * @return array
207
- */
208
- public function getWheres() {
209
- if ( !is_array( $this->aWheres ) ) {
210
- $this->aWheres = array();
211
- }
212
- return $this->aWheres;
213
- }
214
-
215
- /**
216
- * @return string
217
- */
218
- public function getOrderBy() {
219
- return !empty( $this->sOrderBy ) ? $this->sOrderBy : 'ORDER BY `created_at` DESC';
220
- }
221
-
222
- /**
223
- * @return int
224
- */
225
- public function getPage() {
226
- return max( (int)$this->nPage, 1 );
227
- }
228
-
229
- /**
230
- * @return bool
231
- */
232
- public function hasLimit() {
233
- return $this->getLimit() > 0;
234
- }
235
-
236
- /**
237
- * @return bool
238
- */
239
- public function hasWheres() {
240
- return count( $this->getWheres() ) > 0;
241
- }
242
-
243
- /**
244
- * @return bool
245
- */
246
- public function isExcludeDeleted() {
247
- return isset( $this->bExcludeDeleted ) ? (bool)$this->bExcludeDeleted : true;
248
- }
249
-
250
- /**
251
- * @return bool
252
- */
253
- public function isResultsAsVo() {
254
- return $this->bResultsAsVo;
255
- }
256
-
257
- /**
258
- * @return $this
259
- */
260
- public function reset() {
261
- return $this->setLimit( 0 )
262
- ->setWheres( array() )
263
- ->setPage( 1 )
264
- ->setOrderBy( '' );
265
- }
266
-
267
- /**
268
- * @param mixed $bExcludeDeleted
269
- * @return $this
270
- */
271
- public function setIsExcludeDeleted( $bExcludeDeleted ) {
272
- $this->bExcludeDeleted = $bExcludeDeleted;
273
- return $this;
274
- }
275
-
276
- /**
277
- * @param int $nLimit
278
- * @return $this
279
- */
280
- public function setLimit( $nLimit ) {
281
- $this->nLimit = $nLimit;
282
- return $this;
283
- }
284
-
285
- /**
286
- * @param string $sOrderByColumn
287
- * @param string $sOrder
288
- * @return $this
289
- */
290
- public function setOrderBy( $sOrderByColumn, $sOrder = 'DESC' ) {
291
- if ( empty( $sOrderByColumn ) ) {
292
- $this->sOrderBy = '';
293
- }
294
- else {
295
- $this->sOrderBy = sprintf( 'ORDER BY `%s` %s', esc_sql( $sOrderByColumn ), esc_sql( $sOrder ) );
296
- }
297
- return $this;
298
- }
299
-
300
- /**
301
- * @param int $nPage
302
- * @return $this
303
- */
304
- public function setPage( $nPage ) {
305
- $this->nPage = $nPage;
306
- return $this;
307
- }
308
-
309
- /**
310
- * @param bool $bResultsAsVo
311
- * @return $this
312
- */
313
- public function setResultsAsVo( $bResultsAsVo ) {
314
- $this->bResultsAsVo = $bResultsAsVo;
315
- return $this;
316
- }
317
-
318
- /**
319
- * @param string $sTable
320
- * @return $this
321
- */
322
- public function setTable( $sTable ) {
323
- $this->sTable = $sTable;
324
- return $this;
325
- }
326
-
327
- /**
328
- * @param array $aWheres
329
- * @return $this
330
- */
331
- public function setWheres( $aWheres ) {
332
- $this->aWheres = $aWheres;
333
- return $this;
334
- }
335
-
336
- /**
337
- * @param ICWP_WPSF_BaseEntryVO $oVo
338
- * @return $this
339
- */
340
- public function setWheresFromVo( $oVo ) {
341
- return $this;
342
- }
343
-
344
- /**
345
- * Very basic
346
- * @param string $sOp
347
- * @return bool
348
- */
349
- protected function isValidComparisonOperator( $sOp ) {
350
- return in_array(
351
- strtoupper( $sOp ),
352
- array( '=', '<', '>', '!=', '<>', '<=', '>=', '<=>', 'LIKE', 'NOT LIKE' )
353
- );
354
- }
355
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/select.php DELETED
@@ -1,204 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- /**
6
- * @deprecated v7.0.0
7
- * Class ICWP_WPSF_Query_BaseSelect
8
- */
9
- class ICWP_WPSF_Query_BaseSelect extends ICWP_WPSF_Query_BaseQuery {
10
-
11
- /**
12
- * @var array
13
- */
14
- protected $aColumnsToSelect;
15
-
16
- /**
17
- * @var array
18
- */
19
- protected $aColumnsDefinition;
20
-
21
- /**
22
- * @var bool
23
- */
24
- protected $bIsCount = false;
25
-
26
- /**
27
- * @param string $sCol
28
- * @return $this
29
- */
30
- public function addColumnToSelect( $sCol ) {
31
- $aCols = $this->getColumnsToSelect();
32
- $aCols[] = $sCol;
33
- return $this->setColumnsToSelect( $aCols );
34
- }
35
-
36
- /**
37
- * @return stdClass[]
38
- */
39
- public function all() {
40
- return $this->reset()->query();
41
- }
42
-
43
- /**
44
- * @param int $nId
45
- * @return stdClass
46
- */
47
- public function byId( $nId ) {
48
- return null;
49
- }
50
-
51
- /**
52
- * @return string
53
- */
54
- public function buildQuery() {
55
- return sprintf( $this->getBaseQuery(),
56
- $this->buildSelect(),
57
- $this->getTable(),
58
- $this->buildWhere(),
59
- $this->buildExtras()
60
- );
61
- }
62
-
63
- /**
64
- * @return string
65
- */
66
- protected function buildSelect() {
67
- $sSubstitute = '*';
68
- if ( $this->isCount() ) {
69
- $sSubstitute = 'COUNT(*)';
70
- }
71
- else if ( $this->hasColumnsToSelect() ) {
72
- $sSubstitute = implode( ',', $this->getColumnsToSelect() );
73
- }
74
- return $sSubstitute;
75
- }
76
-
77
- /**
78
- * @return int
79
- */
80
- public function count() {
81
- return $this->setIsCount( true )->query();
82
- }
83
-
84
- /**
85
- * @return ICWP_WPSF_BaseEntryVO|stdClass|null
86
- */
87
- public function first() {
88
- $aR = $this->query();
89
- return empty( $aR ) ? null : array_shift( $aR );
90
- }
91
-
92
- /**
93
- * @return string
94
- */
95
- protected function getBaseQuery() {
96
- return "SELECT %s FROM `%s` WHERE %s %s";
97
- }
98
-
99
- /**
100
- * @return array
101
- */
102
- public function getColumnsToSelect() {
103
- return is_array( $this->aColumnsToSelect ) ? $this->aColumnsToSelect : array();
104
- }
105
-
106
- /**
107
- * @return string[]
108
- */
109
- public function getColumnsDefinition() {
110
- return is_array( $this->aColumnsDefinition ) ? $this->aColumnsDefinition : array();
111
- }
112
-
113
- /**
114
- * @return ICWP_WPSF_BaseEntryVO
115
- */
116
- public function getVo() {
117
- $sClass = $this->getVoName();
118
- if ( !class_exists( $sClass ) ) {
119
- require_once( dirname( dirname( __FILE__ ) ).'/VOs/'.$sClass.'.php' );
120
- }
121
- return new $sClass();
122
- }
123
-
124
- /**
125
- * @return string
126
- */
127
- protected function getVoName() {
128
- return 'ICWP_WPSF_BaseEntryVO';
129
- }
130
-
131
- /**
132
- * @return bool
133
- */
134
- protected function hasColumnsToSelect() {
135
- return ( count( $this->getColumnsToSelect() ) > 0 );
136
- }
137
-
138
- /**
139
- * @return bool
140
- */
141
- public function isCount() {
142
- return (bool)$this->bIsCount;
143
- }
144
-
145
- /**
146
- * @return stdClass[]|int
147
- */
148
- public function query() {
149
- return $this->isCount() ? $this->queryCount() : $this->querySelect();
150
- }
151
-
152
- /**
153
- * @return array
154
- */
155
- protected function querySelect() {
156
- return [];
157
- }
158
-
159
- /**
160
- * @return int
161
- */
162
- protected function queryCount() {
163
- return 0;
164
- }
165
-
166
- /**
167
- * Verifies the given columns are valid and unique
168
- * @param string[] $aColumns
169
- * @return $this
170
- */
171
- public function setColumnsToSelect( $aColumns ) {
172
- if ( is_array( $aColumns ) ) {
173
- $aColumns = array_filter( array_map( 'trim', $aColumns ) );
174
- $aDef = $this->getColumnsDefinition();
175
- if ( !empty( $aDef ) ) {
176
- foreach ( $aColumns as $nKey => $sCol ) {
177
- if ( !in_array( $sCol, $aDef ) ) {
178
- unset( $aColumns[ $nKey ] );
179
- }
180
- }
181
- }
182
- $this->aColumnsToSelect = array_unique( $aColumns );
183
- }
184
- return $this;
185
- }
186
-
187
- /**
188
- * @param string[] $aColumns
189
- * @return $this
190
- */
191
- public function setColumnsDefinition( $aColumns ) {
192
- $this->aColumnsDefinition = $aColumns;
193
- return $this;
194
- }
195
-
196
- /**
197
- * @param bool $bIsCount
198
- * @return $this
199
- */
200
- public function setIsCount( $bIsCount ) {
201
- $this->bIsCount = $bIsCount;
202
- return $this;
203
- }
204
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/base/update.php DELETED
@@ -1,60 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_BaseUpdate extends ICWP_WPSF_Query_BaseInsert {
6
-
7
- /**
8
- * @var array
9
- */
10
- protected $aUpdateWheres;
11
-
12
- /**
13
- * @return array
14
- */
15
- public function getUpdateData() {
16
- return $this->getInsertData();
17
- }
18
-
19
- /**
20
- * @return array
21
- */
22
- public function getUpdateWheres() {
23
- return is_array( $this->aUpdateWheres ) ? $this->aUpdateWheres : array();
24
- }
25
-
26
- /**
27
- * @param array $aSetData
28
- * @return $this
29
- */
30
- public function setUpdateData( $aSetData ) {
31
- return $this->setInsertData( $aSetData );
32
- }
33
-
34
- /**
35
- * @param array $aUpdateWheres
36
- * @return $this
37
- */
38
- public function setUpdateWheres( $aUpdateWheres ) {
39
- $this->aUpdateWheres = $aUpdateWheres;
40
- return $this;
41
- }
42
-
43
- /**
44
- * @param int $nId
45
- * @return $this
46
- */
47
- public function setUpdateId( $nId ) {
48
- $this->aUpdateWheres = array( 'id' => $nId );
49
- return $this;
50
- }
51
-
52
- /**
53
- * @param ICWP_WPSF_BaseEntryVO $oEntry
54
- * @param array $aUpdateData
55
- * @return bool
56
- */
57
- public function updateEntry( $oEntry, $aUpdateData = array() ) {
58
- return false;
59
- }
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/ips/select.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- /**
6
- * @deprecated v7.0.0
7
- * Class ICWP_WPSF_Query_Ips_Select
8
- */
9
- class ICWP_WPSF_Query_Ips_Select extends ICWP_WPSF_Query_BaseSelect {
10
-
11
- /**
12
- * @param string $sIp
13
- * @return $this
14
- */
15
- public function filterByIp( $sIp ) {
16
- return $this;
17
- }
18
-
19
- /**
20
- * @param string $nLastAccessAfter
21
- * @return $this
22
- */
23
- public function filterByLastAccessAfter( $nLastAccessAfter ) {
24
- return $this;
25
- }
26
-
27
- /**
28
- * @param string $sList
29
- * @return $this
30
- */
31
- public function filterByList( $sList ) {
32
- return $this;
33
- }
34
-
35
- /**
36
- * @param string $sList
37
- * @return ICWP_WPSF_IpsEntryVO[]
38
- */
39
- public function allFromList( $sList ) {
40
- return [];
41
- }
42
-
43
- /**
44
- * @return string
45
- */
46
- protected function getVoName() {
47
- return 'ICWP_WPSF_IpsEntryVO';
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/sessions/delete.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_Sessions_Delete extends ICWP_WPSF_Query_BaseDelete {
6
-
7
- /**
8
- * @param int $bOlderThan
9
- * @return bool
10
- */
11
- public function forExpiredLoginAt( $bOlderThan ) {
12
- return $this->query();
13
- }
14
-
15
- /**
16
- * @param int $bOlderThan
17
- * @return bool
18
- */
19
- public function forExpiredLoginIdle( $bOlderThan ) {
20
- return $this->query();
21
- }
22
-
23
- /**
24
- * @param string $sWpUsername
25
- * @return false|int
26
- */
27
- public function forUsername( $sWpUsername ) {
28
- return $this->query();
29
- }
30
-
31
- /**
32
- * @return ICWP_WPSF_Query_Sessions_Select
33
- */
34
- protected function getSelector() {
35
- return ( new ICWP_WPSF_Query_Sessions_Select() )->setTable( $this->getTable() );
36
- }
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/sessions/insert.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_Sessions_Insert extends ICWP_WPSF_Query_BaseInsert {
6
-
7
- /**
8
- * @param string $sSessionId
9
- * @param string $sUsername
10
- * @return bool
11
- */
12
- public function create( $sSessionId, $sUsername ) {
13
- return $this->query();
14
- }
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/sessions/select.php DELETED
@@ -1,62 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_Sessions_Select extends ICWP_WPSF_Query_BaseSelect {
6
-
7
- /**
8
- * @return array
9
- */
10
- public function all() {
11
- return $this->selectForUserSession();
12
- }
13
-
14
- /**
15
- * @param int $nExpiredBoundary
16
- * @return $this
17
- */
18
- public function filterByLoginNotExpired( $nExpiredBoundary ) {
19
- return $this;
20
- }
21
-
22
- /**
23
- * @param int $nExpiredBoundary
24
- * @return $this
25
- */
26
- public function filterByLoginNotIdleExpired( $nExpiredBoundary ) {
27
- return $this;
28
- }
29
-
30
- /**
31
- * @param int $sUsername
32
- * @return $this
33
- */
34
- public function filterByUsername( $sUsername ) {
35
- return $this;
36
- }
37
-
38
- /**
39
- * @param string $sSessionId
40
- * @param string $sWpUsername
41
- * @return null
42
- */
43
- public function retrieveUserSession( $sSessionId, $sWpUsername = '' ) {
44
- return null;
45
- }
46
-
47
- /**
48
- * @param string $sSessionId
49
- * @param string $sWpUsername
50
- * @return array
51
- */
52
- protected function selectForUserSession( $sSessionId = '', $sWpUsername = '' ) {
53
- return [];
54
- }
55
-
56
- /**
57
- * @return string
58
- */
59
- protected function getVoName() {
60
- return 'ICWP_WPSF_SessionVO';
61
- }
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/sessions/update.php DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_Sessions_Update extends ICWP_WPSF_Query_BaseUpdate {
6
-
7
- /**
8
- * @param $oSession
9
- * @return bool
10
- */
11
- public function startSecurityAdmin( $oSession ) {
12
- return $this->updateSession( $oSession, array( 'secadmin_at' => $this->loadRequest()->ts() ) );
13
- }
14
-
15
- /**
16
- * @param $oSession
17
- * @return bool
18
- */
19
- public function terminateSecurityAdmin( $oSession ) {
20
- return $this->updateSession( $oSession, array( 'secadmin_at' => 0 ) );
21
- }
22
-
23
- /**
24
- * @param $oSession
25
- * @return bool
26
- */
27
- public function updateLastActivity( $oSession ) {
28
- $oR = $this->loadRequest();
29
- return $this->updateSession(
30
- $oSession,
31
- array(
32
- 'last_activity_at' => $oR->ts(),
33
- 'last_activity_uri' => $oR->server( 'REQUEST_URI' )
34
- )
35
- );
36
- }
37
-
38
- /**
39
- * @param $oSession
40
- * @param int $nExpiresAt
41
- * @return bool
42
- */
43
- public function updateLoginIntentExpiresAt( $oSession, $nExpiresAt ) {
44
- return $this->updateSession(
45
- $oSession,
46
- array( 'login_intent_expires_at' => (int)$nExpiresAt )
47
- );
48
- }
49
-
50
- /**
51
- * @param $oSession
52
- * @return bool
53
- */
54
- public function clearLoginIntentCodeEmail( $oSession ) {
55
- return $this->setLoginIntentCodeEmail( $oSession, '' );
56
- }
57
-
58
- /**
59
- * @param $oSession
60
- * @param string $sCode
61
- * @return bool
62
- */
63
- public function setLoginIntentCodeEmail( $oSession, $sCode ) {
64
- return $this->updateSession( $oSession, array( 'li_code_email' => (string)$sCode ) );
65
- }
66
-
67
- /**
68
- * @param $oSession
69
- * @param array $aUpdateData
70
- * @return bool
71
- */
72
- public function updateSession( $oSession, $aUpdateData = array() ) {
73
- return parent::updateEntry( $oSession, $aUpdateData );
74
- }
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/traffic/common.php DELETED
@@ -1,71 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- trait ICWP_WPSF_Query_TrafficEntry_Common {
6
-
7
- /**
8
- * Will test whether the Binary IP can be converted back before applying filter.
9
- * @param mixed $bBinaryIp - IP has already been converted using inet_pton
10
- * @return $this
11
- */
12
- public function filterByIp( $bBinaryIp ) {
13
- return $this;
14
- }
15
-
16
- /**
17
- * Will test whether the Binary IP can be converted back before applying filter.
18
- * @param mixed $bBinaryIp - IP has already been converted using inet_pton
19
- * @return $this
20
- */
21
- public function filterByNotIp( $bBinaryIp ) {
22
- return $this;
23
- }
24
-
25
- /**
26
- * @param bool $bIsLoggedIn - true is logged-in, false is not logged-in
27
- * @return $this
28
- */
29
- public function filterByIsLoggedIn( $bIsLoggedIn ) {
30
- return $this;
31
- }
32
-
33
- /**
34
- * @param bool $bIsTransgression
35
- * @return $this
36
- */
37
- public function filterByIsTransgression( $bIsTransgression ) {
38
- return $this;
39
- }
40
-
41
- /**
42
- * @param string $sTerm
43
- * @return $this
44
- */
45
- public function filterByPathContains( $sTerm ) {
46
- return $this;
47
- }
48
-
49
- /**
50
- * @param int $nId
51
- * @return $this
52
- */
53
- public function filterByUserId( $nId ) {
54
- return $this;
55
- }
56
-
57
- /**
58
- * @param string $sCode
59
- * @return $this
60
- */
61
- public function filterByResponseCode( $sCode ) {
62
- return $this;
63
- }
64
-
65
- /**
66
- * @return string
67
- */
68
- protected function getVoName() {
69
- return 'ICWP_WPSF_TallyVO';
70
- }
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/traffic/delete.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_TrafficEntry_Delete extends ICWP_WPSF_Query_BaseDelete {
6
-
7
- use ICWP_WPSF_Query_TrafficEntry_Common;
8
-
9
- /**
10
- * @return ICWP_WPSF_Query_TrafficEntry_Select
11
- */
12
- protected function getSelector() {
13
- return ( new ICWP_WPSF_Query_TrafficEntry_Select() )->setTable( $this->getTable() );
14
- }
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/query/traffic/insert.php DELETED
@@ -1,6 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_TrafficEntry_Insert extends ICWP_WPSF_Query_BaseInsert {
6
- }
 
 
 
 
 
 
src/query/traffic/select.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- require_once( dirname( dirname( __DIR__ ) ).'/lib/vendor/autoload.php' );
4
-
5
- class ICWP_WPSF_Query_TrafficEntry_Select extends ICWP_WPSF_Query_BaseSelect {
6
-
7
- use ICWP_WPSF_Query_TrafficEntry_Common;
8
-
9
- /**
10
- * @return string
11
- */
12
- protected function getVoName() {
13
- return 'ICWP_WPSF_TrafficEntryVO';
14
- }
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/wizards/plugin.php CHANGED
@@ -654,7 +654,9 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
654
  if ( $bDelete ) {
655
  /** @var ICWP_WPSF_Processor_AuditTrail $oProc */
656
  $oProc = $this->getPluginCon()->getModule( 'audit_trail' )->getProcessor();
657
- $oDeleter = $oProc->getDbHandler()->getQueryDeleter();
 
 
658
  foreach ( $this->getGdprSearchItems() as $sItem ) {
659
  $oDeleter->reset()
660
  ->addWhereSearch( 'wp_username', $sItem )
@@ -746,7 +748,8 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
746
  private function runGdprSearch() {
747
  /** @var ICWP_WPSF_Processor_AuditTrail $oProc */
748
  $oProc = $this->getPluginCon()->getModule( 'audit_trail' )->getProcessor();
749
- $oFinder = $oProc->getDbHandler()
 
750
  ->getQuerySelector()
751
  ->setResultsAsVo( false );
752
 
654
  if ( $bDelete ) {
655
  /** @var ICWP_WPSF_Processor_AuditTrail $oProc */
656
  $oProc = $this->getPluginCon()->getModule( 'audit_trail' )->getProcessor();
657
+ $oDeleter = $oProc->getSubProAuditor()
658
+ ->getDbHandler()
659
+ ->getQueryDeleter();
660
  foreach ( $this->getGdprSearchItems() as $sItem ) {
661
  $oDeleter->reset()
662
  ->addWhereSearch( 'wp_username', $sItem )
748
  private function runGdprSearch() {
749
  /** @var ICWP_WPSF_Processor_AuditTrail $oProc */
750
  $oProc = $this->getPluginCon()->getModule( 'audit_trail' )->getProcessor();
751
+ $oFinder = $oProc->getSubProAuditor()
752
+ ->getDbHandler()
753
  ->getQuerySelector()
754
  ->setResultsAsVo( false );
755
 
templates/twig/snippets/blacklist_die.twig CHANGED
@@ -4,4 +4,25 @@
4
  <li>{{ line }}</li>
5
  {% endfor %}
6
  </ul>
7
- <p style="text-align: center;">{{ strings.your_ip }}: <strong>{{ strings.ip }}</strong></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  <li>{{ line }}</li>
5
  {% endfor %}
6
  </ul>
7
+ <p style="text-align: center;">{{ strings.your_ip }}: <strong>{{ strings.ip }}</strong></p>
8
+ {% if flags.is_autorecover and flags.is_uau_permitted %}
9
+ <style>
10
+ p {
11
+ margin: 10px 0 !important;
12
+ }
13
+ </style>
14
+ <h5 style="margin: 40px 0 10px">Auto-Unblock Your IP</h5>
15
+ <p>You can automatically unblock your IP address by clicking the button below.</p>
16
+ <div style="width: 50%; margin: 20px; border: 1px solid rgba(0,0,0,0.1); padding: 20px 30px 10px;
17
+ background-color: rgba(0,0,0,0.05);">
18
+ <form method="post" action="#">
19
+ {{ strings.gasp_element|raw }}
20
+ <input type="hidden" name="email" value="" />
21
+ <input type="hidden" name="ip" value="{{ vars.ip }}" />
22
+ {% for key,val in vars.nonce %}
23
+ <input type="hidden" name="{{ key }}" value="{{ val }}" />
24
+ {% endfor %}
25
+ <p><button type="submit">Send Unblock Link</button></p>
26
+ </form>
27
+ </div>
28
+ {% endif %}
templates/twig/wpadmin_pages/base.twig CHANGED
@@ -1,7 +1,7 @@
1
  {% block inline_styles %}
2
  {% endblock %}
3
 
4
- <div class="container-fluid">
5
  <div id="odp-body-container" class="odp-admin-page {{ classes.page_container|default('') }}">
6
  {% block h1heading %}<h1 style="height: 0; display: none">&nbsp;</h1>{% endblock %}
7
  <div id="odp-PageContainer">
1
  {% block inline_styles %}
2
  {% endblock %}
3
 
4
+ <div class="container-fluid {{ classes.top_container|default('') }}">
5
  <div id="odp-body-container" class="odp-admin-page {{ classes.page_container|default('') }}">
6
  {% block h1heading %}<h1 style="height: 0; display: none">&nbsp;</h1>{% endblock %}
7
  <div id="odp-PageContainer">
templates/twig/wpadmin_pages/insights_new/base.twig CHANGED
@@ -7,7 +7,7 @@
7
  <div class="col-12">
8
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
9
  <a class="navbar-brand" href="{{ hrefs.nav_home }}" id="navbar-bannerlogo"
10
- style="background-image: url('{{ hrefs.img_banner }}');"
11
  >&nbsp;</a>
12
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
13
  aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
@@ -21,15 +21,24 @@
21
  href="{{ navdata.href }}">{{ navdata.name }}
22
  {% if navdata.active %} <span class="sr-only">(current){% endif %}</a>
23
  {% endfor %}
 
24
  </div>
25
  </div>
26
  {#<form class="form-inline">#}
27
- {#<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">#}
28
- {#<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>#}
29
  {#</form>#}
30
  </nav>
31
  </div>
32
  </div>
 
 
 
 
 
 
 
 
33
  {% endblock %}
34
 
35
  {% block page_main %}
7
  <div class="col-12">
8
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
9
  <a class="navbar-brand" href="{{ hrefs.nav_home }}" id="navbar-bannerlogo"
10
+ style="background-image: url('{{ hrefs.img_banner }}');"
11
  >&nbsp;</a>
12
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
13
  aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
21
  href="{{ navdata.href }}">{{ navdata.name }}
22
  {% if navdata.active %} <span class="sr-only">(current){% endif %}</a>
23
  {% endfor %}
24
+ <div class="nav-item" id="PluginHeadwayChangelog"></div>
25
  </div>
26
  </div>
27
  {#<form class="form-inline">#}
28
+ {#<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">#}
29
+ {#<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>#}
30
  {#</form>#}
31
  </nav>
32
  </div>
33
  </div>
34
+
35
+ <script>
36
+ var HW_config = {
37
+ selector: "#PluginHeadwayChangelog", // CSS selector where to inject the badge
38
+ account: "{{ vars.changelog_id }}"
39
+ }
40
+ </script>
41
+ <script async src="https://cdn.headwayapp.co/widget.js"></script>
42
  {% endblock %}
43
 
44
  {% block page_main %}
templates/twig/wpadmin_pages/insights_new/{traffic/traffic_unavailable.twig → common/feature_unavailable.twig} RENAMED
@@ -1,6 +1,6 @@
1
  <div class="card">
2
  <div class="card-header">
3
- <h5 class="card-title m-0">Traffic Watcher</h5>
4
  </div>
5
  <div class="card-body p-0">
6
  <div class="row">
@@ -8,7 +8,7 @@
8
  <div class="alert alert-warning m-0">
9
  <h6 class="alert-heading">{{ strings.not_available }}</h6>
10
  <p class="mb-0">
11
- <a href="{{ hrefs.go_pro }}" target="_blank"class="alert-link">{{ strings.please_upgrade }} &nearr;</a>
12
  </p>
13
  </div>
14
  </div>
1
  <div class="card">
2
  <div class="card-header">
3
+ <h5 class="card-title m-0">Feature Unavailable</h5>
4
  </div>
5
  <div class="card-body p-0">
6
  <div class="row">
8
  <div class="alert alert-warning m-0">
9
  <h6 class="alert-heading">{{ strings.not_available }}</h6>
10
  <p class="mb-0">
11
+ <a href="{{ hrefs.go_pro }}" target="_blank" class="alert-link">{{ strings.please_upgrade }} &nearr;</a>
12
  </p>
13
  </div>
14
  </div>
templates/twig/wpadmin_pages/insights_new/importexport/from_file.twig ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="row" id="SectionImportExportFile">
2
+
3
+ <div class="col-12">
4
+ <div class="insights_widget card">
5
+ <div class="card-header">
6
+ <h5 class="card-title">Import Options From File</h5>
7
+ <h6 class="card-subtitle text-muted">Supply a previously exported options file</h6>
8
+ </div>
9
+ <div class="card-body p-4">
10
+ <form id="ImportExportFileForm" autocomplete="off" method="post"
11
+ action="{{ vars.form_action }}" enctype="multipart/form-data">
12
+ {% for input_name,input_value in vars.form_nonce %}
13
+ <input type="hidden" name="{{ input_name }}" value="{{ input_value }}" />
14
+ {% endfor %}
15
+ <div class="form-group">
16
+ <label for="ImportFile">Select Options Import File</label>
17
+ <input name="import_file" type="file" class="form-control-file" id="ImportFile">
18
+ </div>
19
+ <div class="form-group">
20
+ <label for="_confirm_file" class="col-form-label">
21
+ <input type="checkbox" class="form-control text-right"
22
+ name="confirm" id="_confirm_file" value="Y" />
23
+ Yes, I Understand Existing Options Will Be Overwritten
24
+ <br />
25
+ <small class="form-text text-muted">
26
+ Please be sure that this is what you intend - it can't be undone.
27
+ </small>
28
+ </label>
29
+ </div>
30
+ <div class="form-group text-right">
31
+ <input id="SubmitForm" href="#" class="btn btn-primary" type="submit"
32
+ value="Import Options From File" />
33
+ </div>
34
+ </form>
35
+ </div>
36
+ </div>
37
+ </div>
38
+
39
+ <div class="col-12 insights_section">
40
+ <div class="insights_widget card">
41
+ <div class="card-header">
42
+ <h5 class="card-title">Download Export File</h5>
43
+ <h6 class="card-subtitle text-muted">Use this file on another site to import options</h6>
44
+ </div>
45
+ <div class="card-body p-4">
46
+ <div class="" id="">
47
+ <div class="form-group text-right">
48
+ <a id="ExportDownload" href="{{ hrefs.export_file_download }}"
49
+ class="btn btn-primary" type="submit">Download Options Export File</a>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+
56
+ </div>
57
+
58
+ <script>
59
+ jQuery( document ).ready( function () {
60
+ jQuery( document ).on( "click", "a#ExportDownload", function () {
61
+ event.preventDefault();
62
+ jQuery.fileDownload( jQuery( this ).attr( 'href' ), {
63
+ preparingMessageHtml: "Downloading file, please wait...",
64
+ failMessageHtml: "There was a problem downloading the file."
65
+ } );
66
+ return false;
67
+ } );
68
+ } );
69
+ </script>
templates/twig/wpadmin_pages/insights_new/importexport/from_site.twig ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="row" id="SectionImportExportFile">
2
+
3
+ <div class="col-12">
4
+ <div class="insights_widget card">
5
+ <div class="card-header">
6
+ <h5 class="card-title">Import From Site</h5>
7
+ <h6 class="card-subtitle text-muted">Import options from another site</h6>
8
+ </div>
9
+ <div class="card-body p-4">
10
+ <form id="ImportSiteForm" class="form-horizontal icwp-wizard-form">
11
+ <input name="wizard-step" value="import" type="hidden" />
12
+
13
+ <div class="form-group">
14
+ <label class="col-form-label" for="MasterSiteUrl">Master Site URL</label>
15
+ <div class="">
16
+ <input type="url" class="form-control"
17
+ name="MasterSiteUrl" id="MasterSiteUrl" placeholder="https://www...">
18
+ <span id="helpBlock"
19
+ class="form-text text-muted">Remember to include <code>http://</code> or <code>https://</code>.</span>
20
+ </div>
21
+ </div>
22
+
23
+ <div class="form-group">
24
+ <label class="col-form-label" for="MasterSiteSecretKey">Master Site Secret Key</label>
25
+ <div class="">
26
+ <input type="text" class="form-control" maxlength="40" minlength="40" autocomplete="off"
27
+ name="MasterSiteSecretKey" id="MasterSiteSecretKey" placeholder="Secret Key">
28
+ <span id="helpBlock" class="form-text text-muted">
29
+ The secret key can be found under<br />
30
+ Shield Security > Settings > Import/Export > Secret Key</span>
31
+ </div>
32
+ </div>
33
+
34
+ <div class="form-group">
35
+
36
+ <label class="col-form-label" for="ShieldNetwork">Create Shield Network</label>
37
+ <div class="form-check">
38
+ <div>
39
+ <input class="form-check-input" type="radio"
40
+ name="ShieldNetwork" id="ShieldNetworkOn" value="Y">
41
+ <label class="form-check-label" for="ShieldNetworkOn">Turn On</label>
42
+ </div>
43
+ <div>
44
+ <input class="form-check-input" type="radio"
45
+ name="ShieldNetwork" id="ShieldNetworkOff" value="N">
46
+ <label class="form-check-label" for="ShieldNetworkOff">Turn Off</label>
47
+ </div>
48
+ <div>
49
+ <input class="form-check-input" type="radio" aria-selected="true" checked="checked"
50
+ name="ShieldNetwork" id="ShieldNetworkNoChange" value="NC">
51
+ <label class="form-check-label" for="ShieldNetworkNoChange">No Change</label>
52
+ </div>
53
+ </div>
54
+ <p id="helpBlock" class="form-text text-muted">
55
+ Checking this option on will link this site to Master site. Options will be
56
+ automatically imported from the Master site each night.
57
+ When you adjust options on the Master site,
58
+ they will be reflected in this site after the automatic import.
59
+ </p>
60
+ </div>
61
+
62
+ <div class="form-group">
63
+ <label for="_confirm_site" class="col-form-label">
64
+ <input type="checkbox" class="form-control text-right"
65
+ name="confirm" id="_confirm_site" value="Y" />
66
+ Yes, I Understand Existing Options Will Be Overwritten
67
+ <br />
68
+ <small class="form-text text-muted">
69
+ Please be sure that this is what you intend - it can't be undone.
70
+ </small>
71
+ </label>
72
+ </div>
73
+
74
+ <div class="form-group text-right">
75
+ <div class="">
76
+ <button type="submit" class="btn btn-primary">Run Options Import</button>
77
+ </div>
78
+ </div>
79
+
80
+ </form>
81
+ </div>
82
+ </div>
83
+ </div>
84
+
85
+ </div>
86
+
87
+ <script>
88
+ jQuery( document ).ready( function () {
89
+ jQuery( 'form#ImportSiteForm' ).icwpWpsfImportExport(
90
+ {
91
+ 'ajax_import_from_site':{{ ajax.import_from_site|raw }}
92
+ }
93
+ );
94
+ } );
95
+ </script>
templates/twig/wpadmin_pages/insights_new/importexport/index.twig ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends '/wpadmin_pages/insights_new/base.twig' %}
2
+
3
+ {% block page_main %}
4
+ <div class="row">
5
+ {% if flags.can_importexport %}
6
+ <div class="col-md-6 insights_section">
7
+ {% include '/wpadmin_pages/insights_new/importexport/from_file.twig' %}
8
+ </div>
9
+ <div class="col-md-6 insights_section">
10
+ {% include '/wpadmin_pages/insights_new/importexport/from_site.twig' %}
11
+ </div>
12
+ {% else %}
13
+ <div class="col-12 insights_section">
14
+ {% include '/wpadmin_pages/insights_new/common/feature_unavailable.twig' %}
15
+ </div>
16
+ {% endif %}
17
+ </div>
18
+ {% endblock %}
templates/twig/wpadmin_pages/insights_new/notes/admin_notes.twig CHANGED
@@ -11,11 +11,11 @@
11
  <div class="input-group-text" style="border-radius: 0">New Note:</div>
12
  </div>
13
  <input class="form-control" id="AdminNote" name="admin_note" type="text"
14
- placeholder="{% if flags.can_notes %}Enter new note here{% else %}Sorry, Admin Notes is a Pro-only feature{% endif %}"
15
  />
16
  <div class="input-group-append">
17
  <button type="submit" class="btn btn-info action insert" style="border-radius: 0;" name="subbutt"
18
- {% if not flags.can_notes %}disabled="disabled"{% endif %}
19
  >Add Note</button>
20
  </div>
21
  </div>
11
  <div class="input-group-text" style="border-radius: 0">New Note:</div>
12
  </div>
13
  <input class="form-control" id="AdminNote" name="admin_note" type="text"
14
+ placeholder="{% if flags.can_adminnotes %}Enter new note here{% else %}Sorry, Admin Notes is a Pro-only feature{% endif %}"
15
  />
16
  <div class="input-group-append">
17
  <button type="submit" class="btn btn-info action insert" style="border-radius: 0;" name="subbutt"
18
+ {% if not flags.can_adminnotes %}disabled="disabled"{% endif %}
19
  >Add Note</button>
20
  </div>
21
  </div>
templates/twig/wpadmin_pages/insights_new/notes/index.twig CHANGED
@@ -2,8 +2,14 @@
2
 
3
  {% block page_main %}
4
  <div class="row">
5
- <div class="col-12 insights_section">
 
6
  {% include '/wpadmin_pages/insights_new/notes/admin_notes.twig' %}
7
- </div>
 
 
 
 
 
8
  </div>
9
  {% endblock %}
2
 
3
  {% block page_main %}
4
  <div class="row">
5
+ {% if flags.can_adminnotes %}
6
+ <div class="col-12 insights_section">
7
  {% include '/wpadmin_pages/insights_new/notes/admin_notes.twig' %}
8
+ </div>
9
+ {% else %}
10
+ <div class="col-12 insights_section">
11
+ {% include '/wpadmin_pages/insights_new/common/feature_unavailable.twig' %}
12
+ </div>
13
+ {% endif %}
14
  </div>
15
  {% endblock %}
templates/twig/wpadmin_pages/insights_new/scans/results/apc.twig ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="row insights_widget" id="SectionScanResultsApc">
2
+ <div class="col-12">
3
+ <div class="card card-scan_results">
4
+
5
+ <div class="card-header">
6
+ <h5 class="card-title">Abandoned Plugin Check</h5>
7
+ <h6 class="card-subtitle text-muted">
8
+ Discover plugins that may have been abandoned by their authors
9
+ </h6>
10
+ </div>
11
+
12
+ <div class="card-body">
13
+
14
+ {% if scan.flags.is_available %}
15
+
16
+ {% if scan.flags.is_enabled %}
17
+
18
+ {% if not scan.flags.has_items %}
19
+ <div class="alert alert-info m-0">No items discovered</div>
20
+ {% else %}
21
+ <div id="TableScanApc" class="container-scantable"></div>
22
+ {% endif %}
23
+
24
+ {% else %}
25
+ {% include '/wpadmin_pages/insights_new/scans/results/'~scankey~'_disabled.twig' %}
26
+ {% endif %}
27
+
28
+ {% else %}
29
+ {% include '/wpadmin_pages/insights_new/scans/results/common_unavailable.twig' %}
30
+ {% endif %}
31
+
32
+ </div>
33
+
34
+ <div class="card-footer">
35
+ <div class="row">
36
+ <div class="col-sm-6">
37
+ {% if scan.flags.has_last_scan %}
38
+ {{ scan.vars.last_scan_at }}
39
+ {% else %}
40
+ {{ strings.never }}
41
+ {% endif %}
42
+ </div>
43
+ <div class="col-sm-6 text-right">
44
+ <a href="{{ scan.hrefs.options }}"
45
+ class="btn btn-sm btn-outline-dark">{{ strings.options }} &rarr;</a>
46
+ </div>
47
+ </div>
48
+ </div>
49
+
50
+ </div>
51
+ </div>
52
+ </div>
53
+ <script>
54
+ var $oTableScanApc = jQuery( '#TableScanApc' ).icwpWpsfAjaxTable(
55
+ {
56
+ 'ajax_render':{{ ajax.render_table_scan|raw }},
57
+ 'req_params': {
58
+ 'fScan': 'apc'
59
+ }
60
+ }
61
+ );
62
+ jQuery( '#SectionScanResultsApc' ).icwpWpsfTableActions(
63
+ {
64
+ 'table': $oTableScanApc,
65
+ 'ajax_bulk_action':{{ ajax.bulk_action|raw }},
66
+ 'ajax_item_ignore':{{ ajax.item_ignore|raw }},
67
+ 'req_params': {
68
+ 'fScan': 'apc'
69
+ }
70
+ }
71
+ );
72
+ </script>
templates/twig/wpadmin_pages/insights_new/scans/results/ptg.twig CHANGED
@@ -1,6 +1,6 @@
1
  <div class="row insights_widget" id="SectionScanResultsPtg">
2
  <div class="col-12">
3
- <div class="card card-scan_results mt-4">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Plugin / Theme Modifications</h5>
1
  <div class="row insights_widget" id="SectionScanResultsPtg">
2
  <div class="col-12">
3
+ <div class="card card-scan_results">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Plugin / Theme Modifications</h5>
templates/twig/wpadmin_pages/insights_new/scans/results/ufc.twig CHANGED
@@ -1,6 +1,6 @@
1
  <div class="row insights_widget" id="SectionScanResultsUfc">
2
  <div class="col-12">
3
- <div class="card card-scan_results mt-4">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Unrecognised Core Files</h5>
1
  <div class="row insights_widget" id="SectionScanResultsUfc">
2
  <div class="col-12">
3
+ <div class="card card-scan_results">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Unrecognised Core Files</h5>
templates/twig/wpadmin_pages/insights_new/scans/results/wcf.twig CHANGED
@@ -1,6 +1,6 @@
1
  <div class="row insights_widget" id="SectionScanResultsWcf">
2
  <div class="col-12">
3
- <div class="card card-scan_results mt-4">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">WordPress Core File Integrity</h5>
1
  <div class="row insights_widget" id="SectionScanResultsWcf">
2
  <div class="col-12">
3
+ <div class="card card-scan_results">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">WordPress Core File Integrity</h5>
templates/twig/wpadmin_pages/insights_new/scans/results/wpv.twig CHANGED
@@ -1,6 +1,6 @@
1
  <div class="row insights_widget" id="SectionScanResultsWpv">
2
  <div class="col-12">
3
- <div class="card card-scan_results mt-4">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Plugin / Theme Vulnerabilities</h5>
1
  <div class="row insights_widget" id="SectionScanResultsWpv">
2
  <div class="col-12">
3
+ <div class="card card-scan_results">
4
 
5
  <div class="card-header">
6
  <h5 class="card-title">Plugin / Theme Vulnerabilities</h5>
templates/twig/wpadmin_pages/insights_new/scans/results/wpv_unavailable.twig DELETED
@@ -1,11 +0,0 @@
1
- <div class="row">
2
- <div class="col-12">
3
- <div class="alert alert-warning m-0">
4
- <h6 class="alert-heading">{{ strings.not_available }}</h6>
5
- <p>{{ strings.please_upgrade }}</p>
6
- <p class="mb-0">
7
- <a href="{{ hrefs.go_pro }}" target="_blank"class="alert-link">{{ strings.please_upgrade }} &nearr;</a>
8
- </p>
9
- </div>
10
- </div>
11
- </div>
 
 
 
 
 
 
 
 
 
 
 
templates/twig/wpadmin_pages/insights_new/scans/scan_areas.twig CHANGED
@@ -1,9 +1,15 @@
1
  <form id="StartScans">
2
  <div class="card">
3
  <div class="card-header">
4
- <h5 class="card-title mb-0">Scan Your Site</h5>
 
 
 
 
 
 
5
  </div>
6
- <div class="card-body pb-2">
7
 
8
  <div class="row">
9
  <div class="col-12">
@@ -14,7 +20,7 @@
14
  <div class="scan-select pl-2 text-nowrap">
15
  <label for="_wcf" class="col-form-label">
16
  <input type="checkbox" class="form-control text-right"
17
- name="wcf" id="_wcf" value="Y" />
18
  WordPress Core Files
19
  <br />
20
  <small class="form-text text-muted">
@@ -28,7 +34,7 @@
28
  <div class="scan-select pl-2 text-nowrap">
29
  <label for="_ufc" class="col-form-label">
30
  <input type="checkbox" class="form-control text-right"
31
- name="ufc" id="_ufc" value="Y" />
32
  Unrecognised Core Files
33
  <br />
34
  <small class="form-text text-muted">
@@ -45,7 +51,7 @@
45
  {% if not scans.ptg.flags.is_enabled %}
46
  disabled="disabled"
47
  {% endif %}
48
- name="ptg" id="_ptg" value="Y" />
49
  Plugin / Theme Modifications
50
  <br />
51
  <small class="form-text text-muted">
@@ -67,7 +73,7 @@
67
  {% if not scans.wpv.flags.is_enabled %}
68
  disabled="disabled"
69
  {% endif %}
70
- name="wpv" id="_wpv" value="Y" />
71
  Plugin / Theme Vulnerabilities
72
  <br />
73
  <small class="form-text text-muted">
1
  <form id="StartScans">
2
  <div class="card">
3
  <div class="card-header">
4
+ <h5 class="card-title mb-0">
5
+ Scan Your Site
6
+ <small>
7
+ <a class="float-right" data-toggle="collapse"
8
+ href="#Collapse_ScanResults">options &updownarrow;</a>
9
+ </small>
10
+ </h5>
11
  </div>
12
+ <div class="card-body pb-2 collapse" id="Collapse_ScanResults">
13
 
14
  <div class="row">
15
  <div class="col-12">
20
  <div class="scan-select pl-2 text-nowrap">
21
  <label for="_wcf" class="col-form-label">
22
  <input type="checkbox" class="form-control text-right"
23
+ name="wcf" id="_wcf" value="Y" checked="checked" aria-selected="true" />
24
  WordPress Core Files
25
  <br />
26
  <small class="form-text text-muted">
34
  <div class="scan-select pl-2 text-nowrap">
35
  <label for="_ufc" class="col-form-label">
36
  <input type="checkbox" class="form-control text-right"
37
+ name="ufc" id="_ufc" value="Y" checked="checked" aria-selected="true" />
38
  Unrecognised Core Files
39
  <br />
40
  <small class="form-text text-muted">
51
  {% if not scans.ptg.flags.is_enabled %}
52
  disabled="disabled"
53
  {% endif %}
54
+ name="ptg" id="_ptg" value="Y" checked="checked" aria-selected="true" />
55
  Plugin / Theme Modifications
56
  <br />
57
  <small class="form-text text-muted">
73
  {% if not scans.wpv.flags.is_enabled %}
74
  disabled="disabled"
75
  {% endif %}
76
+ name="wpv" id="_wpv" value="Y" checked="checked" aria-selected="true" />
77
  Plugin / Theme Vulnerabilities
78
  <br />
79
  <small class="form-text text-muted">
templates/twig/wpadmin_pages/insights_new/scans/scan_results.twig CHANGED
@@ -1,22 +1,58 @@
1
- <div class="row">
2
- {% set scankey = 'wcf' %}
3
- {% set scan = attribute(scans, scankey) %}
4
- <div class="col-lg-12 col-xl-6">
5
- {% include '/wpadmin_pages/insights_new/scans/results/wcf.twig' %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  </div>
7
- {% set scankey = 'ufc' %}
8
- {% set scan = attribute(scans, scankey) %}
9
- <div class="col-lg-12 col-xl-6">
10
- {% include '/wpadmin_pages/insights_new/scans/results/ufc.twig' %}
11
- </div>
12
- {% set scankey = 'ptg' %}
13
- {% set scan = attribute(scans, scankey) %}
14
- <div class="col-12">
15
- {% include '/wpadmin_pages/insights_new/scans/results/ptg.twig' %}
16
- </div>
17
- {% set scankey = 'wpv' %}
18
- {% set scan = attribute(scans, scankey) %}
19
- <div class="col-12">
20
- {% include '/wpadmin_pages/insights_new/scans/results/wpv.twig' %}
 
 
21
  </div>
22
  </div>
1
+ {#<div class="row">#}
2
+ {#{% set scankey = 'wcf' %}#}
3
+ {#{% set scan = attribute(scans, scankey) %}#}
4
+ {#<div class="col-lg-12 col-xl-6">#}
5
+ {#{% include '/wpadmin_pages/insights_new/scans/results/wcf.twig' %}#}
6
+ {#</div>#}
7
+ {#{% set scankey = 'ufc' %}#}
8
+ {#{% set scan = attribute(scans, scankey) %}#}
9
+ {#<div class="col-lg-12 col-xl-6">#}
10
+ {#{% include '/wpadmin_pages/insights_new/scans/results/ufc.twig' %}#}
11
+ {#</div>#}
12
+ {#{% set scankey = 'apc' %}#}
13
+ {#{% set scan = attribute(scans, scankey) %}#}
14
+ {#<div class="col-lg-12 col-xl-6">#}
15
+ {#{% include '/wpadmin_pages/insights_new/scans/results/apc.twig' %}#}
16
+ {#</div>#}
17
+ {#{% set scankey = 'ptg' %}#}
18
+ {#{% set scan = attribute(scans, scankey) %}#}
19
+ {#<div class="col-12">#}
20
+ {#{% include '/wpadmin_pages/insights_new/scans/results/ptg.twig' %}#}
21
+ {#</div>#}
22
+ {#{% set scankey = 'wpv' %}#}
23
+ {#{% set scan = attribute(scans, scankey) %}#}
24
+ {#<div class="col-12">#}
25
+ {#{% include '/wpadmin_pages/insights_new/scans/results/wpv.twig' %}#}
26
+ {#</div>#}
27
+ {#</div>#}
28
+ <div class="row" id="ScanResultsPills">
29
+ <div class="col-sm-3 col-md-2">
30
+ <nav class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
31
+ {% for scankey,scanvars in scans %}
32
+ <a class="nav-link " id="v-pills-home-tab" data-toggle="pill" href="#v-pills-{{ scankey }}"
33
+ role="tab" aria-controls="v-pills-{{ scankey }}" aria-selected="true">
34
+ <span class="badge badge-{% if scanvars.count > 0 %}danger{% else %}info{% endif %}"
35
+ >{{ scanvars.count }}</span>
36
+ {{ scanvars.strings.title }}
37
+ </a>
38
+ {% endfor %}
39
+ </nav>
40
  </div>
41
+ <div class="col-sm-9 col-md-10">
42
+ <div class="tab-content" id="v-pills-tabContent">
43
+ <div class="tab-pane fade show active" id="v-pills-start" role="tabpanel"
44
+ aria-labelledby="v-pills-home-tab">
45
+ <span class="alert alert-dark d-inline-block m-3">&larr; Click a scan to see its results.</span>
46
+ </div>
47
+ {% for scankey,scanvars in scans %}
48
+ <div class="tab-pane " id="v-pills-{{ scankey }}" role="tabpanel"
49
+ aria-labelledby="v-pills-{{ scankey }}-tab">
50
+ {% set scan = attribute(scans, scankey) %}
51
+ {% include '/wpadmin_pages/insights_new/scans/results/'~scankey~'.twig' %}
52
+ </div>
53
+ {% endfor %}
54
+ {#<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">...</div>#}
55
+ {#<div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab">...</div>#}
56
+ </div>
57
  </div>
58
  </div>
templates/twig/wpadmin_pages/insights_new/traffic/index.twig CHANGED
@@ -10,7 +10,7 @@
10
  {% include '/wpadmin_pages/insights_new/traffic/traffic_disabled.twig' %}
11
  {% endif %}
12
  {% else %}
13
- {% include '/wpadmin_pages/insights_new/traffic/traffic_unavailable.twig' %}
14
  {% endif %}
15
  </div>
16
  </div>
10
  {% include '/wpadmin_pages/insights_new/traffic/traffic_disabled.twig' %}
11
  {% endif %}
12
  {% else %}
13
+ {% include '/wpadmin_pages/insights_new/common/feature_unavailable.twig' %}
14
  {% endif %}
15
  </div>
16
  </div>